@hivehub/rulebook 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/README.md +539 -0
- package/dist/agents/claude-code.d.ts +69 -0
- package/dist/agents/claude-code.d.ts.map +1 -0
- package/dist/agents/claude-code.js +180 -0
- package/dist/agents/claude-code.js.map +1 -0
- package/dist/agents/cursor-agent.d.ts +184 -0
- package/dist/agents/cursor-agent.d.ts.map +1 -0
- package/dist/agents/cursor-agent.js +299 -0
- package/dist/agents/cursor-agent.js.map +1 -0
- package/dist/agents/gemini-cli.d.ts +69 -0
- package/dist/agents/gemini-cli.d.ts.map +1 -0
- package/dist/agents/gemini-cli.js +180 -0
- package/dist/agents/gemini-cli.js.map +1 -0
- package/dist/cli/commands.d.ts +57 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +1370 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/docs-prompts.d.ts +3 -0
- package/dist/cli/docs-prompts.d.ts.map +1 -0
- package/dist/cli/docs-prompts.js +45 -0
- package/dist/cli/docs-prompts.js.map +1 -0
- package/dist/cli/prompts.d.ts +6 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +376 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/core/agent-manager.d.ts +89 -0
- package/dist/core/agent-manager.d.ts.map +1 -0
- package/dist/core/agent-manager.js +546 -0
- package/dist/core/agent-manager.js.map +1 -0
- package/dist/core/auto-fixer.d.ts +14 -0
- package/dist/core/auto-fixer.d.ts.map +1 -0
- package/dist/core/auto-fixer.js +207 -0
- package/dist/core/auto-fixer.js.map +1 -0
- package/dist/core/changelog-generator.d.ts +44 -0
- package/dist/core/changelog-generator.d.ts.map +1 -0
- package/dist/core/changelog-generator.js +222 -0
- package/dist/core/changelog-generator.js.map +1 -0
- package/dist/core/cli-bridge.d.ts +113 -0
- package/dist/core/cli-bridge.d.ts.map +1 -0
- package/dist/core/cli-bridge.js +1094 -0
- package/dist/core/cli-bridge.js.map +1 -0
- package/dist/core/config-manager.d.ts +65 -0
- package/dist/core/config-manager.d.ts.map +1 -0
- package/dist/core/config-manager.js +266 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/coverage-checker.d.ts +14 -0
- package/dist/core/coverage-checker.d.ts.map +1 -0
- package/dist/core/coverage-checker.js +176 -0
- package/dist/core/coverage-checker.js.map +1 -0
- package/dist/core/custom-templates.d.ts +27 -0
- package/dist/core/custom-templates.d.ts.map +1 -0
- package/dist/core/custom-templates.js +122 -0
- package/dist/core/custom-templates.js.map +1 -0
- package/dist/core/dependency-checker.d.ts +21 -0
- package/dist/core/dependency-checker.d.ts.map +1 -0
- package/dist/core/dependency-checker.js +247 -0
- package/dist/core/dependency-checker.js.map +1 -0
- package/dist/core/detector.d.ts +3 -0
- package/dist/core/detector.d.ts.map +1 -0
- package/dist/core/detector.js +1443 -0
- package/dist/core/detector.js.map +1 -0
- package/dist/core/docs-generator.d.ts +9 -0
- package/dist/core/docs-generator.d.ts.map +1 -0
- package/dist/core/docs-generator.js +531 -0
- package/dist/core/docs-generator.js.map +1 -0
- package/dist/core/generator.d.ts +16 -0
- package/dist/core/generator.d.ts.map +1 -0
- package/dist/core/generator.js +561 -0
- package/dist/core/generator.js.map +1 -0
- package/dist/core/gitignore-generator.d.ts +13 -0
- package/dist/core/gitignore-generator.d.ts.map +1 -0
- package/dist/core/gitignore-generator.js +307 -0
- package/dist/core/gitignore-generator.js.map +1 -0
- package/dist/core/health-scorer.d.ts +22 -0
- package/dist/core/health-scorer.d.ts.map +1 -0
- package/dist/core/health-scorer.js +395 -0
- package/dist/core/health-scorer.js.map +1 -0
- package/dist/core/logger.d.ts +116 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +289 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/merger.d.ts +6 -0
- package/dist/core/merger.d.ts.map +1 -0
- package/dist/core/merger.js +131 -0
- package/dist/core/merger.js.map +1 -0
- package/dist/core/migrator.d.ts +19 -0
- package/dist/core/migrator.d.ts.map +1 -0
- package/dist/core/migrator.js +102 -0
- package/dist/core/migrator.js.map +1 -0
- package/dist/core/minimal-scaffolder.d.ts +8 -0
- package/dist/core/minimal-scaffolder.d.ts.map +1 -0
- package/dist/core/minimal-scaffolder.js +51 -0
- package/dist/core/minimal-scaffolder.js.map +1 -0
- package/dist/core/modern-console-new.d.ts +81 -0
- package/dist/core/modern-console-new.d.ts.map +1 -0
- package/dist/core/modern-console-new.js +340 -0
- package/dist/core/modern-console-new.js.map +1 -0
- package/dist/core/modern-console.d.ts +99 -0
- package/dist/core/modern-console.d.ts.map +1 -0
- package/dist/core/modern-console.js +568 -0
- package/dist/core/modern-console.js.map +1 -0
- package/dist/core/openspec-manager.d.ts +133 -0
- package/dist/core/openspec-manager.d.ts.map +1 -0
- package/dist/core/openspec-manager.js +605 -0
- package/dist/core/openspec-manager.js.map +1 -0
- package/dist/core/openspec-migrator.d.ts +27 -0
- package/dist/core/openspec-migrator.d.ts.map +1 -0
- package/dist/core/openspec-migrator.js +255 -0
- package/dist/core/openspec-migrator.js.map +1 -0
- package/dist/core/task-manager.d.ts +65 -0
- package/dist/core/task-manager.d.ts.map +1 -0
- package/dist/core/task-manager.js +318 -0
- package/dist/core/task-manager.js.map +1 -0
- package/dist/core/test-task-manager.d.ts +49 -0
- package/dist/core/test-task-manager.d.ts.map +1 -0
- package/dist/core/test-task-manager.js +121 -0
- package/dist/core/test-task-manager.js.map +1 -0
- package/dist/core/validator.d.ts +21 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +177 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/core/version-bumper.d.ts +19 -0
- package/dist/core/version-bumper.d.ts.map +1 -0
- package/dist/core/version-bumper.js +180 -0
- package/dist/core/version-bumper.js.map +1 -0
- package/dist/core/watcher.d.ts +9 -0
- package/dist/core/watcher.d.ts.map +1 -0
- package/dist/core/watcher.js +22 -0
- package/dist/core/watcher.js.map +1 -0
- package/dist/core/workflow-generator.d.ts +10 -0
- package/dist/core/workflow-generator.d.ts.map +1 -0
- package/dist/core/workflow-generator.js +279 -0
- package/dist/core/workflow-generator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +159 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/handlers/archive-task.d.ts +17 -0
- package/dist/mcp/handlers/archive-task.d.ts.map +1 -0
- package/dist/mcp/handlers/archive-task.js +36 -0
- package/dist/mcp/handlers/archive-task.js.map +1 -0
- package/dist/mcp/handlers/create-task.d.ts +17 -0
- package/dist/mcp/handlers/create-task.d.ts.map +1 -0
- package/dist/mcp/handlers/create-task.js +56 -0
- package/dist/mcp/handlers/create-task.js.map +1 -0
- package/dist/mcp/handlers/list-tasks.d.ts +22 -0
- package/dist/mcp/handlers/list-tasks.d.ts.map +1 -0
- package/dist/mcp/handlers/list-tasks.js +42 -0
- package/dist/mcp/handlers/list-tasks.js.map +1 -0
- package/dist/mcp/handlers/show-task.d.ts +25 -0
- package/dist/mcp/handlers/show-task.d.ts.map +1 -0
- package/dist/mcp/handlers/show-task.js +43 -0
- package/dist/mcp/handlers/show-task.js.map +1 -0
- package/dist/mcp/handlers/update-task.d.ts +17 -0
- package/dist/mcp/handlers/update-task.d.ts.map +1 -0
- package/dist/mcp/handlers/update-task.js +35 -0
- package/dist/mcp/handlers/update-task.js.map +1 -0
- package/dist/mcp/handlers/validate-task.d.ts +15 -0
- package/dist/mcp/handlers/validate-task.d.ts.map +1 -0
- package/dist/mcp/handlers/validate-task.js +27 -0
- package/dist/mcp/handlers/validate-task.js.map +1 -0
- package/dist/mcp/rulebook-config.d.ts +22 -0
- package/dist/mcp/rulebook-config.d.ts.map +1 -0
- package/dist/mcp/rulebook-config.js +65 -0
- package/dist/mcp/rulebook-config.js.map +1 -0
- package/dist/mcp/rulebook-server.d.ts +4 -0
- package/dist/mcp/rulebook-server.d.ts.map +1 -0
- package/dist/mcp/rulebook-server.js +246 -0
- package/dist/mcp/rulebook-server.js.map +1 -0
- package/dist/types.d.ts +190 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/file-system.d.ts +9 -0
- package/dist/utils/file-system.d.ts.map +1 -0
- package/dist/utils/file-system.js +51 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/git-hooks.d.ts +8 -0
- package/dist/utils/git-hooks.d.ts.map +1 -0
- package/dist/utils/git-hooks.js +440 -0
- package/dist/utils/git-hooks.js.map +1 -0
- package/dist/utils/rulesignore.d.ts +9 -0
- package/dist/utils/rulesignore.d.ts.map +1 -0
- package/dist/utils/rulesignore.js +42 -0
- package/dist/utils/rulesignore.js.map +1 -0
- package/package.json +106 -0
- package/templates/cli/AIDER.md +49 -0
- package/templates/cli/AMAZON_Q.md +25 -0
- package/templates/cli/AUGGIE.md +32 -0
- package/templates/cli/CLAUDE.md +32 -0
- package/templates/cli/CLAUDE_CODE.md +35 -0
- package/templates/cli/CLINE.md +32 -0
- package/templates/cli/CODEBUDDY.md +20 -0
- package/templates/cli/CODEIUM.md +20 -0
- package/templates/cli/CODEX.md +21 -0
- package/templates/cli/CONTINUE.md +34 -0
- package/templates/cli/CURSOR_CLI.md +28 -0
- package/templates/cli/FACTORY.md +18 -0
- package/templates/cli/GEMINI.md +35 -0
- package/templates/cli/KILOCODE.md +18 -0
- package/templates/cli/OPENCODE.md +18 -0
- package/templates/cli/_GENERIC_TEMPLATE.md +29 -0
- package/templates/commands/rulebook-task-apply.md +67 -0
- package/templates/commands/rulebook-task-archive.md +70 -0
- package/templates/commands/rulebook-task-create.md +93 -0
- package/templates/commands/rulebook-task-list.md +42 -0
- package/templates/commands/rulebook-task-show.md +52 -0
- package/templates/commands/rulebook-task-validate.md +53 -0
- package/templates/core/AGENT_AUTOMATION.md +184 -0
- package/templates/core/DAG.md +304 -0
- package/templates/core/DOCUMENTATION_RULES.md +37 -0
- package/templates/core/QUALITY_ENFORCEMENT.md +68 -0
- package/templates/core/RULEBOOK.md +1874 -0
- package/templates/frameworks/ANGULAR.md +36 -0
- package/templates/frameworks/DJANGO.md +83 -0
- package/templates/frameworks/ELECTRON.md +147 -0
- package/templates/frameworks/FLASK.md +38 -0
- package/templates/frameworks/FLUTTER.md +55 -0
- package/templates/frameworks/JQUERY.md +32 -0
- package/templates/frameworks/LARAVEL.md +38 -0
- package/templates/frameworks/NESTJS.md +43 -0
- package/templates/frameworks/NEXTJS.md +127 -0
- package/templates/frameworks/NUXT.md +40 -0
- package/templates/frameworks/RAILS.md +66 -0
- package/templates/frameworks/REACT.md +38 -0
- package/templates/frameworks/REACT_NATIVE.md +47 -0
- package/templates/frameworks/SPRING.md +39 -0
- package/templates/frameworks/SYMFONY.md +36 -0
- package/templates/frameworks/VUE.md +36 -0
- package/templates/frameworks/ZEND.md +35 -0
- package/templates/git/CI_CD_PATTERNS.md +661 -0
- package/templates/git/GITHUB_ACTIONS.md +728 -0
- package/templates/git/GITLAB_CI.md +730 -0
- package/templates/git/GIT_WORKFLOW.md +1157 -0
- package/templates/git/SECRETS_MANAGEMENT.md +585 -0
- package/templates/hooks/COMMIT_MSG.md +530 -0
- package/templates/hooks/POST_CHECKOUT.md +546 -0
- package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -0
- package/templates/hooks/PRE_COMMIT.md +414 -0
- package/templates/hooks/PRE_PUSH.md +601 -0
- package/templates/hooks/csharp-pre-commit.sh +23 -0
- package/templates/hooks/csharp-pre-push.sh +23 -0
- package/templates/hooks/dart-pre-commit.sh +30 -0
- package/templates/hooks/dart-pre-push.sh +25 -0
- package/templates/hooks/elixir-pre-commit.sh +32 -0
- package/templates/hooks/elixir-pre-push.sh +31 -0
- package/templates/hooks/erlang-pre-commit.sh +30 -0
- package/templates/hooks/erlang-pre-push.sh +37 -0
- package/templates/hooks/go-pre-commit.sh +40 -0
- package/templates/hooks/go-pre-push.sh +31 -0
- package/templates/hooks/haskell-pre-commit.sh +41 -0
- package/templates/hooks/haskell-pre-push.sh +37 -0
- package/templates/hooks/java-pre-commit.sh +34 -0
- package/templates/hooks/java-pre-push.sh +24 -0
- package/templates/hooks/kotlin-pre-commit.sh +32 -0
- package/templates/hooks/kotlin-pre-push.sh +16 -0
- package/templates/hooks/php-pre-commit.sh +36 -0
- package/templates/hooks/php-pre-push.sh +26 -0
- package/templates/hooks/python-pre-commit.sh +51 -0
- package/templates/hooks/python-pre-push.sh +25 -0
- package/templates/hooks/ruby-pre-commit.sh +33 -0
- package/templates/hooks/ruby-pre-push.sh +32 -0
- package/templates/hooks/rust-pre-commit.sh +30 -0
- package/templates/hooks/rust-pre-push.sh +30 -0
- package/templates/hooks/scala-pre-commit.sh +32 -0
- package/templates/hooks/scala-pre-push.sh +24 -0
- package/templates/hooks/swift-pre-commit.sh +25 -0
- package/templates/hooks/swift-pre-push.sh +23 -0
- package/templates/hooks/typescript-pre-commit.sh +37 -0
- package/templates/hooks/typescript-pre-push.sh +36 -0
- package/templates/ides/COPILOT.md +37 -0
- package/templates/ides/CURSOR.md +43 -0
- package/templates/ides/JETBRAINS_AI.md +35 -0
- package/templates/ides/REPLIT.md +36 -0
- package/templates/ides/TABNINE.md +29 -0
- package/templates/ides/VSCODE.md +40 -0
- package/templates/ides/WINDSURF.md +36 -0
- package/templates/ides/ZED.md +32 -0
- package/templates/languages/ADA.md +58 -0
- package/templates/languages/C.md +333 -0
- package/templates/languages/CPP.md +743 -0
- package/templates/languages/CSHARP.md +417 -0
- package/templates/languages/DART.md +332 -0
- package/templates/languages/ELIXIR.md +454 -0
- package/templates/languages/ERLANG.md +361 -0
- package/templates/languages/GO.md +645 -0
- package/templates/languages/HASKELL.md +177 -0
- package/templates/languages/JAVA.md +607 -0
- package/templates/languages/JAVASCRIPT.md +631 -0
- package/templates/languages/JULIA.md +97 -0
- package/templates/languages/KOTLIN.md +511 -0
- package/templates/languages/LISP.md +100 -0
- package/templates/languages/LUA.md +74 -0
- package/templates/languages/OBJECTIVEC.md +90 -0
- package/templates/languages/PHP.md +416 -0
- package/templates/languages/PYTHON.md +682 -0
- package/templates/languages/R.md +350 -0
- package/templates/languages/RUBY.md +421 -0
- package/templates/languages/RUST.md +477 -0
- package/templates/languages/SAS.md +73 -0
- package/templates/languages/SCALA.md +348 -0
- package/templates/languages/SOLIDITY.md +580 -0
- package/templates/languages/SQL.md +137 -0
- package/templates/languages/SWIFT.md +466 -0
- package/templates/languages/TYPESCRIPT.md +591 -0
- package/templates/languages/ZIG.md +265 -0
- package/templates/modules/ATLASSIAN.md +255 -0
- package/templates/modules/CONTEXT7.md +54 -0
- package/templates/modules/FIGMA.md +267 -0
- package/templates/modules/GITHUB_MCP.md +64 -0
- package/templates/modules/GRAFANA.md +328 -0
- package/templates/modules/NOTION.md +247 -0
- package/templates/modules/PLAYWRIGHT.md +90 -0
- package/templates/modules/RULEBOOK_MCP.md +156 -0
- package/templates/modules/SERENA.md +337 -0
- package/templates/modules/SUPABASE.md +223 -0
- package/templates/modules/SYNAP.md +69 -0
- package/templates/modules/VECTORIZER.md +63 -0
- package/templates/services/AZURE_BLOB.md +184 -0
- package/templates/services/CASSANDRA.md +239 -0
- package/templates/services/DYNAMODB.md +308 -0
- package/templates/services/ELASTICSEARCH.md +347 -0
- package/templates/services/GCS.md +178 -0
- package/templates/services/INFLUXDB.md +265 -0
- package/templates/services/KAFKA.md +341 -0
- package/templates/services/MARIADB.md +183 -0
- package/templates/services/MEMCACHED.md +242 -0
- package/templates/services/MINIO.md +201 -0
- package/templates/services/MONGODB.md +268 -0
- package/templates/services/MYSQL.md +358 -0
- package/templates/services/NEO4J.md +247 -0
- package/templates/services/ORACLE.md +290 -0
- package/templates/services/POSTGRESQL.md +326 -0
- package/templates/services/RABBITMQ.md +286 -0
- package/templates/services/REDIS.md +292 -0
- package/templates/services/S3.md +298 -0
- package/templates/services/SQLITE.md +294 -0
- package/templates/services/SQLSERVER.md +294 -0
- package/templates/workflows/codespell.yml +31 -0
- package/templates/workflows/cpp-lint.yml +47 -0
- package/templates/workflows/cpp-publish.yml +119 -0
- package/templates/workflows/cpp-test.yml +77 -0
- package/templates/workflows/dotnet-lint.yml +29 -0
- package/templates/workflows/dotnet-publish.yml +40 -0
- package/templates/workflows/dotnet-test.yml +41 -0
- package/templates/workflows/elixir-lint.yml +45 -0
- package/templates/workflows/elixir-publish.yml +49 -0
- package/templates/workflows/elixir-test.yml +54 -0
- package/templates/workflows/erlang-lint.yml +47 -0
- package/templates/workflows/erlang-test.yml +62 -0
- package/templates/workflows/go-lint.yml +39 -0
- package/templates/workflows/go-publish.yml +95 -0
- package/templates/workflows/go-test.yml +59 -0
- package/templates/workflows/java-lint.yml +60 -0
- package/templates/workflows/java-publish.yml +120 -0
- package/templates/workflows/java-test.yml +85 -0
- package/templates/workflows/kotlin-lint.yml +34 -0
- package/templates/workflows/kotlin-publish.yml +56 -0
- package/templates/workflows/kotlin-test.yml +48 -0
- package/templates/workflows/php-lint.yml +39 -0
- package/templates/workflows/php-publish.yml +50 -0
- package/templates/workflows/php-test.yml +54 -0
- package/templates/workflows/python-lint.yml +47 -0
- package/templates/workflows/python-publish.yml +91 -0
- package/templates/workflows/python-test.yml +59 -0
- package/templates/workflows/rust-lint.yml +54 -0
- package/templates/workflows/rust-publish.yml +66 -0
- package/templates/workflows/rust-test.yml +75 -0
- package/templates/workflows/solidity-lint.yml +41 -0
- package/templates/workflows/solidity-test.yml +47 -0
- package/templates/workflows/swift-lint.yml +32 -0
- package/templates/workflows/swift-publish.yml +58 -0
- package/templates/workflows/swift-test.yml +44 -0
- package/templates/workflows/typescript-lint.yml +61 -0
- package/templates/workflows/typescript-publish.yml +60 -0
- package/templates/workflows/typescript-test.yml +73 -0
- package/templates/workflows/zig-lint.yml +27 -0
- package/templates/workflows/zig-test.yml +40 -0
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
# Pre-Commit Hook
|
|
2
|
+
|
|
3
|
+
This template provides guidance for implementing pre-commit git hooks that enforce code quality standards before commits are created.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
Pre-commit hooks run automatically before each commit to:
|
|
8
|
+
- Catch syntax errors and linting issues early
|
|
9
|
+
- Ensure code formatting standards
|
|
10
|
+
- Prevent broken code from entering version control
|
|
11
|
+
- Enforce type checking before commit
|
|
12
|
+
- Keep commits fast (avoid slow tests here)
|
|
13
|
+
|
|
14
|
+
## Agent Automation Commands
|
|
15
|
+
|
|
16
|
+
When implementing or modifying pre-commit hooks, use these patterns:
|
|
17
|
+
|
|
18
|
+
### TypeScript/JavaScript Projects
|
|
19
|
+
```bash
|
|
20
|
+
# Install hook
|
|
21
|
+
npm run format && npm run lint && npm run type-check
|
|
22
|
+
|
|
23
|
+
# Skip hook (emergency only)
|
|
24
|
+
git commit --no-verify -m "message"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Python Projects
|
|
28
|
+
```bash
|
|
29
|
+
# Install hook
|
|
30
|
+
black . && ruff check . && mypy .
|
|
31
|
+
|
|
32
|
+
# Skip hook (emergency only)
|
|
33
|
+
git commit --no-verify -m "message"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Rust Projects
|
|
37
|
+
```bash
|
|
38
|
+
# Install hook
|
|
39
|
+
cargo fmt --check && cargo clippy -- -D warnings
|
|
40
|
+
|
|
41
|
+
# Skip hook (emergency only)
|
|
42
|
+
git commit --no-verify -m "message"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Go Projects
|
|
46
|
+
```bash
|
|
47
|
+
# Install hook
|
|
48
|
+
gofmt -s -w . && golangci-lint run
|
|
49
|
+
|
|
50
|
+
# Skip hook (emergency only)
|
|
51
|
+
git commit --no-verify -m "message"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Hook Implementation Patterns
|
|
55
|
+
|
|
56
|
+
### Cross-Platform Node.js Hook (Recommended)
|
|
57
|
+
|
|
58
|
+
**Shell Wrapper** (`.git/hooks/pre-commit`):
|
|
59
|
+
```bash
|
|
60
|
+
#!/bin/sh
|
|
61
|
+
|
|
62
|
+
# Find Node.js executable (cross-platform)
|
|
63
|
+
NODE_PATH=""
|
|
64
|
+
if command -v node >/dev/null 2>&1; then
|
|
65
|
+
NODE_PATH="node"
|
|
66
|
+
elif [ -f "/c/Program Files/nodejs/node.exe" ]; then
|
|
67
|
+
NODE_PATH="/c/Program Files/nodejs/node.exe"
|
|
68
|
+
elif [ -f "/usr/bin/node" ]; then
|
|
69
|
+
NODE_PATH="/usr/bin/node"
|
|
70
|
+
else
|
|
71
|
+
echo "Error: Node.js not found"
|
|
72
|
+
exit 1
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Execute Node.js script
|
|
76
|
+
"$NODE_PATH" "$(dirname "$0")/pre-commit.js"
|
|
77
|
+
exit $?
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Node.js Script** (`.git/hooks/pre-commit.js`):
|
|
81
|
+
```javascript
|
|
82
|
+
#!/usr/bin/env node
|
|
83
|
+
|
|
84
|
+
const { spawn } = require('child_process');
|
|
85
|
+
|
|
86
|
+
function runCommand(command, args) {
|
|
87
|
+
return new Promise((resolve, reject) => {
|
|
88
|
+
const proc = spawn(command, args, {
|
|
89
|
+
stdio: 'inherit',
|
|
90
|
+
shell: true,
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
proc.on('close', (code) => {
|
|
94
|
+
if (code !== 0) reject(new Error(`Command failed: ${command} ${args.join(' ')}`));
|
|
95
|
+
else resolve();
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
async function main() {
|
|
101
|
+
console.log('🔍 Running pre-commit checks...\n');
|
|
102
|
+
|
|
103
|
+
try {
|
|
104
|
+
// Format check
|
|
105
|
+
console.log('📝 Checking formatting...');
|
|
106
|
+
await runCommand('npm', ['run', 'format']);
|
|
107
|
+
|
|
108
|
+
// Lint
|
|
109
|
+
console.log('\n🔧 Running linter...');
|
|
110
|
+
await runCommand('npm', ['run', 'lint']);
|
|
111
|
+
|
|
112
|
+
// Type check
|
|
113
|
+
console.log('\n🔒 Type checking...');
|
|
114
|
+
await runCommand('npm', ['run', 'type-check']);
|
|
115
|
+
|
|
116
|
+
console.log('\n✅ Pre-commit checks passed!\n');
|
|
117
|
+
process.exit(0);
|
|
118
|
+
} catch (error) {
|
|
119
|
+
console.error('\n❌ Pre-commit checks failed!');
|
|
120
|
+
console.error('💡 Fix the issues or use --no-verify to skip (not recommended)\n');
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
main();
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Shell-Only Hook (Simple)
|
|
129
|
+
|
|
130
|
+
**`.git/hooks/pre-commit`**:
|
|
131
|
+
```bash
|
|
132
|
+
#!/bin/sh
|
|
133
|
+
|
|
134
|
+
echo "🔍 Running pre-commit checks..."
|
|
135
|
+
|
|
136
|
+
# Format check
|
|
137
|
+
echo "📝 Checking formatting..."
|
|
138
|
+
npm run format || exit 1
|
|
139
|
+
|
|
140
|
+
# Lint
|
|
141
|
+
echo "🔧 Running linter..."
|
|
142
|
+
npm run lint || exit 1
|
|
143
|
+
|
|
144
|
+
# Type check
|
|
145
|
+
echo "🔒 Type checking..."
|
|
146
|
+
npm run type-check || exit 1
|
|
147
|
+
|
|
148
|
+
echo "✅ Pre-commit checks passed!"
|
|
149
|
+
exit 0
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Best Practices
|
|
153
|
+
|
|
154
|
+
### ✅ DO Include in Pre-Commit
|
|
155
|
+
|
|
156
|
+
1. **Fast Checks Only** (< 30 seconds total)
|
|
157
|
+
- Code formatting validation
|
|
158
|
+
- Linting (syntax, style)
|
|
159
|
+
- Type checking
|
|
160
|
+
- Basic syntax validation
|
|
161
|
+
|
|
162
|
+
2. **Automatic Fixes When Possible**
|
|
163
|
+
```javascript
|
|
164
|
+
// Auto-format before committing
|
|
165
|
+
await runCommand('npm', ['run', 'format:fix']);
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
3. **Clear Error Messages**
|
|
169
|
+
```javascript
|
|
170
|
+
console.error('❌ Linting failed!');
|
|
171
|
+
console.error('💡 Run: npm run lint:fix');
|
|
172
|
+
console.error('📖 Or skip with: git commit --no-verify');
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
4. **Staged Files Only** (Advanced)
|
|
176
|
+
```bash
|
|
177
|
+
# Only check staged files
|
|
178
|
+
git diff --cached --name-only --diff-filter=ACM | \
|
|
179
|
+
grep '\.ts$' | \
|
|
180
|
+
xargs eslint
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### ❌ DON'T Include in Pre-Commit
|
|
184
|
+
|
|
185
|
+
1. **Slow Operations** (move to pre-push)
|
|
186
|
+
- Full test suite
|
|
187
|
+
- Integration tests
|
|
188
|
+
- E2E tests
|
|
189
|
+
- Build verification
|
|
190
|
+
- Coverage reports
|
|
191
|
+
|
|
192
|
+
2. **External API Calls**
|
|
193
|
+
- Deployment checks
|
|
194
|
+
- Remote validation
|
|
195
|
+
- Database migrations
|
|
196
|
+
|
|
197
|
+
3. **Heavy Operations**
|
|
198
|
+
- Large file processing
|
|
199
|
+
- Compilation of entire codebase
|
|
200
|
+
- Documentation generation
|
|
201
|
+
|
|
202
|
+
## Language-Specific Patterns
|
|
203
|
+
|
|
204
|
+
### TypeScript/JavaScript (npm/pnpm/yarn)
|
|
205
|
+
|
|
206
|
+
```json
|
|
207
|
+
{
|
|
208
|
+
"scripts": {
|
|
209
|
+
"format": "prettier --check \"src/**/*.ts\"",
|
|
210
|
+
"format:fix": "prettier --write \"src/**/*.ts\"",
|
|
211
|
+
"lint": "eslint src/**/*.ts --quiet",
|
|
212
|
+
"lint:fix": "eslint src/**/*.ts --fix --quiet",
|
|
213
|
+
"type-check": "tsc --noEmit"
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Python (poetry/pip)
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
#!/bin/sh
|
|
222
|
+
echo "🔍 Running pre-commit checks..."
|
|
223
|
+
|
|
224
|
+
# Format check
|
|
225
|
+
black --check . || exit 1
|
|
226
|
+
|
|
227
|
+
# Lint
|
|
228
|
+
ruff check . || exit 1
|
|
229
|
+
|
|
230
|
+
# Type check
|
|
231
|
+
mypy . || exit 1
|
|
232
|
+
|
|
233
|
+
echo "✅ Pre-commit checks passed!"
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Rust (cargo)
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
#!/bin/sh
|
|
240
|
+
echo "🔍 Running pre-commit checks..."
|
|
241
|
+
|
|
242
|
+
# Format check
|
|
243
|
+
cargo fmt -- --check || exit 1
|
|
244
|
+
|
|
245
|
+
# Lint
|
|
246
|
+
cargo clippy -- -D warnings || exit 1
|
|
247
|
+
|
|
248
|
+
echo "✅ Pre-commit checks passed!"
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Go
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
#!/bin/sh
|
|
255
|
+
echo "🔍 Running pre-commit checks..."
|
|
256
|
+
|
|
257
|
+
# Format
|
|
258
|
+
gofmt -s -w . || exit 1
|
|
259
|
+
|
|
260
|
+
# Lint
|
|
261
|
+
golangci-lint run || exit 1
|
|
262
|
+
|
|
263
|
+
# Vet
|
|
264
|
+
go vet ./... || exit 1
|
|
265
|
+
|
|
266
|
+
echo "✅ Pre-commit checks passed!"
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## Installation Methods
|
|
270
|
+
|
|
271
|
+
### Manual Installation
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
# Copy hook to .git/hooks/
|
|
275
|
+
cp scripts/pre-commit.sh .git/hooks/pre-commit
|
|
276
|
+
chmod +x .git/hooks/pre-commit
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Automated Installation (Recommended)
|
|
280
|
+
|
|
281
|
+
**`package.json`**:
|
|
282
|
+
```json
|
|
283
|
+
{
|
|
284
|
+
"scripts": {
|
|
285
|
+
"prepare": "node scripts/install-hooks.js"
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**`scripts/install-hooks.js`**:
|
|
291
|
+
```javascript
|
|
292
|
+
const fs = require('fs');
|
|
293
|
+
const path = require('path');
|
|
294
|
+
|
|
295
|
+
const hookSource = path.join(__dirname, 'pre-commit.sh');
|
|
296
|
+
const hookDest = path.join(__dirname, '..', '.git', 'hooks', 'pre-commit');
|
|
297
|
+
|
|
298
|
+
if (!fs.existsSync('.git/hooks')) {
|
|
299
|
+
fs.mkdirSync('.git/hooks', { recursive: true });
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
fs.copyFileSync(hookSource, hookDest);
|
|
303
|
+
fs.chmodSync(hookDest, 0o755);
|
|
304
|
+
|
|
305
|
+
console.log('✅ Pre-commit hook installed!');
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Using Husky (npm)
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
# Install husky
|
|
312
|
+
npm install --save-dev husky
|
|
313
|
+
|
|
314
|
+
# Initialize husky
|
|
315
|
+
npx husky init
|
|
316
|
+
|
|
317
|
+
# Create pre-commit hook
|
|
318
|
+
npx husky set .husky/pre-commit "npm run format && npm run lint && npm run type-check"
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
## Troubleshooting
|
|
322
|
+
|
|
323
|
+
### Hook Not Running
|
|
324
|
+
|
|
325
|
+
**Issue**: Git doesn't execute the hook
|
|
326
|
+
|
|
327
|
+
**Solutions**:
|
|
328
|
+
1. Check file permissions: `chmod +x .git/hooks/pre-commit`
|
|
329
|
+
2. Verify shebang: `#!/bin/sh` or `#!/usr/bin/env node`
|
|
330
|
+
3. Check file location: Must be `.git/hooks/pre-commit` (no extension)
|
|
331
|
+
|
|
332
|
+
### Hook Too Slow
|
|
333
|
+
|
|
334
|
+
**Issue**: Pre-commit takes > 1 minute
|
|
335
|
+
|
|
336
|
+
**Solutions**:
|
|
337
|
+
1. Move slow checks to pre-push hook
|
|
338
|
+
2. Only check staged files (not entire codebase)
|
|
339
|
+
3. Use parallel execution for independent checks
|
|
340
|
+
4. Cache results between runs
|
|
341
|
+
|
|
342
|
+
### Windows Compatibility Issues
|
|
343
|
+
|
|
344
|
+
**Issue**: Hook fails on Windows/Git Bash
|
|
345
|
+
|
|
346
|
+
**Solutions**:
|
|
347
|
+
1. Use Node.js-based hooks (cross-platform)
|
|
348
|
+
2. Use forward slashes in paths (`/c/Program Files/nodejs/node.exe`)
|
|
349
|
+
3. Use `spawn` instead of `exec` in Node.js scripts
|
|
350
|
+
4. Avoid bash-specific syntax (use POSIX-compliant shell)
|
|
351
|
+
|
|
352
|
+
### False Positives
|
|
353
|
+
|
|
354
|
+
**Issue**: Hook fails on valid code
|
|
355
|
+
|
|
356
|
+
**Solutions**:
|
|
357
|
+
1. Review linting rules for strictness
|
|
358
|
+
2. Add `.eslintignore` / `.prettierignore` for generated files
|
|
359
|
+
3. Update type definitions for external libraries
|
|
360
|
+
4. Adjust formatter config to match team standards
|
|
361
|
+
|
|
362
|
+
## Emergency Bypass
|
|
363
|
+
|
|
364
|
+
When you MUST commit despite failing checks:
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
# Skip pre-commit hook (use sparingly!)
|
|
368
|
+
git commit --no-verify -m "Emergency fix: production down"
|
|
369
|
+
|
|
370
|
+
# Or set environment variable
|
|
371
|
+
HUSKY_SKIP_HOOKS=1 git commit -m "message"
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**⚠️ WARNING**: Only bypass hooks for genuine emergencies. Fix the underlying issues immediately after.
|
|
375
|
+
|
|
376
|
+
## Common Pitfalls
|
|
377
|
+
|
|
378
|
+
1. **❌ Running full test suite**: Too slow, move to pre-push
|
|
379
|
+
2. **❌ Not handling staged files**: Checks all files instead of just staged changes
|
|
380
|
+
3. **❌ Unclear error messages**: Developers don't know how to fix issues
|
|
381
|
+
4. **❌ No escape hatch**: Always allow `--no-verify` for emergencies
|
|
382
|
+
5. **❌ Platform-specific commands**: Use cross-platform tools or Node.js scripts
|
|
383
|
+
|
|
384
|
+
## Integration with Rulebook
|
|
385
|
+
|
|
386
|
+
If using `@hivehub/rulebook`, hooks are automatically generated:
|
|
387
|
+
|
|
388
|
+
```bash
|
|
389
|
+
# Initialize project with hooks
|
|
390
|
+
npx @hivehub/rulebook init
|
|
391
|
+
|
|
392
|
+
# Hooks are created in .git/hooks/ with cross-platform support
|
|
393
|
+
# Configuration stored in .rulebook file
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
Hook configuration in `.rulebook`:
|
|
397
|
+
```json
|
|
398
|
+
{
|
|
399
|
+
"hooks": {
|
|
400
|
+
"preCommit": {
|
|
401
|
+
"enabled": true,
|
|
402
|
+
"checks": ["format", "lint", "type-check"]
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
## Related Templates
|
|
409
|
+
|
|
410
|
+
- See `/rulebook/PRE_PUSH.md` for build and test checks before push
|
|
411
|
+
- See `/rulebook/COMMIT_MSG.md` for commit message validation
|
|
412
|
+
- See `/rulebook/QUALITY_ENFORCEMENT.md` for quality standards
|
|
413
|
+
- See `/rulebook/GIT.md` for git workflow and commit conventions
|
|
414
|
+
- See language-specific templates for language-specific quality commands
|