Make the CI check report on every PR - #536
Conversation
ci.yml skipped itself on docs-only changes via paths-ignore. That is fine while nothing depends on it and fatal the moment the check is required: a workflow skipped by a path filter reports nothing at all, GitHub leaves the check pending forever, and the PR can never merge. The screenshots PR that just went in would have been unmergeable. The filtering moves into the job. It always runs, so the check always reports; the steps that cost anything are guarded and skip on a docs-only change. This is the shape PerformanceMonitor's build.yml already uses, and its comment says why. The filter is a positive list of code paths rather than the old ignore list inverted. paths-filter ORs the patterns within a filter, so a stack of negated patterns matches whenever a file fails any one of them, which for a docs-only change is always true. Listing what IS code cannot go wrong that way. PlanViewer.Ssms and PlanViewer.Ssms.Installer stay out because they are not in the solution and ci.yml never built them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Reviewed. This does what it says: the job now always runs and reports, only the expensive steps are gated by One thing worth double-checking, not a blocker: the old |
Prerequisite for requiring CI on
dev. Doing it in the other order would break the repo.The problem
ci.ymlskipped itself on docs-only changes via workflow-levelpaths-ignore. That's harmless while nothing depends on the check, and fatal the moment it's required: a workflow skipped by a path filter reports nothing at all, so GitHub leaves the required check pending forever and the PR can never merge.PR #535 (screenshots and README) would have been permanently unmergeable.
The fix
The filtering moves into the job. The job always runs, so the check always reports; the steps that cost anything are guarded with
if:and skip on a docs-only change. A skipped step still lets the job finish green.This is the shape PerformanceMonitor's
build.ymlalready uses, and its own comment spells out the same reasoning about checks that never report.One detail worth flagging
The filter is a positive list of code paths, not the old ignore list inverted.
dorny/paths-filterORs the patterns within a filter, so a stack of negated patterns matches whenever a file fails any one of them — for a docs-only change that's always true, and it would have reportedcode=truefor every PR, quietly defeating the point. Listing what is code can't fail that way.PlanViewer.SsmsandPlanViewer.Ssms.Installerstay out, matching the old behaviour: they aren't inPlanViewer.slnandci.ymlnever built them.Once this is in,
build-and-testgets added as a required check ondev.🤖 Generated with Claude Code