48 lines
1.4 KiB
Bash
48 lines
1.4 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Re-computes the parity-bar hash lock (TESTING_SPEC §12.1).
|
||
|
|
#
|
||
|
|
# Run this only when a justified change to
|
||
|
|
# `crates/simulation/tests/parity-bar/` or `TESTING_SPEC.md` lands.
|
||
|
|
# Commit the resulting `.locked-hashes` change in a separate commit
|
||
|
|
# titled `parity-bar: update lock` per §12.1.
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
ROOT="${1:-$(git -C "$(dirname "$0")/.." rev-parse --show-toplevel 2>/dev/null \
|
||
|
|
|| ( cd "$(dirname "$0")/.." && pwd ) )}"
|
||
|
|
|
||
|
|
PARITY_DIR="$ROOT/crates/simulation/tests/parity-bar"
|
||
|
|
SPEC="$ROOT/crates/simulation/TESTING_SPEC.md"
|
||
|
|
LOCK_FILE="$PARITY_DIR/.locked-hashes"
|
||
|
|
|
||
|
|
if [[ ! -d "$PARITY_DIR" ]]; then
|
||
|
|
echo "update-parity-lock: parity-bar directory missing: $PARITY_DIR" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
if [[ ! -f "$SPEC" ]]; then
|
||
|
|
echo "update-parity-lock: TESTING_SPEC.md missing: $SPEC" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
DIGEST=$({
|
||
|
|
find "$PARITY_DIR" -type f ! -name '.locked-hashes' -print0 \
|
||
|
|
| sort -z \
|
||
|
|
| xargs -0 sha256sum
|
||
|
|
sha256sum "$SPEC"
|
||
|
|
} | sed -E "s|$ROOT/||" | sha256sum | awk '{print $1}')
|
||
|
|
|
||
|
|
cat > "$LOCK_FILE" <<EOF
|
||
|
|
# Parity-bar hash lock — TESTING_SPEC §12.1.
|
||
|
|
#
|
||
|
|
# Generated by scripts/update-parity-lock.sh from
|
||
|
|
# crates/simulation/tests/parity-bar/ (all files except .locked-hashes)
|
||
|
|
# crates/simulation/TESTING_SPEC.md
|
||
|
|
#
|
||
|
|
# Do NOT edit by hand. Re-run the script after a justified change
|
||
|
|
# and commit the diff in a separate commit titled:
|
||
|
|
# parity-bar: update lock
|
||
|
|
$DIGEST
|
||
|
|
EOF
|
||
|
|
|
||
|
|
echo "update-parity-lock: wrote $DIGEST"
|