fix: preserve SPRITEMODULATE when LOADSPRITE completes async (WASM) #118
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: Build RGC-BASIC on all platforms | |
| on: | |
| push: | |
| tags: | |
| - "v*" | |
| permissions: | |
| contents: write | |
| jobs: | |
| build: | |
| name: Build (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| artifact: basic-linux | |
| archive: basic-linux.tar.gz | |
| outdir: linux | |
| bin: basic | |
| build_gfx: true | |
| - os: macos-latest | |
| artifact: basic-macos | |
| archive: basic-macos.tar.gz | |
| outdir: mac | |
| bin: basic | |
| build_gfx: true | |
| - os: windows-latest | |
| artifact: basic-windows | |
| archive: basic-windows.zip | |
| outdir: windows | |
| bin: basic.exe | |
| build_gfx: true | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 1 | |
| submodules: false | |
| - name: Install raylib (Linux) | |
| if: runner.os == 'Linux' && matrix.build_gfx | |
| run: | | |
| set -e | |
| sudo apt-get update | |
| if sudo apt-get install -y libraylib-dev; then | |
| echo "Installed libraylib-dev from apt" | |
| else | |
| echo "libraylib-dev not available; building raylib from source" | |
| sudo apt-get install -y build-essential cmake git pkg-config \ | |
| libasound2-dev libx11-dev libxrandr-dev libxi-dev \ | |
| libxinerama-dev libxcursor-dev libgl1-mesa-dev libglu1-mesa-dev | |
| git clone --depth 1 https://github.com/raysan5/raylib.git /tmp/raylib | |
| cmake -S /tmp/raylib -B /tmp/raylib/build -DBUILD_SHARED_LIBS=ON | |
| cmake --build /tmp/raylib/build --config Release | |
| sudo cmake --install /tmp/raylib/build | |
| echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/raylib.conf | |
| sudo ldconfig | |
| fi | |
| - name: Install raylib (macOS) | |
| if: runner.os == 'macOS' && matrix.build_gfx | |
| run: | | |
| set -e | |
| export HOMEBREW_NO_AUTO_UPDATE=1 | |
| brew install raylib | |
| - name: Build (Unix) | |
| if: runner.os != 'Windows' | |
| run: | | |
| make | |
| if [ "${{ matrix.build_gfx }}" = "true" ]; then | |
| make basic-gfx | |
| fi | |
| - name: Run GET tests (Unix) | |
| if: runner.os != 'Windows' | |
| run: | | |
| set -e | |
| sh tests/get_test.sh | |
| - name: Run trek demo (piped) | |
| if: runner.os != 'Windows' | |
| run: | | |
| set -e | |
| sh tests/trek_test.sh >/dev/null | |
| - name: Run tests (Unix) | |
| if: runner.os != 'Windows' | |
| run: | | |
| set -e | |
| for t in tests/*.bas; do | |
| # Skip interactive tests that require keyboard input. | |
| # Skip meta tests that are expected to fail (negative tests). | |
| case "$(basename "$t")" in | |
| codes-replaced.bas|locate.bas|get_input_loop.bas|get_while_test.bas|kbuffer.bas|border_option_test.bas|gfx_title_test.bas) | |
| echo "Skipping interactive/GET/GFX-only test $t" | |
| continue | |
| ;; | |
| meta_include_dup_line.bas|meta_include_dup_label.bas|meta_include_circular_a.bas|meta_include_circular_b.bas) | |
| echo "Skipping expected-fail meta test $t" | |
| continue | |
| ;; | |
| esac | |
| echo "Running $t" | |
| ./basic -petscii "$t" >/dev/null | |
| done | |
| - name: Setup MSYS2 (Windows, for raylib) | |
| if: runner.os == 'Windows' && matrix.build_gfx | |
| uses: msys2/setup-msys2@v2 | |
| with: | |
| msystem: MINGW64 | |
| update: true | |
| install: >- | |
| mingw-w64-x86_64-gcc | |
| mingw-w64-x86_64-make | |
| mingw-w64-x86_64-pkg-config | |
| mingw-w64-x86_64-raylib | |
| - name: Build (Windows) | |
| if: runner.os == 'Windows' | |
| shell: msys2 {0} | |
| run: | | |
| set -e | |
| mingw32-make | |
| if [ "${{ matrix.build_gfx }}" = "true" ]; then | |
| mingw32-make basic-gfx | |
| fi | |
| # GET tests skipped on Windows: basic.exe uses _kbhit/_getch (console only), | |
| # not stdin; piped input never reaches the program, so tests would hang. | |
| - name: Run tests (Windows) | |
| if: runner.os == 'Windows' | |
| shell: msys2 {0} | |
| run: | | |
| set -e | |
| for t in tests/*.bas; do | |
| # Skip interactive tests that require keyboard input. | |
| # Skip meta tests that are expected to fail (negative tests). | |
| case "$(basename "$t")" in | |
| codes-replaced.bas|locate.bas|get_input_loop.bas|get_while_test.bas|kbuffer.bas|border_option_test.bas|gfx_title_test.bas) | |
| echo "Skipping interactive/GET/GFX-only test $t" | |
| continue | |
| ;; | |
| meta_include_dup_line.bas|meta_include_dup_label.bas|meta_include_circular_a.bas|meta_include_circular_b.bas) | |
| echo "Skipping expected-fail meta test $t" | |
| continue | |
| ;; | |
| esac | |
| echo "Running $t" | |
| ./basic.exe -petscii "$t" >/dev/null | |
| done | |
| - name: Package artifact (Unix) | |
| if: runner.os != 'Windows' | |
| run: | | |
| mkdir -p out/${{ matrix.outdir }} | |
| cp ${{ matrix.bin }} out/${{ matrix.outdir }}/basic | |
| if [ "${{ matrix.build_gfx }}" = "true" ] && [ -f basic-gfx ]; then | |
| cp basic-gfx out/${{ matrix.outdir }}/basic-gfx | |
| fi | |
| cp -r examples out/${{ matrix.outdir }}/ | |
| cd out | |
| tar czf ${{ matrix.archive }} ${{ matrix.outdir }} | |
| - name: Package artifact (Windows) | |
| if: runner.os == 'Windows' | |
| shell: msys2 {0} | |
| run: | | |
| mkdir -p out/${{ matrix.outdir }} | |
| cp ${{ matrix.bin }} out/${{ matrix.outdir }}/basic.exe | |
| if [ "${{ matrix.build_gfx }}" = "true" ] && [ -f basic-gfx.exe ]; then | |
| cp basic-gfx.exe out/${{ matrix.outdir }}/basic-gfx.exe | |
| for dll in libraylib.dll glfw3.dll; do | |
| [ -f /mingw64/bin/$dll ] && cp /mingw64/bin/$dll out/${{ matrix.outdir }}/ | |
| done | |
| fi | |
| cp -r examples out/${{ matrix.outdir }}/ | |
| cd out | |
| powershell -Command "Compress-Archive -Path '${{ matrix.outdir }}' -DestinationPath '${{ matrix.archive }}'" | |
| - name: Upload build artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ matrix.artifact }} | |
| path: out/${{ matrix.archive }} | |
| wasm: | |
| name: Web / WASM build + browser test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 1 | |
| submodules: false | |
| - name: Install Emscripten (emsdk) | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y python3 git | |
| git clone --depth 1 https://github.com/emscripten-core/emsdk.git "$GITHUB_WORKSPACE/emsdk" | |
| cd "$GITHUB_WORKSPACE/emsdk" | |
| ./emsdk install latest | |
| ./emsdk activate latest | |
| - name: Build WASM | |
| run: | | |
| source "$GITHUB_WORKSPACE/emsdk/emsdk_env.sh" | |
| emcc --version | |
| make basic-wasm basic-wasm-modular basic-wasm-canvas | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Install Playwright | |
| run: | | |
| pip install -r tests/requirements-wasm.txt | |
| python -m playwright install chromium --with-deps | |
| - name: Run WASM browser smoke tests | |
| run: | | |
| python3 tests/wasm_browser_test.py | |
| python3 tests/wasm_browser_canvas_test.py | |
| python3 tests/wasm_canvas_charset_test.py | |
| python3 tests/wasm_tutorial_embed_test.py | |
| - name: Package WASM artifact | |
| run: | | |
| mkdir -p out/wasm | |
| cp web/basic.js web/basic.wasm web/index.html out/wasm/ | |
| cp web/basic-modular.js web/basic-modular.wasm out/wasm/ | |
| cp web/tutorial-embed.js web/tutorial-example.html web/vfs-helpers.js out/wasm/ | |
| cp web/basic-canvas.js web/basic-canvas.wasm web/canvas.html out/wasm/ | |
| cp web/README.md out/wasm/ | |
| cd out | |
| tar czf rgc-basic-wasm.tar.gz wasm | |
| - name: Upload WASM artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: rgc-basic-wasm | |
| path: out/rgc-basic-wasm.tar.gz | |
| release: | |
| name: Release tagged build | |
| needs: [build, wasm] | |
| if: startsWith(github.ref, 'refs/tags/') | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: dist | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| files: dist/**/* | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |