name: CI on: push: branches: [ main ] pull_request: branches: [ main ] permissions: contents: read env: PYTHONIOENCODING: utf-8 PYTHONUTF8: "1" jobs: validate: name: Lint & Verify (${{ matrix.os }}, Python ${{ matrix.python-version }}) strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] python-version: ["3.11", "3.12"] runs-on: ${{ matrix.os }} timeout-minutes: 10 steps: - name: Checkout repository uses: actions/checkout@v4 with: persist-credentials: false - name: Configure git line endings run: git config --global core.autocrlf false - name: Set up Python uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Verify accessible SVG contract run: python scripts/test-lint-a11y.py - name: Run skin linter run: python scripts/lint-skin.py --all --baseline - name: Verify sequence OAuth specs run: python scripts/verify-sequence-oauth.py - name: Verify draw.io import script run: python scripts/verify-drawio-import.py - name: Verify Mermaid import script run: python scripts/verify-mermaid-import.py - name: Verify onboarding CLI script (if present) shell: bash run: | if [ -f scripts/verify-onboarding.py ]; then python scripts/verify-onboarding.py fi - name: Install Playwright & Chromium (if linter present) 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) shell: bash run: | if [ -f scripts/lint-render.py ]; then python scripts/lint-render.py --self-test fi - name: Verify generated icon assets shell: bash run: | python scripts/build-icons.py git diff --ignore-space-at-eol --exit-code -- \ 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: | scripts/fixtures/ skills/diagram-design/assets/