mirror of
https://github.com/irongut/CodeCoverageSummary.git
synced 2026-05-14 22:20:13 +02:00
Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 473d18e3ad | |||
| 61d10948c8 | |||
| 7cd8fe49e9 | |||
| 174c97ac3d | |||
| 9b11daeca8 | |||
| 6db46e287e | |||
| c5d12d4a89 | |||
| cae1cbcdad | |||
| ed258b1479 | |||
| 0723132cf6 | |||
| 758c38f591 | |||
| 24062a1b2a | |||
| dcef09e405 | |||
| 9cce3f5374 | |||
| 20025e7e93 | |||
| 0bcadffdb9 |
@@ -1,15 +1,18 @@
|
|||||||
# Assign PR to Author
|
# Assign PR to Author
|
||||||
# https://github.com/samspills/assign-pr-to-author
|
# https://github.com/samspills/assign-pr-to-author
|
||||||
|
|
||||||
name: Auto Assign PR
|
# Disabled due to #14 HttpError: Resource not accessible by integration:
|
||||||
on: [pull_request]
|
# https://github.com/samspills/assign-pr-to-author/issues/14
|
||||||
|
|
||||||
jobs:
|
#name: Auto Assign PR
|
||||||
assignAuthor:
|
#on: [pull_request]
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
#jobs:
|
||||||
- name: Auto Assign PR
|
# assignAuthor:
|
||||||
uses: samspills/assign-pr-to-author@v1.0
|
# runs-on: ubuntu-latest
|
||||||
if: github.event_name == 'pull_request' && github.event.action == 'opened'
|
# steps:
|
||||||
with:
|
# - name: Auto Assign PR
|
||||||
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
# uses: samspills/assign-pr-to-author@v1.0
|
||||||
|
# if: github.event_name == 'pull_request' && github.event.action == 'opened'
|
||||||
|
# with:
|
||||||
|
# repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||||
|
|||||||
@@ -11,8 +11,10 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: CI Build
|
name: CI Build
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- name: Checkout
|
||||||
- name: Setup .NET
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup .Net
|
||||||
uses: actions/setup-dotnet@v1
|
uses: actions/setup-dotnet@v1
|
||||||
with:
|
with:
|
||||||
dotnet-version: 5.0.x
|
dotnet-version: 5.0.x
|
||||||
@@ -23,11 +25,5 @@ jobs:
|
|||||||
- name: Build CodeCoverageSummary
|
- name: Build CodeCoverageSummary
|
||||||
run: dotnet build src/CodeCoverageSummary.sln --configuration Release --no-restore
|
run: dotnet build src/CodeCoverageSummary.sln --configuration Release --no-restore
|
||||||
|
|
||||||
- name: Run CodeCoverageSummary with sample file
|
- name: Test with sample file
|
||||||
run: dotnet src/CodeCoverageSummary/bin/Release/net5.0/CodeCoverageSummary.dll src/coverage.cobertura.xml --badge true
|
run: dotnet src/CodeCoverageSummary/bin/Release/net5.0/CodeCoverageSummary.dll src/coverage.cobertura.xml --badge true
|
||||||
|
|
||||||
- name: Test Action
|
|
||||||
uses: irongut/CodeCoverageSummary@master
|
|
||||||
with:
|
|
||||||
filename: '/app/sample.coverage.xml'
|
|
||||||
badge: 'true'
|
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup .Net
|
- name: Setup .Net
|
||||||
uses: actions/setup-dotnet@v1
|
uses: actions/setup-dotnet@v1
|
||||||
@@ -30,6 +32,28 @@ jobs:
|
|||||||
- name: Test with sample file
|
- name: Test with sample file
|
||||||
run: dotnet src/CodeCoverageSummary/bin/Release/net5.0/CodeCoverageSummary.dll src/coverage.cobertura.xml --badge true
|
run: dotnet src/CodeCoverageSummary/bin/Release/net5.0/CodeCoverageSummary.dll src/coverage.cobertura.xml --badge true
|
||||||
|
|
||||||
|
- name: Get Previous Tag
|
||||||
|
id: get_previous_tag
|
||||||
|
run: |
|
||||||
|
PREV_TAG=$(git describe --abbrev=0 --tags "${{ github.ref }}^")
|
||||||
|
echo "::set-output name=baseRef::${PREV_TAG}"
|
||||||
|
|
||||||
|
- name: Generate Changelog
|
||||||
|
id: generate_changelog
|
||||||
|
uses: nblagoev/pull-release-notes-action@v1.0.2
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
base-ref: ${{ steps.get_previous_tag.outputs.baseRef }}
|
||||||
|
head-ref: ${{ github.ref }}
|
||||||
|
|
||||||
|
- name: Add Changelog to Release
|
||||||
|
uses: irongut/EditRelease@v1.0.0
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
id: ${{ github.event.release.id }}
|
||||||
|
body: ${{ steps.generate_changelog.outputs.result }}
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
name: Deploy to GHCR
|
name: Deploy to GHCR
|
||||||
needs: [build]
|
needs: [build]
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ Company.Example.Library: Line Rate = 27%, Branch Rate = 100%, Complexity = 11
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
name: Code Coverage Summary Report
|
name: Code Coverage Summary Report
|
||||||
uses: irongut/CodeCoverageSummary@v1.0.2
|
uses: irongut/CodeCoverageSummary@v1.0.5
|
||||||
with:
|
with:
|
||||||
filename: coverage/coverage.cobertura.xml
|
filename: coverage/coverage.cobertura.xml
|
||||||
```
|
```
|
||||||
@@ -94,7 +94,7 @@ jobs:
|
|||||||
run: cp coverage/**/coverage.cobertura.xml coverage/coverage.cobertura.xml
|
run: cp coverage/**/coverage.cobertura.xml coverage/coverage.cobertura.xml
|
||||||
|
|
||||||
- name: Code Coverage Summary Report
|
- name: Code Coverage Summary Report
|
||||||
uses: irongut/CodeCoverageSummary@v1.0.2
|
uses: irongut/CodeCoverageSummary@v1.0.5
|
||||||
with:
|
with:
|
||||||
filename: coverage/coverage.cobertura.xml
|
filename: coverage/coverage.cobertura.xml
|
||||||
badge: true
|
badge: true
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ inputs:
|
|||||||
default: 'console'
|
default: 'console'
|
||||||
runs:
|
runs:
|
||||||
using: 'docker'
|
using: 'docker'
|
||||||
image: 'docker://ghcr.io/irongut/codecoveragesummary:v1.0.2'
|
image: 'docker://ghcr.io/irongut/codecoveragesummary:v1.0.5'
|
||||||
args:
|
args:
|
||||||
- ${{ inputs.filename }}
|
- ${{ inputs.filename }}
|
||||||
- '--badge'
|
- '--badge'
|
||||||
|
|||||||
@@ -6,14 +6,15 @@
|
|||||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||||
<Company>Taranis Software</Company>
|
<Company>Taranis Software</Company>
|
||||||
<Authors>Irongut</Authors>
|
<Authors>Irongut</Authors>
|
||||||
<Description>A GitHub Action that reads Cobertura format code coverage files and outputs a summary.</Description>
|
<Description>A GitHub Action that reads Cobertura format code coverage files and outputs a text or markdown summary.</Description>
|
||||||
<Copyright>Copyright © 2021 Taranis Software</Copyright>
|
<Copyright>Copyright © 2021 Taranis Software</Copyright>
|
||||||
<PackageId>Taranis.CodeCoverageSummary</PackageId>
|
<PackageId>Taranis.CodeCoverageSummary</PackageId>
|
||||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||||
<PackageProjectUrl>https://github.com/irongut/CodeCoverageSummary</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/irongut/CodeCoverageSummary</PackageProjectUrl>
|
||||||
<RepositoryUrl>https://github.com/irongut/CodeCoverageSummary</RepositoryUrl>
|
<RepositoryUrl>https://github.com/irongut/CodeCoverageSummary</RepositoryUrl>
|
||||||
<RepositoryType>git</RepositoryType>
|
<RepositoryType>git</RepositoryType>
|
||||||
<PackageTags>code-coverage cobertura coverlet</PackageTags>
|
<PackageTags>coverage test-coverage cobertura action code-coverage coverlet github-actions</PackageTags>
|
||||||
|
<Version>1.0.5</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace CodeCoverageSummary
|
|||||||
|
|
||||||
public double BranchRate { get; set; }
|
public double BranchRate { get; set; }
|
||||||
|
|
||||||
public int Complexity { get; set; }
|
public double Complexity { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CodeSummary
|
public class CodeSummary
|
||||||
@@ -27,7 +27,7 @@ namespace CodeCoverageSummary
|
|||||||
|
|
||||||
public int BranchesValid { get; set; }
|
public int BranchesValid { get; set; }
|
||||||
|
|
||||||
public int Complexity { get; set; }
|
public double Complexity { get; set; }
|
||||||
|
|
||||||
public List<CodeCoverage> Packages { get; set; }
|
public List<CodeCoverage> Packages { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -7,13 +7,13 @@ namespace CodeCoverageSummary
|
|||||||
[Value(index: 0, Required = true, HelpText = "Code coverage file to analyse.")]
|
[Value(index: 0, Required = true, HelpText = "Code coverage file to analyse.")]
|
||||||
public string Filename { get; set; }
|
public string Filename { get; set; }
|
||||||
|
|
||||||
[Option(shortName: 'b', longName: "badge", Required = false, HelpText = "Include a badge in the output - true / false.", Default = false)]
|
[Option(longName: "badge", Required = false, HelpText = "Include a badge reporting the Line Rate coverage in the output using shields.io - true or false.", Default = false)]
|
||||||
public bool Badge { get; set; }
|
public bool Badge { get; set; }
|
||||||
|
|
||||||
[Option(shortName: 'f', longName: "format", Required = false, HelpText = "Output Format - markdown or text.", Default = "text")]
|
[Option(longName: "format", Required = false, HelpText = "Output Format - markdown or text.", Default = "text")]
|
||||||
public string Format { get; set; }
|
public string Format { get; set; }
|
||||||
|
|
||||||
[Option(shortName: 'o', longName: "output", Required = false, HelpText = "Output Type - console, file or both.", Default = "console")]
|
[Option(longName: "output", Required = false, HelpText = "Output Type - console, file or both.", Default = "console")]
|
||||||
public string Output { get; set; }
|
public string Output { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// This file is used by Code Analysis to maintain SuppressMessage
|
||||||
|
// attributes that are applied to this project.
|
||||||
|
// Project-level suppressions either have no target or are given
|
||||||
|
// a specific target and scoped to a namespace, type, member, etc.
|
||||||
|
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
|
[assembly: SuppressMessage("Performance", "RCS1197:Optimize StringBuilder.Append/AppendLine call.", Scope = "type", Target = "~T:CodeCoverageSummary.Program")]
|
||||||
@@ -9,83 +9,81 @@ namespace CodeCoverageSummary
|
|||||||
{
|
{
|
||||||
internal static class Program
|
internal static class Program
|
||||||
{
|
{
|
||||||
// test file: /Dev/Csharp/CodeCoverageSummary/coverage.cobertura.xml
|
|
||||||
|
|
||||||
private static int Main(string[] args)
|
private static int Main(string[] args)
|
||||||
{
|
{
|
||||||
return Parser.Default.ParseArguments<CommandLineOptions>(args)
|
return Parser.Default.ParseArguments<CommandLineOptions>(args)
|
||||||
.MapResult(o =>
|
.MapResult(o =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!File.Exists(o.Filename))
|
if (!File.Exists(o.Filename))
|
||||||
{
|
{
|
||||||
Console.WriteLine("Error: Code coverage file not found.");
|
Console.WriteLine("Error: Code coverage file not found.");
|
||||||
return -2; // error
|
return -2; // error
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse code coverage file
|
// parse code coverage file
|
||||||
Console.WriteLine($"Code Coverage File: {o.Filename}");
|
Console.WriteLine($"Code Coverage File: {o.Filename}");
|
||||||
CodeSummary summary = ParseTestResults(o.Filename);
|
CodeSummary summary = ParseTestResults(o.Filename);
|
||||||
if (summary == null)
|
if (summary == null)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Error: Parsing code coverage file.");
|
Console.WriteLine("Error: Parsing code coverage file.");
|
||||||
return -2; // error
|
return -2; // error
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// generate badge
|
// generate badge
|
||||||
string badgeUrl = o.Badge ? GenerateBadge(summary) : null;
|
string badgeUrl = o.Badge ? GenerateBadge(summary) : null;
|
||||||
|
|
||||||
// generate output
|
// generate output
|
||||||
string output;
|
string output;
|
||||||
string fileExt;
|
string fileExt;
|
||||||
if (o.Format.Equals("text", StringComparison.OrdinalIgnoreCase))
|
if (o.Format.Equals("text", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
fileExt = "txt";
|
fileExt = "txt";
|
||||||
output = GenerateTextOutput(summary, badgeUrl);
|
output = GenerateTextOutput(summary, badgeUrl);
|
||||||
}
|
}
|
||||||
else if (o.Format.Equals("md", StringComparison.OrdinalIgnoreCase) || o.Format.Equals("markdown", StringComparison.OrdinalIgnoreCase))
|
else if (o.Format.Equals("md", StringComparison.OrdinalIgnoreCase) || o.Format.Equals("markdown", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
fileExt = "md";
|
fileExt = "md";
|
||||||
output = GenerateMarkdownOutput(summary, badgeUrl);
|
output = GenerateMarkdownOutput(summary, badgeUrl);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine("Error: Unknown output format.");
|
Console.WriteLine("Error: Unknown output format.");
|
||||||
return -2; // error
|
return -2; // error
|
||||||
}
|
}
|
||||||
|
|
||||||
// output
|
// output
|
||||||
if (o.Output.Equals("console", StringComparison.OrdinalIgnoreCase))
|
if (o.Output.Equals("console", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
Console.WriteLine(output);
|
Console.WriteLine(output);
|
||||||
}
|
}
|
||||||
else if (o.Output.Equals("file", StringComparison.OrdinalIgnoreCase))
|
else if (o.Output.Equals("file", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
File.WriteAllText($"code-coverage-results.{fileExt}", output);
|
File.WriteAllText($"code-coverage-results.{fileExt}", output);
|
||||||
}
|
}
|
||||||
else if (o.Output.Equals("both", StringComparison.OrdinalIgnoreCase))
|
else if (o.Output.Equals("both", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
Console.WriteLine(output);
|
Console.WriteLine(output);
|
||||||
File.WriteAllText($"code-coverage-results.{fileExt}", output);
|
File.WriteAllText($"code-coverage-results.{fileExt}", output);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine("Error: Unknown output type.");
|
Console.WriteLine("Error: Unknown output type.");
|
||||||
return -2; // error
|
return -2; // error
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0; // success
|
return 0; // success
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Error: {ex.GetType()} - {ex.Message}");
|
Console.WriteLine($"Error: {ex.GetType()} - {ex.Message}");
|
||||||
return -3; // unhandled error
|
return -3; // unhandled error
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
errs => -1); // invalid arguments
|
_ => -1); // invalid arguments
|
||||||
}
|
}
|
||||||
|
|
||||||
private static CodeSummary ParseTestResults(string filename)
|
private static CodeSummary ParseTestResults(string filename)
|
||||||
@@ -136,17 +134,19 @@ namespace CodeCoverageSummary
|
|||||||
var packages = from item in coverage.Descendants("package")
|
var packages = from item in coverage.Descendants("package")
|
||||||
select item;
|
select item;
|
||||||
|
|
||||||
|
int i = 1;
|
||||||
foreach (var item in packages)
|
foreach (var item in packages)
|
||||||
{
|
{
|
||||||
CodeCoverage packageCoverage = new()
|
CodeCoverage packageCoverage = new()
|
||||||
{
|
{
|
||||||
Name = item.Attribute("name").Value,
|
Name = string.IsNullOrWhiteSpace(item.Attribute("name").Value) ? $"Package {i}" : item.Attribute("name").Value,
|
||||||
LineRate = double.Parse(item.Attribute("line-rate").Value),
|
LineRate = double.Parse(item.Attribute("line-rate")?.Value ?? "0"),
|
||||||
BranchRate = double.Parse(item.Attribute("branch-rate").Value),
|
BranchRate = double.Parse(item.Attribute("branch-rate")?.Value ?? "0"),
|
||||||
Complexity = int.Parse(item.Attribute("complexity").Value)
|
Complexity = double.Parse(item.Attribute("complexity")?.Value ?? "0")
|
||||||
};
|
};
|
||||||
summary.Packages.Add(packageCoverage);
|
summary.Packages.Add(packageCoverage);
|
||||||
summary.Complexity += packageCoverage.Complexity;
|
summary.Complexity += packageCoverage.Complexity;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return summary;
|
return summary;
|
||||||
@@ -186,12 +186,27 @@ namespace CodeCoverageSummary
|
|||||||
}
|
}
|
||||||
|
|
||||||
textOutput.AppendLine($"Line Rate = {summary.LineRate * 100:N0}%, Lines Covered = {summary.LinesCovered} / {summary.LinesValid}")
|
textOutput.AppendLine($"Line Rate = {summary.LineRate * 100:N0}%, Lines Covered = {summary.LinesCovered} / {summary.LinesValid}")
|
||||||
.AppendLine($"Branch Rate = {summary.BranchRate * 100:N0}%, Branches Covered = {summary.BranchesCovered} / {summary.BranchesValid}")
|
.AppendLine($"Branch Rate = {summary.BranchRate * 100:N0}%, Branches Covered = {summary.BranchesCovered} / {summary.BranchesValid}");
|
||||||
.AppendLine($"Complexity = {summary.Complexity}");
|
|
||||||
|
if (summary.Complexity % 1 == 0)
|
||||||
|
{
|
||||||
|
textOutput.AppendLine($"Complexity = {summary.Complexity}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
textOutput.AppendLine($"Complexity = {summary.Complexity:N4}");
|
||||||
|
}
|
||||||
|
|
||||||
foreach (CodeCoverage package in summary.Packages)
|
foreach (CodeCoverage package in summary.Packages)
|
||||||
{
|
{
|
||||||
textOutput.AppendLine($"{package.Name}: Line Rate = {package.LineRate * 100:N0}%, Branch Rate = {package.BranchRate * 100:N0}%, Complexity = {package.Complexity}");
|
if (package.Complexity % 1 == 0)
|
||||||
|
{
|
||||||
|
textOutput.AppendLine($"{package.Name}: Line Rate = {package.LineRate * 100:N0}%, Branch Rate = {package.BranchRate * 100:N0}%, Complexity = {package.Complexity}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
textOutput.AppendLine($"{package.Name}: Line Rate = {package.LineRate * 100:N0}%, Branch Rate = {package.BranchRate * 100:N0}%, Complexity = {package.Complexity:N4}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return textOutput.ToString();
|
return textOutput.ToString();
|
||||||
@@ -212,11 +227,27 @@ namespace CodeCoverageSummary
|
|||||||
|
|
||||||
foreach (CodeCoverage package in summary.Packages)
|
foreach (CodeCoverage package in summary.Packages)
|
||||||
{
|
{
|
||||||
markdownOutput.AppendLine($"{package.Name} | {package.LineRate * 100:N0}% | {package.BranchRate * 100:N0}% | {package.Complexity}");
|
if (package.Complexity % 1 == 0)
|
||||||
|
{
|
||||||
|
markdownOutput.AppendLine($"{package.Name} | {package.LineRate * 100:N0}% | {package.BranchRate * 100:N0}% | {package.Complexity}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
markdownOutput.AppendLine($"{package.Name} | {package.LineRate * 100:N0}% | {package.BranchRate * 100:N0}% | {package.Complexity:N4}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
markdownOutput.Append($"**Summary** | **{summary.LineRate * 100:N0}%** ({summary.LinesCovered} / {summary.LinesValid}) | ")
|
markdownOutput.Append($"**Summary** | **{summary.LineRate * 100:N0}%** ({summary.LinesCovered} / {summary.LinesValid}) | ")
|
||||||
.AppendLine($"**{summary.BranchRate * 100:N0}%** ({summary.BranchesCovered} / {summary.BranchesValid}) | {summary.Complexity}");
|
.Append($"**{summary.BranchRate * 100:N0}%** ({summary.BranchesCovered} / {summary.BranchesValid}) | ");
|
||||||
|
|
||||||
|
if (summary.Complexity % 1 == 0)
|
||||||
|
{
|
||||||
|
markdownOutput.AppendLine(summary.Complexity.ToString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
markdownOutput.AppendLine(summary.Complexity.ToString("N4"));
|
||||||
|
}
|
||||||
|
|
||||||
return markdownOutput.ToString();
|
return markdownOutput.ToString();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"profiles": {
|
"profiles": {
|
||||||
"CodeCoverageSummary": {
|
"CodeCoverageSummary": {
|
||||||
"commandName": "Project"
|
"commandName": "Project",
|
||||||
|
"commandLineArgs": "../../../../coverage.gcovr.xml --format=md --badge=true"
|
||||||
},
|
},
|
||||||
"Docker": {
|
"Docker": {
|
||||||
"commandName": "Docker",
|
"commandName": "Docker",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user