Skip to content

Consolidate package version specification and computation#4336

Draft
paulmedynski wants to merge 12 commits into
mainfrom
dev/paul/canonical-versions
Draft

Consolidate package version specification and computation#4336
paulmedynski wants to merge 12 commits into
mainfrom
dev/paul/canonical-versions

Conversation

@paulmedynski

@paulmedynski paulmedynski commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Goals

Make package version specification and computation simple, centralized, and unambiguous:

  1. One source of truth per version family. Each of the three version values (PackageVersion, FileVersion, AssemblyVersion) is specified/computed in exactly one place — once for the entire SqlClient family and once for Microsoft.SqlServer.Server.
  2. Treat the SqlClient family as a single shippable unit. Microsoft.Data.SqlClient, Internal.Logging, Extensions.Abstractions, Extensions.Azure, and the AlwaysEncrypted AzureKeyVaultProvider always share one version (package, file, and assembly) and release together. Microsoft.SqlServer.Server is versioned and released independently.
  3. Compute versions centrally in pipelines. Official (OneBranch), CI, and PR pipelines all extract versions up front from a single compute-versions stage and feed them downstream, instead of hardcoding or relying on undefined fallbacks.
  4. Remove version-naming ambiguity. Eliminate the confusing custom AssemblyFileVersion property (was it the file version or the assembly version?) and use only the unambiguous SDK terms FileVersion (Major.Minor.Patch.Revision) and AssemblyVersion (Major.0.0.0).

Version source of truth

After this PR, versions are computed in just two files:

File Computes
src/Microsoft.Data.SqlClient/Versions.props SqlClientPackageVersion, SqlClientFileVersion, SqlClientAssemblyVersion — shared by the whole family
src/Microsoft.SqlServer.Server/Versions.props SqlServerPackageVersion, SqlServerFileVersion, SqlServerAssemblyVersion

src/Directory.Build.props imports the SqlClient Versions.props for every project, so the family version is globally available; all family .csproj files consume $(SqlClient{Package,File,Assembly}Version). Directory.Packages.props pins all family packages to the shared SqlClientPackageVersion range and the SqlServer package to its own range. The four per-package family Versions.props files have been deleted.

Each Versions.props uses a 3-tier priority to resolve the version:

  1. Explicit *PackageVersion parameter (CI/OneBranch pass this) — supersedes all.
  2. BuildNumber (+ optional BuildSuffix) → prerelease tag; BuildNumber is the FileVersion revision component.
  3. Fallback -dev suffix for local developer builds.

AssemblyVersion is always derived as Major.0.0.0 for strong-name backward compatibility.

build.proj

  • Collapsed the per-package GetVersions* targets to just GetVersionsSqlClient and GetVersionsSqlServer, which emit PackageVersion:/FileVersion: (and PublishedVersion: for SqlServer) to stdout for pipeline capture.
  • A single PackageVersionSqlClient parameter sets the version for the entire family; the historical per-package version arguments are retained as aliases of PackageVersionSqlClientArgument for backward compatibility. PackageVersionSqlServer remains separate.

OneBranch pipeline (official)

  • New onebranch/stages/compute-versions-stage.yml resolves one SqlClient family version + one SqlServer version up front (single releaseSqlServerServer toggle for the separately-versioned package).
  • build-stages.yml, publish-symbols-stage.yml, and the build/pack jobs/steps consume sqlClient{Package,File}Version for all family packages and sqlServer* for SqlServer.
  • release-stages.yml: five family release toggles collapsed to one releaseSqlClient (the family releases together); releaseSqlServerServer kept separate.
  • package-variables.yml: removed hardcoded version values.

CI/PR pipeline

  • New stages/compute-versions-ci-stage.yml runs the two GetVersions* targets with a BuildSuffix and emits the family + SqlServer versions.
  • All family build/test stages add compute_versions_ci to dependsOn and map their version variables from the shared SqlClient* outputs; pack jobs pass SqlClientPackageVersion.
  • CI version parameters consolidated onto a single packageVersion parameter across the reusable templates (Microsoft.SqlServer.Server keeps sqlServerPackageVersion); the core stops threading per-package version parameters down.
  • PR pipelines pass buildSuffix: pr, CI pipelines pass buildSuffix: ci.

Version-naming cleanup

  • Removed the ambiguous custom AssemblyFileVersion property from tools/targets/GenerateThisAssemblyCs.targets (it always fell back to FileVersion).
  • Renamed the generated ThisAssembly constants: InformationalVersionFileVersion, NuGetPackageVersionPackageVersion; updated all consumers (AdapterUtil, SqlDiagnosticListener, UserAgent, Azure ActiveDirectoryAuthenticationProvider, UserAgentTests, and the reflection-based stress runner).
  • Replaced AssemblyFileVersion with FileVersion in the four CI/PR pipeline BuildNumber comments.

Documentation

  • Renamed package-versions.instructions.md3rd-party-package-versions.instructions.md (scoped to external deps).
  • Added sqlclient-package-versions.instructions.md describing family/SqlServer version resolution across all scenarios.
  • Updated BUILDGUIDE.md pack/build parameter tables and package-mode examples to use the single family parameter.

Resulting version differentiation

Pipeline Suffix Example Version
Developer (local) -dev 7.1.0-preview1-dev
PR validation -pr 7.1.0-preview1-pr20250602.1
CI (merge trigger) -ci 7.1.0-preview1-ci20250602.1
OneBranch official (none) 7.1.0-preview1

Verification

  • OneBranch official pipeline produces correct family + SqlServer versions
  • CI pipeline produces -ci suffixed versions
  • PR pipeline produces -pr suffixed versions
  • Local dotnet build still produces -dev versions
  • Package-mode dependency versions resolve correctly (family at the shared range, SqlServer at its own)
  • Family projects resolve to the shared SqlClient version in dev/CI and explicit-override modes; SqlServer stays independent

Copilot AI review requested due to automatic review settings June 3, 2026 13:56
@github-project-automation github-project-automation Bot moved this to To triage in SqlClient Board Jun 3, 2026
@paulmedynski paulmedynski added the Area\Engineering Use this for issues that are targeted for changes in the 'eng' folder or build systems. label Jun 3, 2026
@paulmedynski paulmedynski moved this from To triage to In progress in SqlClient Board Jun 3, 2026
@paulmedynski paulmedynski added this to the 7.1.0-preview2 milestone Jun 3, 2026
@paulmedynski paulmedynski changed the title Add compute-versions stage for CI/PR pipelines Add compute-versions stage for CI/PR/Official pipelines Jun 3, 2026
@paulmedynski paulmedynski changed the title Add compute-versions stage for CI/PR/Official pipelines Consolidate package version specification and computation Jun 3, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a centralized “compute versions” stage for CI/PR pipelines (mirroring the OneBranch approach) and refactors version sources so pipelines can compute/package versions once and flow them to downstream stages/jobs.

Changes:

  • Added compute_versions_ci stage to extract package/file versions up-front via new GetVersions* targets in build.proj.
  • Refactored each package’s Versions.props to introduce *NextVersion and *PublishedVersion properties.
  • Began wiring CI/PR and OneBranch pipelines/templates to consume computed versions (but the current wiring is incomplete and will break pipeline execution).

Reviewed changes

Copilot reviewed 33 out of 33 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
src/Microsoft.SqlServer.Server/Versions.props Adds Published/Next version properties; updates computed package/file version logic to use SqlServerNextVersion.
src/Microsoft.Data.SqlClient/Versions.props Adds Published/Next version properties; updates computed package/file version logic to use SqlClientNextVersion.
src/Microsoft.Data.SqlClient.Internal/Logging/src/Versions.props Adds Published/Next version properties; updates computed package/file version logic to use LoggingNextVersion.
src/Microsoft.Data.SqlClient.Extensions/Azure/src/Versions.props Adds Published/Next version properties; updates computed package/file version logic to use AzureNextVersion.
src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Versions.props Adds Published/Next version properties; updates computed package/file version logic to use AbstractionsNextVersion.
src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/src/Versions.props Adds Published/Next version properties; updates computed package/file version logic to use AkvProviderNextVersion.
eng/pipelines/stages/compute-versions-ci-stage.yml New CI/PR stage that runs GetVersions* targets and exports versions as stage/job outputs.
eng/pipelines/stages/build-sqlserver-package-ci-stage.yml Adds dependency on compute stage and maps its outputs to stage variables (but needs additional wiring updates).
eng/pipelines/stages/build-sqlclient-package-ci-stage.yml Adds dependency on compute stage and maps its outputs to stage variables; attempts to use those versions downstream.
eng/pipelines/stages/build-logging-package-ci-stage.yml Adds dependency on compute stage and maps its outputs to stage variables (but needs downstream job wiring updates).
eng/pipelines/stages/build-azure-package-ci-stage.yml Adds dependency on compute stage and maps its outputs to stage variables (but downstream job calls still use template parameters).
eng/pipelines/stages/build-abstractions-package-ci-stage.yml Adds dependency on compute stage and maps its outputs to stage variables (but downstream job calls still use template parameters).
eng/pipelines/sqlclient-pr-project-ref-pipeline.yml Passes buildSuffix: 'pr' into the CI core template.
eng/pipelines/sqlclient-pr-package-ref-pipeline.yml Passes buildSuffix: 'pr' into the CI core template.
eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml Passes buildSuffix: 'ci' into the CI core template.
eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml Passes buildSuffix: 'ci' into the CI core template.
eng/pipelines/dotnet-sqlclient-ci-core.yml Adds buildSuffix parameter and injects the compute-versions stage before other stages.
eng/pipelines/libraries/ci-build-variables.yml Removes previously hardcoded per-package version variables in favor of computed versions.
build.proj Adds GetVersions* targets that emit labeled version lines for pipeline parsing.
eng/pipelines/onebranch/variables/package-variables.yml Removes OneBranch per-package version variables; keeps artifact naming variables.
eng/pipelines/onebranch/stages/compute-versions-stage.yml New OneBranch stage to compute “next/published/effective” versions and emit output variables.
eng/pipelines/onebranch/stages/build-stages.yml Refactors build template to require pre-computed versions; comments out SqlClient package validation stage.
eng/pipelines/onebranch/stages/publish-symbols-stage.yml Refactors parameters to require pre-computed package versions for symbol publishing.
eng/pipelines/onebranch/stages/release-stages.yml Removes explicit per-version packagePath in favor of default/wildcarded publish behavior.
eng/pipelines/onebranch/jobs/build-buildproj-job.yml Threads “pre-computed version” concept through build/pack steps; tweaks APIScan versionNumber handling.
eng/pipelines/onebranch/jobs/publish-symbols-job.yml Refactors job variables to list form; clarifies version requirement.
eng/pipelines/onebranch/steps/roslyn-analyzers-buildproj-step.yml Updates comments to reflect version must be pre-computed.
eng/pipelines/onebranch/steps/pack-buildproj-step.yml Updates comments to reflect version must be pre-computed.
eng/pipelines/onebranch/steps/build-buildproj-step.yml Updates comments to reflect version must be pre-computed.
eng/pipelines/onebranch/sqlclient-official.yml Removes passing version vars to templates (but does not yet provide new required version parameters).
eng/pipelines/onebranch/sqlclient-non-official.yml Removes passing version vars to templates (but does not yet provide new required version parameters).
.github/instructions/sqlclient-package-versions.instructions.md New documentation describing version resolution flow (examples need to match actual pipeline build-number format).
.github/instructions/3rd-party-package-versions.instructions.md Renames/re-scopes instructions to explicitly cover third-party dependency versions.

Comment on lines +81 to +85
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'] ]
Comment on lines +77 to +80
variables:
- name: sqlServerPackageVersion
value: $[ stageDependencies.compute_versions_ci.compute_versions_job.outputs['versions.SqlServerPackageVersion'] ]

Comment on lines +100 to +104
- 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
Comment on lines +170 to +174
# 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'] ]
Comment thread eng/pipelines/onebranch/sqlclient-official.yml
Comment thread .github/instructions/sqlclient-package-versions.instructions.md
Comment thread .github/instructions/sqlclient-package-versions.instructions.md Outdated
Comment on lines +82 to +86
- 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'] ]

Comment on lines +131 to +135
# 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 }}
Comment on lines +7 to 11
# 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:
…ions

- 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
- 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
- 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
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.
Copilot AI review requested due to automatic review settings June 22, 2026 16:40
@paulmedynski paulmedynski force-pushed the dev/paul/canonical-versions branch from 756dc7a to e63eafa Compare June 22, 2026 16:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 34 out of 34 changed files in this pull request and generated 3 comments.

Comment on lines +36 to +39
steps:
# Extract all versions (package, file) per project.
# Each GetVersions* target emits labeled stdout lines.
- script: |
Comment on lines +50 to +55
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"
Comment on lines +78 to +85
local pkg pub file
pkg=$(echo "$output" | sed -n 's/^ *PackageVersion: //p')
pub=$(echo "$output" | sed -n 's/^ *PublishedVersion: //p')
file=$(echo "$output" | sed -n 's/^ *FileVersion: //p')
echo " ${label}: pkg=$pkg pub=$pub file=$file"
echo "##vso[task.setvariable variable=${label}NextVersion]$pkg"
echo "##vso[task.setvariable variable=${label}PublishedVersion]$pub"
echo "##vso[task.setvariable variable=${label}FileVersion]$file"
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.
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.
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.
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.
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.
…t 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.
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).
…Server

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.
Copilot AI review requested due to automatic review settings June 23, 2026 20:31

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 61 out of 61 changed files in this pull request and generated 11 comments.

Comment thread Directory.Packages.props
Comment on lines 26 to 28
<ImportGroup Condition="'$(ReferenceType)' == 'Package'">
<Import Project="src/Microsoft.Data.SqlClient/Versions.props" />
<Import Project="src/Microsoft.SqlServer.Server/Versions.props" />
<Import Project="src/Microsoft.Data.SqlClient.Internal/Logging/src/Versions.props" />
<Import Project="src/Microsoft.Data.SqlClient.Extensions/Abstractions/src/Versions.props" />
<Import Project="src/Microsoft.Data.SqlClient.Extensions/Azure/src/Versions.props" />
<Import Project="src/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider/src/Versions.props" />
</ImportGroup>
Comment on lines +37 to +42
steps:
# Extract package + file versions for the SqlClient family
# (GetVersionsSqlClient) and Microsoft.SqlServer.Server (GetVersionsSqlServer).
# Each target emits labeled stdout lines.
- script: |
set -euo pipefail
Comment on lines +49 to +59
steps:
- pwsh: |
New-Item -Path "$(ob_outputDirectory)" -ItemType Directory -Force
"**" | Out-File -FilePath "$(ob_outputDirectory)/.artifactignore" -Encoding ascii
displayName: 'Suppress artifact publishing'

# 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
Comment on lines +83 to +87
- script: |
echo "Resolving effective versions..."

# The SqlClient family always uses its "next" version.
SQLCLIENT_VERSION="$(SqlClientNextVersion)"
Comment on lines +62 to 66
# Assembly file version for APIScan (e.g. 1.0.0.12345). Pre-computed by compute-versions stage.
- name: fileVersion
type: string
default: ''

Comment on lines 172 to 178
- template: /eng/pipelines/onebranch/jobs/publish-nuget-package-job.yml@self
parameters:
packageName: Microsoft.Data.SqlClient.Internal.Logging
artifactName: '${{ parameters.loggingArtifactsName }}'
packagePath: 'Package-Release/Microsoft.Data.SqlClient.Internal.Logging.${{ parameters.loggingPackageVersion }}.nupkg'
nugetServiceConnection: ${{ variables.nugetServiceConnection }}
isProduction: ${{ parameters.isOfficial }}
displaySuffix: ${{ variables.nugetTargetSuffix }}
Comment on lines 181 to 187
- template: /eng/pipelines/onebranch/jobs/publish-nuget-package-job.yml@self
parameters:
packageName: Microsoft.Data.SqlClient.Extensions.Abstractions
artifactName: '${{ parameters.abstractionsArtifactsName }}'
packagePath: 'Package-Release/Microsoft.Data.SqlClient.Extensions.Abstractions.${{ parameters.abstractionsPackageVersion }}.nupkg'
nugetServiceConnection: ${{ variables.nugetServiceConnection }}
isProduction: ${{ parameters.isOfficial }}
displaySuffix: ${{ variables.nugetTargetSuffix }}
Comment on lines 190 to 196
- template: /eng/pipelines/onebranch/jobs/publish-nuget-package-job.yml@self
parameters:
packageName: Microsoft.Data.SqlClient
artifactName: '${{ parameters.sqlClientArtifactsName }}'
packagePath: 'Package-Release/Microsoft.Data.SqlClient.${{ parameters.sqlClientPackageVersion }}.nupkg'
nugetServiceConnection: ${{ variables.nugetServiceConnection }}
isProduction: ${{ parameters.isOfficial }}
displaySuffix: ${{ variables.nugetTargetSuffix }}
Comment on lines 199 to 205
- template: /eng/pipelines/onebranch/jobs/publish-nuget-package-job.yml@self
parameters:
packageName: Microsoft.Data.SqlClient.Extensions.Azure
artifactName: '${{ parameters.azureArtifactsName }}'
packagePath: 'Package-Release/Microsoft.Data.SqlClient.Extensions.Azure.${{ parameters.azurePackageVersion }}.nupkg'
nugetServiceConnection: ${{ variables.nugetServiceConnection }}
isProduction: ${{ parameters.isOfficial }}
displaySuffix: ${{ variables.nugetTargetSuffix }}
Comment on lines 208 to 214
- template: /eng/pipelines/onebranch/jobs/publish-nuget-package-job.yml@self
parameters:
packageName: Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider
artifactName: '${{ parameters.akvProviderArtifactsName }}'
packagePath: 'Package-Release/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider.${{ parameters.akvProviderPackageVersion }}.nupkg'
nugetServiceConnection: ${{ variables.nugetServiceConnection }}
isProduction: ${{ parameters.isOfficial }}
displaySuffix: ${{ variables.nugetTargetSuffix }}
@codecov

codecov Bot commented Jun 24, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 40.00000% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 63.47%. Comparing base (c0f341a) to head (4bdf4dd).
⚠️ Report is 5 commits behind head on main.

Files with missing lines Patch % Lines
...ata/SqlClient/Diagnostics/SqlDiagnosticListener.cs 0.00% 3 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #4336      +/-   ##
==========================================
- Coverage   65.45%   63.47%   -1.98%     
==========================================
  Files         285      280       -5     
  Lines       43373    66344   +22971     
==========================================
+ Hits        28388    42113   +13725     
- Misses      14985    24231    +9246     
Flag Coverage Δ
CI-SqlClient ?
PR-SqlClient-Project 63.47% <40.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area\Engineering Use this for issues that are targeted for changes in the 'eng' folder or build systems.

Projects

Status: In progress

Development

Successfully merging this pull request may close these issues.

2 participants