Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 37 additions & 31 deletions .github/workflows/gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,22 @@ concurrency:

jobs:
# Dynamic matrix for build-and-test: pre-merge events (pull_request
# and merge_group) get Linux-only (production build path, fast —
# keeps PR checks and merge-queue runs short). Push-to-main /
# workflow_dispatch get the full set including macos-26
# (developer-experience verification) and the Windows experimental
# and merge_group) get Linux production legs + macos-26
# (developer-experience verification). Push-to-main /
# workflow_dispatch additionally include the Windows experimental
# legs. Standard GitHub-hosted runners are free for public repos so
# the post-merge run has no cost downside.
# all PR cadence has no cost downside.
#
# Duration check (maintainer 2026-04-28): the original 25-min
# concern that pushed macos-26 to per-merge was an outlier.
# Recent build-and-test job durations are typically 1-3 min on
# cached runners — comfortably within PR-cadence budget.
#
# Maintainer 2026-04-28: "mac is less than that too so we might as
# wel move that back form per merge to per pr, i think that means
# only low memory is per merge now." → macos-26 moves to PR cadence;
# only ubuntu-slim (low-memory.yml) + Windows experimental remain
# on per-merge.
Comment thread
AceHack marked this conversation as resolved.
matrix-setup:
name: matrix setup
runs-on: ubuntu-24.04
Expand All @@ -93,20 +103,15 @@ jobs:
shell: bash
run: |
# Pre-merge (pull_request + merge_group): Linux production
# legs only (~3 min wall clock).
# Push-to-main / workflow_dispatch: full surface incl.
# macos-26 (developer-experience) + Windows legs
# (peer-harness milestone seeding per maintainer 2026-04-27 —
# "start the windows one as a per push to main too/merge to
# main, you can start slowly building that out before I get
# my windows laptop running the peer-mode agent, windows
# will be mostly ready and they can just clean it up").
# legs + macos-26 dev-experience leg (~3-4 min total).
# Push-to-main / workflow_dispatch: pre-merge legs + Windows
# experimental legs (peer-harness milestone seeding).
# Windows legs are gated by `continue-on-error: true` at the
# build-and-test job level so initial failures (e.g. missing
# tools/setup/install.ps1) don't block per-merge runs while
# the peer-agent polishes the path.
if [ "${GH_EVENT}" = "pull_request" ] || [ "${GH_EVENT}" = "merge_group" ]; then
echo 'os=["ubuntu-24.04","ubuntu-24.04-arm"]' >> "$GITHUB_OUTPUT"
echo 'os=["ubuntu-24.04","ubuntu-24.04-arm","macos-26"]' >> "$GITHUB_OUTPUT"
else
echo 'os=["ubuntu-24.04","ubuntu-24.04-arm","macos-26","windows-2025","windows-11-arm"]' >> "$GITHUB_OUTPUT"
fi
Expand Down Expand Up @@ -141,30 +146,31 @@ jobs:
# Reference:
# https://github.blog/changelog/2026-01-22-1-vcpu-linux-runner-now-generally-available-in-github-actions/
#
# Per-merge experimental legs (maintainer 2026-04-27 — replaces
# the prior 2026-04-24 deferral so Windows infrastructure is
# mostly-ready when the peer-mode agent comes online):
# Per-merge experimental legs (maintainer 2026-04-27):
# - windows-2025 Windows Server 2025 x64 (4 CPU, 16 GB)
# - windows-11-arm Windows 11 arm64 (4 CPU, 16 GB)
# These run only on push-to-main / schedule / workflow_dispatch
# (not on PR — same cadence as macos-26). They carry
# `continue-on-error: true` because no PowerShell install script
# exists yet (`tools/setup/install.ps1` TBD); failures are
# visible-but-not-blocking until the peer-agent polishes the
# path.
# These run only on push-to-main / workflow_dispatch (not on PR).
# They carry `continue-on-error: true` because no PowerShell
# install script exists yet (`tools/setup/install.ps1` TBD);
# failures are visible-but-not-blocking until the peer-agent
# polishes the path.
#
# fail-fast: false so one leg's failure doesn't cancel the
# others — we want the full signal across the matrix.
#
# Per-PR / per-merge cadence split (maintainer 2026-04-27):
# - macos-26: developer-experience verification, NOT prod build.
# Runs only on push-to-main + schedule + workflow_dispatch.
# Same rationale as the Analyze (csharp) move below.
# Per-PR / per-merge cadence split (maintainer 2026-04-28):
# - macos-26: developer-experience verification. Runs on every
# PR + merge_group + push-to-main. Originally moved to
# per-merge over a 25-min duration concern; verified 2026-04-28
# that recent gate.yml runs are well under that (typical
# build-and-test job is 1-3 min on cached runners), so back to
# PR cadence per maintainer ask.
# - ubuntu-24.04 + ubuntu-24.04-arm: production build path; runs
# on every PR + push-to-main.
# The matrix is built dynamically by `matrix-setup` so PR runs
# only get the Linux legs while push-to-main / schedule /
# workflow_dispatch run all three.
# on every PR + merge_group + push-to-main.
# The matrix is built dynamically by `matrix-setup` so PR +
# merge_group runs include macos-26, while push-to-main /
# workflow_dispatch additionally include the Windows experimental
# legs.
name: build-and-test (${{ matrix.os }})
timeout-minutes: 45
needs: matrix-setup
Expand Down
1 change: 1 addition & 0 deletions tools/hygiene/github-settings.expected.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@
"required_signatures": false,
"required_status_checks": {
"contexts": [
"build-and-test (macos-26)",
"build-and-test (ubuntu-24.04)",
"build-and-test (ubuntu-24.04-arm)",
"lint (actionlint)",
Expand Down
Loading