All checks were successful
wai-quantum docs, course and locales / does this change touch it (pull_request) Successful in 6s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 9s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (pull_request) Successful in 8s
WAI energy receipts / does this change touch it (pull_request) Successful in 10s
wai-quantum for JavaScript / does this change touch it (pull_request) Successful in 7s
wai-quantum docs, course and locales / the Studio's words in every locale · linux (pull_request) Successful in 37s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (pull_request) Successful in 1m13s
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 2m49s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 3m6s
wai-quantum for JavaScript / javascript · linux (pull_request) Successful in 3m7s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 5m7s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 6m33s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 8m31s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 9m6s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 10m53s
wai-quantum docs, course and locales / the course and the command line's languages · linux (pull_request) Successful in 12m23s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (pull_request) Successful in 1h4m5s
wai/wai-quantum-js/ packs the job service's engine for WebAssembly (wai-web with its quantum_engine feature, the engine of wai-quantum 0.7.0) and its bindings as an ES module with its TypeScript declarations and no dependencies, for a page (init() fetches the .wasm beside the module) or for Node (init is given its bytes). The package keeps its own version line, as the Python package does. - build.sh: wai-web built for wasm32 with paths remapped (as the views build does), wasm-bindgen 0.2.127 (refused if it is not the version wai-web's lock file pins), package.json, README and the licence copied, the build refused if a local path is left in the bindings or the binary, then packed. - test/smoke.mjs, on the package unpacked: a job run with a fresh 32-byte key and its receipt verified with this engine's did:key; a forged result that does not verify; a program linted and drawn; a refused program with its diagnostic code (Q310). - test/install.mjs: the README's Node example, run in an empty app that installed the tarball with npm, the package found by name and its .wasm by the subpath it exports. - ci/check.sh runs them all and holds the tarball to the package's allow-list (the seven files and nothing else). - wai-quantum-js.yml runs ci/check.sh on Linux. wai-quantum-js-release.yml runs it on a wai-quantum-cli-v* tag and attaches the tarball and its SHA-256 to the release. Nothing is published to a registry from CI. On the M3 Ultra: the .wasm is 5,928,153 bytes, the tarball 2.26 MB, and every check passes. Co-Authored-By: Claude Opus 5.5 <[email protected]>
39 lines
1.7 KiB
Shell
Executable file
39 lines
1.7 KiB
Shell
Executable file
#!/usr/bin/env bash
|
|
# The npm package, built and checked as an installer would meet it:
|
|
#
|
|
# bash wai/wai-quantum-js/ci/check.sh OUT_DIR
|
|
#
|
|
# 1. build.sh builds and packs it into OUT_DIR;
|
|
# 2. the tarball, unpacked, holds the package's allow-list and nothing else;
|
|
# 3. test/smoke.mjs runs against the unpacked package;
|
|
# 4. the tarball is installed into an empty app (npm install <tgz>, nothing else to
|
|
# fetch), and test/install.mjs, the README's Node example, runs there by name.
|
|
# Leaves the tarball in OUT_DIR, with OUT_DIR/<tarball>.sha256.
|
|
set -euo pipefail
|
|
here=$(cd "$(dirname "$0")/.." && pwd)
|
|
mkdir -p "$1"
|
|
out=$(cd "$1" && pwd)
|
|
bash "$here/build.sh" "$out"
|
|
tgz=$(ls "$out"/*.tgz)
|
|
work=$(mktemp -d)
|
|
trap 'rm -rf "$work"' EXIT
|
|
|
|
mkdir "$work/unpacked"
|
|
tar -xzf "$tgz" -C "$work/unpacked"
|
|
have=$(cd "$work/unpacked/package" && find . -type f | sed 's|^\./||' | sort)
|
|
want=$(printf '%s\n' LICENSE README.md package.json wai_quantum.d.ts wai_quantum.js wai_quantum_bg.wasm wai_quantum_bg.wasm.d.ts | sort)
|
|
if [ "$have" != "$want" ]; then
|
|
echo "check.sh: the tarball holds other files than the package's allow-list:" >&2
|
|
diff <(echo "$want") <(echo "$have") >&2 || true
|
|
exit 1
|
|
fi
|
|
echo "the tarball: $(echo "$have" | wc -l | tr -d ' ') files, the allow-list exactly"
|
|
node "$here/test/smoke.mjs" "$work/unpacked/package"
|
|
|
|
mkdir "$work/app"
|
|
printf '{ "name": "app", "private": true, "type": "module" }\n' > "$work/app/package.json"
|
|
(cd "$work/app" && npm install "$tgz" --no-audit --no-fund --silent)
|
|
cp "$here/test/install.mjs" "$work/app/"
|
|
(cd "$work/app" && node install.mjs)
|
|
|
|
(cd "$out" && n=$(basename "$tgz") && { if command -v sha256sum >/dev/null 2>&1; then sha256sum "$n"; else shasum -a 256 "$n"; fi; } > "$n.sha256" && cat "$n.sha256")
|