@@ -206,14 +206,62 @@ jobs:
206
206
$runId = $env:GITHUB_RUN_ID
207
207
gh run download $runId --repo $repo --pattern *CodeCoverage --dir .
208
208
$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
+ }
215
225
}
216
226
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
+
217
265
# TestModuleStatus:
218
266
# name: Test module status
219
267
# 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