12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #!/usr/bin/env pwsh
- <#
- .SYNOPSIS
- Compares code coverage percent of local coverage.xml file to master branch (Azure Pipeline API).
- .PARAMETER wd
- The working directory in which to search for current coverage.xml.
- #>
- param(
- [string] $wd = (Get-Item (Split-Path $PSCommandPath -Parent)).Parent,
- [string] $org = "coderedcorp",
- [string] $project = "coderedcms"
- )
- # Hide "UI" and progress bars.
- $ProgressPreference = "SilentlyContinue"
- # Get latest coverage from master.
- $ApiBase = "https://dev.azure.com/$org/$project"
- $masterBuildJson = (Invoke-WebRequest "$ApiBase/_apis/build/builds?branchName=refs/heads/master&api-version=5.1").Content | ConvertFrom-Json
- $masterLatestId = $masterBuildJson.value[0].id
- $masterCoverageJson = (Invoke-WebRequest "$ApiBase/_apis/test/codecoverage?buildId=$masterLatestId&api-version=5.1-preview.1").Content | ConvertFrom-Json
- foreach ($cov in $masterCoverageJson.coverageData.coverageStats) {
- if ($cov.label -eq "Lines") {
- $masterlinerate = [math]::Round(($cov.covered / $cov.total) * 100, 2)
- }
- }
- # Get current code coverage from coverage.xml file.
- $coveragePath = Get-ChildItem -Recurse -Filter "coverage.xml" $wd
- if (Test-Path -Path $coveragePath) {
- [xml]$BranchXML = Get-Content $coveragePath
- }
- else {
- Write-Host "No code coverage from this build. Is pytest configured to output code coverage? Exiting." -ForegroundColor Red
- exit 1
- }
- $branchlinerate = [math]::Round([decimal]$BranchXML.coverage.'line-rate' * 100, 2)
- Write-Output ""
- Write-Output "Master line coverage rate: $masterlinerate%"
- Write-Output "Branch line coverage rate: $branchlinerate%"
- if ($masterlinerate -eq 0) {
- $change = "Infinite"
- }
- else {
- $change = [math]::Abs($branchlinerate - $masterlinerate)
- }
- if ($branchlinerate -gt $masterlinerate) {
- Write-Host "Coverage increased by $change% 😀" -ForegroundColor Green
- exit 0
- }
- elseif ($branchlinerate -eq $masterlinerate) {
- Write-Host "Coverage has not changed." -ForegroundColor Green
- exit 0
- }
- else {
- Write-Host "Coverage decreased by $change% 😭" -ForegroundColor Red
- exit 4
- }
|