# EXAMPLE USAGE: # # Refer for explanation to following link: # https://lefthook.dev/configuration/ # # pre-push: # jobs: # - name: packages audit # tags: # - frontend # - security # run: yarn audit # # - name: gems audit # tags: # - backend # - security # run: bundle audit # # pre-commit: # parallel: true # jobs: # - run: yarn eslint {staged_files} # glob: "*.{js,ts,jsx,tsx}" # # - name: rubocop # glob: "*.rb" # exclude: # - config/application.rb # - config/routes.rb # run: bundle exec rubocop --force-exclusion {all_files} # # - name: govet # files: git ls-files -m # glob: "*.go" # run: go vet {files} # # - script: "hello.js" # runner: node # # - script: "hello.go" # runner: go run pre-commit: # 串行执行(不设 parallel),避免与 check:type 同时运行导致低配机内存/CPU 瞬时飙升。 # lint 仅检查暂存文件并自动修复后回填,大幅降低负载;check:type 仍需全量。 jobs: - name: oxlint glob: '*.{js,jsx,ts,tsx,vue,cjs,mjs,cts,mts}' run: pnpm exec oxlint --fix --type-aware --threads=4 --no-error-on-unmatched-pattern {staged_files} stage_fixed: true - name: oxfmt glob: '*.{js,jsx,ts,tsx,vue,cjs,mjs,cts,mts,json,jsonc}' run: pnpm exec oxfmt --threads=4 --no-error-on-unmatched-pattern {staged_files} stage_fixed: true - name: eslint glob: '*.{js,jsx,ts,tsx,vue,cjs,mjs,cts,mts}' run: pnpm exec eslint --fix {staged_files} stage_fixed: true - name: stylelint glob: '*.{vue,css,less,scss}' run: pnpm exec stylelint --fix {staged_files} stage_fixed: true # 类型检查改为「增量」:全量 turbo run typecheck 要跑 38 个任务(含 vue-tsc)。 # --filter=...[HEAD] 只校验「自 HEAD 起有改动的包 + 依赖它们的包」,实测 38 → 10 个任务。 # --concurrency=4 限制并发,避免 dev server 在跑时瞬时打满内存/CPU。 # 注意:2026-09-15「commit 卡死」的真凶不在这里,而是 eslint 规则 n/no-extraneous-import # (已在 eslint-config 中关闭,详见 agents.md 第 8 节现象 C),本项仅为缩时优化。 # 应急跳过(例如纯文档/配置提交):LEFTHOOK=0 git commit ...(该次提交跳过全部钩子)。 - name: checkType run: pnpm exec turbo run typecheck --filter=...[HEAD] --concurrency=4 post-merge: commands: install: run: pnpm install commit-msg: commands: commitlint: run: pnpm exec commitlint --edit $1