#!/bin/sh # Get list of staged files before running check STAGED_FILES=$(git diff --cached --name-only) node scripts/check-lockfile-commit.mjs if [ $? -ne 0 ]; then exit 1 fi # Run the check script (formatting, linting, and type checking) echo "Running formatting, linting, and type checking..." npm run check if [ $? -ne 0 ]; then echo "❌ Checks failed. Please fix the errors before committing." exit 1 fi # p2 has its own check (own biome.json, TypeScript 5.9; apps/ is outside the root Biome and tsc configs). # apps/ exists only in pi-private. if [ -d apps/p2 ]; then for file in $STAGED_FILES; do case "$file" in apps/p2/*|packages/*|package.json|package-lock.json|tsconfig.json|tsconfig.base.json) echo "Checking apps/p2..." npm --prefix apps/p2 run check if [ $? -ne 0 ]; then echo "❌ apps/p2 checks failed." exit 1 fi break ;; esac done fi RUN_BROWSER_SMOKE=0 for file in $STAGED_FILES; do case "$file" in packages/ai/*|packages/web-ui/*|package.json|package-lock.json) RUN_BROWSER_SMOKE=1 break ;; esac done if [ $RUN_BROWSER_SMOKE -eq 1 ]; then echo "Running browser smoke check..." npm run check:browser-smoke if [ $? -ne 0 ]; then echo "❌ Browser smoke check failed." exit 1 fi fi # Restage files that were previously staged and may have been modified by formatting for file in $STAGED_FILES; do if [ -f "$file" ]; then git add "$file" fi done echo "✅ All pre-commit checks passed!"