@@ -59,40 +59,40 @@ The demo-app repo owns all scanning logic, Copilot artifacts, and infrastructure
5959
6060| Feature | Accessibility (` accessibility-scan-demo-app ` ) | Code Quality (` code-quality-scan-demo-app ` ) | FinOps (` finops-scan-demo-app ` ) |
6161| ---------| -----------------------------------------------| ----------------------------------------------| ----------------------------------|
62- | ** Sample apps** | 5 web apps (Rust, C#, Java, Python, Go) with 15+ WCAG violations each | 1 Next.js sample app ( ` sample-app/ ` ) with coverage gaps, complexity violations, and linting issues | 5 IaC apps (Bicep + HTML) with cost governance violations |
62+ | ** Sample apps** | 5 web apps (Rust, C#, Java, Python, Go) with 15+ WCAG violations each | 5 apps (TypeScript, Python, C#, Java, Go ) with 15+ quality violations each ( complexity, coverage, duplication, lint) | 5 IaC apps (Bicep + HTML) with cost governance violations |
6363| ** Centralized scanner** | Full-stack Next.js 15 app (Web UI, REST API, CLI, GitHub Action) | MegaLinter multi-language orchestrator with 4-tool architecture | Central ` finops-scan.yml ` workflow with matrix strategy |
6464| ** Scanner deployment** | Azure App Service (Docker container) | GitHub Actions CI workflow (no deployed scanner app) | GitHub Actions only (no deployed scanner app) |
65- | ** Open source tools** | axe-core 4.11, IBM Equal Access 4.0 | MegaLinter (ESLint, Pylint, Checkstyle ), Jest, pytest-cov, JaCoCo | PSRule for Azure, Checkov, Cloud Custodian, Infracost |
66- | ** Custom tools** | 5 custom Playwright checks, CLI, SARIF generator, scoring engine, PDF/HTML reports | Inline JS SARIF converter in CI workflow | 2 Python SARIF converters, 4 Cloud Custodian policies |
67- | ** SARIF generation** | Native (built-in SARIF v2.1.0 generator) | Mixed: ESLint native ( ` @microsoft/eslint-formatter-sarif ` ); others via inline JS converter | Mixed: PSRule and Checkov native; Cloud Custodian and Infracost via 2 Python converters |
65+ | ** Open source tools** | axe-core 4.11, IBM Equal Access 4.0 | MegaLinter (ESLint, Ruff, golangci-lint, .NET Analyzers ), jscpd, Lizard, Jest, pytest-cov, JaCoCo, Go cover | PSRule for Azure, Checkov, Cloud Custodian, Infracost |
66+ | ** Custom tools** | 5 custom Playwright checks, CLI, SARIF generator, scoring engine, PDF/HTML reports | 2 Python SARIF converters ( ` lizard-to-sarif.py ` , ` coverage-to-sarif.py ` ), MegaLinter config, jscpd config | 2 Python SARIF converters, 4 Cloud Custodian policies |
67+ | ** SARIF generation** | Native (built-in SARIF v2.1.0 generator) | Mixed: ESLint, Ruff, golangci-lint, .NET Analyzers, jscpd native SARIF; Lizard and Coverage via 2 Python converters | Mixed: PSRule and Checkov native; Cloud Custodian and Infracost via 2 Python converters |
6868| ** SARIF upload** | ` codeql-action/upload-sarif@v4 ` (same-repo) | ` codeql-action/upload-sarif@v4 ` (same-repo) | Cross-repo upload via GitHub REST API (` gh api ` ) |
69- | ** Copilot agents** | 2 (a11y-detector, a11y-resolver) | 2 (CodeQualityDetector, TestGenerator ) | 5 (CostAnalysis, FinOpsGovernance, CostAnomalyDetector, CostOptimizer, DeploymentCostGate) |
69+ | ** Copilot agents** | 2 (a11y-detector, a11y-resolver) | 2 (CodeQualityDetector, CodeQualityResolver ) | 5 (CostAnalysis, FinOpsGovernance, CostAnomalyDetector, CostOptimizer, DeploymentCostGate) |
7070| ** Copilot prompts** | 2 (a11y-scan, a11y-fix) | 2 (code-quality-scan, code-quality-fix) | 2 (finops-scan, finops-fix) |
7171| ** Copilot instructions** | 3 (wcag22-rules, a11y-remediation, ado-workflow) | 2 (code-quality, ado-workflow) | 2 (finops-governance, ado-workflow) |
7272| ** Copilot skills** | 0 | 1 (code-quality-scan) | 1 (finops-scan) |
73- | ** Bootstrap script** | ` bootstrap-demo-apps.ps1 ` + ` bootstrap-demo-apps-ado.ps1 ` — creates repos, OIDC, secrets (GitHub + ADO) | Not yet implemented (framework-level only ) | ` bootstrap-demo-apps.ps1 ` + ` bootstrap-demo-apps-ado.ps1 ` — creates repos, OIDC, secrets, Infracost key (GitHub + ADO) |
74- | ** OIDC setup script** | ` setup-oidc.ps1 ` + ` setup-oidc-ado.ps1 ` — Azure AD federation for GitHub Actions + ADO Pipelines | Not yet implemented | ` setup-oidc.ps1 ` + ` setup-oidc-ado.ps1 ` — Azure AD federation for 6 repos (GitHub + ADO) |
75- | ** ADO bootstrap script** | ` bootstrap-demo-apps-ado.ps1 ` — ADO project provisioning, repos, WIF | Not yet implemented | ` bootstrap-demo-apps-ado.ps1 ` — ADO project provisioning, repos, WIF |
76- | ** Scan-and-store script** | ` scan-and-store.ps1 ` — weekly scan to Azure Blob for Power BI | Not yet implemented | ` scan-and-store.ps1 ` — weekly SARIF to Azure Blob for Power BI |
73+ | ** Bootstrap script** | ` bootstrap-demo-apps.ps1 ` + ` bootstrap-demo-apps-ado.ps1 ` — creates repos, OIDC, secrets (GitHub + ADO) | ` bootstrap-demo-apps.ps1 ` + ` bootstrap-demo-apps-ado.ps1 ` — creates repos, OIDC, secrets (GitHub + ADO ) | ` bootstrap-demo-apps.ps1 ` + ` bootstrap-demo-apps-ado.ps1 ` — creates repos, OIDC, secrets, Infracost key (GitHub + ADO) |
74+ | ** OIDC setup script** | ` setup-oidc.ps1 ` + ` setup-oidc-ado.ps1 ` — Azure AD federation for GitHub Actions + ADO Pipelines | ` setup-oidc.ps1 ` + ` setup-oidc-ado.ps1 ` — Azure AD federation for GitHub Actions + ADO Pipelines | ` setup-oidc.ps1 ` + ` setup-oidc-ado.ps1 ` — Azure AD federation for 6 repos (GitHub + ADO) |
75+ | ** ADO bootstrap script** | ` bootstrap-demo-apps-ado.ps1 ` — ADO project provisioning, repos, WIF | ` bootstrap-demo-apps-ado.ps1 ` — ADO project provisioning, repos, WIF | ` bootstrap-demo-apps-ado.ps1 ` — ADO project provisioning, repos, WIF |
76+ | ** Scan-and-store script** | ` scan-and-store.ps1 ` — weekly scan to Azure Blob for Power BI | ` scan-and-store.ps1 ` — weekly scan to Azure Blob for Power BI | ` scan-and-store.ps1 ` — weekly SARIF to Azure Blob for Power BI |
7777| ** Power BI PBIP** | ` a11y-pbi-report/A11yReport.pbip ` (1 page, 7 dimensions) | ` power-bi/CodeQualityReport.pbip ` (4 pages planned) | ` power-bi/FinOpsReport.pbip ` (1 page, 5 dimensions) |
78- | ** GitHub Actions** | 5 workflows (ci, deploy, a11y-scan, deploy-all, scan-all) | 1 CI workflow ( ` code-quality.yml ` ) + 1 sample ( ` code-quality-scan.yml ` ) | 4 workflows (finops-scan, finops-cost-gate, deploy-all, teardown-all) |
79- | ** Azure DevOps pipelines** | 10 pipelines + 5 templates (ci, ci-cd, deploy, deploy-all, a11y-scan, a11y-scan-advancedsecurity, adv-sec-scan, scan-all, scan-and-store + 5 templates) | 1 sample pipeline ( ` quality-pipeline.yml ` ) | 5 pipelines + 2 templates (finops-scan, finops-cost-gate, deploy-all, teardown-all, scan-and-store + 2 templates) |
80- | ** Power BI docs** | PBIP implemented (` a11y-pbi-report/A11yReport.pbip ` ) + deployment scripts | DIY guide ( ` DIY-Code-Quality-Domain.md ` ) | 5 docs (data model, dashboard design, Power Query M, Resource Graph, FinOps Toolkit) |
81- | ** Primary language** | TypeScript 81.8% | TypeScript (Next.js sample app ) | PowerShell 59.8%, Bicep 16.4%, Python 13.6%, HCL 5.8%, HTML 4.1% |
78+ | ** GitHub Actions** | 5 workflows (ci, deploy, a11y-scan, deploy-all, scan-all) | 4 workflows ( code-quality-scan, code-quality-lint-gate, deploy-all, teardown-all ) | 4 workflows (finops-scan, finops-cost-gate, deploy-all, teardown-all) |
79+ | ** Azure DevOps pipelines** | 10 pipelines + 5 templates (ci, ci-cd, deploy, deploy-all, a11y-scan, a11y-scan-advancedsecurity, adv-sec-scan, scan-all, scan-and-store + 5 templates) | 5 pipelines + 4 templates (code- quality-scan, code-quality-lint-gate, deploy-all, scan-and-store, teardown-all + app-repo-scan, deploy-app, scan-app, teardown-app templates ) | 5 pipelines + 2 templates (finops-scan, finops-cost-gate, deploy-all, teardown-all, scan-and-store + 2 templates) |
80+ | ** Power BI docs** | PBIP implemented (` a11y-pbi-report/A11yReport.pbip ` ) + deployment scripts | 3 docs (code-quality-scan-overview, power-bi-data-model, workshop-setup ) | 5 docs (data model, dashboard design, Power Query M, Resource Graph, FinOps Toolkit) |
81+ | ** Primary language** | TypeScript 81.8% | Polyglot: TypeScript, Python, C#, Java, Go (5 languages across 5 demo apps ) | PowerShell 59.8%, Bicep 16.4%, Python 13.6%, HCL 5.8%, HTML 4.1% |
8282
8383### Workshop Repos
8484
8585| Feature | Accessibility (` accessibility-scan-workshop ` ) | Code Quality (` code-quality-scan-workshop ` ) | FinOps (` finops-scan-workshop ` ) |
8686| ---------| ------------------------------------------------| ----------------------------------------------| ----------------------------------|
87- | ** Labs** | 8 labs (Lab 00–07) | 8 labs (Lab 00–07 ) | 8 labs (Lab 00–07) |
87+ | ** Labs** | 8 labs (Lab 00–07) | 9 labs (Lab 00–08, includes dashboard lab ) | 8 labs (Lab 00–07) |
8888| ** Platform-specific labs** | GitHub + ADO (Lab 06-github, Lab 06-ado, Lab 07-github, Lab 07-ado) | GitHub + ADO (Lab 06-github, Lab 06-ado, Lab 07-github, Lab 07-ado) | GitHub + ADO (Lab 06-github, Lab 06-ado, Lab 07-github, Lab 07-ado) |
8989| ** Full-day duration** | ~ 6.5 hours | ~ 6.5 hours | ~ 7.25 hours |
9090| ** Half-day duration** | ~ 3 hours (Labs 00, 01, 02, 03, 05) | ~ 3 hours (Labs 00, 01, 02, 03, 06) | ~ 3.5 hours (Labs 00, 01, 02, 03, 06) |
9191| ** Delivery tiers** | 5 tiers (half-day GH, half-day ADO, full-day GH, full-day ADO, full-day dual) | 5 tiers (half-day GH, half-day ADO, full-day GH, full-day ADO, full-day dual) | 5 tiers (half-day GH, half-day ADO, full-day GH, full-day ADO, full-day dual) |
9292| ** Workshop agent** | Yes (workshop-specific agent in ` .github/agents/ ` ) | Not yet implemented | No |
9393| ** Copilot artifacts** | Workshop agent + governance instructions | Not yet implemented | None |
94- | ** Screenshot script** | ` capture-screenshots.ps1 ` (~ 900+ lines, 47 PNGs, 3 phases) | ` capture-screenshots.ps1 ` | ` capture-screenshots.ps1 ` (~ 710+ lines, 46 PNGs) |
95- | ** Playwright helpers** | ` playwright-helpers.js ` (screenshot, scan, auth-screenshot) | Not present | Not present |
94+ | ** Screenshot script** | ` capture-screenshots.ps1 ` (~ 900+ lines, 47 PNGs, 3 phases) | ` capture-screenshots.ps1 ` (manifest-driven, ~ 125 lines + ` screenshot-manifest.json ` , 57 PNGs) | ` capture-screenshots.ps1 ` (~ 710+ lines, 46 PNGs) |
95+ | ** Playwright helpers** | ` playwright-helpers.js ` (screenshot, scan, auth-screenshot) | ` playwright-helpers.js ` + ` screenshot-helpers.psm1 ` (PowerShell module) | Not present |
9696| ** Dev container** | Yes (Node.js 20 + Charm freeze) | Yes | Yes |
9797| ** GitHub Pages** | Yes (Jekyll) | Yes (Jekyll) | Yes (Jekyll) |
9898| ** Template repo** | Yes | Yes | Yes |
@@ -103,20 +103,20 @@ The Accessibility workshop includes a workshop-specific Copilot agent that provi
103103
104104#### Screenshot Script Comparison
105105
106- Both workshops include automated screenshot capture scripts with comparable capabilities :
106+ All three domain workshops include automated screenshot capture scripts:
107107
108- | Capability | Accessibility Workshop | FinOps Workshop |
109- | ------------| ----------------------| ------------------|
110- | Script size | ~ 900+ lines | ~ 710+ lines |
111- | Target screenshots | 47 PNGs | 46 PNGs |
112- | Architecture | 3-phase (offline, app-dependent, GitHub web UI) | Multi-phase |
113- | Charm freeze support | Yes | Yes |
114- | Playwright helpers | Separate ` playwright-helpers.js ` with 3 functions | Inline Playwright usage |
115- | Lab and phase filtering | Yes | Yes |
116- | Theme and font customization | Yes | Yes |
117- | Environment modes | local/azure | local/azure |
108+ | Capability | Accessibility Workshop | Code Quality Workshop | FinOps Workshop |
109+ | ------------| ----------------------| ---------------------- | ------------------ |
110+ | Script size | ~ 900+ lines | ~ 125 lines + manifest | ~ 710+ lines |
111+ | Target screenshots | 47 PNGs | 57 PNGs | 46 PNGs |
112+ | Architecture | 3-phase (offline, app-dependent, GitHub web UI) | Manifest-driven ( ` screenshot-manifest.json ` ) | Multi-phase |
113+ | Charm freeze support | Yes | Yes | Yes |
114+ | Playwright helpers | Separate ` playwright-helpers.js ` with 3 functions | ` playwright-helpers.js ` + ` screenshot-helpers.psm1 ` | Inline Playwright usage |
115+ | Lab and phase filtering | Yes | Yes (via manifest) | Yes |
116+ | Theme and font customization | Yes | Yes | Yes |
117+ | Environment modes | local/azure | local/azure | local/azure |
118118
119- New domains should follow this pattern and create a ` capture-screenshots.ps1 ` script covering all labs, with phase filtering and both local and Azure environment support.
119+ New domains should follow this pattern and create a ` capture-screenshots.ps1 ` script covering all labs, with phase filtering and both local and Azure environment support. The Code Quality workshop introduces a manifest-driven approach ( ` screenshot-manifest.json ` ) that separates screenshot definitions from execution logic.
120120
121121### Power BI Report (` advsec-pbi-report-ado ` )
122122
@@ -159,7 +159,7 @@ Making Azure DevOps a first-class citizen means every GitHub Actions workflow ha
159159| --------| -----------| ---------------| -------------------| ------------------| ------| ----------------|
160160| ** Security** | ` security-scan.yml ` | ` security-pipeline.yml ` (sample) | No | Yes | Partial (3 pages) — repo returns 404, status unknown | No |
161161| ** Accessibility** | ` accessibility-scan.yml ` (5 workflows) | 10 pipelines + 5 templates | Yes | Yes | Yes (` A11yReport.pbip ` , 1 page) | Yes (scan-and-store → Azure Blob) |
162- | ** Code Quality** | ` code-quality.yml ` | ` quality-pipeline .yml` (realized ) | Yes | Yes | Yes (` CodeQualityReport.pbip ` , 4 pages planned) | No |
162+ | ** Code Quality** | ` code-quality-scan .yml ` (4 workflows ) | 5 pipelines + 4 templates | Yes | Yes | Yes (` CodeQualityReport.pbip ` , 4 pages planned) | Yes (scan-and-store → Azure Blob) |
163163| ** FinOps** | ` finops-scan.yml ` , ` finops-cost-gate.yml ` | 5 pipelines + 2 templates | Yes | Yes | Yes (` FinOpsReport.pbip ` , 1 page) | Yes (scan-and-store → Azure Blob) |
164164| ** APM Security** | ` apm-security.yml ` | Inline pattern in docs | No | No | No | No |
165165
@@ -225,7 +225,7 @@ Labs 00 through 05 represent roughly 80% of workshop content and are fully platf
225225| --------| --------------| --------------------------| --------------------------------| ------------------| -------------------| -----------------| ------------------| ------|
226226| Security | Yes | N/A | Yes | Yes | No | Yes | Yes | Partial (3 pages) — repo returns 404, status unknown |
227227| Accessibility | Yes (5) | Yes (10 + 5 templates) | Yes | Yes | Yes | Yes | Yes | Yes (1 page) |
228- | Code Quality | Yes | No | Yes | Yes | Yes | Yes | No | Yes (` CodeQualityReport.pbip ` , 4 pages planned) |
228+ | Code Quality | Yes (4) | Yes (5 + 4 templates) | Yes | Yes | Yes | Yes | Yes | Yes (` CodeQualityReport.pbip ` , 4 pages planned) |
229229| FinOps | Yes (2) | Yes (5 + 2 templates) | No | Yes | Yes | Yes | No | Yes (1 page) |
230230
231231#### Target State Mapping
0 commit comments