Files
gastown/.githooks/pre-push
aleiby 7016b33b39 fix(hooks): allow feature branches in contributor workflow (#850)
The pre-push hook now detects when an `upstream` remote is configured
and allows feature branches for the fork contribution workflow.

Previously, the hook blocked all non-main branches, which prevented
pushing PR branches to forks. Now the blocking logic checks for an
upstream remote - if present, it skips the block and allows the push.

The check wraps the blocking logic (rather than early-out) so that
any future additions to the hook will still apply to contributor
workflows.

Fixes #848

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:12:34 -08:00

39 lines
1.2 KiB
Bash
Executable File

#!/bin/bash
# Block PRs by preventing pushes to arbitrary feature branches.
# Gas Town agents push to main (crew) or polecat/* branches (polecats).
# PRs are for external contributors only.
# Allowed patterns:
# main, beads-sync - Direct work branches
# polecat/* - Polecat working branches (Refinery merges these)
while read local_ref local_sha remote_ref remote_sha; do
branch="${remote_ref#refs/heads/}"
case "$branch" in
main|beads-sync|polecat/*)
# Allowed branches
;;
*)
# Allow feature branches when contributing to upstream (fork workflow).
# If an 'upstream' remote exists, this is a contribution setup where
# feature branches are needed for PRs. See: #848
if ! git remote get-url upstream &>/dev/null; then
echo "ERROR: Invalid branch for Gas Town agents."
echo ""
echo "Blocked push to: $branch"
echo ""
echo "Allowed branches:"
echo " main - Crew workers push here directly"
echo " polecat/* - Polecat working branches"
echo " beads-sync - Beads synchronization"
echo ""
echo "Do NOT create PRs. Push to main or let Refinery merge polecat work."
exit 1
fi
;;
esac
done
exit 0