mirror of
https://github.com/headroomlabs-ai/headroom.git
synced 2026-08-27 14:17:10 -04:00
## Problem CI's `changes` paths-filter is too coarse: both `code` and `e2e` include the catch-all `headroom/**`, so **any** Python change fires the full matrix — including the scarce-runner hogs: `build-wheel-windows`, `macos-native-wrapper`, `windows-native-wrapper`, `docker-native-e2e`. macOS runners cap at 5 on the Free plan, so a trivial Python PR burns the scarcest resource. `init-e2e`/`wrap-e2e` trigger on `headroom/**` too. ## Change (CI config only — no product code) - **ci.yml:** split `changes` into `code` / `native` / `dashboard` / `packaging`. Re-gate: | job | before | after | |-----|--------|-------| | `build-wheel-windows` | code | `packaging` | | `test-dashboard-ui` | code | `dashboard` | | `docker-native-e2e` | e2e | `native` | | `windows-native-wrapper` | e2e | `native` | | `macos-native-wrapper` | e2e | `native` | - **init-e2e / wrap-e2e:** scoped off `headroom/**` onto the `cli`/`install`/`providers`/`rtk` subpaths the flows exercise (mirrors the existing `*-native-e2e` workflows). ## Safety - Verified no job `needs:` any of the re-gated jobs, so no dependency chain breaks. `test-dashboard-ui` still gets `build-wheel` (dashboard files are under `headroom/` ⟹ `code` too). - Job-level `if:` skips resolve as **neutral** (not failing), so this is safe even if branch protection is added. - Full matrix still runs on any `.github/workflows/**` change and on push to `main` (post-merge safety net). ## Net A pure-Python logic PR skips ~7-9 jobs incl. all 3 native platform builds — freeing the macOS/Windows caps that were starving the queue.
46 lines
1.1 KiB
YAML
46 lines
1.1 KiB
YAML
name: Init E2E
|
|
|
|
on:
|
|
pull_request:
|
|
branches: [main]
|
|
# Scoped to what the `headroom init` flow actually exercises (mirrors
|
|
# init-native-e2e), not all of headroom/** — a pure-Python logic change
|
|
# elsewhere shouldn't spin up a docker init E2E.
|
|
paths:
|
|
- 'headroom/cli/**'
|
|
- 'headroom/install/**'
|
|
- 'crates/**'
|
|
- 'docker/**'
|
|
- 'Dockerfile'
|
|
- 'e2e/**'
|
|
- 'scripts/install*'
|
|
- 'pyproject.toml'
|
|
- 'Cargo.toml'
|
|
- 'Cargo.lock'
|
|
- 'rust-toolchain.toml'
|
|
- 'uv.lock'
|
|
- '.claude-plugin'
|
|
- '.github/plugin/**'
|
|
- 'plugins/headroom-agent-hooks/**'
|
|
- '.github/workflows/init-e2e.yml'
|
|
push:
|
|
branches: [main]
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: init-e2e-${{ github.ref }}
|
|
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
|
|
|
jobs:
|
|
docker-init-e2e:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 45
|
|
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
|
|
- name: Build init e2e image
|
|
run: docker build -f e2e/init/Dockerfile -t headroom-init-e2e .
|
|
|
|
- name: Run init e2e container
|
|
run: docker run --rm headroom-init-e2e
|