Skip to content

Stabilize Glaze architecture, runtime, security, packaging, and cross-platform APIs #145

Stabilize Glaze architecture, runtime, security, packaging, and cross-platform APIs

Stabilize Glaze architecture, runtime, security, packaging, and cross-platform APIs #145

Workflow file for this run

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