Repository navigation
Stop the shared ci.yml template filtering paths on pull_request - #26
Merged
Merged
Conversation
The canonical ci.yml in docs/shared-ci.md carried paths-ignore on both push and pull_request. The pull_request half is the defect #5 is about: a filtered trigger reports no check at all rather than a neutral one, so any ruleset requiring "Build, Test & Release" blocks a docs-only pull request permanently, including pull requests editing DESCRIPTION.md and TAGS.md. This is why #5's sweep did not stick. cf13319 removed the filter across 41 repositories on 2026-08-23; a4cec36 put it back three days later as a side effect of adopting the unified workflow, and 53bf50b re-broadcast it on 2026-09-14 as a file described as byte-identical in every repository. Measured against current main: all 28 repositories sampled still carry paths-ignore under pull_request, including the ones the issue counts as already swept. Sweeping the repositories without fixing the template they are regenerated from would be reverted a third time, so the template is the place to change. The push filter stays. Release gating runs off KtsuBuild's should_release rather than the event type, so a docs-only push to main would otherwise cut a version. That asymmetry is now stated in the document and asserted by a test, since symmetry is the obvious tidy-up and is what broke it twice. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012PwjCMZsvWpvHQhPu5kvBX
This was referenced Sep 25, 2026
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.
Refs #5 — this fixes the root cause, but does not on its own complete that issue's sweep. See What this does not do below.
Why #5's sweep did not stick
The issue says the filter "has been removed from the
pull_requesttrigger in 41 repos". Measured against currentmain, that is no longer true of any of them.I sampled 28 repositories — the 15 the issue names as remaining, plus 13 it counts as already swept as a control — by fetching each one's
.github/workflows/dotnet.ymland parsing the trigger block. All 28 still carrypaths-ignoreunderpull_request. The control group was the interesting half: if the sweep had held anywhere, it would have held there.CaseConverter's history explains it:pull_requestcf13319"always run CI on pull requests"a4cec36"adopt the unified dotnet workflow"53bf50b"adopt the consolidated .NET workflow"The sweep landed and was undone three days later, not deliberately but as a side effect of replacing the whole workflow file.
53bf50b's own message describes the replacement as "byte-identical in every repository", so the revert was broadcast fleet-wide a second time.Sweeping the repositories again without changing the template they are regenerated from would be reverted a third time.
The change
docs/shared-ci.mdholds the canonicalci.yml"every repository holds byte-identical". It carriedpaths-ignoreon both triggers. This removes it frompull_requestonly.That trigger is the one that matters, because a filtered
pull_requesttrigger does not report a neutral check — it reports nothing. Any ruleset requiringBuild, Test & Releasetherefore blocks a docs-only pull request permanently, with no check to wait on and nothing to override. It also catches pull requests editingDESCRIPTION.mdandTAGS.md, which the Terraform workspace derives repository metadata from.The
pushfilter stays, deliberately. Release gating runs off KtsuBuild'sshould_releaserather than the event type, so a docs-only push tomainwould otherwise cut a version.That asymmetry is now stated in the document rather than left implicit, because making the two triggers symmetric is the obvious tidy-up and is exactly what undid it twice.
Tests
scripts/tests/shared-ci-template.tests.ps1, following the existingupdate-sdks.tests.ps1convention in this repo — a plain pwsh script with the same harness shape, run directly, non-zero exit on failure.pull_request does not filter pathspush still filters pathsboth triggers are still declaredpull_requestentirely, which would pass the first case for the wrong reasonThe block is located by the sentence that introduces it rather than by being the first fenced block in the file, so adding an example earlier in the document cannot silently point the assertions at the wrong YAML.
Proved failing without the fix. Reverting only
docs/shared-ci.mdtomainand keeping the test:With the fix: 3 of 3 passed, exit 0.
Verification
scripts/tests/shared-ci-template.tests.ps1— 3/3 passedscripts/tests/update-sdks.tests.ps1— 7/7 passed, unchangedmarkdownlint docs/shared-ci.md— cleanRun on PowerShell 7.4.6 on Linux. Worth recording:
pwshis not installed in this container anddotnet tool installis broken here for every package (Settings file 'DotnetToolSettings.xml' was not found, reproducible with Microsoft's owndotnetsay), which is the same container limitation recorded onktsu-dev/Sdk#34. The official tarball from GitHub releases works and is what I used.What this does not do
It does not sweep the repositories, so #5 stays open. Two things remain there, and both are yours:
dotnet.yml. The issue's "16 remaining" count is stale in the other direction too — it is effectively all of them. That sweep still needs the routing decision asked for on Finish the pull_request paths-ignore sweep on the 16 remaining repos #5 on 2026-09-22 and not yet answered: 16-plus one-file pull requests, or direct[skip ci]pushes. I have not made that call.ci.ymlyet. None of the 28 sampled has one, so the shared-pipeline migration this template belongs to has not started. That is worth knowing on its own, sinceCLAUDE.mddescribes--fallback-workflow dotnet.ymlas a migration crutch that "comes off once the warnings stop" — currently it is carrying the entire fleet.The upside of ordering it this way is that whenever the migration does run, repositories land on a template that is already correct.
🤖 Generated with Claude Code
https://claude.ai/code/session_012PwjCMZsvWpvHQhPu5kvBX
Generated by Claude Code