# Pre-commit configuration for AionUi # Ensures local checks match CI checks (TypeScript, Oxlint, Oxfmt) # # Installation: # pip install pre-commit (or: brew install pre-commit / choco install pre-commit) # prek install (or: pre-commit install) # # Run manually on staged files (same as CI pre-commit): # prek run # # Run on changed files vs main (same as CI PR check): # prek run --from-ref origin/main --to-ref HEAD # # Run on all files: # prek run --all-files default_install_hook_types: - pre-commit - commit-msg repos: # General file checks - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: check-yaml args: [--unsafe] - id: check-json - id: check-toml - id: check-merge-conflict - id: check-case-conflict - id: check-added-large-files args: [--maxkb=1000] - id: end-of-file-fixer # Only fix text files, exclude binary files and special OS files exclude: '^(\.DS_Store|Thumbs\.db|.*\.(png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|otf|pdf|zip|tar|gz|bz2|7z|exe|dll|so|dylib|node|bin))$' - id: trailing-whitespace # Auto-fix trailing whitespace in text files # Excludes binary files (matching end-of-file-fixer pattern) exclude: '^(\.DS_Store|Thumbs\.db|.*\.(png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|otf|pdf|zip|tar|gz|bz2|7z|exe|dll|so|dylib|node|bin|patch))$' # TypeScript type checking (full project check required) - repo: local hooks: - id: typecheck name: TypeScript Check entry: bunx tsc --noEmit language: system files: \.(ts|tsx)$ pass_filenames: false # Oxlint (replaces ESLint — checks staged files only) - repo: local hooks: - id: oxlint name: Oxlint entry: bun run lint language: system files: \.(ts|tsx|js|jsx)$ pass_filenames: false # Oxfmt (replaces Prettier — auto-fixes staged files only) - repo: local hooks: - id: oxfmt name: Oxfmt entry: bun run format language: system files: \.(ts|tsx|js|jsx|json|css|md|yaml|yml|toml)$ pass_filenames: true # i18n translation files validation - repo: local hooks: - id: i18n-check name: i18n Check entry: node scripts/check-i18n.js language: system files: ^packages/desktop/src/renderer/services/i18n/locales/ pass_filenames: false # Commit message format (Conventional Commits) - repo: https://github.com/compilerla/conventional-pre-commit rev: v4.2.0 hooks: - id: conventional-pre-commit stages: [commit-msg] args: [--strict, --force-scope, feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert]