Skip to content

[automated] ci: streamline test job fan-out - #19761

Merged
Ankit Jain (radical) merged 2 commits into
mainfrom
ankj/streamline-ci-workflows
Sep 2, 2026
Merged

Ankit Jain (radical) merged 2 commits into
mainfrom
ankj/streamline-ci-workflows

Conversation

@radical

@radical Ankit Jain (radical) commented Aug 27, 2026 •

Copy link
Copy Markdown
Member

[automated]

Description

PR CI now uses five selector-friendly matrix lanes and one extension test path. This removes the unused overflow lane and the dedicated extension-release check from ordinary job graphs while making matrix lanes easier to identify.

Root cause. Extension unit testing and VSIX packaging were embedded in tests.yml, while trusted extension release PRs bypassed that workflow through a separate classifier and top-level job. The matrix splitter also maintained a sixth overflow lane even though current lanes fit under GitHub's 256-job limit.

The fix. Extension unit testing and optional packaging now live in extension-unit-tests.yml. All required PRs enter the selector-driven tests.yml graph; changes limited to extension/package.json and extension/CHANGELOG.md select extension unit and E2E validation without selecting any .NET test projects. That coverage is a strict superset of the removed release job, so its classifier and special aggregation path are no longer needed.

The matrix splitter now emits five dependency lanes with static OS-qualified names. It fails explicitly if any lane exceeds 256 entries instead of keeping an unused overflow path that could silently complicate selection and aggregation.

Coverage is preserved for rolling builds. Non-PR events still force SelectTests to select ALL, so rolling builds run the complete test graph. Matrix enumeration criteria are unchanged; this PR only repartitions those entries. PRs use the selector from #19688, and an exact release-file regression test verifies that extension unit and E2E jobs are selected with no .NET matrix.

Validation.

  • CI run 33193309432 passed on attempt 2 for commit 4d0e5caede677d03cc0abd1e8bb3030b4e44046d, with 385 successful checks and two intended skips.
  • All 313 matrix entries ran exactly once: 204 no-package, 12 Linux package, 12 Windows package, 0 macOS package, and 85 CLI-archive entries.
  • Extension unit/package validation and all 34 extension E2E shards passed.
  • The only first-attempt failure was an unrelated Aspire.Hosting.RemoteHost.Tests named-pipe startup timeout; its automatic retry passed.
  • Restore and a full repository build passed locally with no warnings, along with 150 focused workflow, selector, and matrix tests.
  • Extension compilation, lint, and unit validation passed locally with 2,752 tests passing and five pending.
  • actionlint reported no new diagnostics after excluding the repository's existing custom-runner and local-action metadata diagnostics.

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No

Copilot AI balanced review requested due to automatic review settings August 27, 2026 23:17
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 19761

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 19761"

@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Streamlines PR CI test fan-out while preserving extension and rolling-build coverage.

Changes:

  • Extracts extension unit testing and VSIX packaging into a reusable workflow.
  • Replaces six matrix buckets with five named lanes and explicit size validation.
  • Removes the trusted extension-release fast path and routes release files through selective CI.

Reviewed changes

Copilot reviewed 18 out of 18 changed files in this pull request and generated no comments.

Show a summary per file
File Description
.github/actions/is-trusted-extension-release-pr/action.yml Removes the obsolete classifier action.
.github/actions/is-trusted-extension-release-pr/validate.ps1 Removes classifier validation logic.
.github/workflows/ci.yml Uses one selector-driven CI path.
.github/workflows/extension-unit-tests.yml Adds reusable extension testing and packaging.
.github/workflows/tests.yml Uses five named matrix lanes and the extension workflow.
docs/ci/TestingOnCI.md Documents revised selection and matrix behavior.
docs/ci/ci-pipeline-optimizations.md Removes the overflow lane documentation.
eng/github-ci/test-trigger-map.yml Routes the new extension workflow.
eng/scripts/expand-test-matrix-github.ps1 Removes obsolete overflow documentation.
eng/scripts/split-test-matrix-by-deps.ps1 Removes overflow and enforces the 256-entry limit.
extension/src/test/e2eBridgeProductionGate.test.ts Targets the extracted packaging workflow.
tests/Infrastructure.Tests/Pipelines/ExtensionE2eWorkflowTests.cs Verifies extracted VSIX production behavior.
tests/Infrastructure.Tests/PowerShellScripts/ExpandTestMatrixGitHubTests.cs Updates matrix assertions for five lanes.
tests/Infrastructure.Tests/PowerShellScripts/SplitTestMatrixByDepsTests.cs Tests explicit matrix-limit failure.
tests/Infrastructure.Tests/PowerShellScripts/TrustedExtensionReleasePrTests.cs Removes obsolete classifier tests.
tests/Infrastructure.Tests/TestTriggerMap/SelectTestsAcceptanceTests.cs Covers extension release-file selection.
tests/Infrastructure.Tests/TestTriggerMap/TestTriggerMapTests.cs Verifies workflow-to-job routing.
tests/Infrastructure.Tests/WorkflowScripts/ExtensionWorkflowTests.cs Verifies the consolidated CI workflow contracts.

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

This comment has been minimized.

Base automatically changed from ankj/enable-conditional-test-runs to main August 28, 2026 07:04
@radical
Ankit Jain (radical) force-pushed the ankj/streamline-ci-workflows branch from 7e6f8e2 to ecf3fad Compare August 28, 2026 07:08
@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

Ankit Jain (radical) and others added 2 commits August 28, 2026 13:03
VS Code extension unit testing and optional VSIX packaging were embedded
in tests.yml, while the matrix splitter maintained a dormant overflow
lane. This coupled extension artifacts to the full test workflow and
made matrix selection and aggregation harder to follow.

Move extension unit testing and packaging into a focused reusable
workflow, and point the production-gate assertions at their new owner.
Replace the overflow lane with an explicit 256-entry guard, give package
lanes stable OS-qualified names, and route the focused jobs through the
test selector.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 062c6fdf-bd7d-4ceb-926e-ebe8a10eecda
Extension release PRs used a dedicated trusted classifier and workflow
call to avoid the full test graph. With selective test enforcement on
main, the exact release file set selects extension unit and E2E jobs
without selecting any .NET test projects.

Remove the classifier and special job so release PRs use selector-driven
CI. Add regression coverage for the release file set and document that
non-PR rolling builds still force full test selection.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 062c6fdf-bd7d-4ceb-926e-ebe8a10eecda
@radical
Ankit Jain (radical) force-pushed the ankj/streamline-ci-workflows branch from ecf3fad to 4d0e5ca Compare August 28, 2026 17:08
@github-actions

Copy link
Copy Markdown
Contributor

Tests selector

Selects the full PR test matrix + all PR-gated jobs (ALL) — a rule matching '.github/actions/is-trusted-extension-release-pr/action.yml' selects ALL

Advisory workflow impact (4)

  • Aspire.Deployment.EndToEnd.Tests (deployment workflow-only)
  • Aspire.EndToEnd.Tests (outerloop-only)
  • Aspire.Oracle.EntityFrameworkCore.Tests (outerloop-only)
  • deployment-e2e (schedule/dispatch-only)

Selection computed for commit 4d0e5ca.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 18 out of 18 changed files in this pull request and generated no new comments.

@radical
Ankit Jain (radical) merged commit 126ed92 into main Sep 2, 2026
768 of 771 checks passed
@radical
Ankit Jain (radical) deleted the ankj/streamline-ci-workflows branch September 2, 2026 18:16
@microsoft-github-policy-service microsoft-github-policy-service Bot added this to the 13.6 milestone Sep 2, 2026
@aspire-repo-bot

Copy link
Copy Markdown
Contributor

✅ No documentation update needed.

Step 5 branch taken: docs_optional → build_or_ci_only

Triggered signals: none (signal_count = 0). recommendation was docs_optional.

Allowlist justification: All 18 changed files fall under CI/build infrastructure or internal engineering docs, matching the build_or_ci_only category:

  • .github/actions/is-trusted-extension-release-pr/* (removed)
  • .github/workflows/ci.yml, .github/workflows/tests.yml, .github/workflows/extension-unit-tests.yml
  • eng/github-ci/test-trigger-map.yml, eng/scripts/expand-test-matrix-github.ps1, eng/scripts/split-test-matrix-by-deps.ps1
  • docs/ci/TestingOnCI.md, docs/ci/ci-pipeline-optimizations.md (internal engineering docs in the microsoft/aspire repo itself, not the microsoft/aspire.dev public docs site)
  • tests/Infrastructure.Tests/** and extension/src/test/e2eBridgeProductionGate.test.ts (test-only changes)

This PR restructures CI job fan-out/matrix splitting for internal test infrastructure. It has no user-facing behavior, no new/changed public API, CLI options, MCP tools, dashboard pages, or configuration surface. No documentation update is needed on microsoft/aspire.dev.

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

⚠️ CI Failure Analysis: Possible Flaky Test(s)

The CI build failed due to test failure(s) that appear unrelated to the PR changes. These may be flaky tests.

Suspected flaky test(s):

  • Aspire.Dashboard.Components.Tests.Pages.MetricsTests.ChangeResource_MeterAndInstrumentNotOnNewResources_InstrumentCleared in job Tests / No-package tests (regular, Aspire.Dashboard.Components.Tests, Dashboard.Components, Dashboard.Components (windows-latest)
    • Error: Microsoft.Data.Sqlite.SqliteException : SQLite Error 1: 'expected 0 columns for '' but got 13'.
    • Stack Trace (first frames):
      at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements()+MoveNext()
         at Microsoft.Data.Sqlite.SqliteCommand.GetStatements()+MoveNext()
         at Microsoft.Data.Sqlite.SqliteDataReader.NextResult()
         at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior)
         at Aspire.Dashboard.ServiceClient.TracingSqliteConnection.TracingDbCommand.ExecuteDbDataReader(CommandBehavior behavior) in /_/src/Aspire.Dashboard/ServiceClient/TracingSqliteConnection.cs:line 296
      
    • Why likely flaky: Matches known recurring cause 'dashboard-components-sqlite-column-count-mismatch' — an intermittent SQLite column-count assertion error in MetricsTests. The PR only changes CI workflow/test-trigger-map files, none of which touch Aspire.Dashboard or SqliteTelemetryRepository source.

Suggested actions:

  • Re-run the failed CI jobs to confirm if the failure is intermittent
  • If the test continues to fail, consider quarantining it using /quarantine-test <test name> <issue URL>
  • Search existing issues to see if this test is already known to be flaky

You can re-run the failed jobs from the workflow run page.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants