Nightly build #107
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: Nightly build | |
| on: | |
| schedule: | |
| # Run at 00:00 UTC every day | |
| - cron: '0 0 * * *' | |
| workflow_dispatch: | |
| # Allow manual trigger from Actions tab | |
| permissions: | |
| contents: write | |
| jobs: | |
| tag-and-build: | |
| name: Tag nightly and 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 main | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: main | |
| fetch-depth: 0 | |
| - name: Update nightly tag | |
| if: runner.os == 'Linux' | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git tag -f nightly | |
| git push -f origin nightly | |
| # basic-gfx links a patched raylib built from third_party/raylib-native | |
| # by scripts/build-raylib-native.sh. Install only raylib's build deps; | |
| # no system libraylib needed (Makefile no longer reads pkg-config for | |
| # this target). | |
| - name: Install raylib build deps (Linux) | |
| if: runner.os == 'Linux' && matrix.build_gfx | |
| run: | | |
| set -e | |
| sudo apt-get update | |
| sudo apt-get install -y build-essential git pkg-config \ | |
| libasound2-dev libx11-dev libxrandr-dev libxi-dev \ | |
| libxinerama-dev libxcursor-dev libgl1-mesa-dev libglu1-mesa-dev | |
| - name: Build (Unix) | |
| if: runner.os != 'Windows' | |
| run: | | |
| make | |
| if [ "${{ matrix.build_gfx }}" = "true" ]; then | |
| make basic-gfx | |
| fi | |
| - 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 | |
| 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 | |
| # MSYS2 toolchain for basic-gfx on Windows. No mingw-w64-raylib package | |
| # here — scripts/build-raylib-native.cmd clones + patches raylib 5.5 | |
| # into third_party/raylib-native and links it statically. | |
| - name: Setup MSYS2 (Windows) | |
| 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 | |
| git | |
| - 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 | |
| - name: Run tests (Windows) | |
| if: runner.os == 'Windows' | |
| shell: msys2 {0} | |
| run: | | |
| set -e | |
| for t in tests/*.bas; do | |
| 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 | |
| # basic-gfx.exe statically links libraylib.a — no raylib / glfw3 | |
| # DLLs to bundle. winpthread is statically linked via | |
| # -Wl,-Bstatic -lwinpthread. The binary runs outside MSYS2 with | |
| # no extra dependencies. | |
| 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 main | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: main | |
| fetch-depth: 1 | |
| - 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: Publish nightly release | |
| needs: [tag-and-build, wasm] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: dist | |
| - name: Delete existing nightly release | |
| run: | | |
| gh release delete nightly --yes 2>/dev/null || true | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Create nightly release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: nightly | |
| name: Nightly | |
| body: | | |
| Bleeding-edge build from `main`. Updated automatically every night. | |
| **Use stable [releases](https://github.com/${{ github.repository }}/releases) for production.** | |
| draft: false | |
| files: dist/**/* | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |