From 86dda261a3a80cc040480778bb24570929a8a224 Mon Sep 17 00:00:00 2001 From: Cathryn Lavery Date: Wed, 12 Aug 2026 10:08:08 -0700 Subject: [PATCH] ci: align matrix with current verification gates --- .github/workflows/ci.yml | 51 +++++++--------------------------------- CONTRIBUTING.md | 4 ++-- README.md | 2 +- scripts/build-icons.py | 4 ++-- 4 files changed, 14 insertions(+), 47 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8c2d6d5..d71447c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,13 +44,16 @@ jobs: run: python scripts/test-lint-a11y.py - name: Verify URL SVG normalization - run: python3 scripts/test-build-icons-quoted-attributes.py + id: url_icons + run: python scripts/test-build-icons-quoted-attributes.py - name: Verify Devicon normalization - run: python3 scripts/test-build-icons-devicon.py + id: devicon + run: python scripts/test-build-icons-devicon.py - name: Verify mojibake repair utility - run: python3 scripts/test-fix-mojibake.py + id: mojibake + run: python scripts/test-fix-mojibake.py - name: Run skin linter id: skin @@ -68,35 +71,6 @@ jobs: id: mermaid run: python scripts/verify-mermaid-import.py - - name: Verify onboarding CLI script (if present) - id: onboard - shell: bash - run: | - if [ -f scripts/verify-onboarding.py ]; then - python scripts/verify-onboarding.py - fi - - - name: Install Playwright & Chromium (if linter present) - id: playwright_install - shell: bash - run: | - if [ -f scripts/lint-render.py ]; then - python -m pip install playwright - if [ "${{ runner.os }}" = "Linux" ]; then - python -m playwright install --with-deps chromium - else - python -m playwright install chromium - fi - fi - - - name: Verify render layout validator self-test (if present) - id: lint_render - shell: bash - run: | - if [ -f scripts/lint-render.py ]; then - python scripts/lint-render.py --self-test --screenshot-dir failure-screenshots - fi - - name: Verify generated icon assets id: icons shell: bash @@ -106,16 +80,6 @@ jobs: skills/diagram-design/assets/icons.html \ skills/diagram-design/references/primitive-icons.md - - name: Upload linter failure artifacts - if: failure() - uses: actions/upload-artifact@v4 - with: - name: linter-failure-artifacts-${{ matrix.os }}-python-${{ matrix.python-version }} - path: | - failure-screenshots/ - scripts/fixtures/ - skills/diagram-design/assets/ - - name: Generate CI execution summary table if: always() shell: bash @@ -124,6 +88,9 @@ jobs: echo "| Verification Gate | Outcome |" >> $GITHUB_STEP_SUMMARY echo "|---|---|" >> $GITHUB_STEP_SUMMARY echo "| SVG Accessibility Contract | ${{ steps.a11y.outcome == 'success' && '✅ Passed' || (steps.a11y.outcome == 'skipped' && '⏭️ Skipped' || '❌ Failed') }} |" >> $GITHUB_STEP_SUMMARY + echo "| URL SVG Normalization | ${{ steps.url_icons.outcome == 'success' && '✅ Passed' || (steps.url_icons.outcome == 'skipped' && '⏭️ Skipped' || '❌ Failed') }} |" >> $GITHUB_STEP_SUMMARY + echo "| Devicon Normalization | ${{ steps.devicon.outcome == 'success' && '✅ Passed' || (steps.devicon.outcome == 'skipped' && '⏭️ Skipped' || '❌ Failed') }} |" >> $GITHUB_STEP_SUMMARY + echo "| Mojibake Repair Utility | ${{ steps.mojibake.outcome == 'success' && '✅ Passed' || (steps.mojibake.outcome == 'skipped' && '⏭️ Skipped' || '❌ Failed') }} |" >> $GITHUB_STEP_SUMMARY echo "| Color Palette & Skin Linter | ${{ steps.skin.outcome == 'success' && '✅ Passed' || (steps.skin.outcome == 'skipped' && '⏭️ Skipped' || '❌ Failed') }} |" >> $GITHUB_STEP_SUMMARY echo "| Sequence Diagram Grammar | ${{ steps.oauth.outcome == 'success' && '✅ Passed' || (steps.oauth.outcome == 'skipped' && '⏭️ Skipped' || '❌ Failed') }} |" >> $GITHUB_STEP_SUMMARY echo "| Draw.io Import Extractor | ${{ steps.drawio.outcome == 'success' && '✅ Passed' || (steps.drawio.outcome == 'skipped' && '⏭️ Skipped' || '❌ Failed') }} |" >> $GITHUB_STEP_SUMMARY diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e6e6e2d..3264c57 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,7 +19,7 @@ See [README.md](README.md) for the full picture, including the design system and - **Create an issue first** for anything non-trivial (new type, behavior change, import grammar work). Small fixes and docs can go straight to a PR. - **Work on a branch** — never commit directly to `main`. - **Keep the scope tight.** One PR = one concern. Mixing a new diagram type with a docs rewrite makes review slow. -- **Python 3.10+ is required** for the development scripts (CI runs 3.11). +- **Python 3.10+ is required** for the development scripts (CI runs 3.11 and 3.12 across Linux, Windows, and macOS). --- @@ -133,4 +133,4 @@ A good PR: ## Questions? -Open a discussion or comment on the relevant issue. If it's about security, use the private reporting path in [SECURITY.md](SECURITY.md). \ No newline at end of file +Open a discussion or comment on the relevant issue. If it's about security, use the private reporting path in [SECURITY.md](SECURITY.md). diff --git a/README.md b/README.md index e41ae32..181c55d 100644 --- a/README.md +++ b/README.md @@ -361,7 +361,7 @@ If you touch the Mermaid import path, `python3 scripts/verify-mermaid-import.py` it covers all supported grammars, multi-block Markdown, adversarial labels, trust-boundary behavior, resource caps, named failures, and reference/command wiring. -All pull requests and pushes are automatically validated across Linux, Windows, and macOS runners via GitHub Actions CI (`.github/workflows/ci.yml`). Failure artifacts are automatically packaged and uploaded for visual debugging. +All pull requests and pushes are automatically validated across Linux, Windows, and macOS runners via GitHub Actions CI (`.github/workflows/ci.yml`). ### What loads when diff --git a/scripts/build-icons.py b/scripts/build-icons.py index b146842..5cca93f 100644 --- a/scripts/build-icons.py +++ b/scripts/build-icons.py @@ -600,11 +600,11 @@ def main() -> int: md_chunks, gallery_chunks, misses = build() MD_OUT.parent.mkdir(parents=True, exist_ok=True) - MD_OUT.write_bytes("".join(md_chunks).replace("\r\n", "\n").encode("utf-8")) + MD_OUT.write_text("".join(md_chunks), encoding="utf-8") HTML_OUT.parent.mkdir(parents=True, exist_ok=True) html = GALLERY_TEMPLATE.replace("{SECTIONS}", "\n".join(gallery_chunks)) - HTML_OUT.write_bytes(html.replace("\r\n", "\n").encode("utf-8")) + HTML_OUT.write_text(html, encoding="utf-8") total = sum(len(items) for items in ICONS.values()) print(f"\nDone. {total - len(misses)}/{total} fetched.", file=sys.stderr)