#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" SOURCE_DIR="${ROOT_DIR}/Sources/CodexBarCore/Vendored/CostUsage" OUTPUT_FILE="${ROOT_DIR}/Sources/CodexBarCore/Generated/CodexParserHash.generated.swift" MODE="${1:-write}" case "$MODE" in write | --write) CHECK_ONLY=0 ;; check | --check) CHECK_ONLY=1 ;; *) echo "Usage: $0 [write|--write|check|--check]" >&2 exit 2 ;; esac if command -v shasum >/dev/null 2>&1; then HASH_CMD=(shasum -a 256) elif command -v sha256sum >/dev/null 2>&1; then HASH_CMD=(sha256sum) else echo "error: shasum or sha256sum is required" >&2 exit 1 fi FILE_LIST="$(mktemp)" trap 'rm -f "$FILE_LIST"' EXIT find "$SOURCE_DIR" \ -type f \ -name '*.swift' \ ! -name '*Claude*' \ -print | sed "s#^${ROOT_DIR}/##" | LC_ALL=C sort >"$FILE_LIST" HASH="$( while IFS= read -r file; do printf '== %s ==\n' "$file" cat "${ROOT_DIR}/${file}" printf '\n' done <"$FILE_LIST" | "${HASH_CMD[@]}" )" HASH="${HASH%% *}" SHORT_HASH="${HASH:0:16}" render_generated() { cat <"$EXPECTED_FILE" if ! cmp -s "$EXPECTED_FILE" "$OUTPUT_FILE"; then echo "error: ${OUTPUT_FILE#${ROOT_DIR}/} is stale. Run Scripts/regenerate-codex-parser-hash.sh and commit the result." >&2 if [[ -f "$OUTPUT_FILE" ]]; then diff -u "$OUTPUT_FILE" "$EXPECTED_FILE" >&2 || true else diff -u /dev/null "$EXPECTED_FILE" >&2 || true fi exit 1 fi echo "Codex parser hash is current (${SHORT_HASH})" exit 0 fi mkdir -p "$(dirname "$OUTPUT_FILE")" render_generated >"$OUTPUT_FILE" echo "Updated ${OUTPUT_FILE#${ROOT_DIR}/} to ${SHORT_HASH}"