Repository navigation
Stabilize Glaze architecture, runtime, security, packaging, and cross-platform APIs #145
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: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| # CI only needs to read the repository. Keep the default GITHUB_TOKEN surface | |
| # minimal so third-party actions and native packaging steps cannot write back. | |
| permissions: | |
| contents: read | |
| # A PR can receive many small stabilization commits. Only the newest SHA is | |
| # useful; cancel stale runs so they do not consume the cross-platform runners | |
| # or delay feedback for the current head. | |
| concurrency: | |
| group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| test: | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 20 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macOS-latest] | |
| racket-version: ['8.12'] | |
| steps: | |
| - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0 | |
| - name: Install Racket | |
| uses: Bogdanp/setup-racket@2466913449df77df2bad149d1f2fc4e1ea4795dd # v1.15 | |
| with: | |
| version: ${{ matrix.racket-version }} | |
| - name: Install Glaze package | |
| shell: bash | |
| run: raco pkg install --auto --no-docs --link "$PWD" | |
| - name: Compile public entrypoints | |
| run: raco make glaze/main.rkt glaze-cli/cli.rkt scripts/package-entry-smoke.rkt | |
| - name: Run tests | |
| run: raco test glaze-test/ | |
| source-package: | |
| # Release hygiene: prove the filtered source archive is independently | |
| # installable. This job intentionally does not link the checkout first. | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0 | |
| - name: Install Racket | |
| uses: Bogdanp/setup-racket@2466913449df77df2bad149d1f2fc4e1ea4795dd # v1.15 | |
| with: | |
| version: '8.12' | |
| - name: Create source package | |
| shell: bash | |
| run: | | |
| cd .. | |
| raco pkg create --source --format zip glaze | |
| test -s glaze.zip | |
| - name: Install source package archive | |
| shell: bash | |
| run: raco pkg install --auto --no-docs ../glaze.zip | |
| - name: Verify installed facade and CLI | |
| shell: bash | |
| run: | | |
| racket -e '(require glaze) (unless (procedure? run-app) (error "missing run-app"))' | |
| raco glaze help | |
| webview-e2e: | |
| # Real-window WebView end-to-end on each OS: open -> load (title | |
| # commits) -> capture -> navigate -> close -> on-close. Windows needs | |
| # nothing extra (WebView2 runtime is preinstalled); Linux runs under | |
| # Xvfb with the WebKitGTK packages. | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 30 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macOS-latest] | |
| racket-version: ['8.12'] | |
| steps: | |
| - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0 | |
| - name: Install Racket | |
| uses: Bogdanp/setup-racket@2466913449df77df2bad149d1f2fc4e1ea4795dd # v1.15 | |
| with: | |
| version: ${{ matrix.racket-version }} | |
| - name: Install Glaze package | |
| shell: bash | |
| run: raco pkg install --auto --no-docs --link "$PWD" | |
| - name: Install webview deps (Linux) | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev xvfb | |
| - name: Probe webview libraries (Linux debug) | |
| if: runner.os == 'Linux' | |
| run: ldconfig -p | grep -E "libgtk-3|libwebkit2gtk|libglib-2.0|libgdk_pixbuf" | head -10 | |
| - name: Run webview e2e | |
| env: | |
| WEBKIT_DISABLE_DMABUF_RENDERER: '1' | |
| shell: bash | |
| run: | | |
| if [ "$RUNNER_OS" = "Linux" ]; then | |
| xvfb-run -a racket scripts/webview-e2e.rkt | |
| else | |
| racket scripts/webview-e2e.rkt | |
| fi | |
| package: | |
| # Build a sample app with `raco glaze build --installer` on each platform | |
| # and upload the resulting distribution + installer as artifacts. | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 45 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macOS-latest] | |
| racket-version: ['8.12'] | |
| steps: | |
| - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0 | |
| - name: Install Racket | |
| uses: Bogdanp/setup-racket@2466913449df77df2bad149d1f2fc4e1ea4795dd # v1.15 | |
| with: | |
| version: ${{ matrix.racket-version }} | |
| - name: Install Glaze package | |
| shell: bash | |
| run: raco pkg install --auto --no-docs --link "$PWD" | |
| - name: Install packaging dependencies (Linux) | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libayatana-appindicator3-dev libgtk-3-dev | |
| # Do not download and execute AppImageKit's mutable `continuous` | |
| # release in CI. With no AppImage tool installed, Glaze deliberately | |
| # exercises its portable tar.gz installer fallback instead. | |
| - name: Install installer toolchain (Windows) | |
| if: runner.os == 'Windows' | |
| shell: pwsh | |
| run: | | |
| # Glaze supports WiX v4 syntax, but GitHub's latest global `wix` | |
| # tool is now v7 and requires an additional OSMF license flow. | |
| # NSIS is the other supported native Windows installer backend. | |
| choco install nsis -y --no-progress | |
| $nsis = "C:\Program Files (x86)\NSIS" | |
| if (Test-Path $nsis) { $nsis | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append } | |
| - name: Verify packaged entry executes | |
| run: racket scripts/package-entry-smoke.rkt | |
| - name: Scaffold and build a sample app | |
| shell: bash | |
| run: | | |
| raco glaze init sampleapp | |
| cd sampleapp | |
| # Exercise signing where CI can do it without secrets. On macOS, | |
| # ad-hoc signing is verifiable; Windows signing correctly requires a | |
| # real certificate and is covered by argument/tool failure behavior. | |
| if [ "$RUNNER_OS" = "macOS" ]; then | |
| raco glaze build --name sampleapp --version 0.0.1 --out dist --installer --sign - | |
| else | |
| raco glaze build --name sampleapp --version 0.0.1 --out dist --installer | |
| fi | |
| if [ "$RUNNER_OS" = "Linux" ]; then | |
| test -s dist.tar.gz | |
| fi | |
| - name: Verify macOS bundle signature | |
| if: runner.os == 'macOS' | |
| run: | | |
| codesign --verify --strict sampleapp/dist/sampleapp.app | |
| /usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" sampleapp/dist/sampleapp.app/Contents/Info.plist | grep -qx "0.0.1" | |
| - name: Upload distribution | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: glaze-${{ runner.os }}-dist | |
| path: | | |
| sampleapp/dist/ | |
| sampleapp/*.zip | |
| sampleapp/*.tar.gz | |
| sampleapp/dist/*.msi | |
| sampleapp/dist/*.dmg | |
| sampleapp/dist/*.AppImage | |
| package-racket-9-3-macos: | |
| # Regression coverage for the macOS/Racket 9.3 launcher failure reported | |
| # in issue #1. This job executes the final packaged binary, not merely the | |
| # build command. | |
| runs-on: macOS-latest | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0 | |
| - name: Install Racket | |
| uses: Bogdanp/setup-racket@2466913449df77df2bad149d1f2fc4e1ea4795dd # v1.15 | |
| with: | |
| version: '9.3' | |
| - name: Install Glaze package | |
| shell: bash | |
| run: raco pkg install --auto --no-docs --link "$PWD" | |
| - name: Verify packaged entry executes | |
| run: racket scripts/package-entry-smoke.rkt |