mcp-stream-workflow/hooks/post-commit
2025-12-27 19:07:51 -08:00

73 lines
2.4 KiB
Bash
Executable file

#!/usr/bin/env bash
#
# Post-Commit Hook for Stream Worktrees
#
# Purpose: Track commit count and trigger dashboard sync every 3-5 commits
# Location: Installed to each worktree's .git/hooks/post-commit by start_stream
#
# This hook automatically:
# 1. Increments commit counter
# 2. Triggers dashboard sync when threshold reached (default: 3 commits)
# 3. Resets counter after sync
#
# The dashboard sync runs in the background (non-blocking) and updates
# STATUS_DASHBOARD.md in the main project with current progress.
#
set -e
# ============================================================================
# Configuration
# ============================================================================
WORKTREE_DIR="$(git rev-parse --show-toplevel)"
COUNT_FILE="${WORKTREE_DIR}/.git/info/commit-count"
HOOK_DIR="$(cd "$(dirname "$0")" && pwd)"
# Get sync threshold from git config (default: 3)
SYNC_THRESHOLD="$(git config --get stream-workflow.sync-threshold || echo "3")"
# ============================================================================
# Commit Counter
# ============================================================================
# Read current count
if [ -f "$COUNT_FILE" ]; then
COUNT=$(cat "$COUNT_FILE")
else
COUNT=0
fi
# Increment
COUNT=$((COUNT + 1))
echo "$COUNT" > "$COUNT_FILE"
echo "[post-commit] Commit #${COUNT} since last dashboard sync"
# ============================================================================
# Dashboard Sync Trigger
# ============================================================================
if [ "$COUNT" -ge "$SYNC_THRESHOLD" ]; then
echo "[post-commit] Threshold reached (${COUNT}/${SYNC_THRESHOLD}) - syncing dashboard..."
# Reset counter immediately (before sync to avoid race conditions)
echo "0" > "$COUNT_FILE"
# Trigger dashboard sync in background (non-blocking)
# This allows the commit to complete immediately
if [ -x "${HOOK_DIR}/sync-dashboard.sh" ]; then
"${HOOK_DIR}/sync-dashboard.sh" &
SYNC_PID=$!
echo "[post-commit] Dashboard sync started (PID: ${SYNC_PID})"
else
echo "[post-commit] Warning: sync-dashboard.sh not found or not executable"
echo "[post-commit] Expected: ${HOOK_DIR}/sync-dashboard.sh"
fi
else
REMAINING=$((SYNC_THRESHOLD - COUNT))
echo "[post-commit] ${REMAINING} more commit(s) until next dashboard sync"
fi
# Exit successfully (don't block commit)
exit 0