diff --git a/build.proj b/build.proj
index 45365168c1..2a9e1f9806 100644
--- a/build.proj
+++ b/build.proj
@@ -37,7 +37,6 @@
$(CommonProperties);AssemblyFileVersion=$(AssemblyFileVersion);TargetsWindows=$(TargetsWindows);TargetsUnix=$(TargetsUnix);
$(ProjectProperties);BuildForRelease=false;TargetNetCoreVersion=$(TargetNetCoreVersion);TargetNetFxVersion=$(TargetNetFxVersion)
TestResults
-
true
- --collect "Code coverage"
+ $(TestsPath)/tools/Microsoft.Data.SqlClient.TestUtilities/CodeCoverage.runsettings
+ --collect "Code coverage" --settings "$(CodeCoverageRunSettings)"
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 69f87a7fa9..aa68e74b0e 100644
--- a/eng/pipelines/common/templates/jobs/ci-build-nugets-job.yml
+++ b/eng/pipelines/common/templates/jobs/ci-build-nugets-job.yml
@@ -112,7 +112,7 @@ jobs:
parameters:
buildConfiguration: ${{ parameters.buildConfiguration }}
displayName: 'Create MDS NuGet Package'
- generateSymbolsPackage: false
+ generateSymbolsPackage: true
nuspecPath: 'tools/specs/Microsoft.Data.SqlClient.nuspec'
outputDirectory: $(packagePath)
packageVersion: ${{ parameters.mdsPackageVersion }}
@@ -132,7 +132,7 @@ jobs:
parameters:
buildConfiguration: ${{ parameters.buildConfiguration }}
displayName: 'Create AKV NuGet Package'
- generateSymbolsPackage: false
+ generateSymbolsPackage: true
installNuget: false
nuspecPath: 'tools/specs/add-ons/Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider.nuspec'
outputDirectory: $(packagePath)
diff --git a/eng/pipelines/common/templates/jobs/ci-code-coverage-job.yml b/eng/pipelines/common/templates/jobs/ci-code-coverage-job.yml
index 083cf3e893..39ab0ed379 100644
--- a/eng/pipelines/common/templates/jobs/ci-code-coverage-job.yml
+++ b/eng/pipelines/common/templates/jobs/ci-code-coverage-job.yml
@@ -4,59 +4,43 @@
# See the LICENSE file in the project root for more information. #
#################################################################################
-# This job processes code coverage reports generated during test runs,
-# merges them, generates code coverage reports, publishes them to the
-# pipeline, and uploads them to CodeCov.
+# This job processes code coverage reports generated during test runs, merges
+# them, generates code coverage reports, publishes them to the pipeline, and
+# uploads them to CodeCov.
parameters:
-
+
# True to include debug steps.
- name: debug
type: boolean
default: false
- # The pool image to use.
- - name: image
- type: string
-
- # The agent pool name.
- - name: pool
- type: string
-
- # Array of target frameworks to process code coverage for:
- #
- # e.g. [net462, net8.0, net9.0]
- #
- - name: targetFrameworks
- type: object
-
# True to upload code coverage results to CodeCov.
- name: upload
type: boolean
jobs:
- - job: CodeCoverage
+ - job: publish_code_coverage
displayName: Publish Code Coverage
pool:
- name: ${{ parameters.pool }}
- ${{ if eq(parameters.pool, 'Azure Pipelines') }}:
- vmImage: ${{ parameters.image }}
- ${{ else }}:
- demands:
- - imageOverride -equals ${{ parameters.image }}
+ name: Azure Pipelines
+ vmImage: ubuntu-latest
variables:
- netFxDir: $(Build.SourcesDirectory)\coverageNetFx
- netCoreDir: $(Build.SourcesDirectory)\coverageNetCore
+ # Use a temp directory that is cleaned up after each job runs. This helps
+ # avoid disk space issues on pooled agents that may run many jobs before
+ # being retired.
+ - name: workingDir
+ value: $(Agent.TempDirectory)/coverage
steps:
- ${{if eq(parameters.debug, true)}}:
- - pwsh: Get-Volume
+ - script: df -h
displayName: '[Debug] Show Disk Usage'
- - pwsh: 'Get-ChildItem env: | Sort-Object Name'
+ - script: env | sort
displayName: '[Debug] List Environment Variables'
# Install the .NET SDK.
@@ -65,150 +49,103 @@ jobs:
debug: ${{ parameters.debug }}
# Install additional dotnet tools.
- - pwsh: |
- dotnet tool install --global dotnet-coverage
- dotnet tool install --global dotnet-reportgenerator-globaltool
- displayName: Install dotnet tools
-
- - pwsh: |
- Write-Host "Removing leftover coverage files from previous runs..."
- Remove-Item $(netFxDir) -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item $(netCoreDir) -Recurse -Force -ErrorAction SilentlyContinue
-
- Write-Host "Removing leftover merged XML files from previous runs..."
- Remove-Item coverageNetFxXml -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item coverageNetCoreXml -Recurse -Force -ErrorAction SilentlyContinue
-
- Write-Host "Removing leftover reports from previous runs..."
- Remove-Item coveragereportNetFx -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item coveragereportNetCore -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item coveragereportAddOns -Recurse -Force -ErrorAction SilentlyContinue
-
- - ${{ each targetFramework in parameters.targetFrameworks }}:
- - task: DownloadPipelineArtifact@2
- displayName: 'Download Coverage Reports [${{ targetFramework }}]'
- inputs:
- itemPattern: '**\${{ targetFramework }}*'
- ${{ if startsWith(targetFramework, 'net4') }}:
- targetPath: $(netFxDir)
- ${{ else }}:
- targetPath: $(netCoreDir)
+ #
+ # We must work around a bug in the dotnet CLI that prevents tool installs
+ # when multiple project/solution files are present in the working
+ # directory:
+ #
+ # https://github.com/dotnet/sdk/issues/9623
+ #
+ # Our repo root (the default working directory for tasks) contains more
+ # than one project file. However, we must also obey the NuGet.config in
+ # the repo root to ensure that tools are installed from the correct feeds.
+ # We accomplish this by copying the NuGet.config to a temp dir and then
+ # instructing the dotnet CLI tasks to run from that directory. They will
+ # still install the tools globally for subsequent tasks to use.
+ #
+ - script: cp "$(Build.SourcesDirectory)/NuGet.config" "$(Agent.TempDirectory)/"
+ displayName: Copy NuGet.config for tool installs
+
+ - task: DotNetCoreCLI@2
+ displayName: Install dotnet-coverage tool
+ inputs:
+ command: custom
+ custom: tool
+ workingDirectory: $(Agent.TempDirectory)
+ arguments: install --global dotnet-coverage --version 18.3.2
- ${{if eq(parameters.debug, true)}}:
- - pwsh: Get-Volume
+ - script: df -h
displayName: '[Debug] Show Disk Usage'
- - pwsh: Get-ChildItem $(netFxDir) -Recurse -File -Filter *.coverage
- displayName: '[Debug] List coverageNetFx files'
-
- - pwsh: Get-ChildItem $(netCoreDir) -Recurse -File -Filter *.coverage
- displayName: '[Debug] List coverageNetCore files'
-
- - pwsh: |
- function MergeFiles {
- param(
- [string]$InputDirectoryPath,
- [string]$OutputDirectoryName
- )
-
- $files = Get-ChildItem $InputDirectoryPath -Recurse -File -Filter *.coverage
-
- # echo $files
- mkdir $OutputDirectoryName
- $counter=0
-
- $toProcess = @()
-
- foreach ($file in $files) {
- $toProcess += @{
- File = $file.FullName
- OutputFile = "$OutputDirectoryName\$counter.coveragexml"
- }
-
- $counter++
- }
-
- $jobs = @()
- foreach ($file in $toProcess){
- $jobs += Start-ThreadJob -ScriptBlock {
- $params = $using:file
- & dotnet-coverage merge $($params.File) --output $($params.OutputFile) --output-format xml
- }
- }
-
- Write-Host "Merging started..."
- Wait-Job -Job $jobs
-
- foreach ($job in $jobs) {
- Receive-Job -Job $job -Wait -AutoRemoveJob
- }
- }
-
- MergeFiles -InputDirectoryPath "$(netFxDir)" -OutputDirectoryName "coverageNetFxXml"
- MergeFiles -InputDirectoryPath "$(netCoreDir)" -OutputDirectoryName "coverageNetCoreXml"
-
- Write-Host "Removing original coverage files..."
- Remove-Item $(netFxDir) -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item $(netCoreDir) -Recurse -Force -ErrorAction SilentlyContinue
- displayName: Convert coverage files to xml
+ # Download all of the coverage reports from the test jobs.
+ #
+ # These artifacts contain the .coverage files generated during test runs,
+ # along with a bunch of other files that we ignore. We only download the
+ # .coverage files.
+ #
+ - task: DownloadPipelineArtifact@2
+ displayName: Download Coverage Reports
+ inputs:
+ # All of our coverage report artifact names start with 'net'.
+ itemPattern: '**/net*/**/*.coverage'
+ targetPath: $(workingDir)/originals
- ${{if eq(parameters.debug, true)}}:
- - pwsh: Get-Volume
+ - script: df -h
displayName: '[Debug] Show Disk Usage'
- - pwsh: |
- dir coverageNetFxXml\
- dir coverageNetCoreXml\
- displayName: '[Debug] List converted files'
-
- - pwsh: |
- $jobs = @()
- $jobs += Start-ThreadJob -ScriptBlock {
- & reportgenerator "-reports:coverageNetFxXml\*.coveragexml" "-targetdir:coveragereportNetFx" "-reporttypes:Cobertura;" "-assemblyfilters:+microsoft.data.sqlclient.dll" "-sourcedirs:$(Build.SourcesDirectory)\src\Microsoft.Data.SqlClient\netfx\src;$(Build.SourcesDirectory)\src\Microsoft.Data.SqlClient\src" "-classfilters:+Microsoft.Data.*"
- }
+ - script: ls -alFR "$(workingDir)/originals"
+ displayName: '[Debug] List coverage files'
- $jobs += Start-ThreadJob -ScriptBlock {
- & reportgenerator "-reports:coverageNetCoreXml\*.coveragexml" "-targetdir:coveragereportNetCore" "-reporttypes:Cobertura;" "-assemblyfilters:+microsoft.data.sqlclient.dll" "-sourcedirs:$(Build.SourcesDirectory)\src\Microsoft.Data.SqlClient\netcore\src;$(Build.SourcesDirectory)\src\Microsoft.Data.SqlClient\src" "-classfilters:+Microsoft.Data.*"
- }
-
- $jobs += Start-ThreadJob -ScriptBlock {
- & reportgenerator "-reports:coverageNetCoreXml\*.coveragexml" "-targetdir:coveragereportAddOns" "-reporttypes:Cobertura;" "-assemblyfilters:+microsoft.data.sqlclient.alwaysencrypted.azurekeyvaultprovider.dll" "-sourcedirs:$(Build.SourcesDirectory)\src\Microsoft.Data.SqlClient\add-ons\AzureKeyVaultProvider" "-classfilters:+Microsoft.Data.*"
- }
-
- Write-Host "Running ReportGenerator..."
- Wait-Job -Job $jobs
-
- foreach ($job in $jobs) {
- Receive-Job -Job $job -Wait -AutoRemoveJob
- }
-
- Write-Host "Removing merged XML files..."
- Remove-Item coverageNetFxXml -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item coverageNetCoreXml -Recurse -Force -ErrorAction SilentlyContinue
- displayName: Run ReportGenerator
+ # Merge them all into a single Cobertura XML file.
+ - script: >-
+ dotnet-coverage merge "$(workingDir)/originals/**/*.coverage"
+ --output "$(workingDir)/merge/Cobertura.xml"
+ --output-format cobertura
+ --log-file "$(workingDir)/merge/merge.log"
+ --log-level Verbose
+ displayName: Merge coverage files to Cobertura XML
- ${{if eq(parameters.debug, true)}}:
- - pwsh: Get-Volume
+ - script: df -h
displayName: '[Debug] Show Disk Usage'
+ # Publish the Cobertura XML coverage file as a pipeline artifact for
+ # debugging purposes.
+ - task: PublishPipelineArtifact@1
+ displayName: Publish Cobertura XML Artifact
+ inputs:
+ targetPath: $(workingDir)/merge
+ artifact: Cobertura Merge Results
+
+ # Publish the Cobertura reports to the pipeline to be viewed in the Azure
+ # DevOps pipeline run UI.
- task: PublishCodeCoverageResults@2
displayName: Publish code coverage results
inputs:
- summaryFileLocation: '*\Cobertura.xml'
+ summaryFileLocation: $(workingDir)/merge/Cobertura.xml
+ # Publish the Cobertura reports to CodeCov, if desired.
- ${{if eq(parameters.upload, true)}}:
- - pwsh: |
- #download Codecov CLI
- $ProgressPreference = 'SilentlyContinue'
- Invoke-WebRequest -Uri https://cli.codecov.io/latest/windows/codecov.exe -Outfile codecov.exe
-
- ./codecov --verbose upload-process --fail-on-error -t $(CODECOV_TOKEN) -f "coveragereportNetFx\Cobertura.xml" -F netfx
- ./codecov --verbose upload-process --fail-on-error -t $(CODECOV_TOKEN) -f "coveragereportNetCore\Cobertura.xml" -F netcore
- ./codecov --verbose upload-process --fail-on-error -t $(CODECOV_TOKEN) -f "coveragereportAddOns\Cobertura.xml" -F addons
+ # Download the CodeCov CLI
+ - script: |
+ curl -o "$(workingDir)/codecov" https://cli.codecov.io/latest/linux/codecov
+ chmod +x "$(workingDir)/codecov"
+ displayName: Download CodeCov CLI
+
+ # Upload the report.
+ #
+ # We use the pipeline name as the "flag" to help distinguish reports
+ # uploaded from different pipelines.
+ #
+ - script: >-
+ $(workingDir)/codecov
+ --verbose
+ upload-process
+ --fail-on-error
+ -t $(CODECOV_TOKEN)
+ --disable-search
+ -f "$(workingDir)/merge/Cobertura.xml"
+ -F $(Build.DefinitionName)
displayName: Upload to CodeCov
-
- - pwsh: |
- Write-Host "Removing reports..."
- Remove-Item coveragereportNetFx -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item coveragereportNetCore -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item coveragereportAddOns -Recurse -Force -ErrorAction SilentlyContinue
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 1065275c49..059fc9f7d4 100644
--- a/eng/pipelines/common/templates/jobs/ci-run-tests-job.yml
+++ b/eng/pipelines/common/templates/jobs/ci-run-tests-job.yml
@@ -70,10 +70,6 @@ parameters:
type: stepList
default: []
- - name: publishTestResults
- type: boolean
- default: false
-
- name: referenceType
type: string
values:
@@ -316,10 +312,9 @@ jobs:
abstractionsPackageVersion: ${{ parameters.abstractionsPackageVersion }}
mdsPackageVersion: ${{ parameters.mdsPackageVersion }}
- - ${{ if eq(parameters.publishTestResults, true) }}:
- - template: /eng/pipelines/common/templates/steps/publish-test-results-step.yml@self
- parameters:
- debug: ${{ parameters.debug }}
- targetFramework: ${{ parameters.targetFramework }}
- operatingSystem: ${{ parameters.operatingSystem }}
- buildConfiguration: ${{ parameters.buildConfiguration }}
+ - template: /eng/pipelines/common/templates/steps/publish-test-results-step.yml@self
+ parameters:
+ debug: ${{ parameters.debug }}
+ targetFramework: ${{ parameters.targetFramework }}
+ operatingSystem: ${{ parameters.operatingSystem }}
+ buildConfiguration: ${{ parameters.buildConfiguration }}
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 defba05d9f..675b806f52 100644
--- a/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml
+++ b/eng/pipelines/common/templates/stages/ci-run-tests-stage.yml
@@ -81,9 +81,6 @@ stages:
targetFramework: ${{ targetFramework }}
netcoreVersionTestUtils: ${{config.value.netcoreVersionTestUtils }}
testSet: ${{ testSet }}
- ${{ each codeCoveTF in config.value.codeCovTargetFrameworks }}:
- ${{ if eq(codeCoveTF, targetFramework) }}:
- publishTestResults: true
configSqlFor: ${{ config.value.configSqlFor }}
operatingSystem: ${{ config.value.operatingSystem }}
isArm64: ${{ eq(config.value.isArm64, 'true') }}
@@ -117,9 +114,6 @@ stages:
targetFramework: ${{ targetFramework }}
netcoreVersionTestUtils: ${{config.value.netcoreVersionTestUtils }}
testSet: ${{ testSet }}
- ${{ each codeCoveTF in config.value.codeCovTargetFrameworks }}:
- ${{ if eq(codeCoveTF, targetFramework) }}:
- publishTestResults: true
configSqlFor: ${{ config.value.configSqlFor }}
operatingSystem: ${{ config.value.operatingSystem }}
isArm64: ${{ eq(config.value.isArm64, 'true') }}
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 f25b719bc2..bf5d2baeb0 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
@@ -120,7 +120,6 @@ steps:
--no-build
-v n
--filter "category!=failing&category!=flaky"
- --collect "Code Coverage"
--blame-hang
--blame-hang-dump-type full
--blame-hang-timeout 10m
@@ -143,7 +142,6 @@ steps:
--no-build
-v n
--filter "category=flaky"
- --collect "Code Coverage"
--blame-hang
--blame-hang-dump-type full
--blame-hang-timeout 10m
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 7db39da4a6..7db8811aed 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
@@ -77,7 +77,6 @@ steps:
--no-build
-v n
--filter "category!=failing&category!=flaky"
- --collect "Code Coverage"
--blame-hang
--blame-hang-dump-type full
--blame-hang-timeout 10m
@@ -99,7 +98,6 @@ steps:
--no-build
-v n
--filter "category=flaky"
- --collect "Code Coverage"
--blame-hang
--blame-hang-dump-type full
--blame-hang-timeout 10m
@@ -122,7 +120,6 @@ steps:
--no-build
-v n
--filter "category!=failing&category!=flaky"
- --collect "Code Coverage"
--blame-hang
--blame-hang-dump-type full
--blame-hang-timeout 10m
@@ -145,7 +142,6 @@ steps:
--no-build
-v n
--filter "category=flaky"
- --collect "Code Coverage"
--blame-hang
--blame-hang-dump-type full
--blame-hang-timeout 10m
diff --git a/eng/pipelines/common/templates/steps/generate-nuget-package-step.yml b/eng/pipelines/common/templates/steps/generate-nuget-package-step.yml
index 47d0e02b1a..8227a69ff6 100644
--- a/eng/pipelines/common/templates/steps/generate-nuget-package-step.yml
+++ b/eng/pipelines/common/templates/steps/generate-nuget-package-step.yml
@@ -23,7 +23,6 @@ parameters:
- name: generateSymbolsPackage
type: boolean
- default: true
- name: displayName
type: string
@@ -55,7 +54,7 @@ steps:
$Commit=git rev-parse HEAD
Write-Host "##vso[task.setvariable variable=CommitHead;]$Commit"
displayName: CommitHead
-
+
- task: NuGetCommand@2
displayName: ${{parameters.displayName }}
inputs:
diff --git a/eng/pipelines/common/templates/steps/publish-test-results-step.yml b/eng/pipelines/common/templates/steps/publish-test-results-step.yml
index 1b80630f72..7a0fb1ebc6 100644
--- a/eng/pipelines/common/templates/steps/publish-test-results-step.yml
+++ b/eng/pipelines/common/templates/steps/publish-test-results-step.yml
@@ -43,7 +43,7 @@ steps:
testResultsFiles: |
TestResults/*.trx
TestResults/**/*.coverage
- testRunTitle: 'Linux Tests'
+ testRunTitle: 'Unix Tests'
condition: succeededOrFailed()
- powershell: |
@@ -59,7 +59,7 @@ steps:
displayName: '[Debug] List test result coverage files'
- task: PublishPipelineArtifact@1
- displayName: 'Publish Pipeline Artifacts'
+ displayName: 'Publish Test Artifacts'
inputs:
targetPath: TestResults
artifact: '${{parameters.targetFramework }}WinAz$(System.JobId)'
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 5297795653..21a0941c60 100644
--- a/eng/pipelines/common/templates/steps/run-all-tests-step.yml
+++ b/eng/pipelines/common/templates/steps/run-all-tests-step.yml
@@ -242,9 +242,7 @@ steps:
-p:TF=${{ parameters.targetFramework }}
-p:TestSet=${{ parameters.testSet }}
-p:ReferenceType=${{ parameters.referenceType }}
- -p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
- -p:MdsPackageVersion=${{ parameters.mdsPackageVersion }}
- -p:platform=${{ parameters.platform }}
+ -p:Platform=${{ parameters.platform }}
-p:Configuration=${{ parameters.buildConfiguration }}
verbosityRestore: Detailed
verbosityPack: Detailed
@@ -261,11 +259,10 @@ steps:
-p:TF=${{ parameters.targetFramework }}
-p:TestSet=${{ parameters.testSet }}
-p:ReferenceType=${{ parameters.referenceType }}
- -p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
- -p:MdsPackageVersion=${{ parameters.mdsPackageVersion }}
- -p:platform=${{ parameters.platform }}
+ -p:Platform=${{ parameters.platform }}
-p:Configuration=${{ parameters.buildConfiguration }}
-p:Filter="category=flaky"
+ -p:CollectCodeCoverage=false
verbosityRestore: Detailed
verbosityPack: Detailed
continueOnError: true
@@ -284,7 +281,7 @@ steps:
-p:ReferenceType=${{ parameters.referenceType }}
-p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
-p:MdsPackageVersion=${{ parameters.mdsPackageVersion }}
- -p:platform=${{ parameters.platform }}
+ -p:Platform=${{ parameters.platform }}
-p:Configuration=${{ parameters.buildConfiguration }}
verbosityRestore: Detailed
verbosityPack: Detailed
@@ -303,9 +300,10 @@ steps:
-p:ReferenceType=${{ parameters.referenceType }}
-p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
-p:MdsPackageVersion=${{ parameters.mdsPackageVersion }}
- -p:platform=${{ parameters.platform }}
+ -p:Platform=${{ parameters.platform }}
-p:Configuration=${{ parameters.buildConfiguration }}
-p:Filter="category=flaky"
+ -p:CollectCodeCoverage=false
verbosityRestore: Detailed
verbosityPack: Detailed
continueOnError: true
@@ -344,9 +342,10 @@ steps:
-p:ReferenceType=${{ parameters.referenceType }}
-p:AbstractionsPackageVersion=${{ parameters.abstractionsPackageVersion }}
-p:MdsPackageVersion=${{ parameters.mdsPackageVersion }}
- -p:platform=${{ parameters.platform }}
+ -p:Platform=${{ parameters.platform }}
-p:Configuration=${{ parameters.buildConfiguration }}
-p:Filter="category=flaky"
+ -p:CollectCodeCoverage=false
verbosityRestore: Detailed
verbosityPack: Detailed
continueOnError: true
diff --git a/eng/pipelines/dotnet-sqlclient-ci-core.yml b/eng/pipelines/dotnet-sqlclient-ci-core.yml
index 7c938e037e..27edd738e1 100644
--- a/eng/pipelines/dotnet-sqlclient-ci-core.yml
+++ b/eng/pipelines/dotnet-sqlclient-ci-core.yml
@@ -58,12 +58,6 @@ parameters:
type: string
default: https://sqlclientdrivers.pkgs.visualstudio.com/ADO.Net/_packaging/SNIValidation/nuget/v3/index.json
-# Frameworks to expect code coverage information for, and to compile into
-# reports.
-- name: codeCovTargetFrameworks
- type: object
- default: [net462, net8.0, net9.0, net10.0]
-
# The way we will reference sibling projects in the .csproj files:
# Project - use references.
# Package - use references to NuGet packages in the
@@ -233,9 +227,6 @@ stages:
- template: /eng/pipelines/common/templates/jobs/ci-code-coverage-job.yml@self
parameters:
debug: ${{ parameters.debug }}
- image: ADO-MMS22-CodeCov
- pool: ${{ parameters.defaultPoolName }}
- targetFrameworks: ${{ parameters.codeCovTargetFrameworks }}
# We only want to upload coverage results to CodeCov from certain
# pipelines. We use the pipeline name (Build.DefinitionName) to
# choose. This is a predefined variable that is available at
@@ -249,10 +240,9 @@ stages:
# - PR-SqlClient-Project
# - CI-SqlClient
#
- # Other pipelines that share this template and use a Project
- # buildType don't add much, if any, value to the coverage reports.
- # They have not been configured with suitable CodeCov credentials to
- # perform the upload.
+ # Other pipelines that share this template don't add much, if any,
+ # value to the coverage reports. They have not been configured with
+ # suitable CodeCov credentials to perform the upload.
#
upload: ${{ or(eq(variables['Build.DefinitionName'], 'PR-SqlClient-Project'), eq(variables['Build.DefinitionName'], 'CI-SqlClient')) }}
@@ -268,7 +258,6 @@ stages:
buildPlatforms: ${{parameters.buildPlatforms }}
testSets: ${{parameters.testSets }} # [1, 2, 3] # list of test sets to run
useManagedSNI: ${{parameters.useManagedSNI }} # can be used for .NET Core only tests on Windows: [false, true], [false] or [true] values are allowed
- codeCovTargetFrameworks: ${{parameters.codeCovTargetFrameworks }} # targeted frameworks that is going to participate in test result report generation
configSqlFor: local # setup Sql Server (local | azure | enclave)
operatingSystem: Windows # operating system to run tests on (Windows | Linux | Mac)
configProperties:
@@ -309,7 +298,6 @@ stages:
buildPlatforms: ${{parameters.buildPlatforms }}
testSets: ${{parameters.testSets }} # [1, 2, 3] # list of test sets to run
useManagedSNI: [false] # can be used for .NET Core only tests on Windows: [false, true], [false] or [true] values are allowed
- codeCovTargetFrameworks: ${{parameters.codeCovTargetFrameworks }} # targeted frameworks that is going to participate in test result report generation
configSqlFor: local # setup Sql Server (local | azure | enclave)
operatingSystem: Windows # operating system to run tests on (Windows | Linux | Mac)
configProperties:
@@ -351,7 +339,6 @@ stages:
buildPlatforms: ${{parameters.buildPlatforms }}
testSets: ${{parameters.testSets }}
useManagedSNI: ${{parameters.useManagedSNI }}
- codeCovTargetFrameworks: ${{parameters.codeCovTargetFrameworks }}
configSqlFor: local
operatingSystem: Windows
configProperties:
@@ -380,7 +367,6 @@ stages:
buildPlatforms: ${{parameters.buildPlatforms }}
testSets: ${{parameters.testSets }}
useManagedSNI: [false]
- codeCovTargetFrameworks: ${{parameters.codeCovTargetFrameworks }}
configSqlFor: local
operatingSystem: Windows
configProperties:
@@ -410,7 +396,6 @@ stages:
buildPlatforms: ${{parameters.buildPlatforms }}
testSets: ${{parameters.testSets }}
useManagedSNI: ${{parameters.useManagedSNI }}
- codeCovTargetFrameworks: ${{parameters.codeCovTargetFrameworks }}
configSqlFor: local
operatingSystem: Windows
configProperties:
@@ -434,7 +419,6 @@ stages:
buildPlatforms: ${{parameters.buildPlatforms }}
testSets: ${{parameters.testSets }}
useManagedSNI: ${{parameters.useManagedSNI }}
- codeCovTargetFrameworks: ${{parameters.codeCovTargetFrameworks }}
configSqlFor: azure
operatingSystem: Windows
configProperties:
@@ -466,7 +450,6 @@ stages:
buildPlatforms: ${{parameters.buildPlatforms }}
testSets: ${{parameters.testSets }}
useManagedSNI: ${{parameters.useManagedSNI }}
- codeCovTargetFrameworks: ${{parameters.codeCovTargetFrameworks }}
configSqlFor: azure
operatingSystem: Windows
configProperties:
@@ -496,7 +479,6 @@ stages:
buildPlatforms: [AnyCPU]
testSets: ${{parameters.testSets }}
useManagedSNI: [true]
- codeCovTargetFrameworks: ${{parameters.codeCovTargetFrameworks }}
configSqlFor: local
operatingSystem: Linux
configProperties:
@@ -521,7 +503,6 @@ stages:
buildPlatforms: [AnyCPU]
testSets: ${{parameters.testSets }}
useManagedSNI: [true]
- codeCovTargetFrameworks: ${{parameters.codeCovTargetFrameworks }}
configSqlFor: azure
operatingSystem: Linux
configProperties:
@@ -551,7 +532,6 @@ stages:
buildPlatforms: [AnyCPU]
testSets: ${{parameters.testSets }}
useManagedSNI: [true]
- codeCovTargetFrameworks: ${{parameters.codeCovTargetFrameworks }}
configSqlFor: local
operatingSystem: Mac
configProperties:
@@ -577,7 +557,6 @@ stages:
buildPlatforms: ${{parameters.buildPlatforms }}
testSets: [AE]
useManagedSNI: ${{parameters.useManagedSNI }}
- codeCovTargetFrameworks: ${{parameters.codeCovTargetFrameworks }}
configSqlFor: enclave
operatingSystem: Windows
configProperties:
@@ -607,7 +586,6 @@ stages:
buildPlatforms: [AnyCPU]
testSets: [AE]
useManagedSNI: [true]
- codeCovTargetFrameworks: ${{parameters.codeCovTargetFrameworks }}
configSqlFor: enclave
operatingSystem: Linux
configProperties:
diff --git a/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml b/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml
index 376d3fcd90..b3e3a9c701 100644
--- a/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml
+++ b/eng/pipelines/dotnet-sqlclient-ci-package-reference-pipeline.yml
@@ -109,11 +109,6 @@ parameters:
type: object
default: [AnyCPU]
- - name: codeCovTargetFrameworks
- displayName: Code Coverage Target Frameworks
- type: object
- default: [net462, net8.0, net9.0]
-
- name: debug
displayName: Enable debug output
type: boolean
@@ -186,7 +181,6 @@ extends:
buildConfiguration: ${{ parameters.buildConfiguration }}
buildPlatforms: ${{ parameters.buildPlatforms }}
referenceType: Package
- codeCovTargetFrameworks: ${{ parameters.codeCovTargetFrameworks }}
debug: ${{ parameters.debug }}
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
enableStressTests: ${{ parameters.enableStressTests }}
diff --git a/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml b/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml
index 1cec6c5cbc..1d5df2dabb 100644
--- a/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml
+++ b/eng/pipelines/dotnet-sqlclient-ci-project-reference-pipeline.yml
@@ -109,11 +109,6 @@ parameters:
type: object
default: [AnyCPU]
- - name: codeCovTargetFrameworks
- displayName: Code Coverage Target Frameworks
- type: object
- default: [net462, net8.0, net9.0]
-
- name: debug
displayName: Enable debug output
type: boolean
@@ -186,7 +181,6 @@ extends:
buildConfiguration: ${{ parameters.buildConfiguration }}
buildPlatforms: ${{ parameters.buildPlatforms }}
referenceType: Project
- codeCovTargetFrameworks: ${{ parameters.codeCovTargetFrameworks }}
debug: ${{ parameters.debug }}
dotnetVerbosity: ${{ parameters.dotnetVerbosity }}
enableStressTests: ${{ parameters.enableStressTests }}
diff --git a/eng/pipelines/libraries/ci-build-variables.yml b/eng/pipelines/libraries/ci-build-variables.yml
index c20a9eaa34..f13c7154bc 100644
--- a/eng/pipelines/libraries/ci-build-variables.yml
+++ b/eng/pipelines/libraries/ci-build-variables.yml
@@ -10,7 +10,7 @@
variables:
- group: 'ADO Build properties'
- group: 'ADO Test Configuration Properties'
-
+
- name: buildNumber
value: '$(Build.BuildNumber)'
- name: SQLTarget
diff --git a/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml b/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml
index 5b75f1f2de..50f74a57f2 100644
--- a/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml
+++ b/eng/pipelines/sqlclient-pr-package-ref-pipeline.yml
@@ -66,11 +66,6 @@ parameters:
type: object
default: [AnyCPU]
- - name: codeCovTargetFrameworks
- displayName: Code Coverage Target Frameworks
- type: object
- default: [net462, net8.0, net9.0]
-
- name: debug
displayName: Enable debug output
type: boolean
@@ -129,7 +124,6 @@ extends:
buildConfiguration: ${{ parameters.buildConfiguration }}
buildPlatforms: ${{ parameters.buildPlatforms }}
referenceType: Package
- codeCovTargetFrameworks: ${{ parameters.codeCovTargetFrameworks }}
debug: ${{ parameters.debug }}
enableStressTests: ${{ parameters.enableStressTests }}
targetFrameworks: ${{ parameters.targetFrameworks }}
diff --git a/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml b/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml
index 2f4e8a2ee5..05a13dd8e3 100644
--- a/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml
+++ b/eng/pipelines/sqlclient-pr-project-ref-pipeline.yml
@@ -66,11 +66,6 @@ parameters:
type: object
default: [AnyCPU]
- - name: codeCovTargetFrameworks
- displayName: Code Coverage Target Frameworks
- type: object
- default: [net462, net8.0, net9.0]
-
- name: debug
displayName: Enable debug output
type: boolean
@@ -129,7 +124,6 @@ extends:
buildConfiguration: ${{ parameters.buildConfiguration }}
buildPlatforms: ${{ parameters.buildPlatforms }}
referenceType: Project
- codeCovTargetFrameworks: ${{ parameters.codeCovTargetFrameworks }}
debug: ${{ parameters.debug }}
enableStressTests: ${{ parameters.enableStressTests }}
targetFrameworks: ${{ parameters.targetFrameworks }}
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index 7a3e277e2a..48e94629a2 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -49,7 +49,7 @@
$(Artifacts)obj\
$(NetCoreSource)src\Common\src
$(NetCoreSource)src\Common\tests
- $(ProjectDir)Microsoft.Data.SqlClient\tests\
+ $(ProjectDir)Microsoft.Data.SqlClient/tests/
$(Artifacts)bin\Windows_NT\
$(Artifacts)bin\AnyOS\
$(Artifacts)bin\Unix\
diff --git a/src/Microsoft.Data.SqlClient/add-ons/Directory.Build.props b/src/Microsoft.Data.SqlClient/add-ons/Directory.Build.props
index d5bd53f012..905476c717 100644
--- a/src/Microsoft.Data.SqlClient/add-ons/Directory.Build.props
+++ b/src/Microsoft.Data.SqlClient/add-ons/Directory.Build.props
@@ -1,9 +1,9 @@
-
+
-
+
$(OS)
true
diff --git a/src/Microsoft.Data.SqlClient/tests/Common/Common.csproj b/src/Microsoft.Data.SqlClient/tests/Common/Common.csproj
index efce75759f..0ef74e9d02 100644
--- a/src/Microsoft.Data.SqlClient/tests/Common/Common.csproj
+++ b/src/Microsoft.Data.SqlClient/tests/Common/Common.csproj
@@ -40,10 +40,6 @@
-
- PreserveNewest
- xunit.runner.json
-
diff --git a/src/Microsoft.Data.SqlClient/tests/Common/Microsoft.Data.SqlClient.TestCommon.csproj b/src/Microsoft.Data.SqlClient/tests/Common/Microsoft.Data.SqlClient.TestCommon.csproj
index 4c5c10a8a9..f648a68ab9 100644
--- a/src/Microsoft.Data.SqlClient/tests/Common/Microsoft.Data.SqlClient.TestCommon.csproj
+++ b/src/Microsoft.Data.SqlClient/tests/Common/Microsoft.Data.SqlClient.TestCommon.csproj
@@ -5,13 +5,7 @@
enable
-
-
-
- PreserveNewest
- xunit.runner.json
-
-
+
diff --git a/src/Microsoft.Data.SqlClient/tests/Directory.Build.props b/src/Microsoft.Data.SqlClient/tests/Directory.Build.props
index d790614874..83acd326e0 100644
--- a/src/Microsoft.Data.SqlClient/tests/Directory.Build.props
+++ b/src/Microsoft.Data.SqlClient/tests/Directory.Build.props
@@ -35,4 +35,16 @@
+
+
+
+
+ PreserveNewest
+ CodeCoverage.runsettings
+
+
+ PreserveNewest
+ xunit.runner.json
+
+
diff --git a/src/Microsoft.Data.SqlClient/tests/FunctionalTests/Microsoft.Data.SqlClient.FunctionalTests.csproj b/src/Microsoft.Data.SqlClient/tests/FunctionalTests/Microsoft.Data.SqlClient.FunctionalTests.csproj
index 2d195a13f9..ec13e9a857 100644
--- a/src/Microsoft.Data.SqlClient/tests/FunctionalTests/Microsoft.Data.SqlClient.FunctionalTests.csproj
+++ b/src/Microsoft.Data.SqlClient/tests/FunctionalTests/Microsoft.Data.SqlClient.FunctionalTests.csproj
@@ -19,21 +19,16 @@
-
+
-
-
+
Always
-
-
- PreserveNewest
- xunit.runner.json
-
+
-
+
@@ -44,14 +39,14 @@
-
-
+
-
+
-
+
diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTests.csproj b/src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTests.csproj
index a27e137cf3..6375a0432d 100644
--- a/src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTests.csproj
+++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTests.csproj
@@ -8,7 +8,7 @@
false
-
+
@@ -18,7 +18,7 @@
123AE
$(TestSet.ToLower())
-
+
@@ -58,7 +58,7 @@
-
+
@@ -70,7 +70,7 @@
-
+
@@ -161,7 +161,7 @@
-
+
@@ -246,7 +246,7 @@
-
+
diff --git a/src/Microsoft.Data.SqlClient/tests/UnitTests/Microsoft.Data.SqlClient.UnitTests.csproj b/src/Microsoft.Data.SqlClient/tests/UnitTests/Microsoft.Data.SqlClient.UnitTests.csproj
index c73feb4119..59aa6c7ed3 100644
--- a/src/Microsoft.Data.SqlClient/tests/UnitTests/Microsoft.Data.SqlClient.UnitTests.csproj
+++ b/src/Microsoft.Data.SqlClient/tests/UnitTests/Microsoft.Data.SqlClient.UnitTests.csproj
@@ -19,10 +19,6 @@
True
Resources.resx
-
- PreserveNewest
- xunit.runner.json
-
diff --git a/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/CodeCoverage.runsettings b/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/CodeCoverage.runsettings
new file mode 100644
index 0000000000..db7b9fc986
--- /dev/null
+++ b/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/CodeCoverage.runsettings
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+ .*Microsoft\.Data\.SqlClient\.dll$
+ .*Microsoft\.SqlServer\.Server\.dll$
+ .*Microsoft\.Data\.SqlClient\.AlwaysEncrypted\.AzureKeyVaultProvider\.dll$
+
+
+
+
+
+ ^System\.Diagnostics\.CodeAnalysis\.ExcludeFromCodeCoverageAttribute$
+ ^System\.CodeDom\.Compiler\.GeneratedCodeAttribute$
+
+
+
+ True
+ True
+
+ False
+ True
+ True
+ True
+ False
+
+
+
+
+
+