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