#!/bin/bash set -uo pipefail log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" } log "=== Starting pre-commit checks ===" cd "$(dirname "$0")/../.." PROJECT_ROOT=$(pwd) log "Project root: $PROJECT_ROOT" if ! python3 -m pre_commit --version &> /dev/null; then log "pre-commit not found, installing..." if ! command -v uv &> /dev/null; then log "uv not found, bootstrapping..." if ! curl -LsSf https://astral.sh/uv/install.sh | sh; then log "Error: Failed to bootstrap uv via astral.sh installer." exit 1 fi export PATH="$HOME/.local/bin:$PATH" if ! command -v uv &> /dev/null; then log "Error: uv still not on PATH after bootstrap." exit 1 fi fi # --break-system-packages preserves prior `pip install --user` semantics on PEP 668 agents. uv pip install --system --break-system-packages pre-commit==4.0.1 if ! python3 -m pre_commit --version &> /dev/null; then log "Error: Failed to install pre-commit." exit 1 fi fi log "Pre-commit version: $(python3 -m pre_commit --version)" log "Installing/updating pre-commit hooks..." python3 -m pre_commit install --install-hooks log "Running pre-commit checks on all files..." python3 -m pre_commit run --all-files PRE_COMMIT_EXIT_CODE=$? if [ $PRE_COMMIT_EXIT_CODE -eq 0 ]; then log "Pre-commit checks completed successfully" else log "Error: Pre-commit checks failed with exit code: $PRE_COMMIT_EXIT_CODE" fi log "=== Pre-commit checks completed with exit code: $PRE_COMMIT_EXIT_CODE ===" exit $PRE_COMMIT_EXIT_CODE