Skip to content

Commit b01878e

Browse files
committed
docs: update domain comparison table for Code Quality workshop and enhance screenshot script details
1 parent b9daaea commit b01878e

1 file changed

Lines changed: 30 additions & 30 deletions

File tree

docs/domain-parity-and-contribution.md

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)