Optimize packed asset loading and release 0.12.0 #59
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: MiniPixels CI | |
| on: | |
| push: | |
| branches: [main] | |
| tags: ["v*"] | |
| pull_request: | |
| branches: [main] | |
| permissions: | |
| contents: write | |
| jobs: | |
| linux: | |
| name: Linux tests and examples | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout MiniPixels | |
| uses: actions/checkout@v7 | |
| with: | |
| path: MiniPixels | |
| - name: Checkout MiniLangCompilerPy | |
| uses: actions/checkout@v7 | |
| with: | |
| repository: MiniLangProject/MiniLangCompilerPy | |
| path: MiniLangCompilerPy | |
| - name: Set up Python | |
| uses: actions/setup-python@v7 | |
| with: | |
| python-version: "3.12" | |
| - name: Install native runtime dependencies | |
| run: | | |
| sudo apt-get update && sudo apt-get install -y xvfb libx11-6 libasound2t64 | |
| python -m pip install -r MiniPixels/requirements.txt | |
| - name: Run MiniPixels tests | |
| working-directory: MiniPixels | |
| run: python tests/run_tests.py --target linux-x64 | |
| - name: Upload Linux test report | |
| if: always() | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: minipixels-linux-test-report | |
| path: MiniPixels/build/tests/foundation-results-linux.xml | |
| if-no-files-found: ignore | |
| - name: Build examples | |
| working-directory: MiniPixels | |
| run: python tools/build_examples.py --target linux-x64 | |
| - name: Smoke X11 presenter | |
| working-directory: MiniPixels | |
| run: | | |
| python ../MiniLangCompilerPy/mlc_win64.py tests/window_renderer_smoke.ml build/tests/window_renderer_smoke -I src -I ../MiniLangCompilerPy --target linux-x64 | |
| xvfb-run -a build/tests/window_renderer_smoke | |
| - name: Smoke optional GPU fallback | |
| working-directory: MiniPixels | |
| run: | | |
| python ../MiniLangCompilerPy/mlc_win64.py tests/gpu_scene_smoke.ml build/tests/gpu_scene_smoke -I src -I ../MiniLangCompilerPy --target linux-x64 | |
| build/tests/gpu_scene_smoke | |
| - name: Build and smoke native MiniLang CLI | |
| working-directory: MiniPixels | |
| run: | | |
| mkdir -p build/tools | |
| python ../MiniLangCompilerPy/mlc_win64.py tools/minipixels_cli.ml build/tools/minipixels -I src -I ../MiniLangCompilerPy --target linux-x64 | |
| build/tools/minipixels info | |
| build/tools/minipixels doctor | |
| build/tools/minipixels validate examples/moving-sprite/minipixels.json | |
| build/tools/minipixels validate examples/scrolling-world/minipixels.json | |
| build/tools/minipixels validate examples/pixel-effects/minipixels.json | |
| build/tools/minipixels validate examples/jump-and-run/minipixels.json | |
| build/tools/minipixels validate examples/tiled-platformer/minipixels.json | |
| build/tools/minipixels generate examples/pixel-effects/minipixels.json build/native-generated/pixel-effects | |
| build/tools/minipixels generate examples/jump-and-run/minipixels.json build/native-generated/jump-and-run/generated | |
| - name: Smoke native MiniLang CLI templates | |
| working-directory: MiniPixels | |
| run: | | |
| tmp=$(mktemp -d) | |
| cp build/tools/minipixels "$tmp/minipixels" | |
| cd "$tmp" | |
| for tpl in basic platformer pixel-art; do | |
| name="demo-$tpl" | |
| ./minipixels new "$name" "$tpl" | |
| ./minipixels validate "$name/minipixels.json" | |
| ./minipixels generate "$name/minipixels.json" | |
| python "$GITHUB_WORKSPACE/MiniLangCompilerPy/mlc_win64.py" "$tmp/$name/src/main.ml" "$tmp/$name/$name" -I "$GITHUB_WORKSPACE/MiniPixels/src" -I "$GITHUB_WORKSPACE/MiniLangCompilerPy" --target linux-x64 | |
| done | |
| windows: | |
| name: Windows tests and examples | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout MiniPixels | |
| uses: actions/checkout@v7 | |
| with: | |
| path: MiniPixels | |
| - name: Checkout MiniLangCompilerPy | |
| uses: actions/checkout@v7 | |
| with: | |
| repository: MiniLangProject/MiniLangCompilerPy | |
| path: MiniLangCompilerPy | |
| - name: Set up Python | |
| uses: actions/setup-python@v7 | |
| with: | |
| python-version: "3.12" | |
| - name: Run MiniPixels tests | |
| working-directory: MiniPixels | |
| run: | | |
| python -m pip install -r requirements.txt | |
| python tests\run_tests.py | |
| - name: Upload test report | |
| if: always() | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: minipixels-test-report | |
| path: MiniPixels/build/tests/foundation-results.xml | |
| if-no-files-found: ignore | |
| - name: Build examples | |
| working-directory: MiniPixels | |
| run: python tools\build_examples.py | |
| - name: Build optional GPU scene runtime | |
| shell: pwsh | |
| working-directory: MiniPixels | |
| run: | | |
| .\native\build-gpu.ps1 -OutputDirectory build\tests | |
| python ..\MiniLangCompilerPy\mlc_win64.py tests\gpu_scene_smoke.ml build\tests\gpu_scene_smoke.exe -I src -I ..\MiniLangCompilerPy | |
| - name: Build native MiniLang CLI | |
| shell: pwsh | |
| working-directory: MiniPixels | |
| run: | | |
| New-Item -ItemType Directory -Force build\tools | Out-Null | |
| python ..\MiniLangCompilerPy\mlc_win64.py tools\minipixels_cli.ml build\tools\minipixels.exe -I src -I ..\MiniLangCompilerPy | |
| .\build\tools\minipixels.exe info | |
| .\build\tools\minipixels.exe doctor | |
| .\build\tools\minipixels.exe validate examples\moving-sprite\minipixels.json | |
| .\build\tools\minipixels.exe validate examples\scrolling-world\minipixels.json | |
| .\build\tools\minipixels.exe validate examples\pixel-effects\minipixels.json | |
| .\build\tools\minipixels.exe validate examples\jump-and-run\minipixels.json | |
| .\build\tools\minipixels.exe validate examples\tiled-platformer\minipixels.json | |
| .\build\tools\minipixels.exe generate examples\pixel-effects\minipixels.json build\native-generated\pixel-effects | |
| .\build\tools\minipixels.exe generate examples\jump-and-run\minipixels.json build\native-generated\jump-and-run\generated | |
| - name: Smoke native MiniLang CLI templates | |
| shell: pwsh | |
| working-directory: MiniPixels | |
| run: | | |
| $tmp = Join-Path $env:TEMP "minipixels-native-cli-smoke" | |
| if (Test-Path $tmp) { Remove-Item -LiteralPath $tmp -Recurse -Force } | |
| New-Item -ItemType Directory -Force $tmp | Out-Null | |
| Copy-Item build\tools\minipixels.exe $tmp\minipixels.exe | |
| Push-Location $tmp | |
| try { | |
| foreach ($tpl in @("basic", "platformer", "pixel-art")) { | |
| $name = "demo-$tpl" | |
| .\minipixels.exe new $name $tpl | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| .\minipixels.exe validate "$name\minipixels.json" | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| .\minipixels.exe generate "$name\minipixels.json" | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| Copy-Item "$env:GITHUB_WORKSPACE\MiniPixels\build\tests\minipixels_audio.dll" "$tmp\$name\minipixels_audio.dll" | |
| python "$env:GITHUB_WORKSPACE\MiniLangCompilerPy\mlc_win64.py" "$tmp\$name\src\main.ml" "$tmp\$name\$name.exe" -I "$env:GITHUB_WORKSPACE\MiniPixels\src" -I "$env:GITHUB_WORKSPACE\MiniLangCompilerPy" | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| } | |
| } finally { | |
| Pop-Location | |
| } | |
| - name: Package SDK | |
| working-directory: MiniPixels | |
| run: python tools\package_sdk.py | |
| - name: Upload SDK artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: minipixels-sdk | |
| path: | | |
| MiniPixels/dist/*-sdk.zip | |
| MiniPixels/dist/*.sha256 | |
| compression-level: 0 | |
| - name: Publish GitHub release | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| shell: pwsh | |
| working-directory: MiniPixels | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| $tag = "${{ github.ref_name }}" | |
| $assets = @("dist/*-sdk.zip", "dist/*.sha256") | |
| gh release view $tag *> $null | |
| if ($LASTEXITCODE -eq 0) { | |
| gh release upload $tag @assets --clobber | |
| } else { | |
| gh release create $tag @assets --title "MiniPixels $tag" --generate-notes | |
| } |