[CI] Support pre-provisioned images, migrate CI scripts, add macOS host prep, support T3-Workloads - #1089
[CI] Support pre-provisioned images, migrate CI scripts, add macOS host prep, support T3-Workloads#1089Elliot (theelliotm) wants to merge 47 commits into
Conversation
…m getting removed
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…/microsoft/mxc into user/emichlin/validation-infra-3
|
Azure Pipelines: There may be pipelines that require an authorized user to comment /azp run to run. |
|
Azure Pipelines: There may be pipelines that require an authorized user to comment /azp run to run. |
There was a problem hiding this comment.
🟡 Changes recommended
Exception masking in the T3 suite and destructive PATH rebuilding can produce incorrect CI outcomes.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Modernizes validation CI for pre-provisioned hosts, relocates dispatchers, adds macOS preparation, and enables T3 workload testing.
Changes:
- Adds cross-platform tooling inventory and macOS host preparation.
- Runs real-world workloads for
process-t3. - Migrates CI dispatchers and updates documentation/matrix configuration.
File summaries
| File | Description |
|---|---|
tests/scripts/WinProcessContainer-Tests.ps1 |
Makes OS discovery resilient. |
tests/scripts/T3-Workloads.ps1 |
Adds skips, drive-root grants, ownership repair, and JSON results. |
tests/scripts/README.md |
Documents suites and relocated dispatchers. |
scripts/ci/validation-test-matrix.json |
Updates canary backends and removes staggering. |
scripts/ci/run_backend_validation_tests.sh |
Uses relocated test-script paths. |
scripts/ci/run_backend_validation_tests.ps1 |
Dispatches T3 workloads and relocated suites. |
scripts/ci/prepare-windows-host.ps1 |
Inventories and installs Windows tooling. |
scripts/ci/prepare-macos-host.sh |
Adds macOS host preparation. |
scripts/ci/prepare-linux-host.sh |
Centralizes package installation and inventories tooling. |
docs/playground-limitations.md |
Documents elevated Git repository ownership behavior. |
docs/ci-validation-infrastructure.md |
Documents the revised validation infrastructure. |
.github/workflows/Validation.Tests.Matrix.Job.yml |
Uses new preparation and dispatcher paths. |
.github/copilot-instructions.md |
Updates repository CI guidance. |
Review details
Suppressed comments (1)
docs/ci-validation-infrastructure.md:223
- This paragraph duplicates lines 209–215 verbatim. Remove the repeated block so the delayed-start guidance appears only once.
Leave the section out (or empty) and every job starts as soon as its runner is
ready. A backend id that no plan schedules is accepted; it just never applies.
Do keep in mind that the runner is held while it sleeps — Actions can't defer
allocating a matrix job, so the wait has to happen inside it. Use no more than
the contention calls for. This spreads simultaneous load and nothing else; a
single download that stalls on its own is unaffected.
- Files reviewed: 13/13 changed files
- Comments generated: 2
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
🔵 Needs a closer look
The drive-root workaround fails when the workload scratch directory is located outside the system drive.
Review details
Suppressed comments (3)
Previously missed (3) — in code that hasn't changed since the last review.
tests/scripts/T3-Workloads.ps1:335
- This always grants the system drive, but the ancestor chain being fixed belongs to the caller-selectable
$ScratchRoot. IfTEMP/RUNNER_TEMPor a manual scratch directory is onD:, W4/W5/W17 still cannot traverse that drive and fail despite-GrantDriveRoot. Keep the system-drive grant needed by pre-7.7 pwsh, but also grant the scratch drive root.
.github/copilot-instructions.md:106 - This says jobs never install workload interpreters, but the newly documented
Install-PackagedToolingdirectly below installswinappandopensslin every Windows job. State that exception here so these repository instructions are internally consistent.
docs/ci-validation-infrastructure.md:215 - This paragraph is duplicated verbatim immediately below at lines 217–223. Remove one copy so the
backendDelayedStartguidance is not repeated.
- Files reviewed: 13/13 changed files
- Comments generated: 0 new
- Review effort level: Balanced
There was a problem hiding this comment.
🟡 Changes recommended
The winget repair cannot find App Installer when it is unregistered for the current CI account.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Suppressed comments (1)
scripts/ci/prepare-windows-host.ps1:259
- The Windows PowerShell fallback repeats the current-user-only package query, so it still cannot locate App Installer when that package is registered for another image account but not the CI account. Use the all-users inventory here as well.
$package = Get-AppxPackage -Name Microsoft.DesktopAppInstaller -ErrorAction Stop |
- Files reviewed: 13/13 changed files
- Comments generated: 2
- Review effort level: Balanced
There was a problem hiding this comment.
🟡 Changes recommended
The drive-root workaround targets the system drive rather than the volume containing the configured scratch directory.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 13/13 changed files
- Comments generated: 1
- Review effort level: Balanced
📖 Description
Images now come pre-provisioned with
pwsh,git,node,npm,npx,python,pip,dotnet,az,gh,openssl, plusnuget,winapp,winget,scoop, andchocoon Windows only, andbrewon MacOS only.All three OS host prep scripts (including the new MacOS script) verify the pre-provisioned software
and install any remaining software the provisioning step isn't capable of installing (e.g.
winget) or is only relevant forthe backend being tested (e.g.
bwraporlxc)T3-Workloads now runs in CI
T3-Workloads.ps1now runs during the Windowsprocess-t3CI workflows. This script runs real-world E2E tests and submits results. This is in preparation for all backends to have tests created both internally and from industry partners that depend on a variety of programs and interpreters.T3-Workloads.ps1now also has an optional parameter that overrides the dependency on pwsh 7.7 while pwsh 7.7 is still in preview.Additional Changes
prepare-macos-host.shtests/scripts/run_ci_backend_tests.{ps1,sh}→scripts/ci/run_backend_validation_tests.{ps1,sh}🔍 Validation
Ran the
nightlyCI workflow, which covers all supported OS versions and backends. Separately run a dummy MacOS test. All now properly inventory installed software.✅ Checklist
Cargo.lock, thedependency-feed-checkcheck passes (see docs/pull-requests.md)📋 Issue Type
Microsoft Reviewers: Open in CodeFlow