dojo.md 0.1.0 → 0.2.1
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 +72 -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/aws-lambda-debugging/course.yaml +11 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/api-gateway-integration.yaml +71 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/cloudwatch-logs-basics.yaml +64 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/cold-start-basics.yaml +70 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/environment-variable-issues.yaml +72 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/first-debugging-shift.yaml +73 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/handler-import-errors.yaml +71 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/iam-permission-errors.yaml +68 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/invocation-errors.yaml +72 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/lambda-timeout-errors.yaml +65 -0
- package/courses/aws-lambda-debugging/scenarios/level-1/memory-and-oom.yaml +70 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/async-invocation-failures.yaml +72 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/cold-start-optimization.yaml +76 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/dynamodb-streams-debugging.yaml +70 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/intermediate-debugging-shift.yaml +71 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/lambda-concurrency-management.yaml +70 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/lambda-layers-debugging.yaml +76 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/sam-local-debugging.yaml +74 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/sqs-event-source.yaml +72 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/vpc-networking-issues.yaml +71 -0
- package/courses/aws-lambda-debugging/scenarios/level-2/xray-tracing.yaml +62 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/advanced-debugging-shift.yaml +72 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/container-image-lambda.yaml +79 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/cross-account-invocation.yaml +72 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/eventbridge-patterns.yaml +79 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/iac-deployment-debugging.yaml +68 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/kinesis-stream-processing.yaml +64 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/lambda-at-edge.yaml +64 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/lambda-extensions-debugging.yaml +67 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/powertools-observability.yaml +79 -0
- package/courses/aws-lambda-debugging/scenarios/level-3/step-functions-debugging.yaml +80 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/cost-optimization-strategy.yaml +67 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/expert-debugging-shift.yaml +62 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/incident-management-serverless.yaml +61 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/multi-region-serverless.yaml +67 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/observability-platform-design.yaml +71 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/serverless-architecture-design.yaml +64 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/serverless-data-architecture.yaml +66 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/serverless-migration-strategy.yaml +65 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/serverless-security-design.yaml +60 -0
- package/courses/aws-lambda-debugging/scenarios/level-4/serverless-testing-strategy.yaml +62 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/board-serverless-strategy.yaml +63 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/consulting-serverless-adoption.yaml +57 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/industry-serverless-patterns.yaml +62 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/ma-serverless-integration.yaml +75 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/master-debugging-shift.yaml +61 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/organizational-serverless-transformation.yaml +65 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/regulatory-serverless.yaml +61 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/serverless-economics.yaml +65 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/serverless-future-technology.yaml +66 -0
- package/courses/aws-lambda-debugging/scenarios/level-5/serverless-platform-design.yaml +71 -0
- package/courses/docker-container-debugging/course.yaml +11 -0
- package/courses/docker-container-debugging/scenarios/level-1/container-exit-codes.yaml +59 -0
- package/courses/docker-container-debugging/scenarios/level-1/container-networking-basics.yaml +69 -0
- package/courses/docker-container-debugging/scenarios/level-1/docker-logs-debugging.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-1/dockerfile-build-failures.yaml +71 -0
- package/courses/docker-container-debugging/scenarios/level-1/environment-variable-issues.yaml +74 -0
- package/courses/docker-container-debugging/scenarios/level-1/first-debugging-shift.yaml +70 -0
- package/courses/docker-container-debugging/scenarios/level-1/image-pull-failures.yaml +68 -0
- package/courses/docker-container-debugging/scenarios/level-1/port-mapping-issues.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-1/resource-limits-oom.yaml +70 -0
- package/courses/docker-container-debugging/scenarios/level-1/volume-mount-problems.yaml +66 -0
- package/courses/docker-container-debugging/scenarios/level-2/container-health-checks.yaml +73 -0
- package/courses/docker-container-debugging/scenarios/level-2/docker-compose-debugging.yaml +66 -0
- package/courses/docker-container-debugging/scenarios/level-2/docker-exec-debugging.yaml +71 -0
- package/courses/docker-container-debugging/scenarios/level-2/image-layer-optimization.yaml +81 -0
- package/courses/docker-container-debugging/scenarios/level-2/intermediate-debugging-shift.yaml +73 -0
- package/courses/docker-container-debugging/scenarios/level-2/logging-and-log-rotation.yaml +76 -0
- package/courses/docker-container-debugging/scenarios/level-2/multi-stage-build-debugging.yaml +76 -0
- package/courses/docker-container-debugging/scenarios/level-2/network-debugging-tools.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-2/pid1-signal-handling.yaml +71 -0
- package/courses/docker-container-debugging/scenarios/level-2/security-scanning-basics.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-3/advanced-debugging-shift.yaml +77 -0
- package/courses/docker-container-debugging/scenarios/level-3/buildkit-optimization.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-3/container-filesystem-debugging.yaml +70 -0
- package/courses/docker-container-debugging/scenarios/level-3/container-security-hardening.yaml +74 -0
- package/courses/docker-container-debugging/scenarios/level-3/disk-space-management.yaml +74 -0
- package/courses/docker-container-debugging/scenarios/level-3/docker-api-automation.yaml +72 -0
- package/courses/docker-container-debugging/scenarios/level-3/docker-daemon-issues.yaml +73 -0
- package/courses/docker-container-debugging/scenarios/level-3/docker-in-docker-ci.yaml +69 -0
- package/courses/docker-container-debugging/scenarios/level-3/overlay-network-debugging.yaml +70 -0
- package/courses/docker-container-debugging/scenarios/level-3/production-container-ops.yaml +71 -0
- package/courses/docker-container-debugging/scenarios/level-4/cicd-pipeline-design.yaml +66 -0
- package/courses/docker-container-debugging/scenarios/level-4/container-monitoring-observability.yaml +63 -0
- package/courses/docker-container-debugging/scenarios/level-4/container-orchestration-strategy.yaml +62 -0
- package/courses/docker-container-debugging/scenarios/level-4/container-performance-engineering.yaml +64 -0
- package/courses/docker-container-debugging/scenarios/level-4/container-security-architecture.yaml +66 -0
- package/courses/docker-container-debugging/scenarios/level-4/enterprise-image-management.yaml +58 -0
- package/courses/docker-container-debugging/scenarios/level-4/expert-debugging-shift.yaml +63 -0
- package/courses/docker-container-debugging/scenarios/level-4/incident-response-containers.yaml +70 -0
- package/courses/docker-container-debugging/scenarios/level-4/multi-environment-management.yaml +65 -0
- package/courses/docker-container-debugging/scenarios/level-4/stateful-service-containers.yaml +65 -0
- package/courses/docker-container-debugging/scenarios/level-5/board-infrastructure-strategy.yaml +58 -0
- package/courses/docker-container-debugging/scenarios/level-5/consulting-container-strategy.yaml +61 -0
- package/courses/docker-container-debugging/scenarios/level-5/container-platform-architecture.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-5/container-platform-economics.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-5/container-technology-evolution.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-5/disaster-recovery-containers.yaml +66 -0
- package/courses/docker-container-debugging/scenarios/level-5/industry-container-patterns.yaml +71 -0
- package/courses/docker-container-debugging/scenarios/level-5/master-debugging-shift.yaml +62 -0
- package/courses/docker-container-debugging/scenarios/level-5/organizational-transformation.yaml +67 -0
- package/courses/docker-container-debugging/scenarios/level-5/regulatory-compliance-containers.yaml +61 -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/kubernetes-deployment-troubleshooting/course.yaml +12 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/configmap-secret-issues.yaml +69 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/crashloopbackoff.yaml +68 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/deployment-rollout.yaml +56 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/first-troubleshooting-shift.yaml +65 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/health-probe-failures.yaml +70 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/imagepullbackoff.yaml +57 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/kubectl-debugging-basics.yaml +56 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/oomkilled.yaml +70 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/pending-pods.yaml +68 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-1/service-not-reachable.yaml +66 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/dns-resolution-failures.yaml +63 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/helm-deployment-failures.yaml +63 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/hpa-scaling-issues.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/ingress-routing-issues.yaml +63 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/init-container-failures.yaml +63 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/intermediate-troubleshooting-shift.yaml +66 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/network-policy-blocking.yaml +67 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/persistent-volume-issues.yaml +69 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/rbac-permission-denied.yaml +57 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-2/resource-quota-limits.yaml +64 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/advanced-troubleshooting-shift.yaml +69 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/cluster-upgrade-failures.yaml +71 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/gitops-drift-detection.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/job-cronjob-failures.yaml +67 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/monitoring-alerting-gaps.yaml +64 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/multi-container-debugging.yaml +68 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/node-pressure-evictions.yaml +70 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/pod-disruption-budgets.yaml +59 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/service-mesh-debugging.yaml +64 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-3/statefulset-troubleshooting.yaml +69 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/capacity-planning.yaml +65 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/cost-optimization.yaml +57 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/disaster-recovery-design.yaml +56 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/executive-communication.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/expert-troubleshooting-shift.yaml +65 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/incident-management-process.yaml +59 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/multi-cluster-operations.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/multi-tenancy-design.yaml +55 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/platform-engineering.yaml +59 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-4/security-hardening.yaml +58 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/behavioral-science.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/board-strategy.yaml +61 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/cloud-native-future.yaml +65 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/comprehensive-platform.yaml +57 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/consulting-engagement.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/industry-benchmarks.yaml +58 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/ma-integration.yaml +62 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/master-troubleshooting-shift.yaml +73 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/product-development.yaml +65 -0
- package/courses/kubernetes-deployment-troubleshooting/scenarios/level-5/regulatory-compliance.yaml +76 -0
- package/courses/mysql-query-optimization/course.yaml +11 -0
- package/courses/mysql-query-optimization/scenarios/level-1/buffer-pool-basics.yaml +65 -0
- package/courses/mysql-query-optimization/scenarios/level-1/explain-basics.yaml +66 -0
- package/courses/mysql-query-optimization/scenarios/level-1/first-optimization-shift.yaml +78 -0
- package/courses/mysql-query-optimization/scenarios/level-1/innodb-index-fundamentals.yaml +68 -0
- package/courses/mysql-query-optimization/scenarios/level-1/join-basics.yaml +66 -0
- package/courses/mysql-query-optimization/scenarios/level-1/n-plus-one-queries.yaml +67 -0
- package/courses/mysql-query-optimization/scenarios/level-1/query-rewriting-basics.yaml +66 -0
- package/courses/mysql-query-optimization/scenarios/level-1/select-star-problems.yaml +68 -0
- package/courses/mysql-query-optimization/scenarios/level-1/slow-query-diagnosis.yaml +65 -0
- package/courses/mysql-query-optimization/scenarios/level-1/where-clause-optimization.yaml +65 -0
- package/courses/mysql-query-optimization/scenarios/level-2/buffer-pool-tuning.yaml +64 -0
- package/courses/mysql-query-optimization/scenarios/level-2/composite-index-design.yaml +71 -0
- package/courses/mysql-query-optimization/scenarios/level-2/covering-and-invisible-indexes.yaml +69 -0
- package/courses/mysql-query-optimization/scenarios/level-2/cte-and-window-functions.yaml +78 -0
- package/courses/mysql-query-optimization/scenarios/level-2/intermediate-optimization-shift.yaml +68 -0
- package/courses/mysql-query-optimization/scenarios/level-2/join-optimization.yaml +67 -0
- package/courses/mysql-query-optimization/scenarios/level-2/performance-schema-analysis.yaml +69 -0
- package/courses/mysql-query-optimization/scenarios/level-2/query-optimizer-hints.yaml +74 -0
- package/courses/mysql-query-optimization/scenarios/level-2/subquery-optimization.yaml +70 -0
- package/courses/mysql-query-optimization/scenarios/level-2/write-optimization.yaml +63 -0
- package/courses/mysql-query-optimization/scenarios/level-3/advanced-optimization-shift.yaml +71 -0
- package/courses/mysql-query-optimization/scenarios/level-3/connection-management.yaml +67 -0
- package/courses/mysql-query-optimization/scenarios/level-3/full-text-search.yaml +77 -0
- package/courses/mysql-query-optimization/scenarios/level-3/json-optimization.yaml +87 -0
- package/courses/mysql-query-optimization/scenarios/level-3/lock-contention-analysis.yaml +68 -0
- package/courses/mysql-query-optimization/scenarios/level-3/monitoring-alerting.yaml +63 -0
- package/courses/mysql-query-optimization/scenarios/level-3/online-schema-changes.yaml +79 -0
- package/courses/mysql-query-optimization/scenarios/level-3/partitioning-strategies.yaml +83 -0
- package/courses/mysql-query-optimization/scenarios/level-3/query-profiling-deep-dive.yaml +84 -0
- package/courses/mysql-query-optimization/scenarios/level-3/replication-optimization.yaml +66 -0
- package/courses/mysql-query-optimization/scenarios/level-4/aurora-vs-rds-evaluation.yaml +61 -0
- package/courses/mysql-query-optimization/scenarios/level-4/data-architecture.yaml +62 -0
- package/courses/mysql-query-optimization/scenarios/level-4/database-migration-planning.yaml +59 -0
- package/courses/mysql-query-optimization/scenarios/level-4/enterprise-governance.yaml +50 -0
- package/courses/mysql-query-optimization/scenarios/level-4/executive-communication.yaml +54 -0
- package/courses/mysql-query-optimization/scenarios/level-4/expert-optimization-shift.yaml +67 -0
- package/courses/mysql-query-optimization/scenarios/level-4/high-availability-architecture.yaml +60 -0
- package/courses/mysql-query-optimization/scenarios/level-4/optimizer-internals.yaml +62 -0
- package/courses/mysql-query-optimization/scenarios/level-4/performance-sla-design.yaml +52 -0
- package/courses/mysql-query-optimization/scenarios/level-4/read-replica-scaling.yaml +51 -0
- package/courses/mysql-query-optimization/scenarios/level-5/ai-database-future.yaml +45 -0
- package/courses/mysql-query-optimization/scenarios/level-5/behavioral-science.yaml +44 -0
- package/courses/mysql-query-optimization/scenarios/level-5/benchmark-design.yaml +47 -0
- package/courses/mysql-query-optimization/scenarios/level-5/board-strategy.yaml +48 -0
- package/courses/mysql-query-optimization/scenarios/level-5/comprehensive-platform.yaml +49 -0
- package/courses/mysql-query-optimization/scenarios/level-5/consulting-engagement.yaml +52 -0
- package/courses/mysql-query-optimization/scenarios/level-5/ma-database-integration.yaml +47 -0
- package/courses/mysql-query-optimization/scenarios/level-5/master-optimization-shift.yaml +56 -0
- package/courses/mysql-query-optimization/scenarios/level-5/product-development.yaml +48 -0
- package/courses/mysql-query-optimization/scenarios/level-5/regulatory-compliance.yaml +48 -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/postgresql-query-optimization/scenarios/level-5/comprehensive-database-system.yaml +70 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-ai-future.yaml +81 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-behavioral-science.yaml +63 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-board-strategy.yaml +77 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-consulting-engagement.yaml +61 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-industry-benchmarks.yaml +64 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-ma-integration.yaml +71 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-product-development.yaml +72 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/database-regulatory-landscape.yaml +76 -0
- package/courses/postgresql-query-optimization/scenarios/level-5/master-optimization-shift.yaml +66 -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/courses/terraform-infrastructure-setup/course.yaml +11 -0
- package/courses/terraform-infrastructure-setup/scenarios/level-1/terraform-init-errors.yaml +72 -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 +9 -4
- package/dist/mcp/session-manager.d.ts.map +1 -1
- package/dist/mcp/session-manager.js +65 -28
- 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,90 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
id: workflow-debugging
|
|
3
|
+
level: 1
|
|
4
|
+
course: github-actions-cicd
|
|
5
|
+
type: output
|
|
6
|
+
description: "Debug GitHub Actions workflows — diagnose and fix common workflow failures, read logs effectively, and use debug mode"
|
|
7
|
+
tags: [github, actions, debugging, troubleshooting, logs, basics]
|
|
8
|
+
|
|
9
|
+
state: {}
|
|
10
|
+
|
|
11
|
+
trigger: |
|
|
12
|
+
You're helping a junior developer debug their first GitHub Actions
|
|
13
|
+
workflow. They've hit 5 different errors and can't figure out what's
|
|
14
|
+
wrong. For each error, diagnose the problem and provide the fix.
|
|
15
|
+
|
|
16
|
+
Error 1 — Workflow not triggering:
|
|
17
|
+
"I pushed to my feature branch but the workflow didn't run at all.
|
|
18
|
+
No entry in the Actions tab."
|
|
19
|
+
Their trigger config:
|
|
20
|
+
```yaml
|
|
21
|
+
on:
|
|
22
|
+
push:
|
|
23
|
+
branches: [main]
|
|
24
|
+
pull_request:
|
|
25
|
+
branches: [main]
|
|
26
|
+
```
|
|
27
|
+
They pushed to the branch 'feature/login' without opening a PR.
|
|
28
|
+
|
|
29
|
+
Error 2 — Permission denied:
|
|
30
|
+
```
|
|
31
|
+
Error: HttpError: Resource not accessible by integration
|
|
32
|
+
```
|
|
33
|
+
Their workflow tries to comment on a PR using the GITHUB_TOKEN.
|
|
34
|
+
The workflow is triggered by pull_request from a fork.
|
|
35
|
+
|
|
36
|
+
Error 3 — Action not found:
|
|
37
|
+
```
|
|
38
|
+
Error: Can't find 'action.yml', 'action.yaml' or 'Dockerfile'
|
|
39
|
+
under '/home/runner/work/_actions/actions/setup-node/4'
|
|
40
|
+
```
|
|
41
|
+
Their step: `uses: actions/setup-node@4` (missing the 'v' prefix)
|
|
42
|
+
|
|
43
|
+
Error 4 — Cache miss every time:
|
|
44
|
+
"My workflow takes 8 minutes because npm install runs fresh every
|
|
45
|
+
time. I added caching but it never hits."
|
|
46
|
+
```yaml
|
|
47
|
+
- uses: actions/cache@v4
|
|
48
|
+
with:
|
|
49
|
+
path: node_modules
|
|
50
|
+
key: npm-${{ hashFiles('package.json') }}
|
|
51
|
+
```
|
|
52
|
+
The issue: they're hashing package.json not package-lock.json.
|
|
53
|
+
|
|
54
|
+
Error 5 — Job output not available:
|
|
55
|
+
"My second job can't read the output from my first job. It's always
|
|
56
|
+
empty."
|
|
57
|
+
```yaml
|
|
58
|
+
jobs:
|
|
59
|
+
build:
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
steps:
|
|
62
|
+
- run: echo "version=1.2.3" >> $GITHUB_OUTPUT
|
|
63
|
+
deploy:
|
|
64
|
+
needs: build
|
|
65
|
+
runs-on: ubuntu-latest
|
|
66
|
+
steps:
|
|
67
|
+
- run: echo "Deploying ${{ needs.build.outputs.version }}"
|
|
68
|
+
```
|
|
69
|
+
They forgot to declare outputs at the job level.
|
|
70
|
+
|
|
71
|
+
Task: For each error, write: the diagnosis (what went wrong and why),
|
|
72
|
+
the fix (corrected YAML or configuration), the prevention strategy
|
|
73
|
+
(how to avoid this in the future), and the debugging technique (how
|
|
74
|
+
to find this type of error faster). Include a general GitHub Actions
|
|
75
|
+
debugging guide covering: enabling debug logging, reading workflow
|
|
76
|
+
run logs effectively, and the act tool for local testing.
|
|
77
|
+
|
|
78
|
+
assertions:
|
|
79
|
+
- type: llm_judge
|
|
80
|
+
criteria: "All 5 errors are correctly diagnosed — trigger scope for Error 1, fork PR permissions for Error 2, version tag format for Error 3, cache key using wrong file for Error 4, and missing job-level outputs declaration for Error 5"
|
|
81
|
+
weight: 0.35
|
|
82
|
+
description: "Correct error diagnoses"
|
|
83
|
+
- type: llm_judge
|
|
84
|
+
criteria: "Fixes are specific and correct — each fix shows the corrected YAML snippet, and the fixes address the root cause (not just the symptom). Error 2's fix addresses the fundamental fork permission model, not just a workaround"
|
|
85
|
+
weight: 0.35
|
|
86
|
+
description: "Specific correct fixes"
|
|
87
|
+
- type: llm_judge
|
|
88
|
+
criteria: "Debugging guide is practical — covers ACTIONS_RUNNER_DEBUG and ACTIONS_STEP_DEBUG secrets, how to navigate workflow run logs in the GitHub UI, the 'act' tool for local workflow testing, and at least 3 prevention strategies (linting, local testing, PR templates)"
|
|
89
|
+
weight: 0.30
|
|
90
|
+
description: "Practical debugging guide"
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
id: workflow-status-notifications
|
|
3
|
+
level: 1
|
|
4
|
+
course: github-actions-cicd
|
|
5
|
+
type: output
|
|
6
|
+
description: "Configure workflow notifications — set up status badges, Slack alerts, and PR comments to communicate CI results effectively"
|
|
7
|
+
tags: [github, actions, notifications, badges, Slack, PR-comments, basics]
|
|
8
|
+
|
|
9
|
+
state: {}
|
|
10
|
+
|
|
11
|
+
trigger: |
|
|
12
|
+
Your team wants better visibility into CI status. Currently, the
|
|
13
|
+
only way to know if CI passed is to click into the Actions tab.
|
|
14
|
+
You need to set up 3 notification channels.
|
|
15
|
+
|
|
16
|
+
Channel 1 — README status badges:
|
|
17
|
+
- Add build status badge to README.md
|
|
18
|
+
- Show status for the main branch
|
|
19
|
+
- Include separate badges for: CI tests, deploy status, and
|
|
20
|
+
code coverage percentage
|
|
21
|
+
|
|
22
|
+
Channel 2 — Slack notifications:
|
|
23
|
+
- Send a message to #engineering-ci channel when:
|
|
24
|
+
* A deployment to production succeeds (green message)
|
|
25
|
+
* Any CI run on main fails (red message with link to logs)
|
|
26
|
+
- Do NOT notify on:
|
|
27
|
+
* Successful PR CI runs (too noisy)
|
|
28
|
+
* Cancelled workflows
|
|
29
|
+
- Include: commit message, author, branch, link to workflow run
|
|
30
|
+
|
|
31
|
+
Channel 3 — PR comments:
|
|
32
|
+
- Post a comment on the PR with:
|
|
33
|
+
* Test results summary (X passed, Y failed, Z skipped)
|
|
34
|
+
* Code coverage percentage (from coverage report)
|
|
35
|
+
* Build size comparison (current vs main)
|
|
36
|
+
* Link to full logs
|
|
37
|
+
- Update the existing comment instead of posting a new one each
|
|
38
|
+
time (avoid comment spam)
|
|
39
|
+
|
|
40
|
+
Task: Write the workflow additions for all 3 channels. Include: the
|
|
41
|
+
status badge markdown for the README, the Slack notification workflow
|
|
42
|
+
job (using a Slack webhook or action), the PR comment job (using
|
|
43
|
+
actions/github-script or similar), and the logic to update existing
|
|
44
|
+
comments instead of creating new ones. Explain the trade-offs of each
|
|
45
|
+
notification approach.
|
|
46
|
+
|
|
47
|
+
assertions:
|
|
48
|
+
- type: llm_judge
|
|
49
|
+
criteria: "Status badges are correct — uses the correct GitHub badge URL format (https://github.com/OWNER/REPO/actions/workflows/FILE/badge.svg?branch=main), includes multiple badges, and the markdown syntax is valid for README.md"
|
|
50
|
+
weight: 0.35
|
|
51
|
+
description: "Correct status badges"
|
|
52
|
+
- type: llm_judge
|
|
53
|
+
criteria: "Slack notification is properly conditional — only sends on main branch failures and production deploy successes, uses correct if: conditions to filter events, and the message includes all required context (commit, author, link)"
|
|
54
|
+
weight: 0.35
|
|
55
|
+
description: "Properly conditional Slack notification"
|
|
56
|
+
- type: llm_judge
|
|
57
|
+
criteria: "PR comment uses find-and-update pattern — searches for existing bot comment (by marker text or comment body pattern), updates if found or creates if not, includes test results and coverage, and the implementation uses GitHub API correctly"
|
|
58
|
+
weight: 0.30
|
|
59
|
+
description: "Smart PR comment updates"
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
id: workflow-triggers
|
|
3
|
+
level: 1
|
|
4
|
+
course: github-actions-cicd
|
|
5
|
+
type: output
|
|
6
|
+
description: "Configure workflow triggers — set up push, pull_request, schedule, workflow_dispatch, and release triggers with filters"
|
|
7
|
+
tags: [github, actions, triggers, events, schedule, workflow-dispatch, basics]
|
|
8
|
+
|
|
9
|
+
state: {}
|
|
10
|
+
|
|
11
|
+
trigger: |
|
|
12
|
+
You're configuring triggers for an e-commerce application's CI/CD
|
|
13
|
+
pipeline. The team needs 5 different workflow files, each with a
|
|
14
|
+
specific trigger configuration.
|
|
15
|
+
|
|
16
|
+
Workflow 1 — CI Tests (ci.yml):
|
|
17
|
+
- Run on every push to any branch
|
|
18
|
+
- Run on every pull request to the main branch
|
|
19
|
+
- Only run when source code changes (src/** or package.json), NOT
|
|
20
|
+
when only documentation (docs/**) or README changes
|
|
21
|
+
|
|
22
|
+
Workflow 2 — Nightly Cleanup (nightly.yml):
|
|
23
|
+
- Run every day at 2:00 AM UTC
|
|
24
|
+
- Also allow manual triggering for on-demand cleanup
|
|
25
|
+
|
|
26
|
+
Workflow 3 — Production Deploy (deploy.yml):
|
|
27
|
+
- Manual trigger only (workflow_dispatch)
|
|
28
|
+
- Accept an input parameter "environment" with options: staging, production
|
|
29
|
+
- Accept an input parameter "version" (required, string)
|
|
30
|
+
|
|
31
|
+
Workflow 4 — Release (release.yml):
|
|
32
|
+
- Trigger when a GitHub Release is published
|
|
33
|
+
- Should NOT trigger on draft releases or pre-releases
|
|
34
|
+
|
|
35
|
+
Workflow 5 — Dependency Update (deps.yml):
|
|
36
|
+
- Run every Monday at 9:00 AM UTC
|
|
37
|
+
- Also trigger when package-lock.json changes on push to main
|
|
38
|
+
|
|
39
|
+
Task: Write the complete 'on:' section for each workflow file. For
|
|
40
|
+
each, explain: when it will trigger, when it will NOT trigger, and
|
|
41
|
+
one common pitfall to avoid. Also explain the difference between
|
|
42
|
+
'paths' and 'paths-ignore' filters, and when to use each.
|
|
43
|
+
|
|
44
|
+
assertions:
|
|
45
|
+
- type: llm_judge
|
|
46
|
+
criteria: "All 5 trigger configurations are syntactically correct — push with branch and path filters, schedule with valid cron expressions (0 2 * * * for daily 2AM, 0 9 * * 1 for Monday 9AM), workflow_dispatch with typed inputs, release with types: [published]"
|
|
47
|
+
weight: 0.35
|
|
48
|
+
description: "Syntactically correct triggers"
|
|
49
|
+
- type: llm_judge
|
|
50
|
+
criteria: "Trigger behavior is accurately explained — each workflow's trigger and non-trigger conditions are correct, the paths/paths-ignore distinction is clear, and pitfalls are practical (e.g., schedule cron runs on default branch only, workflow_dispatch only works on default branch)"
|
|
51
|
+
weight: 0.35
|
|
52
|
+
description: "Accurate trigger behavior explanation"
|
|
53
|
+
- type: llm_judge
|
|
54
|
+
criteria: "Pitfalls and edge cases are noted — mentions that paths filters don't work with schedule triggers, that release published excludes drafts, that cron schedules can be delayed by GitHub load, and that workflow_dispatch inputs have no runtime validation by default"
|
|
55
|
+
weight: 0.30
|
|
56
|
+
description: "Practical pitfalls and edge cases"
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
id: concurrency-control
|
|
3
|
+
level: 2
|
|
4
|
+
course: github-actions-cicd
|
|
5
|
+
type: output
|
|
6
|
+
description: "Manage workflow concurrency — prevent duplicate runs, configure merge queues, and handle parallel deployments safely"
|
|
7
|
+
tags: [github, actions, concurrency, merge-queue, parallel, intermediate]
|
|
8
|
+
|
|
9
|
+
state: {}
|
|
10
|
+
|
|
11
|
+
trigger: |
|
|
12
|
+
Your team's CI/CD has several concurrency problems causing wasted
|
|
13
|
+
resources and deployment conflicts:
|
|
14
|
+
|
|
15
|
+
Problem 1 — Duplicate CI runs:
|
|
16
|
+
A developer pushes 3 commits in quick succession. Each push triggers
|
|
17
|
+
a separate CI run. The first 2 runs are wasted because only the
|
|
18
|
+
latest commit matters. This wastes 24 minutes of runner time per
|
|
19
|
+
occurrence, happening ~20 times per day.
|
|
20
|
+
|
|
21
|
+
Problem 2 — Deployment conflicts:
|
|
22
|
+
Two PRs merge to main within seconds of each other. Both trigger
|
|
23
|
+
deployment workflows. The deployments race — sometimes deployment B
|
|
24
|
+
starts before deployment A finishes, causing a partially deployed
|
|
25
|
+
state. Last week this caused a 30-minute outage.
|
|
26
|
+
|
|
27
|
+
Problem 3 — PR merge bottleneck:
|
|
28
|
+
With "require branch up to date with main" enabled, only one PR can
|
|
29
|
+
merge at a time. Each PR merge triggers CI again. With 15 PRs per
|
|
30
|
+
day, this creates a 2-hour queue. The team is considering GitHub's
|
|
31
|
+
merge queue feature.
|
|
32
|
+
|
|
33
|
+
Problem 4 — Resource contention:
|
|
34
|
+
Self-hosted runners (4 total) are overwhelmed during peak hours
|
|
35
|
+
(10AM-2PM). 12 workflows queue up for runners, and some time out
|
|
36
|
+
after 30 minutes waiting.
|
|
37
|
+
|
|
38
|
+
Task: Solve all 4 problems. For each, write: the root cause analysis,
|
|
39
|
+
the solution using GitHub Actions concurrency features (concurrency
|
|
40
|
+
groups, cancel-in-progress, merge queue), the workflow YAML changes,
|
|
41
|
+
and the trade-offs of each solution. Include: the concurrency group
|
|
42
|
+
naming strategy (how to scope groups by PR, branch, or workflow),
|
|
43
|
+
the merge queue configuration, and the runner capacity planning
|
|
44
|
+
recommendations.
|
|
45
|
+
|
|
46
|
+
assertions:
|
|
47
|
+
- type: llm_judge
|
|
48
|
+
criteria: "Concurrency groups are correctly configured — uses concurrency with group names scoped appropriately (e.g., ci-${{ github.ref }} for CI, deploy-production for deployments), cancel-in-progress: true for CI but false for deployments, and the naming strategy prevents accidental conflicts"
|
|
49
|
+
weight: 0.35
|
|
50
|
+
description: "Correct concurrency configuration"
|
|
51
|
+
- type: llm_judge
|
|
52
|
+
criteria: "All 4 problems are solved — duplicate runs cancelled with concurrency groups, deployments serialized with concurrency (no cancel), merge queue configured to batch PRs, and runner capacity recommendations address peak load (scaling, priority queues)"
|
|
53
|
+
weight: 0.35
|
|
54
|
+
description: "All problems solved"
|
|
55
|
+
- type: llm_judge
|
|
56
|
+
criteria: "Trade-offs are explained — notes that cancel-in-progress means intermediate results are lost, serialized deployments slow down when many PRs merge, merge queue adds complexity, and runner scaling has cost implications"
|
|
57
|
+
weight: 0.30
|
|
58
|
+
description: "Trade-offs explained"
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
id: conditional-execution
|
|
3
|
+
level: 2
|
|
4
|
+
course: github-actions-cicd
|
|
5
|
+
type: output
|
|
6
|
+
description: "Master conditional execution — use if expressions, status functions, and context variables to control when jobs and steps run"
|
|
7
|
+
tags: [github, actions, conditional, if-expressions, contexts, intermediate]
|
|
8
|
+
|
|
9
|
+
state: {}
|
|
10
|
+
|
|
11
|
+
trigger: |
|
|
12
|
+
You're building a sophisticated deployment workflow that must behave
|
|
13
|
+
differently based on various conditions. The workflow needs to handle
|
|
14
|
+
multiple deployment targets, branch-specific logic, and failure
|
|
15
|
+
recovery.
|
|
16
|
+
|
|
17
|
+
Scenarios to implement:
|
|
18
|
+
|
|
19
|
+
Scenario 1 — Branch-based deployment:
|
|
20
|
+
- Push to main → deploy to staging
|
|
21
|
+
- Push with tag v*.*.* → deploy to production
|
|
22
|
+
- Push to feature/* → deploy to preview environment
|
|
23
|
+
- Pull request → run tests only (no deployment)
|
|
24
|
+
|
|
25
|
+
Scenario 2 — Conditional step execution:
|
|
26
|
+
- Run database migrations only if migration files changed
|
|
27
|
+
- Send Slack notification only on failure
|
|
28
|
+
- Skip expensive E2E tests if the PR is labeled "skip-e2e"
|
|
29
|
+
- Run security scan only on PRs touching src/auth/** files
|
|
30
|
+
|
|
31
|
+
Scenario 3 — Context-based decisions:
|
|
32
|
+
- Use different AWS accounts based on environment (staging/production)
|
|
33
|
+
- Set different resource limits based on runner type
|
|
34
|
+
- Include debug logging only when triggered manually with debug=true
|
|
35
|
+
|
|
36
|
+
Scenario 4 — Error recovery:
|
|
37
|
+
- If deployment fails, automatically run rollback
|
|
38
|
+
- If rollback also fails, page the on-call engineer
|
|
39
|
+
- Always run cleanup steps regardless of failure
|
|
40
|
+
- Produce a deployment report with pass/fail status for each step
|
|
41
|
+
|
|
42
|
+
Task: Write the workflow YAML covering all 4 scenarios. For each
|
|
43
|
+
condition, explain: the expression syntax, the available context
|
|
44
|
+
variables (github.event_name, github.ref, contains(), startsWith()),
|
|
45
|
+
and the evaluation rules (when does a condition short-circuit). Include
|
|
46
|
+
a cheat sheet of the most useful conditional expressions.
|
|
47
|
+
|
|
48
|
+
assertions:
|
|
49
|
+
- type: llm_judge
|
|
50
|
+
criteria: "Conditional expressions are syntactically correct — uses github.ref, github.event_name, contains(), startsWith(), success(), failure(), always(), and the expressions handle all 4 scenarios correctly including tag matching for semver"
|
|
51
|
+
weight: 0.35
|
|
52
|
+
description: "Correct conditional expressions"
|
|
53
|
+
- type: llm_judge
|
|
54
|
+
criteria: "Error recovery pattern is sound — deployment failure triggers rollback step (if: failure()), rollback failure triggers paging, cleanup runs with if: always(), and the deployment report captures status from all steps using step outcomes"
|
|
55
|
+
weight: 0.35
|
|
56
|
+
description: "Sound error recovery pattern"
|
|
57
|
+
- type: llm_judge
|
|
58
|
+
criteria: "Cheat sheet is comprehensive and practical — covers the most common 10+ conditional patterns, explains boolean logic in expressions, notes that secrets context is not available in if: conditions, and clarifies the difference between job-level and step-level if:"
|
|
59
|
+
weight: 0.30
|
|
60
|
+
description: "Comprehensive conditional cheat sheet"
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
id: custom-actions-development
|
|
3
|
+
level: 2
|
|
4
|
+
course: github-actions-cicd
|
|
5
|
+
type: output
|
|
6
|
+
description: "Develop custom GitHub Actions — build JavaScript, Docker, and composite actions for team-specific automation needs"
|
|
7
|
+
tags: [github, actions, custom-actions, JavaScript, Docker, composite, intermediate]
|
|
8
|
+
|
|
9
|
+
state: {}
|
|
10
|
+
|
|
11
|
+
trigger: |
|
|
12
|
+
Your team has 3 automation needs that aren't covered by existing
|
|
13
|
+
marketplace actions. You need to build custom actions.
|
|
14
|
+
|
|
15
|
+
Action 1 — "deployment-notifier" (Composite action):
|
|
16
|
+
Purpose: Post a formatted deployment summary to Slack and update
|
|
17
|
+
a GitHub deployment status. Used in 8 repos.
|
|
18
|
+
Inputs: environment, version, status (success/failure), slack-webhook
|
|
19
|
+
Behavior: Posts Slack message with deployment details, creates GitHub
|
|
20
|
+
deployment status, and writes a summary to $GITHUB_STEP_SUMMARY
|
|
21
|
+
|
|
22
|
+
Action 2 — "pr-size-labeler" (JavaScript action):
|
|
23
|
+
Purpose: Automatically label PRs by size (XS, S, M, L, XL) based
|
|
24
|
+
on lines changed. Also warn if the PR exceeds 500 lines.
|
|
25
|
+
Inputs: github-token, size-thresholds (JSON: {XS: 10, S: 50, ...})
|
|
26
|
+
Behavior: Reads PR diff stats, applies label, posts warning comment
|
|
27
|
+
if over threshold
|
|
28
|
+
|
|
29
|
+
Action 3 — "security-context-check" (Docker action):
|
|
30
|
+
Purpose: Scan environment for leaked secrets, check that no
|
|
31
|
+
hardcoded credentials exist in the code, and verify .env files
|
|
32
|
+
aren't committed. Runs in an isolated Docker container for security.
|
|
33
|
+
Inputs: scan-paths, exclude-patterns, severity-threshold
|
|
34
|
+
Outputs: findings-count, report-path
|
|
35
|
+
|
|
36
|
+
Task: Build all 3 actions. For each, write: the action.yml metadata
|
|
37
|
+
file, the implementation (shell script for composite, index.js for
|
|
38
|
+
JavaScript, Dockerfile + entrypoint for Docker), the test strategy
|
|
39
|
+
(how to test custom actions), and the publishing approach (how to
|
|
40
|
+
version and release). Compare the 3 action types: when to use each,
|
|
41
|
+
performance differences, and maintenance considerations.
|
|
42
|
+
|
|
43
|
+
assertions:
|
|
44
|
+
- type: llm_judge
|
|
45
|
+
criteria: "action.yml files are correctly structured — each has proper name, description, inputs with types/defaults/required, outputs where applicable, runs section matching the action type (composite/node20/docker), and branding metadata"
|
|
46
|
+
weight: 0.35
|
|
47
|
+
description: "Correct action.yml structure"
|
|
48
|
+
- type: llm_judge
|
|
49
|
+
criteria: "Implementations are functional — composite action uses correct shell syntax with ${{ inputs.* }}, JavaScript action uses @actions/core and @actions/github packages correctly, Docker action has proper Dockerfile and entrypoint script receiving inputs as env vars"
|
|
50
|
+
weight: 0.35
|
|
51
|
+
description: "Functional implementations"
|
|
52
|
+
- type: llm_judge
|
|
53
|
+
criteria: "Comparison helps decision-making — explains when to choose composite (simple, no build step), JavaScript (rich API access, fast startup), or Docker (isolation, any language), and covers testing strategies, versioning with tags, and the marketplace publishing process"
|
|
54
|
+
weight: 0.30
|
|
55
|
+
description: "Decision-helping comparison"
|
|
@@ -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"
|