Skip to content

Commit d197e57

Browse files
🩹 [Refactor]: Implement XML report merging in workflow script to consolidate code coverage data into a single report
1 parent 40d1337 commit d197e57

File tree

1 file changed

+54
-6
lines changed

1 file changed

+54
-6
lines changed

‎.github/workflows/workflow.yml

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -206,14 +206,62 @@ jobs:
206206
$runId = $env:GITHUB_RUN_ID
207207
gh run download $runId --repo $repo --pattern *CodeCoverage --dir .
208208
$files = Get-ChildItem -Path . -Recurse -File | Select-Object -ExpandProperty FullName | Sort-Object
209-
$files | Out-String
210-
$files | ForEach-Object {
211-
$fileName = $_.Name
212-
LogGroup " - $fileName" {
213-
Get-Content -Path $_
214-
}
209+
# Load the first XML as the base report
210+
[xml]$mergedReport = Get-Content -Path $files[0]
211+
212+
# Function to merge counters
213+
function Merge-Counters($baseNode, $newNode) {
214+
foreach ($newCounter in $newNode.counter) {
215+
$baseCounter = $baseNode.counter | Where-Object { $_.type -eq $newCounter.type }
216+
if ($baseCounter) {
217+
$baseCounter.missed = [int]$baseCounter.missed + [int]$newCounter.missed
218+
$baseCounter.covered = [int]$baseCounter.covered + [int]$newCounter.covered
219+
} else {
220+
# Import new counter if it doesn't exist
221+
$importedCounter = $mergedReport.ImportNode($newCounter, $true)
222+
$baseNode.AppendChild($importedCounter) | Out-Null
223+
}
224+
}
215225
}
216226
227+
# Loop through remaining reports to merge coverage data
228+
foreach ($reportPath in $files[1..($files.Count - 1)]) {
229+
[xml]$currentReport = Get-Content -Path $reportPath
230+
231+
# Merge the top-level counters
232+
Merge-Counters -baseNode $mergedReport.report -newNode $currentReport.report
233+
234+
# Merge packages and classes
235+
foreach ($package in $currentReport.report.package) {
236+
$basePackage = $mergedReport.report.package | Where-Object { $_.name -eq $package.name }
237+
238+
if ($basePackage) {
239+
# Merge counters at package level
240+
Merge-Counters -baseNode $basePackage -newNode $package
241+
242+
foreach ($class in $package.class) {
243+
$baseClass = $basePackage.class | Where-Object { $_.name -eq $class.name }
244+
if ($baseClass) {
245+
# Merge counters at class level
246+
Merge-Counters -baseNode $baseClass -newNode $class
247+
} else {
248+
# Import new class
249+
$importedClass = $mergedReport.ImportNode($class, $true)
250+
$basePackage.AppendChild($importedClass) | Out-Null
251+
}
252+
}
253+
} else {
254+
# Import entire new package
255+
$importedPackage = $mergedReport.ImportNode($package, $true)
256+
$mergedReport.report.AppendChild($importedPackage) | Out-Null
257+
}
258+
}
259+
}
260+
261+
# Output the combined report
262+
$mergedReport.Save("merged-jacoco-report.xml")
263+
264+
217265
# TestModuleStatus:
218266
# name: Test module status
219267
# if: ${{ contains(fromJson('["success", "skipped"]'), needs.TestModule-pwsh-ubuntu-latest.result) && contains(fromJson('["success", "skipped"]'), needs.TestModule-pwsh-macos-latest.result) && contains(fromJson('["success", "skipped"]'), needs.TestModule-pwsh-windows-latest.result) && !cancelled() }}

0 commit comments

Comments
 (0)