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]>
54 lines
2.4 KiB
Shell
Executable file
54 lines
2.4 KiB
Shell
Executable file
#!/usr/bin/env bash
|
|
# Build the npm package @transaction-science/wai-quantum: the quantum job service's
|
|
# engine for WebAssembly (wai/wai-web with its quantum_engine feature), its JavaScript
|
|
# bindings, and this folder's package.json and README, packed as one tarball:
|
|
#
|
|
# bash wai/wai-quantum-js/build.sh OUT_DIR
|
|
#
|
|
# Writes OUT_DIR/package/ (the package's files) and OUT_DIR/<name>-<version>.tgz, and
|
|
# prints the tarball's SHA-256. It needs Rust with the wasm32-unknown-unknown target,
|
|
# wasm-bindgen 0.2.127 (the version wai-web's lock file pins) and npm. Paths are
|
|
# remapped out of the binary, and the build is refused if a local path is left in the
|
|
# files it ships.
|
|
set -euo pipefail
|
|
if [ $# -ne 1 ]; then
|
|
echo "usage: bash wai/wai-quantum-js/build.sh OUT_DIR" >&2
|
|
exit 2
|
|
fi
|
|
here=$(cd "$(dirname "$0")" && pwd)
|
|
root=$(cd "$here/../.." && pwd)
|
|
web="$root/wai/wai-web"
|
|
mkdir -p "$1"
|
|
out=$(cd "$1" && pwd)
|
|
sha256() { if command -v sha256sum >/dev/null 2>&1; then sha256sum "$1"; else shasum -a 256 "$1"; fi; }
|
|
|
|
want=$(sed -n '/^name = "wasm-bindgen"$/{n;s/^version = "\(.*\)"$/\1/p;}' "$web/Cargo.lock")
|
|
have=$(wasm-bindgen --version | cut -d' ' -f2)
|
|
[ "$have" = "$want" ] || { echo "build.sh: wasm-bindgen is $have; wai-web's lock file pins $want" >&2; exit 1; }
|
|
|
|
target=${CARGO_TARGET_DIR:-"$web/target"}
|
|
sysroot=$(cd "$web" && rustc --print sysroot)
|
|
commit=$(cd "$web" && rustc -vV | sed -n 's/^commit-hash: //p')
|
|
export RUSTFLAGS="--remap-path-prefix=$root=/open-standards --remap-path-prefix=${CARGO_HOME:-$HOME/.cargo}=/cargo --remap-path-prefix=$sysroot/lib/rustlib/src/rust=/rustc/$commit"
|
|
(cd "$web" && cargo build --locked --release --target wasm32-unknown-unknown --features quantum_engine)
|
|
|
|
pkg="$out/package"
|
|
rm -rf "$pkg"
|
|
mkdir -p "$pkg"
|
|
wasm-bindgen --target web --out-dir "$pkg" --out-name wai_quantum "$target/wasm32-unknown-unknown/release/wai_web.wasm"
|
|
cp "$here/package.json" "$here/README.md" "$pkg/"
|
|
cp "$root/wai/LICENSE" "$pkg/LICENSE"
|
|
|
|
# Nothing the package ships names the machine that built it.
|
|
for leak in "$HOME" /Users/ /home/ /Volumes/ /private/; do
|
|
if grep -r -q -a -F "$leak" "$pkg"/wai_quantum*; then
|
|
echo "build.sh: '$leak' is in the package's bindings or binary" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
rm -f "$out"/*.tgz
|
|
npm pack "$pkg" --pack-destination "$out" --silent > /dev/null
|
|
tgz=$(ls "$out"/*.tgz)
|
|
echo "wasm: $(wc -c < "$pkg/wai_quantum_bg.wasm" | tr -d ' ') bytes"
|
|
sha256 "$tgz"
|