dojo.md 0.1.0 → 0.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 (243) hide show
  1. package/courses/GENERATION_LOG.md +27 -0
  2. package/courses/api-error-handling/course.yaml +16 -0
  3. package/courses/api-error-handling/scenarios/level-1/error-response-format.yaml +131 -0
  4. package/courses/api-error-handling/scenarios/level-1/http-status-codes-basics.yaml +90 -0
  5. package/courses/api-error-handling/scenarios/level-1/rate-limiting-basics.yaml +135 -0
  6. package/courses/api-error-handling/scenarios/level-1/request-validation-errors.yaml +208 -0
  7. package/courses/api-error-handling/scenarios/level-2/circuit-breaker-pattern.yaml +189 -0
  8. package/courses/api-error-handling/scenarios/level-2/idempotency-retry-logic.yaml +159 -0
  9. package/courses/api-error-handling/scenarios/level-2/rfc-7807-problem-details.yaml +178 -0
  10. package/courses/api-error-handling/scenarios/level-2/webhook-error-handling.yaml +211 -0
  11. package/courses/api-error-handling/scenarios/level-3/distributed-tracing-errors.yaml +275 -0
  12. package/courses/github-actions-cicd/course.yaml +10 -0
  13. package/courses/github-actions-cicd/scenarios/level-1/actions-and-runners.yaml +58 -0
  14. package/courses/github-actions-cicd/scenarios/level-1/basic-workflow-syntax.yaml +52 -0
  15. package/courses/github-actions-cicd/scenarios/level-1/branch-protection-checks.yaml +63 -0
  16. package/courses/github-actions-cicd/scenarios/level-1/environment-variables-secrets.yaml +65 -0
  17. package/courses/github-actions-cicd/scenarios/level-1/first-cicd-shift.yaml +62 -0
  18. package/courses/github-actions-cicd/scenarios/level-1/job-dependencies-outputs.yaml +62 -0
  19. package/courses/github-actions-cicd/scenarios/level-1/simple-ci-pipeline.yaml +57 -0
  20. package/courses/github-actions-cicd/scenarios/level-1/workflow-debugging.yaml +90 -0
  21. package/courses/github-actions-cicd/scenarios/level-1/workflow-status-notifications.yaml +59 -0
  22. package/courses/github-actions-cicd/scenarios/level-1/workflow-triggers.yaml +56 -0
  23. package/courses/github-actions-cicd/scenarios/level-2/concurrency-control.yaml +58 -0
  24. package/courses/github-actions-cicd/scenarios/level-2/conditional-execution.yaml +60 -0
  25. package/courses/github-actions-cicd/scenarios/level-2/custom-actions-development.yaml +55 -0
  26. package/courses/github-actions-cicd/scenarios/level-2/dependency-caching.yaml +58 -0
  27. package/courses/github-actions-cicd/scenarios/level-2/deployment-workflows.yaml +61 -0
  28. package/courses/github-actions-cicd/scenarios/level-2/github-packages-publishing.yaml +59 -0
  29. package/courses/github-actions-cicd/scenarios/level-2/intermediate-cicd-shift.yaml +68 -0
  30. package/courses/github-actions-cicd/scenarios/level-2/matrix-builds.yaml +59 -0
  31. package/courses/github-actions-cicd/scenarios/level-2/reusable-workflows.yaml +61 -0
  32. package/courses/github-actions-cicd/scenarios/level-2/workflow-cost-optimization.yaml +61 -0
  33. package/courses/github-actions-cicd/scenarios/level-3/advanced-cicd-shift.yaml +64 -0
  34. package/courses/github-actions-cicd/scenarios/level-3/compliance-automation.yaml +68 -0
  35. package/courses/github-actions-cicd/scenarios/level-3/docker-action-development.yaml +65 -0
  36. package/courses/github-actions-cicd/scenarios/level-3/github-environments.yaml +65 -0
  37. package/courses/github-actions-cicd/scenarios/level-3/monorepo-ci.yaml +68 -0
  38. package/courses/github-actions-cicd/scenarios/level-3/oidc-cloud-deployments.yaml +55 -0
  39. package/courses/github-actions-cicd/scenarios/level-3/release-automation.yaml +61 -0
  40. package/courses/github-actions-cicd/scenarios/level-3/security-hardening.yaml +63 -0
  41. package/courses/github-actions-cicd/scenarios/level-3/self-hosted-runners.yaml +60 -0
  42. package/courses/github-actions-cicd/scenarios/level-3/workflow-optimization.yaml +59 -0
  43. package/courses/github-actions-cicd/scenarios/level-4/cicd-data-architecture.yaml +63 -0
  44. package/courses/github-actions-cicd/scenarios/level-4/cicd-economics-roi.yaml +63 -0
  45. package/courses/github-actions-cicd/scenarios/level-4/cicd-executive-communication.yaml +58 -0
  46. package/courses/github-actions-cicd/scenarios/level-4/cicd-incident-response.yaml +60 -0
  47. package/courses/github-actions-cicd/scenarios/level-4/cicd-org-design.yaml +59 -0
  48. package/courses/github-actions-cicd/scenarios/level-4/cicd-platform-architecture.yaml +63 -0
  49. package/courses/github-actions-cicd/scenarios/level-4/cicd-training-program.yaml +65 -0
  50. package/courses/github-actions-cicd/scenarios/level-4/cicd-vendor-evaluation.yaml +59 -0
  51. package/courses/github-actions-cicd/scenarios/level-4/enterprise-cicd-governance.yaml +55 -0
  52. package/courses/github-actions-cicd/scenarios/level-4/expert-cicd-shift.yaml +60 -0
  53. package/courses/github-actions-cicd/scenarios/level-5/cicd-ai-future.yaml +63 -0
  54. package/courses/github-actions-cicd/scenarios/level-5/cicd-behavioral-science.yaml +70 -0
  55. package/courses/github-actions-cicd/scenarios/level-5/cicd-board-strategy.yaml +56 -0
  56. package/courses/github-actions-cicd/scenarios/level-5/cicd-consulting-engagement.yaml +61 -0
  57. package/courses/github-actions-cicd/scenarios/level-5/cicd-industry-benchmarks.yaml +63 -0
  58. package/courses/github-actions-cicd/scenarios/level-5/cicd-ma-integration.yaml +73 -0
  59. package/courses/github-actions-cicd/scenarios/level-5/cicd-product-development.yaml +68 -0
  60. package/courses/github-actions-cicd/scenarios/level-5/cicd-regulatory-landscape.yaml +72 -0
  61. package/courses/github-actions-cicd/scenarios/level-5/comprehensive-cicd-system.yaml +66 -0
  62. package/courses/github-actions-cicd/scenarios/level-5/master-cicd-shift.yaml +76 -0
  63. package/courses/github-pr-review/scenarios/level-2/api-change-review.yaml +82 -0
  64. package/courses/github-pr-review/scenarios/level-2/automated-review-tooling.yaml +53 -0
  65. package/courses/github-pr-review/scenarios/level-2/cross-team-review.yaml +61 -0
  66. package/courses/github-pr-review/scenarios/level-2/intermediate-review-shift.yaml +66 -0
  67. package/courses/github-pr-review/scenarios/level-2/performance-review-patterns.yaml +99 -0
  68. package/courses/github-pr-review/scenarios/level-2/review-disagreement-resolution.yaml +64 -0
  69. package/courses/github-pr-review/scenarios/level-2/review-metrics-analysis.yaml +63 -0
  70. package/courses/github-pr-review/scenarios/level-2/review-turnaround-sla.yaml +54 -0
  71. package/courses/github-pr-review/scenarios/level-2/stacked-pr-review.yaml +65 -0
  72. package/courses/github-pr-review/scenarios/level-3/advanced-review-shift.yaml +65 -0
  73. package/courses/github-pr-review/scenarios/level-3/ai-powered-review.yaml +58 -0
  74. package/courses/github-pr-review/scenarios/level-3/compliance-review-process.yaml +64 -0
  75. package/courses/github-pr-review/scenarios/level-3/cross-functional-review.yaml +60 -0
  76. package/courses/github-pr-review/scenarios/level-3/incident-driven-review.yaml +63 -0
  77. package/courses/github-pr-review/scenarios/level-3/large-scale-review-operations.yaml +55 -0
  78. package/courses/github-pr-review/scenarios/level-3/monorepo-review-process.yaml +68 -0
  79. package/courses/github-pr-review/scenarios/level-3/review-automation-platform.yaml +61 -0
  80. package/courses/github-pr-review/scenarios/level-3/review-culture-design.yaml +62 -0
  81. package/courses/github-pr-review/scenarios/level-3/review-data-pipeline.yaml +62 -0
  82. package/courses/github-pr-review/scenarios/level-4/enterprise-review-operations.yaml +61 -0
  83. package/courses/github-pr-review/scenarios/level-4/expert-review-shift.yaml +62 -0
  84. package/courses/github-pr-review/scenarios/level-4/review-data-architecture.yaml +69 -0
  85. package/courses/github-pr-review/scenarios/level-4/review-economics-roi.yaml +63 -0
  86. package/courses/github-pr-review/scenarios/level-4/review-executive-communication.yaml +61 -0
  87. package/courses/github-pr-review/scenarios/level-4/review-incident-postmortem.yaml +69 -0
  88. package/courses/github-pr-review/scenarios/level-4/review-org-design.yaml +62 -0
  89. package/courses/github-pr-review/scenarios/level-4/review-platform-architecture.yaml +64 -0
  90. package/courses/github-pr-review/scenarios/level-4/review-training-program.yaml +66 -0
  91. package/courses/github-pr-review/scenarios/level-4/review-vendor-evaluation.yaml +76 -0
  92. package/courses/github-pr-review/scenarios/level-5/comprehensive-review-system.yaml +68 -0
  93. package/courses/github-pr-review/scenarios/level-5/master-review-shift.yaml +73 -0
  94. package/courses/github-pr-review/scenarios/level-5/review-ai-future.yaml +69 -0
  95. package/courses/github-pr-review/scenarios/level-5/review-behavioral-science.yaml +66 -0
  96. package/courses/github-pr-review/scenarios/level-5/review-board-strategy.yaml +62 -0
  97. package/courses/github-pr-review/scenarios/level-5/review-consulting-engagement.yaml +62 -0
  98. package/courses/github-pr-review/scenarios/level-5/review-devtools-product.yaml +71 -0
  99. package/courses/github-pr-review/scenarios/level-5/review-industry-benchmarks.yaml +64 -0
  100. package/courses/github-pr-review/scenarios/level-5/review-ma-integration.yaml +76 -0
  101. package/courses/github-pr-review/scenarios/level-5/review-regulatory-landscape.yaml +78 -0
  102. package/courses/postgresql-query-optimization/course.yaml +11 -0
  103. package/courses/postgresql-query-optimization/scenarios/level-1/explain-analyze-basics.yaml +80 -0
  104. package/courses/postgresql-query-optimization/scenarios/level-1/first-optimization-shift.yaml +77 -0
  105. package/courses/postgresql-query-optimization/scenarios/level-1/index-fundamentals.yaml +76 -0
  106. package/courses/postgresql-query-optimization/scenarios/level-1/join-basics.yaml +73 -0
  107. package/courses/postgresql-query-optimization/scenarios/level-1/n-plus-one-queries.yaml +62 -0
  108. package/courses/postgresql-query-optimization/scenarios/level-1/query-rewriting-basics.yaml +69 -0
  109. package/courses/postgresql-query-optimization/scenarios/level-1/select-star-problems.yaml +69 -0
  110. package/courses/postgresql-query-optimization/scenarios/level-1/slow-query-diagnosis.yaml +63 -0
  111. package/courses/postgresql-query-optimization/scenarios/level-1/vacuum-and-statistics.yaml +62 -0
  112. package/courses/postgresql-query-optimization/scenarios/level-1/where-clause-optimization.yaml +74 -0
  113. package/courses/postgresql-query-optimization/scenarios/level-2/autovacuum-tuning.yaml +76 -0
  114. package/courses/postgresql-query-optimization/scenarios/level-2/composite-index-design.yaml +81 -0
  115. package/courses/postgresql-query-optimization/scenarios/level-2/covering-indexes.yaml +74 -0
  116. package/courses/postgresql-query-optimization/scenarios/level-2/cte-optimization.yaml +83 -0
  117. package/courses/postgresql-query-optimization/scenarios/level-2/intermediate-optimization-shift.yaml +66 -0
  118. package/courses/postgresql-query-optimization/scenarios/level-2/join-optimization.yaml +72 -0
  119. package/courses/postgresql-query-optimization/scenarios/level-2/partial-and-expression-indexes.yaml +75 -0
  120. package/courses/postgresql-query-optimization/scenarios/level-2/query-planner-settings.yaml +62 -0
  121. package/courses/postgresql-query-optimization/scenarios/level-2/subquery-optimization.yaml +67 -0
  122. package/courses/postgresql-query-optimization/scenarios/level-2/window-function-optimization.yaml +63 -0
  123. package/courses/postgresql-query-optimization/scenarios/level-3/advanced-optimization-shift.yaml +71 -0
  124. package/courses/postgresql-query-optimization/scenarios/level-3/connection-pooling.yaml +60 -0
  125. package/courses/postgresql-query-optimization/scenarios/level-3/full-text-search-optimization.yaml +66 -0
  126. package/courses/postgresql-query-optimization/scenarios/level-3/jsonb-optimization.yaml +88 -0
  127. package/courses/postgresql-query-optimization/scenarios/level-3/lock-contention-analysis.yaml +80 -0
  128. package/courses/postgresql-query-optimization/scenarios/level-3/materialized-view-optimization.yaml +73 -0
  129. package/courses/postgresql-query-optimization/scenarios/level-3/parallel-query-execution.yaml +74 -0
  130. package/courses/postgresql-query-optimization/scenarios/level-3/partitioning-strategies.yaml +71 -0
  131. package/courses/postgresql-query-optimization/scenarios/level-3/specialized-index-types.yaml +67 -0
  132. package/courses/postgresql-query-optimization/scenarios/level-3/write-optimization.yaml +65 -0
  133. package/courses/postgresql-query-optimization/scenarios/level-4/data-architecture-analytics.yaml +64 -0
  134. package/courses/postgresql-query-optimization/scenarios/level-4/database-executive-communication.yaml +64 -0
  135. package/courses/postgresql-query-optimization/scenarios/level-4/database-migration-planning.yaml +57 -0
  136. package/courses/postgresql-query-optimization/scenarios/level-4/enterprise-database-governance.yaml +52 -0
  137. package/courses/postgresql-query-optimization/scenarios/level-4/expert-optimization-shift.yaml +73 -0
  138. package/courses/postgresql-query-optimization/scenarios/level-4/high-availability-architecture.yaml +62 -0
  139. package/courses/postgresql-query-optimization/scenarios/level-4/optimizer-internals.yaml +69 -0
  140. package/courses/postgresql-query-optimization/scenarios/level-4/performance-sla-design.yaml +58 -0
  141. package/courses/postgresql-query-optimization/scenarios/level-4/read-replica-optimization.yaml +62 -0
  142. package/courses/postgresql-query-optimization/scenarios/level-4/vendor-evaluation.yaml +73 -0
  143. package/courses/rest-api-error-handling/course.yaml +11 -0
  144. package/courses/rest-api-error-handling/scenarios/level-1/authentication-errors.yaml +71 -0
  145. package/courses/rest-api-error-handling/scenarios/level-1/content-negotiation-errors.yaml +63 -0
  146. package/courses/rest-api-error-handling/scenarios/level-1/error-logging-basics.yaml +63 -0
  147. package/courses/rest-api-error-handling/scenarios/level-1/error-response-format.yaml +58 -0
  148. package/courses/rest-api-error-handling/scenarios/level-1/first-error-handling-shift.yaml +67 -0
  149. package/courses/rest-api-error-handling/scenarios/level-1/http-status-codes.yaml +46 -0
  150. package/courses/rest-api-error-handling/scenarios/level-1/not-found-errors.yaml +52 -0
  151. package/courses/rest-api-error-handling/scenarios/level-1/rate-limiting-errors.yaml +56 -0
  152. package/courses/rest-api-error-handling/scenarios/level-1/request-validation-errors.yaml +59 -0
  153. package/courses/rest-api-error-handling/scenarios/level-1/server-error-handling.yaml +55 -0
  154. package/courses/rest-api-error-handling/scenarios/level-2/api-versioning-errors.yaml +66 -0
  155. package/courses/rest-api-error-handling/scenarios/level-2/batch-request-errors.yaml +61 -0
  156. package/courses/rest-api-error-handling/scenarios/level-2/circuit-breaker-pattern.yaml +52 -0
  157. package/courses/rest-api-error-handling/scenarios/level-2/error-code-taxonomy.yaml +62 -0
  158. package/courses/rest-api-error-handling/scenarios/level-2/error-monitoring-alerting.yaml +53 -0
  159. package/courses/rest-api-error-handling/scenarios/level-2/intermediate-error-shift.yaml +69 -0
  160. package/courses/rest-api-error-handling/scenarios/level-2/pagination-errors.yaml +66 -0
  161. package/courses/rest-api-error-handling/scenarios/level-2/retry-and-idempotency.yaml +60 -0
  162. package/courses/rest-api-error-handling/scenarios/level-2/rfc7807-problem-details.yaml +60 -0
  163. package/courses/rest-api-error-handling/scenarios/level-2/webhook-error-handling.yaml +55 -0
  164. package/courses/rest-api-error-handling/scenarios/level-3/advanced-error-shift.yaml +72 -0
  165. package/courses/rest-api-error-handling/scenarios/level-3/api-gateway-errors.yaml +71 -0
  166. package/courses/rest-api-error-handling/scenarios/level-3/async-api-errors.yaml +67 -0
  167. package/courses/rest-api-error-handling/scenarios/level-3/caching-error-scenarios.yaml +65 -0
  168. package/courses/rest-api-error-handling/scenarios/level-3/chaos-engineering-apis.yaml +62 -0
  169. package/courses/rest-api-error-handling/scenarios/level-3/database-error-handling.yaml +79 -0
  170. package/courses/rest-api-error-handling/scenarios/level-3/distributed-error-propagation.yaml +63 -0
  171. package/courses/rest-api-error-handling/scenarios/level-3/error-budgets-sre.yaml +61 -0
  172. package/courses/rest-api-error-handling/scenarios/level-3/error-correlation.yaml +58 -0
  173. package/courses/rest-api-error-handling/scenarios/level-3/graphql-vs-rest-errors.yaml +73 -0
  174. package/courses/rest-api-error-handling/scenarios/level-4/compliance-error-handling.yaml +65 -0
  175. package/courses/rest-api-error-handling/scenarios/level-4/enterprise-error-governance.yaml +62 -0
  176. package/courses/rest-api-error-handling/scenarios/level-4/error-analytics-platform.yaml +65 -0
  177. package/courses/rest-api-error-handling/scenarios/level-4/error-cost-optimization.yaml +63 -0
  178. package/courses/rest-api-error-handling/scenarios/level-4/error-executive-communication.yaml +60 -0
  179. package/courses/rest-api-error-handling/scenarios/level-4/error-handling-architecture.yaml +67 -0
  180. package/courses/rest-api-error-handling/scenarios/level-4/error-org-design.yaml +68 -0
  181. package/courses/rest-api-error-handling/scenarios/level-4/error-sla-design.yaml +65 -0
  182. package/courses/rest-api-error-handling/scenarios/level-4/error-training-program.yaml +61 -0
  183. package/courses/rest-api-error-handling/scenarios/level-4/expert-error-shift.yaml +63 -0
  184. package/courses/rest-api-error-handling/scenarios/level-5/comprehensive-error-system.yaml +68 -0
  185. package/courses/rest-api-error-handling/scenarios/level-5/error-ai-future.yaml +75 -0
  186. package/courses/rest-api-error-handling/scenarios/level-5/error-behavioral-science.yaml +73 -0
  187. package/courses/rest-api-error-handling/scenarios/level-5/error-board-strategy.yaml +60 -0
  188. package/courses/rest-api-error-handling/scenarios/level-5/error-consulting-engagement.yaml +58 -0
  189. package/courses/rest-api-error-handling/scenarios/level-5/error-industry-benchmarks.yaml +72 -0
  190. package/courses/rest-api-error-handling/scenarios/level-5/error-ma-integration.yaml +68 -0
  191. package/courses/rest-api-error-handling/scenarios/level-5/error-product-development.yaml +66 -0
  192. package/courses/rest-api-error-handling/scenarios/level-5/error-regulatory-landscape.yaml +80 -0
  193. package/courses/rest-api-error-handling/scenarios/level-5/master-error-shift.yaml +73 -0
  194. package/dist/cli/commands/add.d.ts.map +1 -1
  195. package/dist/cli/commands/add.js +6 -5
  196. package/dist/cli/commands/add.js.map +1 -1
  197. package/dist/cli/commands/generate.d.ts.map +1 -1
  198. package/dist/cli/commands/generate.js +4 -0
  199. package/dist/cli/commands/generate.js.map +1 -1
  200. package/dist/cli/commands/list.d.ts.map +1 -1
  201. package/dist/cli/commands/list.js +6 -18
  202. package/dist/cli/commands/list.js.map +1 -1
  203. package/dist/cli/commands/train.d.ts.map +1 -1
  204. package/dist/cli/commands/train.js +18 -18
  205. package/dist/cli/commands/train.js.map +1 -1
  206. package/dist/cli/index.js +93 -55
  207. package/dist/cli/index.js.map +1 -1
  208. package/dist/cli/run-demo.js +2 -1
  209. package/dist/cli/run-demo.js.map +1 -1
  210. package/dist/cli/setup.d.ts +18 -0
  211. package/dist/cli/setup.d.ts.map +1 -0
  212. package/dist/cli/setup.js +154 -0
  213. package/dist/cli/setup.js.map +1 -0
  214. package/dist/engine/agent-bridge.d.ts +5 -2
  215. package/dist/engine/agent-bridge.d.ts.map +1 -1
  216. package/dist/engine/agent-bridge.js +36 -9
  217. package/dist/engine/agent-bridge.js.map +1 -1
  218. package/dist/engine/loader.d.ts +21 -0
  219. package/dist/engine/loader.d.ts.map +1 -1
  220. package/dist/engine/loader.js +54 -1
  221. package/dist/engine/loader.js.map +1 -1
  222. package/dist/engine/training-loop.d.ts.map +1 -1
  223. package/dist/engine/training-loop.js +1 -0
  224. package/dist/engine/training-loop.js.map +1 -1
  225. package/dist/engine/training.d.ts.map +1 -1
  226. package/dist/engine/training.js +1 -0
  227. package/dist/engine/training.js.map +1 -1
  228. package/dist/generator/skill-generator.d.ts +1 -1
  229. package/dist/generator/skill-generator.d.ts.map +1 -1
  230. package/dist/generator/skill-generator.js +21 -2
  231. package/dist/generator/skill-generator.js.map +1 -1
  232. package/dist/mcp/server.d.ts.map +1 -1
  233. package/dist/mcp/server.js +11 -26
  234. package/dist/mcp/server.js.map +1 -1
  235. package/dist/mcp/session-manager.d.ts +3 -1
  236. package/dist/mcp/session-manager.d.ts.map +1 -1
  237. package/dist/mcp/session-manager.js +44 -22
  238. package/dist/mcp/session-manager.js.map +1 -1
  239. package/dist/types/schemas.d.ts +38 -13
  240. package/dist/types/schemas.d.ts.map +1 -1
  241. package/dist/types/schemas.js +9 -5
  242. package/dist/types/schemas.js.map +1 -1
  243. package/package.json +1 -1
@@ -0,0 +1,58 @@
1
+ meta:
2
+ id: dependency-caching
3
+ level: 2
4
+ course: github-actions-cicd
5
+ type: output
6
+ description: "Optimize dependency caching — configure actions/cache and built-in caching to dramatically reduce CI build times"
7
+ tags: [github, actions, caching, dependencies, optimization, intermediate]
8
+
9
+ state: {}
10
+
11
+ trigger: |
12
+ Your team's CI workflow takes 12 minutes per run, and 8 of those
13
+ minutes are spent installing dependencies. With 80 CI runs per day,
14
+ that's over 10 hours wasted on dependency installation daily. You
15
+ need to implement an effective caching strategy.
16
+
17
+ Project details:
18
+ - Monorepo with 3 packages (frontend, backend, shared)
19
+ - Frontend: npm (package-lock.json)
20
+ - Backend: pip (requirements.txt + requirements-dev.txt)
21
+ - Shared: Go modules (go.sum)
22
+ - Docker builds: multi-stage Dockerfile for backend
23
+
24
+ Current (no caching) timing:
25
+ - npm ci: 3 minutes
26
+ - pip install: 2 minutes
27
+ - go mod download: 1.5 minutes
28
+ - Docker build: 1.5 minutes (downloads base images each time)
29
+
30
+ Caching scenarios to solve:
31
+ 1. Basic npm caching using actions/setup-node's built-in cache
32
+ 2. Advanced npm caching using actions/cache with fallback keys
33
+ 3. pip caching with multiple requirements files as cache key
34
+ 4. Go module caching
35
+ 5. Docker layer caching (using actions/cache or buildx cache)
36
+ 6. Cross-branch cache sharing (feature branch uses main's cache)
37
+
38
+ Task: Implement caching for all 5 dependency types. For each, write:
39
+ the cache configuration (key, restore-keys, path), the explanation
40
+ of the cache key strategy (why hash this file, what happens on
41
+ cache miss), the expected time savings, and common caching pitfalls
42
+ to avoid. Include a comparison of built-in caching (setup-node,
43
+ setup-python) vs explicit actions/cache, and explain when each is
44
+ preferred.
45
+
46
+ assertions:
47
+ - type: llm_judge
48
+ criteria: "Cache keys are correctly designed — npm uses hashFiles('**/package-lock.json'), pip uses hashFiles of requirements files, Go uses hashFiles('**/go.sum'), restore-keys provide fallback for partial matches, and the cross-branch sharing strategy is explained"
49
+ weight: 0.35
50
+ description: "Correctly designed cache keys"
51
+ - type: llm_judge
52
+ criteria: "All 5 dependency types are cached — npm, pip, Go modules, and Docker layers all have correct cache configurations with appropriate paths (node_modules or ~/.npm, ~/.cache/pip, ~/go/pkg/mod) and the Docker caching uses buildx with cache-from/cache-to or actions/cache"
53
+ weight: 0.35
54
+ description: "Complete caching for all types"
55
+ - type: llm_judge
56
+ criteria: "Pitfalls and trade-offs are addressed — explains cache size limits (10GB per repo), cache eviction policy (LRU, 7-day expiry), the danger of caching node_modules vs ~/.npm, and when built-in caching (setup-node cache: npm) is simpler than explicit actions/cache"
57
+ weight: 0.30
58
+ description: "Pitfalls and trade-offs addressed"
@@ -0,0 +1,61 @@
1
+ meta:
2
+ id: deployment-workflows
3
+ level: 2
4
+ course: github-actions-cicd
5
+ type: output
6
+ description: "Build deployment workflows — create staging and production deployment pipelines with approval gates and rollback"
7
+ tags: [github, actions, deployment, staging, production, rollback, intermediate]
8
+
9
+ state: {}
10
+
11
+ trigger: |
12
+ You're building deployment workflows for a web application that needs
13
+ to deploy to staging automatically and to production with manual
14
+ approval. The application runs on AWS (ECS for the API, S3 + CloudFront
15
+ for the frontend).
16
+
17
+ Deployment requirements:
18
+ 1. Staging deployment:
19
+ - Automatically deploy when PR is merged to main
20
+ - Deploy both frontend (S3) and backend (ECS)
21
+ - Run smoke tests after deployment
22
+ - Notify #staging Slack channel with deployment URL
23
+
24
+ 2. Production deployment:
25
+ - Requires manual approval from a team lead
26
+ - Uses GitHub Environments with protection rules
27
+ - Deploy frontend first, then backend (ordered)
28
+ - Run health checks between each deployment step
29
+ - If health check fails, automatically rollback
30
+ - Notify #production Slack channel
31
+
32
+ 3. Rollback workflow:
33
+ - Manual trigger (workflow_dispatch) with version input
34
+ - Rolls back to the specified previous version
35
+ - Can also be triggered automatically from deployment failure
36
+
37
+ 4. Environment configuration:
38
+ - Staging: auto-deploy, no approval, 5-minute timeout
39
+ - Production: manual approval (2 required reviewers), deployment
40
+ window (weekdays 9AM-4PM ET only)
41
+
42
+ Task: Write all 3 workflow files (deploy-staging.yml, deploy-
43
+ production.yml, rollback.yml). Include: the GitHub Environment
44
+ configuration (protection rules, secrets per environment), the
45
+ deployment steps with health checks, the rollback mechanism, and
46
+ the Slack notification integration. Explain the deployment strategy
47
+ (blue-green, rolling, or canary) and why you chose it.
48
+
49
+ assertions:
50
+ - type: llm_judge
51
+ criteria: "GitHub Environments are correctly used — staging environment has no protection rules (auto-deploy), production has required reviewers and deployment branch restriction (main only), and environment-specific secrets are referenced correctly"
52
+ weight: 0.35
53
+ description: "Correct GitHub Environment usage"
54
+ - type: llm_judge
55
+ criteria: "Deployment and rollback are properly orchestrated — staging deploys automatically on merge, production requires approval, health checks run between steps, failures trigger automatic rollback, and the manual rollback workflow accepts a version input"
56
+ weight: 0.35
57
+ description: "Proper deployment orchestration"
58
+ - type: llm_judge
59
+ criteria: "Deployment strategy is explained and implemented — the chosen strategy (blue-green, rolling, or canary) is justified for the architecture (ECS + S3), the implementation matches the strategy, and the rollback mechanism is consistent with the deployment approach"
60
+ weight: 0.30
61
+ description: "Explained deployment strategy"
@@ -0,0 +1,59 @@
1
+ meta:
2
+ id: github-packages-publishing
3
+ level: 2
4
+ course: github-actions-cicd
5
+ type: output
6
+ description: "Publish to GitHub Packages — automate npm, Docker, and container registry publishing with versioning and access control"
7
+ tags: [github, actions, packages, npm, Docker, registry, intermediate]
8
+
9
+ state: {}
10
+
11
+ trigger: |
12
+ Your organization has internal libraries and Docker images that need
13
+ to be published to GitHub Packages. You need to set up automated
14
+ publishing workflows for 3 different package types.
15
+
16
+ Package 1 — npm library (@myorg/shared-utils):
17
+ - Publish to GitHub Packages npm registry (not npmjs.com)
18
+ - Version from package.json
19
+ - Publish on GitHub Release creation
20
+ - Include provenance attestation
21
+ - Scoped to the organization (@myorg/*)
22
+
23
+ Package 2 — Docker image (myorg/api-server):
24
+ - Build and push to GitHub Container Registry (ghcr.io)
25
+ - Tag with: git SHA, branch name, semver from git tag, and "latest"
26
+ - Multi-architecture build (amd64 + arm64)
27
+ - Push on merge to main (tagged as latest + SHA)
28
+ - Push on release (tagged with version)
29
+
30
+ Package 3 — Python package (myorg-sdk):
31
+ - Build wheel and sdist
32
+ - Publish to GitHub Packages (not PyPI)
33
+ - Include in the same workflow as tests
34
+
35
+ Access control requirements:
36
+ - Internal packages: readable by all org members
37
+ - Docker images: public (for open-source project)
38
+ - npm packages: scoped to org, installable with GITHUB_TOKEN
39
+
40
+ Task: Write the publishing workflows for all 3 package types.
41
+ Include: the workflow YAML, the package.json / Dockerfile / setup.py
42
+ configuration needed for GitHub Packages, the authentication setup
43
+ (GITHUB_TOKEN permissions, .npmrc configuration), and the versioning
44
+ strategy for each package type. Explain the difference between GitHub
45
+ Packages and external registries.
46
+
47
+ assertions:
48
+ - type: llm_judge
49
+ criteria: "npm publishing is correctly configured — uses .npmrc with GitHub Packages registry URL, GITHUB_TOKEN authentication, publishConfig in package.json, provenance attestation with --provenance flag, and the workflow triggers on release published"
50
+ weight: 0.35
51
+ description: "Correct npm publishing"
52
+ - type: llm_judge
53
+ criteria: "Docker publishing uses GHCR correctly — authenticates with ghcr.io, uses docker/metadata-action for smart tagging (SHA, branch, semver), multi-arch build with docker/build-push-action and QEMU, and the image is properly tagged for both main and release triggers"
54
+ weight: 0.35
55
+ description: "Correct Docker GHCR publishing"
56
+ - type: llm_judge
57
+ criteria: "Access control and versioning are properly explained — differentiates package visibility settings, explains GITHUB_TOKEN vs PAT for cross-repo access, and the versioning strategy is consistent across package types (semver from git tags or package.json)"
58
+ weight: 0.30
59
+ description: "Proper access control and versioning"
@@ -0,0 +1,68 @@
1
+ meta:
2
+ id: intermediate-cicd-shift
3
+ level: 2
4
+ course: github-actions-cicd
5
+ type: output
6
+ description: "Intermediate CI/CD shift — handle complex workflow issues, optimization requests, and deployment incidents simultaneously"
7
+ tags: [github, actions, shift-simulation, troubleshooting, optimization, intermediate]
8
+
9
+ state: {}
10
+
11
+ trigger: |
12
+ You're the CI/CD on-call engineer handling multiple requests during
13
+ a busy shift. Handle all 4 situations.
14
+
15
+ Situation 1 — Deployment rollback needed:
16
+ Production deployment just completed but monitoring shows 500 errors
17
+ spiking from 0.1% to 5%. The deployment was triggered by a merge
18
+ to main 10 minutes ago. You need to:
19
+ - Identify which commit caused the issue
20
+ - Trigger a rollback to the previous version
21
+ - The rollback workflow exists but has never been used — you need
22
+ to verify it works and execute it
23
+ - Prevent further auto-deployments until the issue is resolved
24
+
25
+ Situation 2 — Matrix build timeout:
26
+ The cross-platform test matrix has been running for 2 hours (normal
27
+ is 20 minutes). Investigation shows: macOS runner is stuck on "Set
28
+ up job" with no logs. This is blocking a critical security patch PR.
29
+ You need to:
30
+ - Unblock the security patch
31
+ - Fix the matrix build for future runs
32
+ - Decide if you should rerun the entire matrix or just the failed job
33
+
34
+ Situation 3 — Secret exposure alert:
35
+ GitHub sent a secret scanning alert: an AWS access key was found in
36
+ a workflow file committed 2 hours ago. The key was in a hardcoded
37
+ env value (not using secrets). You need to:
38
+ - Assess the exposure (was the key used in any workflow runs?)
39
+ - Remediate immediately (rotate key, remove from code)
40
+ - Prevent recurrence (how to block secret commits)
41
+
42
+ Situation 4 — Cache corruption:
43
+ Multiple teams report that their CI workflows are failing with
44
+ "Module not found" errors despite no code changes. Investigation
45
+ shows the shared cache (node_modules) was corrupted by a workflow
46
+ that ran during a failed npm publish. You need to:
47
+ - Clear the corrupted cache for affected repos
48
+ - Fix the failing workflows immediately
49
+ - Prevent cache corruption from happening again
50
+
51
+ Task: Handle all 4 situations. For each, write: the immediate action
52
+ (what to do in the next 5 minutes), the resolution steps, the root
53
+ cause analysis, and the prevention measures. Prioritize and explain
54
+ your priority order.
55
+
56
+ assertions:
57
+ - type: llm_judge
58
+ criteria: "Priority order is correct — secret exposure (Situation 3) and production errors (Situation 1) are highest priority, matrix timeout (Situation 2) is medium (blocks security patch), and cache corruption (Situation 4) is handled but less urgent. The security patch PR gets unblocked quickly"
59
+ weight: 0.35
60
+ description: "Correct priority order"
61
+ - type: llm_judge
62
+ criteria: "Resolutions are technically sound — rollback uses the existing workflow with correct version targeting, secret remediation includes key rotation AND code removal AND history rewriting if needed, cache clearing uses correct GitHub API or CLI, and matrix fix addresses the macOS runner issue"
63
+ weight: 0.35
64
+ description: "Technically sound resolutions"
65
+ - type: llm_judge
66
+ criteria: "Prevention measures are systemic — secret scanning with push protection, pre-commit hooks for secrets, cache key design that prevents corruption (immutable keys), macOS runner fallback strategy, and deployment safeguards (canary, automatic rollback on error rate)"
67
+ weight: 0.30
68
+ description: "Systemic prevention measures"
@@ -0,0 +1,59 @@
1
+ meta:
2
+ id: matrix-builds
3
+ level: 2
4
+ course: github-actions-cicd
5
+ type: output
6
+ description: "Configure matrix builds — test across multiple OS, language versions, and configurations using strategy.matrix"
7
+ tags: [github, actions, matrix, cross-platform, multi-version, intermediate]
8
+
9
+ state: {}
10
+
11
+ trigger: |
12
+ You maintain an open-source Node.js library that must work across
13
+ multiple environments. The library is used by projects running
14
+ different Node.js versions, operating systems, and package managers.
15
+
16
+ Test matrix requirements:
17
+ - Node.js versions: 18, 20, 22
18
+ - Operating systems: ubuntu-latest, windows-latest, macos-latest
19
+ - Package managers: npm, yarn, pnpm
20
+ - Full matrix = 3 x 3 x 3 = 27 combinations
21
+
22
+ Constraints:
23
+ - The full matrix takes too long (45 minutes) and costs too much
24
+ - Node 18 on Windows with pnpm has a known incompatibility — exclude
25
+ this combination
26
+ - Node 22 is experimental — failures shouldn't block the PR
27
+ - macOS runners cost 10x more than Linux runners — minimize usage
28
+ - You want to add a specific combination not in the matrix: Node 21
29
+ (nightly) on ubuntu-latest with npm
30
+
31
+ Additional requirements:
32
+ - If any matrix job fails, you want to see all results (don't cancel
33
+ other jobs immediately)
34
+ - The matrix should generate a human-readable job name like
35
+ "Test (node-20, ubuntu-latest, npm)"
36
+ - After all matrix jobs complete, a summary job should report which
37
+ combinations passed/failed
38
+
39
+ Task: Write the complete matrix workflow. Include: the matrix
40
+ configuration with include, exclude, and fail-fast settings, the
41
+ strategy for reducing the 27-combination matrix to a practical subset
42
+ (explain your reasoning for which to cut), the Node 22 experimental
43
+ configuration using continue-on-error, and the summary job that
44
+ collects all matrix results. Explain the cost implications of your
45
+ matrix choices.
46
+
47
+ assertions:
48
+ - type: llm_judge
49
+ criteria: "Matrix syntax is correct — uses strategy.matrix with proper include/exclude syntax, fail-fast: false, continue-on-error for Node 22, and the exclude for Node 18 + Windows + pnpm is correctly specified"
50
+ weight: 0.35
51
+ description: "Correct matrix syntax"
52
+ - type: llm_judge
53
+ criteria: "Matrix reduction is well-reasoned — reduces the 27-combination matrix to a practical subset (maybe 12-15), justifies which combinations to keep (e.g., full Linux matrix, reduced macOS to save cost), and the cost analysis shows the savings"
54
+ weight: 0.35
55
+ description: "Well-reasoned matrix reduction"
56
+ - type: llm_judge
57
+ criteria: "Summary job correctly aggregates results — uses needs with the matrix job, accesses matrix job outcomes, and produces a clear pass/fail report for all combinations. The workflow would work correctly in a real repository"
58
+ weight: 0.30
59
+ description: "Correct summary aggregation"
@@ -0,0 +1,61 @@
1
+ meta:
2
+ id: reusable-workflows
3
+ level: 2
4
+ course: github-actions-cicd
5
+ type: output
6
+ description: "Build reusable workflows — create DRY CI/CD with reusable workflows, composite actions, and workflow templates"
7
+ tags: [github, actions, reusable-workflows, composite-actions, DRY, intermediate]
8
+
9
+ state: {}
10
+
11
+ trigger: |
12
+ Your organization has 15 Node.js repositories that all have nearly
13
+ identical CI/CD workflows. When you need to update the Node version
14
+ or add a security scan, you have to modify 15 files across 15 repos.
15
+ Last month, someone forgot to update 3 repos and they broke.
16
+
17
+ Current duplication:
18
+ - All 15 repos: checkout → setup-node → install → lint → test → build
19
+ - 8 repos: + deploy to staging on merge to main
20
+ - 5 repos: + deploy to production on release
21
+ - All repos: same Slack notification on failure
22
+
23
+ You need to create reusable components:
24
+
25
+ Component 1 — Reusable workflow (workflow_call):
26
+ Create a reusable CI workflow that accepts inputs:
27
+ - node-version (default: 20)
28
+ - run-e2e (boolean, default: false)
29
+ - deploy-target (string: none/staging/production)
30
+ And passes secrets:
31
+ - AWS credentials (for deployment)
32
+ - Slack webhook URL (for notifications)
33
+
34
+ Component 2 — Composite action:
35
+ Create a composite action "setup-and-test" that bundles:
36
+ - Checkout, setup-node, cache, install, lint, test
37
+ Into a single reusable action that can be used in any workflow
38
+
39
+ Component 3 — Workflow template (organization level):
40
+ Create a starter workflow template that new repos can adopt from
41
+ the "Actions" tab, pre-configured with your org's standards
42
+
43
+ Task: Build all 3 components. For each, write: the complete YAML
44
+ files, the calling workflow that uses them, and the comparison (when
45
+ to use reusable workflows vs composite actions vs templates). Include
46
+ the migration plan for moving the 15 repos from duplicated workflows
47
+ to the reusable approach.
48
+
49
+ assertions:
50
+ - type: llm_judge
51
+ criteria: "Reusable workflow is correctly structured — uses workflow_call trigger with typed inputs and secrets, the calling workflow uses 'uses: org/repo/.github/workflows/file.yml@main' syntax, and secrets are passed correctly (secrets: inherit or explicit)"
52
+ weight: 0.35
53
+ description: "Correct reusable workflow structure"
54
+ - type: llm_judge
55
+ criteria: "Composite action is properly defined — has action.yml with inputs/outputs, uses 'composite' runs type, steps use correct shell specification, and the calling workflow uses it with 'uses: org/repo/path@version' syntax"
56
+ weight: 0.35
57
+ description: "Proper composite action definition"
58
+ - type: llm_judge
59
+ criteria: "Comparison is clear and practical — explains when to choose reusable workflows (full job reuse, secret passing), composite actions (step-level reuse, can run in existing jobs), and templates (one-time setup for new repos), with a migration plan that doesn't break existing CI"
60
+ weight: 0.30
61
+ description: "Clear comparison and migration plan"
@@ -0,0 +1,61 @@
1
+ meta:
2
+ id: workflow-cost-optimization
3
+ level: 2
4
+ course: github-actions-cicd
5
+ type: output
6
+ description: "Optimize workflow costs — reduce GitHub Actions spend through caching, concurrency, path filters, and runner selection"
7
+ tags: [github, actions, cost, optimization, billing, runners, intermediate]
8
+
9
+ state: {}
10
+
11
+ trigger: |
12
+ Your engineering manager just received the GitHub Actions bill:
13
+ $4,200/month for a 25-person team. They want you to cut it by 50%
14
+ without sacrificing CI quality. Here's the current usage breakdown:
15
+
16
+ Billing data (last month):
17
+ - Total minutes used: 42,000
18
+ - Linux runners: 28,000 min ($280 at $0.008/min)
19
+ - macOS runners: 8,000 min ($640 at $0.08/min)
20
+ - Windows runners: 6,000 min ($96 at $0.016/min)
21
+ - Storage (artifacts + packages): $180
22
+ - Overage beyond free tier: $3,000
23
+
24
+ Workflow analysis:
25
+ | Workflow | Runs/month | Avg duration | Total min | Cost |
26
+ |-------------------|-----------|-------------|-----------|-------|
27
+ | ci.yml | 1,200 | 15 min | 18,000 | $1,440|
28
+ | deploy.yml | 60 | 8 min | 480 | $38 |
29
+ | nightly-tests.yml | 30 | 45 min | 1,350 | $108 |
30
+ | e2e-all-os.yml | 400 | 30 min | 12,000 | $1,560|
31
+ | lint-on-save.yml | 2,000 | 3 min | 6,000 | $480 |
32
+ | security-scan.yml | 200 | 12 min | 2,400 | $192 |
33
+ | stale-cleanup.yml | 30 | 5 min | 150 | $12 |
34
+
35
+ Key observations:
36
+ - ci.yml runs on every push (even draft PRs, even docs-only changes)
37
+ - e2e-all-os.yml runs full matrix on all 3 OSes for every PR
38
+ - lint-on-save.yml triggers on every push including commit amends
39
+ - nightly-tests.yml runs a full test suite even when nothing changed
40
+ - Artifacts are retained for 90 days (default)
41
+
42
+ Task: Create the cost optimization plan. For each workflow, write:
43
+ the specific optimization (with YAML changes), the expected savings,
44
+ and any quality trade-offs. Include: the optimized billing projection,
45
+ the comparison of GitHub-hosted vs self-hosted runner economics for
46
+ this team's usage, and a monitoring dashboard design for ongoing
47
+ cost tracking. Target: reduce from $4,200 to under $2,100/month.
48
+
49
+ assertions:
50
+ - type: llm_judge
51
+ criteria: "Optimizations are specific and impactful — ci.yml gets path filters and draft PR skip, e2e-all-os runs full matrix only on main (reduced matrix on PRs), lint-on-save gets concurrency cancel-in-progress, artifact retention is reduced, and each optimization has a dollar-value estimate"
52
+ weight: 0.35
53
+ description: "Specific impactful optimizations"
54
+ - type: llm_judge
55
+ criteria: "Cost reduction achieves the target — the total projected savings reach or exceed 50% ($2,100 target), each optimization's savings are calculated from the billing data, and the math is consistent and reasonable"
56
+ weight: 0.35
57
+ description: "Target-achieving cost reduction"
58
+ - type: llm_judge
59
+ criteria: "Self-hosted runner analysis is included — compares the monthly cost of GitHub-hosted vs self-hosted for this usage level, considers the maintenance overhead of self-hosted, and makes a clear recommendation with break-even analysis"
60
+ weight: 0.30
61
+ description: "Self-hosted runner analysis"
@@ -0,0 +1,64 @@
1
+ meta:
2
+ id: advanced-cicd-shift
3
+ level: 3
4
+ course: github-actions-cicd
5
+ type: output
6
+ description: "Advanced CI/CD shift — handle security incidents, compliance failures, and infrastructure emergencies in GitHub Actions"
7
+ tags: [github, actions, shift-simulation, security, compliance, incident, advanced]
8
+
9
+ state: {}
10
+
11
+ trigger: |
12
+ You're the CI/CD platform engineer handling an intense shift with
13
+ 4 critical issues arriving within the same hour.
14
+
15
+ Issue 1 — Supply chain attack detected (Critical):
16
+ GitHub's secret scanning alerted that a popular action you use
17
+ (actions/setup-python@v4) had its v4 tag overwritten 30 minutes ago
18
+ by a compromised maintainer account. The malicious version exfiltrates
19
+ environment variables (including secrets) to an external server. Your
20
+ organization has 25 repos using this action. 8 workflow runs have
21
+ already executed since the compromise.
22
+ Immediate: Determine which repos are affected, assess exposure, and
23
+ block further execution.
24
+
25
+ Issue 2 — SOC 2 audit finding (High):
26
+ The SOC 2 auditor found that your required workflow (security scan)
27
+ can be bypassed. A developer discovered they can modify the workflow
28
+ file in their PR to skip the security scan, and since the modified
29
+ workflow is what runs, the bypass succeeds. This is a critical control
30
+ failure.
31
+
32
+ Issue 3 — Runner fleet failure (High):
33
+ Your self-hosted runner fleet (Kubernetes with ARC) is experiencing
34
+ cascading failures. The runner controller pod is in CrashLoopBackOff,
35
+ new jobs are queueing but not starting, and 15 deployments are
36
+ blocked. The last change was a Kubernetes cluster upgrade 2 hours ago.
37
+
38
+ Issue 4 — Cost spike (Medium):
39
+ GitHub Actions billing shows a 400% cost spike in the last 24 hours.
40
+ Investigation reveals a workflow with an infinite loop — a workflow
41
+ triggers on push, creates a commit, which triggers another push,
42
+ creating another commit. It's been running for 18 hours creating
43
+ 5,000+ commits.
44
+
45
+ Task: Handle all 4 issues. For each, write: the immediate containment
46
+ action (what to do in the next 5 minutes), the investigation and
47
+ remediation steps, the root cause analysis, and the permanent fix.
48
+ Include: the incident communication (what to tell the security team,
49
+ auditors, and engineering org), and the post-incident improvements
50
+ to prevent all 4 types of issues.
51
+
52
+ assertions:
53
+ - type: llm_judge
54
+ criteria: "Supply chain attack response is comprehensive — identifies all 25 affected repos, assesses which 8 runs were compromised, immediately pins to SHA or blocks the action, rotates all exposed secrets, and reports the compromised action to GitHub"
55
+ weight: 0.35
56
+ description: "Comprehensive supply chain response"
57
+ - type: llm_judge
58
+ criteria: "Audit finding is remediated correctly — explains that required workflows from the calling repo can be modified, the fix uses organization-level required workflows (which run the org's version, not the PR's), and the auditor is given a corrective action plan"
59
+ weight: 0.35
60
+ description: "Correct audit finding remediation"
61
+ - type: llm_judge
62
+ criteria: "Infinite loop and runner issues are resolved — the infinite loop is stopped by disabling the workflow or adding recursion prevention ([skip ci] or checking github.actor), the runner fleet recovery addresses the K8s upgrade issue, and permanent fixes prevent both recurrence"
63
+ weight: 0.30
64
+ description: "Loop and runner resolution"
@@ -0,0 +1,68 @@
1
+ meta:
2
+ id: compliance-automation
3
+ level: 3
4
+ course: github-actions-cicd
5
+ type: output
6
+ description: "Automate compliance in CI/CD — embed SOC 2, PCI DSS, and HIPAA controls into GitHub Actions workflows"
7
+ tags: [github, actions, compliance, SOC2, PCI-DSS, HIPAA, audit, advanced]
8
+
9
+ state: {}
10
+
11
+ trigger: |
12
+ Your fintech company processes healthcare payments (both PCI DSS and
13
+ HIPAA apply) and is pursuing SOC 2 Type II certification. The
14
+ auditors want to see that compliance controls are automated in CI/CD,
15
+ not just documented.
16
+
17
+ Required automated controls:
18
+
19
+ 1. Change management (SOC 2 CC8.1):
20
+ - Every production change has an approved PR (no direct pushes)
21
+ - PR approval is from someone other than the author
22
+ - All CI checks pass before merge
23
+ - Deployment creates an auditable record (who, when, what, why)
24
+
25
+ 2. Security testing (PCI DSS 6.5):
26
+ - SAST scan on every PR (CodeQL or Semgrep)
27
+ - Dependency vulnerability scan (Dependabot or Snyk)
28
+ - Secret scanning with push protection
29
+ - Container image scanning before deployment
30
+
31
+ 3. Data protection (HIPAA):
32
+ - No PHI in logs (log sanitization check)
33
+ - Encryption verification (TLS, at-rest encryption config checks)
34
+ - Access audit log generation for every deployment
35
+
36
+ 4. Evidence collection:
37
+ - All workflow runs produce compliance artifacts
38
+ - Artifacts are retained for 7 years (regulatory requirement)
39
+ - Evidence must be tamper-proof (signed, immutable)
40
+ - Monthly compliance report generation (automated)
41
+
42
+ Current gaps:
43
+ - Some repos don't have branch protection
44
+ - Security scans exist but are not required (can be skipped)
45
+ - No centralized compliance artifact storage
46
+ - Deployment audit logs are in plain text files, easy to modify
47
+
48
+ Task: Build the compliance automation pipeline. Write: the required
49
+ workflows (as organization-level required workflows), the branch
50
+ protection rulesets (org-wide enforcement), the security scan
51
+ configuration (CodeQL + Dependabot + secret scanning), the evidence
52
+ collection system (artifact storage, retention, signing), and the
53
+ monthly compliance report workflow. Include: the auditor-facing
54
+ documentation explaining how the automation satisfies each control.
55
+
56
+ assertions:
57
+ - type: llm_judge
58
+ criteria: "Controls are automated correctly — organization-level required workflows enforce security scans on all repos, branch protection rulesets prevent self-merge and require CI, and deployment audit records are generated automatically with tamper-proof signatures"
59
+ weight: 0.35
60
+ description: "Correctly automated controls"
61
+ - type: llm_judge
62
+ criteria: "Evidence collection meets regulatory requirements — compliance artifacts are stored with 7-year retention (not default 90 days), artifacts are signed for tamper-proofing, and the monthly report aggregates compliance data across all repos"
63
+ weight: 0.35
64
+ description: "Regulatory-meeting evidence collection"
65
+ - type: llm_judge
66
+ criteria: "Auditor documentation maps controls to workflows — each SOC 2/PCI/HIPAA control has a corresponding workflow or configuration with evidence of automation, and the documentation would satisfy an auditor (not just an engineer)"
67
+ weight: 0.30
68
+ description: "Auditor-satisfying documentation"
@@ -0,0 +1,65 @@
1
+ meta:
2
+ id: docker-action-development
3
+ level: 3
4
+ course: github-actions-cicd
5
+ type: output
6
+ description: "Build custom Docker actions — create isolated, language-agnostic actions using Docker containers with proper testing and publishing"
7
+ tags: [github, actions, Docker, custom-actions, containers, advanced]
8
+
9
+ state: {}
10
+
11
+ trigger: |
12
+ Your security team needs 3 custom Docker-based actions for their
13
+ compliance pipeline. Docker actions are required (not JavaScript)
14
+ because they need specific CLI tools, language runtimes, and
15
+ isolation guarantees.
16
+
17
+ Action 1 — "compliance-scanner":
18
+ Purpose: Run a compliance scan against CIS benchmarks for Docker
19
+ images and Kubernetes manifests. Must include specific tools
20
+ (trivy, kubesec, conftest) that aren't available as standalone
21
+ actions with the versions you need.
22
+ Inputs: scan-type (docker/k8s), target (image name or manifest path),
23
+ severity-threshold (critical/high/medium), policy-dir (OPA policies)
24
+ Outputs: findings-count, report-path, pass/fail status
25
+ Requirements: Multi-stage Dockerfile, report in SARIF format,
26
+ integration with GitHub Security tab
27
+
28
+ Action 2 — "license-auditor":
29
+ Purpose: Audit all dependencies for license compliance. Must support
30
+ npm, pip, Go, and Java (Maven) in a single action. Uses a Python
31
+ script with specific libraries.
32
+ Inputs: package-manager, allowed-licenses (JSON array), fail-on-deny
33
+ Outputs: audit-report-path, denied-licenses-count
34
+ Requirements: Should generate a license bill of materials (BOM)
35
+
36
+ Action 3 — "secret-detector":
37
+ Purpose: Scan PR diffs for accidentally committed secrets using
38
+ custom regex patterns and entropy analysis. Runs in isolated
39
+ container for security (action itself handles sensitive data).
40
+ Inputs: custom-patterns (file path to regex list), entropy-threshold
41
+ Outputs: secrets-found-count, findings-path
42
+ Requirements: Must NOT log the actual secret values, must annotate
43
+ the PR with findings location
44
+
45
+ Task: Build all 3 Docker actions. For each, write: the Dockerfile
46
+ (multi-stage for size optimization), the entrypoint script, the
47
+ action.yml metadata, the test workflow (how to test a Docker action),
48
+ and the CI/CD for the action itself (building, testing, and publishing
49
+ the action). Include: the Docker caching strategy for action builds,
50
+ the versioning approach, and the security considerations for Docker
51
+ actions that handle sensitive data.
52
+
53
+ assertions:
54
+ - type: llm_judge
55
+ criteria: "Dockerfiles are well-designed — uses multi-stage builds to minimize image size, includes all required tools, entrypoint scripts handle inputs from environment variables correctly, and the action.yml files have complete metadata with all inputs/outputs"
56
+ weight: 0.35
57
+ description: "Well-designed Docker actions"
58
+ - type: llm_judge
59
+ criteria: "Testing strategy is practical — includes unit tests for the scripts, integration tests using a test workflow (workflow_dispatch or push to test branch), and explains how to test Docker actions locally before publishing"
60
+ weight: 0.35
61
+ description: "Practical testing strategy"
62
+ - type: llm_judge
63
+ criteria: "Security considerations are addressed — the secret-detector doesn't log secrets, Docker actions run in isolation, the compliance-scanner SARIF output integrates with GitHub Security tab, and the versioning approach uses SHA-pinned tags"
64
+ weight: 0.30
65
+ description: "Security considerations addressed"