#!/usr/bin/env bash # safe-commit.sh – Commit with pre-commit hooks guaranteed to run # Usage: ./scripts/safe-commit.sh "commit message" # # This script ensures lint + PHPUnit checks always execute, even when committing # from non-interactive contexts (CI, AI agents, etc.). set -euo pipefail if [ -z "${1:-}" ]; then echo "❌ Usage: ./scripts/safe-commit.sh \"commit message\"" exit 1 fi MSG="$1" REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" cd "$REPO_ROOT" # Ensure hooks directory exists and is configured if [ -d ".husky" ]; then git config core.hooksPath .husky fi # Run pre-commit checks manually as a safety net (in case hook is skipped) # Same logic as .husky/pre-commit, just in case the hook is bypassed. ./scripts/pre-commit-checks.sh # Commit with hooks enabled (no --no-verify) git commit -m "$MSG"