Files
hakorune/tools/selfhost/bootstrap_s1_s2.sh

71 lines
1.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
set -euo pipefail
# bootstrap_s1_s2.sh — SelfHosting S1/S2 helper
# S1: emitonly 再生成 → 正規化ハッシュ一致
# S2: 1pass Fixpoint → もう一度一致
#
# 使い方2通り
# 1) 既存の v1 JSON ファイル同士を比較S1/S2の結果を与える
# tools/selfhost/bootstrap_s1_s2.sh --in1 a.json --in2 b.json
#
# 2) コマンドから v1 JSON を生成して比較emit コマンドを渡す)
# tools/selfhost/bootstrap_s1_s2.sh --cmd1 'bash gen_v1_once.sh' --cmd2 'bash gen_v1_twice.sh'
# (各コマンドは v1 JSON を stdout に出力すること)
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
LIB_TR="$ROOT/tools/smokes/v2/lib/test_runner.sh"
if [ -f "$LIB_TR" ]; then source "$LIB_TR"; else echo "[FAIL] missing $LIB_TR" >&2; exit 2; fi
require_env >/dev/null || true
IN1=""
IN2=""
CMD1=""
CMD2=""
while [ $# -gt 0 ]; do
case "$1" in
--in1) IN1="$2"; shift 2 ;;
--in2) IN2="$2"; shift 2 ;;
--cmd1) CMD1="$2"; shift 2 ;;
--cmd2) CMD2="$2"; shift 2 ;;
*) echo "[FAIL] unknown arg: $1" >&2; exit 2 ;;
esac
done
tmp1="/tmp/hako_s1_$$.json"
tmp2="/tmp/hako_s2_$$.json"
cleanup(){ rm -f "$tmp1" "$tmp2" 2>/dev/null || true; }
trap cleanup EXIT
if [ -n "$IN1" ] && [ -n "$IN2" ]; then
cp "$IN1" "$tmp1"
cp "$IN2" "$tmp2"
elif [ -n "$CMD1" ] && [ -n "$CMD2" ]; then
eval "$CMD1" > "$tmp1"
eval "$CMD2" > "$tmp2"
else
echo "[FAIL] provide --in1/--in2 or --cmd1/--cmd2" >&2
exit 2
fi
if ! jq -e . < "$tmp1" >/dev/null 2>&1 || ! jq -e . < "$tmp2" >/dev/null 2>&1; then
echo "[FAIL] invalid JSON input(s)" >&2
exit 2
fi
echo "[S1/S2] hashing v1 JSON (normalized) ..." >&2
h1=$(v1_normalized_hash "$tmp1")
h2=$(v1_normalized_hash "$tmp2")
echo "[S1] $h1" >&2
echo "[S2] $h2" >&2
if [ "$h1" = "$h2" ]; then
echo "[PASS] S1/S2 normalized hashes match"
exit 0
else
echo "[FAIL] S1/S2 normalized hashes differ" >&2
exit 1
fi