Pipelines | Name the agent image parameter poolImage everywhere and require it - #4626
Conversation
There was a problem hiding this comment.
🟢 Approval recommended
The refactor preserves image selections, and all 38 call sites supply the 19 newly required template parameters.
Pull request overview
Standardizes agent-image template parameters as poolImage across CI/PR pipelines while preserving the image selections introduced by #4515.
Changes:
- Renames all custom image parameters to
poolImage. - Removes template defaults and explicitly supplies images at every call site.
- Retains the standalone package pipeline’s queue-time default.
File summaries
| File | Description |
|---|---|
eng/pipelines/stages/verify-nuget-packages-ci-stage.yml |
Requires poolImage for verification. |
eng/pipelines/stages/generate-secrets-ci-stage.yml |
Requires poolImage for secret generation. |
eng/pipelines/stages/compute-versions-ci-stage.yml |
Requires poolImage for version computation. |
eng/pipelines/stages/build-sqlserver-package-ci-stage.yml |
Supplies the pack-job image. |
eng/pipelines/stages/build-sqlclient-package-ci-stage.yml |
Supplies the NuGet build image. |
eng/pipelines/stages/build-logging-package-ci-stage.yml |
Supplies the logging pack image. |
eng/pipelines/stages/build-azure-package-ci-stage.yml |
Renames test images and supplies the pack image. |
eng/pipelines/stages/build-abstractions-package-ci-stage.yml |
Renames test images and supplies the pack image. |
eng/pipelines/pr/stages/test-stages.yml |
Passes platform images using poolImage. |
eng/pipelines/pr/stages/pack-stage.yml |
Renames the required pack-stage image parameter. |
eng/pipelines/pr/stages/generate-secrets-stage.yml |
Renames the required secrets-stage image parameter. |
eng/pipelines/pr/stages/collect-coverage-stage.yml |
Renames the required coverage image parameter. |
eng/pipelines/pr/sqlclient-pr-pipeline.yml |
Updates PR stage call sites. |
eng/pipelines/pr/jobs/test-sqlclientmanual-job.yml |
Standardizes the manual-test image parameter. |
eng/pipelines/pr/jobs/test-buildproj-job.yml |
Standardizes the build-project image parameter. |
eng/pipelines/jobs/test-azure-package-ci-job.yml |
Standardizes Azure test image references. |
eng/pipelines/jobs/test-abstractions-package-ci-job.yml |
Standardizes Abstractions test image references. |
eng/pipelines/jobs/pack-sqlserver-package-ci-job.yml |
Requires an explicit pack image. |
eng/pipelines/jobs/pack-logging-package-ci-job.yml |
Requires an explicit pack image. |
eng/pipelines/jobs/pack-azure-package-ci-job.yml |
Requires an explicit pack image. |
eng/pipelines/jobs/pack-abstractions-package-ci-job.yml |
Requires an explicit pack image. |
eng/pipelines/dotnet-sqlclient-ci-core.yml |
Supplies explicit images to core stages and jobs. |
eng/pipelines/common/templates/stages/ci-run-tests-stage.yml |
Passes matrix images as poolImage. |
eng/pipelines/common/templates/jobs/ci-run-tests-job.yml |
Standardizes test-job image handling. |
eng/pipelines/common/templates/jobs/ci-code-coverage-job.yml |
Requires an explicit coverage image. |
eng/pipelines/common/templates/jobs/ci-build-nugets-job.yml |
Standardizes the NuGet build image parameter. |
eng/pipelines/ci/stress/sqlclient-ci-stress-stage.yml |
Updates stress-job image arguments. |
eng/pipelines/ci/stress/sqlclient-ci-stress-pipeline.yml |
Updates the secrets-stage image argument. |
eng/pipelines/ci/stress/sqlclient-ci-stress-job.yml |
Standardizes stress-job image handling. |
eng/pipelines/ci/package/sqlclient-ci-package-pipeline.yml |
Renames the queue-time image parameter while retaining its default. |
eng/pipelines/ci/managed-instance/sqlclient-ci-managed-instance-stage.yml |
Updates managed-instance job arguments. |
eng/pipelines/ci/managed-instance/sqlclient-ci-managed-instance-job.yml |
Standardizes the managed-instance image parameter. |
eng/pipelines/ci/kerberos/sqlclient-ci-kerberos-pipeline.yml |
Updates the coverage-job image argument. |
Review details
- Files reviewed: 33/33 changed files
- Comments generated: 0
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
a380770 to
9d2eb31
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved conflict markers invalidate the Kerberos YAML, and managed-instance callers still use the removed parameter name.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 32/32 changed files
- Comments generated: 2
- Review effort level: Balanced
There was a problem hiding this comment.
🟡 Changes recommended
Managed-instance callers are now incompatible with the renamed required parameter, and the Kerberos templates were omitted from the stated repository-wide rename.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Suppressed comments (1)
eng/pipelines/ci/managed-instance/sqlclient-ci-managed-instance-job.yml:75
- All four callers in
sqlclient-ci-managed-instance-stages.ymlstill passvmImage(lines 56, 70, 82, and 100). Because this renamed parameter has no default, Azure template expansion will receive an unexpectedvmImagekey and no requiredpoolImage, so the managed-instance pipeline cannot compile. Rename those caller keys topoolImage.
- name: poolImage
- Files reviewed: 31/31 changed files
- Comments generated: 1
- Review effort level: Balanced
… templates Complete the rename started in PR #4626 so template expansion matches the renamed declarations: - sqlclient-ci-kerberos-job.yml: rename the vmImage parameter to poolImage and update the ImageOverride demand. - sqlclient-ci-kerberos-stages.yml: rename all four call-site keys. - sqlclient-ci-managed-instance-stages.yml: rename all four call-site keys to match the already-renamed poolImage parameter. Addresses review feedback on PR #4626.
There was a problem hiding this comment.
🟢 Approval recommended
All required template call sites supply poolImage; only the non-blocking validation counts in the description need correction.
Review details
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
eng/pipelines/ci/package/sqlclient-ci-package-pipeline.yml:46
- The validation counts are stale: the current tree has 21
poolImagedeclarations (20 required template parameters plus this queue-time parameter) and 41 textual template call sites, rather than 20 and 38. Please update the PR description and ensure the effective-image comparison covers all 41 call sites so its validation evidence matches the final diff.
- Files reviewed: 34/34 changed files
- Comments generated: 0 new
- Review effort level: Balanced
Codecov Report✅ All modified and coverable lines are covered by tests.
Additional details and impacted files@@ Coverage Diff @@
## main #4626 +/- ##
==========================================
- Coverage 71.88% 64.04% -7.84%
==========================================
Files 290 284 -6
Lines 45056 68006 +22950
==========================================
+ Hits 32389 43557 +11168
- Misses 12667 24449 +11782
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
9d91494 to
1102240
Compare
… templates Complete the rename started in PR #4626 so template expansion matches the renamed declarations: - sqlclient-ci-kerberos-job.yml: rename the vmImage parameter to poolImage and update the ImageOverride demand. - sqlclient-ci-kerberos-stages.yml: rename all four call-site keys. - sqlclient-ci-managed-instance-stages.yml: rename all four call-site keys to match the already-renamed poolImage parameter. Addresses review feedback on PR #4626.
1102240 to
8c1e09c
Compare
There was a problem hiding this comment.
🟢 Approval recommended
Template declarations, references, and callers are consistently aligned, with successful pipeline runs confirming expansion behavior.
Review details
- Files reviewed: 34/34 changed files
- Comments generated: 0 new
- Review effort level: Balanced
The image parameter was spelled five different ways across the pipeline templates - vmImage, image, agentImage, imageOverride and platformImage - so a reader had to check each template to learn what to pass. Rename all twenty declarations, references and call-site keys to 'poolImage', alongside the 'poolName' parameter it accompanies. Remove the image defaults from the nineteen templates that have callers, and pass the value explicitly at the nine call sites that had been inheriting one. A default meant a template silently picked an agent image that its caller never mentioned, which is easy to miss when auditing which images a pool must provide. Every call site now names its image. The queue-time parameter on the CI package pipeline keeps its default, since it has no caller to supply one, and the default lets a manual run pick a Windows agent when that is what we want to validate. This does not change which image any job runs on. All 38 call sites resolve to the same image as before, whether they previously passed a value or inherited a default. Note that ADO's own 'vmImage' pool keyword and the 'imageOverride' demand capability keep their names; only our parameters are renamed.
… templates Complete the rename started in PR #4626 so template expansion matches the renamed declarations: - sqlclient-ci-kerberos-job.yml: rename the vmImage parameter to poolImage and update the ImageOverride demand. - sqlclient-ci-kerberos-stages.yml: rename all four call-site keys. - sqlclient-ci-managed-instance-stages.yml: rename all four call-site keys to match the already-renamed poolImage parameter. Addresses review feedback on PR #4626.
8c1e09c to
c88fd44
Compare
There was a problem hiding this comment.
🟢 Approval recommended
All 41 affected call sites supply the required parameter, preserve their prior images, and have corroborating pipeline validation.
Review details
- Files reviewed: 34/34 changed files
- Comments generated: 0 new
- Review effort level: Balanced
priyankatiwari08
left a comment
There was a problem hiding this comment.
Verified every caller of the renamed templates passes poolImage; no stale vmImage/platformImage/imageOverride parameter references remain. One concern:
sqlclient-ci-package-pipeline.yml:agentImageis a queue-time parameter, so renaming it breaks saved run configurations and any API/CLI trigger that passesagentImage.
Summary
The agent image parameter was spelled five different ways across the pipeline templates, and ten of them carried a default, so a template could silently select an agent image that its caller never mentioned. This makes the parameter uniform and makes every image an explicit choice at the call site.
poolImage. All 21 declarations, references and call-site keys, replacingvmImage(16),platformImage(2),image(1),agentImage(1) andimageOverride(1). This pairs with thepoolNameparameter it always accompanies.ADO-UB24for automated runs.Not renamed
These keep their names because they are Azure Pipelines' own vocabulary, not ours:
vmImage:key inside apool:block (4 sites)imageOverridedemand capability (22 sites)Also untouched: the
imagefield of the PR pipeline'splatformsobjects and the CI matrix'simagesmap, which are data structures rather than template parameters; andeng/pipelines/onebranch/, which governs its own pools.Call sites that gained an explicit image
dotnet-sqlclient-ci-core.ymlADO-UB24dotnet-sqlclient-ci-core.ymlADO-UB24dotnet-sqlclient-ci-core.ymlADO-Win25dotnet-sqlclient-ci-core.ymlADO-UB24build-abstractions-package-ci-stage.ymlADO-UB24build-azure-package-ci-stage.ymlADO-UB24build-logging-package-ci-stage.ymlADO-UB24build-sqlserver-package-ci-stage.ymlADO-UB24build-sqlclient-package-ci-stage.ymlADO-Win25Validation
This is a pure refactor - no job changes the image it runs on.
eng/pipelines/**poolImagedeclarationspoolImageThe last check resolves every call site to the image it actually uses - explicit value, or the default it inherited - at both the parent commit and this branch, and confirms all 41 land on the identical image.
These changes have not been executed against Azure DevOps.
Pipeline runs
Base URL for the Public project:
https://dev.azure.com/SqlClientDrivers/public/_build/results?buildId=Public
PR-SqlClient-Project(2197)sqlclient-pr(2281)sqlclient-ci-package(2300)refs/pull/4626/mergeCI-SqlClient(1879)refs/pull/4626/mergeCI-SqlClient-Package(1917),PR-SqlClient-Package(2198) andsqlclient-ci-stress(2250) are affected but disabled, so there is nothing to run.ADO.Net
These build the internal
dotnet-sqlclientrepo, so no GitHub PR can reach them. They are queued manually against a branch carrying this change.sqlclient-ci-kerberosandsqlclient-ci-managed-instancematter most - they are the only affected pipelines whose templates a GitHub PR cannot exercise at all.All runs below are on
refs/heads/dev/paul/pool-imagein the internal repo.sqlclient-ci-kerberos(2306)sqlclient-ci-managed-instance(2308)sqlclient-ci-package(2277)sqlclient-pr(2271)MDS Main CI(1825)MDS Main CI-Package(1933)MacOSLatest_Sql25, see note belowA
poolImagemismatch is a template-expansion error, which Azure DevOps reports at queue time before any agent is allocated - so a run that compiles is already proof for these, even if it is cancelled before the tests finish.sqlclient-ci-kerberosandsqlclient-ci-managed-instanceboth passed end to end, so the two templates that no GitHub PR can reach are verified by real runs rather than by compilation alone.Failures and retries
Every failure observed was an infrastructure flake on agents this change does not touch. Across all 10 runs,
MacOSLatest_Sql25andWin11_Azure_Sql_ARM64were the only stages that ever failed - no stage that consumes a renamedpoolImageparameter failed in any run.MacOSLatest_Sql25Configure SQL Server [macOS]exits 1, thenPublish Test Artifactsfinds noTestResults. On the retry inMDS Main CI-Packagethe job instead hit the 90 minute timeout on hosted agentAzure Pipelines 6.pool: vmImage: macos-latest, one of the 4 Azure Pipelines keys deliberately left unrenamedWin11_Azure_Sql_ARM64Download SqlServer Package ArtifactsreturnsToo Many Requests; passed on retryRetries cleared the macOS stage in
PR-SqlClient-Project,CI-SqlClientandMDS Main CI, and the ARM64 stage inMDS Main CI-Package. Only the macOS stage inMDS Main CI-Packageis still red, for the timeout above.The
partially succeededresults are the normal outcome for these pipelines: the quarantined flaky-test steps reportsucceededWithIssues, which downgrades the run without any task failing.Not affected
OneBranch (2240/2241), perf (2305/2311/2313),
github-sync(2263), the sni and ctaip pipelines, and the docs pipelines.