Skip to content

Packaging: Intel Mac, DMG images, Windows MSI — the tauri-style matrix #185

Packaging: Intel Mac, DMG images, Windows MSI — the tauri-style matrix

Packaging: Intel Mac, DMG images, Windows MSI — the tauri-style matrix #185

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: read
env:
# Exact Rivet commit the hosts build against (migration policy: pinned).
# Bump together with host code; local dev may track rivet main.
RIVET_PIN: 2fcdd091ddd7fd157fa934ac6053cdf4f9ab6100
jobs:
contract:
name: Contract preflight (i18n + release metadata)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Verify platform i18n copies match shared/i18n
run: scripts/sync-i18n.sh --check
- name: Verify release version alignment
run: bash scripts/check-release-version.sh
core:
name: Racket core (contract tests)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Checkout Rivet at pin
uses: actions/checkout@v4
with:
repository: turinglambdaai/rivet
ref: ${{ env.RIVET_PIN }}
path: rivet
- name: Setup Racket CS 9.3
uses: Bogdanp/setup-racket@v1.15
with:
architecture: x64
distribution: full
variant: CS
version: '9.3'
- name: Link Rivet
run: raco pkg install --auto --no-docs --name rivet --link "$GITHUB_WORKSPACE/rivet"
- name: Core contract tests
run: raco test racket/
# Golden CLI suite (61 cases): byte-identical stdout/stderr/exit codes
# against shared/cli-golden/, run through the system-racket CLI shim.
- name: Golden CLI suite
run: python3 shared/cli-golden/runner.py --binary scripts/taskly-cli.sh
linux-host:
name: Linux host (GTK4 build)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Checkout Rivet at pin
uses: actions/checkout@v4
with:
repository: turinglambdaai/rivet
ref: ${{ env.RIVET_PIN }}
path: rivet
- name: Setup Racket CS 9.3
uses: Bogdanp/setup-racket@v1.15
with:
architecture: x64
distribution: full
variant: CS
version: '9.3'
- name: Install GTK toolchain
run: |
sudo apt-get update
sudo apt-get install -y cmake ninja-build pkg-config \
libgtk-4-dev libadwaita-1-dev libjson-glib-dev \
libsecret-1-dev libglib2.0-dev
- name: Link Rivet
run: raco pkg install --auto --no-docs --name rivet --link "$GITHUB_WORKSPACE/rivet"
- name: Cache embeddable Racket CS
id: cache-racket-embed
uses: actions/cache/restore@v5
with:
path: ${{ runner.temp }}/racket-embed
key: racket-embed-9.3-${{ runner.os }}-${{ runner.arch }}-v1
- name: Build embeddable Racket CS
if: steps.cache-racket-embed.outputs.cache-hit != 'true'
shell: bash
run: |
set -euo pipefail
archive="$RUNNER_TEMP/racket-minimal-9.3-src-builtpkgs.tgz"
source_root="$RUNNER_TEMP/racket-9.3"
build_root="$RUNNER_TEMP/racket-embed-build"
embed_prefix="$RUNNER_TEMP/racket-embed"
curl --fail --location --retry 3 --output "$archive" \
https://download.racket-lang.org/releases/9.3/installers/racket-minimal-9.3-src-builtpkgs.tgz
echo "3a01324d559a15e3f1f58b0c57a92bb344dce534e72e564e0d8b75e3b9c65295 $archive" | sha256sum --check
tar -xzf "$archive" -C "$RUNNER_TEMP"
mkdir -p "$build_root"
cd "$build_root"
"$source_root/src/configure" --prefix="$embed_prefix"
make -j2
make install
- name: Save embeddable Racket CS cache
if: steps.cache-racket-embed.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: ${{ runner.temp }}/racket-embed
key: racket-embed-9.3-${{ runner.os }}-${{ runner.arch }}-v1
- name: Expose embeddable runtime paths
shell: bash
run: |
set -euo pipefail
embed_prefix="$RUNNER_TEMP/racket-embed"
racket_include="$(racket -e '(require setup/dirs) (display (path->string (find-include-dir)))')"
petite="$(find "$embed_prefix" -maxdepth 6 -name petite.boot -print -quit)"
scheme="$(find "$embed_prefix" -maxdepth 6 -name scheme.boot -print -quit)"
racket_boot="$(find "$embed_prefix" -maxdepth 6 -name racket.boot -print -quit)"
test -n "$petite" && test -n "$scheme" && test -n "$racket_boot"
library="$(find "$embed_prefix" -maxdepth 6 -name 'libracketcs*.a' -print -quit)"
test -n "$library"
boot_dir="$(dirname "$petite")"
echo "RIVET_RACKET_INCLUDE=$racket_include" >> "$GITHUB_ENV"
echo "RIVET_RACKET_LIB_DIR=$(dirname "$library")" >> "$GITHUB_ENV"
echo "RIVET_RACKET_LIBRARY=$library" >> "$GITHUB_ENV"
echo "RIVET_RACKET_BOOT_DIR=$boot_dir" >> "$GITHUB_ENV"
- name: Toolchain doctor
run: raco rivet doctor --json
- name: Build host
run: raco rivet build
- name: Headless boot smoke
run: |
sudo apt-get install -y xvfb
xvfb-run -a ./.rivet/stage/RivetHost &
APP_PID=$!
sleep 8
kill -0 $APP_PID
kill $APP_PID
macos-host:
name: macOS host (${{ matrix.arch }} build)
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- arch: arm64
runner: macos-15
racket-arch: arm64
- arch: x64
runner: macos-15-intel
racket-arch: x64
steps:
- uses: actions/checkout@v4
- name: Checkout Rivet at pin
uses: actions/checkout@v4
with:
repository: turinglambdaai/rivet
ref: ${{ env.RIVET_PIN }}
path: rivet
- name: Setup Racket CS 9.3
uses: Bogdanp/setup-racket@v1.15
with:
# Each leg builds the architecture it will package (release.yml
# macos matrix matches).
architecture: ${{ matrix.racket-arch }}
distribution: full
variant: CS
version: '9.3'
- name: Link Rivet
run: raco pkg install --auto --no-docs --name rivet --link "$GITHUB_WORKSPACE/rivet"
- name: Build host
run: raco rivet build
- name: Boot smoke
run: |
smoke_home="$RUNNER_TEMP/taskly-smoke-home"
mkdir -p "$smoke_home"
HOME="$smoke_home" ./.rivet/stage/RivetHost &
APP_PID=$!
sleep 8
kill -0 $APP_PID
kill $APP_PID
windows-host:
name: Windows host (WinRT build)
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Checkout Rivet at pin
uses: actions/checkout@v4
with:
repository: turinglambdaai/rivet
ref: ${{ env.RIVET_PIN }}
path: rivet
- name: Setup Racket CS 9.3
uses: Bogdanp/setup-racket@v1.15
with:
architecture: x64
distribution: full
variant: CS
version: '9.3'
- name: Link Rivet
shell: bash
run: raco pkg install --auto --no-docs --name rivet --link "$GITHUB_WORKSPACE/rivet"
- name: Build host
shell: pwsh
run: raco rivet build