Files
TheRON b67cc1290e verify.sh: reach the restore on the diff branch
set -euo pipefail aborted the script on the diff pipeline one line
before the cp that restores the pre-run oracle, so --full left a
regenerated fixture file in the working tree while printing that
nothing had been overwritten. Appended || true.

Recorded as F-033. The fix is not yet exercised: the restore branch
runs only under --full and has not been entered since the change.
2026-08-19 01:10:08 -05:00

62 lines
2.3 KiB
Bash

#!/usr/bin/env bash
#
# Build the pinned toolchain and prove the committed oracle still reproduces.
#
# ./tools/reference-toolchain/verify.sh # verify the hash only
# ./tools/reference-toolchain/verify.sh --full # regenerate and compare
#
# --full runs all 123 cases through OpenSCAD. On the staging host that takes a
# while: the solvers are single-threaded and the CPU is old. That is expected.
set -euo pipefail
REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
IMAGE="mechcomp/reference-toolchain:8.0.0"
EXPECTED="ddd0f1548379205dd0c652ec07285b0dae331e52ff0a0437005dfc6cddcc2cb2"
echo "==> building ${IMAGE}"
docker build -t "${IMAGE}" "${REPO}/tools/reference-toolchain"
echo
echo "==> toolchain versions"
docker run --rm "${IMAGE}" openscad --version
docker run --rm "${IMAGE}" git -C /BOSL2 rev-parse HEAD 2>/dev/null \
|| echo "(BOSL2 .git removed at build time; commit is pinned by ARG)"
echo
echo "==> verifying the committed oracle"
python3 "${REPO}/fixtures/strap-beam-8.0.0/make_fixtures.py" --verify
if [[ "${1:-}" == "--full" ]]; then
echo
echo "==> regenerating all 123 cases inside the pinned toolchain"
tmp="$(mktemp -d)"
trap 'rm -rf "${tmp}"' EXIT
cp "${REPO}/fixtures/strap-beam-8.0.0/strap-beam-fixtures-8.0.0.json" "${tmp}/before.json"
docker run --rm -v "${REPO}:/repo" "${IMAGE}" \
python3 /repo/fixtures/strap-beam-8.0.0/make_fixtures.py --regenerate
echo
echo "==> comparing against the committed oracle"
if diff -q "${tmp}/before.json" \
"${REPO}/fixtures/strap-beam-8.0.0/strap-beam-fixtures-8.0.0.json" >/dev/null; then
echo "OK - byte-identical."
else
echo "DIFFERS from the committed oracle." >&2
echo "The 'frozen' date changes on every regeneration, so a one-line" >&2
echo "diff there is expected. Any other difference means the toolchain" >&2
echo "has drifted; investigate before proceeding." >&2
diff "${tmp}/before.json" \
"${REPO}/fixtures/strap-beam-8.0.0/strap-beam-fixtures-8.0.0.json" | head -40 >&2 || true
cp "${tmp}/before.json" \
"${REPO}/fixtures/strap-beam-8.0.0/strap-beam-fixtures-8.0.0.json"
echo >&2
echo "The committed oracle has been restored. Nothing was overwritten." >&2
exit 1
fi
fi
echo
echo "expected sha256: ${EXPECTED}"