Skip CI entirely for API/ATS baseline-only PRs - #19939
Skip CI entirely for API/ATS baseline-only PRs#19939Ankit Jain (radical) with Copilot wants to merge 3 commits into
Conversation
There was a problem hiding this comment.
Copilot wasn't able to review any files in this pull request.
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
🟡 Changes recommended
The glob mishandles suppression and component files, while removed routing leaves integration export changes without polyglot validation.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 4/4 changed files
- Comments generated: 2
- Review effort level: Balanced
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 19939Or
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 19939" |
db6e7a9 to
76fd8db
Compare
There was a problem hiding this comment.
🟡 Changes recommended
The skip glob also excludes real starter-template source files, and the new polyglot rule over-routes unrelated Hosting projects.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 4/4 changed files
- Comments generated: 3
- Review effort level: Balanced
This comment has been minimized.
This comment has been minimized.
f8f6d69 to
e4acd5c
Compare
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
🟡 Changes recommended
The suppression-baseline regression test uses a nonexistent path and does not guard against an overbroad api/** skip pattern.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 4/4 changed files
- Comments generated: 1
- Review effort level: Balanced
e4acd5c to
da67569
Compare
This comment has been minimized.
This comment has been minimized.
Co-authored-by: radical <1472+radical@users.noreply.github.com>
Keep real template sources and suppression baselines in CI while skipping generated API artifacts. Route hosting projects with polyglot fixtures through the job without over-matching unrelated projects. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 8c5beb4c-0641-4918-8b29-d53c83727a78
Point the prefilter regression test at the actual api/*.tscompat.suppression.txt location. This catches the overbroad api/** skip pattern that would hide the TypeScript compatibility route. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 8c5beb4c-0641-4918-8b29-d53c83727a78
da67569 to
06c985d
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
Polyglot routing omits two source packages consumed by runtime fixtures, allowing relevant changes to skip validation.
Review details
Suppressed comments (3)
eng/github-ci/test-trigger-map.yml:447
Aspire.Hosting.Azure.ConnectorNamespaceis missing from this curated list, buttests/PolyglotAppHosts/Aspire.Hosting.Azure.Sandboxes/TypeScript/aspire.config.json:7restores that source project at runtime. It has no project-reference edge that Layer 1 can use, so ConnectorNamespace source changes will not selectjob:polyglot. Add it to this rule.
- Aspire.Hosting.Azure.CognitiveServices
- Aspire.Hosting.Azure.ContainerRegistry
eng/github-ci/test-trigger-map.yml:452
Aspire.Hosting.Azure.Kubernetesis also a runtime package of the polyglot AppHost (tests/PolyglotAppHosts/Aspire.Hosting/TypeScript/aspire.config.json:8, with equivalent Java/Python fixtures), but it is absent here and has no project-reference edge to a listed fixture owner. With the ATS path rule removed, a source-plus-baseline change for this integration no longer selectsjob:polyglot. Add this project to the rule.
- Aspire.Hosting.Azure.KeyVault
- Aspire.Hosting.Azure.Kusto
tests/Infrastructure.Tests/TestTriggerMap/SelectTestsAcceptanceTests.cs:1083
- This regression test only samples an integration whose fixture directory has the same name, so it cannot catch omitted cross-fixture runtime packages. That gap currently lets both
Aspire.Hosting.Azure.KubernetesandAspire.Hosting.Azure.ConnectorNamespacebe absent from the polyglot project rule. Add focused coverage for an indirectly consumed package, or structurally compare fixturepackagesentries with the curated rule.
var mixed = selector.Select([sourceFile], [integrationName], new SelectorOptions());
Assert.False(mixed.SelectsAll);
Assert.NotEmpty(mixed.TestProjects.Union(mixed.Jobs));
Assert.Contains("job:polyglot", mixed.Jobs);
- Files reviewed: 4/4 changed files
- Comments generated: 0 new
- Review effort level: Balanced
There was a problem hiding this comment.
🟢 Approval recommended
The skip patterns, project routing, tests, and documentation are consistent and preserve required source-change coverage.
Review details
- Files reviewed: 4/4 changed files
- Comments generated: 0 new
- Review effort level: Balanced
Tests selector1 / 99 PR test projects · 0 PR jobs, from 3 changed files. Selected PR test projects (1 / 99)
Selected PR jobs (0)none How these were chosen — grouped by what changed📄 📄 🧪 Job reasonsnone Selection computed for commit |
Description
PRs that touch only generated API baseline files still ran the full CI matrix even though nothing build- or test-relevant changed (e.g. #19938, #19936). Those baselines are generated release artifacts, so a baseline-only PR should skip CI entirely — while a PR that touches a baseline alongside real source must keep routing normally for the source file.
Skip gate
Added the generated baseline files to
eng/github-ci/ci-skip-entirely-patterns.txt(the top-level CI skip gate):These patterns match only the direct
api/child of a project directory. A recursivesrc/**/api/**glob was deliberately rejected: it also matches real starter-template sources such assrc/Aspire.Cli/Templating/Templates/java-starter/api/, and it would swallow*.tscompat.suppression.txt— which is not a generated baseline and must stay visible to thetypescript-api-compatroute.Selector map
src/Aspire.Hosting*/api/*.ats.txtpath rule. The prefilter reads the same skip-patterns file, so baseline files are now dropped before either selector layer runs and the rule can never fire.job:polyglotfor mostAspire.Hosting.*integrations, so removing it would have silently dropped polyglot coverage for ordinary integration source changes. To preserve it, every project that owns atests/PolyglotAppHosts/<project>fixture is now listed in the polyglotaffected_project_rulesentry. This is the correct home per the section's invariant — production-project triggers belong inaffected_project_rules, notpath_rules— and unlike a family-wideAspire.Hosting*glob it does not pull in fixture-less projects such asAspire.Hosting.TasksandAspire.Hosting.Analyzers.docs/ci/test-trigger-map.mdto match.Test coverage
tests/Infrastructure.Tests/TestTriggerMap/SelectTestsAcceptanceTests.csgains assertions that fail if the routing regresses:src/*/api/,src/Components/*/api/) are prefiltered.api/*.tscompat.suppression.txtis not prefiltered and still routesjob:typescript-api-compat.Templates/.../api/path are not prefiltered.job:polyglot.Verification
Behavior was confirmed by running the selector rather than reading the YAML:
src/Components/Aspire.Azure.AI.Inference/api/Aspire.Azure.AI.Inference.cssrc/Aspire.Hosting/api/Aspire.Hosting.tscompat.suppression.txtjob:typescript-api-compatsrc/Aspire.Cli/Templating/Templates/java-starter/api/Foo.javasrc/Aspire.Hosting.Redis/RedisBuilderExtensions.csjob:polyglotdotnet test --project tests/Infrastructure.Tests/Infrastructure.Tests.csproj --no-launch-profile -- --filter-namespace "*.TestTriggerMap" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"— 218 passed, 0 failed.Checklist