@hivehub/rulebook 5.1.3 → 5.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.
Files changed (374) hide show
  1. package/.claude/commands/continue.md +33 -33
  2. package/.claude/commands/ralph-config.md +112 -112
  3. package/.claude/commands/ralph-history.md +110 -110
  4. package/.claude/commands/ralph-init.md +72 -72
  5. package/.claude/commands/ralph-pause-resume.md +105 -105
  6. package/.claude/commands/ralph-run.md +101 -101
  7. package/.claude/commands/ralph-status.md +76 -76
  8. package/.claude/commands/rulebook-decision-create.md +55 -55
  9. package/.claude/commands/rulebook-decision-list.md +15 -15
  10. package/.claude/commands/rulebook-knowledge-add.md +41 -41
  11. package/.claude/commands/rulebook-knowledge-list.md +15 -15
  12. package/.claude/commands/rulebook-learn-capture.md +48 -48
  13. package/.claude/commands/rulebook-learn-list.md +13 -13
  14. package/.claude/commands/rulebook-memory-save.md +48 -48
  15. package/.claude/commands/rulebook-memory-search.md +47 -47
  16. package/.claude/commands/rulebook-task-apply.md +85 -67
  17. package/.claude/commands/rulebook-task-archive.md +103 -94
  18. package/.claude/commands/rulebook-task-create.md +93 -93
  19. package/.claude/commands/rulebook-task-list.md +42 -42
  20. package/.claude/commands/rulebook-task-show.md +52 -52
  21. package/.claude/commands/rulebook-task-validate.md +53 -53
  22. package/.claude-plugin/marketplace.json +28 -28
  23. package/.claude-plugin/plugin.json +8 -8
  24. package/README.md +25 -43
  25. package/dist/cli/commands.d.ts.map +1 -1
  26. package/dist/cli/commands.js +11 -0
  27. package/dist/cli/commands.js.map +1 -1
  28. package/dist/core/agent-template-engine.js +28 -28
  29. package/dist/core/generator.js +28 -28
  30. package/dist/core/task-manager.d.ts +23 -0
  31. package/dist/core/task-manager.d.ts.map +1 -1
  32. package/dist/core/task-manager.js +161 -27
  33. package/dist/core/task-manager.js.map +1 -1
  34. package/dist/index.js +0 -0
  35. package/dist/mcp/rulebook-server.js +3 -3
  36. package/dist/mcp/rulebook-server.js.map +1 -1
  37. package/dist/memory/memory-store.js +91 -91
  38. package/package.json +21 -22
  39. package/templates/agents/accessibility-reviewer.md +43 -43
  40. package/templates/agents/api-designer.md +42 -42
  41. package/templates/agents/architect.md +51 -51
  42. package/templates/agents/build-engineer.md +36 -36
  43. package/templates/agents/code-reviewer.md +47 -47
  44. package/templates/agents/compiler/codegen-debugger.md +34 -34
  45. package/templates/agents/compiler/stdlib-engineer.md +28 -28
  46. package/templates/agents/compiler/test-coverage-guardian.md +31 -31
  47. package/templates/agents/context-intelligence.md +52 -52
  48. package/templates/agents/database-architect.md +41 -41
  49. package/templates/agents/devops-engineer.md +42 -42
  50. package/templates/agents/docs-writer.md +38 -38
  51. package/templates/agents/game-engine/cpp-core-expert.md +35 -35
  52. package/templates/agents/game-engine/render-engineer.md +22 -22
  53. package/templates/agents/game-engine/shader-engineer.md +38 -38
  54. package/templates/agents/game-engine/systems-integration.md +43 -43
  55. package/templates/agents/generic/code-reviewer.md +41 -41
  56. package/templates/agents/generic/docs-writer.md +25 -25
  57. package/templates/agents/generic/project-manager.md +36 -36
  58. package/templates/agents/generic/researcher.md +34 -34
  59. package/templates/agents/generic/test-engineer.md +41 -41
  60. package/templates/agents/i18n-engineer.md +42 -42
  61. package/templates/agents/implementer.md +42 -42
  62. package/templates/agents/migration-engineer.md +42 -42
  63. package/templates/agents/mobile/platform-specialist.md +22 -22
  64. package/templates/agents/mobile/ui-engineer.md +22 -22
  65. package/templates/agents/performance-engineer.md +49 -49
  66. package/templates/agents/refactoring-agent.md +41 -41
  67. package/templates/agents/researcher.md +38 -38
  68. package/templates/agents/security-reviewer.md +40 -40
  69. package/templates/agents/team-lead.md +37 -37
  70. package/templates/agents/tester.md +48 -48
  71. package/templates/agents/ux-reviewer.md +43 -43
  72. package/templates/agents/web-app/api-designer.md +22 -22
  73. package/templates/agents/web-app/backend-engineer.md +30 -30
  74. package/templates/agents/web-app/database-engineer.md +22 -22
  75. package/templates/agents/web-app/frontend-engineer.md +29 -29
  76. package/templates/agents/web-app/security-reviewer.md +32 -32
  77. package/templates/ci/rulebook-review.yml +26 -26
  78. package/templates/cli/AIDER.md +49 -49
  79. package/templates/cli/AMAZON_Q.md +25 -25
  80. package/templates/cli/AUGGIE.md +32 -32
  81. package/templates/cli/CLAUDE.md +117 -117
  82. package/templates/cli/CLINE.md +99 -99
  83. package/templates/cli/CODEBUDDY.md +20 -20
  84. package/templates/cli/CODEIUM.md +20 -20
  85. package/templates/cli/CODEX.md +21 -21
  86. package/templates/cli/CONTINUE.md +34 -34
  87. package/templates/cli/CURSOR_CLI.md +62 -62
  88. package/templates/cli/FACTORY.md +18 -18
  89. package/templates/cli/GEMINI.md +35 -35
  90. package/templates/cli/KILOCODE.md +18 -18
  91. package/templates/cli/OPENCODE.md +18 -18
  92. package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
  93. package/templates/commands/rulebook-decision-create.md +55 -55
  94. package/templates/commands/rulebook-decision-list.md +15 -15
  95. package/templates/commands/rulebook-knowledge-add.md +41 -41
  96. package/templates/commands/rulebook-knowledge-list.md +15 -15
  97. package/templates/commands/rulebook-learn-capture.md +48 -48
  98. package/templates/commands/rulebook-learn-list.md +13 -13
  99. package/templates/commands/rulebook-memory-save.md +48 -48
  100. package/templates/commands/rulebook-memory-search.md +47 -47
  101. package/templates/commands/rulebook-task-apply.md +67 -67
  102. package/templates/commands/rulebook-task-archive.md +94 -94
  103. package/templates/commands/rulebook-task-create.md +93 -93
  104. package/templates/commands/rulebook-task-list.md +42 -42
  105. package/templates/commands/rulebook-task-show.md +52 -52
  106. package/templates/commands/rulebook-task-validate.md +53 -53
  107. package/templates/core/AGENTS_LEAN.md +25 -25
  108. package/templates/core/AGENTS_OVERRIDE.md +16 -16
  109. package/templates/core/AGENT_AUTOMATION.md +296 -296
  110. package/templates/core/DAG.md +304 -304
  111. package/templates/core/DECISIONS.md +38 -38
  112. package/templates/core/DOCUMENTATION_RULES.md +36 -36
  113. package/templates/core/KNOWLEDGE.md +49 -49
  114. package/templates/core/MULTI_AGENT.md +74 -74
  115. package/templates/core/PLANS.md +28 -28
  116. package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
  117. package/templates/core/RALPH.md +471 -471
  118. package/templates/core/RULEBOOK.md +1947 -1947
  119. package/templates/core/TIER1_PROHIBITIONS.md +154 -154
  120. package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
  121. package/templates/frameworks/ANGULAR.md +36 -36
  122. package/templates/frameworks/DJANGO.md +83 -83
  123. package/templates/frameworks/ELECTRON.md +147 -147
  124. package/templates/frameworks/FLASK.md +38 -38
  125. package/templates/frameworks/FLUTTER.md +55 -55
  126. package/templates/frameworks/JQUERY.md +32 -32
  127. package/templates/frameworks/LARAVEL.md +38 -38
  128. package/templates/frameworks/NESTJS.md +43 -43
  129. package/templates/frameworks/NEXTJS.md +127 -127
  130. package/templates/frameworks/NUXT.md +40 -40
  131. package/templates/frameworks/RAILS.md +66 -66
  132. package/templates/frameworks/REACT.md +38 -38
  133. package/templates/frameworks/REACT_NATIVE.md +47 -47
  134. package/templates/frameworks/SPRING.md +39 -39
  135. package/templates/frameworks/SYMFONY.md +36 -36
  136. package/templates/frameworks/VUE.md +36 -36
  137. package/templates/frameworks/ZEND.md +35 -35
  138. package/templates/git/CI_CD_PATTERNS.md +661 -661
  139. package/templates/git/GITHUB_ACTIONS.md +728 -728
  140. package/templates/git/GITLAB_CI.md +730 -730
  141. package/templates/git/GIT_WORKFLOW.md +1192 -1192
  142. package/templates/git/SECRETS_MANAGEMENT.md +585 -585
  143. package/templates/hooks/COMMIT_MSG.md +530 -530
  144. package/templates/hooks/POST_CHECKOUT.md +546 -546
  145. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
  146. package/templates/hooks/PRE_COMMIT.md +414 -414
  147. package/templates/hooks/PRE_PUSH.md +601 -601
  148. package/templates/ides/CONTINUE_RULES.md +16 -16
  149. package/templates/ides/COPILOT.md +37 -37
  150. package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
  151. package/templates/ides/CURSOR.md +43 -43
  152. package/templates/ides/GEMINI_RULES.md +17 -17
  153. package/templates/ides/JETBRAINS_AI.md +35 -35
  154. package/templates/ides/REPLIT.md +36 -36
  155. package/templates/ides/TABNINE.md +29 -29
  156. package/templates/ides/VSCODE.md +40 -40
  157. package/templates/ides/WINDSURF.md +36 -36
  158. package/templates/ides/WINDSURF_RULES.md +14 -14
  159. package/templates/ides/ZED.md +32 -32
  160. package/templates/ides/cursor-mdc/go.mdc +24 -24
  161. package/templates/ides/cursor-mdc/python.mdc +24 -24
  162. package/templates/ides/cursor-mdc/quality.mdc +25 -25
  163. package/templates/ides/cursor-mdc/ralph.mdc +39 -39
  164. package/templates/ides/cursor-mdc/rulebook.mdc +38 -38
  165. package/templates/ides/cursor-mdc/rust.mdc +24 -24
  166. package/templates/ides/cursor-mdc/typescript.mdc +25 -25
  167. package/templates/languages/C.md +333 -333
  168. package/templates/languages/CPP.md +743 -743
  169. package/templates/languages/CSHARP.md +417 -417
  170. package/templates/languages/ELIXIR.md +454 -454
  171. package/templates/languages/ERLANG.md +361 -361
  172. package/templates/languages/GO.md +645 -645
  173. package/templates/languages/HASKELL.md +177 -177
  174. package/templates/languages/JAVA.md +607 -607
  175. package/templates/languages/JAVASCRIPT.md +631 -631
  176. package/templates/languages/JULIA.md +97 -97
  177. package/templates/languages/KOTLIN.md +511 -511
  178. package/templates/languages/LISP.md +100 -100
  179. package/templates/languages/LUA.md +74 -74
  180. package/templates/languages/OBJECTIVEC.md +90 -90
  181. package/templates/languages/PHP.md +416 -416
  182. package/templates/languages/PYTHON.md +682 -682
  183. package/templates/languages/RUBY.md +421 -421
  184. package/templates/languages/RUST.md +477 -477
  185. package/templates/languages/SAS.md +73 -73
  186. package/templates/languages/SCALA.md +348 -348
  187. package/templates/languages/SOLIDITY.md +580 -580
  188. package/templates/languages/SQL.md +137 -137
  189. package/templates/languages/SWIFT.md +466 -466
  190. package/templates/languages/TYPESCRIPT.md +591 -591
  191. package/templates/languages/ZIG.md +265 -265
  192. package/templates/modules/ATLASSIAN.md +255 -255
  193. package/templates/modules/CONTEXT7.md +54 -54
  194. package/templates/modules/FIGMA.md +267 -267
  195. package/templates/modules/GITHUB_MCP.md +64 -64
  196. package/templates/modules/GRAFANA.md +328 -328
  197. package/templates/modules/MEMORY.md +126 -126
  198. package/templates/modules/NOTION.md +247 -247
  199. package/templates/modules/PLAYWRIGHT.md +90 -90
  200. package/templates/modules/RULEBOOK_MCP.md +156 -156
  201. package/templates/modules/SERENA.md +337 -337
  202. package/templates/modules/SUPABASE.md +223 -223
  203. package/templates/modules/SYNAP.md +69 -69
  204. package/templates/modules/VECTORIZER.md +63 -63
  205. package/templates/modules/sequential-thinking.md +42 -42
  206. package/templates/ralph/ralph-history.bat +4 -4
  207. package/templates/ralph/ralph-history.sh +5 -5
  208. package/templates/ralph/ralph-init.bat +5 -5
  209. package/templates/ralph/ralph-init.sh +5 -5
  210. package/templates/ralph/ralph-pause.bat +5 -5
  211. package/templates/ralph/ralph-pause.sh +5 -5
  212. package/templates/ralph/ralph-run.bat +5 -5
  213. package/templates/ralph/ralph-run.sh +5 -5
  214. package/templates/ralph/ralph-status.bat +4 -4
  215. package/templates/ralph/ralph-status.sh +5 -5
  216. package/templates/rules/follow-task-sequence.md +36 -36
  217. package/templates/rules/git-safety.md +29 -29
  218. package/templates/rules/incremental-tests.md +29 -29
  219. package/templates/rules/knowledge-base-usage.md +41 -0
  220. package/templates/rules/no-deferred.md +31 -31
  221. package/templates/rules/no-shortcuts.md +30 -30
  222. package/templates/rules/research-first.md +30 -30
  223. package/templates/rules/sequential-editing.md +21 -21
  224. package/templates/rules/session-workflow.md +24 -24
  225. package/templates/rules/task-decomposition.md +32 -32
  226. package/templates/services/AZURE_BLOB.md +184 -184
  227. package/templates/services/CASSANDRA.md +239 -239
  228. package/templates/services/DATADOG.md +26 -26
  229. package/templates/services/DOCKER.md +124 -124
  230. package/templates/services/DOCKER_COMPOSE.md +168 -168
  231. package/templates/services/DYNAMODB.md +308 -308
  232. package/templates/services/ELASTICSEARCH.md +347 -347
  233. package/templates/services/GCS.md +178 -178
  234. package/templates/services/HELM.md +194 -194
  235. package/templates/services/INFLUXDB.md +265 -265
  236. package/templates/services/KAFKA.md +341 -341
  237. package/templates/services/KUBERNETES.md +208 -208
  238. package/templates/services/MARIADB.md +183 -183
  239. package/templates/services/MEMCACHED.md +242 -242
  240. package/templates/services/MINIO.md +201 -201
  241. package/templates/services/MONGODB.md +268 -268
  242. package/templates/services/MYSQL.md +358 -358
  243. package/templates/services/NEO4J.md +247 -247
  244. package/templates/services/OPENTELEMETRY.md +25 -25
  245. package/templates/services/ORACLE.md +290 -290
  246. package/templates/services/PINO.md +24 -24
  247. package/templates/services/POSTGRESQL.md +326 -326
  248. package/templates/services/PROMETHEUS.md +33 -33
  249. package/templates/services/RABBITMQ.md +286 -286
  250. package/templates/services/REDIS.md +292 -292
  251. package/templates/services/S3.md +298 -298
  252. package/templates/services/SENTRY.md +23 -23
  253. package/templates/services/SQLITE.md +294 -294
  254. package/templates/services/SQLSERVER.md +294 -294
  255. package/templates/services/WINSTON.md +30 -30
  256. package/templates/skills/cli/aider/SKILL.md +59 -59
  257. package/templates/skills/cli/amazon-q/SKILL.md +35 -35
  258. package/templates/skills/cli/auggie/SKILL.md +42 -42
  259. package/templates/skills/cli/claude/SKILL.md +42 -42
  260. package/templates/skills/cli/cline/SKILL.md +42 -42
  261. package/templates/skills/cli/codebuddy/SKILL.md +30 -30
  262. package/templates/skills/cli/codeium/SKILL.md +30 -30
  263. package/templates/skills/cli/codex/SKILL.md +31 -31
  264. package/templates/skills/cli/continue/SKILL.md +44 -44
  265. package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
  266. package/templates/skills/cli/factory/SKILL.md +28 -28
  267. package/templates/skills/cli/gemini/SKILL.md +45 -45
  268. package/templates/skills/cli/kilocode/SKILL.md +28 -28
  269. package/templates/skills/cli/opencode/SKILL.md +28 -28
  270. package/templates/skills/core/agent-automation/SKILL.md +194 -194
  271. package/templates/skills/core/dag/SKILL.md +314 -314
  272. package/templates/skills/core/documentation-rules/SKILL.md +46 -46
  273. package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
  274. package/templates/skills/core/rulebook/SKILL.md +176 -176
  275. package/templates/skills/dev/accessibility/SKILL.md +17 -17
  276. package/templates/skills/dev/api-design/SKILL.md +15 -15
  277. package/templates/skills/dev/architect/SKILL.md +17 -17
  278. package/templates/skills/dev/build-fix/SKILL.md +17 -17
  279. package/templates/skills/dev/db-design/SKILL.md +15 -15
  280. package/templates/skills/dev/debug/SKILL.md +16 -16
  281. package/templates/skills/dev/deploy/SKILL.md +17 -17
  282. package/templates/skills/dev/docs/SKILL.md +17 -17
  283. package/templates/skills/dev/migrate/SKILL.md +15 -15
  284. package/templates/skills/dev/perf/SKILL.md +17 -17
  285. package/templates/skills/dev/refactor/SKILL.md +17 -17
  286. package/templates/skills/dev/research/SKILL.md +14 -14
  287. package/templates/skills/dev/review/SKILL.md +18 -18
  288. package/templates/skills/dev/security-audit/SKILL.md +17 -17
  289. package/templates/skills/frameworks/angular/SKILL.md +46 -46
  290. package/templates/skills/frameworks/django/SKILL.md +93 -93
  291. package/templates/skills/frameworks/electron/SKILL.md +157 -157
  292. package/templates/skills/frameworks/flask/SKILL.md +48 -48
  293. package/templates/skills/frameworks/flutter/SKILL.md +65 -65
  294. package/templates/skills/frameworks/jquery/SKILL.md +42 -42
  295. package/templates/skills/frameworks/laravel/SKILL.md +48 -48
  296. package/templates/skills/frameworks/nestjs/SKILL.md +53 -53
  297. package/templates/skills/frameworks/nextjs/SKILL.md +137 -137
  298. package/templates/skills/frameworks/nuxt/SKILL.md +50 -50
  299. package/templates/skills/frameworks/rails/SKILL.md +76 -76
  300. package/templates/skills/frameworks/react/SKILL.md +48 -48
  301. package/templates/skills/frameworks/react-native/SKILL.md +57 -57
  302. package/templates/skills/frameworks/spring/SKILL.md +49 -49
  303. package/templates/skills/frameworks/symfony/SKILL.md +46 -46
  304. package/templates/skills/frameworks/vue/SKILL.md +46 -46
  305. package/templates/skills/frameworks/zend/SKILL.md +45 -45
  306. package/templates/skills/ides/copilot/SKILL.md +47 -47
  307. package/templates/skills/ides/cursor/SKILL.md +53 -53
  308. package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
  309. package/templates/skills/ides/replit/SKILL.md +46 -46
  310. package/templates/skills/ides/tabnine/SKILL.md +39 -39
  311. package/templates/skills/ides/vscode/SKILL.md +50 -50
  312. package/templates/skills/ides/windsurf/SKILL.md +46 -46
  313. package/templates/skills/ides/zed/SKILL.md +42 -42
  314. package/templates/skills/languages/c/SKILL.md +343 -343
  315. package/templates/skills/languages/cpp/SKILL.md +753 -753
  316. package/templates/skills/languages/csharp/SKILL.md +427 -427
  317. package/templates/skills/languages/elixir/SKILL.md +464 -464
  318. package/templates/skills/languages/erlang/SKILL.md +371 -371
  319. package/templates/skills/languages/go/SKILL.md +655 -655
  320. package/templates/skills/languages/haskell/SKILL.md +187 -187
  321. package/templates/skills/languages/java/SKILL.md +617 -617
  322. package/templates/skills/languages/javascript/SKILL.md +641 -641
  323. package/templates/skills/languages/julia/SKILL.md +107 -107
  324. package/templates/skills/languages/kotlin/SKILL.md +521 -521
  325. package/templates/skills/languages/lisp/SKILL.md +110 -110
  326. package/templates/skills/languages/lua/SKILL.md +84 -84
  327. package/templates/skills/languages/objectivec/SKILL.md +100 -100
  328. package/templates/skills/languages/php/SKILL.md +426 -426
  329. package/templates/skills/languages/python/SKILL.md +692 -692
  330. package/templates/skills/languages/ruby/SKILL.md +431 -431
  331. package/templates/skills/languages/rust/SKILL.md +487 -487
  332. package/templates/skills/languages/sas/SKILL.md +83 -83
  333. package/templates/skills/languages/scala/SKILL.md +358 -358
  334. package/templates/skills/languages/solidity/SKILL.md +590 -590
  335. package/templates/skills/languages/sql/SKILL.md +147 -147
  336. package/templates/skills/languages/swift/SKILL.md +476 -476
  337. package/templates/skills/languages/typescript/SKILL.md +302 -302
  338. package/templates/skills/languages/zig/SKILL.md +275 -275
  339. package/templates/skills/modules/atlassian/SKILL.md +265 -265
  340. package/templates/skills/modules/context7/SKILL.md +64 -64
  341. package/templates/skills/modules/figma/SKILL.md +277 -277
  342. package/templates/skills/modules/github-mcp/SKILL.md +74 -74
  343. package/templates/skills/modules/grafana/SKILL.md +338 -338
  344. package/templates/skills/modules/memory/SKILL.md +73 -73
  345. package/templates/skills/modules/notion/SKILL.md +257 -257
  346. package/templates/skills/modules/playwright/SKILL.md +100 -100
  347. package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
  348. package/templates/skills/modules/serena/SKILL.md +347 -347
  349. package/templates/skills/modules/supabase/SKILL.md +233 -233
  350. package/templates/skills/modules/synap/SKILL.md +79 -79
  351. package/templates/skills/modules/vectorizer/SKILL.md +73 -73
  352. package/templates/skills/services/azure-blob/SKILL.md +194 -194
  353. package/templates/skills/services/cassandra/SKILL.md +249 -249
  354. package/templates/skills/services/dynamodb/SKILL.md +318 -318
  355. package/templates/skills/services/elasticsearch/SKILL.md +357 -357
  356. package/templates/skills/services/gcs/SKILL.md +188 -188
  357. package/templates/skills/services/influxdb/SKILL.md +275 -275
  358. package/templates/skills/services/kafka/SKILL.md +351 -351
  359. package/templates/skills/services/mariadb/SKILL.md +193 -193
  360. package/templates/skills/services/memcached/SKILL.md +252 -252
  361. package/templates/skills/services/minio/SKILL.md +211 -211
  362. package/templates/skills/services/mongodb/SKILL.md +278 -278
  363. package/templates/skills/services/mysql/SKILL.md +368 -368
  364. package/templates/skills/services/neo4j/SKILL.md +257 -257
  365. package/templates/skills/services/oracle/SKILL.md +300 -300
  366. package/templates/skills/services/postgresql/SKILL.md +336 -336
  367. package/templates/skills/services/rabbitmq/SKILL.md +296 -296
  368. package/templates/skills/services/redis/SKILL.md +302 -302
  369. package/templates/skills/services/s3/SKILL.md +308 -308
  370. package/templates/skills/services/sqlite/SKILL.md +304 -304
  371. package/templates/skills/services/sqlserver/SKILL.md +304 -304
  372. package/templates/skills/workflows/ralph/SKILL.md +309 -309
  373. package/templates/skills/workflows/ralph/install.sh +87 -87
  374. package/templates/skills/workflows/ralph/manifest.json +158 -158
@@ -1,730 +1,730 @@
1
- # GitLab CI/CD
2
-
3
- This template provides guidance for implementing GitLab CI/CD pipelines with best practices for multi-stage pipelines, caching, and artifacts.
4
-
5
- ## Purpose
6
-
7
- GitLab CI/CD enables:
8
- - Automated testing and building
9
- - Continuous deployment
10
- - Container registry integration
11
- - Built-in security scanning
12
- - Kubernetes deployment
13
-
14
- ## Agent Automation Commands
15
-
16
- When implementing or modifying GitLab CI pipelines:
17
-
18
- ### Local Testing
19
- ```bash
20
- # Validate .gitlab-ci.yml syntax
21
- gitlab-ci-lint .gitlab-ci.yml
22
-
23
- # Or via API
24
- curl --header "Content-Type: application/json" \
25
- --data @.gitlab-ci.yml \
26
- https://gitlab.com/api/v4/ci/lint
27
- ```
28
-
29
- ### Pipeline Management
30
- ```bash
31
- # Trigger pipeline
32
- gitlab-runner exec shell build
33
-
34
- # View pipeline status
35
- git lab pipeline status
36
-
37
- # View pipeline logs
38
- gitlab-runner exec shell test --debug
39
- ```
40
-
41
- ## Basic Pipeline Structure
42
-
43
- ### Minimal CI Pipeline
44
-
45
- **`.gitlab-ci.yml`**:
46
- ```yaml
47
- image: node:20
48
-
49
- stages:
50
- - test
51
- - build
52
- - deploy
53
-
54
- test:
55
- stage: test
56
- script:
57
- - npm ci
58
- - npm test
59
-
60
- build:
61
- stage: build
62
- script:
63
- - npm run build
64
- artifacts:
65
- paths:
66
- - dist/
67
- expire_in: 1 week
68
-
69
- deploy:
70
- stage: deploy
71
- script:
72
- - echo "Deploying to production"
73
- environment:
74
- name: production
75
- url: https://example.com
76
- only:
77
- - main
78
- ```
79
-
80
- ### Complete CI/CD Pipeline
81
-
82
- **`.gitlab-ci.yml`**:
83
- ```yaml
84
- image: node:20
85
-
86
- variables:
87
- NPM_CONFIG_CACHE: "$CI_PROJECT_DIR/.npm"
88
- CYPRESS_CACHE_FOLDER: "$CI_PROJECT_DIR/.cypress"
89
-
90
- stages:
91
- - validate
92
- - build
93
- - test
94
- - security
95
- - deploy
96
-
97
- # Template for node jobs
98
- .node-template:
99
- before_script:
100
- - npm ci --prefer-offline
101
- cache:
102
- key:
103
- files:
104
- - package-lock.json
105
- paths:
106
- - .npm/
107
- - node_modules/
108
-
109
- lint:
110
- extends: .node-template
111
- stage: validate
112
- script:
113
- - npm run lint
114
- - npm run format:check
115
-
116
- typecheck:
117
- extends: .node-template
118
- stage: validate
119
- script:
120
- - npm run type-check
121
-
122
- build:
123
- extends: .node-template
124
- stage: build
125
- script:
126
- - npm run build
127
- artifacts:
128
- paths:
129
- - dist/
130
- expire_in: 1 week
131
-
132
- test:unit:
133
- extends: .node-template
134
- stage: test
135
- parallel:
136
- matrix:
137
- - NODE_VERSION: ['18', '20', '22']
138
- image: node:$NODE_VERSION
139
- script:
140
- - npm test
141
- coverage: '/Statements\s*:\s*(\d+\.\d+)%/'
142
- artifacts:
143
- reports:
144
- junit: junit.xml
145
- coverage_report:
146
- coverage_format: cobertura
147
- path: coverage/cobertura-coverage.xml
148
-
149
- test:e2e:
150
- extends: .node-template
151
- stage: test
152
- script:
153
- - npm run test:e2e
154
- artifacts:
155
- when: on_failure
156
- paths:
157
- - cypress/screenshots/
158
- - cypress/videos/
159
- expire_in: 1 week
160
-
161
- security:dependencies:
162
- stage: security
163
- script:
164
- - npm audit --audit-level=high
165
- allow_failure: true
166
-
167
- security:sast:
168
- stage: security
169
- image: registry.gitlab.com/gitlab-org/security-products/analyzers/semgrep:latest
170
- script:
171
- - /analyzer run
172
- artifacts:
173
- reports:
174
- sast: gl-sast-report.json
175
-
176
- deploy:staging:
177
- stage: deploy
178
- script:
179
- - npm run deploy:staging
180
- environment:
181
- name: staging
182
- url: https://staging.example.com
183
- only:
184
- - develop
185
-
186
- deploy:production:
187
- stage: deploy
188
- script:
189
- - npm run deploy:production
190
- environment:
191
- name: production
192
- url: https://example.com
193
- when: manual
194
- only:
195
- - main
196
- ```
197
-
198
- ## Best Practices
199
-
200
- ### ✅ DO
201
-
202
- 1. **Use Caching**
203
- ```yaml
204
- cache:
205
- key:
206
- files:
207
- - package-lock.json
208
- paths:
209
- - node_modules/
210
- - .npm/
211
- ```
212
-
213
- 2. **Use Job Templates (DRY)**
214
- ```yaml
215
- .deploy-template:
216
- stage: deploy
217
- script:
218
- - deploy.sh $ENVIRONMENT
219
- only:
220
- - main
221
-
222
- deploy:staging:
223
- extends: .deploy-template
224
- variables:
225
- ENVIRONMENT: staging
226
-
227
- deploy:production:
228
- extends: .deploy-template
229
- variables:
230
- ENVIRONMENT: production
231
- ```
232
-
233
- 3. **Use Parallel Matrix**
234
- ```yaml
235
- test:
236
- parallel:
237
- matrix:
238
- - NODE_VERSION: ['18', '20', '22']
239
- OS: ['ubuntu', 'alpine']
240
- image: node:$NODE_VERSION-$OS
241
- ```
242
-
243
- 4. **Use Pipeline-Specific Variables**
244
- ```yaml
245
- variables:
246
- DEPLOY_ENV: "production"
247
- API_ENDPOINT: "https://api.example.com"
248
- ```
249
-
250
- 5. **Use Artifacts for Build Outputs**
251
- ```yaml
252
- build:
253
- artifacts:
254
- paths:
255
- - dist/
256
- expire_in: 1 week
257
- ```
258
-
259
- ### ❌ DON'T
260
-
261
- 1. **Don't hardcode secrets**
262
- ```yaml
263
- # Bad
264
- script:
265
- - export API_KEY="sk_live_abc123"
266
-
267
- # Good
268
- script:
269
- - export API_KEY="$API_KEY" # From CI/CD variables
270
- ```
271
-
272
- 2. **Don't use `latest` tags**
273
- ```yaml
274
- # Bad
275
- image: node:latest
276
-
277
- # Good
278
- image: node:20.11.0
279
- ```
280
-
281
- 3. **Don't run unnecessary jobs**
282
- ```yaml
283
- # Good - only run on specific branches
284
- deploy:
285
- only:
286
- - main
287
- except:
288
- - schedules
289
- ```
290
-
291
- ## Caching Strategies
292
-
293
- ### Global Cache
294
-
295
- ```yaml
296
- # Apply to all jobs
297
- cache:
298
- key: ${CI_COMMIT_REF_SLUG}
299
- paths:
300
- - node_modules/
301
- - .npm/
302
- ```
303
-
304
- ### Job-Specific Cache
305
-
306
- ```yaml
307
- test:
308
- cache:
309
- key: test-cache
310
- paths:
311
- - node_modules/
312
- - .cache/
313
-
314
- build:
315
- cache:
316
- key: build-cache
317
- paths:
318
- - dist/
319
- - .webpack-cache/
320
- ```
321
-
322
- ### Cache with Fallback
323
-
324
- ```yaml
325
- cache:
326
- key: ${CI_COMMIT_REF_SLUG}
327
- paths:
328
- - node_modules/
329
- policy: pull # Only pull, don't push
330
-
331
- build:
332
- cache:
333
- key: ${CI_COMMIT_REF_SLUG}
334
- paths:
335
- - node_modules/
336
- policy: pull-push # Pull and push cache
337
- ```
338
-
339
- ## Artifacts and Dependencies
340
-
341
- ### Uploading Artifacts
342
-
343
- ```yaml
344
- build:
345
- script:
346
- - npm run build
347
- artifacts:
348
- name: "dist-$CI_COMMIT_SHORT_SHA"
349
- paths:
350
- - dist/
351
- expire_in: 1 week
352
- when: on_success # or always, on_failure
353
- ```
354
-
355
- ### Downloading Artifacts
356
-
357
- ```yaml
358
- deploy:
359
- dependencies:
360
- - build # Downloads artifacts from 'build' job
361
- script:
362
- - ls dist/ # Artifact available
363
- - deploy.sh
364
- ```
365
-
366
- ### Artifact Reports
367
-
368
- ```yaml
369
- test:
370
- script:
371
- - npm test
372
- artifacts:
373
- reports:
374
- junit: junit.xml
375
- coverage_report:
376
- coverage_format: cobertura
377
- path: coverage/cobertura-coverage.xml
378
- dotenv: build.env # Export variables to other jobs
379
- ```
380
-
381
- ## Multi-Project Pipelines
382
-
383
- ### Parent Pipeline
384
-
385
- ```yaml
386
- # .gitlab-ci.yml
387
- trigger:frontend:
388
- stage: deploy
389
- trigger:
390
- project: mygroup/frontend
391
- strategy: depend
392
-
393
- trigger:backend:
394
- stage: deploy
395
- trigger:
396
- project: mygroup/backend
397
- strategy: depend
398
- ```
399
-
400
- ### Child Pipelines
401
-
402
- ```yaml
403
- # Parent pipeline
404
- generate-config:
405
- script:
406
- - generate-dynamic-config.sh > dynamic.yml
407
- artifacts:
408
- paths:
409
- - dynamic.yml
410
-
411
- trigger-child:
412
- trigger:
413
- include:
414
- - artifact: dynamic.yml
415
- job: generate-config
416
- strategy: depend
417
- ```
418
-
419
- ## Docker Integration
420
-
421
- ### Build and Push Docker Image
422
-
423
- ```yaml
424
- docker-build:
425
- image: docker:latest
426
- services:
427
- - docker:dind
428
- variables:
429
- DOCKER_DRIVER: overlay2
430
- DOCKER_TLS_CERTDIR: "/certs"
431
- before_script:
432
- - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
433
- script:
434
- - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .
435
- - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
436
- ```
437
-
438
- ### Use GitLab Container Registry
439
-
440
- ```yaml
441
- build:
442
- image: docker:latest
443
- services:
444
- - docker:dind
445
- script:
446
- # Login to GitLab Container Registry
447
- - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
448
-
449
- # Build and tag
450
- - docker build -t $CI_REGISTRY_IMAGE:latest .
451
- - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG .
452
-
453
- # Push
454
- - docker push $CI_REGISTRY_IMAGE:latest
455
- - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
456
- ```
457
-
458
- ## Kubernetes Deployment
459
-
460
- ### Deploy to Kubernetes
461
-
462
- ```yaml
463
- deploy:k8s:
464
- image: bitnami/kubectl:latest
465
- stage: deploy
466
- script:
467
- # Configure kubectl
468
- - kubectl config set-cluster k8s --server="$KUBE_URL" --insecure-skip-tls-verify=true
469
- - kubectl config set-credentials admin --token="$KUBE_TOKEN"
470
- - kubectl config set-context default --cluster=k8s --user=admin
471
- - kubectl config use-context default
472
-
473
- # Deploy
474
- - kubectl set image deployment/app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
475
- - kubectl rollout status deployment/app
476
- environment:
477
- name: production
478
- kubernetes:
479
- namespace: production
480
- ```
481
-
482
- ### Helm Deployment
483
-
484
- ```yaml
485
- deploy:helm:
486
- image: alpine/helm:latest
487
- stage: deploy
488
- script:
489
- - helm upgrade --install myapp ./charts/myapp \
490
- --set image.tag=$CI_COMMIT_SHORT_SHA \
491
- --namespace production
492
- environment:
493
- name: production
494
- ```
495
-
496
- ## Rules and Conditions
497
-
498
- ### Complex Rules
499
-
500
- ```yaml
501
- test:
502
- script:
503
- - npm test
504
- rules:
505
- # Run on main branch
506
- - if: $CI_COMMIT_BRANCH == "main"
507
- when: always
508
-
509
- # Run on merge requests
510
- - if: $CI_PIPELINE_SOURCE == "merge_request_event"
511
- when: always
512
-
513
- # Run on tags starting with 'v'
514
- - if: $CI_COMMIT_TAG =~ /^v/
515
- when: always
516
-
517
- # Skip on schedules
518
- - if: $CI_PIPELINE_SOURCE == "schedule"
519
- when: never
520
-
521
- # Manual for feature branches
522
- - if: $CI_COMMIT_BRANCH =~ /^feature\//
523
- when: manual
524
-
525
- # Otherwise skip
526
- - when: never
527
- ```
528
-
529
- ### Changes-Based Execution
530
-
531
- ```yaml
532
- test:backend:
533
- script:
534
- - cd backend && npm test
535
- rules:
536
- - changes:
537
- - backend/**/*
538
- when: always
539
-
540
- test:frontend:
541
- script:
542
- - cd frontend && npm test
543
- rules:
544
- - changes:
545
- - frontend/**/*
546
- when: always
547
- ```
548
-
549
- ## Security Scanning
550
-
551
- ### SAST (Static Application Security Testing)
552
-
553
- ```yaml
554
- include:
555
- - template: Security/SAST.gitlab-ci.yml
556
-
557
- sast:
558
- stage: security
559
- variables:
560
- SAST_EXCLUDED_PATHS: "spec, test, tests, tmp, node_modules"
561
- ```
562
-
563
- ### Dependency Scanning
564
-
565
- ```yaml
566
- include:
567
- - template: Security/Dependency-Scanning.gitlab-ci.yml
568
-
569
- dependency_scanning:
570
- stage: security
571
- ```
572
-
573
- ### Container Scanning
574
-
575
- ```yaml
576
- include:
577
- - template: Security/Container-Scanning.gitlab-ci.yml
578
-
579
- container_scanning:
580
- stage: security
581
- variables:
582
- CS_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
583
- ```
584
-
585
- ## Optimization Patterns
586
-
587
- ### Skip Pipeline for Docs
588
-
589
- ```yaml
590
- # Skip pipeline if only docs changed
591
- workflow:
592
- rules:
593
- - if: $CI_PIPELINE_SOURCE == "push"
594
- changes:
595
- - "**/*.md"
596
- - "docs/**/*"
597
- when: never
598
- - when: always
599
- ```
600
-
601
- ### Interruptible Jobs
602
-
603
- ```yaml
604
- test:
605
- interruptible: true # Cancel if new pipeline starts
606
- script:
607
- - npm test
608
- ```
609
-
610
- ### Retry Failed Jobs
611
-
612
- ```yaml
613
- test:
614
- script:
615
- - npm test
616
- retry:
617
- max: 2
618
- when:
619
- - runner_system_failure
620
- - stuck_or_timeout_failure
621
- ```
622
-
623
- ## CI/CD Variables
624
-
625
- ### Predefined Variables
626
-
627
- ```yaml
628
- test:
629
- script:
630
- - echo "Pipeline ID: $CI_PIPELINE_ID"
631
- - echo "Commit SHA: $CI_COMMIT_SHA"
632
- - echo "Commit Branch: $CI_COMMIT_BRANCH"
633
- - echo "Commit Tag: $CI_COMMIT_TAG"
634
- - echo "Project Name: $CI_PROJECT_NAME"
635
- - echo "Registry: $CI_REGISTRY_IMAGE"
636
- ```
637
-
638
- ### Custom Variables
639
-
640
- ```yaml
641
- variables:
642
- ENVIRONMENT: "production"
643
- API_ENDPOINT: "https://api.example.com"
644
-
645
- deploy:
646
- script:
647
- - deploy.sh --env $ENVIRONMENT --api $API_ENDPOINT
648
- ```
649
-
650
- ### Protected Variables
651
-
652
- **Add via UI**: Settings → CI/CD → Variables
653
-
654
- ```yaml
655
- deploy:
656
- script:
657
- - echo "Deploying with token: $DEPLOY_TOKEN"
658
- only:
659
- - main # Protected variables only available on protected branches
660
- ```
661
-
662
- ## Troubleshooting
663
-
664
- ### Pipeline Not Triggered
665
-
666
- **Check**:
667
- 1. `.gitlab-ci.yml` syntax valid
668
- 2. Rules/only/except conditions met
669
- 3. CI/CD enabled for project
670
- 4. GitLab Runner available
671
-
672
- ### Cache Not Working
673
-
674
- **Solutions**:
675
- ```yaml
676
- # Use specific cache key
677
- cache:
678
- key:
679
- files:
680
- - package-lock.json
681
- paths:
682
- - node_modules/
683
-
684
- # Clear cache if corrupted
685
- # Settings → CI/CD → Clear runner caches
686
- ```
687
-
688
- ### Artifacts Not Available
689
-
690
- **Check**:
691
- 1. Artifact expiration not exceeded
692
- 2. Job succeeded (artifacts only uploaded on success by default)
693
- 3. Dependencies declared correctly
694
-
695
- ```yaml
696
- deploy:
697
- dependencies:
698
- - build # Must match job name exactly
699
- ```
700
-
701
- ## Common Pitfalls
702
-
703
- 1. **❌ No caching**: Slow pipelines
704
- 2. **❌ Not using templates**: Duplication
705
- 3. **❌ Artifacts too large**: Slow uploads/downloads
706
- 4. **❌ No retry logic**: Flaky tests fail pipeline
707
- 5. **❌ Running all jobs always**: Wasted resources
708
- 6. **❌ No manual gates for production**: Risky deployments
709
-
710
- ## Integration with Rulebook
711
-
712
- If using `@hivehub/rulebook`, GitLab CI pipelines are generated automatically:
713
-
714
- ```bash
715
- # Generate GitLab CI pipeline
716
- npx @hivehub/rulebook workflows
717
-
718
- # Creates .gitlab-ci.yml with:
719
- # - Language-specific stages
720
- # - Caching configured
721
- # - Artifacts management
722
- # - Security scanning
723
- ```
724
-
725
- ## Related Templates
726
-
727
- - See `/.rulebook/specs/GITHUB_ACTIONS.md` for GitHub Actions comparison
728
- - See `/.rulebook/specs/CI_CD_PATTERNS.md` for general CI/CD patterns
729
- - See `/.rulebook/specs/SECRETS_MANAGEMENT.md` for secrets handling
730
- - See `/.rulebook/specs/QUALITY_ENFORCEMENT.md` for quality gates
1
+ # GitLab CI/CD
2
+
3
+ This template provides guidance for implementing GitLab CI/CD pipelines with best practices for multi-stage pipelines, caching, and artifacts.
4
+
5
+ ## Purpose
6
+
7
+ GitLab CI/CD enables:
8
+ - Automated testing and building
9
+ - Continuous deployment
10
+ - Container registry integration
11
+ - Built-in security scanning
12
+ - Kubernetes deployment
13
+
14
+ ## Agent Automation Commands
15
+
16
+ When implementing or modifying GitLab CI pipelines:
17
+
18
+ ### Local Testing
19
+ ```bash
20
+ # Validate .gitlab-ci.yml syntax
21
+ gitlab-ci-lint .gitlab-ci.yml
22
+
23
+ # Or via API
24
+ curl --header "Content-Type: application/json" \
25
+ --data @.gitlab-ci.yml \
26
+ https://gitlab.com/api/v4/ci/lint
27
+ ```
28
+
29
+ ### Pipeline Management
30
+ ```bash
31
+ # Trigger pipeline
32
+ gitlab-runner exec shell build
33
+
34
+ # View pipeline status
35
+ git lab pipeline status
36
+
37
+ # View pipeline logs
38
+ gitlab-runner exec shell test --debug
39
+ ```
40
+
41
+ ## Basic Pipeline Structure
42
+
43
+ ### Minimal CI Pipeline
44
+
45
+ **`.gitlab-ci.yml`**:
46
+ ```yaml
47
+ image: node:20
48
+
49
+ stages:
50
+ - test
51
+ - build
52
+ - deploy
53
+
54
+ test:
55
+ stage: test
56
+ script:
57
+ - npm ci
58
+ - npm test
59
+
60
+ build:
61
+ stage: build
62
+ script:
63
+ - npm run build
64
+ artifacts:
65
+ paths:
66
+ - dist/
67
+ expire_in: 1 week
68
+
69
+ deploy:
70
+ stage: deploy
71
+ script:
72
+ - echo "Deploying to production"
73
+ environment:
74
+ name: production
75
+ url: https://example.com
76
+ only:
77
+ - main
78
+ ```
79
+
80
+ ### Complete CI/CD Pipeline
81
+
82
+ **`.gitlab-ci.yml`**:
83
+ ```yaml
84
+ image: node:20
85
+
86
+ variables:
87
+ NPM_CONFIG_CACHE: "$CI_PROJECT_DIR/.npm"
88
+ CYPRESS_CACHE_FOLDER: "$CI_PROJECT_DIR/.cypress"
89
+
90
+ stages:
91
+ - validate
92
+ - build
93
+ - test
94
+ - security
95
+ - deploy
96
+
97
+ # Template for node jobs
98
+ .node-template:
99
+ before_script:
100
+ - npm ci --prefer-offline
101
+ cache:
102
+ key:
103
+ files:
104
+ - package-lock.json
105
+ paths:
106
+ - .npm/
107
+ - node_modules/
108
+
109
+ lint:
110
+ extends: .node-template
111
+ stage: validate
112
+ script:
113
+ - npm run lint
114
+ - npm run format:check
115
+
116
+ typecheck:
117
+ extends: .node-template
118
+ stage: validate
119
+ script:
120
+ - npm run type-check
121
+
122
+ build:
123
+ extends: .node-template
124
+ stage: build
125
+ script:
126
+ - npm run build
127
+ artifacts:
128
+ paths:
129
+ - dist/
130
+ expire_in: 1 week
131
+
132
+ test:unit:
133
+ extends: .node-template
134
+ stage: test
135
+ parallel:
136
+ matrix:
137
+ - NODE_VERSION: ['18', '20', '22']
138
+ image: node:$NODE_VERSION
139
+ script:
140
+ - npm test
141
+ coverage: '/Statements\s*:\s*(\d+\.\d+)%/'
142
+ artifacts:
143
+ reports:
144
+ junit: junit.xml
145
+ coverage_report:
146
+ coverage_format: cobertura
147
+ path: coverage/cobertura-coverage.xml
148
+
149
+ test:e2e:
150
+ extends: .node-template
151
+ stage: test
152
+ script:
153
+ - npm run test:e2e
154
+ artifacts:
155
+ when: on_failure
156
+ paths:
157
+ - cypress/screenshots/
158
+ - cypress/videos/
159
+ expire_in: 1 week
160
+
161
+ security:dependencies:
162
+ stage: security
163
+ script:
164
+ - npm audit --audit-level=high
165
+ allow_failure: true
166
+
167
+ security:sast:
168
+ stage: security
169
+ image: registry.gitlab.com/gitlab-org/security-products/analyzers/semgrep:latest
170
+ script:
171
+ - /analyzer run
172
+ artifacts:
173
+ reports:
174
+ sast: gl-sast-report.json
175
+
176
+ deploy:staging:
177
+ stage: deploy
178
+ script:
179
+ - npm run deploy:staging
180
+ environment:
181
+ name: staging
182
+ url: https://staging.example.com
183
+ only:
184
+ - develop
185
+
186
+ deploy:production:
187
+ stage: deploy
188
+ script:
189
+ - npm run deploy:production
190
+ environment:
191
+ name: production
192
+ url: https://example.com
193
+ when: manual
194
+ only:
195
+ - main
196
+ ```
197
+
198
+ ## Best Practices
199
+
200
+ ### ✅ DO
201
+
202
+ 1. **Use Caching**
203
+ ```yaml
204
+ cache:
205
+ key:
206
+ files:
207
+ - package-lock.json
208
+ paths:
209
+ - node_modules/
210
+ - .npm/
211
+ ```
212
+
213
+ 2. **Use Job Templates (DRY)**
214
+ ```yaml
215
+ .deploy-template:
216
+ stage: deploy
217
+ script:
218
+ - deploy.sh $ENVIRONMENT
219
+ only:
220
+ - main
221
+
222
+ deploy:staging:
223
+ extends: .deploy-template
224
+ variables:
225
+ ENVIRONMENT: staging
226
+
227
+ deploy:production:
228
+ extends: .deploy-template
229
+ variables:
230
+ ENVIRONMENT: production
231
+ ```
232
+
233
+ 3. **Use Parallel Matrix**
234
+ ```yaml
235
+ test:
236
+ parallel:
237
+ matrix:
238
+ - NODE_VERSION: ['18', '20', '22']
239
+ OS: ['ubuntu', 'alpine']
240
+ image: node:$NODE_VERSION-$OS
241
+ ```
242
+
243
+ 4. **Use Pipeline-Specific Variables**
244
+ ```yaml
245
+ variables:
246
+ DEPLOY_ENV: "production"
247
+ API_ENDPOINT: "https://api.example.com"
248
+ ```
249
+
250
+ 5. **Use Artifacts for Build Outputs**
251
+ ```yaml
252
+ build:
253
+ artifacts:
254
+ paths:
255
+ - dist/
256
+ expire_in: 1 week
257
+ ```
258
+
259
+ ### ❌ DON'T
260
+
261
+ 1. **Don't hardcode secrets**
262
+ ```yaml
263
+ # Bad
264
+ script:
265
+ - export API_KEY="sk_live_abc123"
266
+
267
+ # Good
268
+ script:
269
+ - export API_KEY="$API_KEY" # From CI/CD variables
270
+ ```
271
+
272
+ 2. **Don't use `latest` tags**
273
+ ```yaml
274
+ # Bad
275
+ image: node:latest
276
+
277
+ # Good
278
+ image: node:20.11.0
279
+ ```
280
+
281
+ 3. **Don't run unnecessary jobs**
282
+ ```yaml
283
+ # Good - only run on specific branches
284
+ deploy:
285
+ only:
286
+ - main
287
+ except:
288
+ - schedules
289
+ ```
290
+
291
+ ## Caching Strategies
292
+
293
+ ### Global Cache
294
+
295
+ ```yaml
296
+ # Apply to all jobs
297
+ cache:
298
+ key: ${CI_COMMIT_REF_SLUG}
299
+ paths:
300
+ - node_modules/
301
+ - .npm/
302
+ ```
303
+
304
+ ### Job-Specific Cache
305
+
306
+ ```yaml
307
+ test:
308
+ cache:
309
+ key: test-cache
310
+ paths:
311
+ - node_modules/
312
+ - .cache/
313
+
314
+ build:
315
+ cache:
316
+ key: build-cache
317
+ paths:
318
+ - dist/
319
+ - .webpack-cache/
320
+ ```
321
+
322
+ ### Cache with Fallback
323
+
324
+ ```yaml
325
+ cache:
326
+ key: ${CI_COMMIT_REF_SLUG}
327
+ paths:
328
+ - node_modules/
329
+ policy: pull # Only pull, don't push
330
+
331
+ build:
332
+ cache:
333
+ key: ${CI_COMMIT_REF_SLUG}
334
+ paths:
335
+ - node_modules/
336
+ policy: pull-push # Pull and push cache
337
+ ```
338
+
339
+ ## Artifacts and Dependencies
340
+
341
+ ### Uploading Artifacts
342
+
343
+ ```yaml
344
+ build:
345
+ script:
346
+ - npm run build
347
+ artifacts:
348
+ name: "dist-$CI_COMMIT_SHORT_SHA"
349
+ paths:
350
+ - dist/
351
+ expire_in: 1 week
352
+ when: on_success # or always, on_failure
353
+ ```
354
+
355
+ ### Downloading Artifacts
356
+
357
+ ```yaml
358
+ deploy:
359
+ dependencies:
360
+ - build # Downloads artifacts from 'build' job
361
+ script:
362
+ - ls dist/ # Artifact available
363
+ - deploy.sh
364
+ ```
365
+
366
+ ### Artifact Reports
367
+
368
+ ```yaml
369
+ test:
370
+ script:
371
+ - npm test
372
+ artifacts:
373
+ reports:
374
+ junit: junit.xml
375
+ coverage_report:
376
+ coverage_format: cobertura
377
+ path: coverage/cobertura-coverage.xml
378
+ dotenv: build.env # Export variables to other jobs
379
+ ```
380
+
381
+ ## Multi-Project Pipelines
382
+
383
+ ### Parent Pipeline
384
+
385
+ ```yaml
386
+ # .gitlab-ci.yml
387
+ trigger:frontend:
388
+ stage: deploy
389
+ trigger:
390
+ project: mygroup/frontend
391
+ strategy: depend
392
+
393
+ trigger:backend:
394
+ stage: deploy
395
+ trigger:
396
+ project: mygroup/backend
397
+ strategy: depend
398
+ ```
399
+
400
+ ### Child Pipelines
401
+
402
+ ```yaml
403
+ # Parent pipeline
404
+ generate-config:
405
+ script:
406
+ - generate-dynamic-config.sh > dynamic.yml
407
+ artifacts:
408
+ paths:
409
+ - dynamic.yml
410
+
411
+ trigger-child:
412
+ trigger:
413
+ include:
414
+ - artifact: dynamic.yml
415
+ job: generate-config
416
+ strategy: depend
417
+ ```
418
+
419
+ ## Docker Integration
420
+
421
+ ### Build and Push Docker Image
422
+
423
+ ```yaml
424
+ docker-build:
425
+ image: docker:latest
426
+ services:
427
+ - docker:dind
428
+ variables:
429
+ DOCKER_DRIVER: overlay2
430
+ DOCKER_TLS_CERTDIR: "/certs"
431
+ before_script:
432
+ - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
433
+ script:
434
+ - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .
435
+ - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
436
+ ```
437
+
438
+ ### Use GitLab Container Registry
439
+
440
+ ```yaml
441
+ build:
442
+ image: docker:latest
443
+ services:
444
+ - docker:dind
445
+ script:
446
+ # Login to GitLab Container Registry
447
+ - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
448
+
449
+ # Build and tag
450
+ - docker build -t $CI_REGISTRY_IMAGE:latest .
451
+ - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG .
452
+
453
+ # Push
454
+ - docker push $CI_REGISTRY_IMAGE:latest
455
+ - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
456
+ ```
457
+
458
+ ## Kubernetes Deployment
459
+
460
+ ### Deploy to Kubernetes
461
+
462
+ ```yaml
463
+ deploy:k8s:
464
+ image: bitnami/kubectl:latest
465
+ stage: deploy
466
+ script:
467
+ # Configure kubectl
468
+ - kubectl config set-cluster k8s --server="$KUBE_URL" --insecure-skip-tls-verify=true
469
+ - kubectl config set-credentials admin --token="$KUBE_TOKEN"
470
+ - kubectl config set-context default --cluster=k8s --user=admin
471
+ - kubectl config use-context default
472
+
473
+ # Deploy
474
+ - kubectl set image deployment/app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
475
+ - kubectl rollout status deployment/app
476
+ environment:
477
+ name: production
478
+ kubernetes:
479
+ namespace: production
480
+ ```
481
+
482
+ ### Helm Deployment
483
+
484
+ ```yaml
485
+ deploy:helm:
486
+ image: alpine/helm:latest
487
+ stage: deploy
488
+ script:
489
+ - helm upgrade --install myapp ./charts/myapp \
490
+ --set image.tag=$CI_COMMIT_SHORT_SHA \
491
+ --namespace production
492
+ environment:
493
+ name: production
494
+ ```
495
+
496
+ ## Rules and Conditions
497
+
498
+ ### Complex Rules
499
+
500
+ ```yaml
501
+ test:
502
+ script:
503
+ - npm test
504
+ rules:
505
+ # Run on main branch
506
+ - if: $CI_COMMIT_BRANCH == "main"
507
+ when: always
508
+
509
+ # Run on merge requests
510
+ - if: $CI_PIPELINE_SOURCE == "merge_request_event"
511
+ when: always
512
+
513
+ # Run on tags starting with 'v'
514
+ - if: $CI_COMMIT_TAG =~ /^v/
515
+ when: always
516
+
517
+ # Skip on schedules
518
+ - if: $CI_PIPELINE_SOURCE == "schedule"
519
+ when: never
520
+
521
+ # Manual for feature branches
522
+ - if: $CI_COMMIT_BRANCH =~ /^feature\//
523
+ when: manual
524
+
525
+ # Otherwise skip
526
+ - when: never
527
+ ```
528
+
529
+ ### Changes-Based Execution
530
+
531
+ ```yaml
532
+ test:backend:
533
+ script:
534
+ - cd backend && npm test
535
+ rules:
536
+ - changes:
537
+ - backend/**/*
538
+ when: always
539
+
540
+ test:frontend:
541
+ script:
542
+ - cd frontend && npm test
543
+ rules:
544
+ - changes:
545
+ - frontend/**/*
546
+ when: always
547
+ ```
548
+
549
+ ## Security Scanning
550
+
551
+ ### SAST (Static Application Security Testing)
552
+
553
+ ```yaml
554
+ include:
555
+ - template: Security/SAST.gitlab-ci.yml
556
+
557
+ sast:
558
+ stage: security
559
+ variables:
560
+ SAST_EXCLUDED_PATHS: "spec, test, tests, tmp, node_modules"
561
+ ```
562
+
563
+ ### Dependency Scanning
564
+
565
+ ```yaml
566
+ include:
567
+ - template: Security/Dependency-Scanning.gitlab-ci.yml
568
+
569
+ dependency_scanning:
570
+ stage: security
571
+ ```
572
+
573
+ ### Container Scanning
574
+
575
+ ```yaml
576
+ include:
577
+ - template: Security/Container-Scanning.gitlab-ci.yml
578
+
579
+ container_scanning:
580
+ stage: security
581
+ variables:
582
+ CS_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
583
+ ```
584
+
585
+ ## Optimization Patterns
586
+
587
+ ### Skip Pipeline for Docs
588
+
589
+ ```yaml
590
+ # Skip pipeline if only docs changed
591
+ workflow:
592
+ rules:
593
+ - if: $CI_PIPELINE_SOURCE == "push"
594
+ changes:
595
+ - "**/*.md"
596
+ - "docs/**/*"
597
+ when: never
598
+ - when: always
599
+ ```
600
+
601
+ ### Interruptible Jobs
602
+
603
+ ```yaml
604
+ test:
605
+ interruptible: true # Cancel if new pipeline starts
606
+ script:
607
+ - npm test
608
+ ```
609
+
610
+ ### Retry Failed Jobs
611
+
612
+ ```yaml
613
+ test:
614
+ script:
615
+ - npm test
616
+ retry:
617
+ max: 2
618
+ when:
619
+ - runner_system_failure
620
+ - stuck_or_timeout_failure
621
+ ```
622
+
623
+ ## CI/CD Variables
624
+
625
+ ### Predefined Variables
626
+
627
+ ```yaml
628
+ test:
629
+ script:
630
+ - echo "Pipeline ID: $CI_PIPELINE_ID"
631
+ - echo "Commit SHA: $CI_COMMIT_SHA"
632
+ - echo "Commit Branch: $CI_COMMIT_BRANCH"
633
+ - echo "Commit Tag: $CI_COMMIT_TAG"
634
+ - echo "Project Name: $CI_PROJECT_NAME"
635
+ - echo "Registry: $CI_REGISTRY_IMAGE"
636
+ ```
637
+
638
+ ### Custom Variables
639
+
640
+ ```yaml
641
+ variables:
642
+ ENVIRONMENT: "production"
643
+ API_ENDPOINT: "https://api.example.com"
644
+
645
+ deploy:
646
+ script:
647
+ - deploy.sh --env $ENVIRONMENT --api $API_ENDPOINT
648
+ ```
649
+
650
+ ### Protected Variables
651
+
652
+ **Add via UI**: Settings → CI/CD → Variables
653
+
654
+ ```yaml
655
+ deploy:
656
+ script:
657
+ - echo "Deploying with token: $DEPLOY_TOKEN"
658
+ only:
659
+ - main # Protected variables only available on protected branches
660
+ ```
661
+
662
+ ## Troubleshooting
663
+
664
+ ### Pipeline Not Triggered
665
+
666
+ **Check**:
667
+ 1. `.gitlab-ci.yml` syntax valid
668
+ 2. Rules/only/except conditions met
669
+ 3. CI/CD enabled for project
670
+ 4. GitLab Runner available
671
+
672
+ ### Cache Not Working
673
+
674
+ **Solutions**:
675
+ ```yaml
676
+ # Use specific cache key
677
+ cache:
678
+ key:
679
+ files:
680
+ - package-lock.json
681
+ paths:
682
+ - node_modules/
683
+
684
+ # Clear cache if corrupted
685
+ # Settings → CI/CD → Clear runner caches
686
+ ```
687
+
688
+ ### Artifacts Not Available
689
+
690
+ **Check**:
691
+ 1. Artifact expiration not exceeded
692
+ 2. Job succeeded (artifacts only uploaded on success by default)
693
+ 3. Dependencies declared correctly
694
+
695
+ ```yaml
696
+ deploy:
697
+ dependencies:
698
+ - build # Must match job name exactly
699
+ ```
700
+
701
+ ## Common Pitfalls
702
+
703
+ 1. **❌ No caching**: Slow pipelines
704
+ 2. **❌ Not using templates**: Duplication
705
+ 3. **❌ Artifacts too large**: Slow uploads/downloads
706
+ 4. **❌ No retry logic**: Flaky tests fail pipeline
707
+ 5. **❌ Running all jobs always**: Wasted resources
708
+ 6. **❌ No manual gates for production**: Risky deployments
709
+
710
+ ## Integration with Rulebook
711
+
712
+ If using `@hivehub/rulebook`, GitLab CI pipelines are generated automatically:
713
+
714
+ ```bash
715
+ # Generate GitLab CI pipeline
716
+ npx @hivehub/rulebook workflows
717
+
718
+ # Creates .gitlab-ci.yml with:
719
+ # - Language-specific stages
720
+ # - Caching configured
721
+ # - Artifacts management
722
+ # - Security scanning
723
+ ```
724
+
725
+ ## Related Templates
726
+
727
+ - See `/.rulebook/specs/GITHUB_ACTIONS.md` for GitHub Actions comparison
728
+ - See `/.rulebook/specs/CI_CD_PATTERNS.md` for general CI/CD patterns
729
+ - See `/.rulebook/specs/SECRETS_MANAGEMENT.md` for secrets handling
730
+ - See `/.rulebook/specs/QUALITY_ENFORCEMENT.md` for quality gates