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 + + + + + +