# Pre-commit hooks — local Red→Green 게이트 (피드백 #6/#7/#8). # 사용법: # uv pip install pre-commit # 또는 pip install pre-commit # pre-commit install # .git/hooks/pre-commit 등록 # pre-commit run --all-files # 수동 전체 실행 # # 이후 모든 `git commit`이 자동으로 ruff + 기본 위생 검사 통과해야 commit됨. # 피드백 #6 "Red → Green 완료 시에만 Git 자동 업로드" 의 첫 단계. repos: # Ruff — 린트 + 자동 수정 (project ruff.toml 적용) - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.15.12 hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] - id: ruff-format # ruff format은 black 호환 — 기존 스타일 보존을 위해 비활성으로 시작. # 활성화 원하면 stages=[manual] 제거 + 한 번 전체 적용. stages: [manual] # 기본 위생 - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: trailing-whitespace exclude: ^(_unused/|.*\.bak.*) - id: end-of-file-fixer exclude: ^(_unused/|.*\.bak.*|.*\.png|.*\.dxf|.*\.pdf|.*\.mp4|.*\.gif) - id: check-yaml - id: check-toml - id: check-added-large-files args: [--maxkb=20480] # 20MB 한도 — Design/SAMPLE_CAD 큰 파일은 이미 git에 있음 - id: check-merge-conflict - id: detect-private-key # 비밀 누출 방지 (gcp-key.json 같은 파일 차단) - repo: https://github.com/Yelp/detect-secrets rev: v1.5.0 hooks: - id: detect-secrets args: ['--baseline', '.secrets.baseline'] exclude: ^(_unused/|tests/|.*\.bak.*|venv.*/|\.git/) # 로컬 hook — pytest 빠른 회귀만 (느린 통합 테스트 제외) # pytest는 pre-commit-hooks가 아닌 local stage로 등록 — pre-commit pull 안 함. # 사용자가 더 엄격한 게이트 원하면 stages: [pre-push] 활성. default_install_hook_types: [pre-commit] default_stages: [pre-commit] # pytest를 pre-push 스테이지에 두면 commit 빨라지고 push 직전에만 테스트. # `pre-commit install --hook-type pre-push` 추가로 활성. ci: autofix_commit_msg: 'chore(pre-commit): autofix' autoupdate_commit_msg: 'chore(pre-commit): autoupdate hook revs'