22 lines
1.4 KiB
Bash
Executable file
22 lines
1.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Installs the repository's git hooks into this checkout (pre-push: no conflict markers, the site builds). Linked
|
|
# worktrees share the main repository's .git/hooks, so one install covers every worktree.
|
|
# The hook is READ-ONLY (6 October 2026): it builds the site in a temporary copy and never writes a tracked file in the
|
|
# worktree. Before this, `node build.mjs` in site/ rewrote downloads.json, journey.json, bench.html and the stamped pages
|
|
# in whatever worktree the push ran from (five worktrees carried 0.3.14's rows as uncommitted edits, and generated pages
|
|
# kept changing under agents after 063bbca). Only the ship step writes, with SITE_DOWNLOADS_REFRESH=1 node site/build.mjs.
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/../.."
|
|
HOOKS="$(git rev-parse --git-common-dir)/hooks"
|
|
mkdir -p "$HOOKS"
|
|
cat > "$HOOKS/pre-push" <<'HOOK'
|
|
#!/usr/bin/env bash
|
|
set -e
|
|
cd "$(git rev-parse --show-toplevel)"
|
|
bash tools/ci/no-conflict-markers.sh
|
|
# the site build, in a temporary copy: a failing build blocks the push; nothing in the worktree is written
|
|
tmp="$(mktemp -d)"; trap 'rm -rf "$tmp"' EXIT
|
|
cp -R site "$tmp/site"
|
|
(cd "$tmp/site" && SITE_DOWNLOADS_OFFLINE=1 node build.mjs >/dev/null) || { echo "pre-push: the site build fails; fix it before pushing" >&2; exit 1; }
|
|
HOOK
|
|
chmod +x "$HOOKS/pre-push"; echo "pre-push hook installed at $HOOKS/pre-push (read-only site build)"
|