From d02da636e934259f15bd562770d0b81432110d37 Mon Sep 17 00:00:00 2001
From: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
Date: Tue, 2 Jun 2026 16:45:15 -0300
Subject: [PATCH 01/12] Eng: canonical version infrastructure with pre-computed
pipeline versions
- Rename *VersionDefault -> *NextVersion in all Versions.props
- Add *PublishedVersion (last shipped) to all Versions.props
- Add 6 GetVersions* targets to build.proj (stdout-based extraction)
- Add compute-versions-stage.yml (single job extracts all versions up-front)
- Make packageVersion a required parameter in all build/pack steps
- Remove BuildSuffix from pipeline variables
- Wire release booleans to resolve next vs published version per package
---
build.proj | 155 ++++++++++++++++
.../libraries/ci-build-variables.yml | 64 +------
.../onebranch/jobs/build-buildproj-job.yml | 32 ++--
.../onebranch/jobs/publish-symbols-job.yml | 37 ++--
.../onebranch/sqlclient-non-official.yml | 24 ---
.../onebranch/sqlclient-official.yml | 24 ---
.../onebranch/stages/build-stages.yml | 70 ++++----
.../stages/compute-versions-stage.yml | 169 ++++++++++++++++++
.../stages/publish-symbols-stage.yml | 38 ++--
.../onebranch/stages/release-stages.yml | 24 ---
.../onebranch/steps/build-buildproj-step.yml | 6 +-
.../onebranch/steps/pack-buildproj-step.yml | 6 +-
.../steps/roslyn-analyzers-buildproj-step.yml | 2 +-
.../onebranch/variables/package-variables.yml | 116 ++----------
.../src/Versions.props | 15 +-
.../Abstractions/src/Versions.props | 15 +-
.../Azure/src/Versions.props | 15 +-
.../Logging/src/Versions.props | 15 +-
src/Microsoft.Data.SqlClient/Versions.props | 15 +-
src/Microsoft.SqlServer.Server/Versions.props | 15 +-
20 files changed, 501 insertions(+), 356 deletions(-)
create mode 100644 eng/pipelines/onebranch/stages/compute-versions-stage.yml
diff --git a/build.proj b/build.proj
index 4ff29a08df..2497f724a6 100644
--- a/build.proj
+++ b/build.proj
@@ -388,6 +388,161 @@
-->
+
+
+
+
+
+ <_Cmd>"$(DotnetPath)dotnet" build "$(LoggingProjectPath)" -getProperty:LoggingPackageVersion $(BuildNumberArgument) $(BuildSuffixArgument)
+ <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
+
+
+
+
+
+
+
+
+ <_Cmd>"$(DotnetPath)dotnet" build "$(LoggingProjectPath)" -getProperty:LoggingFileVersion $(BuildNumberArgument) $(BuildSuffixArgument)
+ <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
+
+
+
+
+
+
+
+
+
+
+
+ <_Cmd>"$(DotnetPath)dotnet" build "$(AbstractionsProjectPath)" -getProperty:AbstractionsPackageVersion $(BuildNumberArgument) $(BuildSuffixArgument)
+ <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
+
+
+
+
+
+
+
+
+ <_Cmd>"$(DotnetPath)dotnet" build "$(AbstractionsProjectPath)" -getProperty:AbstractionsFileVersion $(BuildNumberArgument) $(BuildSuffixArgument)
+ <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
+
+
+
+
+
+
+
+
+
+
+
+ <_Cmd>"$(DotnetPath)dotnet" build "$(SqlClientProjectPath)" -getProperty:SqlClientPackageVersion $(BuildNumberArgument) $(BuildSuffixArgument)
+ <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
+
+
+
+
+
+
+
+
+ <_Cmd>"$(DotnetPath)dotnet" build "$(SqlClientProjectPath)" -getProperty:SqlClientFileVersion $(BuildNumberArgument) $(BuildSuffixArgument)
+ <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
+
+
+
+
+
+
+
+
+
+
+
+ <_Cmd>"$(DotnetPath)dotnet" build "$(AzureProjectPath)" -getProperty:AzurePackageVersion $(BuildNumberArgument) $(BuildSuffixArgument)
+ <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
+
+
+
+
+
+
+
+
+ <_Cmd>"$(DotnetPath)dotnet" build "$(AzureProjectPath)" -getProperty:AzureFileVersion $(BuildNumberArgument) $(BuildSuffixArgument)
+ <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
+
+
+
+
+
+
+
+
+
+
+
+ <_Cmd>"$(DotnetPath)dotnet" build "$(AkvProviderProjectPath)" -getProperty:AkvProviderPackageVersion $(BuildNumberArgument) $(BuildSuffixArgument)
+ <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
+
+
+
+
+
+
+
+
+ <_Cmd>"$(DotnetPath)dotnet" build "$(AkvProviderProjectPath)" -getProperty:AkvProviderFileVersion $(BuildNumberArgument) $(BuildSuffixArgument)
+ <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
+
+
+
+
+
+
+
+
+
+
+
+ <_Cmd>"$(DotnetPath)dotnet" build "$(SqlServerProjectPath)" -getProperty:SqlServerPackageVersion $(BuildNumberArgument) $(BuildSuffixArgument)
+ <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
+
+
+
+
+
+
+
+
+ <_Cmd>"$(DotnetPath)dotnet" build "$(SqlServerProjectPath)" -getProperty:SqlServerFileVersion $(BuildNumberArgument) $(BuildSuffixArgument)
+ <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
+
+
+
+
+
+
+
+
+
+
+ 7.0.0
+
- 7.1.0-preview1
+ 7.1.0-preview1
@@ -61,10 +64,10 @@
build pipelines to generate production-ready builds.
-->
- $(AkvProviderVersionDefault)-$(BuildSuffix)$(BuildNumber)
- $(AkvProviderVersionDefault)
+ $(AkvProviderNextVersion)-$(BuildSuffix)$(BuildNumber)
+ $(AkvProviderNextVersion)
- $(AkvProviderVersionDefault.Split('-')[0]).$(FileVersionBuildNumber)
+ $(AkvProviderNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
@@ -76,8 +79,8 @@
want a quick build without supplying any parameters.
-->
- $(AkvProviderVersionDefault)-dev
- $(AkvProviderVersionDefault.Split('-')[0]).$(FileVersionBuildNumber)
+ $(AkvProviderNextVersion)-dev
+ $(AkvProviderNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
diff --git a/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Versions.props b/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Versions.props
index cc6d4ca14a..7d34123506 100644
--- a/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Versions.props
+++ b/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Versions.props
@@ -25,12 +25,15 @@
+
+ 1.0.0
+
- 1.1.0-preview1
+ 1.1.0-preview1
@@ -62,10 +65,10 @@
build pipelines to generate production-ready builds.
-->
- $(AbstractionsVersionDefault)-$(BuildSuffix)$(BuildNumber)
- $(AbstractionsVersionDefault)
+ $(AbstractionsNextVersion)-$(BuildSuffix)$(BuildNumber)
+ $(AbstractionsNextVersion)
- $(AbstractionsVersionDefault.Split('-')[0]).$(FileVersionBuildNumber)
+ $(AbstractionsNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
@@ -77,8 +80,8 @@
want a quick build without supplying any parameters.
-->
- $(AbstractionsVersionDefault)-dev
- $(AbstractionsVersionDefault.Split('-')[0]).$(FileVersionBuildNumber)
+ $(AbstractionsNextVersion)-dev
+ $(AbstractionsNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
diff --git a/src/Microsoft.Data.SqlClient.Extensions/Azure/src/Versions.props b/src/Microsoft.Data.SqlClient.Extensions/Azure/src/Versions.props
index 636face4e6..a2293a0958 100644
--- a/src/Microsoft.Data.SqlClient.Extensions/Azure/src/Versions.props
+++ b/src/Microsoft.Data.SqlClient.Extensions/Azure/src/Versions.props
@@ -25,11 +25,14 @@
+
+ 1.0.0
+
- 1.1.0-preview1
+ 1.1.0-preview1
@@ -61,10 +64,10 @@
build pipelines to generate production-ready builds.
-->
- $(AzureVersionDefault)-$(BuildSuffix)$(BuildNumber)
- $(AzureVersionDefault)
+ $(AzureNextVersion)-$(BuildSuffix)$(BuildNumber)
+ $(AzureNextVersion)
- $(AzureVersionDefault.Split('-')[0]).$(FileVersionBuildNumber)
+ $(AzureNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
@@ -76,8 +79,8 @@
want a quick build without supplying any parameters.
-->
- $(AzureVersionDefault)-dev
- $(AzureVersionDefault.Split('-')[0]).$(FileVersionBuildNumber)
+ $(AzureNextVersion)-dev
+ $(AzureNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
diff --git a/src/Microsoft.Data.SqlClient.Internal/Logging/src/Versions.props b/src/Microsoft.Data.SqlClient.Internal/Logging/src/Versions.props
index 9d031d21d0..1b7ba13f95 100644
--- a/src/Microsoft.Data.SqlClient.Internal/Logging/src/Versions.props
+++ b/src/Microsoft.Data.SqlClient.Internal/Logging/src/Versions.props
@@ -25,12 +25,15 @@
+
+ 1.0.0
+
- 1.1.0-preview1
+ 1.1.0-preview1
@@ -62,10 +65,10 @@
build pipelines to generate production-ready builds.
-->
- $(LoggingVersionDefault)-$(BuildSuffix)$(BuildNumber)
- $(LoggingVersionDefault)
+ $(LoggingNextVersion)-$(BuildSuffix)$(BuildNumber)
+ $(LoggingNextVersion)
- $(LoggingVersionDefault.Split('-')[0]).$(FileVersionBuildNumber)
+ $(LoggingNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
@@ -77,8 +80,8 @@
want a quick build without supplying any parameters.
-->
- $(LoggingVersionDefault)-dev
- $(LoggingVersionDefault.Split('-')[0]).$(FileVersionBuildNumber)
+ $(LoggingNextVersion)-dev
+ $(LoggingNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
diff --git a/src/Microsoft.Data.SqlClient/Versions.props b/src/Microsoft.Data.SqlClient/Versions.props
index 712263b73e..d1bc0b0ad4 100644
--- a/src/Microsoft.Data.SqlClient/Versions.props
+++ b/src/Microsoft.Data.SqlClient/Versions.props
@@ -25,11 +25,14 @@
+
+ 7.0.0
+
- 7.1.0-preview1
+ 7.1.0-preview1
@@ -61,10 +64,10 @@
build pipelines to generate production-ready builds.
-->
- $(SqlClientVersionDefault)-$(BuildSuffix)$(BuildNumber)
- $(SqlClientVersionDefault)
+ $(SqlClientNextVersion)-$(BuildSuffix)$(BuildNumber)
+ $(SqlClientNextVersion)
- $(SqlClientVersionDefault.Split('-')[0]).$(FileVersionBuildNumber)
+ $(SqlClientNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
@@ -76,8 +79,8 @@
want a quick build without supplying any parameters.
-->
- $(SqlClientVersionDefault)-dev
- $(SqlClientVersionDefault.Split('-')[0]).$(FileVersionBuildNumber)
+ $(SqlClientNextVersion)-dev
+ $(SqlClientNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
diff --git a/src/Microsoft.SqlServer.Server/Versions.props b/src/Microsoft.SqlServer.Server/Versions.props
index 3615bd95a8..fdee1160fa 100644
--- a/src/Microsoft.SqlServer.Server/Versions.props
+++ b/src/Microsoft.SqlServer.Server/Versions.props
@@ -25,12 +25,15 @@
+
+ 1.0.0
+
- 1.1.0-preview1
+ 1.1.0-preview1
@@ -62,10 +65,10 @@
build pipelines to generate production-ready builds.
-->
- $(SqlServerVersionDefault)-$(BuildSuffix)$(BuildNumber)
- $(SqlServerVersionDefault)
+ $(SqlServerNextVersion)-$(BuildSuffix)$(BuildNumber)
+ $(SqlServerNextVersion)
- $(SqlServerVersionDefault.Split('-')[0]).$(FileVersionBuildNumber)
+ $(SqlServerNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
@@ -77,8 +80,8 @@
want a quick build without supplying any parameters.
-->
- $(SqlServerVersionDefault)-dev
- $(SqlServerVersionDefault.Split('-')[0]).$(FileVersionBuildNumber)
+ $(SqlServerNextVersion)-dev
+ $(SqlServerNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
From f75eb18a01b8a80c2e1f6cb86c2072b41b297152 Mon Sep 17 00:00:00 2001
From: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
Date: Wed, 3 Jun 2026 10:56:34 -0300
Subject: [PATCH 02/12] Add compute-versions stage for CI/PR pipelines
- Add compute-versions-ci-stage.yml that extracts all package/file
versions up-front using GetVersions* targets with BuildSuffix
- Wire compute-versions as first stage in dotnet-sqlclient-ci-core.yml
- PR pipelines pass buildSuffix='pr', CI pipelines pass buildSuffix='ci'
- Each downstream stage consumes versions via stageDependencies outputs
- Remove buildSuffix from ci-build-variables.yml (now a parameter)
- Rename package-versions.instructions.md to 3rd-party scope
- Add sqlclient-package-versions.instructions.md documenting version flow
---
...rd-party-package-versions.instructions.md} | 6 +-
...sqlclient-package-versions.instructions.md | 123 ++++++++++++++++++
eng/pipelines/dotnet-sqlclient-ci-core.yml | 11 ++
...qlclient-ci-package-reference-pipeline.yml | 1 +
...qlclient-ci-project-reference-pipeline.yml | 1 +
.../libraries/ci-build-variables.yml | 6 +-
.../sqlclient-pr-package-ref-pipeline.yml | 1 +
.../sqlclient-pr-project-ref-pipeline.yml | 1 +
.../build-abstractions-package-ci-stage.yml | 7 +
.../stages/build-azure-package-ci-stage.yml | 14 ++
.../stages/build-logging-package-ci-stage.yml | 7 +
.../build-sqlclient-package-ci-stage.yml | 13 ++
.../build-sqlserver-package-ci-stage.yml | 5 +
.../stages/compute-versions-ci-stage.yml | 65 +++++++++
14 files changed, 254 insertions(+), 7 deletions(-)
rename .github/instructions/{package-versions.instructions.md => 3rd-party-package-versions.instructions.md} (96%)
create mode 100644 .github/instructions/sqlclient-package-versions.instructions.md
create mode 100644 eng/pipelines/stages/compute-versions-ci-stage.yml
diff --git a/.github/instructions/package-versions.instructions.md b/.github/instructions/3rd-party-package-versions.instructions.md
similarity index 96%
rename from .github/instructions/package-versions.instructions.md
rename to .github/instructions/3rd-party-package-versions.instructions.md
index 9dba7acb8e..1de7df26bf 100644
--- a/.github/instructions/package-versions.instructions.md
+++ b/.github/instructions/3rd-party-package-versions.instructions.md
@@ -1,9 +1,11 @@
---
applyTo: "**/Directory.Packages.props,**/*.csproj,**/Directory.Build.props,**/*.nuspec"
---
-# Choosing Package Versions in Multi-Targeted Projects
+# Choosing Third-Party Package Dependency Versions
-Guidance for choosing NuGet package versions in multi-targeted projects (e.g. `net462;net8.0;net9.0`).
+Guidance for choosing versions of **external (third-party) NuGet package dependencies** in multi-targeted projects (e.g. `net462;net8.0;net9.0`).
+
+> **Scope:** This document covers dependencies consumed from NuGet — packages the SqlClient repo does NOT own. For versioning of SqlClient's own inter-sibling packages (Logging, Abstractions, SqlClient, Azure, AKV Provider, SqlServer.Server), see `sqlclient-package-versions.instructions.md`.
## Rule
For runtime-aligned packages, **the package major must match the target runtime major**: 8.x on `net8.0`, 9.x on `net9.0`, 10.x on `net10.0`, and so on. TFMs that aren't tied to a specific runtime major (`net462`, `netstandard2.0`) get the major of the floor LTS. Other categories are versioned as described below.
diff --git a/.github/instructions/sqlclient-package-versions.instructions.md b/.github/instructions/sqlclient-package-versions.instructions.md
new file mode 100644
index 0000000000..9e3425c8da
--- /dev/null
+++ b/.github/instructions/sqlclient-package-versions.instructions.md
@@ -0,0 +1,123 @@
+---
+applyTo: "**/Versions.props,build.proj,eng/pipelines/**/*.yml"
+---
+# SqlClient Package Version Resolution
+
+How package versions are determined across different build scenarios for the packages in this repository.
+
+## Version Properties (per package)
+
+Each package has a `Versions.props` file declaring:
+
+| Property | Purpose | Example |
+|----------|---------|---------|
+| `*NextVersion` | Version being developed; used for the next release | `7.1.0-preview1` |
+| `*PublishedVersion` | Last version shipped to NuGet | `7.0.0` |
+
+## Resolution Logic
+
+Each `Versions.props` uses a 3-tier `` block:
+
+| Priority | Condition | PackageVersion | FileVersion |
+|----------|-----------|----------------|-------------|
+| 1 | `PackageVersion` explicitly provided | Used as-is | Strip prerelease + append BuildNumber |
+| 2 | `BuildNumber` provided (non-zero) | `NextVersion[-BuildSuffix+BuildNumber]` | `NextVersion.Split('-')[0].BuildNumber` |
+| 3 | Nothing provided | `NextVersion-dev` | `NextVersion.Split('-')[0].0` |
+
+## Scenarios
+
+### Developer (local `dotnet build`)
+
+**Mode:** Project (default `ReferenceType=Project`)
+
+- No `BuildNumber`, no `BuildSuffix`, no `PackageVersion*` passed.
+- Falls into Priority 3 (the `` branch).
+- **Result:** `7.1.0-preview1-dev` / FileVersion `7.1.0.0`
+- Dependencies are project references — no package versions needed for siblings.
+
+**Mode:** Package (`-p:ReferenceType=Package`)
+
+- Same version resolution for the package being built.
+- Sibling dependencies are restored from local `packages/` feed (previously packed with `-dev` suffix).
+- A developer would first `dotnet build build.proj -t:Pack` to produce local packages, then consume them.
+
+### PR Pipeline (non-official CI)
+
+**`buildSuffix`** set via core template parameter:
+- `buildSuffix: 'pr'` (passed explicitly from PR pipeline)
+- `BuildNumber` = ADO-assigned (e.g. `20250602.1`)
+
+**Mode:** Project (typical PR validation)
+
+- Versions computed in `compute-versions-ci-stage.yml` (runs `GetVersions*` targets with `-p:BuildSuffix=pr -p:BuildNumber=...`)
+- Falls into Priority 2 with BuildSuffix present.
+- **Result:** `7.1.0-preview1-pr20250602.1` / FileVersion `7.1.0.20250602`
+- Dependencies are project references — all packages built together in-tree.
+
+**Mode:** Package (PR package-ref validation)
+
+- Same version computation via compute-versions stage.
+- Downstream stages define stage-level variables from compute-versions output using `$[ stageDependencies... ]`.
+- Each build step receives explicit `-p:PackageVersion=` (hits Priority 1).
+- Sibling dependencies consumed from pipeline artifacts published by upstream stages.
+
+### CI Pipeline (non-official, triggered on merge)
+
+Same structure as PR but passes `buildSuffix: 'ci'` explicitly.
+
+- **Result:** `7.1.0-preview1-ci20250602.1` / FileVersion `7.1.0.20250602`
+
+### OneBranch Pipeline (official)
+
+**Mode:** Always Package (`ReferenceType=Package`)
+
+Uses the full `compute-versions-stage.yml` machinery:
+
+#### Step A: Compute Versions (dedicated early stage)
+
+1. Runs 6 `GetVersions*` MSBuild targets against `build.proj`.
+2. Each target calls `dotnet build -getProperty:PackageVersion` with `BuildNumber` but **no BuildSuffix**.
+3. Falls into Priority 2 without BuildSuffix → `PackageVersion = NextVersion` as-is (e.g. `7.1.0-preview1`).
+4. Also extracts `PublishedVersion` (hardcoded in Versions.props, e.g. `7.0.0`).
+
+#### Step B: Resolve Effective Versions
+
+For each package, a `release` boolean parameter determines the outcome:
+
+| `release` | Effective Version | Meaning |
+|----------------|-------------------|---------|
+| `True` | `NextVersion` (e.g. `7.1.0-preview1`) | This package is being released |
+| `False` | `PublishedVersion` (e.g. `7.0.0`) | Only built as dependency; use last-shipped version |
+
+These are published as ADO output variables (e.g. `versions.SqlClientPackageVersion`).
+
+#### Step C: Build Stages Consume Pre-computed Versions
+
+Each downstream build job receives:
+- `packageVersion` parameter → passed as `-p:PackageVersion=`
+- Dependency versions → passed as `-p:PackageVersion=`
+
+Since an explicit `PackageVersion` is provided, Versions.props hits Priority 1 — uses the value verbatim.
+
+#### Summary
+
+| Package Status | Version Source | Example |
+|----------------|----------------|---------|
+| Being released | `*NextVersion` from Versions.props | `7.1.0-preview1` |
+| Dependency only | `*PublishedVersion` from Versions.props | `7.0.0` |
+
+## Key Architectural Difference
+
+| Scenario | Who computes versions | How dependencies get versions |
+|----------|----------------------|-------------------------------|
+| Developer | Versions.props inline (Priority 3) | Project references (no version needed) |
+| PR/CI (Project) | `compute-versions-ci-stage` up-front | Project references (no version needed) |
+| PR/CI (Package) | `compute-versions-ci-stage` up-front | Stage variables via `$[ stageDependencies... ]` → `-p:PackageVersion=` |
+| OneBranch | `compute-versions-stage` up-front | Explicit `-p:PackageVersion=` from stage outputs |
+
+## Updating Versions
+
+After a release:
+1. Update `*PublishedVersion` to the version just shipped.
+2. Update `*NextVersion` to the next planned version.
+3. Both properties live in each package's `Versions.props`.
diff --git a/eng/pipelines/dotnet-sqlclient-ci-core.yml b/eng/pipelines/dotnet-sqlclient-ci-core.yml
index 9ee7c7132d..cb34c0204e 100644
--- a/eng/pipelines/dotnet-sqlclient-ci-core.yml
+++ b/eng/pipelines/dotnet-sqlclient-ci-core.yml
@@ -94,6 +94,11 @@ parameters:
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
+ type: string
+
- name: dotnetVerbosity
type: string
default: normal
@@ -123,6 +128,12 @@ variables:
value: SqlServer.Artifacts
stages:
+ # Compute all package versions up-front. Downstream stages consume these via
+ # stage dependency output variables (e.g. $(loggingPackageVersion)).
+ - template: /eng/pipelines/stages/compute-versions-ci-stage.yml@self
+ parameters:
+ buildSuffix: ${{ parameters.buildSuffix }}
+
# Generate secrets used throughout the pipeline.
- template: /eng/pipelines/stages/generate-secrets-ci-stage.yml@self
parameters:
diff --git a/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml b/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml
index 98cac1bcdd..219304aadc 100644
--- a/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml
+++ b/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml
@@ -166,6 +166,7 @@ extends:
parameters:
buildConfiguration: ${{ parameters.buildConfiguration }}
buildPlatforms: ${{ parameters.buildPlatforms }}
+ buildSuffix: 'ci'
referenceType: Package
debug: ${{ parameters.debug }}
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
diff --git a/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml b/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml
index 7068c9693c..dc144e67e8 100644
--- a/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml
+++ b/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml
@@ -166,6 +166,7 @@ extends:
parameters:
buildConfiguration: ${{ parameters.buildConfiguration }}
buildPlatforms: ${{ parameters.buildPlatforms }}
+ buildSuffix: 'ci'
referenceType: Project
debug: ${{ parameters.debug }}
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
diff --git a/eng/pipelines/libraries/ci-build-variables.yml b/eng/pipelines/libraries/ci-build-variables.yml
index 6a1965d087..5486fa9da5 100644
--- a/eng/pipelines/libraries/ci-build-variables.yml
+++ b/eng/pipelines/libraries/ci-build-variables.yml
@@ -6,16 +6,12 @@
# Variables for PR and CI pipelines. Package versions are computed by each project's
# Versions.props using BuildNumber + buildSuffix. No per-package version variables are needed.
+# The buildSuffix itself is set by each pipeline via the core template parameter.
variables:
- group: ADO Build properties
- group: ADO Test Configuration Properties
- # Build suffix for CI/PR builds — distinguishes these from official builds.
- # Versions.props appends this to the prerelease tag: e.g. 7.1.0-preview1-ci20250602.1
- - name: buildSuffix
- value: 'ci'
-
# Local NuGet feed directory where downloaded pipeline artifacts are placed.
# NuGet.config references this as a local package source for restore.
- name: localFeedPath
diff --git a/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml b/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml
index 70a37e0fa7..9d89395bd4 100644
--- a/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml
+++ b/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml
@@ -129,6 +129,7 @@ extends:
parameters:
buildConfiguration: ${{ parameters.buildConfiguration }}
buildPlatforms: ${{ parameters.buildPlatforms }}
+ buildSuffix: 'pr'
referenceType: Package
debug: ${{ parameters.debug }}
targetFrameworks: ${{ parameters.targetFrameworks }}
diff --git a/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml b/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml
index f777626c90..f5e5626418 100644
--- a/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml
+++ b/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml
@@ -129,6 +129,7 @@ extends:
parameters:
buildConfiguration: ${{ parameters.buildConfiguration }}
buildPlatforms: ${{ parameters.buildPlatforms }}
+ buildSuffix: 'pr'
referenceType: Project
debug: ${{ parameters.debug }}
targetFrameworks: ${{ parameters.targetFrameworks }}
diff --git a/eng/pipelines/stages/build-abstractions-package-ci-stage.yml b/eng/pipelines/stages/build-abstractions-package-ci-stage.yml
index 8579b79caf..dc05c0a06b 100644
--- a/eng/pipelines/stages/build-abstractions-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-abstractions-package-ci-stage.yml
@@ -98,9 +98,16 @@ stages:
dependsOn:
- secrets_stage
+ - compute_versions_ci
- ${{ each dep in parameters.additionalDependsOn }}:
- ${{ dep }}
+ variables:
+ - name: abstractionsPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
+ - name: abstractionsAssemblyFileVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AbstractionsFileVersion'] ]
+
jobs:
# ------------------------------------------------------------------------
diff --git a/eng/pipelines/stages/build-azure-package-ci-stage.yml b/eng/pipelines/stages/build-azure-package-ci-stage.yml
index b3cf9073d5..9d27eac32f 100644
--- a/eng/pipelines/stages/build-azure-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-azure-package-ci-stage.yml
@@ -159,6 +159,7 @@ stages:
dependsOn:
- secrets_stage
+ - compute_versions_ci
- ${{ each dep in parameters.additionalDependsOn }}:
- ${{ dep }}
@@ -166,6 +167,19 @@ stages:
# Bring the SA password from the secrets_stage into scope here.
- name: saPassword
value: $[stageDependencies.secrets_stage.secrets_job.outputs['SaPassword.Value']]
+ # Package versions from compute-versions stage.
+ - name: azurePackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AzurePackageVersion'] ]
+ - name: azureAssemblyFileVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AzureFileVersion'] ]
+ - name: loggingPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ - name: abstractionsPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
+ - name: mdsPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ - name: sqlServerPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
jobs:
diff --git a/eng/pipelines/stages/build-logging-package-ci-stage.yml b/eng/pipelines/stages/build-logging-package-ci-stage.yml
index 6b5f22feeb..97364b5526 100644
--- a/eng/pipelines/stages/build-logging-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-logging-package-ci-stage.yml
@@ -74,9 +74,16 @@ stages:
dependsOn:
- secrets_stage
+ - compute_versions_ci
- ${{ each dep in parameters.additionalDependsOn }}:
- ${{ dep }}
+ variables:
+ - name: loggingPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ - name: loggingAssemblyFileVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.LoggingFileVersion'] ]
+
jobs:
# Create and publish the NuGet package.
diff --git a/eng/pipelines/stages/build-sqlclient-package-ci-stage.yml b/eng/pipelines/stages/build-sqlclient-package-ci-stage.yml
index 858f1c8500..28b188eab9 100644
--- a/eng/pipelines/stages/build-sqlclient-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-sqlclient-package-ci-stage.yml
@@ -92,9 +92,22 @@ stages:
dependsOn:
- secrets_stage
+ - compute_versions_ci
- ${{ each dep in parameters.additionalDependsOn }}:
- ${{ dep }}
+ variables:
+ - name: mdsPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ - name: akvPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AkvProviderPackageVersion'] ]
+ - name: loggingPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ - name: abstractionsPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
+ - name: sqlServerPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
+
jobs:
- template: /eng/pipelines/common/templates/jobs/ci-build-nugets-job.yml@self
parameters:
diff --git a/eng/pipelines/stages/build-sqlserver-package-ci-stage.yml b/eng/pipelines/stages/build-sqlserver-package-ci-stage.yml
index 1711725373..e4e88b8110 100644
--- a/eng/pipelines/stages/build-sqlserver-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-sqlserver-package-ci-stage.yml
@@ -70,9 +70,14 @@ stages:
dependsOn:
- secrets_stage
+ - compute_versions_ci
- ${{ each dep in parameters.additionalDependsOn }}:
- ${{ dep }}
+ variables:
+ - name: sqlServerPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
+
jobs:
- template: /eng/pipelines/jobs/pack-sqlserver-package-ci-job.yml@self
parameters:
diff --git a/eng/pipelines/stages/compute-versions-ci-stage.yml b/eng/pipelines/stages/compute-versions-ci-stage.yml
new file mode 100644
index 0000000000..103415fe00
--- /dev/null
+++ b/eng/pipelines/stages/compute-versions-ci-stage.yml
@@ -0,0 +1,65 @@
+################################################################################
+# Licensed to the .NET Foundation under one or more agreements. The .NET
+# Foundation licenses this file to you under the MIT license. See the LICENSE
+# file in the project root for more information.
+################################################################################
+
+# Compute Versions Stage (CI/PR)
+# ===============================
+# Extracts all package/file versions up-front in a single fast job.
+# Downstream stages consume these via stage dependency output variables:
+#
+# stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.LoggingPackageVersion']
+#
+# In CI/PR mode, ALL packages always use their "next" version (with BuildSuffix
+# appended). There is no released-vs-dependency distinction as in the OneBranch
+# official pipeline.
+#
+# This stage MUST run before all build stages so they can consume computed versions.
+
+parameters:
+ # Build suffix appended to prerelease tag (e.g. 'ci' or 'pr').
+ - name: buildSuffix
+ type: string
+
+stages:
+ - stage: compute_versions_ci
+ displayName: "Compute Package Versions"
+ dependsOn: []
+
+ jobs:
+ - job: compute_versions_job
+ displayName: "Extract versions from Versions.props"
+ pool:
+ vmImage: ubuntu-latest
+
+ steps:
+ # Extract all versions (package, file) per project.
+ # Each GetVersions* target emits labeled stdout lines.
+ - script: |
+ set -euo pipefail
+ echo "Extracting all versions with BuildNumber=$(Build.BuildNumber) BuildSuffix=${{ parameters.buildSuffix }}..."
+
+ extract() {
+ local label="$1"
+ local output
+ output=$(dotnet build "$(Build.SourcesDirectory)/build.proj" \
+ -t:"GetVersions${label}" -v:m -nologo \
+ -p:BuildNumber=$(Build.BuildNumber) \
+ -p:BuildSuffix=${{ parameters.buildSuffix }})
+ local pkg file
+ pkg=$(echo "$output" | sed -n 's/^ *PackageVersion: //p')
+ file=$(echo "$output" | sed -n 's/^ *FileVersion: //p')
+ echo " ${label}: pkg=$pkg file=$file"
+ echo "##vso[task.setvariable variable=${label}PackageVersion;isOutput=true]$pkg"
+ echo "##vso[task.setvariable variable=${label}FileVersion;isOutput=true]$file"
+ }
+
+ extract Logging
+ extract Abstractions
+ extract SqlClient
+ extract Azure
+ extract AkvProvider
+ extract SqlServer
+ displayName: "Extract All Versions"
+ name: "versions"
From c95249608dd34bdc966fdef30a43b8aeddad2b8c Mon Sep 17 00:00:00 2001
From: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
Date: Wed, 3 Jun 2026 11:41:05 -0300
Subject: [PATCH 03/12] Fix review feedback: wire compute-versions into
OneBranch pipelines
- Add compute-versions-stage.yml invocation to official and non-official
OneBranch pipelines, passing release* parameters
- Add dependsOn: compute_versions and stage-level variables to all build
stages in build-stages.yml (resolves versions from stageDependencies)
- Add dependsOn: compute_versions and stage-level variables to
publish-symbols-stage.yml
- Give version parameters default values of $(variableName) so they
resolve at runtime from stage variables when not passed explicitly
- Fix BuildNumber format in docs: use $(Rev:rr) (e.g. 15401)
instead of incorrect 20250602.1 format
- Add comment on name: explaining 16-bit int FileVersion constraint
---
...sqlclient-package-versions.instructions.md | 6 +-
...qlclient-ci-package-reference-pipeline.yml | 3 +
...qlclient-ci-project-reference-pipeline.yml | 3 +
.../onebranch/sqlclient-non-official.yml | 9 ++
.../onebranch/sqlclient-official.yml | 9 ++
.../onebranch/stages/build-stages.yml | 82 +++++++++++++++++--
.../stages/publish-symbols-stage.yml | 23 ++++++
.../sqlclient-pr-package-ref-pipeline.yml | 3 +
.../sqlclient-pr-project-ref-pipeline.yml | 3 +
9 files changed, 129 insertions(+), 12 deletions(-)
diff --git a/.github/instructions/sqlclient-package-versions.instructions.md b/.github/instructions/sqlclient-package-versions.instructions.md
index 9e3425c8da..ff6313d45b 100644
--- a/.github/instructions/sqlclient-package-versions.instructions.md
+++ b/.github/instructions/sqlclient-package-versions.instructions.md
@@ -45,13 +45,13 @@ Each `Versions.props` uses a 3-tier `` block:
**`buildSuffix`** set via core template parameter:
- `buildSuffix: 'pr'` (passed explicitly from PR pipeline)
-- `BuildNumber` = ADO-assigned (e.g. `20250602.1`)
+- `BuildNumber` = `$(DayOfYear)$(Rev:rr)` (e.g. `15401` for day-of-year 154, run 01)
**Mode:** Project (typical PR validation)
- Versions computed in `compute-versions-ci-stage.yml` (runs `GetVersions*` targets with `-p:BuildSuffix=pr -p:BuildNumber=...`)
- Falls into Priority 2 with BuildSuffix present.
-- **Result:** `7.1.0-preview1-pr20250602.1` / FileVersion `7.1.0.20250602`
+- **Result:** `7.1.0-preview1-pr15401` / FileVersion `7.1.0.15401`
- Dependencies are project references — all packages built together in-tree.
**Mode:** Package (PR package-ref validation)
@@ -65,7 +65,7 @@ Each `Versions.props` uses a 3-tier `` block:
Same structure as PR but passes `buildSuffix: 'ci'` explicitly.
-- **Result:** `7.1.0-preview1-ci20250602.1` / FileVersion `7.1.0.20250602`
+- **Result:** `7.1.0-preview1-ci15401` / FileVersion `7.1.0.15401`
### OneBranch Pipeline (official)
diff --git a/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml b/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml
index 219304aadc..8b71c998b8 100644
--- a/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml
+++ b/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml
@@ -41,6 +41,9 @@
# https://sqlclientdrivers.visualstudio.com/ADO.Net/_build?definitionId=1933
# Set the pipeline run name to the day-of-year and the daily run counter.
+# This becomes BuildNumber, used as the revision component of AssemblyFileVersion
+# (Major.Minor.Patch.Revision). Revision must fit in a 16-bit unsigned int (max 65535).
+# Format $(DayOfYear)$(Rev:rr) yields e.g. 15401 (day 154, run 01) — always < 65535.
name: $(DayOfYear)$(Rev:rr)
# Do not trigger this pipeline for PRs.
diff --git a/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml b/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml
index dc144e67e8..bdb7d6ae97 100644
--- a/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml
+++ b/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml
@@ -41,6 +41,9 @@
# https://sqlclientdrivers.visualstudio.com/ADO.Net/_build?definitionId=1825
# Set the pipeline run name to the day-of-year and the daily run counter.
+# This becomes BuildNumber, used as the revision component of AssemblyFileVersion
+# (Major.Minor.Patch.Revision). Revision must fit in a 16-bit unsigned int (max 65535).
+# Format $(DayOfYear)$(Rev:rr) yields e.g. 15401 (day 154, run 01) — always < 65535.
name: $(DayOfYear)$(Rev:rr)
# Do not trigger this pipeline for PRs.
diff --git a/eng/pipelines/onebranch/sqlclient-non-official.yml b/eng/pipelines/onebranch/sqlclient-non-official.yml
index a6eaa5a78a..6bffb7ca13 100644
--- a/eng/pipelines/onebranch/sqlclient-non-official.yml
+++ b/eng/pipelines/onebranch/sqlclient-non-official.yml
@@ -179,6 +179,15 @@ extends:
configFile: '$(REPO_ROOT)/.config/tsaoptions.json'
stages:
+ - template: /eng/pipelines/onebranch/stages/compute-versions-stage.yml@self
+ parameters:
+ releaseSqlServerServer: ${{ parameters.releaseSqlServerServer }}
+ releaseLogging: ${{ parameters.releaseLogging }}
+ releaseAbstractions: ${{ parameters.releaseAbstractions }}
+ releaseSqlClient: ${{ parameters.releaseSqlClient }}
+ releaseAzure: ${{ parameters.releaseAzure }}
+ releaseAkvProvider: ${{ parameters.releaseAkvProvider }}
+
- template: /eng/pipelines/onebranch/stages/build-stages.yml@self
parameters:
isOfficial: false # This is a non-official pipeline.
diff --git a/eng/pipelines/onebranch/sqlclient-official.yml b/eng/pipelines/onebranch/sqlclient-official.yml
index cdf8bcd32f..09d3a11d22 100644
--- a/eng/pipelines/onebranch/sqlclient-official.yml
+++ b/eng/pipelines/onebranch/sqlclient-official.yml
@@ -207,6 +207,15 @@ extends:
configFile: '$(REPO_ROOT)/.config/tsaoptions.json'
stages:
+ - template: /eng/pipelines/onebranch/stages/compute-versions-stage.yml@self
+ parameters:
+ releaseSqlServerServer: ${{ parameters.releaseSqlServerServer }}
+ releaseLogging: ${{ parameters.releaseLogging }}
+ releaseAbstractions: ${{ parameters.releaseAbstractions }}
+ releaseSqlClient: ${{ parameters.releaseSqlClient }}
+ releaseAzure: ${{ parameters.releaseAzure }}
+ releaseAkvProvider: ${{ parameters.releaseAkvProvider }}
+
- template: /eng/pipelines/onebranch/stages/build-stages.yml@self
parameters:
isOfficial: true # This is an official pipeline.
diff --git a/eng/pipelines/onebranch/stages/build-stages.yml b/eng/pipelines/onebranch/stages/build-stages.yml
index 991b226a1a..34b08c7d0b 100644
--- a/eng/pipelines/onebranch/stages/build-stages.yml
+++ b/eng/pipelines/onebranch/stages/build-stages.yml
@@ -34,48 +34,57 @@ parameters:
type: boolean
# ── Pre-computed versions (from compute-versions stage) ─────────────────
+ # These default to $(variableName) tokens that resolve at runtime from
+ # stage-level variables populated via stageDependencies.compute_versions outputs.
+ # Callers may override with explicit values if needed.
- name: loggingPackageVersion
type: string
+ default: $(loggingPackageVersion)
- name: abstractionsPackageVersion
type: string
+ default: $(abstractionsPackageVersion)
- name: sqlClientPackageVersion
type: string
+ default: $(sqlClientPackageVersion)
- name: azurePackageVersion
type: string
+ default: $(azurePackageVersion)
- name: akvProviderPackageVersion
type: string
+ default: $(akvProviderPackageVersion)
- name: sqlServerPackageVersion
type: string
+ default: $(sqlServerPackageVersion)
- name: loggingFileVersion
type: string
- default: ''
+ default: $(loggingFileVersion)
- name: abstractionsFileVersion
type: string
- default: ''
+ default: $(abstractionsFileVersion)
- name: sqlClientFileVersion
type: string
- default: ''
+ default: $(sqlClientFileVersion)
- name: azureFileVersion
type: string
- default: ''
+ default: $(azureFileVersion)
- name: akvProviderFileVersion
type: string
- default: ''
+ default: $(akvProviderFileVersion)
- name: sqlServerFileVersion
type: string
- default: ''
+ default: $(sqlServerFileVersion)
# Package Parameters -----------------------------------------------------
@@ -124,6 +133,17 @@ stages:
# ====================================================================
- stage: build_independent
displayName: "Build Independent Packages"
+ dependsOn: compute_versions
+
+ variables:
+ - name: loggingPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ - name: loggingFileVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingFileVersion'] ]
+ - name: sqlServerPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
+ - name: sqlServerFileVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerFileVersion'] ]
jobs:
- ${{ if or(eq(parameters.buildAkvProvider, true), eq(parameters.buildSqlClient, true)) }}:
@@ -175,7 +195,17 @@ stages:
- ${{ if eq(parameters.buildSqlClient, true) }}:
- stage: build_abstractions
displayName: "Build Abstractions Package"
- dependsOn: build_independent
+ dependsOn:
+ - compute_versions
+ - build_independent
+
+ variables:
+ - name: loggingPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ - name: abstractionsPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
+ - name: abstractionsFileVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AbstractionsFileVersion'] ]
jobs:
# Build Microsoft.Data.SqlClient.Extensions.Abstractions
@@ -208,7 +238,25 @@ stages:
- ${{ if eq(parameters.buildSqlClient, true) }}:
- stage: build_dependent
displayName: "Build Core Packages"
- dependsOn: build_abstractions
+ dependsOn:
+ - compute_versions
+ - build_abstractions
+
+ variables:
+ - name: abstractionsPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
+ - name: loggingPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ - name: sqlServerPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
+ - name: sqlClientPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ - name: sqlClientFileVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
+ - name: azurePackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AzurePackageVersion'] ]
+ - name: azureFileVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AzureFileVersion'] ]
jobs:
- template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
@@ -270,7 +318,23 @@ stages:
- ${{ if and(eq(parameters.buildAkvProvider, true), eq(parameters.buildSqlClient, true)) }}:
- stage: build_addons
displayName: "Build Add-on Packages"
- dependsOn: build_dependent
+ dependsOn:
+ - compute_versions
+ - build_dependent
+
+ variables:
+ - name: abstractionsPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
+ - name: loggingPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ - name: sqlClientPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ - name: sqlServerPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
+ - name: akvProviderPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AkvProviderPackageVersion'] ]
+ - name: akvProviderFileVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AkvProviderFileVersion'] ]
jobs:
- template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
diff --git a/eng/pipelines/onebranch/stages/publish-symbols-stage.yml b/eng/pipelines/onebranch/stages/publish-symbols-stage.yml
index 8ba657e6fb..8854b66631 100644
--- a/eng/pipelines/onebranch/stages/publish-symbols-stage.yml
+++ b/eng/pipelines/onebranch/stages/publish-symbols-stage.yml
@@ -76,24 +76,32 @@ parameters:
type: string
# ── Pre-computed versions (from compute-versions stage) ─────────────────
+ # These default to $(variableName) tokens that resolve at runtime from
+ # stage-level variables populated via stageDependencies.compute_versions outputs.
- name: loggingPackageVersion
type: string
+ default: $(loggingPackageVersion)
- name: abstractionsPackageVersion
type: string
+ default: $(abstractionsPackageVersion)
- name: sqlClientPackageVersion
type: string
+ default: $(sqlClientPackageVersion)
- name: azurePackageVersion
type: string
+ default: $(azurePackageVersion)
- name: akvProviderPackageVersion
type: string
+ default: $(akvProviderPackageVersion)
- name: sqlServerPackageVersion
type: string
+ default: $(sqlServerPackageVersion)
stages:
# Stage is emitted whenever publishSymbols is true. If no packages were
@@ -105,6 +113,7 @@ stages:
# Depend on whichever build stages produced artifacts we need to publish.
dependsOn:
+ - compute_versions
- ${{ if or(parameters.buildSqlServerServer, parameters.buildSqlClient, parameters.buildAkvProvider) }}:
- build_independent
- ${{ if parameters.buildSqlClient }}:
@@ -113,6 +122,20 @@ stages:
- ${{ if and(parameters.buildAkvProvider, parameters.buildSqlClient) }}:
- build_addons
+ variables:
+ - name: loggingPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ - name: abstractionsPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
+ - name: sqlClientPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ - name: azurePackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AzurePackageVersion'] ]
+ - name: akvProviderPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AkvProviderPackageVersion'] ]
+ - name: sqlServerPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
+
jobs:
# ── No-op placeholder ──────────────────────────────────────────
# When no packages were built, this job keeps the stage valid
diff --git a/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml b/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml
index 9d89395bd4..94be94bd6c 100644
--- a/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml
+++ b/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml
@@ -20,6 +20,9 @@
# https://dev.azure.com/SqlClientDrivers/public/_build?definitionId=2198
# Set the pipeline run name to the day-of-year and the daily run counter.
+# This becomes BuildNumber, used as the revision component of AssemblyFileVersion
+# (Major.Minor.Patch.Revision). Revision must fit in a 16-bit unsigned int (max 65535).
+# Format $(DayOfYear)$(Rev:rr) yields e.g. 15401 (day 154, run 01) — always < 65535.
name: $(DayOfYear)$(Rev:rr)
# Trigger PR validation runs for all pushes to PRs that target the specified
diff --git a/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml b/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml
index f5e5626418..01a335662e 100644
--- a/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml
+++ b/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml
@@ -20,6 +20,9 @@
# https://dev.azure.com/SqlClientDrivers/public/_build?definitionId=2197
# Set the pipeline run name to the day-of-year and the daily run counter.
+# This becomes BuildNumber, used as the revision component of AssemblyFileVersion
+# (Major.Minor.Patch.Revision). Revision must fit in a 16-bit unsigned int (max 65535).
+# Format $(DayOfYear)$(Rev:rr) yields e.g. 15401 (day 154, run 01) — always < 65535.
name: $(DayOfYear)$(Rev:rr)
# Trigger PR validation runs for all pushes to PRs that target the specified
From e63eafa0c03777dc442dd1ecae309aea5cdd63e5 Mon Sep 17 00:00:00 2001
From: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
Date: Mon, 22 Jun 2026 13:39:48 -0300
Subject: [PATCH 04/12] Wire computed package versions into CI test stage
The CI/PR test stage (ci-run-tests-stage.yml) did not depend on the
compute_versions_ci stage nor define the package version variables from
its outputs. In Package mode this left the $(...PackageVersion) macros
empty, causing dotnet test restore to fail with NU1604/NU1602 across all
test legs.
Add compute_versions_ci to the stage dependsOn and map
abstractions/logging/mds/sqlServer package versions from its outputs,
mirroring the build stages.
---
.../common/templates/stages/ci-run-tests-stage.yml | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml b/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml
index 86ddc0ca45..0eacdd779e 100644
--- a/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml
+++ b/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml
@@ -94,6 +94,7 @@ stages:
- stage: ${{ image.key }}
dependsOn:
- secrets_stage
+ - compute_versions_ci
- ${{ each dep in parameters.additionalDependsOn }}:
- ${{ dep }}
@@ -102,6 +103,18 @@ stages:
- name: saPassword
value: $[stageDependencies.secrets_stage.secrets_job.outputs['SaPassword.Value']]
+ # Bring the computed package versions into scope so that the
+ # $(...PackageVersion) macros passed to the test jobs resolve when
+ # building/restoring in Package mode. These mirror the build stages.
+ - name: abstractionsPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
+ - name: loggingPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ - name: mdsPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ - name: sqlServerPackageVersion
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
+
jobs:
- ${{ each targetFramework in config.value.TargetFrameworks }}:
- ${{ each platform in config.value.buildPlatforms }}:
From cf9afb31ad7335fcbc80531bec061749caf4109a Mon Sep 17 00:00:00 2001
From: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
Date: Mon, 22 Jun 2026 14:51:02 -0300
Subject: [PATCH 05/12] Unify SqlClient family packages onto a single shared
version
All SqlClient family packages (Internal.Logging, Extensions.Abstractions,
Microsoft.Data.SqlClient, Extensions.Azure, and the AlwaysEncrypted
AzureKeyVaultProvider) now share the SqlClient version (package, file, and
assembly). Microsoft.SqlServer.Server remains versioned separately.
- src/Directory.Build.props imports the canonical SqlClient Versions.props
for every project, exposing SqlClient{Package,File,Assembly}Version globally.
- Deleted the four family Versions.props; family csproj reference SqlClient*.
- src/Microsoft.Data.SqlClient/Versions.props is the family version source;
removed SqlClientPublishedVersion (the family always ships its next version).
- Directory.Packages.props pins all family packages to the shared
SqlClientPackageVersion range; imports only the SqlServer Versions.props.
- build.proj: collapsed GetVersions* to GetVersionsSqlClient + GetVersionsSqlServer;
family PackageVersion*Argument values alias PackageVersionSqlClientArgument.
- SqlClient nuspec uses a single $SqlClientVersionRange$ token for the family
dependencies (Abstractions, Logging).
Verified locally: family projects resolve to the SqlClient version in dev/ci
and explicit-override modes; SqlServer stays independent; Package-mode pack of
SqlClient emits family deps at the shared range and SqlServer at its own.
---
Directory.Packages.props | 53 ++--
build.proj | 236 ++++--------------
src/Directory.Build.props | 14 ++
...waysEncrypted.AzureKeyVaultProvider.csproj | 13 +-
.../src/Versions.props | 97 -------
.../Abstractions/src/Abstractions.csproj | 13 +-
.../Abstractions/src/Versions.props | 98 --------
.../Azure/src/Azure.csproj | 13 +-
.../Azure/src/Versions.props | 97 -------
.../Logging/src/Logging.csproj | 13 +-
.../Logging/src/Versions.props | 98 --------
src/Microsoft.Data.SqlClient/Versions.props | 17 +-
.../src/Microsoft.Data.SqlClient.csproj | 16 +-
.../src/Microsoft.Data.SqlClient.nuspec | 16 +-
14 files changed, 134 insertions(+), 660 deletions(-)
delete mode 100644 src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/src/Versions.props
delete mode 100644 src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Versions.props
delete mode 100644 src/Microsoft.Data.SqlClient.Extensions/Azure/src/Versions.props
delete mode 100644 src/Microsoft.Data.SqlClient.Internal/Logging/src/Versions.props
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 59839f2351..245c716d33 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -4,28 +4,27 @@
+
-
-
-
-
-
@@ -58,36 +57,38 @@
$([MSBuild]::Add($(SqlServerPackageVersion.Trim().Split('.')[0]), 1)).0.0
- $([MSBuild]::Add($(LoggingPackageVersion.Trim().Split('.')[0]), 1)).0.0
- $([MSBuild]::Add($(AbstractionsPackageVersion.Trim().Split('.')[0]), 1)).0.0
$([MSBuild]::Add($(SqlClientPackageVersion.Trim().Split('.')[0]), 1)).0.0
- $([MSBuild]::Add($(AzurePackageVersion.Trim().Split('.')[0]), 1)).0.0
- $([MSBuild]::Add($(AkvProviderPackageVersion.Trim().Split('.')[0]), 1)).0.0
-
+
+ Version="[$(SqlClientPackageVersion), $(SqlClientVersionCeiling))" />
+ Version="[$(SqlClientPackageVersion), $(SqlClientVersionCeiling))" />
+ Version="[$(SqlClientPackageVersion), $(SqlClientVersionCeiling))" />
+ Version="[$(SqlClientPackageVersion), $(SqlClientVersionCeiling))" />
diff --git a/build.proj b/build.proj
index 2497f724a6..b36ef3deab 100644
--- a/build.proj
+++ b/build.proj
@@ -89,99 +89,31 @@
-
-
- -p:AbstractionsPackageVersion=$(PackageVersionAbstractions)
-
-
-
-
-
- -p:AkvProviderPackageVersion=$(PackageVersionAkvProvider)
-
-
-
-
-
- -p:AzurePackageVersion=$(PackageVersionAzure)
-
-
-
-
-
- -p:LoggingPackageVersion=$(PackageVersionLogging)
-
+ $(PackageVersionSqlClientArgument)
+ $(PackageVersionSqlClientArgument)
+ $(PackageVersionSqlClientArgument)
+ $(PackageVersionSqlClientArgument)
+
-
-
- <_Cmd>"$(DotnetPath)dotnet" build "$(LoggingProjectPath)" -getProperty:LoggingPackageVersion $(BuildNumberArgument) $(BuildSuffixArgument)
- <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
-
-
-
-
-
-
-
-
- <_Cmd>"$(DotnetPath)dotnet" build "$(LoggingProjectPath)" -getProperty:LoggingFileVersion $(BuildNumberArgument) $(BuildSuffixArgument)
- <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
-
-
-
-
-
-
-
-
-
-
-
- <_Cmd>"$(DotnetPath)dotnet" build "$(AbstractionsProjectPath)" -getProperty:AbstractionsPackageVersion $(BuildNumberArgument) $(BuildSuffixArgument)
- <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
-
-
-
-
-
-
-
-
- <_Cmd>"$(DotnetPath)dotnet" build "$(AbstractionsProjectPath)" -getProperty:AbstractionsFileVersion $(BuildNumberArgument) $(BuildSuffixArgument)
- <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
-
-
-
-
-
-
-
-
-
<_Cmd>"$(DotnetPath)dotnet" build "$(SqlClientProjectPath)" -getProperty:SqlClientPackageVersion $(BuildNumberArgument) $(BuildSuffixArgument)
@@ -459,9 +361,6 @@
-
-
-
<_Cmd>"$(DotnetPath)dotnet" build "$(SqlClientProjectPath)" -getProperty:SqlClientFileVersion $(BuildNumberArgument) $(BuildSuffixArgument)
<_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
@@ -470,53 +369,6 @@
-
-
-
-
-
-
- <_Cmd>"$(DotnetPath)dotnet" build "$(AzureProjectPath)" -getProperty:AzurePackageVersion $(BuildNumberArgument) $(BuildSuffixArgument)
- <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
-
-
-
-
-
-
-
-
- <_Cmd>"$(DotnetPath)dotnet" build "$(AzureProjectPath)" -getProperty:AzureFileVersion $(BuildNumberArgument) $(BuildSuffixArgument)
- <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
-
-
-
-
-
-
-
-
-
-
-
- <_Cmd>"$(DotnetPath)dotnet" build "$(AkvProviderProjectPath)" -getProperty:AkvProviderPackageVersion $(BuildNumberArgument) $(BuildSuffixArgument)
- <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
-
-
-
-
-
-
-
-
- <_Cmd>"$(DotnetPath)dotnet" build "$(AkvProviderProjectPath)" -getProperty:AkvProviderFileVersion $(BuildNumberArgument) $(BuildSuffixArgument)
- <_Cmd>$([System.Text.RegularExpressions.Regex]::Replace($(_Cmd), "\s+", " "))
-
-
-
-
-
-
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index b3e0663fd3..2c4b54b5d0 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -61,6 +61,20 @@
$(BuildNumber.Split('.')[0])
+
+
+
diff --git a/src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider.csproj b/src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider.csproj
index 203aabd1f5..e2636ac11e 100644
--- a/src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider.csproj
+++ b/src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider.csproj
@@ -12,14 +12,13 @@
-
-
+
- $(AkvProviderAssemblyVersion)
- $(AkvProviderFileVersion)
- $(AkvProviderPackageVersion)
+ $(SqlClientAssemblyVersion)
+ $(SqlClientFileVersion)
+ $(SqlClientPackageVersion)
diff --git a/src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/src/Versions.props b/src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/src/Versions.props
deleted file mode 100644
index 593c321043..0000000000
--- a/src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/src/Versions.props
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
-
-
- true
-
-
-
-
-
- 7.0.0
-
-
- 7.1.0-preview1
-
-
-
-
-
-
-
- $(AkvProviderPackageVersion.Split('-')[0]).$(FileVersionBuildNumber)
-
-
-
-
-
-
- $(AkvProviderNextVersion)-$(BuildSuffix)$(BuildNumber)
- $(AkvProviderNextVersion)
-
- $(AkvProviderNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
-
-
-
-
-
-
- $(AkvProviderNextVersion)-dev
- $(AkvProviderNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
-
-
-
-
-
-
- $(AkvProviderFileVersion.Split('.')[0]).0.0.0
-
-
diff --git a/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Abstractions.csproj b/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Abstractions.csproj
index 0a9d29aa1e..e8b3c55ba0 100644
--- a/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Abstractions.csproj
+++ b/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Abstractions.csproj
@@ -22,14 +22,13 @@
-
-
+
- $(AbstractionsAssemblyVersion)
- $(AbstractionsFileVersion)
- $(AbstractionsPackageVersion)
+ $(SqlClientAssemblyVersion)
+ $(SqlClientFileVersion)
+ $(SqlClientPackageVersion)
diff --git a/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Versions.props b/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Versions.props
deleted file mode 100644
index 7d34123506..0000000000
--- a/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Versions.props
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
- true
-
-
-
-
-
- 1.0.0
-
-
- 1.1.0-preview1
-
-
-
-
-
-
-
- $(AbstractionsPackageVersion.Split('-')[0]).$(FileVersionBuildNumber)
-
-
-
-
-
-
- $(AbstractionsNextVersion)-$(BuildSuffix)$(BuildNumber)
- $(AbstractionsNextVersion)
-
- $(AbstractionsNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
-
-
-
-
-
-
- $(AbstractionsNextVersion)-dev
- $(AbstractionsNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
-
-
-
-
-
-
- $(AbstractionsFileVersion.Split('.')[0]).0.0.0
-
-
diff --git a/src/Microsoft.Data.SqlClient.Extensions/Azure/src/Azure.csproj b/src/Microsoft.Data.SqlClient.Extensions/Azure/src/Azure.csproj
index b9a3b82c27..da0a4cb4c7 100644
--- a/src/Microsoft.Data.SqlClient.Extensions/Azure/src/Azure.csproj
+++ b/src/Microsoft.Data.SqlClient.Extensions/Azure/src/Azure.csproj
@@ -22,14 +22,13 @@
-
-
+
- $(AzureAssemblyVersion)
- $(AzureFileVersion)
- $(AzurePackageVersion)
+ $(SqlClientAssemblyVersion)
+ $(SqlClientFileVersion)
+ $(SqlClientPackageVersion)
diff --git a/src/Microsoft.Data.SqlClient.Extensions/Azure/src/Versions.props b/src/Microsoft.Data.SqlClient.Extensions/Azure/src/Versions.props
deleted file mode 100644
index a2293a0958..0000000000
--- a/src/Microsoft.Data.SqlClient.Extensions/Azure/src/Versions.props
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
-
-
- true
-
-
-
-
-
- 1.0.0
-
-
- 1.1.0-preview1
-
-
-
-
-
-
-
- $(AzurePackageVersion.Split('-')[0]).$(FileVersionBuildNumber)
-
-
-
-
-
-
- $(AzureNextVersion)-$(BuildSuffix)$(BuildNumber)
- $(AzureNextVersion)
-
- $(AzureNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
-
-
-
-
-
-
- $(AzureNextVersion)-dev
- $(AzureNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
-
-
-
-
-
-
- $(AzureFileVersion.Split('.')[0]).0.0.0
-
-
diff --git a/src/Microsoft.Data.SqlClient.Internal/Logging/src/Logging.csproj b/src/Microsoft.Data.SqlClient.Internal/Logging/src/Logging.csproj
index d1c3e0fc5c..d83b8ae577 100644
--- a/src/Microsoft.Data.SqlClient.Internal/Logging/src/Logging.csproj
+++ b/src/Microsoft.Data.SqlClient.Internal/Logging/src/Logging.csproj
@@ -24,14 +24,13 @@
-
-
+
- $(LoggingAssemblyVersion)
- $(LoggingFileVersion)
- $(LoggingPackageVersion)
+ $(SqlClientAssemblyVersion)
+ $(SqlClientFileVersion)
+ $(SqlClientPackageVersion)
diff --git a/src/Microsoft.Data.SqlClient.Internal/Logging/src/Versions.props b/src/Microsoft.Data.SqlClient.Internal/Logging/src/Versions.props
deleted file mode 100644
index 1b7ba13f95..0000000000
--- a/src/Microsoft.Data.SqlClient.Internal/Logging/src/Versions.props
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
- true
-
-
-
-
-
- 1.0.0
-
-
- 1.1.0-preview1
-
-
-
-
-
-
-
- $(LoggingPackageVersion.Split('-')[0]).$(FileVersionBuildNumber)
-
-
-
-
-
-
- $(LoggingNextVersion)-$(BuildSuffix)$(BuildNumber)
- $(LoggingNextVersion)
-
- $(LoggingNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
-
-
-
-
-
-
- $(LoggingNextVersion)-dev
- $(LoggingNextVersion.Split('-')[0]).$(FileVersionBuildNumber)
-
-
-
-
-
-
- $(LoggingFileVersion.Split('.')[0]).0.0.0
-
-
diff --git a/src/Microsoft.Data.SqlClient/Versions.props b/src/Microsoft.Data.SqlClient/Versions.props
index d1bc0b0ad4..823d1d7bec 100644
--- a/src/Microsoft.Data.SqlClient/Versions.props
+++ b/src/Microsoft.Data.SqlClient/Versions.props
@@ -14,10 +14,15 @@
-->
true
@@ -25,11 +30,9 @@
-
- 7.0.0
-
7.1.0-preview1
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj
index 06eaf9e914..407e196870 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj
@@ -196,27 +196,25 @@
- <_AbstractionsPackageVersionTrimmed>$([System.String]::Copy('$(AbstractionsPackageVersion)').Trim())
- <_LoggingPackageVersionTrimmed>$([System.String]::Copy('$(LoggingPackageVersion)').Trim())
+ <_SqlClientPackageVersionTrimmed>$([System.String]::Copy('$(SqlClientPackageVersion)').Trim())
<_SqlServerPackageVersionTrimmed>$([System.String]::Copy('$(SqlServerPackageVersion)').Trim())
-
-
+
- <_AbstractionsVersionRange>[$(_AbstractionsPackageVersionTrimmed), $([MSBuild]::Add($(_AbstractionsPackageVersionTrimmed.Split('.')[0]), 1)).0.0)
- <_LoggingVersionRange>[$(_LoggingPackageVersionTrimmed), $([MSBuild]::Add($(_LoggingPackageVersionTrimmed.Split('.')[0]), 1)).0.0)
+ <_SqlClientVersionRange>[$(_SqlClientPackageVersionTrimmed), $([MSBuild]::Add($(_SqlClientPackageVersionTrimmed.Split('.')[0]), 1)).0.0)
<_SqlServerVersionRange>[$(_SqlServerPackageVersionTrimmed), $([MSBuild]::Add($(_SqlServerPackageVersionTrimmed.Split('.')[0]), 1)).0.0)
- <_SqlClientPackNuspecExpandedText>$([System.IO.File]::ReadAllText('$(SqlClientPackNuspecTemplatePath)').Replace('$AbstractionsVersionRange$','$(_AbstractionsVersionRange)').Replace('$LoggingVersionRange$','$(_LoggingVersionRange)').Replace('$SqlServerVersionRange$','$(_SqlServerVersionRange)').Replace('$SniVersionRange$','$(SniVersionRange)'))
+ <_SqlClientPackNuspecExpandedText>$([System.IO.File]::ReadAllText('$(SqlClientPackNuspecTemplatePath)').Replace('$SqlClientVersionRange$','$(_SqlClientVersionRange)').Replace('$SqlServerVersionRange$','$(_SqlServerVersionRange)').Replace('$SniVersionRange$','$(SniVersionRange)'))
-
-
+
+
@@ -56,8 +56,8 @@
-
-
+
+
@@ -68,8 +68,8 @@
-
-
+
+
@@ -81,8 +81,8 @@
-
-
+
+
From f0955bd9fe59379027e8d98095fd60726659c346 Mon Sep 17 00:00:00 2001
From: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
Date: Mon, 22 Jun 2026 15:00:30 -0300
Subject: [PATCH 06/12] Simplify OneBranch pipeline for unified SqlClient
family version
The compute-versions stage now resolves a single SqlClient family version plus
a separately-versioned SqlServer version (one releaseSqlServerServer toggle).
Build, symbols, and release stages consume sqlClient{Package,File}Version for
all family packages and sqlServer* for Microsoft.SqlServer.Server.
- compute-versions-stage.yml: extracts only GetVersionsSqlClient + GetVersionsSqlServer;
emits SqlClient + SqlServer outputs.
- build-stages.yml / publish-symbols-stage.yml: family jobs use the shared SqlClient version.
- release-stages.yml: five family release toggles collapsed to one releaseSqlClient
(family released together); releaseSqlServerServer kept separate.
- official/non-official entries: collapsed release parameters; build* and
publishSymbols toggles unchanged.
- package-variables.yml: updated version-strategy comment.
---
.../onebranch/sqlclient-non-official.yml | 41 +------
.../onebranch/sqlclient-official.yml | 41 +------
.../onebranch/stages/build-stages.yml | 106 +++++------------
.../stages/compute-versions-stage.yml | 111 ++++--------------
.../stages/publish-symbols-stage.yml | 33 +-----
.../onebranch/stages/release-stages.yml | 32 ++---
.../onebranch/variables/package-variables.yml | 11 +-
7 files changed, 88 insertions(+), 287 deletions(-)
diff --git a/eng/pipelines/onebranch/sqlclient-non-official.yml b/eng/pipelines/onebranch/sqlclient-non-official.yml
index 6bffb7ca13..d09f449fe7 100644
--- a/eng/pipelines/onebranch/sqlclient-non-official.yml
+++ b/eng/pipelines/onebranch/sqlclient-non-official.yml
@@ -53,39 +53,17 @@ parameters:
# Release parameters — select which packages to publish to NuGet.
# All default to false; toggle at queue time for on-demand selective release.
- # Release the Microsoft.SqlServer.Server package.
+ # Release the Microsoft.SqlServer.Server package (versioned separately).
- name: releaseSqlServerServer
displayName: Release Microsoft.SqlServer.Server
type: boolean
default: false
- # Release the Microsoft.Data.SqlClient.Internal.Logging package.
- - name: releaseLogging
- displayName: Release Microsoft.Data.SqlClient.Internal.Logging
- type: boolean
- default: false
-
- # Release the Microsoft.Data.SqlClient.Extensions.Abstractions package.
- - name: releaseAbstractions
- displayName: Release Microsoft.Data.SqlClient.Extensions.Abstractions
- type: boolean
- default: false
-
- # Release the Microsoft.Data.SqlClient package.
+ # Release the SqlClient family (Internal.Logging, Extensions.Abstractions,
+ # Microsoft.Data.SqlClient, Extensions.Azure, and the AlwaysEncrypted AzureKeyVaultProvider).
+ # The family is always released together at the shared SqlClient version.
- name: releaseSqlClient
- displayName: Release Microsoft.Data.SqlClient
- type: boolean
- default: false
-
- # Release the Microsoft.Data.SqlClient.Extensions.Azure package.
- - name: releaseAzure
- displayName: Release Microsoft.Data.SqlClient.Extensions.Azure
- type: boolean
- default: false
-
- # Release the Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider package.
- - name: releaseAkvProvider
- displayName: Release Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider
+ displayName: Release SqlClient family
type: boolean
default: false
@@ -182,11 +160,6 @@ extends:
- template: /eng/pipelines/onebranch/stages/compute-versions-stage.yml@self
parameters:
releaseSqlServerServer: ${{ parameters.releaseSqlServerServer }}
- releaseLogging: ${{ parameters.releaseLogging }}
- releaseAbstractions: ${{ parameters.releaseAbstractions }}
- releaseSqlClient: ${{ parameters.releaseSqlClient }}
- releaseAzure: ${{ parameters.releaseAzure }}
- releaseAkvProvider: ${{ parameters.releaseAkvProvider }}
- template: /eng/pipelines/onebranch/stages/build-stages.yml@self
parameters:
@@ -249,8 +222,4 @@ extends:
sqlServerArtifactsName: '${{ variables.sqlServerArtifactsName }}'
releaseSqlServerServer: ${{ parameters.releaseSqlServerServer }}
- releaseLogging: ${{ parameters.releaseLogging }}
- releaseAbstractions: ${{ parameters.releaseAbstractions }}
releaseSqlClient: ${{ parameters.releaseSqlClient }}
- releaseAzure: ${{ parameters.releaseAzure }}
- releaseAkvProvider: ${{ parameters.releaseAkvProvider }}
diff --git a/eng/pipelines/onebranch/sqlclient-official.yml b/eng/pipelines/onebranch/sqlclient-official.yml
index 09d3a11d22..57e34fd726 100644
--- a/eng/pipelines/onebranch/sqlclient-official.yml
+++ b/eng/pipelines/onebranch/sqlclient-official.yml
@@ -75,39 +75,17 @@ parameters:
# Release parameters — select which packages to publish to NuGet.
# All default to false; toggle at queue time for on-demand selective release.
- # Release the Microsoft.SqlServer.Server package.
+ # Release the Microsoft.SqlServer.Server package (versioned separately).
- name: releaseSqlServerServer
displayName: Release Microsoft.SqlServer.Server
type: boolean
default: false
- # Release the Microsoft.Data.SqlClient.Internal.Logging package.
- - name: releaseLogging
- displayName: Release Microsoft.Data.SqlClient.Internal.Logging
- type: boolean
- default: false
-
- # Release the Microsoft.Data.SqlClient.Extensions.Abstractions package.
- - name: releaseAbstractions
- displayName: Release Microsoft.Data.SqlClient.Extensions.Abstractions
- type: boolean
- default: false
-
- # Release the Microsoft.Data.SqlClient package.
+ # Release the SqlClient family (Internal.Logging, Extensions.Abstractions,
+ # Microsoft.Data.SqlClient, Extensions.Azure, and the AlwaysEncrypted AzureKeyVaultProvider).
+ # The family is always released together at the shared SqlClient version.
- name: releaseSqlClient
- displayName: Release Microsoft.Data.SqlClient
- type: boolean
- default: false
-
- # Release the Microsoft.Data.SqlClient.Extensions.Azure package.
- - name: releaseAzure
- displayName: Release Microsoft.Data.SqlClient.Extensions.Azure
- type: boolean
- default: false
-
- # Release the Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider package.
- - name: releaseAkvProvider
- displayName: Release Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider
+ displayName: Release SqlClient family
type: boolean
default: false
@@ -210,11 +188,6 @@ extends:
- template: /eng/pipelines/onebranch/stages/compute-versions-stage.yml@self
parameters:
releaseSqlServerServer: ${{ parameters.releaseSqlServerServer }}
- releaseLogging: ${{ parameters.releaseLogging }}
- releaseAbstractions: ${{ parameters.releaseAbstractions }}
- releaseSqlClient: ${{ parameters.releaseSqlClient }}
- releaseAzure: ${{ parameters.releaseAzure }}
- releaseAkvProvider: ${{ parameters.releaseAkvProvider }}
- template: /eng/pipelines/onebranch/stages/build-stages.yml@self
parameters:
@@ -281,8 +254,4 @@ extends:
sqlServerArtifactsName: '${{ variables.sqlServerArtifactsName }}'
releaseSqlServerServer: ${{ parameters.releaseSqlServerServer }}
- releaseLogging: ${{ parameters.releaseLogging }}
- releaseAbstractions: ${{ parameters.releaseAbstractions }}
releaseSqlClient: ${{ parameters.releaseSqlClient }}
- releaseAzure: ${{ parameters.releaseAzure }}
- releaseAkvProvider: ${{ parameters.releaseAkvProvider }}
diff --git a/eng/pipelines/onebranch/stages/build-stages.yml b/eng/pipelines/onebranch/stages/build-stages.yml
index 34b08c7d0b..840f7a7b96 100644
--- a/eng/pipelines/onebranch/stages/build-stages.yml
+++ b/eng/pipelines/onebranch/stages/build-stages.yml
@@ -37,51 +37,23 @@ parameters:
# These default to $(variableName) tokens that resolve at runtime from
# stage-level variables populated via stageDependencies.compute_versions outputs.
# Callers may override with explicit values if needed.
-
- - name: loggingPackageVersion
- type: string
- default: $(loggingPackageVersion)
-
- - name: abstractionsPackageVersion
- type: string
- default: $(abstractionsPackageVersion)
+ #
+ # The SqlClient family (Logging, Abstractions, SqlClient, Azure, AKV Provider) shares the
+ # SqlClient version, so a single sqlClient{Package,File}Version covers them all.
+ # Microsoft.SqlServer.Server is versioned separately.
- name: sqlClientPackageVersion
type: string
default: $(sqlClientPackageVersion)
- - name: azurePackageVersion
- type: string
- default: $(azurePackageVersion)
-
- - name: akvProviderPackageVersion
- type: string
- default: $(akvProviderPackageVersion)
-
- name: sqlServerPackageVersion
type: string
default: $(sqlServerPackageVersion)
- - name: loggingFileVersion
- type: string
- default: $(loggingFileVersion)
-
- - name: abstractionsFileVersion
- type: string
- default: $(abstractionsFileVersion)
-
- name: sqlClientFileVersion
type: string
default: $(sqlClientFileVersion)
- - name: azureFileVersion
- type: string
- default: $(azureFileVersion)
-
- - name: akvProviderFileVersion
- type: string
- default: $(akvProviderFileVersion)
-
- name: sqlServerFileVersion
type: string
default: $(sqlServerFileVersion)
@@ -136,10 +108,10 @@ stages:
dependsOn: compute_versions
variables:
- - name: loggingPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
- - name: loggingFileVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingFileVersion'] ]
+ - name: sqlClientPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ - name: sqlClientFileVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
- name: sqlServerPackageVersion
value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
- name: sqlServerFileVersion
@@ -161,10 +133,10 @@ stages:
signingEsrpConnectedServiceName: '${{ parameters.signingEsrpConnectedServiceName }}'
dependencies: []
- fileVersion: '${{ parameters.loggingFileVersion }}'
+ fileVersion: '${{ parameters.sqlClientFileVersion }}'
packageFullName: 'Microsoft.Data.SqlClient.Internal.Logging'
packageShortName: 'Logging'
- packageVersion: '${{ parameters.loggingPackageVersion }}'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
- ${{ if eq(parameters.buildSqlServerServer, true) }}:
@@ -200,12 +172,10 @@ stages:
- build_independent
variables:
- - name: loggingPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
- - name: abstractionsPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
- - name: abstractionsFileVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AbstractionsFileVersion'] ]
+ - name: sqlClientPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ - name: sqlClientFileVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
jobs:
# Build Microsoft.Data.SqlClient.Extensions.Abstractions
@@ -224,11 +194,11 @@ stages:
dependencies:
- artifactName: '${{ parameters.loggingArtifactsName }}'
shortName: 'Logging'
- version: '${{ parameters.loggingPackageVersion }}'
- fileVersion: '${{ parameters.abstractionsFileVersion }}'
+ version: '${{ parameters.sqlClientPackageVersion }}'
+ fileVersion: '${{ parameters.sqlClientFileVersion }}'
packageFullName: 'Microsoft.Data.SqlClient.Extensions.Abstractions'
packageShortName: 'Abstractions'
- packageVersion: '${{ parameters.abstractionsPackageVersion }}'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
# ====================================================================
# Stage 3: Core packages (depend on Abstractions)
@@ -243,20 +213,12 @@ stages:
- build_abstractions
variables:
- - name: abstractionsPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
- - name: loggingPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
- - name: sqlServerPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
- name: sqlClientPackageVersion
value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: sqlClientFileVersion
value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
- - name: azurePackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AzurePackageVersion'] ]
- - name: azureFileVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AzureFileVersion'] ]
+ - name: sqlServerPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
jobs:
- template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
@@ -274,10 +236,10 @@ stages:
dependencies:
- artifactName: '${{ parameters.abstractionsArtifactsName }}'
shortName: 'Abstractions'
- version: '${{ parameters.abstractionsPackageVersion }}'
+ version: '${{ parameters.sqlClientPackageVersion }}'
- artifactName: '${{ parameters.loggingArtifactsName }}'
shortName: 'Logging'
- version: '${{ parameters.loggingPackageVersion }}'
+ version: '${{ parameters.sqlClientPackageVersion }}'
- artifactName: '${{ parameters.sqlServerArtifactsName }}'
shortName: 'SqlServer'
version: '${{ parameters.sqlServerPackageVersion }}'
@@ -302,14 +264,14 @@ stages:
dependencies:
- artifactName: '${{ parameters.abstractionsArtifactsName }}'
shortName: 'Abstractions'
- version: '${{ parameters.abstractionsPackageVersion }}'
+ version: '${{ parameters.sqlClientPackageVersion }}'
- artifactName: '${{ parameters.loggingArtifactsName }}'
shortName: 'Logging'
- version: '${{ parameters.loggingPackageVersion }}'
- fileVersion: '${{ parameters.azureFileVersion }}'
+ version: '${{ parameters.sqlClientPackageVersion }}'
+ fileVersion: '${{ parameters.sqlClientFileVersion }}'
packageFullName: 'Microsoft.Data.SqlClient.Extensions.Azure'
packageShortName: 'Azure'
- packageVersion: '${{ parameters.azurePackageVersion }}'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
# ====================================================================
# Stage 4: Add-on packages (depend on core packages)
@@ -323,18 +285,12 @@ stages:
- build_dependent
variables:
- - name: abstractionsPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
- - name: loggingPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
- name: sqlClientPackageVersion
value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ - name: sqlClientFileVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
- name: sqlServerPackageVersion
value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
- - name: akvProviderPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AkvProviderPackageVersion'] ]
- - name: akvProviderFileVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AkvProviderFileVersion'] ]
jobs:
- template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
@@ -352,20 +308,20 @@ stages:
dependencies:
- artifactName: '${{ parameters.abstractionsArtifactsName }}'
shortName: 'Abstractions'
- version: '${{ parameters.abstractionsPackageVersion }}'
+ version: '${{ parameters.sqlClientPackageVersion }}'
- artifactName: '${{ parameters.loggingArtifactsName }}'
shortName: 'Logging'
- version: '${{ parameters.loggingPackageVersion }}'
+ version: '${{ parameters.sqlClientPackageVersion }}'
- artifactName: '${{ parameters.sqlClientArtifactsName }}'
shortName: 'SqlClient'
version: '${{ parameters.sqlClientPackageVersion }}'
- artifactName: '${{ parameters.sqlServerArtifactsName }}'
shortName: 'SqlServer'
version: '${{ parameters.sqlServerPackageVersion }}'
- fileVersion: '${{ parameters.akvProviderFileVersion }}'
+ fileVersion: '${{ parameters.sqlClientFileVersion }}'
packageFullName: 'Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider'
packageShortName: 'AkvProvider'
- packageVersion: '${{ parameters.akvProviderPackageVersion }}'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
# ====================================================================
# Validation
diff --git a/eng/pipelines/onebranch/stages/compute-versions-stage.yml b/eng/pipelines/onebranch/stages/compute-versions-stage.yml
index 0ef9005312..9322ae637a 100644
--- a/eng/pipelines/onebranch/stages/compute-versions-stage.yml
+++ b/eng/pipelines/onebranch/stages/compute-versions-stage.yml
@@ -6,42 +6,26 @@
# Compute Versions Stage
# ======================
-# Computes all package versions up-front in a single fast job.
-# Downstream stages consume these via stage/job output variables:
+# Computes package versions up-front in a single fast job. Downstream stages
+# consume these via stage/job output variables, e.g.:
#
-# stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingPackageVersion']
+# stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion']
#
# Design:
-# - Packages being released get their "next" version (from Versions.props + BuildNumber).
-# - Packages NOT being released use their "published" version (last shipped to NuGet),
-# regardless of whether they are being built as dependencies.
+# - The SqlClient family (Logging, Abstractions, SqlClient, Azure, AKV Provider) shares a single
+# version and always uses its "next" version (from Versions.props + BuildNumber).
+# - Microsoft.SqlServer.Server is versioned separately: it uses its "next" version when being
+# released, or its "published" (last shipped to NuGet) version when only built as a dependency.
# - Versions are extracted via build.proj GetVersions* targets by parsing stdout.
#
# This stage MUST run before all build stages so they can consume computed versions.
parameters:
- # ── Which packages are being released this run ──────────────────────────
- # A package is "released" when it is built, signed, and published to NuGet.
- # Packages that are only built as dependencies (but not released) use their
- # published (last-shipped) version as the effective version.
+ # Whether Microsoft.SqlServer.Server is being released this run. This only affects the SqlServer
+ # version selection (next vs published); the SqlClient family always uses its next version.
- name: releaseSqlServerServer
type: boolean
- - name: releaseLogging
- type: boolean
-
- - name: releaseAbstractions
- type: boolean
-
- - name: releaseSqlClient
- type: boolean
-
- - name: releaseAzure
- type: boolean
-
- - name: releaseAkvProvider
- type: boolean
-
stages:
- stage: compute_versions
displayName: "Compute Package Versions"
@@ -65,11 +49,12 @@ stages:
"**" | Out-File -FilePath "$(ob_outputDirectory)/.artifactignore" -Encoding ascii
displayName: 'Suppress artifact publishing'
- # Extract all versions (package, published, file) per project.
- # Each GetVersions* target emits labeled messages to stdout.
+ # Extract versions (package, published, file) for the SqlClient family
+ # (GetVersionsSqlClient) and Microsoft.SqlServer.Server (GetVersionsSqlServer).
+ # Each target emits labeled messages to stdout.
- script: |
set -euo pipefail
- echo "Extracting all versions with BuildNumber=$(Build.BuildNumber)..."
+ echo "Extracting versions with BuildNumber=$(Build.BuildNumber)..."
extract() {
local label="$1"
@@ -85,58 +70,21 @@ stages:
echo "##vso[task.setvariable variable=${label}FileVersion]$file"
}
- extract Logging
- extract Abstractions
+ # The SqlClient family shares one version; SqlServer is separate.
extract SqlClient
- extract Azure
- extract AkvProvider
extract SqlServer
displayName: "Extract All Versions"
- # Resolve effective versions: "next" if being built, "published" if not.
- # Publish as job output variables for consumption by downstream stages.
+ # Resolve effective versions and publish them as job output variables
+ # for consumption by downstream stages.
- script: |
echo "Resolving effective versions..."
- # Each package uses its "next" version when being released,
- # or its "published" (last-shipped) version otherwise.
-
- # Logging
- if [ "${{ parameters.releaseLogging }}" = "True" ]; then
- LOGGING_VERSION="$(LoggingNextVersion)"
- else
- LOGGING_VERSION="$(LoggingPublishedVersion)"
- fi
-
- # Abstractions
- if [ "${{ parameters.releaseAbstractions }}" = "True" ]; then
- ABSTRACTIONS_VERSION="$(AbstractionsNextVersion)"
- else
- ABSTRACTIONS_VERSION="$(AbstractionsPublishedVersion)"
- fi
+ # The SqlClient family always uses its "next" version.
+ SQLCLIENT_VERSION="$(SqlClientNextVersion)"
- # SqlClient
- if [ "${{ parameters.releaseSqlClient }}" = "True" ]; then
- SQLCLIENT_VERSION="$(SqlClientNextVersion)"
- else
- SQLCLIENT_VERSION="$(SqlClientPublishedVersion)"
- fi
-
- # Azure
- if [ "${{ parameters.releaseAzure }}" = "True" ]; then
- AZURE_VERSION="$(AzureNextVersion)"
- else
- AZURE_VERSION="$(AzurePublishedVersion)"
- fi
-
- # AkvProvider
- if [ "${{ parameters.releaseAkvProvider }}" = "True" ]; then
- AKVPROVIDER_VERSION="$(AkvProviderNextVersion)"
- else
- AKVPROVIDER_VERSION="$(AkvProviderPublishedVersion)"
- fi
-
- # SqlServer
+ # Microsoft.SqlServer.Server uses its "next" version when being
+ # released, or its "published" (last-shipped) version otherwise.
if [ "${{ parameters.releaseSqlServerServer }}" = "True" ]; then
SQLSERVER_VERSION="$(SqlServerNextVersion)"
else
@@ -144,26 +92,13 @@ stages:
fi
echo "Effective versions:"
- echo " Logging: $LOGGING_VERSION"
- echo " Abstractions: $ABSTRACTIONS_VERSION"
- echo " SqlClient: $SQLCLIENT_VERSION"
- echo " Azure: $AZURE_VERSION"
- echo " AkvProvider: $AKVPROVIDER_VERSION"
- echo " SqlServer: $SQLSERVER_VERSION"
+ echo " SqlClient (family): $SQLCLIENT_VERSION"
+ echo " SqlServer: $SQLSERVER_VERSION"
- # Set as output variables (isOutput=true makes them visible to downstream stages)
- echo "##vso[task.setvariable variable=LoggingPackageVersion;isOutput=true]$LOGGING_VERSION"
- echo "##vso[task.setvariable variable=AbstractionsPackageVersion;isOutput=true]$ABSTRACTIONS_VERSION"
+ # Set as output variables (isOutput=true makes them visible to downstream stages).
echo "##vso[task.setvariable variable=SqlClientPackageVersion;isOutput=true]$SQLCLIENT_VERSION"
- echo "##vso[task.setvariable variable=AzurePackageVersion;isOutput=true]$AZURE_VERSION"
- echo "##vso[task.setvariable variable=AkvProviderPackageVersion;isOutput=true]$AKVPROVIDER_VERSION"
echo "##vso[task.setvariable variable=SqlServerPackageVersion;isOutput=true]$SQLSERVER_VERSION"
-
- echo "##vso[task.setvariable variable=LoggingFileVersion;isOutput=true]$(LoggingFileVersion)"
- echo "##vso[task.setvariable variable=AbstractionsFileVersion;isOutput=true]$(AbstractionsFileVersion)"
echo "##vso[task.setvariable variable=SqlClientFileVersion;isOutput=true]$(SqlClientFileVersion)"
- echo "##vso[task.setvariable variable=AzureFileVersion;isOutput=true]$(AzureFileVersion)"
- echo "##vso[task.setvariable variable=AkvProviderFileVersion;isOutput=true]$(AkvProviderFileVersion)"
echo "##vso[task.setvariable variable=SqlServerFileVersion;isOutput=true]$(SqlServerFileVersion)"
displayName: "Resolve Effective Versions"
name: "versions"
diff --git a/eng/pipelines/onebranch/stages/publish-symbols-stage.yml b/eng/pipelines/onebranch/stages/publish-symbols-stage.yml
index 8854b66631..63520728fd 100644
--- a/eng/pipelines/onebranch/stages/publish-symbols-stage.yml
+++ b/eng/pipelines/onebranch/stages/publish-symbols-stage.yml
@@ -78,27 +78,12 @@ parameters:
# ── Pre-computed versions (from compute-versions stage) ─────────────────
# These default to $(variableName) tokens that resolve at runtime from
# stage-level variables populated via stageDependencies.compute_versions outputs.
-
- - name: loggingPackageVersion
- type: string
- default: $(loggingPackageVersion)
-
- - name: abstractionsPackageVersion
- type: string
- default: $(abstractionsPackageVersion)
+ # The SqlClient family shares the SqlClient version; SqlServer is separate.
- name: sqlClientPackageVersion
type: string
default: $(sqlClientPackageVersion)
- - name: azurePackageVersion
- type: string
- default: $(azurePackageVersion)
-
- - name: akvProviderPackageVersion
- type: string
- default: $(akvProviderPackageVersion)
-
- name: sqlServerPackageVersion
type: string
default: $(sqlServerPackageVersion)
@@ -123,16 +108,8 @@ stages:
- build_addons
variables:
- - name: loggingPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
- - name: abstractionsPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
- name: sqlClientPackageVersion
value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- - name: azurePackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AzurePackageVersion'] ]
- - name: akvProviderPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.AkvProviderPackageVersion'] ]
- name: sqlServerPackageVersion
value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
@@ -156,7 +133,7 @@ stages:
artifactName: '${{ parameters.loggingArtifactsName }}'
packageFullName: Microsoft.Data.SqlClient.Internal.Logging
packageShortName: Logging
- packageVersion: '${{ parameters.loggingPackageVersion }}'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
@@ -184,7 +161,7 @@ stages:
artifactName: '${{ parameters.abstractionsArtifactsName }}'
packageFullName: Microsoft.Data.SqlClient.Extensions.Abstractions
packageShortName: Abstractions
- packageVersion: '${{ parameters.abstractionsPackageVersion }}'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
@@ -212,7 +189,7 @@ stages:
artifactName: '${{ parameters.azureArtifactsName }}'
packageFullName: Microsoft.Data.SqlClient.Extensions.Azure
packageShortName: Azure
- packageVersion: '${{ parameters.azurePackageVersion }}'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
@@ -226,7 +203,7 @@ stages:
artifactName: '${{ parameters.akvProviderArtifactsName }}'
packageFullName: Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider
packageShortName: AkvProvider
- packageVersion: '${{ parameters.akvProviderPackageVersion }}'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
diff --git a/eng/pipelines/onebranch/stages/release-stages.yml b/eng/pipelines/onebranch/stages/release-stages.yml
index 4107e8fdc8..129190f1f9 100644
--- a/eng/pipelines/onebranch/stages/release-stages.yml
+++ b/eng/pipelines/onebranch/stages/release-stages.yml
@@ -81,24 +81,16 @@ parameters:
# ── Release parameters ─────────────────────────────────────────────────
+ # Whether to publish the Microsoft.SqlServer.Server package (versioned separately).
- name: releaseSqlServerServer
type: boolean
- - name: releaseLogging
- type: boolean
-
- - name: releaseAbstractions
- type: boolean
-
+ # Whether to publish the SqlClient family. The family (Internal.Logging,
+ # Extensions.Abstractions, Microsoft.Data.SqlClient, Extensions.Azure, and the
+ # AlwaysEncrypted.AzureKeyVaultProvider) is always released together at the shared version.
- name: releaseSqlClient
type: boolean
- - name: releaseAzure
- type: boolean
-
- - name: releaseAkvProvider
- type: boolean
-
stages:
# ====================================================================
# Release Stage — on-demand selective publish to NuGet
@@ -113,21 +105,19 @@ stages:
# true → NuGet Production feed.
# false → NuGet Test feed.
# ====================================================================
- - ${{ if or(parameters.releaseSqlServerServer, parameters.releaseLogging, parameters.releaseAbstractions, parameters.releaseSqlClient, parameters.releaseAzure, parameters.releaseAkvProvider) }}:
+ - ${{ if or(parameters.releaseSqlServerServer, parameters.releaseSqlClient) }}:
- stage: release_${{ parameters.stageNameSuffix }}
${{ if eq(parameters.releaseToProduction, true) }}:
displayName: Release to NuGet Production
${{ else }}:
displayName: Release to NuGet Test
dependsOn:
- - ${{ if or(parameters.releaseSqlServerServer, parameters.releaseLogging) }}:
+ - ${{ if or(parameters.releaseSqlServerServer, parameters.releaseSqlClient) }}:
- build_independent
- - ${{ if parameters.releaseAbstractions }}:
+ - ${{ if parameters.releaseSqlClient }}:
- build_abstractions
- - ${{ if or(parameters.releaseSqlClient, parameters.releaseAzure) }}:
- build_dependent
- sqlclient_package_validation
- - ${{ if parameters.releaseAkvProvider }}:
- build_addons
- ${{ if parameters.publishSymbols }}:
- publish_symbols
@@ -179,7 +169,7 @@ stages:
isProduction: ${{ parameters.isOfficial }}
displaySuffix: ${{ variables.nugetTargetSuffix }}
- - ${{ if eq(parameters.releaseLogging, true) }}:
+ - ${{ if eq(parameters.releaseSqlClient, true) }}:
- template: /eng/pipelines/onebranch/jobs/publish-nuget-package-job.yml@self
parameters:
packageName: Microsoft.Data.SqlClient.Internal.Logging
@@ -188,7 +178,7 @@ stages:
isProduction: ${{ parameters.isOfficial }}
displaySuffix: ${{ variables.nugetTargetSuffix }}
- - ${{ if eq(parameters.releaseAbstractions, true) }}:
+ - ${{ if eq(parameters.releaseSqlClient, true) }}:
- template: /eng/pipelines/onebranch/jobs/publish-nuget-package-job.yml@self
parameters:
packageName: Microsoft.Data.SqlClient.Extensions.Abstractions
@@ -206,7 +196,7 @@ stages:
isProduction: ${{ parameters.isOfficial }}
displaySuffix: ${{ variables.nugetTargetSuffix }}
- - ${{ if eq(parameters.releaseAzure, true) }}:
+ - ${{ if eq(parameters.releaseSqlClient, true) }}:
- template: /eng/pipelines/onebranch/jobs/publish-nuget-package-job.yml@self
parameters:
packageName: Microsoft.Data.SqlClient.Extensions.Azure
@@ -215,7 +205,7 @@ stages:
isProduction: ${{ parameters.isOfficial }}
displaySuffix: ${{ variables.nugetTargetSuffix }}
- - ${{ if eq(parameters.releaseAkvProvider, true) }}:
+ - ${{ if eq(parameters.releaseSqlClient, true) }}:
- template: /eng/pipelines/onebranch/jobs/publish-nuget-package-job.yml@self
parameters:
packageName: Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider
diff --git a/eng/pipelines/onebranch/variables/package-variables.yml b/eng/pipelines/onebranch/variables/package-variables.yml
index 0abb0c9fad..588670bed6 100644
--- a/eng/pipelines/onebranch/variables/package-variables.yml
+++ b/eng/pipelines/onebranch/variables/package-variables.yml
@@ -9,15 +9,20 @@
#
# VERSION STRATEGY
# ================
-# Package versions are computed by each project's Versions.props file using one input:
+# Package versions are computed by Versions.props using one input:
# - BuildNumber ($(Build.BuildNumber), provided by ADO)
#
-# The *NextVersion property in each Versions.props defines the base version:
+# The SqlClient *family* (Internal.Logging, Extensions.Abstractions, Microsoft.Data.SqlClient,
+# Extensions.Azure, and the AlwaysEncrypted.AzureKeyVaultProvider) shares a single version defined
+# by SqlClientNextVersion in src/Microsoft.Data.SqlClient/Versions.props. Microsoft.SqlServer.Server
+# is versioned separately by SqlServerNextVersion.
+#
+# The *NextVersion properties define the base version:
# - On main: X.Y.Z-preview1 → official produces "X.Y.Z-preview1"
# - On release/X.Y: X.Y.Z → official produces "X.Y.Z"
#
# No per-package version variables are needed here — Versions.props is the single source.
-# Downstream stages obtain the computed version via the compute-versions stage.
+# Downstream stages obtain the computed versions via the compute-versions stage.
#
# ARTIFACT NAMING
# ===============
From 6b2c50f70119534eecfd4e14fd5039e856d90bf9 Mon Sep 17 00:00:00 2001
From: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
Date: Mon, 22 Jun 2026 15:14:02 -0300
Subject: [PATCH 07/12] Simplify CI/PR pipeline for unified SqlClient family
version
The CI/PR compute-versions stage now extracts only the SqlClient family version
and the separately-versioned SqlServer version. All family build stages map their
version variables from versions.SqlClientPackageVersion / SqlClientFileVersion,
and the standalone family pack jobs (Logging, Abstractions, Azure) pass
SqlClientPackageVersion so they produce correctly-versioned packages.
- compute-versions-ci-stage.yml: extracts GetVersionsSqlClient + GetVersionsSqlServer only.
- build-{logging,abstractions,azure,sqlclient}-package-ci-stage.yml: family version
variables sourced from the shared SqlClient outputs.
- pack-{logging,abstractions,azure}-package-ci-job.yml: buildProperties pass
SqlClientPackageVersion; dropped vestigial *AssemblyFileVersion (ThisAssembly
falls back to FileVersion) and redundant per-dependency version properties.
- ci-run-tests-stage.yml: family test version variables sourced from SqlClient.
The SqlClient and AKV packages pack via build.proj (PackageVersionSqlClient), which
already routes family versions correctly.
---
.../templates/stages/ci-run-tests-stage.yml | 6 +++--
.../jobs/pack-abstractions-package-ci-job.yml | 2 +-
.../jobs/pack-azure-package-ci-job.yml | 2 +-
.../jobs/pack-logging-package-ci-job.yml | 2 +-
.../build-abstractions-package-ci-stage.yml | 4 ++--
.../stages/build-azure-package-ci-stage.yml | 8 +++----
.../stages/build-logging-package-ci-stage.yml | 4 ++--
.../build-sqlclient-package-ci-stage.yml | 6 ++---
.../stages/compute-versions-ci-stage.yml | 23 +++++++++----------
9 files changed, 29 insertions(+), 28 deletions(-)
diff --git a/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml b/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml
index 0eacdd779e..b8607a8217 100644
--- a/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml
+++ b/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml
@@ -107,9 +107,11 @@ stages:
# $(...PackageVersion) macros passed to the test jobs resolve when
# building/restoring in Package mode. These mirror the build stages.
- name: abstractionsPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ # Abstractions shares the SqlClient family version.
- name: loggingPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ # Logging shares the SqlClient family version.
- name: mdsPackageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: sqlServerPackageVersion
diff --git a/eng/pipelines/jobs/pack-abstractions-package-ci-job.yml b/eng/pipelines/jobs/pack-abstractions-package-ci-job.yml
index d077aa2115..c7315914fa 100644
--- a/eng/pipelines/jobs/pack-abstractions-package-ci-job.yml
+++ b/eng/pipelines/jobs/pack-abstractions-package-ci-job.yml
@@ -154,7 +154,7 @@ jobs:
configurationToPack: ${{ parameters.buildConfiguration }}
packDirectory: $(dotnetPackagesDir)
verbosityToPack: ${{ parameters.dotnetVerbosity }}
- buildProperties: AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }};AbstractionsAssemblyFileVersion=${{ parameters.abstractionsAssemblyFileVersion }};ReferenceType=Package;LoggingPackageVersion=${{ parameters.loggingPackageVersion }}
+ buildProperties: SqlClientPackageVersion=${{ parameters.abstractionsPackageVersion }};ReferenceType=Package
- ${{ else }}:
- task: DotNetCoreCLI@2
diff --git a/eng/pipelines/jobs/pack-azure-package-ci-job.yml b/eng/pipelines/jobs/pack-azure-package-ci-job.yml
index 12567fec14..a911319f38 100644
--- a/eng/pipelines/jobs/pack-azure-package-ci-job.yml
+++ b/eng/pipelines/jobs/pack-azure-package-ci-job.yml
@@ -171,7 +171,7 @@ jobs:
configurationToPack: ${{ parameters.buildConfiguration }}
packDirectory: $(dotnetPackagesDir)
verbosityToPack: ${{ parameters.dotnetVerbosity }}
- buildProperties: AzurePackageVersion=${{ parameters.azurePackageVersion }};AzureAssemblyFileVersion=${{ parameters.azureAssemblyFileVersion }};ReferenceType=Package;LoggingPackageVersion=${{ parameters.loggingPackageVersion }};AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
+ buildProperties: SqlClientPackageVersion=${{ parameters.azurePackageVersion }};ReferenceType=Package
- ${{ else }}:
- task: DotNetCoreCLI@2
diff --git a/eng/pipelines/jobs/pack-logging-package-ci-job.yml b/eng/pipelines/jobs/pack-logging-package-ci-job.yml
index f2a42699e0..915c95a8ab 100644
--- a/eng/pipelines/jobs/pack-logging-package-ci-job.yml
+++ b/eng/pipelines/jobs/pack-logging-package-ci-job.yml
@@ -107,7 +107,7 @@ jobs:
configurationToPack: ${{ parameters.buildConfiguration }}
packDirectory: $(dotnetPackagesDir)
verbosityToPack: ${{ parameters.dotnetVerbosity }}
- buildProperties: LoggingPackageVersion=${{ parameters.loggingPackageVersion }};LoggingAssemblyFileVersion=${{ parameters.loggingAssemblyFileVersion }}
+ buildProperties: SqlClientPackageVersion=${{ parameters.loggingPackageVersion }}
# Publish the NuGet packages as a named pipeline artifact.
- task: PublishPipelineArtifact@1
diff --git a/eng/pipelines/stages/build-abstractions-package-ci-stage.yml b/eng/pipelines/stages/build-abstractions-package-ci-stage.yml
index dc05c0a06b..6a72fddef0 100644
--- a/eng/pipelines/stages/build-abstractions-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-abstractions-package-ci-stage.yml
@@ -104,9 +104,9 @@ stages:
variables:
- name: abstractionsPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: abstractionsAssemblyFileVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AbstractionsFileVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
jobs:
diff --git a/eng/pipelines/stages/build-azure-package-ci-stage.yml b/eng/pipelines/stages/build-azure-package-ci-stage.yml
index 9d27eac32f..b9e4d99b95 100644
--- a/eng/pipelines/stages/build-azure-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-azure-package-ci-stage.yml
@@ -169,13 +169,13 @@ stages:
value: $[stageDependencies.secrets_stage.secrets_job.outputs['SaPassword.Value']]
# Package versions from compute-versions stage.
- name: azurePackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AzurePackageVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: azureAssemblyFileVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AzureFileVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
- name: loggingPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: abstractionsPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: mdsPackageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: sqlServerPackageVersion
diff --git a/eng/pipelines/stages/build-logging-package-ci-stage.yml b/eng/pipelines/stages/build-logging-package-ci-stage.yml
index 97364b5526..ece25ba76a 100644
--- a/eng/pipelines/stages/build-logging-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-logging-package-ci-stage.yml
@@ -80,9 +80,9 @@ stages:
variables:
- name: loggingPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: loggingAssemblyFileVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.LoggingFileVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
jobs:
diff --git a/eng/pipelines/stages/build-sqlclient-package-ci-stage.yml b/eng/pipelines/stages/build-sqlclient-package-ci-stage.yml
index 28b188eab9..5d29bdfd5a 100644
--- a/eng/pipelines/stages/build-sqlclient-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-sqlclient-package-ci-stage.yml
@@ -100,11 +100,11 @@ stages:
- name: mdsPackageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: akvPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AkvProviderPackageVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: loggingPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.LoggingPackageVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: abstractionsPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.AbstractionsPackageVersion'] ]
+ value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: sqlServerPackageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
diff --git a/eng/pipelines/stages/compute-versions-ci-stage.yml b/eng/pipelines/stages/compute-versions-ci-stage.yml
index 103415fe00..e78f8a7b28 100644
--- a/eng/pipelines/stages/compute-versions-ci-stage.yml
+++ b/eng/pipelines/stages/compute-versions-ci-stage.yml
@@ -6,14 +6,15 @@
# Compute Versions Stage (CI/PR)
# ===============================
-# Extracts all package/file versions up-front in a single fast job.
+# Extracts package/file versions up-front in a single fast job.
# Downstream stages consume these via stage dependency output variables:
#
-# stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.LoggingPackageVersion']
+# stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion']
#
-# In CI/PR mode, ALL packages always use their "next" version (with BuildSuffix
-# appended). There is no released-vs-dependency distinction as in the OneBranch
-# official pipeline.
+# The SqlClient family (Logging, Abstractions, SqlClient, Azure, AKV Provider) shares one version;
+# Microsoft.SqlServer.Server is versioned separately. In CI/PR mode, all packages always use their
+# "next" version (with BuildSuffix appended). There is no released-vs-dependency distinction as in
+# the OneBranch official pipeline.
#
# This stage MUST run before all build stages so they can consume computed versions.
@@ -34,11 +35,12 @@ stages:
vmImage: ubuntu-latest
steps:
- # Extract all versions (package, file) per project.
- # Each GetVersions* target emits labeled stdout lines.
+ # Extract package + file versions for the SqlClient family
+ # (GetVersionsSqlClient) and Microsoft.SqlServer.Server (GetVersionsSqlServer).
+ # Each target emits labeled stdout lines.
- script: |
set -euo pipefail
- echo "Extracting all versions with BuildNumber=$(Build.BuildNumber) BuildSuffix=${{ parameters.buildSuffix }}..."
+ echo "Extracting versions with BuildNumber=$(Build.BuildNumber) BuildSuffix=${{ parameters.buildSuffix }}..."
extract() {
local label="$1"
@@ -55,11 +57,8 @@ stages:
echo "##vso[task.setvariable variable=${label}FileVersion;isOutput=true]$file"
}
- extract Logging
- extract Abstractions
+ # The SqlClient family shares one version; SqlServer is separate.
extract SqlClient
- extract Azure
- extract AkvProvider
extract SqlServer
displayName: "Extract All Versions"
name: "versions"
From c68060f75822c169be1ba1f2b9c062d2a97ae2cd Mon Sep 17 00:00:00 2001
From: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
Date: Mon, 22 Jun 2026 15:23:40 -0300
Subject: [PATCH 08/12] Docs: describe unified SqlClient family versioning
Update the version-resolution instructions and BUILDGUIDE to reflect that all
SqlClient family packages (Internal.Logging, Extensions.Abstractions,
Microsoft.Data.SqlClient, Extensions.Azure, and the AKV Provider) share the
SqlClient version, set via PackageVersionSqlClient. Microsoft.SqlServer.Server
is versioned separately via PackageVersionSqlServer.
- sqlclient-package-versions.instructions.md: family/SqlServer split, two-target
GetVersions, releaseSqlServerServer-only effective-version resolution, updated
'Updating Versions' guidance.
- BUILDGUIDE.md: pack/build parameter tables and package-mode examples use the
single family parameter.
---
...sqlclient-package-versions.instructions.md | 89 +++++++++++++------
BUILDGUIDE.md | 82 ++++++++---------
.../onebranch/variables/package-variables.yml | 2 +-
3 files changed, 100 insertions(+), 73 deletions(-)
diff --git a/.github/instructions/sqlclient-package-versions.instructions.md b/.github/instructions/sqlclient-package-versions.instructions.md
index ff6313d45b..39bcef8239 100644
--- a/.github/instructions/sqlclient-package-versions.instructions.md
+++ b/.github/instructions/sqlclient-package-versions.instructions.md
@@ -5,14 +5,33 @@ applyTo: "**/Versions.props,build.proj,eng/pipelines/**/*.yml"
How package versions are determined across different build scenarios for the packages in this repository.
-## Version Properties (per package)
+## Package families
-Each package has a `Versions.props` file declaring:
+The repository ships two independently-versioned units:
-| Property | Purpose | Example |
-|----------|---------|---------|
-| `*NextVersion` | Version being developed; used for the next release | `7.1.0-preview1` |
-| `*PublishedVersion` | Last version shipped to NuGet | `7.0.0` |
+- **The SqlClient family** — `Microsoft.Data.SqlClient` plus the packages that version in lockstep with
+ it: `Microsoft.Data.SqlClient.Internal.Logging`, `Microsoft.Data.SqlClient.Extensions.Abstractions`,
+ `Microsoft.Data.SqlClient.Extensions.Azure`, and
+ `Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider`. **All family packages use the
+ SqlClient version numbers** — the same NuGet package version, file version, and assembly version —
+ and are always built and released together.
+- **`Microsoft.SqlServer.Server`** — versioned and released on its own cadence.
+
+## Version Properties
+
+The SqlClient family version lives in `src/Microsoft.Data.SqlClient/Versions.props`, which is imported
+for every project by `src/Directory.Build.props` (so the `SqlClient*` version properties are always
+available). `Microsoft.SqlServer.Server` declares its own version in its own `Versions.props`.
+
+| Property | Applies to | Purpose | Example |
+|----------|-----------|---------|---------|
+| `SqlClientNextVersion` | SqlClient family | Version being developed; used for the next release | `7.1.0-preview1` |
+| `SqlServerNextVersion` | SqlServer | Version being developed for SqlServer | `1.1.0-preview1` |
+| `SqlServerPublishedVersion` | SqlServer | Last SqlServer version shipped to NuGet | `1.0.0` |
+
+The SqlClient family always ships its next version, so there is **no** family `PublishedVersion`. Only
+`Microsoft.SqlServer.Server` keeps a published version (used when it is built as a SqlClient dependency
+but not itself released).
## Resolution Logic
@@ -20,10 +39,13 @@ Each `Versions.props` uses a 3-tier `` block:
| Priority | Condition | PackageVersion | FileVersion |
|----------|-----------|----------------|-------------|
-| 1 | `PackageVersion` explicitly provided | Used as-is | Strip prerelease + append BuildNumber |
+| 1 | `PackageVersion` explicitly provided | Used as-is | Strip prerelease + append BuildNumber |
| 2 | `BuildNumber` provided (non-zero) | `NextVersion[-BuildSuffix+BuildNumber]` | `NextVersion.Split('-')[0].BuildNumber` |
| 3 | Nothing provided | `NextVersion-dev` | `NextVersion.Split('-')[0].0` |
+For every family package, `` is `SqlClient` (e.g. `-p:SqlClientPackageVersion=...`); for
+Microsoft.SqlServer.Server it is `SqlServer`.
+
## Scenarios
### Developer (local `dotnet build`)
@@ -58,7 +80,7 @@ Each `Versions.props` uses a 3-tier `` block:
- Same version computation via compute-versions stage.
- Downstream stages define stage-level variables from compute-versions output using `$[ stageDependencies... ]`.
-- Each build step receives explicit `-p:PackageVersion=` (hits Priority 1).
+- Each build step receives an explicit family `-p:SqlClientPackageVersion=` (and `-p:SqlServerPackageVersion=` where needed), hitting Priority 1.
- Sibling dependencies consumed from pipeline artifacts published by upstream stages.
### CI Pipeline (non-official, triggered on merge)
@@ -75,36 +97,40 @@ Uses the full `compute-versions-stage.yml` machinery:
#### Step A: Compute Versions (dedicated early stage)
-1. Runs 6 `GetVersions*` MSBuild targets against `build.proj`.
+1. Runs the `GetVersionsSqlClient` and `GetVersionsSqlServer` MSBuild targets against `build.proj`.
2. Each target calls `dotnet build -getProperty:PackageVersion` with `BuildNumber` but **no BuildSuffix**.
3. Falls into Priority 2 without BuildSuffix → `PackageVersion = NextVersion` as-is (e.g. `7.1.0-preview1`).
-4. Also extracts `PublishedVersion` (hardcoded in Versions.props, e.g. `7.0.0`).
+4. `GetVersionsSqlServer` also extracts `SqlServerPublishedVersion` (the SqlClient family has no published version).
#### Step B: Resolve Effective Versions
-For each package, a `release` boolean parameter determines the outcome:
+- The **SqlClient family** always uses `SqlClientNextVersion`.
+- **`Microsoft.SqlServer.Server`** uses its next or published version based on the
+ `releaseSqlServerServer` boolean:
-| `release` | Effective Version | Meaning |
-|----------------|-------------------|---------|
-| `True` | `NextVersion` (e.g. `7.1.0-preview1`) | This package is being released |
-| `False` | `PublishedVersion` (e.g. `7.0.0`) | Only built as dependency; use last-shipped version |
+| `releaseSqlServerServer` | Effective SqlServer Version | Meaning |
+|--------------------------|-----------------------------|---------|
+| `True` | `SqlServerNextVersion` (e.g. `1.1.0-preview1`) | SqlServer is being released |
+| `False` | `SqlServerPublishedVersion` (e.g. `1.0.0`) | Only built as a SqlClient dependency; use last-shipped |
-These are published as ADO output variables (e.g. `versions.SqlClientPackageVersion`).
+These are published as ADO output variables: `versions.SqlClientPackageVersion`,
+`versions.SqlServerPackageVersion`, and their `*FileVersion` counterparts.
#### Step C: Build Stages Consume Pre-computed Versions
Each downstream build job receives:
-- `packageVersion` parameter → passed as `-p:PackageVersion=`
-- Dependency versions → passed as `-p:PackageVersion=`
+- `packageVersion` parameter → passed as `-p:SqlClientPackageVersion=` (or `-p:SqlServerPackageVersion=` for SqlServer)
+- Dependency versions → family dependencies use the shared `SqlClientPackageVersion`; the SqlServer dependency uses `SqlServerPackageVersion`
-Since an explicit `PackageVersion` is provided, Versions.props hits Priority 1 — uses the value verbatim.
+Since an explicit `PackageVersion` is provided, Versions.props hits Priority 1 — uses the value verbatim.
#### Summary
-| Package Status | Version Source | Example |
-|----------------|----------------|---------|
-| Being released | `*NextVersion` from Versions.props | `7.1.0-preview1` |
-| Dependency only | `*PublishedVersion` from Versions.props | `7.0.0` |
+| Package | Version Source | Example |
+|---------|----------------|---------|
+| SqlClient family (always released together) | `SqlClientNextVersion` | `7.1.0-preview1` |
+| SqlServer, being released | `SqlServerNextVersion` | `1.1.0-preview1` |
+| SqlServer, dependency only | `SqlServerPublishedVersion` | `1.0.0` |
## Key Architectural Difference
@@ -112,12 +138,17 @@ Since an explicit `PackageVersion` is provided, Versions.props hits Priorit
|----------|----------------------|-------------------------------|
| Developer | Versions.props inline (Priority 3) | Project references (no version needed) |
| PR/CI (Project) | `compute-versions-ci-stage` up-front | Project references (no version needed) |
-| PR/CI (Package) | `compute-versions-ci-stage` up-front | Stage variables via `$[ stageDependencies... ]` → `-p:PackageVersion=` |
-| OneBranch | `compute-versions-stage` up-front | Explicit `-p:PackageVersion=` from stage outputs |
+| PR/CI (Package) | `compute-versions-ci-stage` up-front | Stage variables via `$[ stageDependencies... ]` → `-p:SqlClientPackageVersion=` / `-p:SqlServerPackageVersion=` |
+| OneBranch | `compute-versions-stage` up-front | Explicit `-p:SqlClientPackageVersion=` / `-p:SqlServerPackageVersion=` from stage outputs |
## Updating Versions
-After a release:
-1. Update `*PublishedVersion` to the version just shipped.
-2. Update `*NextVersion` to the next planned version.
-3. Both properties live in each package's `Versions.props`.
+After releasing the **SqlClient family**:
+1. Update `SqlClientNextVersion` in `src/Microsoft.Data.SqlClient/Versions.props` to the next planned
+ version. (There is no family published version to update.)
+
+After releasing **`Microsoft.SqlServer.Server`**:
+1. Update `SqlServerPublishedVersion` to the version just shipped.
+2. Update `SqlServerNextVersion` to the next planned version.
+
+The SqlServer properties live in `src/Microsoft.SqlServer.Server/Versions.props`.
diff --git a/BUILDGUIDE.md b/BUILDGUIDE.md
index 073f6afc68..467efdae69 100644
--- a/BUILDGUIDE.md
+++ b/BUILDGUIDE.md
@@ -93,7 +93,8 @@ A selection of parameters for build targets in `build.proj` can be found below:
| `[optional_parameter]` | Allowed Values | Default | Description |
|-----------------------------------|----------------------------------|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------|
| `-p:Configuration=` | `Debug`, `Release` | `Debug` | Build configuration |
-| `-p:PackageVersion=` | `major.minor.patch[-prerelease]` | `[blank]` | Version to assign to the target package, where `` can be one of: `['Abstractions', 'Azure', 'AkvProvider', 'Logging', 'SqlClient', 'SqlServer']`. Assembly and file versions are derived from this, if it is provided. See Versioning for more details |
+| `-p:PackageVersionSqlClient=` | `major.minor.patch[-prerelease]` | `[blank]` | Version to assign to the SqlClient family (`Microsoft.Data.SqlClient`, `Internal.Logging`, `Extensions.Abstractions`, `Extensions.Azure`, and the AKV Provider all share it). Assembly and file versions are derived from this, if it is provided. See Versioning for more details |
+| `-p:PackageVersionSqlServer=` | `major.minor.patch[-prerelease]` | `[blank]` | Version to assign to `Microsoft.SqlServer.Server`, which is versioned separately from the SqlClient family. |
@@ -119,10 +120,11 @@ Build Microsoft.Data.SqlClient in Release configuration:
dotnet build -t:BuildSqlClient -p:Configuration=Release
```
-Build v1.2.3 of Microsoft.Data.SqlClient.Extensions.Abstractions:
+Build a specific version of Microsoft.Data.SqlClient.Extensions.Abstractions (Abstractions is part of the
+SqlClient family, so its version is set via the family parameter `PackageVersionSqlClient`):
```bash
-dotnet build -t:BuildAbstractions -p:PackageVersionAbstractions=1.2.3
+dotnet build -t:BuildAbstractions -p:PackageVersionSqlClient=7.1.0
```
### Testing Projects
@@ -227,16 +229,14 @@ A selection of parameters for pack targets in `build.proj` relevant to common de
|------------------------------------|---------------|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `-p:Configuration=` | `Debug` | `Debug`, `Release` | Build configuration. Only applies if project and dependencies are being built. |
| `-p:PackBuild=` | `true` | `true`, `false` | Whether or not to build the project before packing. If `false`, project must be built using the same parameters. |
-| `-p:PackageVersion=` | `[blank]` | eg. `1.2.3-dev123` | Version to assign to the package, where `` can be one of: `['Abstractions', 'Azure', 'AkvProvider', 'Logging', 'SqlClient', 'SqlServer']`. If `PackBuild` is `true`, the assembly and file versions will be derived from this version. See Versioning for more details. |
+| `-p:PackageVersionSqlClient=` | `[blank]` | eg. `7.1.0-dev123` | Version to assign to the entire SqlClient family (`Microsoft.Data.SqlClient`, `Internal.Logging`, `Extensions.Abstractions`, `Extensions.Azure`, and the AKV Provider — they all share the SqlClient version). If `PackBuild` is `true`, the assembly and file versions are derived from this version. See Versioning for more details. |
+| `-p:PackageVersionSqlServer=` | `[blank]` | eg. `1.1.0-dev123` | Version to assign to `Microsoft.SqlServer.Server`, which is versioned separately from the SqlClient family. |
-For `PackSqlClient`, these additional parameters are optional overrides for dependency versions injected into the SqlClient nuspec during pack:
+For `PackSqlClient`, the SqlClient nuspec pins its family dependencies (Abstractions and Logging) to the same `SqlClientPackageVersion` value, so a single `-p:PackageVersionSqlClient=` controls both the SqlClient package version and those dependency ranges. `Microsoft.SqlServer.Server` is pinned separately via `-p:PackageVersionSqlServer=`.
-- `-p:PackageVersionAbstractions=`
-- `-p:PackageVersionLogging=`
-
-If omitted, `PackSqlClient` computes `AbstractionsPackageVersion` and `LoggingPackageVersion` from sibling projects using the current `BuildNumber` and `BuildSuffix` context.
+If omitted, `PackSqlClient` computes these versions from `Versions.props` using the current `BuildNumber` and `BuildSuffix` context.
#### Examples
@@ -252,10 +252,11 @@ Package Microsoft.Data.SqlClient:
dotnet build -t:PackSqlClient
```
-Package version 1.2.3 of Microsoft.Data.SqlClient.Extensions.Abstractions:
+Package a specific version of Microsoft.Data.SqlClient.Extensions.Abstractions (set via the family parameter
+`PackageVersionSqlClient`):
```bash
-dotnet build -t:PackAbstractions -p:PackageVersionAbstractions=1.2.3
+dotnet build -t:PackAbstractions -p:PackageVersionSqlClient=7.1.0
```
Package Microsoft.Data.SqlClient.Extensions.Azure without building it beforehand:
@@ -267,17 +268,19 @@ dotnet build -t:PackAzure -p:PackBuild=false
## Versioning
Versioning can be accomplished by using a mix of different parameters to the `build.proj` targets:
-`PackageVersion`, `BuildNumber`, and `BuildSuffix`. Using these in different combinations, can generate
-appropriate package, assembly, and file versions for different scenarios. For most developer workflows, it is not
-necessary to specify any of these parameters - appropriate versions based on the latest release will be generated
-automatically. This section primarily exists to document the various parameters, their effects, and the scenarios they
-can be useful for.
+`PackageVersionSqlClient` (or `PackageVersionSqlServer`), `BuildNumber`, and `BuildSuffix`. Using these in different
+combinations can generate appropriate package, assembly, and file versions for different scenarios. For most developer
+workflows, it is not necessary to specify any of these parameters - appropriate versions based on the latest release
+will be generated automatically. This section primarily exists to document the various parameters, their effects, and
+the scenarios they can be useful for.
-`PackageVersion` applies to whatever package is being built. For example, if you are building the
-Microsoft.Data.SqlClient package, the appropriate parameter is `-p:PackageVersionSqlClient`.
+All packages in the **SqlClient family** (`Microsoft.Data.SqlClient`, `Internal.Logging`, `Extensions.Abstractions`,
+`Extensions.Azure`, and the AKV Provider) share a single version, set via `-p:PackageVersionSqlClient`.
+`Microsoft.SqlServer.Server` is versioned separately via `-p:PackageVersionSqlServer`.
-Each package has a `Versions.props` file in its root directory that defines a "default" version. This should be defined
-as the latest released version of the package. For the table below, we assume this is "1.2.3".
+The SqlClient family version is defined in `src/Microsoft.Data.SqlClient/Versions.props` (and SqlServer's in its own
+`Versions.props`), which declares a "default" version — the next version to release. For the table below, we assume this
+is "1.2.3".
| `PackageVersion` | `BuildNumber` | `BuildSuffix` | Package Version | Assembly Version | File Version | Scenario |
|------------------|---------------|---------------|------------------|------------------|---------------|------------------------------------------------------------|
@@ -297,18 +300,15 @@ depend on NuGet packages. This mode is useful for verifying that packages work w
build scenarios. For completeness, and debugging of automated builds, this section documents behavior of "package mode".
To switch to "package mode", set the `ReferenceType` parameter in `build.proj` to `Package`. And, optionally, include
-one or more of the following parameters:
+one or both of the following parameters:
-- `PackageVersionAbstractions`
-- `PackageVersionAkvProvider`
-- `PackageVersionAzure`
-- `PackageVersionLogging`
-- `PackageVersionSqlClient`
-- `PackageVersionSqlServer`
+- `PackageVersionSqlClient` — the version for the entire SqlClient family.
+- `PackageVersionSqlServer` — the version for `Microsoft.SqlServer.Server`.
-These parameters pull double duty. In targets where the package is being built, the parameter sets the version of the
-package. In targets where the package is being referenced, the parameter sets the version of the package that is being
-referenced.
+These parameters pull double duty. In targets where a package is being built, the parameter sets the version of the
+package. In targets where a package is being referenced, the parameter sets the version of the referenced package.
+Because the SqlClient family shares one version, `PackageVersionSqlClient` covers every family package, whether it is
+being built or referenced.
If these parameters are not specified, the latest version, as defined in the `Versions.props` file, will be used.
@@ -318,23 +318,23 @@ run subsequent `build.proj` targets against them.
### Examples
-Build Microsoft.Data.SqlClient version 7.1.1 that references Microsoft.Data.SqlClient.Extensions.Abstractions v1.0.1
-and Microsoft.Data.SqlClient.Internal.Logging v2.2.2.
+Build Microsoft.Data.SqlClient version 7.1.1 in package mode. Because all SqlClient family packages share the same
+version, a single `-p:PackageVersionSqlClient=7.1.1` applies to SqlClient and its family dependencies (Abstractions and
+Logging).
-Build v2.2.2 of Logging and copy to packages:
+Build v7.1.1 of Logging and copy to packages:
```bash
-dotnet build -t:PackLogging -p:ReferenceType=Package -p:PackageVersionLogging=2.2.2
+dotnet build -t:PackLogging -p:ReferenceType=Package -p:PackageVersionSqlClient=7.1.1
cp artifacts/Microsoft.Data.SqlClient.Internal.Logging/Debug/*.*pkg packages/
```
-Build v1.0.1 of Abstractions that depends on v2.2.2 of Logging:
+Build v7.1.1 of Abstractions (which depends on v7.1.1 of Logging):
```bash
dotnet build -t:PackAbstractions \
-p:ReferenceType=Package \
- -p:PackageVersionAbstractions=1.0.1 \
- -p:PackageVersionLogging=2.2.2
+ -p:PackageVersionSqlClient=7.1.1
cp artifacts/Microsoft.Data.SqlClient.Extensions.Abstractions/Package-Debug/*.*pkg packages/
```
@@ -343,9 +343,7 @@ Build SqlClient:
```bash
dotnet build -t:PackSqlClient \
-p:ReferenceType=Package \
- -p:PackageVersionSqlClient=7.1.1 \
- -p:PackageVersionAbstractions=1.0.1 \
- -p:PackageVersionLogging=2.2.2
+ -p:PackageVersionSqlClient=7.1.1
cp artifacts/Microsoft.Data.SqlClient/Package-Debug/*.*pkg packages/
```
@@ -354,9 +352,7 @@ Run Microsoft.Data.SqlClient functional tests against the versions built above:
```bash
dotnet build -t:TestSqlClientFunctional \
-p:ReferenceType=Package \
- -p:PackageVersionSqlClient=7.1.1 \
- -p:PackageVersionAbstractions=1.0.1 \
- -p:PackageVersionLogging=2.2.2
+ -p:PackageVersionSqlClient=7.1.1
```
Manual test prerequisites and configuration are covered in [TESTGUIDE.md](TESTGUIDE.md#manual-test-prerequisites).
diff --git a/eng/pipelines/onebranch/variables/package-variables.yml b/eng/pipelines/onebranch/variables/package-variables.yml
index 588670bed6..0413749997 100644
--- a/eng/pipelines/onebranch/variables/package-variables.yml
+++ b/eng/pipelines/onebranch/variables/package-variables.yml
@@ -18,7 +18,7 @@
# is versioned separately by SqlServerNextVersion.
#
# The *NextVersion properties define the base version:
-# - On main: X.Y.Z-preview1 → official produces "X.Y.Z-preview1"
+# - On main: X.Y.Z-preview1 → official produces "X.Y.Z-preview1"
# - On release/X.Y: X.Y.Z → official produces "X.Y.Z"
#
# No per-package version variables are needed here — Versions.props is the single source.
From 048bc1899aad4054a93f50e0b00a09e5659edc6d Mon Sep 17 00:00:00 2001
From: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
Date: Mon, 22 Jun 2026 16:07:06 -0300
Subject: [PATCH 09/12] Consolidate CI version parameters onto a single
packageVersion
The SqlClient family shares one version, so the per-package version parameters
(abstractions/logging/azure/akv/mds PackageVersion and the vestigial
*AssemblyFileVersion) are collapsed into a single packageVersion parameter.
Microsoft.SqlServer.Server keeps its own sqlServerPackageVersion.
Build stages now self-compute their version(s) from the compute_versions_ci
outputs into stage variables and feed jobs directly ($(packageVersion) /
$(sqlServerPackageVersion)); the core no longer passes any version parameters
down. Reusable job/step templates keep a single packageVersion parameter.
Also drops the now-redundant -p:PackageVersion{Abstractions,Logging,AkvProvider}
build.proj arguments (they alias to PackageVersionSqlClient) and fixes two
Project-mode pack buildProperties (pack-abstractions, pack-azure) that still
passed the dead per-package version property.
---
.../templates/jobs/ci-build-nugets-job.yml | 34 ++------
.../templates/jobs/ci-run-tests-job.yml | 21 ++---
.../templates/stages/ci-run-tests-stage.yml | 41 ++--------
.../build-and-run-tests-netcore-step.yml | 22 ++---
.../steps/build-and-run-tests-netfx-step.yml | 22 ++---
.../templates/steps/ci-project-build-step.yml | 34 ++------
.../templates/steps/run-all-tests-step.yml | 70 +++++-----------
eng/pipelines/dotnet-sqlclient-ci-core.yml | 24 +-----
.../jobs/pack-abstractions-package-ci-job.yml | 20 ++---
.../jobs/pack-azure-package-ci-job.yml | 26 ++----
.../jobs/pack-logging-package-ci-job.yml | 11 +--
.../jobs/test-azure-package-ci-job.yml | 24 +-----
.../build-abstractions-package-ci-stage.yml | 26 +-----
.../stages/build-azure-package-ci-stage.yml | 81 +++----------------
.../stages/build-logging-package-ci-stage.yml | 18 +----
.../build-sqlclient-package-ci-stage.yml | 37 +--------
.../build-sqlserver-package-ci-stage.yml | 7 +-
17 files changed, 110 insertions(+), 408 deletions(-)
diff --git a/eng/pipelines/common/templates/jobs/ci-build-nugets-job.yml b/eng/pipelines/common/templates/jobs/ci-build-nugets-job.yml
index aa6a1c50c5..95d5d0b7d0 100644
--- a/eng/pipelines/common/templates/jobs/ci-build-nugets-job.yml
+++ b/eng/pipelines/common/templates/jobs/ci-build-nugets-job.yml
@@ -61,20 +61,9 @@ parameters:
type: stepList
default: []
- # The version of the Abstractions package to depend on when referenceType is 'Package'.
- - name: abstractionsPackageVersion
- type: string
-
- # The version of the Logging package to depend on when referenceType is 'Package'.
- - name: loggingPackageVersion
- type: string
-
- # The version to apply to the SqlClient package.
- - name: mdsPackageVersion
- type: string
-
- # The version to apply to the AKV Provider package.
- - name: akvPackageVersion
+ # The version to apply to the SqlClient family packages (SqlClient, Abstractions, Logging, and the
+ # AKV Provider). They all share this version.
+ - name: packageVersion
type: string
# The version of the SqlServer package to depend on when referenceType is 'Package'.
@@ -156,8 +145,7 @@ jobs:
referenceType: ${{ parameters.referenceType }}
operatingSystem: Windows
build: MDS
- abstractionsPackageVersion: ${{parameters.abstractionsPackageVersion}}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
+ packageVersion: ${{ parameters.packageVersion }}
sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
- task: DotNetCoreCLI@2
@@ -170,9 +158,7 @@ jobs:
-p:PackBuild=false
-p:Configuration=${{ parameters.buildConfiguration }}
-p:ReferenceType=${{ parameters.referenceType }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
# PackSqlClient outputs to artifacts/Microsoft.Data.SqlClient/-/.
@@ -201,10 +187,7 @@ jobs:
buildConfiguration: ${{ parameters.buildConfiguration }}
referenceType: ${{ parameters.referenceType }}
build: AkvProvider
- abstractionsPackageVersion: ${{parameters.abstractionsPackageVersion}}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
- mdsPackageVersion: ${{ parameters.mdsPackageVersion }}
- akvPackageVersion: ${{ parameters.akvPackageVersion }}
+ packageVersion: ${{ parameters.packageVersion }}
sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
- task: DotNetCoreCLI@2
@@ -218,11 +201,8 @@ jobs:
-p:PackBuild=false
-p:ReferenceType=${{ parameters.referenceType }}
-p:BuildNumber=$(Build.BuildNumber)
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
- -p:PackageVersionAkvProvider=${{ parameters.akvPackageVersion }}
- task: CopyFiles@2
displayName: Copy AKV Package to Output Folder
diff --git a/eng/pipelines/common/templates/jobs/ci-run-tests-job.yml b/eng/pipelines/common/templates/jobs/ci-run-tests-job.yml
index 1b1ea7a2e7..6c16c15d18 100644
--- a/eng/pipelines/common/templates/jobs/ci-run-tests-job.yml
+++ b/eng/pipelines/common/templates/jobs/ci-run-tests-job.yml
@@ -8,19 +8,11 @@ parameters:
- name: abstractionsArtifactsName
type: string
- # The version of the Abstractions package to depend on when referenceType is 'Package'.
- - name: abstractionsPackageVersion
- type: string
-
# The name of the Logging pipeline artifact to download when referenceType is 'Package'.
- name: loggingArtifactsName
type: string
default: Logging.Artifacts
- # The version of the Logging package to depend on when referenceType is 'Package'.
- - name: loggingPackageVersion
- type: string
-
# The configuration properties to set in the config file.
#
# GOTCHA: The following keys are used in template expressions and must be
@@ -82,8 +74,9 @@ parameters:
- name: mdsArtifactsName
type: string
- # The version of the SqlClient package to depend on when referenceType is 'Package'.
- - name: mdsPackageVersion
+ # The version to apply to the SqlClient family packages (SqlClient, Abstractions, Logging). They
+ # all share this version.
+ - name: packageVersion
type: string
# The name of the SqlServer pipeline artifact to download when referenceType is 'Package'.
@@ -374,9 +367,7 @@ jobs:
referenceType: ${{ parameters.referenceType }}
testSet: ${{ parameters.testSet }}
operatingSystem: ${{ parameters.operatingSystem }}
- abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
- mdsPackageVersion: ${{ parameters.mdsPackageVersion }}
+ packageVersion: ${{ parameters.packageVersion }}
sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
- ${{ if and(eq(parameters.enableX86Test, true), eq(parameters.operatingSystem, 'Windows')) }}:
@@ -390,9 +381,7 @@ jobs:
msbuildArchitecture: x86
dotnetx86RootPath: $(dotnetx86RootPath)
operatingSystem: ${{ parameters.operatingSystem }}
- abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
- mdsPackageVersion: ${{ parameters.mdsPackageVersion }}
+ packageVersion: ${{ parameters.packageVersion }}
sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
- template: /eng/pipelines/common/templates/steps/publish-test-results-step.yml@self
diff --git a/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml b/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml
index b8607a8217..60dc4b8a4b 100644
--- a/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml
+++ b/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml
@@ -11,10 +11,6 @@ parameters:
- name: abstractionsArtifactsName
type: string
- # The version of the Abstractions package to depend on when referenceType is 'Package'.
- - name: abstractionsPackageVersion
- type: string
-
# Additional stages we depend on, if any.
- name: additionalDependsOn
type: object
@@ -37,29 +33,16 @@ parameters:
type: string
default: Logging.Artifacts
- # The version of the Logging package to depend on when referenceType is 'Package'.
- - name: loggingPackageVersion
- type: string
-
# The name of the SqlClient pipeline artifacts to download.
- name: mdsArtifactsName
type: string
default: MDS.Artifacts
- # The version of the SqlClient package to depend on when referenceType is 'Package'.
- - name: mdsPackageVersion
- type: string
-
# The name of the SqlServer pipeline artifacts to download.
- name: sqlServerArtifactsName
type: string
default: SqlServer.Artifacts
- # The version of the SqlServer package to depend on when referenceType is 'Package'.
- - name: sqlServerPackageVersion
- type: string
- default: $(sqlServerPackageVersion)
-
# Jobs to run after the test jobs complete, if any.
- name: postTestJobs
type: jobList
@@ -103,16 +86,10 @@ stages:
- name: saPassword
value: $[stageDependencies.secrets_stage.secrets_job.outputs['SaPassword.Value']]
- # Bring the computed package versions into scope so that the
- # $(...PackageVersion) macros passed to the test jobs resolve when
+ # Bring the computed versions into scope so the $(packageVersion) and
+ # $(sqlServerPackageVersion) macros passed to the test jobs resolve when
# building/restoring in Package mode. These mirror the build stages.
- - name: abstractionsPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- # Abstractions shares the SqlClient family version.
- - name: loggingPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- # Logging shares the SqlClient family version.
- - name: mdsPackageVersion
+ - name: packageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: sqlServerPackageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
@@ -134,13 +111,11 @@ stages:
jobDisplayName: ${{ format('{0}_{1}_{2}', replace(targetFramework, '.', '_'), platform, testSet) }}
configProperties: ${{ config.value.configProperties }}
abstractionsArtifactsName: ${{ parameters.abstractionsArtifactsName }}
- abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
+ packageVersion: $(packageVersion)
loggingArtifactsName: ${{ parameters.loggingArtifactsName }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
mdsArtifactsName: ${{ parameters.mdsArtifactsName }}
- mdsPackageVersion: ${{ parameters.mdsPackageVersion }}
sqlServerArtifactsName: ${{ parameters.sqlServerArtifactsName }}
- sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
+ sqlServerPackageVersion: $(sqlServerPackageVersion)
prebuildSteps: ${{ parameters.prebuildSteps }}
targetFramework: ${{ targetFramework }}
netcoreVersionTestUtils: ${{config.value.netcoreVersionTestUtils }}
@@ -172,13 +147,11 @@ stages:
configProperties: ${{ config.value.configProperties }}
useManagedSNI: ${{ useManagedSNI }}
abstractionsArtifactsName: ${{ parameters.abstractionsArtifactsName }}
- abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
+ packageVersion: $(packageVersion)
loggingArtifactsName: ${{ parameters.loggingArtifactsName }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
mdsArtifactsName: ${{ parameters.mdsArtifactsName }}
- mdsPackageVersion: ${{ parameters.mdsPackageVersion }}
sqlServerArtifactsName: ${{ parameters.sqlServerArtifactsName }}
- sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
+ sqlServerPackageVersion: $(sqlServerPackageVersion)
prebuildSteps: ${{ parameters.prebuildSteps }}
targetFramework: ${{ targetFramework }}
netcoreVersionTestUtils: ${{config.value.netcoreVersionTestUtils }}
diff --git a/eng/pipelines/common/templates/steps/build-and-run-tests-netcore-step.yml b/eng/pipelines/common/templates/steps/build-and-run-tests-netcore-step.yml
index 2fe5cb5fe8..89ffb43e6c 100644
--- a/eng/pipelines/common/templates/steps/build-and-run-tests-netcore-step.yml
+++ b/eng/pipelines/common/templates/steps/build-and-run-tests-netcore-step.yml
@@ -4,13 +4,11 @@
# See the LICENSE file in the project root for more information. #
#################################################################################
parameters:
- - name: abstractionsPackageVersion
+ # The version to apply to the SqlClient family packages (SqlClient, Abstractions, Logging). They
+ # all share this version.
+ - name: packageVersion
type: string
- default: $(abstractionsPackageVersion)
-
- - name: mdsPackageVersion
- type: string
- default: $(mdsPackageVersion)
+ default: $(packageVersion)
- name: platform
type: string
@@ -48,8 +46,7 @@ steps:
-p:TargetNetCoreVersion=${{ parameters.TargetNetCoreVersion }}
-p:ReferenceType=Package
-p:Configuration=Release
- -p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
- -p:SqlClientPackageVersion=${{ parameters.mdsPackageVersion }}
+ -p:SqlClientPackageVersion=${{ parameters.packageVersion }}
--no-build
-v n
--filter "category!=failing&category!=flaky&category!=interactive"
@@ -69,8 +66,7 @@ steps:
-p:TargetNetCoreVersion=${{ parameters.TargetNetCoreVersion }}
-p:ReferenceType=Package
-p:Configuration=Release
- -p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
- -p:SqlClientPackageVersion=${{ parameters.mdsPackageVersion }}
+ -p:SqlClientPackageVersion=${{ parameters.packageVersion }}
--no-build
-v n
--filter "category=flaky"
@@ -91,8 +87,7 @@ steps:
-p:TargetNetCoreVersion=${{ parameters.TargetNetCoreVersion }}
-p:ReferenceType=Package
-p:Configuration=Release
- -p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
- -p:SqlClientPackageVersion=${{ parameters.mdsPackageVersion }}
+ -p:SqlClientPackageVersion=${{ parameters.packageVersion }}
--no-build
-v n
--filter "category!=failing&category!=flaky&category!=interactive"
@@ -113,8 +108,7 @@ steps:
-p:TargetNetCoreVersion=${{ parameters.TargetNetCoreVersion }}
-p:ReferenceType=Package
-p:Configuration=Release
- -p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
- -p:SqlClientPackageVersion=${{ parameters.mdsPackageVersion }}
+ -p:SqlClientPackageVersion=${{ parameters.packageVersion }}
--no-build
-v n
--filter "category=flaky"
diff --git a/eng/pipelines/common/templates/steps/build-and-run-tests-netfx-step.yml b/eng/pipelines/common/templates/steps/build-and-run-tests-netfx-step.yml
index 2783094ce7..0fe2bd024a 100644
--- a/eng/pipelines/common/templates/steps/build-and-run-tests-netfx-step.yml
+++ b/eng/pipelines/common/templates/steps/build-and-run-tests-netfx-step.yml
@@ -4,13 +4,11 @@
# See the LICENSE file in the project root for more information. #
#################################################################################
parameters:
- - name: abstractionsPackageVersion
+ # The version to apply to the SqlClient family packages (SqlClient, Abstractions, Logging). They
+ # all share this version.
+ - name: packageVersion
type: string
- default: $(abstractionsPackageVersion)
-
- - name: mdsPackageVersion
- type: string
- default: $(mdsPackageVersion)
+ default: $(packageVersion)
- name: platform
type: string
@@ -48,8 +46,7 @@ steps:
-p:TargetNetFxVersion=${{ parameters.TargetNetFxVersion }}
-p:ReferenceType=Package
-p:Configuration=Release
- -p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
- -p:SqlClientPackageVersion=${{ parameters.mdsPackageVersion }}
+ -p:SqlClientPackageVersion=${{ parameters.packageVersion }}
--no-build
-v n
--filter "category!=failing&category!=flaky&category!=interactive"
@@ -69,8 +66,7 @@ steps:
-p:TargetNetFxVersion=${{ parameters.TargetNetFxVersion }}
-p:ReferenceType=Package
-p:Configuration=Release
- -p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
- -p:SqlClientPackageVersion=${{ parameters.mdsPackageVersion }}
+ -p:SqlClientPackageVersion=${{ parameters.packageVersion }}
--no-build
-v n
--filter "category=flaky"
@@ -91,8 +87,7 @@ steps:
-p:TargetNetFxVersion=${{ parameters.TargetNetFxVersion }}
-p:ReferenceType=Package
-p:Configuration=Release
- -p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
- -p:SqlClientPackageVersion=${{ parameters.mdsPackageVersion }}
+ -p:SqlClientPackageVersion=${{ parameters.packageVersion }}
--no-build
-v n
--filter "category!=failing&category!=flaky&category!=interactive"
@@ -113,8 +108,7 @@ steps:
-p:TargetNetFxVersion=${{ parameters.TargetNetFxVersion }}
-p:ReferenceType=Package
-p:Configuration=Release
- -p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
- -p:SqlClientPackageVersion=${{ parameters.mdsPackageVersion }}
+ -p:SqlClientPackageVersion=${{ parameters.packageVersion }}
--no-build
-v n
--filter "category=flaky"
diff --git a/eng/pipelines/common/templates/steps/ci-project-build-step.yml b/eng/pipelines/common/templates/steps/ci-project-build-step.yml
index e5fa6d4424..c80de64fd4 100644
--- a/eng/pipelines/common/templates/steps/ci-project-build-step.yml
+++ b/eng/pipelines/common/templates/steps/ci-project-build-step.yml
@@ -46,27 +46,12 @@ parameters:
- all
- allNoDocs
- # Necessary to build MDS when referenceType is Package. Ignored when referenceType is Project.
- - name: abstractionsPackageVersion
+ # The version to apply to the SqlClient family packages (SqlClient, Abstractions, Logging, and the
+ # AKV Provider). They all share this version. Used when referenceType is Package; ignored for
+ # Project.
+ - name: packageVersion
type: string
- default: $(abstractionsPackageVersion)
-
- # Necessary to build MDS when referenceType is Package. Ignored when referenceType is Project.
- - name: loggingPackageVersion
- type: string
- default: $(loggingPackageVersion)
-
- # Package version to use for MDS package. Because we explicitly provide this version, the
- # assembly version will be generated based on this package version and the build number.
- # See MdsVersions.props for details on how this works.
- - name: mdsPackageVersion
- type: string
- default: $(mdsPackageVersion)
-
- # Necessary to build AKV Provider when referenceType is Package. Ignored when referenceType is Project.
- - name: akvPackageVersion
- type: string
- default: $(akvPackageVersion)
+ default: $(packageVersion)
# Necessary when referenceType is Package. Ignored when referenceType is Project.
- name: sqlServerPackageVersion
@@ -87,9 +72,7 @@ steps:
-p:Configuration=${{ parameters.buildConfiguration }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:BuildNumber=${{ parameters.buildNumber }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
# Build AKV Provider
@@ -105,8 +88,5 @@ steps:
-p:Configuration=${{ parameters.buildConfiguration }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:BuildNumber=${{ parameters.buildNumber }}
- -p:PackageVersionAkvProvider=${{ parameters.akvPackageVersion }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
diff --git a/eng/pipelines/common/templates/steps/run-all-tests-step.yml b/eng/pipelines/common/templates/steps/run-all-tests-step.yml
index e41c7d22b2..928c2e3abc 100644
--- a/eng/pipelines/common/templates/steps/run-all-tests-step.yml
+++ b/eng/pipelines/common/templates/steps/run-all-tests-step.yml
@@ -5,10 +5,9 @@
#################################################################################
parameters:
- - name: abstractionsPackageVersion
- type: string
-
- - name: loggingPackageVersion
+ # The version to apply to the SqlClient family packages (SqlClient, Abstractions, Logging). They
+ # all share this version.
+ - name: packageVersion
type: string
# True to emit debug information and steps.
@@ -19,9 +18,6 @@ parameters:
- name: targetFramework
type: string
- - name: mdsPackageVersion
- type: string
-
- name: sqlServerPackageVersion
type: string
@@ -91,7 +87,7 @@ steps:
-p:TestFramework=${{ parameters.targetFramework }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:TestResultsFolderPath=TestResults
${{ else }}: # x86
@@ -100,7 +96,7 @@ steps:
-p:TestFramework=${{ parameters.targetFramework }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:DotnetPath=${{ parameters.dotnetx86RootPath }}
-p:TestResultsFolderPath=TestResults
@@ -117,7 +113,7 @@ steps:
-p:TestFramework=${{ parameters.targetFramework }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:TestFilters="category=flaky"
-p:TestResultsFolderPath=TestResults
@@ -128,7 +124,7 @@ steps:
-p:TestFramework=${{ parameters.targetFramework }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:DotnetPath=${{ parameters.dotnetx86RootPath }}
-p:TestFilters="category=flaky"
@@ -148,9 +144,7 @@ steps:
-p:TestFramework=${{ parameters.targetFramework }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:TestResultsFolderPath=TestResults
${{ else }}: # x86
@@ -159,9 +153,7 @@ steps:
-p:TestFramework=${{ parameters.targetFramework }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:DotnetPath=${{ parameters.dotnetx86RootPath }}
-p:TestResultsFolderPath=TestResults
@@ -178,9 +170,7 @@ steps:
-p:TestFramework=${{ parameters.targetFramework }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:TestFilters="category=flaky"
-p:TestResultsFolderPath=TestResults
@@ -191,9 +181,7 @@ steps:
-p:TestFramework=${{ parameters.targetFramework }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:DotnetPath=${{ parameters.dotnetx86RootPath }}
-p:TestFilters="category=flaky"
@@ -214,9 +202,7 @@ steps:
-p:TestSet=${{ parameters.testSet }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:TestResultsFolderPath=TestResults
${{ else }}: # x86
@@ -226,9 +212,7 @@ steps:
-p:TestSet=${{ parameters.testSet }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:DotnetPath=${{ parameters.dotnetx86RootPath }}
-p:TestResultsFolderPath=TestResults
@@ -247,9 +231,7 @@ steps:
-p:TestSet=${{ parameters.testSet }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:TestFilters="category=flaky"
-p:TestResultsFolderPath=TestResults
@@ -261,9 +243,7 @@ steps:
-p:TestSet=${{ parameters.testSet }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:DotnetPath=${{ parameters.dotnetx86RootPath }}
-p:TestFilters="category=flaky"
@@ -283,7 +263,7 @@ steps:
-p:TestFramework=${{ parameters.targetFramework }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:TestResultsFolderPath=TestResults
@@ -298,7 +278,7 @@ steps:
-p:TestFramework=${{ parameters.targetFramework }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:TestFilters="category=flaky"
-p:TestResultsFolderPath=TestResults
@@ -316,9 +296,7 @@ steps:
-p:TestFramework=${{ parameters.targetFramework }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:TestResultsFolderPath=TestResults
@@ -333,9 +311,7 @@ steps:
-p:TestFramework=${{ parameters.targetFramework }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:TestFilters="category=flaky"
-p:TestResultsFolderPath=TestResults
@@ -353,9 +329,7 @@ steps:
-p:TestSet=${{ parameters.testSet }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:TestResultsFolderPath=TestResults
retryCountOnTaskFailure: ${{parameters.retryCountOnManualTests }}
@@ -372,9 +346,7 @@ steps:
-p:TestSet=${{ parameters.testSet }}
-p:ReferenceType=${{ parameters.referenceType }}
-p:Configuration=${{ parameters.buildConfiguration }}
- -p:PackageVersionAbstractions=${{ parameters.abstractionsPackageVersion }}
- -p:PackageVersionLogging=${{ parameters.loggingPackageVersion }}
- -p:PackageVersionSqlClient=${{ parameters.mdsPackageVersion }}
+ -p:PackageVersionSqlClient=${{ parameters.packageVersion }}
-p:PackageVersionSqlServer=${{ parameters.sqlServerPackageVersion }}
-p:TestFilters="category=flaky"
-p:TestResultsFolderPath=TestResults
diff --git a/eng/pipelines/dotnet-sqlclient-ci-core.yml b/eng/pipelines/dotnet-sqlclient-ci-core.yml
index cb34c0204e..1a341a7548 100644
--- a/eng/pipelines/dotnet-sqlclient-ci-core.yml
+++ b/eng/pipelines/dotnet-sqlclient-ci-core.yml
@@ -129,7 +129,8 @@ variables:
stages:
# Compute all package versions up-front. Downstream stages consume these via
- # stage dependency output variables (e.g. $(loggingPackageVersion)).
+ # Each build/test stage computes the versions it needs directly from the
+ # compute_versions_ci stage outputs, so no version parameters are passed here.
- template: /eng/pipelines/stages/compute-versions-ci-stage.yml@self
parameters:
buildSuffix: ${{ parameters.buildSuffix }}
@@ -145,7 +146,6 @@ stages:
- template: /eng/pipelines/stages/build-sqlserver-package-ci-stage.yml@self
parameters:
sqlServerArtifactsName: $(sqlServerArtifactsName)
- sqlServerPackageVersion: $(sqlServerPackageVersion)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
@@ -156,8 +156,6 @@ stages:
- template: /eng/pipelines/stages/build-logging-package-ci-stage.yml@self
parameters:
loggingArtifactsName: $(loggingArtifactsName)
- loggingAssemblyFileVersion: $(loggingAssemblyFileVersion)
- loggingPackageVersion: $(loggingPackageVersion)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
@@ -170,13 +168,10 @@ stages:
- template: /eng/pipelines/stages/build-abstractions-package-ci-stage.yml@self
parameters:
abstractionsArtifactsName: $(abstractionsArtifactsName)
- abstractionsAssemblyFileVersion: $(abstractionsAssemblyFileVersion)
- abstractionsPackageVersion: $(abstractionsPackageVersion)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
loggingArtifactsName: $(loggingArtifactsName)
- loggingPackageVersion: $(loggingPackageVersion)
referenceType: ${{ parameters.referenceType }}
# When building Abstractions via packages, we must depend on the Logging
# package.
@@ -191,16 +186,11 @@ stages:
- template: /eng/pipelines/stages/build-sqlclient-package-ci-stage.yml@self
parameters:
abstractionsArtifactsName: $(abstractionsArtifactsName)
- abstractionsPackageVersion: $(abstractionsPackageVersion)
buildConfiguration: ${{ parameters.buildConfiguration }}
loggingArtifactsName: $(loggingArtifactsName)
- loggingPackageVersion: $(loggingPackageVersion)
mdsArtifactsName: $(mdsArtifactsName)
- mdsPackageVersion: $(mdsPackageVersion)
- akvPackageVersion: $(akvPackageVersion)
referenceType: ${{ parameters.referenceType }}
sqlServerArtifactsName: $(sqlServerArtifactsName)
- sqlServerPackageVersion: $(sqlServerPackageVersion)
SNIVersion: ${{ parameters.SNIVersion }}
SNIValidationFeed: ${{ parameters.SNIValidationFeed }}
# When building SqlClient via packages, we must depend on the Abstractions, Logging,
@@ -216,10 +206,7 @@ stages:
- template: /eng/pipelines/stages/build-azure-package-ci-stage.yml@self
parameters:
abstractionsArtifactsName: $(abstractionsArtifactsName)
- abstractionsPackageVersion: $(abstractionsPackageVersion)
azureArtifactsName: $(azureArtifactsName)
- azureAssemblyFileVersion: $(azureAssemblyFileVersion)
- azurePackageVersion: $(azurePackageVersion)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
# When building via packages, we must depend on the Abstractions, Logging,
@@ -232,12 +219,9 @@ stages:
- build_sqlclient_package_stage
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
loggingArtifactsName: $(loggingArtifactsName)
- loggingPackageVersion: $(loggingPackageVersion)
mdsArtifactsName: $(mdsArtifactsName)
- mdsPackageVersion: $(mdsPackageVersion)
referenceType: ${{ parameters.referenceType }}
sqlServerArtifactsName: $(sqlServerArtifactsName)
- sqlServerPackageVersion: $(sqlServerPackageVersion)
# Verify that all NuGet packages comply with Microsoft metadata requirements.
# This runs on a Windows agent after all packages have been built and
@@ -257,13 +241,9 @@ stages:
buildConfiguration: ${{ parameters.buildConfiguration }}
referenceType: ${{ parameters.referenceType }}
abstractionsArtifactsName: $(abstractionsArtifactsName)
- abstractionsPackageVersion: $(abstractionsPackageVersion)
loggingArtifactsName: $(loggingArtifactsName)
- loggingPackageVersion: $(loggingPackageVersion)
mdsArtifactsName: $(mdsArtifactsName)
- mdsPackageVersion: $(mdsPackageVersion)
sqlServerArtifactsName: $(sqlServerArtifactsName)
- sqlServerPackageVersion: $(sqlServerPackageVersion)
testJobTimeout: ${{ parameters.testJobTimeout }}
# When testing MDS via packages, we must depend on the Abstractions,
diff --git a/eng/pipelines/jobs/pack-abstractions-package-ci-job.yml b/eng/pipelines/jobs/pack-abstractions-package-ci-job.yml
index c7315914fa..799d67d012 100644
--- a/eng/pipelines/jobs/pack-abstractions-package-ci-job.yml
+++ b/eng/pipelines/jobs/pack-abstractions-package-ci-job.yml
@@ -17,12 +17,9 @@ parameters:
type: string
default: Abstractions.Artifact
- # The assembly file version to stamp into the Abstractions DLLs.
- - name: abstractionsAssemblyFileVersion
- type: string
-
- # The version to apply to the Abstractions NuGet package and its assemblies.
- - name: abstractionsPackageVersion
+ # The version to apply to the Abstractions NuGet package and its assemblies. Every package in the
+ # SqlClient family shares this version.
+ - name: packageVersion
type: string
# The type of build to test (Release or Debug)
@@ -60,13 +57,6 @@ parameters:
type: string
default: Logging.Artifacts
- # The Logging package version to depend on.
- #
- # This is used when the referenceType is 'Package'.
- - name: loggingPackageVersion
- type: string
- default: ''
-
# The C# project reference type to use when building and packing the packages.
- name: referenceType
type: string
@@ -154,7 +144,7 @@ jobs:
configurationToPack: ${{ parameters.buildConfiguration }}
packDirectory: $(dotnetPackagesDir)
verbosityToPack: ${{ parameters.dotnetVerbosity }}
- buildProperties: SqlClientPackageVersion=${{ parameters.abstractionsPackageVersion }};ReferenceType=Package
+ buildProperties: SqlClientPackageVersion=${{ parameters.packageVersion }};ReferenceType=Package
- ${{ else }}:
- task: DotNetCoreCLI@2
@@ -165,7 +155,7 @@ jobs:
configurationToPack: ${{ parameters.buildConfiguration }}
packDirectory: $(dotnetPackagesDir)
verbosityToPack: ${{ parameters.dotnetVerbosity }}
- buildProperties: AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }};AbstractionsAssemblyFileVersion=${{ parameters.abstractionsAssemblyFileVersion }}
+ buildProperties: SqlClientPackageVersion=${{ parameters.packageVersion }}
# Publish the NuGet packages as a named pipeline artifact.
- task: PublishPipelineArtifact@1
diff --git a/eng/pipelines/jobs/pack-azure-package-ci-job.yml b/eng/pipelines/jobs/pack-azure-package-ci-job.yml
index a911319f38..8e71957792 100644
--- a/eng/pipelines/jobs/pack-azure-package-ci-job.yml
+++ b/eng/pipelines/jobs/pack-azure-package-ci-job.yml
@@ -26,30 +26,14 @@ parameters:
type: string
default: Logging.Artifacts
- # The Abstractions package version to depend on.
- #
- # This is used when the referenceType is 'Package'.
- - name: abstractionsPackageVersion
- type: string
-
- # The Logging package version to depend on.
- #
- # This is used when the referenceType is 'Package'.
- - name: loggingPackageVersion
- type: string
- default: ''
-
# The name of the pipeline artifacts to publish.
- name: azureArtifactsName
type: string
default: Azure.Artifacts
- # The assembly file version to stamp into the Azure DLLs.
- - name: azureAssemblyFileVersion
- type: string
-
- # The version to apply to the NuGet package and DLLs.
- - name: azurePackageVersion
+ # The version to apply to the SqlClient family packages (SqlClient, Abstractions, Logging). They
+ # all share this version.
+ - name: packageVersion
type: string
# The type of build to test (Release or Debug)
@@ -171,7 +155,7 @@ jobs:
configurationToPack: ${{ parameters.buildConfiguration }}
packDirectory: $(dotnetPackagesDir)
verbosityToPack: ${{ parameters.dotnetVerbosity }}
- buildProperties: SqlClientPackageVersion=${{ parameters.azurePackageVersion }};ReferenceType=Package
+ buildProperties: SqlClientPackageVersion=${{ parameters.packageVersion }};ReferenceType=Package
- ${{ else }}:
- task: DotNetCoreCLI@2
@@ -182,7 +166,7 @@ jobs:
configurationToPack: ${{ parameters.buildConfiguration }}
packDirectory: $(dotnetPackagesDir)
verbosityToPack: ${{ parameters.dotnetVerbosity }}
- buildProperties: AzurePackageVersion=${{ parameters.azurePackageVersion }};AzureAssemblyFileVersion=${{ parameters.azureAssemblyFileVersion }}
+ buildProperties: SqlClientPackageVersion=${{ parameters.packageVersion }}
# Publish the NuGet packages as a named pipeline artifact.
- task: PublishPipelineArtifact@1
diff --git a/eng/pipelines/jobs/pack-logging-package-ci-job.yml b/eng/pipelines/jobs/pack-logging-package-ci-job.yml
index 915c95a8ab..10ee3e47da 100644
--- a/eng/pipelines/jobs/pack-logging-package-ci-job.yml
+++ b/eng/pipelines/jobs/pack-logging-package-ci-job.yml
@@ -17,12 +17,9 @@ parameters:
type: string
default: Logging.Artifacts
- # The assembly file version to stamp into the Logging DLLs.
- - name: loggingAssemblyFileVersion
- type: string
-
- # The version to apply to the Logging NuGet package and its assemblies.
- - name: loggingPackageVersion
+ # The version to apply to the Logging NuGet package and its assemblies. Every package in the
+ # SqlClient family shares this version.
+ - name: packageVersion
type: string
# The type of build to test (Release or Debug)
@@ -107,7 +104,7 @@ jobs:
configurationToPack: ${{ parameters.buildConfiguration }}
packDirectory: $(dotnetPackagesDir)
verbosityToPack: ${{ parameters.dotnetVerbosity }}
- buildProperties: SqlClientPackageVersion=${{ parameters.loggingPackageVersion }}
+ buildProperties: SqlClientPackageVersion=${{ parameters.packageVersion }}
# Publish the NuGet packages as a named pipeline artifact.
- task: PublishPipelineArtifact@1
diff --git a/eng/pipelines/jobs/test-azure-package-ci-job.yml b/eng/pipelines/jobs/test-azure-package-ci-job.yml
index eb9e36152a..104401b585 100644
--- a/eng/pipelines/jobs/test-azure-package-ci-job.yml
+++ b/eng/pipelines/jobs/test-azure-package-ci-job.yml
@@ -26,17 +26,9 @@ parameters:
type: string
default: Logging.Artifacts
- # The Logging package version to depend on.
- #
- # This is used when the referenceType is 'Package'.
- - name: loggingPackageVersion
- type: string
- default: ''
-
- # The Abstractions package verion to depend on.
- #
- # This is used when the referenceType is 'Package'.
- - name: abstractionsPackageVersion
+ # The version to apply to the SqlClient family packages (SqlClient, Abstractions, Logging). They
+ # all share this version. Used when referenceType is 'Package'.
+ - name: packageVersion
type: string
# The type of build to test (Release or Debug)
@@ -80,12 +72,6 @@ parameters:
type: string
default: MDS.Artifacts
- # The MDS package verion to depend on.
- #
- # This is used when the referenceType is 'Package'.
- - name: mdsPackageVersion
- type: string
-
# The name of the SqlServer pipeline artifacts to download.
#
# This is used when the referenceType is 'Package'. MDS depends on
@@ -174,9 +160,7 @@ jobs:
-p:Configuration=${{ parameters.buildConfiguration }}
--verbosity ${{ parameters.dotnetVerbosity }}
-p:ReferenceType=${{ parameters.referenceType }}
- -p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
- -p:LoggingPackageVersion=${{ parameters.loggingPackageVersion }}
- -p:SqlClientPackageVersion=${{ parameters.mdsPackageVersion }}
+ -p:SqlClientPackageVersion=${{ parameters.packageVersion }}
-p:SqlServerPackageVersion=${{ parameters.sqlServerPackageVersion }}
# Explicitly unset the $PLATFORM environment variable that is set by the
diff --git a/eng/pipelines/stages/build-abstractions-package-ci-stage.yml b/eng/pipelines/stages/build-abstractions-package-ci-stage.yml
index 6a72fddef0..3df0ef9843 100644
--- a/eng/pipelines/stages/build-abstractions-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-abstractions-package-ci-stage.yml
@@ -10,7 +10,7 @@
# The NuGet packages have the following properties:
#
# Name: Microsoft.Data.SqlClient.Extensions.Abstractions
-# Version: (from parameter)
+# Version: (from parameter)
#
# The following NuGet packages are published:
#
@@ -30,14 +30,6 @@ parameters:
type: string
default: Abstractions.Artifacts
- # The assembly file version to stamp into the DLLs.
- - name: abstractionsAssemblyFileVersion
- type: string
-
- # The version to apply to the NuGet package and DLLs.
- - name: abstractionsPackageVersion
- type: string
-
# Additional stages we depend on, if any.
- name: additionalDependsOn
type: object
@@ -74,13 +66,6 @@ parameters:
type: string
default: Logging.Artifacts
- # The Logging package version to depend on.
- #
- # This is used when the referenceType is 'Package'.
- - name: loggingPackageVersion
- type: string
- default: ''
-
# The C# project reference type to use when building and packing the packages.
- name: referenceType
type: string
@@ -103,10 +88,8 @@ stages:
- ${{ dep }}
variables:
- - name: abstractionsPackageVersion
+ - name: packageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- - name: abstractionsAssemblyFileVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
jobs:
@@ -161,8 +144,8 @@ stages:
- template: /eng/pipelines/jobs/pack-abstractions-package-ci-job.yml@self
parameters:
abstractionsArtifactsName: ${{ parameters.abstractionsArtifactsName }}
- abstractionsAssemblyFileVersion: ${{ parameters.abstractionsAssemblyFileVersion }}
- abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
+ # The version is computed by this stage (see the packageVersion variable above).
+ packageVersion: $(packageVersion)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
dependsOn:
@@ -173,5 +156,4 @@ stages:
- test_abstractions_package_job_macos
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
loggingArtifactsName: ${{ parameters.loggingArtifactsName }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
referenceType: ${{ parameters.referenceType }}
diff --git a/eng/pipelines/stages/build-azure-package-ci-stage.yml b/eng/pipelines/stages/build-azure-package-ci-stage.yml
index b9e4d99b95..0713030b76 100644
--- a/eng/pipelines/stages/build-azure-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-azure-package-ci-stage.yml
@@ -10,7 +10,7 @@
# The NuGet packages have the following properties:
#
# Name: Microsoft.Data.SqlClient.Extensions.Azure
-# Version: (from parameters)
+# Version: (from the shared SqlClient family version)
#
# The following NuGet packages are published:
#
@@ -34,12 +34,6 @@ parameters:
type: string
default: Abstractions.Artifacts
- # The Abstractions package verion to depend on.
- #
- # This is used when the referenceType is 'Package'.
- - name: abstractionsPackageVersion
- type: string
-
# Additional stages we depend on, if any.
- name: additionalDependsOn
type: object
@@ -63,14 +57,6 @@ parameters:
type: string
default: Azure.Artifacts
- # The assembly file version to stamp into the DLLs.
- - name: azureAssemblyFileVersion
- type: string
-
- # The version to apply to the NuGet package and DLLs.
- - name: azurePackageVersion
- type: string
-
# The name of the general Azure pool to use for jobs that don't require
# customized VM images.
- name: azurePoolName
@@ -108,13 +94,6 @@ parameters:
type: string
default: Logging.Artifacts
- # The Logging package version to depend on.
- #
- # This is used when the referenceType is 'Package'.
- - name: loggingPackageVersion
- type: string
- default: ''
-
# The name of the MDS pipeline artifacts to download.
#
# This is used when the referenceType is 'Package'.
@@ -122,12 +101,6 @@ parameters:
type: string
default: MDS.Artifacts
- # The MDS package verion to depend on.
- #
- # This is used when the referenceType is 'Package'.
- - name: mdsPackageVersion
- type: string
-
# The name of the SqlServer pipeline artifacts to download.
#
# This is used when the referenceType is 'Package'. MDS depends on
@@ -136,13 +109,6 @@ parameters:
type: string
default: SqlServer.Artifacts
- # The SqlServer package version to depend on.
- #
- # This is used when the referenceType is 'Package'.
- - name: sqlServerPackageVersion
- type: string
- default: ''
-
# The C# project reference type to use when building and packing the packages.
- name: referenceType
type: string
@@ -168,15 +134,7 @@ stages:
- name: saPassword
value: $[stageDependencies.secrets_stage.secrets_job.outputs['SaPassword.Value']]
# Package versions from compute-versions stage.
- - name: azurePackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- - name: azureAssemblyFileVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
- - name: loggingPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- - name: abstractionsPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- - name: mdsPackageVersion
+ - name: packageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: sqlServerPackageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
@@ -189,18 +147,16 @@ stages:
- template: /eng/pipelines/jobs/test-azure-package-ci-job.yml@self
parameters:
abstractionsArtifactsName: ${{ parameters.abstractionsArtifactsName }}
- abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
+ packageVersion: $(packageVersion)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
displayNamePrefix: Linux
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
jobNameSuffix: linux
loggingArtifactsName: ${{ parameters.loggingArtifactsName }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
mdsArtifactsName: ${{ parameters.mdsArtifactsName }}
- mdsPackageVersion: ${{ parameters.mdsPackageVersion }}
sqlServerArtifactsName: ${{ parameters.sqlServerArtifactsName }}
- sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
+ sqlServerPackageVersion: $(sqlServerPackageVersion)
netFrameworkRuntimes: []
netRuntimes: [net8.0, net9.0, net10.0]
poolName: ${{ parameters.azurePoolName }}
@@ -211,18 +167,16 @@ stages:
- template: /eng/pipelines/jobs/test-azure-package-ci-job.yml@self
parameters:
abstractionsArtifactsName: ${{ parameters.abstractionsArtifactsName }}
- abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
+ packageVersion: $(packageVersion)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
displayNamePrefix: Linux Integration
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
jobNameSuffix: linux_integration
loggingArtifactsName: ${{ parameters.loggingArtifactsName }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
mdsArtifactsName: ${{ parameters.mdsArtifactsName }}
- mdsPackageVersion: ${{ parameters.mdsPackageVersion }}
sqlServerArtifactsName: ${{ parameters.sqlServerArtifactsName }}
- sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
+ sqlServerPackageVersion: $(sqlServerPackageVersion)
netFrameworkRuntimes: []
netRuntimes: [net8.0, net9.0, net10.0]
poolName: ${{ parameters.adoPoolName }}
@@ -242,18 +196,16 @@ stages:
- template: /eng/pipelines/jobs/test-azure-package-ci-job.yml@self
parameters:
abstractionsArtifactsName: ${{ parameters.abstractionsArtifactsName }}
- abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
+ packageVersion: $(packageVersion)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
displayNamePrefix: Win
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
jobNameSuffix: windows
loggingArtifactsName: ${{ parameters.loggingArtifactsName }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
mdsArtifactsName: ${{ parameters.mdsArtifactsName }}
- mdsPackageVersion: ${{ parameters.mdsPackageVersion }}
sqlServerArtifactsName: ${{ parameters.sqlServerArtifactsName }}
- sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
+ sqlServerPackageVersion: $(sqlServerPackageVersion)
netFrameworkRuntimes: [net462]
netRuntimes: [net8.0, net9.0, net10.0]
poolName: ${{ parameters.azurePoolName }}
@@ -264,18 +216,16 @@ stages:
- template: /eng/pipelines/jobs/test-azure-package-ci-job.yml@self
parameters:
abstractionsArtifactsName: ${{ parameters.abstractionsArtifactsName }}
- abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
+ packageVersion: $(packageVersion)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
displayNamePrefix: Win Integration
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
jobNameSuffix: windows_integration
loggingArtifactsName: ${{ parameters.loggingArtifactsName }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
mdsArtifactsName: ${{ parameters.mdsArtifactsName }}
- mdsPackageVersion: ${{ parameters.mdsPackageVersion }}
sqlServerArtifactsName: ${{ parameters.sqlServerArtifactsName }}
- sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
+ sqlServerPackageVersion: $(sqlServerPackageVersion)
netFrameworkRuntimes: [net462]
netRuntimes: [net8.0, net9.0, net10.0]
poolName: ${{ parameters.adoPoolName }}
@@ -304,18 +254,16 @@ stages:
- template: /eng/pipelines/jobs/test-azure-package-ci-job.yml@self
parameters:
abstractionsArtifactsName: ${{ parameters.abstractionsArtifactsName }}
- abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
+ packageVersion: $(packageVersion)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
displayNamePrefix: macOS
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
jobNameSuffix: macos
loggingArtifactsName: ${{ parameters.loggingArtifactsName }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
mdsArtifactsName: ${{ parameters.mdsArtifactsName }}
- mdsPackageVersion: ${{ parameters.mdsPackageVersion }}
sqlServerArtifactsName: ${{ parameters.sqlServerArtifactsName }}
- sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
+ sqlServerPackageVersion: $(sqlServerPackageVersion)
netFrameworkRuntimes: []
netRuntimes: [net8.0, net9.0, net10.0]
poolName: ${{ parameters.azurePoolName }}
@@ -330,10 +278,8 @@ stages:
- template: /eng/pipelines/jobs/pack-azure-package-ci-job.yml@self
parameters:
abstractionsArtifactsName: ${{ parameters.abstractionsArtifactsName }}
- abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
+ packageVersion: $(packageVersion)
azureArtifactsName: ${{ parameters.azureArtifactsName }}
- azureAssemblyFileVersion: ${{ parameters.azureAssemblyFileVersion }}
- azurePackageVersion: ${{ parameters.azurePackageVersion }}
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
dependsOn:
@@ -346,5 +292,4 @@ stages:
- test_azure_package_job_macos
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
loggingArtifactsName: ${{ parameters.loggingArtifactsName }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
referenceType: ${{ parameters.referenceType }}
diff --git a/eng/pipelines/stages/build-logging-package-ci-stage.yml b/eng/pipelines/stages/build-logging-package-ci-stage.yml
index ece25ba76a..b9d5feb082 100644
--- a/eng/pipelines/stages/build-logging-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-logging-package-ci-stage.yml
@@ -10,7 +10,7 @@
# The NuGet packages have the following properties:
#
# Name: Microsoft.Data.SqlClient.Internal.Logging
-# Version: (from parameter)
+# Version: (from parameter)
#
# The following NuGet packages are published:
#
@@ -35,14 +35,6 @@ parameters:
type: string
default: Logging.Artifacts
- # The assembly file version to stamp into the DLLs.
- - name: loggingAssemblyFileVersion
- type: string
-
- # The version to apply to the NuGet package and DLLs.
- - name: loggingPackageVersion
- type: string
-
# The type of build to produce (Release or Debug)
- name: buildConfiguration
type: string
@@ -79,10 +71,8 @@ stages:
- ${{ dep }}
variables:
- - name: loggingPackageVersion
+ - name: packageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- - name: loggingAssemblyFileVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
jobs:
@@ -95,8 +85,8 @@ stages:
- template: /eng/pipelines/jobs/pack-logging-package-ci-job.yml@self
parameters:
loggingArtifactsName: ${{ parameters.loggingArtifactsName }}
- loggingAssemblyFileVersion: ${{ parameters.loggingAssemblyFileVersion }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
+ # The version is computed by this stage (see the packageVersion variable above).
+ packageVersion: $(packageVersion)
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
diff --git a/eng/pipelines/stages/build-sqlclient-package-ci-stage.yml b/eng/pipelines/stages/build-sqlclient-package-ci-stage.yml
index 5d29bdfd5a..70fa122d5f 100644
--- a/eng/pipelines/stages/build-sqlclient-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-sqlclient-package-ci-stage.yml
@@ -18,10 +18,6 @@ parameters:
type: string
default: Abstractions.Artifacts
- # The Abstractions package version.
- - name: abstractionsPackageVersion
- type: string
-
# Additional stages we depend on, if any.
- name: additionalDependsOn
type: object
@@ -39,33 +35,16 @@ parameters:
type: string
default: Logging.Artifacts
- # The Logging package version.
- - name: loggingPackageVersion
- type: string
-
# The name of the MDS pipeline artifacts to publish.
- name: mdsArtifactsName
type: string
default: MDS.Artifacts
- # The MDS package version.
- - name: mdsPackageVersion
- type: string
-
- # The AKV Provider package version.
- - name: akvPackageVersion
- type: string
-
# The name of the SqlServer pipeline artifacts to download.
- name: sqlServerArtifactsName
type: string
default: SqlServer.Artifacts
- # The SqlServer package version.
- - name: sqlServerPackageVersion
- type: string
- default: $(sqlServerPackageVersion)
-
# The C# project reference type to use when building and packing the packages.
- name: referenceType
type: string
@@ -97,13 +76,7 @@ stages:
- ${{ dep }}
variables:
- - name: mdsPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- - name: akvPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- - name: loggingPackageVersion
- value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- - name: abstractionsPackageVersion
+ - name: packageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- name: sqlServerPackageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
@@ -113,15 +86,13 @@ stages:
parameters:
buildConfiguration: ${{ parameters.buildConfiguration }}
referenceType: ${{ parameters.referenceType }}
- abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
abstractionsArtifactsName: ${{ parameters.abstractionsArtifactsName }}
- loggingPackageVersion: ${{ parameters.loggingPackageVersion }}
loggingArtifactsName: ${{ parameters.loggingArtifactsName }}
- mdsPackageVersion: ${{ parameters.mdsPackageVersion }}
mdsArtifactsName: ${{ parameters.mdsArtifactsName }}
- akvPackageVersion: ${{ parameters.akvPackageVersion }}
+ # The family version is computed by this stage (see the packageVersion variable above).
+ packageVersion: $(packageVersion)
sqlServerArtifactsName: ${{ parameters.sqlServerArtifactsName }}
- sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
+ sqlServerPackageVersion: $(sqlServerPackageVersion)
${{ if ne(parameters.SNIVersion, '') }}:
prebuildSteps:
- template: /eng/pipelines/common/templates/steps/override-sni-version.yml@self
diff --git a/eng/pipelines/stages/build-sqlserver-package-ci-stage.yml b/eng/pipelines/stages/build-sqlserver-package-ci-stage.yml
index e4e88b8110..3a1417185d 100644
--- a/eng/pipelines/stages/build-sqlserver-package-ci-stage.yml
+++ b/eng/pipelines/stages/build-sqlserver-package-ci-stage.yml
@@ -48,10 +48,6 @@ parameters:
type: string
default: SqlServer.Artifacts
- # The version to apply to the SqlServer NuGet package and DLLs.
- - name: sqlServerPackageVersion
- type: string
-
# The verbosity level for the dotnet CLI commands.
- name: dotnetVerbosity
type: string
@@ -84,5 +80,6 @@ stages:
buildConfiguration: ${{ parameters.buildConfiguration }}
debug: ${{ parameters.debug }}
sqlServerArtifactsName: ${{ parameters.sqlServerArtifactsName }}
- sqlServerPackageVersion: ${{ parameters.sqlServerPackageVersion }}
+ # The version is computed by this stage (see the sqlServerPackageVersion variable above).
+ sqlServerPackageVersion: $(sqlServerPackageVersion)
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
From c140cce07f55da843bf264a044dbb6cd2fd30609 Mon Sep 17 00:00:00 2001
From: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
Date: Tue, 23 Jun 2026 15:56:48 -0300
Subject: [PATCH 10/12] Remove dead Abstractions/Logging Versions.props imports
from SqlClient csproj
These per-package Versions.props files were deleted when the SqlClient family
was unified onto a single shared version. The csproj still defined paths to and
conditionally imported them (guarded by Exists, so they were silent no-ops). The
SqlClient family version is already imported globally by src/Directory.Build.props,
so only the separately-versioned Microsoft.SqlServer.Server props is needed here.
---
.../src/Microsoft.Data.SqlClient.csproj | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj
index 407e196870..a54a159921 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj
@@ -101,8 +101,6 @@
$(RepoRoot)/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Abstractions.csproj
$(RepoRoot)/src/Microsoft.Data.SqlClient.Internal/Logging/src/Logging.csproj
- $(RepoRoot)/src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Versions.props
- $(RepoRoot)/src/Microsoft.Data.SqlClient.Internal/Logging/src/Versions.props
$(RepoRoot)/src/Microsoft.SqlServer.Server/Versions.props
@@ -146,13 +144,11 @@
-
-
From 87248c9ed399015de8a2cdadf6efa2380b6a7ddb Mon Sep 17 00:00:00 2001
From: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
Date: Tue, 23 Jun 2026 16:08:03 -0300
Subject: [PATCH 11/12] Rename ThisAssembly version constants to FileVersion
and PackageVersion
Remove the ambiguous 'AssemblyFileVersion' indirection in GenerateThisAssemblyCs:
the custom property always fell back to FileVersion, so emit FileVersion directly.
Rename the generated ThisAssembly constants InformationalVersion -> FileVersion and
NuGetPackageVersion -> PackageVersion, and update all consumers (AdapterUtil,
SqlDiagnosticListener, UserAgent, Azure ActiveDirectoryAuthenticationProvider,
UserAgentTests). The stress runner reads these internal fields via reflection;
since it project-references SqlClient it only probes the current names.
Also replace 'AssemblyFileVersion' with 'FileVersion' in the four CI/PR pipeline
BuildNumber comments (Major.Minor.Patch.Revision).
---
...t-sqlclient-ci-package-reference-pipeline.yml | 2 +-
...t-sqlclient-ci-project-reference-pipeline.yml | 2 +-
.../sqlclient-pr-package-ref-pipeline.yml | 2 +-
.../sqlclient-pr-project-ref-pipeline.yml | 2 +-
.../src/ActiveDirectoryAuthenticationProvider.cs | 2 +-
.../src/Microsoft/Data/Common/AdapterUtil.cs | 2 +-
.../Diagnostics/SqlDiagnosticListener.cs | 6 +++---
.../src/Microsoft/Data/SqlClient/UserAgent.cs | 2 +-
.../SqlClient.Stress.Runner/Program.cs | 16 +++++-----------
.../tests/UnitTests/UserAgentTests.cs | 2 +-
tools/targets/GenerateThisAssemblyCs.targets | 7 ++-----
11 files changed, 18 insertions(+), 27 deletions(-)
diff --git a/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml b/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml
index 8b71c998b8..ceeca91dde 100644
--- a/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml
+++ b/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml
@@ -41,7 +41,7 @@
# https://sqlclientdrivers.visualstudio.com/ADO.Net/_build?definitionId=1933
# Set the pipeline run name to the day-of-year and the daily run counter.
-# This becomes BuildNumber, used as the revision component of AssemblyFileVersion
+# This becomes BuildNumber, used as the revision component of FileVersion
# (Major.Minor.Patch.Revision). Revision must fit in a 16-bit unsigned int (max 65535).
# Format $(DayOfYear)$(Rev:rr) yields e.g. 15401 (day 154, run 01) — always < 65535.
name: $(DayOfYear)$(Rev:rr)
diff --git a/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml b/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml
index bdb7d6ae97..fcdec8ad2e 100644
--- a/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml
+++ b/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml
@@ -41,7 +41,7 @@
# https://sqlclientdrivers.visualstudio.com/ADO.Net/_build?definitionId=1825
# Set the pipeline run name to the day-of-year and the daily run counter.
-# This becomes BuildNumber, used as the revision component of AssemblyFileVersion
+# This becomes BuildNumber, used as the revision component of FileVersion
# (Major.Minor.Patch.Revision). Revision must fit in a 16-bit unsigned int (max 65535).
# Format $(DayOfYear)$(Rev:rr) yields e.g. 15401 (day 154, run 01) — always < 65535.
name: $(DayOfYear)$(Rev:rr)
diff --git a/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml b/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml
index 94be94bd6c..98dd98056b 100644
--- a/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml
+++ b/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml
@@ -20,7 +20,7 @@
# https://dev.azure.com/SqlClientDrivers/public/_build?definitionId=2198
# Set the pipeline run name to the day-of-year and the daily run counter.
-# This becomes BuildNumber, used as the revision component of AssemblyFileVersion
+# This becomes BuildNumber, used as the revision component of FileVersion
# (Major.Minor.Patch.Revision). Revision must fit in a 16-bit unsigned int (max 65535).
# Format $(DayOfYear)$(Rev:rr) yields e.g. 15401 (day 154, run 01) — always < 65535.
name: $(DayOfYear)$(Rev:rr)
diff --git a/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml b/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml
index 01a335662e..79160eb651 100644
--- a/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml
+++ b/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml
@@ -20,7 +20,7 @@
# https://dev.azure.com/SqlClientDrivers/public/_build?definitionId=2197
# Set the pipeline run name to the day-of-year and the daily run counter.
-# This becomes BuildNumber, used as the revision component of AssemblyFileVersion
+# This becomes BuildNumber, used as the revision component of FileVersion
# (Major.Minor.Patch.Revision). Revision must fit in a 16-bit unsigned int (max 65535).
# Format $(DayOfYear)$(Rev:rr) yields e.g. 15401 (day 154, run 01) — always < 65535.
name: $(DayOfYear)$(Rev:rr)
diff --git a/src/Microsoft.Data.SqlClient.Extensions/Azure/src/ActiveDirectoryAuthenticationProvider.cs b/src/Microsoft.Data.SqlClient.Extensions/Azure/src/ActiveDirectoryAuthenticationProvider.cs
index 7a39bb808f..0b8b9bf2d8 100644
--- a/src/Microsoft.Data.SqlClient.Extensions/Azure/src/ActiveDirectoryAuthenticationProvider.cs
+++ b/src/Microsoft.Data.SqlClient.Extensions/Azure/src/ActiveDirectoryAuthenticationProvider.cs
@@ -798,7 +798,7 @@ private IPublicClientApplication CreateClientAppInstance(PublicClientAppKey publ
{
ClientId = publicClientAppKey.ApplicationClientId,
ClientName = typeof(ActiveDirectoryAuthenticationProvider).FullName,
- ClientVersion = Extensions.Azure.ThisAssembly.InformationalVersion,
+ ClientVersion = Extensions.Azure.ThisAssembly.FileVersion,
RedirectUri = publicClientAppKey.RedirectUri,
})
// The Authority contains the tenant-specific Entra ID endpoint, e.g.
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/AdapterUtil.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/AdapterUtil.cs
index 568592072d..3e764ea7ed 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/AdapterUtil.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/AdapterUtil.cs
@@ -806,7 +806,7 @@ internal static Version GetAssemblyVersion()
// NOTE: Using lazy thread-safety since we don't care if two threads both happen to update the value at the same time
if (s_systemDataVersion is null)
{
- s_systemDataVersion = new Version(ThisAssembly.InformationalVersion);
+ s_systemDataVersion = new Version(ThisAssembly.FileVersion);
}
return s_systemDataVersion;
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlDiagnosticListener.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlDiagnosticListener.cs
index 9ed25cc8d8..40e4bb63d9 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlDiagnosticListener.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlDiagnosticListener.cs
@@ -246,7 +246,7 @@ public void WriteConnectionOpenAfter(
Stopwatch.GetTimestamp(),
sqlConnection.ClientConnectionId,
sqlConnection,
- ThisAssembly.InformationalVersion,
+ ThisAssembly.FileVersion,
sqlConnection.Statistics?.GetDictionary()
)
);
@@ -269,7 +269,7 @@ public Guid WriteConnectionOpenBefore(SqlConnection sqlConnection, [CallerMember
operation,
Stopwatch.GetTimestamp(),
sqlConnection,
- ThisAssembly.InformationalVersion
+ ThisAssembly.FileVersion
)
);
@@ -297,7 +297,7 @@ public void WriteConnectionOpenError(
Stopwatch.GetTimestamp(),
sqlConnection.ClientConnectionId,
sqlConnection,
- ThisAssembly.InformationalVersion,
+ ThisAssembly.FileVersion,
ex
)
);
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/UserAgent.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/UserAgent.cs
index a8fcf7ca88..6b04443813 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/UserAgent.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/UserAgent.cs
@@ -145,7 +145,7 @@ static UserAgent()
MaxLenOverall,
PayloadVersion,
DriverName,
- ThisAssembly.NuGetPackageVersion,
+ ThisAssembly.PackageVersion,
RuntimeInformation.ProcessArchitecture,
osType,
RuntimeInformation.OSDescription,
diff --git a/src/Microsoft.Data.SqlClient/tests/StressTests/SqlClient.Stress.Runner/Program.cs b/src/Microsoft.Data.SqlClient/tests/StressTests/SqlClient.Stress.Runner/Program.cs
index da1ce59316..82108043eb 100644
--- a/src/Microsoft.Data.SqlClient/tests/StressTests/SqlClient.Stress.Runner/Program.cs
+++ b/src/Microsoft.Data.SqlClient/tests/StressTests/SqlClient.Stress.Runner/Program.cs
@@ -256,20 +256,14 @@ private static string GetMdsVersion()
return "";
}
- // Look for the NuGetPackageVersion field, which is available in
- // newer MDS packages.
+ // Look for the PackageVersion field, falling back to FileVersion.
var field = type.GetField(
- "NuGetPackageVersion",
+ "PackageVersion",
+ BindingFlags.NonPublic | BindingFlags.Static)
+ ?? type.GetField(
+ "FileVersion",
BindingFlags.NonPublic | BindingFlags.Static);
- // If not present, use the older assembly file version field.
- if (field is null)
- {
- field = type.GetField(
- "InformationalVersion",
- BindingFlags.NonPublic | BindingFlags.Static);
- }
-
if (field is null)
{
return "";
diff --git a/src/Microsoft.Data.SqlClient/tests/UnitTests/UserAgentTests.cs b/src/Microsoft.Data.SqlClient/tests/UnitTests/UserAgentTests.cs
index 8331fdb654..80b826700e 100644
--- a/src/Microsoft.Data.SqlClient/tests/UnitTests/UserAgentTests.cs
+++ b/src/Microsoft.Data.SqlClient/tests/UnitTests/UserAgentTests.cs
@@ -78,7 +78,7 @@ public void Value_Runtime_Parts()
Assert.Equal(7, parts.Length);
Assert.Equal("1", parts[0]);
Assert.Equal("MS-MDS", parts[1]);
- Assert.Equal(ThisAssembly.NuGetPackageVersion, parts[2]);
+ Assert.Equal(ThisAssembly.PackageVersion, parts[2]);
// Architecture must be non-empty and 10 characters or less.
Assert.True(parts[3] == "Unknown" || parts[3].Length > 0);
diff --git a/tools/targets/GenerateThisAssemblyCs.targets b/tools/targets/GenerateThisAssemblyCs.targets
index 6ed66d74ed..29844fbce3 100644
--- a/tools/targets/GenerateThisAssemblyCs.targets
+++ b/tools/targets/GenerateThisAssemblyCs.targets
@@ -8,9 +8,6 @@
-
- $(FileVersion)
-
$(AssemblyName)
@@ -22,8 +19,8 @@ namespace $(ThisAssemblyNamespace)
{
internal static class ThisAssembly
{
- internal const string InformationalVersion = "$(AssemblyFileVersion)"%3B
- internal const string NuGetPackageVersion = "$(Version)"%3B
+ internal const string FileVersion = "$(FileVersion)"%3B
+ internal const string PackageVersion = "$(Version)"%3B
}
}
From 4bdf4dd137f4b4d8535dbbfd9f21ad2ec6a0af3f Mon Sep 17 00:00:00 2001
From: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
Date: Tue, 23 Jun 2026 17:24:07 -0300
Subject: [PATCH 12/12] Simplify OneBranch flags: always build SqlClient
family; optional SqlServer
The SqlClient family (Logging, Abstractions, SqlClient, Azure, AKV Provider) is
always built and released together, so the buildSqlClient/buildAkvProvider toggles
are removed. buildSqlServer is now the only build toggle: when on, the family
depends on the freshly-built SqlServer artifact; when off, it depends on the most
recently published SqlServer package (version-only dependency restored from NuGet).
- compute-versions-stage: SqlServer version selection driven by buildSqlServer
(next when built, published when not).
- build-stages: family stages are unconditional; SqlServer build job and the
SqlClient/AKV SqlServer dependency are gated on buildSqlServer.
- build-buildproj-job: dependency artifactName is now optional (version-only deps
skip artifact download and restore from NuGet).
- publish-symbols-stage: independent publishSymbols flag; family symbols always
publish, SqlServer symbols gated on buildSqlServer; dropped no-op placeholder.
- release-stages: dropped nonexistent sqlclient_package_validation from dependsOn.
- Dropped duplicate 'Server' suffix: buildSqlServerServer -> buildSqlServer,
releaseSqlServerServer -> releaseSqlServer.
- Updated onebranch-pipeline-design instructions to match.
---
.../onebranch-pipeline-design.instructions.md | 22 +-
...sqlclient-package-versions.instructions.md | 4 +-
.../onebranch/jobs/build-buildproj-job.yml | 21 +-
.../onebranch/sqlclient-non-official.yml | 32 +-
.../onebranch/sqlclient-official.yml | 32 +-
.../onebranch/stages/build-stages.yml | 380 +++++++++---------
.../stages/compute-versions-stage.yml | 20 +-
.../stages/publish-symbols-stage.yml | 158 +++-----
.../onebranch/stages/release-stages.yml | 9 +-
9 files changed, 319 insertions(+), 359 deletions(-)
diff --git a/.github/instructions/onebranch-pipeline-design.instructions.md b/.github/instructions/onebranch-pipeline-design.instructions.md
index 2421674eef..c429ff4a29 100644
--- a/.github/instructions/onebranch-pipeline-design.instructions.md
+++ b/.github/instructions/onebranch-pipeline-design.instructions.md
@@ -39,11 +39,9 @@ Defined in `stages/build-stages.yml`. Four build stages plus validation, ordered
Each build job copies PDB files into `$(JOB_OUTPUT)/symbols/` so they are included in the auto-published pipeline artifact alongside the NuGet packages in `$(JOB_OUTPUT)/packages/`.
Stage conditional rules:
-- Wrap stages/jobs in `${{ if }}` compile-time conditionals based on build parameters
-- `buildSqlClient` controls Stages 2, 3, validation, and Logging (when AKV is disabled)
-- `buildAKVProvider AND buildSqlClient` controls Stage 4
-- `buildSqlServerServer` controls SqlServer.Server job in Stage 1
-- Logging builds when `buildAKVProvider OR buildSqlClient` is true
+- The SqlClient family (Logging, Abstractions, SqlClient, Azure, AKV Provider) is **always built** — Stages 2, 3, and 4 and the Logging job in Stage 1 are unconditional. There is no `buildSqlClient`/`buildAKVProvider` toggle.
+- `buildSqlServer` is the only build toggle; it controls just the SqlServer.Server job in Stage 1.
+- When `buildSqlServer` is true, SqlClient/AKV depend on the freshly-built SqlServer artifact (downloaded into the local feed). When false, they depend on the most recently published SqlServer package — a version-only dependency (no artifact download) restored from NuGet.
## Job Templates
@@ -62,7 +60,8 @@ When adding a new package to the OneBranch flow:
- Defined in `stages/publish-symbols-stage.yml`; produces stage `publish_symbols`
- Entire stage excluded at compile time when `publishSymbols` is false
-- `dependsOn` is conditional based on which `build*` parameters are set, mirroring the build stage dependency graph
+- The SqlClient family symbols are always published; the SqlServer.Server symbols job is conditional on `buildSqlServer`
+- `dependsOn` covers all family build stages (always present), plus `build_independent` for SqlServer
- One job per package (`publish-symbols-job.yml`), each downloading its build artifact and publishing PDBs from `symbols/`
- Each package's PDBs are published separately with unique artifact names and version information
- Build jobs copy PDBs into `$(JOB_OUTPUT)/symbols/` so they are included in the auto-published artifact
@@ -88,16 +87,15 @@ When adding a new package to the OneBranch flow:
## Parameters
-Build parameters (all boolean, default `true`):
+Build parameters:
- `debug` — enable debug output (default `false`)
- `isPreview` — use preview version numbers (default `false`)
- `publishSymbols` — publish symbols to servers (default `false`)
-- `buildSqlServerServer` — build SqlServer.Server package
-- `buildSqlClient` — build SqlClient, Extensions.Azure, Abstractions, and Logging
-- `buildAKVProvider` — build AKV Provider (requires `buildSqlClient`)
+- `buildSqlServer` — build the Microsoft.SqlServer.Server package (default `true`). The SqlClient family is always built, so this is the only build toggle. It also drives the SqlServer dependency version the family uses (built/next vs published).
-Release parameters (all boolean, default `false`):
-- `releaseSqlServerServer`, `releaseLogging`, `releaseAbstractions`, `releaseSqlClient`, `releaseAzure`, `releaseAKVProvider`
+Release parameters (boolean, default `false`):
+- `releaseSqlClient` — release the entire SqlClient family together (Logging, Abstractions, SqlClient, Azure, AKV Provider) at the shared version
+- `releaseSqlServer` — release Microsoft.SqlServer.Server (versioned separately)
Official-only parameter:
- `releaseToProduction` — controls both NuGet target feed and symbol server destination (default `false`):
diff --git a/.github/instructions/sqlclient-package-versions.instructions.md b/.github/instructions/sqlclient-package-versions.instructions.md
index 39bcef8239..fc026dfa32 100644
--- a/.github/instructions/sqlclient-package-versions.instructions.md
+++ b/.github/instructions/sqlclient-package-versions.instructions.md
@@ -106,9 +106,9 @@ Uses the full `compute-versions-stage.yml` machinery:
- The **SqlClient family** always uses `SqlClientNextVersion`.
- **`Microsoft.SqlServer.Server`** uses its next or published version based on the
- `releaseSqlServerServer` boolean:
+ `releaseSqlServer` boolean:
-| `releaseSqlServerServer` | Effective SqlServer Version | Meaning |
+| `releaseSqlServer` | Effective SqlServer Version | Meaning |
|--------------------------|-----------------------------|---------|
| `True` | `SqlServerNextVersion` (e.g. `1.1.0-preview1`) | SqlServer is being released |
| `False` | `SqlServerPublishedVersion` (e.g. `1.0.0`) | Only built as a SqlClient dependency; use last-shipped |
diff --git a/eng/pipelines/onebranch/jobs/build-buildproj-job.yml b/eng/pipelines/onebranch/jobs/build-buildproj-job.yml
index 6e168bda23..e312a23e00 100644
--- a/eng/pipelines/onebranch/jobs/build-buildproj-job.yml
+++ b/eng/pipelines/onebranch/jobs/build-buildproj-job.yml
@@ -48,8 +48,10 @@ parameters:
# A list of packages that the package being built with this job depends on. Each entry in the
# object should have the fields:
- # * artifactName - Name of the artifact published in a previous job that contains the desired
- # version of the dependency.
+ # * artifactName - (Optional) Name of the artifact published in a previous job that contains the
+ # desired version of the dependency. Omit to reference a package that is NOT built in this run
+ # (e.g. a previously published SqlServer package): the version argument is still applied, but no
+ # artifact is downloaded, so the dependency is restored from NuGet instead of the local feed.
# * shortName - Short name of the dependency. This name should correspond to the short name used
# when building the package via build.proj
# * version - Pre-computed version of the dependency (from compute-versions stage).
@@ -120,12 +122,15 @@ jobs:
- script: echo "##vso[task.setvariable variable=dependencyPackageArguments]$(dependencyPackageArguments) -p:PackageVersion${{ package.shortName }}=${{ package.version }}"
displayName: "Append Package Version Argument - ${{ package.shortName }}"
- # Download the pipeline artifact for this dependency package
- - task: DownloadPipelineArtifact@2
- displayName: "Download Artifact - ${{ package.shortName }}"
- inputs:
- artifactName: ${{ package.artifactName }}
- targetPath: $(REPO_ROOT)/packages
+ # Download the pipeline artifact for this dependency package, when it was built in this
+ # run. Dependencies without an artifactName are restored from NuGet instead (e.g. a
+ # previously published SqlServer package), so no download is needed.
+ - ${{ if package.artifactName }}:
+ - task: DownloadPipelineArtifact@2
+ displayName: "Download Artifact - ${{ package.shortName }}"
+ inputs:
+ artifactName: ${{ package.artifactName }}
+ targetPath: $(REPO_ROOT)/packages
# Install the .NET SDK.
- template: /eng/pipelines/common/steps/install-dotnet.yml@self
diff --git a/eng/pipelines/onebranch/sqlclient-non-official.yml b/eng/pipelines/onebranch/sqlclient-non-official.yml
index d09f449fe7..168b43453d 100644
--- a/eng/pipelines/onebranch/sqlclient-non-official.yml
+++ b/eng/pipelines/onebranch/sqlclient-non-official.yml
@@ -32,29 +32,19 @@ parameters:
# Build parameters — select which packages to build.
- # Build the Microsoft.SqlServer.Server package.
- - name: buildSqlServerServer
+ # Build the Microsoft.SqlServer.Server package. The SqlClient family is always built; SqlServer
+ # is optional. When built, the SqlClient family depends on the freshly-built SqlServer package;
+ # when not built, the family depends on the most recently published SqlServer package.
+ - name: buildSqlServer
displayName: Build Microsoft.SqlServer.Server
type: boolean
default: true
- # Build Microsoft.Data.SqlClient and Extensions packages.
- - name: buildSqlClient
- displayName: Build Microsoft.Data.SqlClient and Extensions
- type: boolean
- default: true
-
- # Build the Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider package.
- - name: buildAkvProvider
- displayName: Build Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider
- type: boolean
- default: true
-
# Release parameters — select which packages to publish to NuGet.
# All default to false; toggle at queue time for on-demand selective release.
# Release the Microsoft.SqlServer.Server package (versioned separately).
- - name: releaseSqlServerServer
+ - name: releaseSqlServer
displayName: Release Microsoft.SqlServer.Server
type: boolean
default: false
@@ -159,14 +149,12 @@ extends:
stages:
- template: /eng/pipelines/onebranch/stages/compute-versions-stage.yml@self
parameters:
- releaseSqlServerServer: ${{ parameters.releaseSqlServerServer }}
+ buildSqlServer: ${{ parameters.buildSqlServer }}
- template: /eng/pipelines/onebranch/stages/build-stages.yml@self
parameters:
isOfficial: false # This is a non-official pipeline.
- buildSqlServerServer: ${{ parameters.buildSqlServerServer }}
- buildSqlClient: ${{ parameters.buildSqlClient }}
- buildAkvProvider: ${{ parameters.buildAkvProvider }}
+ buildSqlServer: ${{ parameters.buildSqlServer }}
abstractionsArtifactsName: '${{ variables.abstractionsArtifactsName }}'
akvProviderArtifactsName: '${{ variables.akvProviderArtifactsName }}'
@@ -185,9 +173,7 @@ extends:
- template: /eng/pipelines/onebranch/stages/publish-symbols-stage.yml@self
parameters:
publishSymbols: ${{ parameters.publishSymbols }}
- buildSqlServerServer: ${{ parameters.buildSqlServerServer }}
- buildSqlClient: ${{ parameters.buildSqlClient }}
- buildAkvProvider: ${{ parameters.buildAkvProvider }}
+ buildSqlServer: ${{ parameters.buildSqlServer }}
abstractionsArtifactsName: '${{ variables.abstractionsArtifactsName }}'
akvProviderArtifactsName: '${{ variables.akvProviderArtifactsName }}'
@@ -221,5 +207,5 @@ extends:
sqlClientArtifactsName: '${{ variables.sqlClientArtifactsName }}'
sqlServerArtifactsName: '${{ variables.sqlServerArtifactsName }}'
- releaseSqlServerServer: ${{ parameters.releaseSqlServerServer }}
+ releaseSqlServer: ${{ parameters.releaseSqlServer }}
releaseSqlClient: ${{ parameters.releaseSqlClient }}
diff --git a/eng/pipelines/onebranch/sqlclient-official.yml b/eng/pipelines/onebranch/sqlclient-official.yml
index 57e34fd726..1a28c530fc 100644
--- a/eng/pipelines/onebranch/sqlclient-official.yml
+++ b/eng/pipelines/onebranch/sqlclient-official.yml
@@ -54,29 +54,19 @@ parameters:
# Build parameters — select which packages to build.
- # Build the Microsoft.SqlServer.Server package.
- - name: buildSqlServerServer
+ # Build the Microsoft.SqlServer.Server package. The SqlClient family is always built; SqlServer
+ # is optional. When built, the SqlClient family depends on the freshly-built SqlServer package;
+ # when not built, the family depends on the most recently published SqlServer package.
+ - name: buildSqlServer
displayName: Build Microsoft.SqlServer.Server
type: boolean
default: true
- # Build Microsoft.Data.SqlClient and Extensions packages.
- - name: buildSqlClient
- displayName: Build Microsoft.Data.SqlClient and Extensions
- type: boolean
- default: true
-
- # Build the Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider package.
- - name: buildAkvProvider
- displayName: Build Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider
- type: boolean
- default: true
-
# Release parameters — select which packages to publish to NuGet.
# All default to false; toggle at queue time for on-demand selective release.
# Release the Microsoft.SqlServer.Server package (versioned separately).
- - name: releaseSqlServerServer
+ - name: releaseSqlServer
displayName: Release Microsoft.SqlServer.Server
type: boolean
default: false
@@ -187,14 +177,12 @@ extends:
stages:
- template: /eng/pipelines/onebranch/stages/compute-versions-stage.yml@self
parameters:
- releaseSqlServerServer: ${{ parameters.releaseSqlServerServer }}
+ buildSqlServer: ${{ parameters.buildSqlServer }}
- template: /eng/pipelines/onebranch/stages/build-stages.yml@self
parameters:
isOfficial: true # This is an official pipeline.
- buildSqlServerServer: ${{ parameters.buildSqlServerServer }}
- buildSqlClient: ${{ parameters.buildSqlClient }}
- buildAkvProvider: ${{ parameters.buildAkvProvider }}
+ buildSqlServer: ${{ parameters.buildSqlServer }}
abstractionsArtifactsName: '${{ variables.abstractionsArtifactsName }}'
akvProviderArtifactsName: '${{ variables.akvProviderArtifactsName }}'
@@ -213,9 +201,7 @@ extends:
- template: /eng/pipelines/onebranch/stages/publish-symbols-stage.yml@self
parameters:
publishSymbols: ${{ parameters.publishSymbols }}
- buildSqlServerServer: ${{ parameters.buildSqlServerServer }}
- buildSqlClient: ${{ parameters.buildSqlClient }}
- buildAkvProvider: ${{ parameters.buildAkvProvider }}
+ buildSqlServer: ${{ parameters.buildSqlServer }}
abstractionsArtifactsName: '${{ variables.abstractionsArtifactsName }}'
akvProviderArtifactsName: '${{ variables.akvProviderArtifactsName }}'
@@ -253,5 +239,5 @@ extends:
sqlClientArtifactsName: '${{ variables.sqlClientArtifactsName }}'
sqlServerArtifactsName: '${{ variables.sqlServerArtifactsName }}'
- releaseSqlServerServer: ${{ parameters.releaseSqlServerServer }}
+ releaseSqlServer: ${{ parameters.releaseSqlServer }}
releaseSqlClient: ${{ parameters.releaseSqlClient }}
diff --git a/eng/pipelines/onebranch/stages/build-stages.yml b/eng/pipelines/onebranch/stages/build-stages.yml
index 840f7a7b96..aeccf6d7cb 100644
--- a/eng/pipelines/onebranch/stages/build-stages.yml
+++ b/eng/pipelines/onebranch/stages/build-stages.yml
@@ -24,13 +24,10 @@ parameters:
# ── Build parameters ───────────────────────────────────────────────────
- - name: buildSqlServerServer
- type: boolean
-
- - name: buildSqlClient
- type: boolean
-
- - name: buildAkvProvider
+ # Whether to build Microsoft.SqlServer.Server. The SqlClient family is always built; SqlServer
+ # is optional. When built, the SqlClient family depends on the freshly-built SqlServer package;
+ # when not built, the family depends on the most recently published SqlServer package.
+ - name: buildSqlServer
type: boolean
# ── Pre-computed versions (from compute-versions stage) ─────────────────
@@ -118,28 +115,27 @@ stages:
value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerFileVersion'] ]
jobs:
- - ${{ if or(eq(parameters.buildAkvProvider, true), eq(parameters.buildSqlClient, true)) }}:
- # Build Microsoft.Data.SqlClient.Internal.Logging
- - template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
- parameters:
- apiScanDllPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.Internal.Logging/dlls'
- apiScanPdbPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.Internal.Logging/pdbs'
- shouldSignPackage: ${{ parameters.isOfficial }}
- signingAppRegistrationClientId: '${{ parameters.signingAppRegistrationClientId }}'
- signingAppRegistrationTenantId: '${{ parameters.signingAppRegistrationTenantId }}'
- signingAuthAkvName: '${{ parameters.signingAuthAkvName }}'
- signingAuthSignCertName: '${{ parameters.signingAuthSignCertName }}'
- signingEsrpClientId: '${{ parameters.signingEsrpClientId }}'
- signingEsrpConnectedServiceName: '${{ parameters.signingEsrpConnectedServiceName }}'
-
- dependencies: []
- fileVersion: '${{ parameters.sqlClientFileVersion }}'
- packageFullName: 'Microsoft.Data.SqlClient.Internal.Logging'
- packageShortName: 'Logging'
- packageVersion: '${{ parameters.sqlClientPackageVersion }}'
-
-
- - ${{ if eq(parameters.buildSqlServerServer, true) }}:
+ # Build Microsoft.Data.SqlClient.Internal.Logging
+ - template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
+ parameters:
+ apiScanDllPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.Internal.Logging/dlls'
+ apiScanPdbPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.Internal.Logging/pdbs'
+ shouldSignPackage: ${{ parameters.isOfficial }}
+ signingAppRegistrationClientId: '${{ parameters.signingAppRegistrationClientId }}'
+ signingAppRegistrationTenantId: '${{ parameters.signingAppRegistrationTenantId }}'
+ signingAuthAkvName: '${{ parameters.signingAuthAkvName }}'
+ signingAuthSignCertName: '${{ parameters.signingAuthSignCertName }}'
+ signingEsrpClientId: '${{ parameters.signingEsrpClientId }}'
+ signingEsrpConnectedServiceName: '${{ parameters.signingEsrpConnectedServiceName }}'
+
+ dependencies: []
+ fileVersion: '${{ parameters.sqlClientFileVersion }}'
+ packageFullName: 'Microsoft.Data.SqlClient.Internal.Logging'
+ packageShortName: 'Logging'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
+
+
+ - ${{ if eq(parameters.buildSqlServer, true) }}:
# Build Microsoft.SqlServer.Server
- template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
parameters:
@@ -164,178 +160,188 @@ stages:
# Abstractions must build after Logging since it has a package
# dependency on Internal.Logging.
# ====================================================================
- - ${{ if eq(parameters.buildSqlClient, true) }}:
- - stage: build_abstractions
- displayName: "Build Abstractions Package"
- dependsOn:
- - compute_versions
- - build_independent
-
- variables:
- - name: sqlClientPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- - name: sqlClientFileVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
-
- jobs:
- # Build Microsoft.Data.SqlClient.Extensions.Abstractions
- - template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
- parameters:
- apiScanDllPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.Extensions.Abstractions/dlls'
- apiScanPdbPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.Extensions.Abstractions/pdbs'
- shouldSignPackage: ${{ parameters.isOfficial }}
- signingAppRegistrationClientId: '${{ parameters.signingAppRegistrationClientId }}'
- signingAppRegistrationTenantId: '${{ parameters.signingAppRegistrationTenantId }}'
- signingAuthAkvName: '${{ parameters.signingAuthAkvName }}'
- signingAuthSignCertName: '${{ parameters.signingAuthSignCertName }}'
- signingEsrpClientId: '${{ parameters.signingEsrpClientId }}'
- signingEsrpConnectedServiceName: '${{ parameters.signingEsrpConnectedServiceName }}'
-
- dependencies:
- - artifactName: '${{ parameters.loggingArtifactsName }}'
- shortName: 'Logging'
- version: '${{ parameters.sqlClientPackageVersion }}'
- fileVersion: '${{ parameters.sqlClientFileVersion }}'
- packageFullName: 'Microsoft.Data.SqlClient.Extensions.Abstractions'
- packageShortName: 'Abstractions'
- packageVersion: '${{ parameters.sqlClientPackageVersion }}'
+ - stage: build_abstractions
+ displayName: "Build Abstractions Package"
+ dependsOn:
+ - compute_versions
+ - build_independent
+
+ variables:
+ - name: sqlClientPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ - name: sqlClientFileVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
+
+ jobs:
+ # Build Microsoft.Data.SqlClient.Extensions.Abstractions
+ - template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
+ parameters:
+ apiScanDllPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.Extensions.Abstractions/dlls'
+ apiScanPdbPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.Extensions.Abstractions/pdbs'
+ shouldSignPackage: ${{ parameters.isOfficial }}
+ signingAppRegistrationClientId: '${{ parameters.signingAppRegistrationClientId }}'
+ signingAppRegistrationTenantId: '${{ parameters.signingAppRegistrationTenantId }}'
+ signingAuthAkvName: '${{ parameters.signingAuthAkvName }}'
+ signingAuthSignCertName: '${{ parameters.signingAuthSignCertName }}'
+ signingEsrpClientId: '${{ parameters.signingEsrpClientId }}'
+ signingEsrpConnectedServiceName: '${{ parameters.signingEsrpConnectedServiceName }}'
+
+ dependencies:
+ - artifactName: '${{ parameters.loggingArtifactsName }}'
+ shortName: 'Logging'
+ version: '${{ parameters.sqlClientPackageVersion }}'
+ fileVersion: '${{ parameters.sqlClientFileVersion }}'
+ packageFullName: 'Microsoft.Data.SqlClient.Extensions.Abstractions'
+ packageShortName: 'Abstractions'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
# ====================================================================
# Stage 3: Core packages (depend on Abstractions)
# SqlClient and Extensions.Azure build in parallel after Abstractions.
# Stage name kept as 'build_dependent' for validate job compatibility.
# ====================================================================
- - ${{ if eq(parameters.buildSqlClient, true) }}:
- - stage: build_dependent
- displayName: "Build Core Packages"
- dependsOn:
- - compute_versions
- - build_abstractions
-
- variables:
- - name: sqlClientPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- - name: sqlClientFileVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
- - name: sqlServerPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
-
- jobs:
- - template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
- parameters:
- apiScanDllPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient/dlls'
- apiScanPdbPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient/pdbs'
- shouldSignPackage: ${{ parameters.isOfficial }}
- signingAppRegistrationClientId: '${{ parameters.signingAppRegistrationClientId }}'
- signingAppRegistrationTenantId: '${{ parameters.signingAppRegistrationTenantId }}'
- signingAuthAkvName: '${{ parameters.signingAuthAkvName }}'
- signingAuthSignCertName: '${{ parameters.signingAuthSignCertName }}'
- signingEsrpClientId: '${{ parameters.signingEsrpClientId }}'
- signingEsrpConnectedServiceName: '${{ parameters.signingEsrpConnectedServiceName }}'
-
- dependencies:
- - artifactName: '${{ parameters.abstractionsArtifactsName }}'
- shortName: 'Abstractions'
- version: '${{ parameters.sqlClientPackageVersion }}'
- - artifactName: '${{ parameters.loggingArtifactsName }}'
- shortName: 'Logging'
- version: '${{ parameters.sqlClientPackageVersion }}'
- - artifactName: '${{ parameters.sqlServerArtifactsName }}'
- shortName: 'SqlServer'
- version: '${{ parameters.sqlServerPackageVersion }}'
- fileVersion: '${{ parameters.sqlClientFileVersion }}'
- packageFullName: 'Microsoft.Data.SqlClient'
- packageShortName: 'SqlClient'
- packageVersion: '${{ parameters.sqlClientPackageVersion }}'
-
- # Build Microsoft.Data.SqlClient.Extensions.Azure
- - template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
- parameters:
- apiScanDllPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.Extensions.Azure/dlls'
- apiScanPdbPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.Extensions.Azure/pdbs'
- shouldSignPackage: ${{ parameters.isOfficial }}
- signingAppRegistrationClientId: '${{ parameters.signingAppRegistrationClientId }}'
- signingAppRegistrationTenantId: '${{ parameters.signingAppRegistrationTenantId }}'
- signingAuthAkvName: '${{ parameters.signingAuthAkvName }}'
- signingAuthSignCertName: '${{ parameters.signingAuthSignCertName }}'
- signingEsrpClientId: '${{ parameters.signingEsrpClientId }}'
- signingEsrpConnectedServiceName: '${{ parameters.signingEsrpConnectedServiceName }}'
-
- dependencies:
- - artifactName: '${{ parameters.abstractionsArtifactsName }}'
- shortName: 'Abstractions'
- version: '${{ parameters.sqlClientPackageVersion }}'
- - artifactName: '${{ parameters.loggingArtifactsName }}'
- shortName: 'Logging'
- version: '${{ parameters.sqlClientPackageVersion }}'
- fileVersion: '${{ parameters.sqlClientFileVersion }}'
- packageFullName: 'Microsoft.Data.SqlClient.Extensions.Azure'
- packageShortName: 'Azure'
- packageVersion: '${{ parameters.sqlClientPackageVersion }}'
+ - stage: build_dependent
+ displayName: "Build Core Packages"
+ dependsOn:
+ - compute_versions
+ - build_abstractions
+
+ variables:
+ - name: sqlClientPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ - name: sqlClientFileVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
+ - name: sqlServerPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
+
+ jobs:
+ - template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
+ parameters:
+ apiScanDllPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient/dlls'
+ apiScanPdbPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient/pdbs'
+ shouldSignPackage: ${{ parameters.isOfficial }}
+ signingAppRegistrationClientId: '${{ parameters.signingAppRegistrationClientId }}'
+ signingAppRegistrationTenantId: '${{ parameters.signingAppRegistrationTenantId }}'
+ signingAuthAkvName: '${{ parameters.signingAuthAkvName }}'
+ signingAuthSignCertName: '${{ parameters.signingAuthSignCertName }}'
+ signingEsrpClientId: '${{ parameters.signingEsrpClientId }}'
+ signingEsrpConnectedServiceName: '${{ parameters.signingEsrpConnectedServiceName }}'
+
+ dependencies:
+ - artifactName: '${{ parameters.abstractionsArtifactsName }}'
+ shortName: 'Abstractions'
+ version: '${{ parameters.sqlClientPackageVersion }}'
+ - artifactName: '${{ parameters.loggingArtifactsName }}'
+ shortName: 'Logging'
+ version: '${{ parameters.sqlClientPackageVersion }}'
+ # When SqlServer is built this run, depend on the freshly-built artifact; otherwise
+ # depend on the most recently published SqlServer package (restored from NuGet, so no
+ # artifact download).
+ - ${{ if eq(parameters.buildSqlServer, true) }}:
+ - artifactName: '${{ parameters.sqlServerArtifactsName }}'
+ shortName: 'SqlServer'
+ version: '${{ parameters.sqlServerPackageVersion }}'
+ - ${{ else }}:
+ - shortName: 'SqlServer'
+ version: '${{ parameters.sqlServerPackageVersion }}'
+ fileVersion: '${{ parameters.sqlClientFileVersion }}'
+ packageFullName: 'Microsoft.Data.SqlClient'
+ packageShortName: 'SqlClient'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
+
+ # Build Microsoft.Data.SqlClient.Extensions.Azure
+ - template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
+ parameters:
+ apiScanDllPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.Extensions.Azure/dlls'
+ apiScanPdbPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.Extensions.Azure/pdbs'
+ shouldSignPackage: ${{ parameters.isOfficial }}
+ signingAppRegistrationClientId: '${{ parameters.signingAppRegistrationClientId }}'
+ signingAppRegistrationTenantId: '${{ parameters.signingAppRegistrationTenantId }}'
+ signingAuthAkvName: '${{ parameters.signingAuthAkvName }}'
+ signingAuthSignCertName: '${{ parameters.signingAuthSignCertName }}'
+ signingEsrpClientId: '${{ parameters.signingEsrpClientId }}'
+ signingEsrpConnectedServiceName: '${{ parameters.signingEsrpConnectedServiceName }}'
+
+ dependencies:
+ - artifactName: '${{ parameters.abstractionsArtifactsName }}'
+ shortName: 'Abstractions'
+ version: '${{ parameters.sqlClientPackageVersion }}'
+ - artifactName: '${{ parameters.loggingArtifactsName }}'
+ shortName: 'Logging'
+ version: '${{ parameters.sqlClientPackageVersion }}'
+ fileVersion: '${{ parameters.sqlClientFileVersion }}'
+ packageFullName: 'Microsoft.Data.SqlClient.Extensions.Azure'
+ packageShortName: 'Azure'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
# ====================================================================
# Stage 4: Add-on packages (depend on core packages)
# Akv Provider builds after SqlClient completes.
# ====================================================================
- - ${{ if and(eq(parameters.buildAkvProvider, true), eq(parameters.buildSqlClient, true)) }}:
- - stage: build_addons
- displayName: "Build Add-on Packages"
- dependsOn:
- - compute_versions
- - build_dependent
-
- variables:
- - name: sqlClientPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
- - name: sqlClientFileVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
- - name: sqlServerPackageVersion
- value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
-
- jobs:
- - template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
- parameters:
- apiScanDllPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/dlls'
- apiScanPdbPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/pdbs'
- shouldSignPackage: ${{ parameters.isOfficial }}
- signingAppRegistrationClientId: '${{ parameters.signingAppRegistrationClientId }}'
- signingAppRegistrationTenantId: '${{ parameters.signingAppRegistrationTenantId }}'
- signingAuthAkvName: '${{ parameters.signingAuthAkvName }}'
- signingAuthSignCertName: '${{ parameters.signingAuthSignCertName }}'
- signingEsrpClientId: '${{ parameters.signingEsrpClientId }}'
- signingEsrpConnectedServiceName: '${{ parameters.signingEsrpConnectedServiceName }}'
-
- dependencies:
- - artifactName: '${{ parameters.abstractionsArtifactsName }}'
- shortName: 'Abstractions'
- version: '${{ parameters.sqlClientPackageVersion }}'
- - artifactName: '${{ parameters.loggingArtifactsName }}'
- shortName: 'Logging'
- version: '${{ parameters.sqlClientPackageVersion }}'
- - artifactName: '${{ parameters.sqlClientArtifactsName }}'
- shortName: 'SqlClient'
- version: '${{ parameters.sqlClientPackageVersion }}'
- - artifactName: '${{ parameters.sqlServerArtifactsName }}'
- shortName: 'SqlServer'
- version: '${{ parameters.sqlServerPackageVersion }}'
- fileVersion: '${{ parameters.sqlClientFileVersion }}'
- packageFullName: 'Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider'
- packageShortName: 'AkvProvider'
- packageVersion: '${{ parameters.sqlClientPackageVersion }}'
+ - stage: build_addons
+ displayName: "Build Add-on Packages"
+ dependsOn:
+ - compute_versions
+ - build_dependent
+
+ variables:
+ - name: sqlClientPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientPackageVersion'] ]
+ - name: sqlClientFileVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlClientFileVersion'] ]
+ - name: sqlServerPackageVersion
+ value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
+
+ jobs:
+ - template: /eng/pipelines/onebranch/jobs/build-buildproj-job.yml@self
+ parameters:
+ apiScanDllPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/dlls'
+ apiScanPdbPath: '$(REPO_ROOT)/apiScan/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/pdbs'
+ shouldSignPackage: ${{ parameters.isOfficial }}
+ signingAppRegistrationClientId: '${{ parameters.signingAppRegistrationClientId }}'
+ signingAppRegistrationTenantId: '${{ parameters.signingAppRegistrationTenantId }}'
+ signingAuthAkvName: '${{ parameters.signingAuthAkvName }}'
+ signingAuthSignCertName: '${{ parameters.signingAuthSignCertName }}'
+ signingEsrpClientId: '${{ parameters.signingEsrpClientId }}'
+ signingEsrpConnectedServiceName: '${{ parameters.signingEsrpConnectedServiceName }}'
+
+ dependencies:
+ - artifactName: '${{ parameters.abstractionsArtifactsName }}'
+ shortName: 'Abstractions'
+ version: '${{ parameters.sqlClientPackageVersion }}'
+ - artifactName: '${{ parameters.loggingArtifactsName }}'
+ shortName: 'Logging'
+ version: '${{ parameters.sqlClientPackageVersion }}'
+ - artifactName: '${{ parameters.sqlClientArtifactsName }}'
+ shortName: 'SqlClient'
+ version: '${{ parameters.sqlClientPackageVersion }}'
+ # When SqlServer is built this run, depend on the freshly-built artifact; otherwise
+ # depend on the most recently published SqlServer package (restored from NuGet, so no
+ # artifact download).
+ - ${{ if eq(parameters.buildSqlServer, true) }}:
+ - artifactName: '${{ parameters.sqlServerArtifactsName }}'
+ shortName: 'SqlServer'
+ version: '${{ parameters.sqlServerPackageVersion }}'
+ - ${{ else }}:
+ - shortName: 'SqlServer'
+ version: '${{ parameters.sqlServerPackageVersion }}'
+ fileVersion: '${{ parameters.sqlClientFileVersion }}'
+ packageFullName: 'Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider'
+ packageShortName: 'AkvProvider'
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
# ====================================================================
# Validation
# @TODO: Update validate-signed-package-job to compute expected versions from
# Versions.props (same as build jobs) instead of receiving them as parameters.
# ====================================================================
- # - ${{ if eq(parameters.buildSqlClient, true) }}:
- # - stage: sqlclient_package_validation
- # displayName: "SqlClient Package Validation"
- # dependsOn: build_dependent
- # jobs:
- # - template: /eng/pipelines/onebranch/jobs/validate-signed-package-job.yml@self
- # parameters:
- # artifactName: '${{ parameters.sqlClientArtifactsName }}'
- # expectedFileVersion:
- # expectedPackageVersion:
- # isOfficial: ${{ parameters.isOfficial }}
+ # - stage: sqlclient_package_validation
+ # displayName: "SqlClient Package Validation"
+ # dependsOn: build_dependent
+ # jobs:
+ # - template: /eng/pipelines/onebranch/jobs/validate-signed-package-job.yml@self
+ # parameters:
+ # artifactName: '${{ parameters.sqlClientArtifactsName }}'
+ # expectedFileVersion:
+ # expectedPackageVersion:
+ # isOfficial: ${{ parameters.isOfficial }}
diff --git a/eng/pipelines/onebranch/stages/compute-versions-stage.yml b/eng/pipelines/onebranch/stages/compute-versions-stage.yml
index 9322ae637a..148ea9115b 100644
--- a/eng/pipelines/onebranch/stages/compute-versions-stage.yml
+++ b/eng/pipelines/onebranch/stages/compute-versions-stage.yml
@@ -14,16 +14,19 @@
# Design:
# - The SqlClient family (Logging, Abstractions, SqlClient, Azure, AKV Provider) shares a single
# version and always uses its "next" version (from Versions.props + BuildNumber).
-# - Microsoft.SqlServer.Server is versioned separately: it uses its "next" version when being
-# released, or its "published" (last shipped to NuGet) version when only built as a dependency.
+# - Microsoft.SqlServer.Server is versioned separately: it uses its "next" version when it is
+# being built this run, or its "published" (last shipped to NuGet) version when it is not built
+# (so the SqlClient family depends on the most recently published SqlServer package).
# - Versions are extracted via build.proj GetVersions* targets by parsing stdout.
#
# This stage MUST run before all build stages so they can consume computed versions.
parameters:
- # Whether Microsoft.SqlServer.Server is being released this run. This only affects the SqlServer
- # version selection (next vs published); the SqlClient family always uses its next version.
- - name: releaseSqlServerServer
+ # Whether Microsoft.SqlServer.Server is being built this run. This drives the SqlServer version
+ # selection (next when built, published when not); the SqlClient family always uses its next
+ # version. When SqlServer is not built, the SqlClient family depends on the published SqlServer
+ # package restored from NuGet.
+ - name: buildSqlServer
type: boolean
stages:
@@ -83,9 +86,10 @@ stages:
# The SqlClient family always uses its "next" version.
SQLCLIENT_VERSION="$(SqlClientNextVersion)"
- # Microsoft.SqlServer.Server uses its "next" version when being
- # released, or its "published" (last-shipped) version otherwise.
- if [ "${{ parameters.releaseSqlServerServer }}" = "True" ]; then
+ # Microsoft.SqlServer.Server uses its "next" version when it is built this run, or its
+ # "published" (last-shipped) version when it is not built — in which case the SqlClient
+ # family depends on the published SqlServer package restored from NuGet.
+ if [ "${{ parameters.buildSqlServer }}" = "True" ]; then
SQLSERVER_VERSION="$(SqlServerNextVersion)"
else
SQLSERVER_VERSION="$(SqlServerPublishedVersion)"
diff --git a/eng/pipelines/onebranch/stages/publish-symbols-stage.yml b/eng/pipelines/onebranch/stages/publish-symbols-stage.yml
index 63520728fd..9dd6a5757a 100644
--- a/eng/pipelines/onebranch/stages/publish-symbols-stage.yml
+++ b/eng/pipelines/onebranch/stages/publish-symbols-stage.yml
@@ -29,13 +29,9 @@ parameters:
# ── Build parameters (used to conditionally include per-package jobs) ───
- - name: buildSqlServerServer
- type: boolean
-
- - name: buildSqlClient
- type: boolean
-
- - name: buildAkvProvider
+ # Whether Microsoft.SqlServer.Server was built this run (its symbols are only published when it
+ # was built). The SqlClient family is always built, so its symbols are always published.
+ - name: buildSqlServer
type: boolean
# ── Package Parameters ─────────────────────────────────────────────────
@@ -89,23 +85,20 @@ parameters:
default: $(sqlServerPackageVersion)
stages:
- # Stage is emitted whenever publishSymbols is true. If no packages were
- # built, only the no-op placeholder job runs and the stage succeeds
- # immediately — keeping the dependency graph simple for downstream stages.
+ # Stage is emitted whenever publishSymbols is true. The SqlClient family is always built, so its
+ # symbols are always published; SqlServer symbols are published only when it was built.
- ${{ if eq(parameters.publishSymbols, true) }}:
- stage: publish_symbols
displayName: "Publish Symbols"
- # Depend on whichever build stages produced artifacts we need to publish.
+ # The SqlClient family always builds, so depend on all of its build stages. SqlServer is
+ # built within build_independent, which we always depend on as well.
dependsOn:
- compute_versions
- - ${{ if or(parameters.buildSqlServerServer, parameters.buildSqlClient, parameters.buildAkvProvider) }}:
- - build_independent
- - ${{ if parameters.buildSqlClient }}:
- - build_abstractions
- - build_dependent
- - ${{ if and(parameters.buildAkvProvider, parameters.buildSqlClient) }}:
- - build_addons
+ - build_independent
+ - build_abstractions
+ - build_dependent
+ - build_addons
variables:
- name: sqlClientPackageVersion
@@ -114,34 +107,21 @@ stages:
value: $[ stageDependencies.compute_versions.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]
jobs:
- # ── No-op placeholder ──────────────────────────────────────────
- # When no packages were built, this job keeps the stage valid
- # (ADO requires at least one job per stage) and succeeds instantly.
- - ${{ if not(or(parameters.buildSqlServerServer, parameters.buildSqlClient, parameters.buildAkvProvider)) }}:
- - job: publish_symbols_noop
- displayName: "No symbols to publish"
- pool:
- type: linux
- steps:
- - script: echo "No packages were built — nothing to publish."
- displayName: Skip
-
# ── Logging ────────────────────────────────────────────────────
- - ${{ if or(parameters.buildAkvProvider, parameters.buildSqlClient) }}:
- - template: /eng/pipelines/onebranch/jobs/publish-symbols-job.yml@self
- parameters:
- artifactName: '${{ parameters.loggingArtifactsName }}'
- packageFullName: Microsoft.Data.SqlClient.Internal.Logging
- packageShortName: Logging
- packageVersion: '${{ parameters.sqlClientPackageVersion }}'
- symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
- symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
- symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
- symbolsPublishTokenUri: '${{ parameters.symbolsPublishTokenUri }}'
- symbolsUploadAccount: '${{ parameters.symbolsUploadAccount }}'
+ - template: /eng/pipelines/onebranch/jobs/publish-symbols-job.yml@self
+ parameters:
+ artifactName: '${{ parameters.loggingArtifactsName }}'
+ packageFullName: Microsoft.Data.SqlClient.Internal.Logging
+ packageShortName: Logging
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
+ symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
+ symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
+ symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
+ symbolsPublishTokenUri: '${{ parameters.symbolsPublishTokenUri }}'
+ symbolsUploadAccount: '${{ parameters.symbolsUploadAccount }}'
# ── SqlServer.Server ───────────────────────────────────────────
- - ${{ if eq(parameters.buildSqlServerServer, true) }}:
+ - ${{ if eq(parameters.buildSqlServer, true) }}:
- template: /eng/pipelines/onebranch/jobs/publish-symbols-job.yml@self
parameters:
artifactName: '${{ parameters.sqlServerArtifactsName }}'
@@ -155,57 +135,53 @@ stages:
symbolsUploadAccount: '${{ parameters.symbolsUploadAccount }}'
# ── Abstractions ───────────────────────────────────────────────
- - ${{ if eq(parameters.buildSqlClient, true) }}:
- - template: /eng/pipelines/onebranch/jobs/publish-symbols-job.yml@self
- parameters:
- artifactName: '${{ parameters.abstractionsArtifactsName }}'
- packageFullName: Microsoft.Data.SqlClient.Extensions.Abstractions
- packageShortName: Abstractions
- packageVersion: '${{ parameters.sqlClientPackageVersion }}'
- symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
- symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
- symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
- symbolsPublishTokenUri: '${{ parameters.symbolsPublishTokenUri }}'
- symbolsUploadAccount: '${{ parameters.symbolsUploadAccount }}'
+ - template: /eng/pipelines/onebranch/jobs/publish-symbols-job.yml@self
+ parameters:
+ artifactName: '${{ parameters.abstractionsArtifactsName }}'
+ packageFullName: Microsoft.Data.SqlClient.Extensions.Abstractions
+ packageShortName: Abstractions
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
+ symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
+ symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
+ symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
+ symbolsPublishTokenUri: '${{ parameters.symbolsPublishTokenUri }}'
+ symbolsUploadAccount: '${{ parameters.symbolsUploadAccount }}'
# ── SqlClient ──────────────────────────────────────────────────
- - ${{ if eq(parameters.buildSqlClient, true) }}:
- - template: /eng/pipelines/onebranch/jobs/publish-symbols-job.yml@self
- parameters:
- artifactName: '${{ parameters.sqlClientArtifactsName }}'
- packageFullName: Microsoft.Data.SqlClient
- packageShortName: SqlClient
- packageVersion: '${{ parameters.sqlClientPackageVersion }}'
- symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
- symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
- symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
- symbolsPublishTokenUri: '${{ parameters.symbolsPublishTokenUri }}'
- symbolsUploadAccount: '${{ parameters.symbolsUploadAccount }}'
+ - template: /eng/pipelines/onebranch/jobs/publish-symbols-job.yml@self
+ parameters:
+ artifactName: '${{ parameters.sqlClientArtifactsName }}'
+ packageFullName: Microsoft.Data.SqlClient
+ packageShortName: SqlClient
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
+ symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
+ symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
+ symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
+ symbolsPublishTokenUri: '${{ parameters.symbolsPublishTokenUri }}'
+ symbolsUploadAccount: '${{ parameters.symbolsUploadAccount }}'
# ── Azure ──────────────────────────────────────────────────────
- - ${{ if eq(parameters.buildSqlClient, true) }}:
- - template: /eng/pipelines/onebranch/jobs/publish-symbols-job.yml@self
- parameters:
- artifactName: '${{ parameters.azureArtifactsName }}'
- packageFullName: Microsoft.Data.SqlClient.Extensions.Azure
- packageShortName: Azure
- packageVersion: '${{ parameters.sqlClientPackageVersion }}'
- symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
- symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
- symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
- symbolsPublishTokenUri: '${{ parameters.symbolsPublishTokenUri }}'
- symbolsUploadAccount: '${{ parameters.symbolsUploadAccount }}'
+ - template: /eng/pipelines/onebranch/jobs/publish-symbols-job.yml@self
+ parameters:
+ artifactName: '${{ parameters.azureArtifactsName }}'
+ packageFullName: Microsoft.Data.SqlClient.Extensions.Azure
+ packageShortName: Azure
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
+ symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
+ symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
+ symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
+ symbolsPublishTokenUri: '${{ parameters.symbolsPublishTokenUri }}'
+ symbolsUploadAccount: '${{ parameters.symbolsUploadAccount }}'
# ── AKV Provider ───────────────────────────────────────────────
- - ${{ if and(eq(parameters.buildAkvProvider, true), eq(parameters.buildSqlClient, true)) }}:
- - template: /eng/pipelines/onebranch/jobs/publish-symbols-job.yml@self
- parameters:
- artifactName: '${{ parameters.akvProviderArtifactsName }}'
- packageFullName: Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider
- packageShortName: AkvProvider
- packageVersion: '${{ parameters.sqlClientPackageVersion }}'
- symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
- symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
- symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
- symbolsPublishTokenUri: '${{ parameters.symbolsPublishTokenUri }}'
- symbolsUploadAccount: '${{ parameters.symbolsUploadAccount }}'
+ - template: /eng/pipelines/onebranch/jobs/publish-symbols-job.yml@self
+ parameters:
+ artifactName: '${{ parameters.akvProviderArtifactsName }}'
+ packageFullName: Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider
+ packageShortName: AkvProvider
+ packageVersion: '${{ parameters.sqlClientPackageVersion }}'
+ symbolsAzureSubscription: '${{ parameters.symbolsAzureSubscription }}'
+ symbolsPublishProjectName: '${{ parameters.symbolsPublishProjectName }}'
+ symbolsPublishServer: '${{ parameters.symbolsPublishServer }}'
+ symbolsPublishTokenUri: '${{ parameters.symbolsPublishTokenUri }}'
+ symbolsUploadAccount: '${{ parameters.symbolsUploadAccount }}'
diff --git a/eng/pipelines/onebranch/stages/release-stages.yml b/eng/pipelines/onebranch/stages/release-stages.yml
index 129190f1f9..b5dab3ebe1 100644
--- a/eng/pipelines/onebranch/stages/release-stages.yml
+++ b/eng/pipelines/onebranch/stages/release-stages.yml
@@ -82,7 +82,7 @@ parameters:
# ── Release parameters ─────────────────────────────────────────────────
# Whether to publish the Microsoft.SqlServer.Server package (versioned separately).
- - name: releaseSqlServerServer
+ - name: releaseSqlServer
type: boolean
# Whether to publish the SqlClient family. The family (Internal.Logging,
@@ -105,19 +105,18 @@ stages:
# true → NuGet Production feed.
# false → NuGet Test feed.
# ====================================================================
- - ${{ if or(parameters.releaseSqlServerServer, parameters.releaseSqlClient) }}:
+ - ${{ if or(parameters.releaseSqlServer, parameters.releaseSqlClient) }}:
- stage: release_${{ parameters.stageNameSuffix }}
${{ if eq(parameters.releaseToProduction, true) }}:
displayName: Release to NuGet Production
${{ else }}:
displayName: Release to NuGet Test
dependsOn:
- - ${{ if or(parameters.releaseSqlServerServer, parameters.releaseSqlClient) }}:
+ - ${{ if or(parameters.releaseSqlServer, parameters.releaseSqlClient) }}:
- build_independent
- ${{ if parameters.releaseSqlClient }}:
- build_abstractions
- build_dependent
- - sqlclient_package_validation
- build_addons
- ${{ if parameters.publishSymbols }}:
- publish_symbols
@@ -160,7 +159,7 @@ stages:
value: ' (NuGet Test)'
jobs:
- - ${{ if eq(parameters.releaseSqlServerServer, true) }}:
+ - ${{ if eq(parameters.releaseSqlServer, true) }}:
- template: /eng/pipelines/onebranch/jobs/publish-nuget-package-job.yml@self
parameters:
packageName: Microsoft.SqlServer.Server