diff --git a/.vscode/cspell.json b/.vscode/cspell.json index 476b29d62..51a3c773b 100644 --- a/.vscode/cspell.json +++ b/.vscode/cspell.json @@ -116,7 +116,8 @@ "filename": "**/eng/pipelines/templates/**/*.yml", "words": [ "lcov", - "iname" + "iname", + "mspremier" ] }, { diff --git a/eng/pipelines/templates/jobs/archetype-sdk-client.yml b/eng/pipelines/templates/jobs/archetype-sdk-client.yml index 5dfa64140..d1cda3837 100644 --- a/eng/pipelines/templates/jobs/archetype-sdk-client.yml +++ b/eng/pipelines/templates/jobs/archetype-sdk-client.yml @@ -20,6 +20,12 @@ parameters: - name: CoverageReportPath type: string default: 'sdk/*/*/*cov_xml.xml' + - name: LineCoverageTarget + type: number + default: 95 + - name: BranchCoverageTarget + type: number + default: 70 jobs: - template: /eng/common/pipelines/templates/jobs/archetype-sdk-tests-generate.yml @@ -37,6 +43,8 @@ jobs: CtestRegex: ${{ parameters.CtestRegex }} CoverageReportPath: ${{ parameters.CoverageReportPath }} CoverageEnabled: ${{ parameters.CoverageEnabled }} + LineCoverageTarget: ${{ parameters.LineCoverageTarget }} + BranchCoverageTarget: ${{ parameters.BranchCoverageTarget }} # Disable build for cpp - client - ${{ if ne(parameters.ServiceDirectory, 'not-specified' )}}: diff --git a/eng/pipelines/templates/jobs/ci.tests.yml b/eng/pipelines/templates/jobs/ci.tests.yml index 59ea2758a..595ec8cbf 100644 --- a/eng/pipelines/templates/jobs/ci.tests.yml +++ b/eng/pipelines/templates/jobs/ci.tests.yml @@ -19,6 +19,13 @@ parameters: default: true - name: Matrix type: string + - name: LineCoverageTarget + type: number + default: 95 + - name: BranchCoverageTarget + type: number + default: 70 + # Supplied by archetype-sdk-tests-generate.yml dynamic matrix generator - name: CloudConfig @@ -147,3 +154,23 @@ jobs: summaryFileLocation: '$(Build.SourcesDirectory)/**/Cobertura.xml' displayName: Publish Code Coverage to DevOps condition: and(succeededOrFailed(), eq(variables['CODE_COVERAGE'], 'enabled')) + + - task: mspremier.BuildQualityChecks.QualityChecks-task.BuildQualityChecks@8 + displayName: Check line coverage + inputs: + checkCoverage: true + coverageFailOption: fixed + coverageType: line + # Minimum baseline for line coverage + coverageThreshold: ${{ parameters.LineCoverageTarget }} + condition: and(succeededOrFailed(), eq(variables['CODE_COVERAGE'], 'enabled'), eq(variables['Skip.LineCoverageEnforcement'], '')) + + - task: mspremier.BuildQualityChecks.QualityChecks-task.BuildQualityChecks@8 + displayName: Check branch coverage + inputs: + checkCoverage: true + coverageFailOption: fixed + coverageType: branches + # Minimum baseline for branch coverage + coverageThreshold: ${{ parameters.BranchCoverageTarget }} + condition: and(succeededOrFailed(), eq(variables['CODE_COVERAGE'], 'enabled'), eq(variables['Skip.BranchCoverageEnforcement'], '')) diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index 0c9eb5831..6e54c9e06 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -26,6 +26,12 @@ parameters: - name: LiveTestTimeoutInMinutes type: number default: 60 +- name: LineCoverageTarget + type: number + default: 95 +- name: BranchCoverageTarget + type: number + default: 70 stages: - stage: Build @@ -37,6 +43,8 @@ stages: CtestRegex: ${{ parameters.CtestRegex }} CoverageEnabled: ${{ parameters.CoverageEnabled }} CoverageReportPath: ${{ parameters.CoverageReportPath }} + LineCoverageTarget: ${{ parameters.LineCoverageTarget }} + BranchCoverageTarget: ${{ parameters.BranchCoverageTarget }} ${{ if eq(parameters.ServiceDirectory, 'template') }}: TestPipeline: true diff --git a/sdk/core/ci.yml b/sdk/core/ci.yml index 7879c46ad..3a8d1ba74 100644 --- a/sdk/core/ci.yml +++ b/sdk/core/ci.yml @@ -37,6 +37,8 @@ stages: CtestRegex: azure-core. LiveTestCtestRegex: '"azure-core.|json-test"' LiveTestTimeoutInMinutes: 90 # default is 60 min. We need a little longer on worst case for Win+jsonTests + LineCoverageTarget: 79 + BranchCoverageTarget: 30 Artifacts: - Name: azure-core Path: azure-core diff --git a/sdk/identity/ci.yml b/sdk/identity/ci.yml index 730b6e9d3..93d21ac14 100644 --- a/sdk/identity/ci.yml +++ b/sdk/identity/ci.yml @@ -33,6 +33,8 @@ stages: ServiceDirectory: identity CtestRegex: azure-identity-unittest. LiveTestCtestRegex: azure-identity-livetest. + LineCoverageTarget: 82 + BranchCoverageTarget: 32 Artifacts: - Name: azure-identity Path: azure-identity diff --git a/sdk/keyvault/ci.yml b/sdk/keyvault/ci.yml index 7ee52f569..2729f1cdb 100644 --- a/sdk/keyvault/ci.yml +++ b/sdk/keyvault/ci.yml @@ -37,6 +37,8 @@ stages: LiveTestCtestRegex: "azure-security-keyvault.*" LiveTestTimeoutInMinutes: 120 SubscriptionConfiguration: $(sub-config-azure-cloud-test-resources) + LineCoverageTarget: 37 + BranchCoverageTarget: 15 Artifacts: - Name: azure-security-keyvault-keys Path: azure-security-keyvault-keys diff --git a/sdk/template/ci.yml b/sdk/template/ci.yml index f6eab47b3..3618684a7 100644 --- a/sdk/template/ci.yml +++ b/sdk/template/ci.yml @@ -34,6 +34,13 @@ stages: parameters: ServiceDirectory: template CtestRegex: azure-template + # The azure-template project has lower branch coverage than the default. + # This overrides the branch coverage floor until the issue can be + # addressed. Once it is addressed this line should be removed so that + # projects generated from this ci.yml file don't set a coverage target + # that is lower than the baseline defined in archetype-sdk-client.yml + # Issue: https://github.com/Azure/azure-sdk-for-cpp/issues/3022 + BranchCoverageTarget: 33 Artifacts: - Name: azure-template Path: azure-template