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