@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,661 @@
|
|
|
1
|
+
# CI/CD Patterns
|
|
2
|
+
|
|
3
|
+
This template provides common CI/CD patterns and best practices applicable across all CI/CD platforms (GitHub Actions, GitLab CI, CircleCI, Jenkins, etc.).
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
CI/CD patterns ensure:
|
|
8
|
+
- Consistent build/test/deploy processes
|
|
9
|
+
- Fast feedback loops
|
|
10
|
+
- Reliable deployments
|
|
11
|
+
- Quality gates enforcement
|
|
12
|
+
- Automated release management
|
|
13
|
+
|
|
14
|
+
## Core CI/CD Stages
|
|
15
|
+
|
|
16
|
+
### 1. Validate Stage (Fastest - < 2 minutes)
|
|
17
|
+
|
|
18
|
+
**Purpose**: Catch syntax errors and basic issues quickly
|
|
19
|
+
|
|
20
|
+
**Includes**:
|
|
21
|
+
- Linting
|
|
22
|
+
- Code formatting check
|
|
23
|
+
- Type checking
|
|
24
|
+
- Basic syntax validation
|
|
25
|
+
|
|
26
|
+
**Example**:
|
|
27
|
+
```yaml
|
|
28
|
+
validate:
|
|
29
|
+
script:
|
|
30
|
+
- npm run lint
|
|
31
|
+
- npm run format:check
|
|
32
|
+
- npm run type-check
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 2. Build Stage (Fast - < 5 minutes)
|
|
36
|
+
|
|
37
|
+
**Purpose**: Verify code compiles/builds successfully
|
|
38
|
+
|
|
39
|
+
**Includes**:
|
|
40
|
+
- Compilation
|
|
41
|
+
- Bundling
|
|
42
|
+
- Asset generation
|
|
43
|
+
- Build artifact creation
|
|
44
|
+
|
|
45
|
+
**Example**:
|
|
46
|
+
```yaml
|
|
47
|
+
build:
|
|
48
|
+
script:
|
|
49
|
+
- npm run build
|
|
50
|
+
artifacts:
|
|
51
|
+
paths:
|
|
52
|
+
- dist/
|
|
53
|
+
expire_in: 7 days
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 3. Test Stage (Medium - < 15 minutes)
|
|
57
|
+
|
|
58
|
+
**Purpose**: Verify functionality and quality
|
|
59
|
+
|
|
60
|
+
**Includes**:
|
|
61
|
+
- Unit tests
|
|
62
|
+
- Integration tests
|
|
63
|
+
- Coverage reporting
|
|
64
|
+
- Security scanning
|
|
65
|
+
|
|
66
|
+
**Example**:
|
|
67
|
+
```yaml
|
|
68
|
+
test:
|
|
69
|
+
parallel:
|
|
70
|
+
matrix:
|
|
71
|
+
- NODE_VERSION: ['18', '20', '22']
|
|
72
|
+
script:
|
|
73
|
+
- npm ci
|
|
74
|
+
- npm test
|
|
75
|
+
- npm run test:coverage
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 4. E2E Stage (Slow - < 30 minutes)
|
|
79
|
+
|
|
80
|
+
**Purpose**: Verify end-to-end functionality
|
|
81
|
+
|
|
82
|
+
**Includes**:
|
|
83
|
+
- E2E tests
|
|
84
|
+
- Visual regression tests
|
|
85
|
+
- Performance tests
|
|
86
|
+
- Smoke tests
|
|
87
|
+
|
|
88
|
+
**Example**:
|
|
89
|
+
```yaml
|
|
90
|
+
e2e:
|
|
91
|
+
script:
|
|
92
|
+
- npm run test:e2e
|
|
93
|
+
artifacts:
|
|
94
|
+
when: on_failure
|
|
95
|
+
paths:
|
|
96
|
+
- test-results/
|
|
97
|
+
- screenshots/
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 5. Release Stage (Conditional)
|
|
101
|
+
|
|
102
|
+
**Purpose**: Publish packages and create releases
|
|
103
|
+
|
|
104
|
+
**Includes**:
|
|
105
|
+
- Version bumping
|
|
106
|
+
- Changelog generation
|
|
107
|
+
- Package publishing
|
|
108
|
+
- GitHub release creation
|
|
109
|
+
|
|
110
|
+
**Example**:
|
|
111
|
+
```yaml
|
|
112
|
+
release:
|
|
113
|
+
only:
|
|
114
|
+
- tags
|
|
115
|
+
script:
|
|
116
|
+
- npm run build
|
|
117
|
+
- npm publish --access public
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### 6. Deploy Stage (Conditional)
|
|
121
|
+
|
|
122
|
+
**Purpose**: Deploy to environments
|
|
123
|
+
|
|
124
|
+
**Includes**:
|
|
125
|
+
- Environment-specific deployments
|
|
126
|
+
- Database migrations
|
|
127
|
+
- Health checks
|
|
128
|
+
- Rollback capabilities
|
|
129
|
+
|
|
130
|
+
**Example**:
|
|
131
|
+
```yaml
|
|
132
|
+
deploy:production:
|
|
133
|
+
only:
|
|
134
|
+
- main
|
|
135
|
+
environment:
|
|
136
|
+
name: production
|
|
137
|
+
url: https://example.com
|
|
138
|
+
script:
|
|
139
|
+
- deploy.sh production
|
|
140
|
+
when: manual # Require manual approval
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## CI/CD Pipeline Patterns
|
|
144
|
+
|
|
145
|
+
### Pattern 1: Linear Pipeline (Simple Projects)
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
┌─────────┐ ┌───────┐ ┌──────┐ ┌────────┐
|
|
149
|
+
│ Validate│───▶│ Build │───▶│ Test │───▶│ Deploy │
|
|
150
|
+
└─────────┘ └───────┘ └──────┘ └────────┘
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**When to use**: Small projects, single environment, simple workflows
|
|
154
|
+
|
|
155
|
+
**Example** (GitHub Actions):
|
|
156
|
+
```yaml
|
|
157
|
+
jobs:
|
|
158
|
+
validate:
|
|
159
|
+
runs-on: ubuntu-latest
|
|
160
|
+
steps:
|
|
161
|
+
- run: npm run lint
|
|
162
|
+
|
|
163
|
+
build:
|
|
164
|
+
needs: validate
|
|
165
|
+
steps:
|
|
166
|
+
- run: npm run build
|
|
167
|
+
|
|
168
|
+
test:
|
|
169
|
+
needs: build
|
|
170
|
+
steps:
|
|
171
|
+
- run: npm test
|
|
172
|
+
|
|
173
|
+
deploy:
|
|
174
|
+
needs: test
|
|
175
|
+
if: github.ref == 'refs/heads/main'
|
|
176
|
+
steps:
|
|
177
|
+
- run: deploy.sh
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Pattern 2: Fan-Out/Fan-In (Parallel Testing)
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
┌──────────┐
|
|
184
|
+
│ Validate │
|
|
185
|
+
└────┬─────┘
|
|
186
|
+
│
|
|
187
|
+
┌────────────┼────────────┐
|
|
188
|
+
▼ ▼ ▼
|
|
189
|
+
┌────────┐ ┌────────┐ ┌────────┐
|
|
190
|
+
│ Test 18│ │ Test 20│ │ Test 22│
|
|
191
|
+
└────┬───┘ └────┬───┘ └────┬───┘
|
|
192
|
+
└────────────┼────────────┘
|
|
193
|
+
▼
|
|
194
|
+
┌────────┐
|
|
195
|
+
│ Deploy │
|
|
196
|
+
└────────┘
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**When to use**: Multi-version testing, cross-platform builds
|
|
200
|
+
|
|
201
|
+
**Example**:
|
|
202
|
+
```yaml
|
|
203
|
+
test:
|
|
204
|
+
strategy:
|
|
205
|
+
matrix:
|
|
206
|
+
node-version: ['18', '20', '22']
|
|
207
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
208
|
+
steps:
|
|
209
|
+
- uses: actions/setup-node@v4
|
|
210
|
+
with:
|
|
211
|
+
node-version: ${{ matrix.node-version }}
|
|
212
|
+
- run: npm test
|
|
213
|
+
|
|
214
|
+
deploy:
|
|
215
|
+
needs: test # Waits for ALL test jobs
|
|
216
|
+
steps:
|
|
217
|
+
- run: deploy.sh
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Pattern 3: Multi-Environment Pipeline
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
┌──────┐ ┌────┐ ┌──────────┐ ┌────────────┐ ┌────────────┐
|
|
224
|
+
│ Test │──▶│Push│──▶│Deploy Dev│──▶│Deploy Stage│──▶│Deploy Prod │
|
|
225
|
+
└──────┘ └────┘ └──────────┘ └────────────┘ └────────────┘
|
|
226
|
+
(auto) (auto) (manual)
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**When to use**: Production applications, multiple environments
|
|
230
|
+
|
|
231
|
+
**Example**:
|
|
232
|
+
```yaml
|
|
233
|
+
deploy:dev:
|
|
234
|
+
environment: development
|
|
235
|
+
only:
|
|
236
|
+
- develop
|
|
237
|
+
script:
|
|
238
|
+
- deploy.sh dev
|
|
239
|
+
|
|
240
|
+
deploy:staging:
|
|
241
|
+
environment: staging
|
|
242
|
+
only:
|
|
243
|
+
- main
|
|
244
|
+
script:
|
|
245
|
+
- deploy.sh staging
|
|
246
|
+
|
|
247
|
+
deploy:production:
|
|
248
|
+
environment: production
|
|
249
|
+
only:
|
|
250
|
+
- tags
|
|
251
|
+
when: manual # Manual approval required
|
|
252
|
+
script:
|
|
253
|
+
- deploy.sh production
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### Pattern 4: Trunk-Based Deployment
|
|
257
|
+
|
|
258
|
+
```
|
|
259
|
+
feature/123 ──▶ main ──▶ Deploy (with feature flags)
|
|
260
|
+
│
|
|
261
|
+
└──▶ Rollback if issues
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**When to use**: High-velocity teams, continuous deployment
|
|
265
|
+
|
|
266
|
+
**Key Principles**:
|
|
267
|
+
- Deploy to production on every merge to main
|
|
268
|
+
- Use feature flags for incomplete features
|
|
269
|
+
- Monitor and rollback quickly if issues
|
|
270
|
+
- Small, frequent deployments
|
|
271
|
+
|
|
272
|
+
**Example**:
|
|
273
|
+
```yaml
|
|
274
|
+
deploy:
|
|
275
|
+
only:
|
|
276
|
+
- main
|
|
277
|
+
script:
|
|
278
|
+
# Deploy with feature flags
|
|
279
|
+
- export FEATURE_NEW_UI=false
|
|
280
|
+
- deploy.sh production
|
|
281
|
+
# Monitor for 5 minutes
|
|
282
|
+
- monitor.sh 300
|
|
283
|
+
# Rollback if errors detected
|
|
284
|
+
- rollback-if-errors.sh
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## Quality Gates
|
|
288
|
+
|
|
289
|
+
### Gate 1: Pre-Merge Checks (Required)
|
|
290
|
+
|
|
291
|
+
**Enforce on Pull Requests**:
|
|
292
|
+
- ✅ All tests pass
|
|
293
|
+
- ✅ Code coverage ≥ 95%
|
|
294
|
+
- ✅ Linting passes (no warnings)
|
|
295
|
+
- ✅ Build succeeds
|
|
296
|
+
- ✅ No security vulnerabilities
|
|
297
|
+
|
|
298
|
+
**Implementation**:
|
|
299
|
+
```yaml
|
|
300
|
+
# GitHub Actions - Require status checks
|
|
301
|
+
# Settings → Branches → Branch protection rules
|
|
302
|
+
# ✓ Require status checks to pass before merging
|
|
303
|
+
# ✓ lint
|
|
304
|
+
# ✓ test
|
|
305
|
+
# ✓ build
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Gate 2: Pre-Deploy Checks (Production)
|
|
309
|
+
|
|
310
|
+
**Required Before Production Deploy**:
|
|
311
|
+
- ✅ All quality gates passed
|
|
312
|
+
- ✅ Manual approval obtained
|
|
313
|
+
- ✅ Staging tests passed
|
|
314
|
+
- ✅ Security scan completed
|
|
315
|
+
- ✅ Documentation updated
|
|
316
|
+
|
|
317
|
+
**Implementation**:
|
|
318
|
+
```yaml
|
|
319
|
+
deploy:production:
|
|
320
|
+
needs: [test, security-scan, docs-check]
|
|
321
|
+
environment:
|
|
322
|
+
name: production
|
|
323
|
+
url: https://example.com
|
|
324
|
+
when: manual # Require manual approval
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### Gate 3: Post-Deploy Validation
|
|
328
|
+
|
|
329
|
+
**After Deployment**:
|
|
330
|
+
- ✅ Health check passes
|
|
331
|
+
- ✅ Smoke tests pass
|
|
332
|
+
- ✅ Metrics within thresholds
|
|
333
|
+
- ✅ No error rate increase
|
|
334
|
+
|
|
335
|
+
**Implementation**:
|
|
336
|
+
```yaml
|
|
337
|
+
deploy:production:
|
|
338
|
+
script:
|
|
339
|
+
- deploy.sh production
|
|
340
|
+
- |
|
|
341
|
+
# Wait for health check
|
|
342
|
+
for i in {1..30}; do
|
|
343
|
+
if curl -f https://example.com/health; then
|
|
344
|
+
echo "Health check passed"
|
|
345
|
+
exit 0
|
|
346
|
+
fi
|
|
347
|
+
sleep 10
|
|
348
|
+
done
|
|
349
|
+
echo "Health check failed"
|
|
350
|
+
rollback.sh
|
|
351
|
+
exit 1
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## Caching Strategies
|
|
355
|
+
|
|
356
|
+
### Dependency Caching (Essential)
|
|
357
|
+
|
|
358
|
+
**Pattern**: Cache dependencies based on lock file hash
|
|
359
|
+
|
|
360
|
+
```yaml
|
|
361
|
+
# npm
|
|
362
|
+
cache:
|
|
363
|
+
key: ${{ hashFiles('package-lock.json') }}
|
|
364
|
+
paths:
|
|
365
|
+
- node_modules/
|
|
366
|
+
|
|
367
|
+
# pip
|
|
368
|
+
cache:
|
|
369
|
+
key: ${{ hashFiles('requirements.txt') }}
|
|
370
|
+
paths:
|
|
371
|
+
- .venv/
|
|
372
|
+
|
|
373
|
+
# cargo
|
|
374
|
+
cache:
|
|
375
|
+
key: ${{ hashFiles('Cargo.lock') }}
|
|
376
|
+
paths:
|
|
377
|
+
- target/
|
|
378
|
+
- ~/.cargo/
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### Build Artifact Caching
|
|
382
|
+
|
|
383
|
+
**Pattern**: Cache build outputs to avoid rebuilding
|
|
384
|
+
|
|
385
|
+
```yaml
|
|
386
|
+
cache:
|
|
387
|
+
key: build-${{ github.sha }}
|
|
388
|
+
paths:
|
|
389
|
+
- dist/
|
|
390
|
+
- .cache/
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### Incremental Builds
|
|
394
|
+
|
|
395
|
+
**Pattern**: Cache intermediate build artifacts
|
|
396
|
+
|
|
397
|
+
```yaml
|
|
398
|
+
# TypeScript incremental builds
|
|
399
|
+
cache:
|
|
400
|
+
key: tsbuildinfo-${{ hashFiles('**/*.ts') }}
|
|
401
|
+
paths:
|
|
402
|
+
- tsconfig.tsbuildinfo
|
|
403
|
+
|
|
404
|
+
# Rust incremental builds
|
|
405
|
+
cache:
|
|
406
|
+
key: rust-incremental-${{ hashFiles('**/*.rs') }}
|
|
407
|
+
paths:
|
|
408
|
+
- target/debug/incremental/
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
## Parallelization Strategies
|
|
412
|
+
|
|
413
|
+
### 1. Job-Level Parallelization
|
|
414
|
+
|
|
415
|
+
**Run independent jobs simultaneously**:
|
|
416
|
+
```yaml
|
|
417
|
+
jobs:
|
|
418
|
+
lint:
|
|
419
|
+
# Runs immediately
|
|
420
|
+
test:
|
|
421
|
+
# Runs immediately (parallel with lint)
|
|
422
|
+
build:
|
|
423
|
+
needs: [lint, test] # Waits for both
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
### 2. Matrix Parallelization
|
|
427
|
+
|
|
428
|
+
**Test multiple configurations in parallel**:
|
|
429
|
+
```yaml
|
|
430
|
+
test:
|
|
431
|
+
strategy:
|
|
432
|
+
matrix:
|
|
433
|
+
node: ['18', '20', '22']
|
|
434
|
+
os: [ubuntu, windows, macos]
|
|
435
|
+
# Runs 9 jobs in parallel (3 × 3)
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### 3. Test Sharding
|
|
439
|
+
|
|
440
|
+
**Split tests across multiple runners**:
|
|
441
|
+
```yaml
|
|
442
|
+
test:
|
|
443
|
+
strategy:
|
|
444
|
+
matrix:
|
|
445
|
+
shard: [1, 2, 3, 4]
|
|
446
|
+
script:
|
|
447
|
+
- npm test -- --shard=${{ matrix.shard }}/4
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### 4. Conditional Parallelization
|
|
451
|
+
|
|
452
|
+
**Only parallelize when needed**:
|
|
453
|
+
```yaml
|
|
454
|
+
test:
|
|
455
|
+
strategy:
|
|
456
|
+
matrix:
|
|
457
|
+
# Only test multiple versions on main branch
|
|
458
|
+
node: ${{ github.ref == 'refs/heads/main' && ['18', '20', '22'] || ['20'] }}
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
## Optimization Patterns
|
|
462
|
+
|
|
463
|
+
### Pattern 1: Fail Fast
|
|
464
|
+
|
|
465
|
+
**Stop pipeline immediately on critical failures**:
|
|
466
|
+
```yaml
|
|
467
|
+
strategy:
|
|
468
|
+
matrix:
|
|
469
|
+
node: ['18', '20', '22']
|
|
470
|
+
fail-fast: true # Stop all jobs if one fails
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
### Pattern 2: Skip Redundant Builds
|
|
474
|
+
|
|
475
|
+
**Skip builds for docs-only changes**:
|
|
476
|
+
```yaml
|
|
477
|
+
on:
|
|
478
|
+
push:
|
|
479
|
+
paths-ignore:
|
|
480
|
+
- '**.md'
|
|
481
|
+
- 'docs/**'
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### Pattern 3: Smart Caching
|
|
485
|
+
|
|
486
|
+
**Multi-level cache fallback**:
|
|
487
|
+
```yaml
|
|
488
|
+
cache:
|
|
489
|
+
key: ${{ runner.os }}-deps-${{ hashFiles('**/package-lock.json') }}
|
|
490
|
+
restore-keys: |
|
|
491
|
+
${{ runner.os }}-deps-
|
|
492
|
+
${{ runner.os }}-
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
### Pattern 4: Artifact Reuse
|
|
496
|
+
|
|
497
|
+
**Build once, test/deploy many times**:
|
|
498
|
+
```yaml
|
|
499
|
+
build:
|
|
500
|
+
script:
|
|
501
|
+
- npm run build
|
|
502
|
+
artifacts:
|
|
503
|
+
paths: [dist/]
|
|
504
|
+
|
|
505
|
+
test:
|
|
506
|
+
needs: build
|
|
507
|
+
script:
|
|
508
|
+
- npm test # Uses dist/ from build
|
|
509
|
+
|
|
510
|
+
deploy:
|
|
511
|
+
needs: build
|
|
512
|
+
script:
|
|
513
|
+
- deploy dist/ # Uses same dist/
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
## Monitoring and Observability
|
|
517
|
+
|
|
518
|
+
### Pipeline Metrics to Track
|
|
519
|
+
|
|
520
|
+
1. **Pipeline Duration**
|
|
521
|
+
- Target: < 10 minutes for CI
|
|
522
|
+
- Track: P50, P95, P99
|
|
523
|
+
|
|
524
|
+
2. **Failure Rate**
|
|
525
|
+
- Target: < 5% false positives
|
|
526
|
+
- Track: Flaky tests, infrastructure failures
|
|
527
|
+
|
|
528
|
+
3. **Deploy Frequency**
|
|
529
|
+
- Target: Multiple times per day (high-velocity)
|
|
530
|
+
- Track: Deploys per day/week
|
|
531
|
+
|
|
532
|
+
4. **Mean Time to Recovery (MTTR)**
|
|
533
|
+
- Target: < 1 hour
|
|
534
|
+
- Track: Time from incident to fix deployed
|
|
535
|
+
|
|
536
|
+
### Notification Patterns
|
|
537
|
+
|
|
538
|
+
**Slack/Discord Notifications**:
|
|
539
|
+
```yaml
|
|
540
|
+
notify:
|
|
541
|
+
script:
|
|
542
|
+
- |
|
|
543
|
+
curl -X POST $SLACK_WEBHOOK_URL \
|
|
544
|
+
-H 'Content-Type: application/json' \
|
|
545
|
+
-d '{
|
|
546
|
+
"text": "Pipeline failed: ${{ job.name }}",
|
|
547
|
+
"channel": "#ci-alerts"
|
|
548
|
+
}'
|
|
549
|
+
when: on_failure
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
## Security Patterns
|
|
553
|
+
|
|
554
|
+
### Pattern 1: Secrets Rotation
|
|
555
|
+
|
|
556
|
+
**Rotate secrets regularly**:
|
|
557
|
+
- API keys: Every 90 days
|
|
558
|
+
- Deploy keys: Every 180 days
|
|
559
|
+
- Service account tokens: Every 90 days
|
|
560
|
+
|
|
561
|
+
### Pattern 2: Least Privilege
|
|
562
|
+
|
|
563
|
+
**Grant minimal permissions**:
|
|
564
|
+
```yaml
|
|
565
|
+
permissions:
|
|
566
|
+
contents: read # Read-only by default
|
|
567
|
+
pull-requests: write # Only if needed
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
### Pattern 3: Dependency Scanning
|
|
571
|
+
|
|
572
|
+
**Scan dependencies for vulnerabilities**:
|
|
573
|
+
```yaml
|
|
574
|
+
security:
|
|
575
|
+
script:
|
|
576
|
+
- npm audit --audit-level=high
|
|
577
|
+
- snyk test --severity-threshold=high
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
### Pattern 4: SBOM Generation
|
|
581
|
+
|
|
582
|
+
**Generate Software Bill of Materials**:
|
|
583
|
+
```yaml
|
|
584
|
+
sbom:
|
|
585
|
+
script:
|
|
586
|
+
- cyclonedx-bom -o sbom.json
|
|
587
|
+
artifacts:
|
|
588
|
+
paths: [sbom.json]
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
## Rollback Strategies
|
|
592
|
+
|
|
593
|
+
### Pattern 1: Blue-Green Deployment
|
|
594
|
+
|
|
595
|
+
```yaml
|
|
596
|
+
deploy:
|
|
597
|
+
script:
|
|
598
|
+
# Deploy to green (inactive) environment
|
|
599
|
+
- deploy.sh green
|
|
600
|
+
# Run smoke tests
|
|
601
|
+
- test-green.sh
|
|
602
|
+
# Switch traffic to green
|
|
603
|
+
- switch-traffic.sh green
|
|
604
|
+
# Keep blue for rollback
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
### Pattern 2: Canary Deployment
|
|
608
|
+
|
|
609
|
+
```yaml
|
|
610
|
+
deploy:
|
|
611
|
+
script:
|
|
612
|
+
# Deploy to 5% of servers
|
|
613
|
+
- deploy.sh --canary 5
|
|
614
|
+
# Monitor for 10 minutes
|
|
615
|
+
- monitor.sh 600
|
|
616
|
+
# If OK, deploy to 100%
|
|
617
|
+
- deploy.sh --all
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
### Pattern 3: Feature Flags
|
|
621
|
+
|
|
622
|
+
```yaml
|
|
623
|
+
deploy:
|
|
624
|
+
script:
|
|
625
|
+
# Deploy with new feature disabled
|
|
626
|
+
- export FEATURE_ENABLED=false
|
|
627
|
+
- deploy.sh
|
|
628
|
+
# Enable for 10% of users
|
|
629
|
+
- feature-flag.sh new-feature 10
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
## Common Pitfalls
|
|
633
|
+
|
|
634
|
+
1. **❌ No caching**: Slow pipelines
|
|
635
|
+
2. **❌ Sequential testing**: Wasted time
|
|
636
|
+
3. **❌ No fail-fast**: Long feedback loops
|
|
637
|
+
4. **❌ Rebuilding artifacts**: Inefficient
|
|
638
|
+
5. **❌ No quality gates**: Poor code quality
|
|
639
|
+
6. **❌ Manual deployments**: Slow releases
|
|
640
|
+
7. **❌ No rollback plan**: Risky deployments
|
|
641
|
+
|
|
642
|
+
## Integration with Rulebook
|
|
643
|
+
|
|
644
|
+
If using `@hivehub/rulebook`, CI/CD patterns are enforced automatically:
|
|
645
|
+
|
|
646
|
+
```bash
|
|
647
|
+
# Generate CI/CD workflows
|
|
648
|
+
npx @hivehub/rulebook workflows
|
|
649
|
+
|
|
650
|
+
# Validates against best practices:
|
|
651
|
+
# - Caching enabled
|
|
652
|
+
# - Parallel testing
|
|
653
|
+
# - Quality gates configured
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
## Related Templates
|
|
657
|
+
|
|
658
|
+
- See `/rulebook/GITHUB_ACTIONS.md` for GitHub Actions specifics
|
|
659
|
+
- See `/rulebook/GITLAB_CI.md` for GitLab CI specifics
|
|
660
|
+
- See `/rulebook/SECRETS_MANAGEMENT.md` for secrets handling
|
|
661
|
+
- See `/rulebook/QUALITY_ENFORCEMENT.md` for quality standards
|