Přeskočit na obsah

npm run test:hooks — Test guardu automatického nasazení

Test guardu automatického nasazení: Ověřuje rozhodovací guard sdílené rutiny, kterou volají post-commit i post-merge hook — tedy to, co rozhoduje, jestli se commit na master sám postaví a pushne. npm skript, kontrola výstupů.

npm skript kontrola výstupů shodí běh pipeline: build pipeline: check

Volání

npm run test:hooks

Spustí bash scripts/coop/auto-push-guard.test.sh (čteno z package.json při buildu)

Zdroj: scripts/coop/auto-push-guard.test.sh

Ověřuje rozhodovací guard sdílené rutiny, kterou volají post-commit i post-merge hook — tedy to, co rozhoduje, jestli se commit na master sám postaví a pushne. Staví dočasné repozitáře přes mktemp, nikdy nesáhne na síť ani na tenhle repozitář.

Kdy ho spustit

Po zásahu do .githooks/ nebo do sdílené rutiny auto-push. Je součástí build i check pipeline.

Co shodí běh

  • Po úspěšném mergi bez fast-forward se hook nezastaví — dřív se zastavoval a merge na master se tvářil jako nasazený, ačkoli push nikdy neproběhl.
  • Rozdělaný rebase, cherry-pick, bisect i rozpracované řešení konfliktu hook zastaví — a nově to vypíše, místo aby mlčel.
  • Mimo větev master zůstává hook tichý no-op.

Co je potřeba vědět

  • Nespouští push ani build. Zastaví rutinu hned za guardem přes COOP_NO_AUTOPUSH a rozhodnutí čte z toho, která hláška padne — proto může běžet v každé pipeline bez rizika, že něco zveřejní.
  • První kontrola neměří náš kód, ale chování gitu: že MERGE_HEAD při běhu post-merge ještě existuje. Celý guard na tom faktu stojí, a právě jeho záměna za „merge probíhá“ byla ta chyba.
  • Tichý návrat je u nasazovacího mechanismu horší než hlasitý odmítnutý push: nic se nevypsalo se čte jako proběhlo to. Proto je hlášku vidět i tam, kde se stejně nic nenasadí.

Vstupy a výstupy

Čte

  • .githooks/lib/auto-push-master.sh

Popis vychází z hlavičkového komentáře zdrojového souboru. Volání, zařazení do pipeline i členství v pre-commit hooku se dopočítávají při každém buildu ze samotného repozitáře.