Skip to content
Merged
Show file tree
Hide file tree
Changes from 48 commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
86d6968
Move CI and PR pipelines to SQL Server 2025 agent images
cheenamalhotra Aug 7, 2026
0acfd99
Clarify why the Linux enclave stage key is left unchanged
cheenamalhotra Aug 8, 2026
ff9e6a7
Install sqlcmd on Linux agents before configuring SQL Server
cheenamalhotra Aug 10, 2026
a2db280
Add .NET 10 test coverage to the CI-SqlClient pipeline
cheenamalhotra Aug 7, 2026
7c77458
Move CI and PR jobs off Microsoft-hosted agents
cheenamalhotra Aug 7, 2026
313eabb
Move the CI package pipeline to the SQL Server 2025 agent images
cheenamalhotra Aug 8, 2026
8de8b1f
Move the GitHub sync pipeline off the hosted ubuntu-latest agent
cheenamalhotra Aug 8, 2026
410e337
Support both 1ES and hosted pools in parameterized job templates
cheenamalhotra Aug 8, 2026
7154841
Move CI and PR pipelines to SQL Server 2025 agent images
cheenamalhotra Aug 7, 2026
188a43a
Clarify why the Linux enclave stage key is left unchanged
cheenamalhotra Aug 8, 2026
f7286fb
Install sqlcmd on Linux agents before configuring SQL Server
cheenamalhotra Aug 10, 2026
191c15c
Add .NET 10 test coverage to the CI-SqlClient pipeline
cheenamalhotra Aug 7, 2026
e43c9ce
Merge updated CI coverage base and address review feedback
cheenamalhotra Aug 20, 2026
4956821
Move CI and PR pipelines to SQL Server 2025 agent images
cheenamalhotra Aug 7, 2026
302471e
Clarify why the Linux enclave stage key is left unchanged
cheenamalhotra Aug 8, 2026
6827341
Install sqlcmd on Linux agents before configuring SQL Server
cheenamalhotra Aug 10, 2026
48b5ac6
Potential fix for pull request finding
cheenamalhotra Aug 20, 2026
a02a249
Add .NET 10 test coverage to the CI-SqlClient pipeline
cheenamalhotra Aug 7, 2026
16964fd
Merge refreshed CI coverage base
cheenamalhotra Aug 20, 2026
f17a169
Move agent configuration to pipeline roots
cheenamalhotra Aug 21, 2026
e4791fc
Move CI and PR pipelines to SQL Server 2025 agent images
cheenamalhotra Aug 7, 2026
dc1808d
Clarify why the Linux enclave stage key is left unchanged
cheenamalhotra Aug 8, 2026
3dae3d6
Install sqlcmd on Linux agents before configuring SQL Server
cheenamalhotra Aug 10, 2026
0685b01
Potential fix for pull request finding
cheenamalhotra Aug 20, 2026
cb7699b
Add .NET 10 test coverage to the CI-SqlClient pipeline
cheenamalhotra Aug 7, 2026
798c2ce
Merge latest CI coverage base
cheenamalhotra Aug 24, 2026
2b436dc
Move CI and PR pipelines to SQL Server 2025 agent images
cheenamalhotra Aug 7, 2026
b6c8888
Clarify why the Linux enclave stage key is left unchanged
cheenamalhotra Aug 8, 2026
33f1bbf
Install sqlcmd on Linux agents before configuring SQL Server
cheenamalhotra Aug 10, 2026
79aa7db
Potential fix for pull request finding
cheenamalhotra Aug 20, 2026
58d81b5
Add .NET 10 test coverage to the CI-SqlClient pipeline
cheenamalhotra Aug 7, 2026
acd0635
Merge newest CI coverage base
cheenamalhotra Aug 24, 2026
8459f9b
Move CI and PR pipelines to SQL Server 2025 agent images
cheenamalhotra Aug 7, 2026
c9a1798
Clarify why the Linux enclave stage key is left unchanged
cheenamalhotra Aug 8, 2026
7852577
Install sqlcmd on Linux agents before configuring SQL Server
cheenamalhotra Aug 10, 2026
35243ab
Potential fix for pull request finding
cheenamalhotra Aug 20, 2026
20fb7bc
Add .NET 10 test coverage to the CI-SqlClient pipeline
cheenamalhotra Aug 7, 2026
d25e209
Merge remote-tracking branch 'origin/dev/automation/ci-net10-coverage…
cheenamalhotra Aug 27, 2026
8b5c5ac
Flow the CI pool name down from the pipeline root
cheenamalhotra Aug 27, 2026
f1cf20c
Move CI and PR pipelines to SQL Server 2025 agent images
cheenamalhotra Aug 7, 2026
39f8866
Clarify why the Linux enclave stage key is left unchanged
cheenamalhotra Aug 8, 2026
23b8e1e
Install sqlcmd on Linux agents before configuring SQL Server
cheenamalhotra Aug 10, 2026
cc5c7a8
Potential fix for pull request finding
cheenamalhotra Aug 20, 2026
68967d5
Add .NET 10 test coverage to the CI-SqlClient pipeline
cheenamalhotra Aug 7, 2026
61b8233
Merge remote-tracking branch 'origin/dev/automation/ci-net10-coverage…
cheenamalhotra Aug 31, 2026
967e8d0
Pipelines | Restore SQL Server 2022 coverage in the CI test matrix (#…
cheenamalhotra Aug 31, 2026
4609df9
Add .NET 10 test coverage to the CI-SqlClient pipeline
cheenamalhotra Aug 7, 2026
b0ed871
Merge current CI coverage base
cheenamalhotra Sep 1, 2026
fae9959
Merge current CI coverage base
paulmedynski Sep 2, 2026
276f3a3
Rename the Linux enclave stage key to match its Ubuntu 24 agent
paulmedynski Sep 2, 2026
c3984d3
Select agent images from the pool name in every job template
paulmedynski Sep 2, 2026
8d1d2c8
Standardize the pool parameter name and clarify pool terminology
paulmedynski Sep 2, 2026
29e26d9
Merge branch 'main' into dev/automation/ci-retire-hosted-agents
paulmedynski Sep 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions eng/pipelines/ci/kerberos/sqlclient-ci-kerberos-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -294,3 +294,8 @@ stages:
- template: /eng/pipelines/common/templates/jobs/ci-code-coverage-job.yml@self
parameters:
upload: false
# This pipeline does not import the CI build variables, so the pool
# must be named explicitly. Use a minimal Linux image because merging
# coverage does not require SQL Server.
poolName: ADO-Trusted-Linux-WestUS2
vmImage: ADO-UB24
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ stages:
operatingSystem: Windows
runtime: ${{ runtime }}
useManagedSNI: false
vmImage: ADO-MMS25-SQL25
vmImage: ADO-Win25

- ${{ each runtime in parameters.netTestRuntimes }}:
- template: /eng/pipelines/ci/managed-instance/sqlclient-ci-managed-instance-job.yml@self
Expand All @@ -81,7 +81,7 @@ stages:
operatingSystem: Windows
runtime: ${{ runtime }}
useManagedSNI: false
vmImage: ADO-MMS25-SQL25
vmImage: ADO-Win25

- template: /eng/pipelines/ci/managed-instance/sqlclient-ci-managed-instance-job.yml@self
parameters:
Expand All @@ -93,7 +93,7 @@ stages:
operatingSystem: Windows
runtime: ${{ runtime }}
useManagedSNI: true
vmImage: ADO-MMS25-SQL25
vmImage: ADO-Win25

# ----------------------------------------------------------------------------------------------
# Linux: one job per .NET runtime (managed SNI is always used on non-Windows).
Expand All @@ -108,4 +108,4 @@ stages:
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
operatingSystem: Linux
runtime: ${{ runtime }}
vmImage: ADO-UB24-SQL25
vmImage: ADO-UB24
5 changes: 5 additions & 0 deletions eng/pipelines/ci/stress/sqlclient-ci-stress-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,18 @@ parameters:
- detailed
- diagnostic

variables:
- template: /eng/pipelines/libraries/ci-build-variables.yml@self

# The stages to run.
stages:

# Generate secrets. We use these for the local SQL Server 'sa' logins.
- template: /eng/pipelines/stages/generate-secrets-ci-stage.yml@self
parameters:
debug: ${{ parameters.debug }}
poolName: $(ci_var_defaultPoolName)
vmImage: ADO-UB24

# Run the stress tests.
- template: /eng/pipelines/ci/stress/sqlclient-ci-stress-stage.yml@self
Expand Down
11 changes: 7 additions & 4 deletions eng/pipelines/common/templates/jobs/ci-build-nugets-job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,18 @@ parameters:
# Reference sibling packages as C# projects.
- Project

# The name of Azure Pipelines pool to use.
# The name of the 1ES pool to use.
#
# Supplied by the caller so that the pool name flows down from the pipeline
# root, rather than being read from a variable group at this depth.
#
- name: poolName
type: string
default: $(ci_var_defaultPoolName)

# The name of the Azure Pipelines image to use within the pool.
# The imageOverride capability required from the 1ES pool.
- name: imageOverride
type: string
default: ADO-MMS22-SQL19
default: ADO-Win25

# The name of the Abstractions pipeline artifact to download when referenceType is 'Package'.
- name: abstractionsArtifactsName
Expand Down
19 changes: 17 additions & 2 deletions eng/pipelines/common/templates/jobs/ci-code-coverage-job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,28 @@ parameters:
- name: upload
type: boolean

# The name of the 1ES pool to run in.
#
# Supplied by the caller so that the pool name flows down from the pipeline
# root, rather than being read from a variable group at this depth.
#
- name: poolName
type: string

# The name of the VM image to run on, within the pool.
- name: vmImage
type: string
default: ADO-UB24

jobs:
- job: publish_code_coverage
displayName: Publish Code Coverage

pool:
name: Azure Pipelines
vmImage: ubuntu-latest
name: ${{ parameters.poolName }}

demands:
- imageOverride -equals ${{ parameters.vmImage }}
Comment thread
cheenamalhotra marked this conversation as resolved.
Comment thread
paulmedynski marked this conversation as resolved.

variables:
# Use a temp directory that is cleaned up after each job runs. This helps
Expand Down
129 changes: 117 additions & 12 deletions eng/pipelines/dotnet-sqlclient-ci-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,26 @@ parameters:
type: object
default: [net8.0, net9.0, net10.0]

# The target frameworks to build and run tests for on Windows, for the
# primary test configurations (local SQL Server 2025 and Azure SQL).
#
# These configurations carry the broadest coverage, so newer runtimes are
# validated here first before being enabled across every configuration.
#
# Note: The driver does not ship a net10.0 target framework, so net10.0 test
# assemblies resolve the net9.0 driver build. Including net10.0 here
# validates the driver running on the .NET 10 runtime.
#
- name: primaryTargetFrameworks
type: object
default: [net462, net8.0, net9.0, net10.0]

# The target frameworks to build and run tests for on Unix, for the primary
# test configurations (local SQL Server 2025 and Azure SQL).
- name: primaryTargetFrameworksUnix
type: object
default: [net8.0, net9.0, net10.0]

# Netcore Version for Test Utilities
- name: netcoreVersionTestUtils
type: object
Expand Down Expand Up @@ -74,6 +94,18 @@ parameters:
- Debug
- Release

# The name of the 1ES pool that all CI jobs run in.
#
# This is the single place in the CI pipelines where the pool name is read
# from a variable group; every stage and job below receives it as a
# parameter so that the value flows down from here.
#
# 'ci_var_defaultPoolName' is defined in the 'ADO Build properties' variable
# group (see /eng/pipelines/libraries/ci-build-variables.yml), for both the
# Public and ADO.Net projects. The PR pipelines are configured from a
# different variable group and use '$(PoolNameDefault)' instead; see
# /eng/pipelines/pr/sqlclient-pr-pipeline.yml.
#
- name: defaultPoolName
type: string
default: $(ci_var_defaultPoolName)
Expand All @@ -94,6 +126,15 @@ parameters:
type: boolean
default: true

# If true, run manual tests against SQL Server 2022.
#
# The primary test configurations run against SQL Server 2025, so SQL Server
# 2022 is CI-only coverage. PR pipelines disable it to keep validation fast.
#
- name: runSql22Tests
type: boolean
default: true

# Build suffix appended to the prerelease tag. PR pipelines pass 'pr',
# CI pipelines pass 'ci'. Official builds leave this empty.
- name: buildSuffix
Expand Down Expand Up @@ -128,23 +169,25 @@ variables:
value: SqlServer.Artifacts

stages:
# Compute all package versions up-front. Downstream stages consume these via
# Each build/test stage computes the versions it needs directly from the
# compute_versions_ci stage outputs, so no version parameters are passed here.
# Compute all package versions up front. Build and test stages consume the
# compute_versions_ci outputs directly, so no version parameters are passed here.
- template: /eng/pipelines/stages/compute-versions-ci-stage.yml@self
parameters:
poolName: ${{ parameters.defaultPoolName }}
buildSuffix: ${{ parameters.buildSuffix }}

# Generate secrets used throughout the pipeline.
- template: /eng/pipelines/stages/generate-secrets-ci-stage.yml@self
parameters:
poolName: ${{ parameters.defaultPoolName }}
debug: ${{ parameters.debug }}

# Build the SqlServer package, and publish it to the pipeline artifacts
# under the given artifact name. This runs in parallel with the Secrets
# generation stage since it has no package dependencies.
- template: /eng/pipelines/stages/build-sqlserver-package-ci-stage.yml@self
parameters:
adoPoolName: ${{ parameters.defaultPoolName }}
sqlServerArtifactsName: $(sqlServerArtifactsName)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
Expand All @@ -155,6 +198,7 @@ stages:
# generation stage since it has no package dependencies.
- template: /eng/pipelines/stages/build-logging-package-ci-stage.yml@self
parameters:
adoPoolName: ${{ parameters.defaultPoolName }}
loggingArtifactsName: $(loggingArtifactsName)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
Expand All @@ -167,6 +211,7 @@ stages:
# Abstractions has a package dependency on Logging.
- template: /eng/pipelines/stages/build-abstractions-package-ci-stage.yml@self
parameters:
adoPoolName: ${{ parameters.defaultPoolName }}
abstractionsArtifactsName: $(abstractionsArtifactsName)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
Expand All @@ -185,6 +230,7 @@ stages:
#
- template: /eng/pipelines/stages/build-sqlclient-package-ci-stage.yml@self
parameters:
adoPoolName: ${{ parameters.defaultPoolName }}
abstractionsArtifactsName: $(abstractionsArtifactsName)
buildConfiguration: ${{ parameters.buildConfiguration }}
loggingArtifactsName: $(loggingArtifactsName)
Expand All @@ -205,6 +251,7 @@ stages:
# given artifact name.
- template: /eng/pipelines/stages/build-azure-package-ci-stage.yml@self
parameters:
adoPoolName: ${{ parameters.defaultPoolName }}
abstractionsArtifactsName: $(abstractionsArtifactsName)
azureArtifactsName: $(azureArtifactsName)
buildConfiguration: ${{ parameters.buildConfiguration }}
Expand All @@ -228,6 +275,7 @@ stages:
# published as pipeline artifacts.
- template: /eng/pipelines/stages/verify-nuget-packages-ci-stage.yml@self
parameters:
poolName: ${{ parameters.defaultPoolName }}
abstractionsArtifactsName: $(abstractionsArtifactsName)
azureArtifactsName: $(azureArtifactsName)
loggingArtifactsName: $(loggingArtifactsName)
Expand Down Expand Up @@ -275,6 +323,7 @@ stages:
- template: /eng/pipelines/common/templates/jobs/ci-code-coverage-job.yml@self
parameters:
debug: ${{ parameters.debug }}
poolName: ${{ parameters.defaultPoolName }}
# We only want to upload coverage results to CodeCov from certain
# pipelines. We use the pipeline name (Build.DefinitionName) to
# choose. This is a predefined variable that is available at
Expand Down Expand Up @@ -412,7 +461,7 @@ stages:
pool: ${{parameters.defaultPoolName }}
images:
Win25_Sql25: ADO-MMS25-SQL25
TargetFrameworks: ${{parameters.targetFrameworks }}
TargetFrameworks: ${{parameters.primaryTargetFrameworks }}
netcoreVersionTestUtils: ${{parameters.netcoreVersionTestUtils }}
buildPlatforms: ${{parameters.buildPlatforms }}
testSets: ${{parameters.testSets }}
Expand Down Expand Up @@ -479,13 +528,13 @@ stages:
SQLRootPath: $(SQL25RootPath)
instanceName: $(NamedInstance)

# Windows Server 2022 and Windows 11, x64 build platform, with Azure SQL Server.
# Windows Server 2025 and Windows 11, x64 build platform, with Azure SQL Server.
windows_azure_sql:
Comment thread
paulmedynski marked this conversation as resolved.
pool: ${{parameters.defaultPoolName }}
images:
Win22_Azure_Sql: ADO-MMS22-SQL19
Win22_Azure_Sql: ADO-Win25
Comment thread
paulmedynski marked this conversation as resolved.
Outdated
Win11_Azure_Sql: ADO-CI-Win11
TargetFrameworks: ${{parameters.targetFrameworks }}
TargetFrameworks: ${{parameters.primaryTargetFrameworks }}
netcoreVersionTestUtils: ${{parameters.netcoreVersionTestUtils }}
buildPlatforms: ${{parameters.buildPlatforms }}
testSets: ${{parameters.testSets }}
Expand Down Expand Up @@ -542,7 +591,7 @@ stages:
pool: ${{parameters.defaultPoolName }}
images:
Ubuntu24_Sql25: ADO-UB24-SQL25
TargetFrameworks: ${{parameters.targetFrameworksUnix }}
TargetFrameworks: ${{parameters.primaryTargetFrameworksUnix }}
netcoreVersionTestUtils: ${{parameters.netcoreVersionTestUtils }}
buildPlatforms: [AnyCPU]
testSets: ${{parameters.testSets }}
Expand All @@ -560,12 +609,68 @@ stages:
LocalDbSharedInstanceName: $(LocalDbSharedInstanceName)
AliasName: $(SQLAliasName)

# SQL Server 2022 coverage, on Windows and Linux.
#
# The primary configurations run against SQL Server 2025, so these keep
# SQL Server 2022 in the matrix. They are grouped under a single
# conditional so that PR pipelines can opt out of them as a unit.
${{ if eq(parameters.runSql22Tests, true) }}:
# Windows Server 22 with local SQL Server 2022, x64 build platform.
windows_sql_22_x64:
pool: ${{parameters.defaultPoolName }}
images:
Win22_Sql22: ADO-MMS22-SQL22
TargetFrameworks: ${{parameters.targetFrameworks }}
netcoreVersionTestUtils: ${{parameters.netcoreVersionTestUtils }}
buildPlatforms: ${{parameters.buildPlatforms }}
testSets: ${{parameters.testSets }}
useManagedSNI: ${{parameters.useManagedSNI }}
configSqlFor: local
operatingSystem: Windows
# config.jsonc properties
configProperties:
TCPConnectionString: $(SQL_TCP_CONN_STRING)
NPConnectionString: $(SQL_NP_CONN_STRING)
AzureKeyVaultUrl: $(AzureKeyVaultUrl)
AzureKeyVaultTenantId: $(AzureKeyVaultTenantId)
SupportsIntegratedSecurity: true
UserManagedIdentityClientId: $(UserManagedIdentityClientId)
FileStreamDirectory: $(FileStreamDirectory)
LocalDbAppName: $(LocalDbAppName)
LocalDbSharedInstanceName: $(LocalDbSharedInstanceName)
AliasName: $(SQLAliasName)
SQLRootPath: $(SQL22RootPath)
enableLocalDB: true

# Linux Ubuntu 22 with local SQL Server 2022, x64 build platform.
linux_ub22_sql_22:
pool: ${{parameters.defaultPoolName }}
images:
Ubuntu22_Sql22: ADO-UB22-SQL22
TargetFrameworks: ${{parameters.targetFrameworksUnix }}
netcoreVersionTestUtils: ${{parameters.netcoreVersionTestUtils }}
buildPlatforms: [AnyCPU]
testSets: ${{parameters.testSets }}
useManagedSNI: [true]
configSqlFor: local
operatingSystem: Linux
configProperties:
TCPConnectionString: $(SQL_TCP_CONN_STRING)
NPConnectionString: $(SQL_NP_CONN_STRING)
AzureKeyVaultUrl: $(AzureKeyVaultUrl)
AzureKeyVaultTenantId: $(AzureKeyVaultTenantId)
SupportsIntegratedSecurity: false
UserManagedIdentityClientId: $(UserManagedIdentityClientId)
LocalDbAppName: $(LocalDbAppName)
LocalDbSharedInstanceName: $(LocalDbSharedInstanceName)
AliasName: $(SQLAliasName)

# Linux Ubuntu 24 with Azure SQL Server, x64 build platform.
linux_azure_sql:
pool: ${{parameters.defaultPoolName }}
images:
Ubuntu24_Azure_Sql: ADO-UB24-SQL25
TargetFrameworks: ${{parameters.targetFrameworksUnix }}
Ubuntu24_Azure_Sql: ADO-UB24
TargetFrameworks: ${{parameters.primaryTargetFrameworksUnix }}
netcoreVersionTestUtils: ${{parameters.netcoreVersionTestUtils }}
buildPlatforms: [AnyCPU]
testSets: ${{parameters.testSets }}
Expand Down Expand Up @@ -617,7 +722,7 @@ stages:
windows_enclave_sql:
pool: ADO-CI-AE-1ES-Pool
images:
Win22_Enclave_Sql19: ADO-MMS22-SQL19
Win22_Enclave_Sql19: ADO-Win25
TargetFrameworks: ${{parameters.targetFrameworks }}
netcoreVersionTestUtils: ${{parameters.netcoreVersionTestUtils }}
buildPlatforms: ${{parameters.buildPlatforms }}
Expand Down Expand Up @@ -650,7 +755,7 @@ stages:
# deliberately left unchanged. The 'Sql19' suffix remains
# accurate: these tests target a remote Enclave-enabled SQL Server
# 2019. Only the agent image has moved to Ubuntu 24.
Ubuntu20_Enclave_Sql19: ADO-UB24-SQL25
Ubuntu20_Enclave_Sql19: ADO-UB24
TargetFrameworks: ${{parameters.targetFrameworksUnix }}
Comment thread
paulmedynski marked this conversation as resolved.
netcoreVersionTestUtils: ${{parameters.netcoreVersionTestUtils }}
buildPlatforms: [AnyCPU]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,11 @@ extends:
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
targetFrameworks: ${{ parameters.targetFrameworks }}
targetFrameworksUnix: ${{ parameters.targetFrameworksUnix }}
# Keep the primary (SQL 2025 / Azure SQL) configurations on the same set of
# target frameworks as everything else. Only the CI-SqlClient pipeline
# opts in to the broader .NET 10.0 coverage on those configurations.
primaryTargetFrameworks: ${{ parameters.targetFrameworks }}
primaryTargetFrameworksUnix: ${{ parameters.targetFrameworksUnix }}
testJobTimeout: ${{ parameters.testJobTimeout }}
testSets: ${{ parameters.testSets }}
useManagedSNI: ${{ parameters.useManagedSNI }}
Loading
Loading