Skip to content

CI Reference

This page documents the structure of the Stillwater CI pipeline. It is generated automatically from .github/workflows/ci.yml by cmd/gen-ci-reference and reflects the current job dependency graph and test matrix configuration.

Job Dependency Graph

flowchart TD
    a11y_summary["A11y Smoke Tests (Playwright + axe-core)"]
    a11y_test["A11y Smoke Tests Check"]
    build["Build"]
    build_matrix["Build Matrix (${{ matrix.goos }}, ${{ matrix.goarch }})"]
    cache_usage["Cache Usage Check"]
    changes["Detect Changes"]
    coverage_floor["Coverage Floor Check"]
    coverage_floor_summary["Coverage Floor"]
    coverage_upload["Upload Coverage"]
    css_lint["CSS Lint"]
    docker["Docker Build"]
    go_cache_primer["Go Cache Primer"]
    js_test["JS Unit Tests"]
    lint["Lint Check"]
    lint_summary["Lint"]
    test["Test Shard"]
    test_summary["Test"]

    changes --> a11y_summary
    a11y_test --> a11y_summary
    changes --> a11y_test
    changes --> build
    build_matrix --> build
    changes --> build_matrix
    lint --> build_matrix
    coverage_floor --> build_matrix
    changes --> coverage_floor
    test --> coverage_floor
    changes --> coverage_floor_summary
    test --> coverage_floor_summary
    coverage_floor --> coverage_floor_summary
    changes --> coverage_upload
    test --> coverage_upload
    changes --> css_lint
    changes --> docker
    lint --> docker
    test --> docker
    coverage_floor --> docker
    changes --> go_cache_primer
    changes --> js_test
    changes --> lint
    changes --> lint_summary
    lint --> lint_summary
    changes --> test
    changes --> test_summary
    test --> test_summary

Test Matrix Shards

Test shards are computed dynamically at runtime (see the test_matrix output in ci.yml).

Test Aggregator Pattern

The test-summary job owns the "Test" check name that branch protection requires. It runs under always() so a check result is always posted even when individual shards fail or are canceled.

This pattern decouples the matrix shard count from branch protection rules: shards can be added, removed, or renamed without updating the required-checks list. Branch protection requires one check ("Test") and test-summary always reports it -- passing only when every shard in the matrix succeeds.