Repository navigation
CI: select the PostgreSQL, SQL Server, consumer and pack lanes from a derived map #112
Copy link
Copy link
Open
Labels
area/releaseVersioning, changelogs, release wiringVersioning, changelogs, release wiringchoreBuild, CI, packaging, refactoring with no behaviour changeBuild, CI, packaging, refactoring with no behaviour change
Milestone
Description
Problem
Every PR runs every lane. Of the 42 merged PRs since 2026-06-02, 14 changed only docs or tests and still ran Integration, Consumer and Pack: 53 of 245 runner-minutes (22%), and about 1 minute of a 2.2-minute median wall-clock run. That alone is not worth it, because the minutes are free for a public repository.
#100 changes the balance. A SQL Server 2022 container lane on every PostgreSQL-only, docs or test-only PR costs every author its start-up and run time, and #101 adds work to the PostgreSQL lane.
Change
- A
Scopejob outputstrueorfalseper lane:postgres,sqlserver,consumer,pack.- On any event other than
pull_request, it selects every lane. - On a PR, it takes
git diff --name-only --no-renamesagainst the merge base and matches each path against.github/ci-lanes.json. The first match decides: a global file (Directory.Build.props,*.csproj,*.slnx,.github/workflows/**, the selector and map) selects every lane; a claimed path selects its lanes; an inert path (docs/**,*.md) selects nothing extra; anything else selects every lane. - Any error exits non-zero, and the gate (CI: one gate job as the only required build check #110) then fails.
- On any event other than
- A convention test derives the map from MSBuild, so it is never hand-kept. Each lane gets its test projects'
ProjectReferenceclosure, project directories, linked items and imported props, and the test checks that every lane has a job whoseif:reads it. While one test project holds both suites, any change undertest/selects both container lanes. The SQL Server suite must be its own project (Tests: a SQL Server integration lane that applies migrations to a live server #100) for the map to tell the lanes apart. Packneeds Test and Integration, so it gets an explicit!cancelled()condition. Otherwise it is skipped whenever a lane it needs is skipped, and the skip counts as passing.- Push, release (Release: run the full CI before publishing, and a nightly full run #111), nightly and dispatch always run every lane. The push run replays the merged PR's selection and reports a selection escape if a lane fails that the PR would have skipped.
Done when
The SQL Server lane is skipped on a PostgreSQL-only PR and runs on a core or SqlServer change. Each of these seeds fails CI: a file renamed out of src/, a failing Scope, a misspelled lane output, and Pack skipped behind an unselected lane.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area/releaseVersioning, changelogs, release wiringVersioning, changelogs, release wiringchoreBuild, CI, packaging, refactoring with no behaviour changeBuild, CI, packaging, refactoring with no behaviour change
Activity
CaffeinatedCoder commentedon Oct 20, 2026
Moved here from #100 on 2026-10-20: the SQL Server lane landed in #120 as
SqlServerIntegrationTestsinsideEFCore.ComplexIndexes.Tests(TestCategoryIntegration+SqlServer), with its own jobIntegration (SQL Server 2022); the PostgreSQL job filtersTestCategory!=SqlServer. Splitting it into its own test project, and requiring it through theCIgate (#110) rather than as a required check of its own, belongs with this lane map. Until then the job is not a required check.CaffeinatedCoder commentedon Oct 20, 2026
Moved to 11.0.0 under the SchemaKit epic (#37) on 2026-10-20, by the maintainer's decision. After the v5.5.0 tag, release/5.x takes fixes only and sees few PRs, so selecting lanes saves little there (53 runner-minutes over 42 PRs measured here). The PR volume is on main, which becomes SchemaKit. This issue also carries the split of the SQL Server lane into its own test project, moved here from #100. On 5.x the lane stays in the shared project. #110's gate job makes it required without its own required check.