397777089e
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
59 lines
2.4 KiB
Bash
59 lines
2.4 KiB
Bash
#!/usr/bin/env bash
|
|
# tools/worktree-precommit-gate.sh — ручной прогон pre-commit гейта в worktree.
|
|
#
|
|
# Закрывает квирки #86/#97: в worktree git-хук .git/hooks/pre-commit (shared
|
|
# через worktree's gitdir pointer) не находит бинарь lefthook в PATH worktree
|
|
# и тихо пропускает все гейты (pint + larastan + pest + gitleaks protect
|
|
# --staged). Этот скрипт хардкодит абсолютный путь к lefthook.exe и явно гонит
|
|
# конфиг lefthook.yml из main checkout.
|
|
#
|
|
# Использование (из любого worktree):
|
|
# bash "/c/моя/проекты/портал crm/Документация/tools/worktree-precommit-gate.sh"
|
|
#
|
|
# Exit code: 0 если все гейты прошли, иначе ненулевой (lefthook propagate'ит).
|
|
# Запускать ДО `git commit` — git commit не вызовет lefthook автоматически в
|
|
# worktree, поэтому это явный шаг.
|
|
|
|
set -euo pipefail
|
|
|
|
MAIN_REPO="/c/моя/проекты/портал crm/Документация"
|
|
LEFTHOOK_BIN="${MAIN_REPO}/node_modules/lefthook-windows-x64/bin/lefthook.exe"
|
|
LEFTHOOK_CONFIG="${MAIN_REPO}/lefthook.yml"
|
|
|
|
if [[ ! -x "${LEFTHOOK_BIN}" ]]; then
|
|
echo "ERROR: lefthook.exe not found at: ${LEFTHOOK_BIN}" >&2
|
|
echo "Run \`npm install\` in main repo to restore." >&2
|
|
exit 2
|
|
fi
|
|
|
|
if [[ ! -f "${LEFTHOOK_CONFIG}" ]]; then
|
|
echo "ERROR: lefthook.yml not found at: ${LEFTHOOK_CONFIG}" >&2
|
|
exit 2
|
|
fi
|
|
|
|
# Auto-detect: are we in worktree or main repo?
|
|
CURRENT_TOPLEVEL="$(git rev-parse --show-toplevel 2>/dev/null || true)"
|
|
if [[ -z "${CURRENT_TOPLEVEL}" ]]; then
|
|
echo "ERROR: not inside a git work tree" >&2
|
|
exit 2
|
|
fi
|
|
|
|
# Normalize MAIN_REPO via git so trailing slashes / casing don't matter.
|
|
MAIN_REPO_NORM="$(cd "${MAIN_REPO}" && git rev-parse --show-toplevel)"
|
|
|
|
if [[ "${CURRENT_TOPLEVEL}" == "${MAIN_REPO_NORM}" ]]; then
|
|
CONTEXT="main checkout"
|
|
else
|
|
CONTEXT="worktree (${CURRENT_TOPLEVEL})"
|
|
fi
|
|
|
|
echo "[worktree-gate] context: ${CONTEXT}"
|
|
echo "[worktree-gate] lefthook: ${LEFTHOOK_BIN}"
|
|
echo "[worktree-gate] config: ${LEFTHOOK_CONFIG}"
|
|
echo "[worktree-gate] running pre-commit..."
|
|
echo
|
|
|
|
# Lefthook reads its config relative to cwd OR via -c. Use -c для надёжности
|
|
# в worktree (там lefthook.yml — это файл из main repo, не локальный).
|
|
exec "${LEFTHOOK_BIN}" -c "${LEFTHOOK_CONFIG}" run pre-commit
|