chore(ci): modernize workflows to net10.0 with a composite build action - #91
Merged
Merged
Conversation
Replace the five stale .NET 6/7/8 per-library workflows with net10.0
per-area workflows plus a full-.slnx integration build, all driven by a
shared composite build action, with correct paths filters for the
restructured libraries/{src,tests} layout.
- add .github/actions/build composite action: setup-dotnet from the
global.json pin (sourced comment-tolerantly, JSONC), restore/build with
warnings-as-errors off, optional tests; allow-build-failure /
allow-test-failure escape hatches keep CI green without hiding regressions
- per-area workflows: core, gdm, syntax, server, client, analyzers, tooling;
plus ograph-solution building the full slnx on push to main + PRs
- isolate the Server build in a non-blocking job (37 deferred compile errors,
roadmap N-08) with a loud annotation; library test suites run non-blocking
pending #90
- exclude the two net472 projects (VSIX, analyzer test host) from the ubuntu
gate; documented windows-latest matrix extension point
- drop nuget.org publishing (commented release-job stub retained) with a
roadmap note
- delete the five stale ograph-*.yml workflows
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…teria fix follow-up from adversarial review. The CI status row implied N-01/#70 was fully delivered ("Modernized (N-01)"). Two of #70's acceptance criteria are not met and are deferred, not delivered: * "green on build + existing tests" — the build gates, but library test suites run non-blocking (allow-test-failure downgrades failures to ::warning), so tests are surfaced, not gated. Tracked in #90; #70 is now wired blocked-by #90. * "matrix builds" — every job is single-runner ubuntu-latest; matrix exists only as a commented example. The net472 windows-latest leg is tracked in #90. Record the open status and the deferrals so #70 is not treated as done. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Modernizes CI for the restructured, net10.0 repo. The five stale
.NET 6/7/8per-library workflows (actions v1/v2, pre-restructure paths filters, per-push
nuget.orgpublishing) are replaced with a shared composite build action andone workflow per area plus a full-
.slnxintegration build — the Cohesion N-01pattern. Actions are v4/v5, runners are
ubuntu-latest, and every paths filtertargets the current
libraries/<Name>/{src,tests}layout.This is a foundation delivery — it does not complete #70; that issue stays open. The build is the
required gate everywhere, and the two things that cannot pass today are isolated
and loud rather than swallowed. But two of #70's acceptance criteria are
deferred, not delivered, so #70 stays open (see "Work items" below).
Changes
.github/actions/build/action.yml— composite action: resolves the pinnedSDK from
global.json(sourced comment-tolerantly —global.jsonis JSONC andsetup-dotnet's
global-json-fileuses a strict parser), then restore → build(
-p:TreatWarningsAsErrors=false, i.e.-warnaserroroff, so the tree's ~1kCS1591doc warnings never gate) → optionaldotnet test. Two documentedescape hatches —
allow-build-failureandallow-test-failure— downgrade afailure to a
::warningannotation instead of hiding it.ograph-core,ograph-gdm,ograph-syntax,ograph-client,ograph-server,ograph-analyzers,ograph-tooling. Each hascorrect paths filters (
global.json,Directory.Build.props/.targets,build/**, its own area folder,.github/actions/build/**, its own workflowfile).
ograph-solution.yml— builds the full.slnxon push tomain/developmentand on every PR. Mechanism: enumerate the projects declared in the
.slnxandbuild each, skipping only the projects that cannot produce a green build on
ubuntu (Server, and the two
net472projects). An isolated non-blocking jobbuilds Server separately. Note: this aggregate required job is build-only —
it does not run
dotnet test(test promotion is tracked in [O01.01.12.01.01] Restore red/empty test suites and promote CI tests to a required gate #90).(deferred feature work, roadmap N-08). Its job is
continue-on-error: trueandthe composite emits a loud warning annotation, so it never masks a regression in
a required area. Remove the switches once Server compiles.
Gdm (2 failing) and Syntax (9 failing) suites are pre-existing red and the
Client/Cli test projects are empty stubs. Tests run and surface as annotations
but do not gate yet — so [O01.01.12.01] Modernize CI to net10.0 with matrix and composite build action #70's "green on build + existing tests" criterion is
not yet satisfied. Filed [O01.01.12.01.01] Restore red/empty test suites and promote CI tests to a required gate #90 to make them green and promote tests to a
required gate. Library source is owned by other lanes, so it is untouched here.
net472matrix extension point — the VSIX and the analyzer test host targetnet472and cannot build/run on ubuntu. They are excluded from the ubuntu gate,with a documented
windows-latestmatrix leg for when their tests are ready.No
strategy.matrixships in this PR (it exists only as a commented example inograph-analyzers.yml), so [O01.01.12.01] Modernize CI to net10.0 with matrix and composite build action #70's "matrix builds" criterion is not yet satisfied;the windows-latest leg is tracked in [O01.01.12.01.01] Restore red/empty test suites and promote CI tests to a required gate #90.
nuget.orgon everymainpush; packages are not ready, so that is not carried over. A commentedrelease-job stub remains in
ograph-solution.yml, with a roadmap note.ograph-*.ymlworkflows.docs/DELIVERY_ROADMAP.md— CI status row updated to record themodernization as a foundation ([O01.01.12.01] Modernize CI to net10.0 with matrix and composite build action #70 still open), the two deferred acceptance
criteria, the Server/test non-blocking posture, the matrix extension point, and
the NuGet decision.
Work items
Refs #70 — does NOT close it. Delivered here: net10.0, actions v4/v5, the
shared composite build action, and correct paths filters. Deferred (so #70
stays open): "green on build + existing tests" (test suites run non-blocking under
allow-test-failure, not gated) and "matrix builds" (all jobs are single-runnerubuntu-latest). #70 is wired blocked-by #90 and should be promoted to Doneonly after #90 lands.
#90 — restore the red/empty test suites, remove
allow-test-failureso testsbecome a required gate, and add the windows-latest net472 matrix leg. This closes
out the two deferred #70 criteria.
Testing & verification
workflow's self-reference matches its filename (
ograph-solutionintentionallyhas no paths filter — it is the aggregate gate).
.slnxexclusion loop — dry-run confirms it builds all 15 buildableprojects and skips exactly Server (×2), the VSIX, and the
net472analyzer testhost.
success; Gdm (build ok, tests fail,
allow-test-failure) → success + warning;Server (build fails,
allow-build-failure) → success + warning; and thenegative case (Gdm with the switch off) → correctly fails (rc=1), proving the
gate still gates.
bash runs cleanly on ubuntu.
🤖 Generated with Claude Code