#!/bin/bash # Pre-push hook: block tag pushes without release token. # Tag pushes are blocked unless /tmp/passepartout-release-approved exists. # The token is consumed (deleted) on first successful push. # # Install: # ln -sf ../../scripts/pre-push-release-guard .git/hooks/pre-push # # Returns 0 (pass) or 1 (blocked). set -euo pipefail BLOCKED=0 while read -r local_ref local_oid remote_ref remote_oid; do case "$remote_ref" in refs/tags/*) if [ ! -f /tmp/passepartout-release-approved ]; then echo "" >&2 echo "============================================================" >&2 echo " BLOCKED: tag push requires release token" >&2 echo " Only the user may authorize a release." >&2 echo " To grant permission: touch /tmp/passepartout-release-approved" >&2 echo "============================================================" >&2 echo "" >&2 BLOCKED=1 else rm /tmp/passepartout-release-approved fi ;; esac done exit $BLOCKED