Generate Advanced CI workshop for Swag Shop Project
<!--Workshop Agent Request Template This issue structures your request for the Workshop Agent. Fill in ONLY the sections relevant to your chosen mode — delete the other mode sections entirely. HOW TO USE: 1. Choose your mode (Migrate, Generate, or Update) 2. Fill in the General section and your mode's section ONLY — delete the other two mode sections 3. Optionally fill in Customer Context 4. Create the issue THEN IN DUO CHAT (the agent works in steps — you prompt each one): 5. Open Duo Chat → select "Workshop Agent" → toggle Agentic mode on 6. Step 1 — Plan: "Read issue #[number] and execute the [migrate/generate/update] workflow" 7. Step 2 — Execute: "Approved, generate the files" (or "make the updates") 8. Step 3 (optional): "Update changelog and log learnings" (or just one: "Now update the changelog" / "Log any learnings") The agent stops after each step and waits for your next prompt.--> ## General **Mode: Generate** **Topic: Advanced CI Workshop** **Target Audience:** Developers and DevOps professionals who have already completed the Intro to CI/CD workshop. They know basic `.gitlab-ci.yml` syntax, `needs:`, `rules:`, and `include:` — but haven't worked with advanced pipeline patterns. Mixed skill levels within that group, meaning some may be more infrastructure-leaning, others more developer-leaning. GitLab SaaS users specifically **Target Duration:** 2 sessions × 90 minutes each, with a break between sessions. Total = 3 hours of instruction time --- ## Generate Details **Workshop description:** Revamp of the Advanced CI Lab — a 2-session × 90-minute instructor-led workshop on GitLab SaaS for developers with existing CI experience. The existing two-Python-app monorepo is replaced by the DAP Swag Shop (Python web app) as the teaching codebase. Each lab is framed as a business scenario the Swag Shop team is solving. Labs build cumulatively — every lab creates a problem the next one solves. **Reference Lab :** https://gitlab.com/gitlab-learn-labs/onboarding-cohort-projects/advanced-ci-lab <!--Describe what the workshop should cover. Be specific about the learning objectives.--> **Specific GitLab features to cover:** * Container Registry: `docker login`, `docker build`, `docker push` using predefined CI variables * Package Registry: slides overview only, no lab * Variables: masking, protected, environment-scoped * Cache vs artifact distinction: `cache:key:files:`, `artifacts:reports:dotenv`, `dependencies: []` * Dotenv & needs: `artifacts:reports:dotenv`, `needs: artifacts: true/false`, DAG view * Reuse patterns: `extends:`, `include:`, `!reference` — differences and gotchas * CI/CD Components: consuming from the catalog, creating with `spec:inputs`, `$[[ inputs.name ]]` interpolation **Session 2** * Workflow rules: `workflow:rules`, `$CI_PIPELINE_SOURCE`, `workflow:name`, merged results pipelines * `parallel:matrix`: matrix over `REGION: [us, eu, apac]`, `needs:parallel:matrix` * Pipeline type decision: parent-child, multi-project, dynamic child — when to use each and snippets of each * Dynamic child pipeline: `envsubst` variable expansion, generate → artifact → trigger pattern, `strategy: depend` * Merge trains : bonus <!--List features you want included, or write "Agent's discretion based on topic"--> **Number of files / structure preference:** 6 files in `Lab Exercises/`, same naming convention and internal structure as the existing Advanced CI Lab exercises folder: Lab Exercises/ 1_Container_registry.md ← update, retheme to Swag Shop 2_dotenv.md ← update, retheme to Swag Shop 3_cicd_components.md ← new 4_parallel_matrix.md ← update (was lab 3), retheme 5_dynamic_pipeline.md ← update (was lab 4), retheme 6_instructor_notes.md ← new Each file: intro scenario → numbered steps with inline YAML → bonus → key snippets reference section at the bottom (in-session reference card for attendees). Solution branches: `1-container-registry`, `2-dotenv`, `3-cicd-components`, `4-parallel-matrix`, `5-dynamic-pipeline` — each cumulative. <!--e.g., "5 files following the same pattern as the Security workshop", "Single standalone file", "Agent's discretion"--> **Swag Shop codebase additions needed:** | File | Status | Description | |------|--------|-------------| | `.gitlab-ci.yml` | Modify | Starting-state pipeline: stages, `.build` hidden job stub, no docker commands yet — attendees add those in Lab 1 | | `templates/docker-build.yml` | Create | CI/CD Component with `spec:inputs:` for `image_name`, `image_tag`, `dockerfile_path` | | `security-template.yml` | Create | Child pipeline template with `$REGIONS` placeholder for Lab 5 `envsubst` expansion; jobs use `$CI_PIPELINE_SOURCE == "parent_pipeline"` rule | | `config/regions/us.yml` | Create | Region config for Lab 4 matrix validation (minimal YAML: region, currency, tax_rate) | | `config/regions/eu.yml` | Create | Same | | `config/regions/apac.yml` | Create | Same | | `Dockerfile` | Create if absent | Python app container for Lab 1; do not overwrite if one already exists | | `requirements.txt` | Create if absent | Needed for `cache:key:files:` | Agent can also make suggestions for all ## Customer Context (Optional — all modes) <!--Fill this in if the workshop is being tailored for a specific customer engagement--> **Customer vertical/industry:** <!--e.g., Financial services, healthcare, public sector--> **Customer environment:** <!--e.g., GitLab.com SaaS, Self-Managed 18.9, AWS deployment, CLI-heavy workflows--> **Specific customer pain points:** <!--e.g., "They need SBOM compliance for FedRAMP", "Heavy Jenkins migration in progress"--> --- <!--Add topic label: ~security, ~cicd, ~platform, ~project-management, ~duo-ai, ~basics, ~gitops-->
issue