Stack Matrix #398
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Stack Matrix | |
| # Runs the full 13-stack generate → install → lint → typecheck → pytest | |
| # pipeline. This is the slow tier — gated off the default ``ci.yml`` run so | |
| # day-to-day PRs stay fast, but it fires on any PR touching template or | |
| # core-engine code (where drift lands) and nightly to catch anything that | |
| # merged without touching a gated path. | |
| on: | |
| pull_request: | |
| branches: [ main ] | |
| paths: | |
| - 'aegis/templates/**' | |
| - 'aegis/core/**' | |
| - 'aegis/cli/**' | |
| - 'tests/cli/**' | |
| - 'pyproject.toml' | |
| - 'uv.lock' | |
| - '.github/workflows/stack-matrix.yml' | |
| schedule: | |
| # 07:00 UTC daily — catches drift merged via PRs that didn't match the | |
| # path filter above (e.g. docs-only PRs that inadvertently move a | |
| # template Jinja file). | |
| - cron: '0 7 * * *' | |
| workflow_dispatch: {} | |
| concurrency: | |
| group: stack-matrix-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| # Deliberately NO UV_PYTHON here. This workflow generates and installs real | |
| # stacks, and generated projects require Python >=3.13. A global UV_PYTHON | |
| # would force their `uv sync` onto the tool's 3.11 and fail with | |
| # "incompatible with the project's Python requirement: >=3.13". Each project | |
| # must resolve its own interpreter. | |
| UV_LINK_MODE: "copy" # Avoid broken cache hardlinks (partial-install errors) | |
| jobs: | |
| stack-matrix: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 45 | |
| steps: | |
| # ubuntu-latest ships ~14 GB free on /, but this job generates every | |
| # stack combination and `uv sync`s each into its own .venv (UV_LINK_MODE | |
| # copy, so no hardlink dedup) — they coexist for the whole run and can | |
| # exhaust the disk (the runner then can't even write its own _diag logs). | |
| # Reclaim ~15 GB by dropping preinstalled toolchains this Python repo | |
| # never uses. df before/after so the logs show the headroom. | |
| - name: Free disk space | |
| run: | | |
| echo "== disk before =="; df -h / | |
| sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc | |
| echo "== disk after =="; df -h / | |
| - uses: actions/checkout@v7 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| cache-dependency-glob: "uv.lock" | |
| - name: Set up Python | |
| run: uv python install 3.11 | |
| - name: Install dependencies | |
| run: uv sync --all-extras | |
| - name: Run full stack matrix | |
| run: make test-stacks-full |