open-standards/wai/wai-quantum-js/ci/check.sh
Transaction Science 51e89d4e20
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-quantum for JavaScript: the engine as the npm package @transaction-science/wai-quantum 0.1.0
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]>
2026-10-29 08:14:24 -04:00

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")