diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index b1b6a5c..e0e45be 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -26,4 +26,4 @@ jobs: run: dotnet build src/CodeCoverageSummary.sln --configuration Release --no-restore - name: Test with sample file - run: dotnet src/CodeCoverageSummary/bin/Release/net6.0/CodeCoverageSummary.dll --files src/coverage.cobertura.xml --badge true + run: dotnet src/CodeCoverageSummary/bin/Release/net6.0/CodeCoverageSummary.dll --files **/coverage.*.xml --badge true diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index f49ae90..eb1e12c 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -30,7 +30,7 @@ jobs: run: dotnet build src/CodeCoverageSummary.sln --configuration Release --no-restore - name: Test with sample file - run: dotnet src/CodeCoverageSummary/bin/Release/net6.0/CodeCoverageSummary.dll --files src/coverage.cobertura.xml --badge true + run: dotnet src/CodeCoverageSummary/bin/Release/net6.0/CodeCoverageSummary.dll --files **/coverage.*.xml --badge true deploy: name: Deploy to GHCR diff --git a/src/CodeCoverageSummary/CodeCoverageSummary.csproj b/src/CodeCoverageSummary/CodeCoverageSummary.csproj index 374920c..32e884c 100644 --- a/src/CodeCoverageSummary/CodeCoverageSummary.csproj +++ b/src/CodeCoverageSummary/CodeCoverageSummary.csproj @@ -19,6 +19,7 @@ + diff --git a/src/CodeCoverageSummary/Program.cs b/src/CodeCoverageSummary/Program.cs index 3473a89..e1e2ca3 100644 --- a/src/CodeCoverageSummary/Program.cs +++ b/src/CodeCoverageSummary/Program.cs @@ -1,5 +1,7 @@ using CommandLine; +using Microsoft.Extensions.FileSystemGlobbing; using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; @@ -19,8 +21,19 @@ private static int Main(string[] args) { try { + // use glob patterns to match files + Matcher matcher = new(); + matcher.AddIncludePatterns(o.Files.ToArray()); + IEnumerable matchingFiles = matcher.GetResultsInFullPath("."); + + if (matchingFiles?.Any() == false) + { + Console.WriteLine("Error: No files found matching glob pattern."); + return -2; // error + } + // check files exist - foreach (var file in o.Files) + foreach (var file in matchingFiles) { if (!File.Exists(file)) { @@ -31,13 +44,13 @@ private static int Main(string[] args) // parse code coverage file CodeSummary summary = new(); - foreach (var file in o.Files) + foreach (var file in matchingFiles) { Console.WriteLine($"Code Coverage File: {file}"); summary = ParseTestResults(file, summary); } - summary.LineRate /= o.Files.Count(); - summary.BranchRate /= o.Files.Count(); + summary.LineRate /= matchingFiles.Count(); + summary.BranchRate /= matchingFiles.Count(); if (summary.Packages.Count == 0) { diff --git a/src/CodeCoverageSummary/Properties/launchSettings.json b/src/CodeCoverageSummary/Properties/launchSettings.json index 68bac46..25a681a 100644 --- a/src/CodeCoverageSummary/Properties/launchSettings.json +++ b/src/CodeCoverageSummary/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "CodeCoverageSummary": { "commandName": "Project", - "commandLineArgs": "--files ../../../../coverage.cobertura.xml,../../../../coverage.cobertura.xml --format=text --badge true --thresholds=\"85 90\" --fail true" + "commandLineArgs": "--files **/coverage.*.xml --format=text --badge true --thresholds=\"85 90\" --fail true" }, "Docker": { "commandName": "Docker",