- Created 19 AI-discoverable skills in .github/skills/ for GitHub Copilot - Updated 13 VS Code tasks to use skill-runner.sh - Added validation and helper infrastructure scripts - Maintained backward compatibility with deprecation notices - All tests pass with 85%+ coverage, zero security issues Benefits: - Skills are auto-discovered by GitHub Copilot - Consistent execution interface across all tools - Self-documenting with comprehensive SKILL.md files - Progressive disclosure reduces context usage - CI/CD workflows can use standardized skill-runner Closes: (add issue number if applicable) BREAKING CHANGE: None - backward compatible with 1 release cycle deprecation period
97 lines
2.8 KiB
Bash
Executable File
97 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# QA Pre-commit All - Execution Script
|
|
#
|
|
# This script runs all pre-commit hooks for comprehensive code quality validation.
|
|
|
|
set -euo pipefail
|
|
|
|
# Source helper scripts
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
SKILLS_SCRIPTS_DIR="$(cd "${SCRIPT_DIR}/../scripts" && pwd)"
|
|
|
|
# shellcheck source=../scripts/_logging_helpers.sh
|
|
source "${SKILLS_SCRIPTS_DIR}/_logging_helpers.sh"
|
|
# shellcheck source=../scripts/_error_handling_helpers.sh
|
|
source "${SKILLS_SCRIPTS_DIR}/_error_handling_helpers.sh"
|
|
# shellcheck source=../scripts/_environment_helpers.sh
|
|
source "${SKILLS_SCRIPTS_DIR}/_environment_helpers.sh"
|
|
|
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
|
|
|
|
# Validate environment
|
|
log_step "ENVIRONMENT" "Validating prerequisites"
|
|
validate_python_environment "3.8" || error_exit "Python 3.8+ is required"
|
|
|
|
# Check for virtual environment
|
|
if [[ -z "${VIRTUAL_ENV:-}" ]]; then
|
|
log_warning "Virtual environment not activated, attempting to activate .venv"
|
|
if [[ -f "${PROJECT_ROOT}/.venv/bin/activate" ]]; then
|
|
# shellcheck source=/dev/null
|
|
source "${PROJECT_ROOT}/.venv/bin/activate"
|
|
log_info "Activated virtual environment: ${VIRTUAL_ENV}"
|
|
else
|
|
error_exit "Virtual environment not found at ${PROJECT_ROOT}/.venv"
|
|
fi
|
|
fi
|
|
|
|
# Check for pre-commit
|
|
if ! command -v pre-commit &> /dev/null; then
|
|
error_exit "pre-commit not found. Install with: pip install pre-commit"
|
|
fi
|
|
|
|
# Parse arguments
|
|
FILES_MODE="${1:---all-files}"
|
|
|
|
# Validate files mode
|
|
case "${FILES_MODE}" in
|
|
--all-files|staged)
|
|
;;
|
|
*)
|
|
# If not a recognized mode, treat as a specific hook ID
|
|
HOOK_ID="${FILES_MODE}"
|
|
FILES_MODE="--all-files"
|
|
log_info "Running specific hook: ${HOOK_ID}"
|
|
;;
|
|
esac
|
|
|
|
# Change to project root
|
|
cd "${PROJECT_ROOT}"
|
|
|
|
# Execute pre-commit
|
|
log_step "VALIDATION" "Running pre-commit hooks"
|
|
log_info "Files mode: ${FILES_MODE}"
|
|
|
|
if [[ -n "${SKIP:-}" ]]; then
|
|
log_info "Skipping hooks: ${SKIP}"
|
|
fi
|
|
|
|
# Build pre-commit command
|
|
PRE_COMMIT_CMD="pre-commit run"
|
|
|
|
# Handle files mode
|
|
if [[ "${FILES_MODE}" == "staged" ]]; then
|
|
# Run on staged files only (no flag needed, this is default for 'pre-commit run')
|
|
log_info "Running on staged files only"
|
|
else
|
|
PRE_COMMIT_CMD="${PRE_COMMIT_CMD} --all-files"
|
|
fi
|
|
|
|
# Add specific hook if provided
|
|
if [[ -n "${HOOK_ID:-}" ]]; then
|
|
PRE_COMMIT_CMD="${PRE_COMMIT_CMD} ${HOOK_ID}"
|
|
fi
|
|
|
|
# Execute the validation
|
|
log_info "Executing: ${PRE_COMMIT_CMD}"
|
|
|
|
if eval "${PRE_COMMIT_CMD}"; then
|
|
log_success "All pre-commit hooks passed"
|
|
exit 0
|
|
else
|
|
exit_code=$?
|
|
log_error "One or more pre-commit hooks failed (exit code: ${exit_code})"
|
|
log_info "Review the output above for details"
|
|
log_info "Some hooks can auto-fix issues - review and commit changes if appropriate"
|
|
exit "${exit_code}"
|
|
fi
|