All checks were successful
joule-moq-remote host agent / joule-moq-remote · does this change touch it (pull_request) Successful in 6s
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Successful in 8s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 6s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 8s
wai-audit collector and player integration / does this change touch it (pull_request) Successful in 7s
WAI operation catalogue / does this change touch it (pull_request) Successful in 7s
wai-app and Create / wai-app · does this change touch it (pull_request) Successful in 15s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (pull_request) Successful in 14s
WAI conformance / does this change touch it (pull_request) Successful in 5s
WAI examples / WAI examples · does this change touch them (pull_request) Successful in 7s
wai-fleet service / does this change touch it (pull_request) Successful in 5s
WAI energy receipts / does this change touch it (pull_request) Successful in 18s
WAI JPEG-AI whole decode (pinned inputs, required) / does this change touch it (pull_request) Successful in 8s
wai-key-proxy / does this change touch it (pull_request) Successful in 8s
wai-ledger service / does this change touch it (pull_request) Successful in 5s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 8s
wai-quantum docs, course and locales / does this change touch it (pull_request) Successful in 6s
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Successful in 9s
WAI neural sink gates / does this change touch it (pull_request) Successful in 19s
wai-quantum for JavaScript / does this change touch it (pull_request) Successful in 7s
wai-quantum WebGPU member / does this change touch it (pull_request) Successful in 6s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 10s
wai-sink-android native sink library / does this change touch it (pull_request) Successful in 7s
WAI mbt2018_mean integer decode (regenerated vectors) / does this change touch it (pull_request) Successful in 11s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 7s
wai-web wasm32 / does this change touch it (pull_request) Successful in 8s
WAI Studio / does this change touch it (pull_request) Successful in 11s
wai-sink-swift native sink package / does this change touch it (pull_request) Successful in 17s
joule-code conformance gate / joule-moq-relay, every target (pull_request) Successful in 3m4s
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Successful in 3m16s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 2m5s
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Successful in 5m8s
WAI conformance / fast integer kernels, every x86_64 kernel set (AVX-512 silicon) (pull_request) Successful in 3m22s
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (pull_request) Successful in 36s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (pull_request) Successful in 35s
wai-audit collector and player integration / collector · linux (pull_request) Successful in 1m8s
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 12m1s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (pull_request) Successful in 2m42s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 27s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (pull_request) Successful in 3m10s
WAI conformance / faces from keypoints under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m42s
WAI operation catalogue / the catalogue and every door · linux (pull_request) Successful in 6m13s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 4m14s
wai-quantum WebGPU member / member · integrated GPU, Vulkan (framework-128gb) (pull_request) Successful in 10m34s
wai-fleet service / service · linux (pull_request) Successful in 2m26s
wai-ledger service / service · linux (pull_request) Successful in 2m2s
wai-key-proxy / proxy · linux (pull_request) Successful in 2m59s
wai-pack / wai-pack · linux (pull_request) Successful in 2m5s
wai-quantum docs, course and locales / the Studio's words in every locale · linux (pull_request) Successful in 26s
wai-quantum docs, course and locales / the course and the command line's languages · linux (pull_request) Successful in 2m45s
wai-quantum WebGPU member / member · GPU, Vulkan (jetson-hub) (pull_request) Successful in 22m31s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 7m26s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 2m2s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 9m31s
WAI neural sink gates / the exact JPEG-AI decoder reports its path (pinned inputs, required) (pull_request) Successful in 2m52s
wai-quantum WebGPU member / member · GPU, Vulkan (thor) (pull_request) Successful in 24m59s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 2m16s
wai-quantum for JavaScript / javascript · linux (pull_request) Successful in 3m47s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness (pull_request) Successful in 3m57s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 3m53s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m57s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (pull_request) Successful in 1m6s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 8m6s
wai-quantum studio and desktop / desktop app · windows (pull_request) Successful in 9m36s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 14m34s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 6m37s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 5m30s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 19m54s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 5m27s
wai-quantum studio and desktop / desktop app · linux (pull_request) Successful in 12m3s
WAI Studio / Studio in WebKit · linux (pull_request) Successful in 10m30s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (pull_request) Successful in 22m30s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (pull_request) Successful in 1m2s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (pull_request) Successful in 1m52s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 12m16s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (pull_request) Successful in 1m20s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 17m11s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 30s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 1m10s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 3m54s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (pull_request) Successful in 7m52s
wai-fleet service / service · macos (pull_request) Successful in 43s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 30s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 6m52s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 9m7s
wai-ledger service / service · macos (pull_request) Successful in 1m26s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 17s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 20m26s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 43s
wai-pack / wai-pack · macos (pull_request) Successful in 4m19s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m38s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 13m34s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 3m26s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 19m27s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 2m5s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 23m32s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m27s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 7m32s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 37s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 19s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 11m58s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 5m11s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 7m35s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 3m25s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 7m20s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 12m0s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 10m54s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 17m29s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h30m12s
The change of wai/toolchain-fixes (69f88e62f..074658780, 21 commits), on the fix branch: its changelog entries as files of wai/changes/, its wai-conformance.yml edits as step files, corpus files and test tags, and every other file as the branch has it. - b04013914 holdings: the registry lists WHD1, the record's magic (§4.1) - a184abb87 catalogue: upscale and tonemap are recorded in N3's verb list, and the doors' check knows them - 8db31a778 wai mcp: MCP 2026-07-28, the stateless revision, beside the three initialize negotiates - 052830194 wai.json: $schema, wai and name, and the schema of version 1 committed beside the reader - 163fc2017 wai create: every template carries an AGENTS.md - fe9b26fbc joule-moq-room: the example names the relay's WebSocket port, 4480, and one test holds every port - 359b5ba9d quickstart: the archive carries WAI Studio, wai-ingest and wai-quantum - 6334d88c8 joule-moq-room: the port table holds every daemon's default, and the listeners off until set - d38610de6 wai.json: the two workflows that hold the schema to its reader run when the schema changes - 179df52b7 catalogue: the two verbs joined the list after wai 0.4.0, not in toolchain 0.3.0 - 971cf5862 wai.json: a file of a later version is refused as that version before any member it adds - 1a59a39f7 wai.json: the reader takes a whole number however it is written, and the tests run the name pattern - d752fd9b4 wai.json: the release waits for the schema to be served, and version 1 is fixed by the first release that writes it - c213ed9db wai mcp: -32022 names as supported only the revisions a request may name, never the one asked for - 99b800f29 wai mcp: initialize negotiates 2025-11-25, the last revision with a handshake - e33021c3f catalogue: the near-synonym list is held in every text that states it, and the doors' check knows up - b99bb70be catalogue: the changelog records the near-synonym list held with the verb list - a0beb2163 quickstart: the wai formula and manifest depend on wai-quantum's own instead of installing a second copy - 0e5084031 quickstart: Studio's build leaves the checkout as it found it, and the examples workflow runs clean-machine.sh - 4cc4ae3d7 joule-moq-room: the port test reads the gateway's example with the gateway's own reader, and starts the gateway from it - 074658780 quickstart: the changelog names where Studio's build goes, not where it went before it shipped Co-Authored-By: Claude Opus 5.5 <[email protected]>
243 lines
12 KiB
YAML
243 lines
12 KiB
YAML
name: WAI examples
|
|
|
|
# Every example in wai/examples/ run as a person runs it: `wai create` makes the project from
|
|
# the template the binary holds, and `wai dev` runs it (wai/quickstart/test/run-examples.sh).
|
|
# Each fails the job if its example stops working.
|
|
#
|
|
# - portable (linux): remote-desktop (a drawn screen shared into a room, the session accepted
|
|
# by the independent verifier), package-and-deliver (packed and verified), verify-receipts
|
|
# (the Rust verifier on this checkout's wai crate and the Python one, each refusing a changed
|
|
# byte), encoder-ingest (SRT into a room, every group verified against its receipt); and the
|
|
# package managers' entries the release writes (wai/quickstart/test/formulae_test.py): every
|
|
# binary of the archive but wai-quantum, which they depend on as its own package, and that
|
|
# one built as its own release builds it.
|
|
# - browser (macos): the room client and WAI Studio built and packaged as the release packages
|
|
# them (wai/quickstart/build-web.sh, build-studio.sh, build.sh, its bin/ with wai-ingest and
|
|
# wai-quantum), the checkout left as it was; the quickstart's readiness check, `wai dev --check`,
|
|
# from the unpacked archive in an empty directory, Studio at /_wai/ among the pieces it checks;
|
|
# the quickstart on a clean machine (wai/quickstart/test/clean-machine.sh: a fresh HOME and
|
|
# directory, the system's PATH, every binary and Studio's files in the archive, each binary
|
|
# run, then hello, verify, create and dev --check); then video-room, watch-together,
|
|
# messaging, remote-desktop and package-and-deliver in the host's browser; and apple-app
|
|
# (the native sink's macOS slice, the SwiftUI app built, a recorded session replayed).
|
|
# - android (linux-arm64): android-app, the native sink's Kotlin API on the host JVM.
|
|
#
|
|
# Push filters match the push's delta, so every path an example builds on is listed.
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
on:
|
|
pull_request:
|
|
paths:
|
|
- 'wai/examples/**'
|
|
- 'wai/quickstart/**'
|
|
- 'wai/wai-rs/**'
|
|
- 'wai/wai-pack/**'
|
|
- 'wai/wai-live-web/**'
|
|
- 'wai/wai-quantum/**'
|
|
- 'wai/wai-quantum-cli/**'
|
|
- 'wai/wai-quantum-qpu/**'
|
|
- 'wai/wai-studio/**'
|
|
- 'wai/quantum-studio/**'
|
|
- 'wai/wai-web/**'
|
|
- 'wai/wai-ops/**'
|
|
- 'wai/wai-sink-swift/**'
|
|
- 'wai/wai-sink-android/**'
|
|
- 'wai/claim-conformance/_ed25519.py'
|
|
- 'wai/claim-conformance/_blake3.py'
|
|
- 'wai/live-conformance/remote_desktop_verify.py'
|
|
- 'wai/live-conformance/live_rooms_verify.py'
|
|
- 'wai/live-conformance/telemetry_aggregate_verify.py'
|
|
- 'wai/pack-conformance/packs/video-base-01/**'
|
|
- 'joule-code/joule-code-rs/**'
|
|
# Read by wai/quickstart/test/formulae_test.py.
|
|
- '.github/workflows/wai-release.yml'
|
|
- '.github/workflows/wai-quantum-cli-release.yml'
|
|
- '.github/workflows/wai-examples.yml'
|
|
schedule:
|
|
- cron: '17 5 * * *'
|
|
|
|
jobs:
|
|
# The path filters gate the trigger; this job gates the work from the pull request's own
|
|
# diff (scripts/pr-touches-paths.py, reading the list above), as wai-pack.yml explains.
|
|
relevant:
|
|
name: WAI examples · does this change touch them
|
|
runs-on: linux
|
|
outputs:
|
|
run: ${{ steps.gate.outputs.run }}
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
with:
|
|
fetch-depth: 0
|
|
- id: gate
|
|
run: |
|
|
set -euo pipefail
|
|
r=$(python3 scripts/pr-touches-paths.py .github/workflows/wai-examples.yml \
|
|
"${{ github.event.pull_request.base.sha }}" \
|
|
"${{ github.event.pull_request.head.sha }}")
|
|
echo "this change touches the examples: $r"
|
|
echo "run=$r" >> "$GITHUB_OUTPUT"
|
|
|
|
portable:
|
|
name: WAI examples · portable · linux
|
|
needs: relevant
|
|
if: needs.relevant.outputs.run == 'true'
|
|
runs-on: linux
|
|
timeout-minutes: 90
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Install Rust 1.99.1
|
|
shell: bash
|
|
run: |
|
|
export PATH="$HOME/.cargo/bin:$PATH"
|
|
command -v rustup >/dev/null 2>&1 || \
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.99.1
|
|
rustup toolchain install 1.99.1 --profile minimal
|
|
rustup default 1.99.1
|
|
SUDO=""; [ "$(id -u)" -ne 0 ] && SUDO="sudo"
|
|
command -v python3 >/dev/null && command -v curl >/dev/null || { $SUDO apt-get update -qq; $SUDO apt-get install -y -qq python3 curl; }
|
|
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
# The binaries the archive holds, from this checkout. The portable examples load no page,
|
|
# so the room client's files are the source tree's (WAI_WEB), without its WebAssembly.
|
|
- name: Build wai, the relay, the room service, the remote host and the packager
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
b="$RUNNER_TEMP/bin"; mkdir -p "$b"
|
|
out() { (cd "$1" && cargo metadata --format-version 1 --no-deps --locked | python3 -c 'import json,sys; print(json.load(sys.stdin)["target_directory"])'); }
|
|
(cd wai/wai-rs && cargo build --locked --release --no-default-features --features quickstart --bin wai) && cp "$(out wai/wai-rs)/release/wai" "$b/"
|
|
(cd joule-code/joule-code-rs && cargo build --locked --release -p joule-moq-relay --bin wai-relay) && cp "$(out joule-code/joule-code-rs)/release/wai-relay" "$b/"
|
|
(cd joule-code/joule-code-rs/crates/joule-moq-room && cargo build --locked --release --bin wai-room) && cp "$(out joule-code/joule-code-rs/crates/joule-moq-room)/release/wai-room" "$b/"
|
|
(cd joule-code/joule-code-rs/crates/joule-moq-remote && cargo build --locked --release --bin wai-remote-host) && cp "$(out joule-code/joule-code-rs/crates/joule-moq-remote)/release/wai-remote-host" "$b/"
|
|
(cd wai/wai-pack && cargo build --locked --release --bin wai-pack) && cp "$(out wai/wai-pack)/release/wai-pack" "$b/"
|
|
echo "$b" >> "$GITHUB_PATH"
|
|
- name: The portable examples
|
|
shell: bash
|
|
env:
|
|
WAI_WEB: ${{ github.workspace }}/joule-code/joule-code-rs/crates/joule-moq-web/web
|
|
run: bash wai/quickstart/test/run-examples.sh portable
|
|
- name: The Homebrew formula and the Scoop manifest the release writes
|
|
shell: bash
|
|
run: python3 -I wai/quickstart/test/formulae_test.py
|
|
|
|
browser:
|
|
name: WAI examples · the archive, the readiness check, the browser and Apple · macos
|
|
needs: relevant
|
|
if: needs.relevant.outputs.run == 'true'
|
|
runs-on: macos
|
|
timeout-minutes: 120
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
# launchd's PATH omits cargo and node on the macOS host runner.
|
|
- name: Put cargo and node on PATH
|
|
shell: bash
|
|
run: |
|
|
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
echo "/opt/homebrew/bin" >> "$GITHUB_PATH"
|
|
- name: wasm32 target and wasm-bindgen CLI 0.2.127
|
|
shell: bash
|
|
run: |
|
|
rustup target add wasm32-unknown-unknown
|
|
command -v wasm-bindgen >/dev/null && wasm-bindgen --version | grep -q ' 0\.2\.127$' || cargo install --locked wasm-bindgen-cli --version 0.2.127
|
|
- name: The room client, WAI Studio and the archive, as the release builds them
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
nice -n 10 bash wai/quickstart/build-web.sh "$RUNNER_TEMP/web"
|
|
nice -n 10 bash wai/quickstart/build-studio.sh "$RUNNER_TEMP/studio"
|
|
nice -n 10 bash wai/quickstart/build.sh "$RUNNER_TEMP/dist" --web "$RUNNER_TEMP/web" --studio "$RUNNER_TEMP/studio"
|
|
# The three builds leave the checkout as they found it: everything they write is under
|
|
# an ignored directory or outside the tree.
|
|
left=$(git status --porcelain --untracked-files=all)
|
|
[ -z "$left" ] || { echo "$left"; echo "::error::the builds left files in the checkout"; exit 1; }
|
|
mkdir -p "$RUNNER_TEMP/unpacked"
|
|
tar -C "$RUNNER_TEMP/unpacked" -xzf "$RUNNER_TEMP"/dist/wai-*.tar.gz
|
|
echo "WAI_DIST=$(ls -d "$RUNNER_TEMP"/unpacked/wai-*)" >> "$GITHUB_ENV"
|
|
# The quickstart's readiness check: from the archive alone, in an empty directory, the
|
|
# relay, the room service and the page on one origin, each piece checked through it.
|
|
- name: wai hello, wai verify and wai dev --check from the archive
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
d="$RUNNER_TEMP/clean"; rm -rf "$d"; mkdir -p "$d"; cd "$d"
|
|
"$WAI_DIST/bin/wai" hello h
|
|
"$WAI_DIST/bin/wai" verify h
|
|
mkdir p && cd p && "$WAI_DIST/bin/wai" dev --check --port 0 | tee "$RUNNER_TEMP/dev-check.out"
|
|
grep -q "ok WAI Studio at /_wai/" "$RUNNER_TEMP/dev-check.out" || { echo "::error::the archive's wai dev does not serve WAI Studio"; exit 1; }
|
|
# The quickstart as a new user runs it, from the archive and its .sha256 alone, with no
|
|
# browser step: it fails when the archive lacks any binary, the room client, or Studio's
|
|
# page and core, or when a step fails.
|
|
- name: The quickstart on a clean machine, from the archive
|
|
shell: bash
|
|
run: bash wai/quickstart/test/clean-machine.sh "$RUNNER_TEMP"/dist/wai-*.tar.gz
|
|
- name: The examples in the browser
|
|
shell: bash
|
|
env:
|
|
BROWSER_BIN: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome # allow-name: the macOS runner's browser executable, a file path
|
|
run: |
|
|
set -euo pipefail
|
|
test -x "$BROWSER_BIN" || { echo "::error::this runner has no browser at $BROWSER_BIN"; exit 1; }
|
|
nice -n 10 bash wai/quickstart/test/run-examples.sh browser
|
|
# The apple example builds WaiFFI.xcframework, which cross-compiles each
|
|
# slice (wai-sink-swift/scripts/build-xcframework.sh names the set in its
|
|
# header). A target's std belongs to one toolchain, so the pin moving to
|
|
# 1.99.1 left this job with none of them, and the macos slice failed at
|
|
# x86_64-apple-darwin with E0463 "can't find crate for `core`". The step
|
|
# had been passing on targets a previous toolchain happened to have
|
|
# installed on the runner; naming them here is what makes it reproducible
|
|
# on a host that has never built this. The tvos slices' nightly is a
|
|
# separate toolchain and keeps its own targets, so it is not re-added.
|
|
- name: The targets the apple slices need
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
rustup target add aarch64-apple-darwin x86_64-apple-darwin aarch64-apple-ios aarch64-apple-ios-sim x86_64-apple-ios
|
|
- name: apple-app
|
|
shell: bash
|
|
run: nice -n 10 bash wai/quickstart/test/run-examples.sh apple
|
|
|
|
android:
|
|
name: WAI examples · android-app · linux-arm64
|
|
needs: relevant
|
|
if: needs.relevant.outputs.run == 'true'
|
|
runs-on: linux-arm64
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Install Rust 1.99.1
|
|
shell: bash
|
|
run: |
|
|
export PATH="$HOME/.cargo/bin:$PATH"
|
|
command -v rustup >/dev/null 2>&1 || \
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.99.1
|
|
rustup toolchain install 1.99.1 --profile minimal
|
|
rustup default 1.99.1
|
|
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
- name: JDK 17
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
j="/usr/lib/jvm/java-17-openjdk-$(dpkg --print-architecture)"
|
|
if [ ! -x "$j/bin/javac" ]; then
|
|
sudo=$(command -v sudo || true)
|
|
$sudo apt-get update -qq
|
|
$sudo apt-get install -y -qq --no-install-recommends openjdk-17-jdk-headless >/dev/null
|
|
fi
|
|
echo "JAVA_HOME=$j" >> "$GITHUB_ENV"
|
|
- name: wai
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
(cd wai/wai-rs && cargo build --locked --release --no-default-features --features quickstart --bin wai)
|
|
t=$(cd wai/wai-rs && cargo metadata --format-version 1 --no-deps --locked | python3 -c 'import json,sys; print(json.load(sys.stdin)["target_directory"])')
|
|
echo "$t/release" >> "$GITHUB_PATH"
|
|
- name: android-app
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
cache=/ci-cache/wai-sink-android
|
|
mkdir -p "$cache" 2>/dev/null || cache="$RUNNER_TEMP/wai-sink-android"
|
|
export WAI_SINK_GRADLE_DISTS="$cache/dists" GRADLE_USER_HOME="$cache/gradle-home"
|
|
bash wai/quickstart/test/run-examples.sh android
|