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.
- package/courses/GENERATION_LOG.md +27 -0
- package/courses/api-error-handling/course.yaml +16 -0
- package/courses/api-error-handling/scenarios/level-1/error-response-format.yaml +131 -0
- package/courses/api-error-handling/scenarios/level-1/http-status-codes-basics.yaml +90 -0
- package/courses/api-error-handling/scenarios/level-1/rate-limiting-basics.yaml +135 -0
- package/courses/api-error-handling/scenarios/level-1/request-validation-errors.yaml +208 -0
- package/courses/api-error-handling/scenarios/level-2/circuit-breaker-pattern.yaml +189 -0
- package/courses/api-error-handling/scenarios/level-2/idempotency-retry-logic.yaml +159 -0
- package/courses/api-error-handling/scenarios/level-2/rfc-7807-problem-details.yaml +178 -0
- package/courses/api-error-handling/scenarios/level-2/webhook-error-handling.yaml +211 -0
- package/courses/api-error-handling/scenarios/level-3/distributed-tracing-errors.yaml +275 -0
- package/courses/github-actions-cicd/course.yaml +10 -0
- package/courses/github-actions-cicd/scenarios/level-1/actions-and-runners.yaml +58 -0
- package/courses/github-actions-cicd/scenarios/level-1/basic-workflow-syntax.yaml +52 -0
- package/courses/github-actions-cicd/scenarios/level-1/branch-protection-checks.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-1/environment-variables-secrets.yaml +65 -0
- package/courses/github-actions-cicd/scenarios/level-1/first-cicd-shift.yaml +62 -0
- package/courses/github-actions-cicd/scenarios/level-1/job-dependencies-outputs.yaml +62 -0
- package/courses/github-actions-cicd/scenarios/level-1/simple-ci-pipeline.yaml +57 -0
- package/courses/github-actions-cicd/scenarios/level-1/workflow-debugging.yaml +90 -0
- package/courses/github-actions-cicd/scenarios/level-1/workflow-status-notifications.yaml +59 -0
- package/courses/github-actions-cicd/scenarios/level-1/workflow-triggers.yaml +56 -0
- package/courses/github-actions-cicd/scenarios/level-2/concurrency-control.yaml +58 -0
- package/courses/github-actions-cicd/scenarios/level-2/conditional-execution.yaml +60 -0
- package/courses/github-actions-cicd/scenarios/level-2/custom-actions-development.yaml +55 -0
- package/courses/github-actions-cicd/scenarios/level-2/dependency-caching.yaml +58 -0
- package/courses/github-actions-cicd/scenarios/level-2/deployment-workflows.yaml +61 -0
- package/courses/github-actions-cicd/scenarios/level-2/github-packages-publishing.yaml +59 -0
- package/courses/github-actions-cicd/scenarios/level-2/intermediate-cicd-shift.yaml +68 -0
- package/courses/github-actions-cicd/scenarios/level-2/matrix-builds.yaml +59 -0
- package/courses/github-actions-cicd/scenarios/level-2/reusable-workflows.yaml +61 -0
- package/courses/github-actions-cicd/scenarios/level-2/workflow-cost-optimization.yaml +61 -0
- package/courses/github-actions-cicd/scenarios/level-3/advanced-cicd-shift.yaml +64 -0
- package/courses/github-actions-cicd/scenarios/level-3/compliance-automation.yaml +68 -0
- package/courses/github-actions-cicd/scenarios/level-3/docker-action-development.yaml +65 -0
- package/courses/github-actions-cicd/scenarios/level-3/github-environments.yaml +65 -0
- package/courses/github-actions-cicd/scenarios/level-3/monorepo-ci.yaml +68 -0
- package/courses/github-actions-cicd/scenarios/level-3/oidc-cloud-deployments.yaml +55 -0
- package/courses/github-actions-cicd/scenarios/level-3/release-automation.yaml +61 -0
- package/courses/github-actions-cicd/scenarios/level-3/security-hardening.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-3/self-hosted-runners.yaml +60 -0
- package/courses/github-actions-cicd/scenarios/level-3/workflow-optimization.yaml +59 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-data-architecture.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-economics-roi.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-executive-communication.yaml +58 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-incident-response.yaml +60 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-org-design.yaml +59 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-platform-architecture.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-training-program.yaml +65 -0
- package/courses/github-actions-cicd/scenarios/level-4/cicd-vendor-evaluation.yaml +59 -0
- package/courses/github-actions-cicd/scenarios/level-4/enterprise-cicd-governance.yaml +55 -0
- package/courses/github-actions-cicd/scenarios/level-4/expert-cicd-shift.yaml +60 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-ai-future.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-behavioral-science.yaml +70 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-board-strategy.yaml +56 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-consulting-engagement.yaml +61 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-industry-benchmarks.yaml +63 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-ma-integration.yaml +73 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-product-development.yaml +68 -0
- package/courses/github-actions-cicd/scenarios/level-5/cicd-regulatory-landscape.yaml +72 -0
- package/courses/github-actions-cicd/scenarios/level-5/comprehensive-cicd-system.yaml +66 -0
- package/courses/github-actions-cicd/scenarios/level-5/master-cicd-shift.yaml +76 -0
- package/courses/github-pr-review/scenarios/level-2/api-change-review.yaml +82 -0
- package/courses/github-pr-review/scenarios/level-2/automated-review-tooling.yaml +53 -0
- package/courses/github-pr-review/scenarios/level-2/cross-team-review.yaml +61 -0
- package/courses/github-pr-review/scenarios/level-2/intermediate-review-shift.yaml +66 -0
- package/courses/github-pr-review/scenarios/level-2/performance-review-patterns.yaml +99 -0
- package/courses/github-pr-review/scenarios/level-2/review-disagreement-resolution.yaml +64 -0
- package/courses/github-pr-review/scenarios/level-2/review-metrics-analysis.yaml +63 -0
- package/courses/github-pr-review/scenarios/level-2/review-turnaround-sla.yaml +54 -0
- package/courses/github-pr-review/scenarios/level-2/stacked-pr-review.yaml +65 -0
- package/courses/github-pr-review/scenarios/level-3/advanced-review-shift.yaml +65 -0
- package/courses/github-pr-review/scenarios/level-3/ai-powered-review.yaml +58 -0
- package/courses/github-pr-review/scenarios/level-3/compliance-review-process.yaml +64 -0
- package/courses/github-pr-review/scenarios/level-3/cross-functional-review.yaml +60 -0
- package/courses/github-pr-review/scenarios/level-3/incident-driven-review.yaml +63 -0
- package/courses/github-pr-review/scenarios/level-3/large-scale-review-operations.yaml +55 -0
- package/courses/github-pr-review/scenarios/level-3/monorepo-review-process.yaml +68 -0
- package/courses/github-pr-review/scenarios/level-3/review-automation-platform.yaml +61 -0
- package/courses/github-pr-review/scenarios/level-3/review-culture-design.yaml +62 -0
- package/courses/github-pr-review/scenarios/level-3/review-data-pipeline.yaml +62 -0
- package/courses/github-pr-review/scenarios/level-4/enterprise-review-operations.yaml +61 -0
- package/courses/github-pr-review/scenarios/level-4/expert-review-shift.yaml +62 -0
- package/courses/github-pr-review/scenarios/level-4/review-data-architecture.yaml +69 -0
- package/courses/github-pr-review/scenarios/level-4/review-economics-roi.yaml +63 -0
- package/courses/github-pr-review/scenarios/level-4/review-executive-communication.yaml +61 -0
- package/courses/github-pr-review/scenarios/level-4/review-incident-postmortem.yaml +69 -0
- package/courses/github-pr-review/scenarios/level-4/review-org-design.yaml +62 -0
- package/courses/github-pr-review/scenarios/level-4/review-platform-architecture.yaml +64 -0
- package/courses/github-pr-review/scenarios/level-4/review-training-program.yaml +66 -0
- package/courses/github-pr-review/scenarios/level-4/review-vendor-evaluation.yaml +76 -0
- package/courses/github-pr-review/scenarios/level-5/comprehensive-review-system.yaml +68 -0
- package/courses/github-pr-review/scenarios/level-5/master-review-shift.yaml +73 -0
- package/courses/github-pr-review/scenarios/level-5/review-ai-future.yaml +69 -0
- package/courses/github-pr-review/scenarios/level-5/review-behavioral-science.yaml +66 -0
- package/courses/github-pr-review/scenarios/level-5/review-board-strategy.yaml +62 -0
- package/courses/github-pr-review/scenarios/level-5/review-consulting-engagement.yaml +62 -0
- package/courses/github-pr-review/scenarios/level-5/review-devtools-product.yaml +71 -0
- package/courses/github-pr-review/scenarios/level-5/review-industry-benchmarks.yaml +64 -0
- package/courses/github-pr-review/scenarios/level-5/review-ma-integration.yaml +76 -0
- package/courses/github-pr-review/scenarios/level-5/review-regulatory-landscape.yaml +78 -0
- package/courses/postgresql-query-optimization/course.yaml +11 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/explain-analyze-basics.yaml +80 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/first-optimization-shift.yaml +77 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/index-fundamentals.yaml +76 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/join-basics.yaml +73 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/n-plus-one-queries.yaml +62 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/query-rewriting-basics.yaml +69 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/select-star-problems.yaml +69 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/slow-query-diagnosis.yaml +63 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/vacuum-and-statistics.yaml +62 -0
- package/courses/postgresql-query-optimization/scenarios/level-1/where-clause-optimization.yaml +74 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/autovacuum-tuning.yaml +76 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/composite-index-design.yaml +81 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/covering-indexes.yaml +74 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/cte-optimization.yaml +83 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/intermediate-optimization-shift.yaml +66 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/join-optimization.yaml +72 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/partial-and-expression-indexes.yaml +75 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/query-planner-settings.yaml +62 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/subquery-optimization.yaml +67 -0
- package/courses/postgresql-query-optimization/scenarios/level-2/window-function-optimization.yaml +63 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/advanced-optimization-shift.yaml +71 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/connection-pooling.yaml +60 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/full-text-search-optimization.yaml +66 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/jsonb-optimization.yaml +88 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/lock-contention-analysis.yaml +80 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/materialized-view-optimization.yaml +73 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/parallel-query-execution.yaml +74 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/partitioning-strategies.yaml +71 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/specialized-index-types.yaml +67 -0
- package/courses/postgresql-query-optimization/scenarios/level-3/write-optimization.yaml +65 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/data-architecture-analytics.yaml +64 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/database-executive-communication.yaml +64 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/database-migration-planning.yaml +57 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/enterprise-database-governance.yaml +52 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/expert-optimization-shift.yaml +73 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/high-availability-architecture.yaml +62 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/optimizer-internals.yaml +69 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/performance-sla-design.yaml +58 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/read-replica-optimization.yaml +62 -0
- package/courses/postgresql-query-optimization/scenarios/level-4/vendor-evaluation.yaml +73 -0
- package/courses/rest-api-error-handling/course.yaml +11 -0
- package/courses/rest-api-error-handling/scenarios/level-1/authentication-errors.yaml +71 -0
- package/courses/rest-api-error-handling/scenarios/level-1/content-negotiation-errors.yaml +63 -0
- package/courses/rest-api-error-handling/scenarios/level-1/error-logging-basics.yaml +63 -0
- package/courses/rest-api-error-handling/scenarios/level-1/error-response-format.yaml +58 -0
- package/courses/rest-api-error-handling/scenarios/level-1/first-error-handling-shift.yaml +67 -0
- package/courses/rest-api-error-handling/scenarios/level-1/http-status-codes.yaml +46 -0
- package/courses/rest-api-error-handling/scenarios/level-1/not-found-errors.yaml +52 -0
- package/courses/rest-api-error-handling/scenarios/level-1/rate-limiting-errors.yaml +56 -0
- package/courses/rest-api-error-handling/scenarios/level-1/request-validation-errors.yaml +59 -0
- package/courses/rest-api-error-handling/scenarios/level-1/server-error-handling.yaml +55 -0
- package/courses/rest-api-error-handling/scenarios/level-2/api-versioning-errors.yaml +66 -0
- package/courses/rest-api-error-handling/scenarios/level-2/batch-request-errors.yaml +61 -0
- package/courses/rest-api-error-handling/scenarios/level-2/circuit-breaker-pattern.yaml +52 -0
- package/courses/rest-api-error-handling/scenarios/level-2/error-code-taxonomy.yaml +62 -0
- package/courses/rest-api-error-handling/scenarios/level-2/error-monitoring-alerting.yaml +53 -0
- package/courses/rest-api-error-handling/scenarios/level-2/intermediate-error-shift.yaml +69 -0
- package/courses/rest-api-error-handling/scenarios/level-2/pagination-errors.yaml +66 -0
- package/courses/rest-api-error-handling/scenarios/level-2/retry-and-idempotency.yaml +60 -0
- package/courses/rest-api-error-handling/scenarios/level-2/rfc7807-problem-details.yaml +60 -0
- package/courses/rest-api-error-handling/scenarios/level-2/webhook-error-handling.yaml +55 -0
- package/courses/rest-api-error-handling/scenarios/level-3/advanced-error-shift.yaml +72 -0
- package/courses/rest-api-error-handling/scenarios/level-3/api-gateway-errors.yaml +71 -0
- package/courses/rest-api-error-handling/scenarios/level-3/async-api-errors.yaml +67 -0
- package/courses/rest-api-error-handling/scenarios/level-3/caching-error-scenarios.yaml +65 -0
- package/courses/rest-api-error-handling/scenarios/level-3/chaos-engineering-apis.yaml +62 -0
- package/courses/rest-api-error-handling/scenarios/level-3/database-error-handling.yaml +79 -0
- package/courses/rest-api-error-handling/scenarios/level-3/distributed-error-propagation.yaml +63 -0
- package/courses/rest-api-error-handling/scenarios/level-3/error-budgets-sre.yaml +61 -0
- package/courses/rest-api-error-handling/scenarios/level-3/error-correlation.yaml +58 -0
- package/courses/rest-api-error-handling/scenarios/level-3/graphql-vs-rest-errors.yaml +73 -0
- package/courses/rest-api-error-handling/scenarios/level-4/compliance-error-handling.yaml +65 -0
- package/courses/rest-api-error-handling/scenarios/level-4/enterprise-error-governance.yaml +62 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-analytics-platform.yaml +65 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-cost-optimization.yaml +63 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-executive-communication.yaml +60 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-handling-architecture.yaml +67 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-org-design.yaml +68 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-sla-design.yaml +65 -0
- package/courses/rest-api-error-handling/scenarios/level-4/error-training-program.yaml +61 -0
- package/courses/rest-api-error-handling/scenarios/level-4/expert-error-shift.yaml +63 -0
- package/courses/rest-api-error-handling/scenarios/level-5/comprehensive-error-system.yaml +68 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-ai-future.yaml +75 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-behavioral-science.yaml +73 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-board-strategy.yaml +60 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-consulting-engagement.yaml +58 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-industry-benchmarks.yaml +72 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-ma-integration.yaml +68 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-product-development.yaml +66 -0
- package/courses/rest-api-error-handling/scenarios/level-5/error-regulatory-landscape.yaml +80 -0
- package/courses/rest-api-error-handling/scenarios/level-5/master-error-shift.yaml +73 -0
- package/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +6 -5
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +4 -0
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +6 -18
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/train.d.ts.map +1 -1
- package/dist/cli/commands/train.js +18 -18
- package/dist/cli/commands/train.js.map +1 -1
- package/dist/cli/index.js +93 -55
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/run-demo.js +2 -1
- package/dist/cli/run-demo.js.map +1 -1
- package/dist/cli/setup.d.ts +18 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +154 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/engine/agent-bridge.d.ts +5 -2
- package/dist/engine/agent-bridge.d.ts.map +1 -1
- package/dist/engine/agent-bridge.js +36 -9
- package/dist/engine/agent-bridge.js.map +1 -1
- package/dist/engine/loader.d.ts +21 -0
- package/dist/engine/loader.d.ts.map +1 -1
- package/dist/engine/loader.js +54 -1
- package/dist/engine/loader.js.map +1 -1
- package/dist/engine/training-loop.d.ts.map +1 -1
- package/dist/engine/training-loop.js +1 -0
- package/dist/engine/training-loop.js.map +1 -1
- package/dist/engine/training.d.ts.map +1 -1
- package/dist/engine/training.js +1 -0
- package/dist/engine/training.js.map +1 -1
- package/dist/generator/skill-generator.d.ts +1 -1
- package/dist/generator/skill-generator.d.ts.map +1 -1
- package/dist/generator/skill-generator.js +21 -2
- package/dist/generator/skill-generator.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +11 -26
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session-manager.d.ts +3 -1
- package/dist/mcp/session-manager.d.ts.map +1 -1
- package/dist/mcp/session-manager.js +44 -22
- package/dist/mcp/session-manager.js.map +1 -1
- package/dist/types/schemas.d.ts +38 -13
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/schemas.js +9 -5
- package/dist/types/schemas.js.map +1 -1
- 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"
|