Skip to content

Commit 2e600ce

Browse files
committed
(#306) Add GitHub Report Printer
This will be used to improve the Cake output when running on GitHub Actions. This includes the task summary being written out to the Step Summary. With the latest releases of Cake, the task summary is written out even when there is a failed build, so this means that we can capture that output into the Step Summary, to get an overview of which task might have failed the build.
1 parent 1ec4555 commit 2e600ce

10 files changed

Lines changed: 127 additions & 10 deletions

File tree

src/Cake.AzurePipelines.Module/Cake.AzurePipelines.Module.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net10.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
<GenerateDocumentationFile>true</GenerateDocumentationFile>
66
<AssemblyName>Cake.AzurePipelines.Module</AssemblyName>
77
<IsPackable>false</IsPackable>

src/Cake.BuildSystems.Module/Cake.BuildSystems.Module.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net10.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
<IncludeBuildOutput>false</IncludeBuildOutput>
66
<IsPackable>true</IsPackable>
77
<IncludeSymbols>true</IncludeSymbols>
@@ -58,7 +58,7 @@
5858
</ItemGroup>
5959

6060
<ItemGroup>
61-
<PackageReference Include="CakeContrib.Guidelines" Version="1.6.1">
61+
<PackageReference Include="CakeContrib.Guidelines" Version="1.7.0">
6262
<PrivateAssets>all</PrivateAssets>
6363
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
6464
</PackageReference>

src/Cake.GitHubActions.Module/Cake.GitHubActions.Module.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net10.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
<GenerateDocumentationFile>true</GenerateDocumentationFile>
66
<AssemblyName>Cake.GitHubActions.Module</AssemblyName>
77
<IsPackable>false</IsPackable>

src/Cake.GitHubActions.Module/GitHubActionsModule.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Cake.Core;
1+
using Cake.Core;
22
using Cake.Core.Annotations;
33
using Cake.Core.Composition;
44
using Cake.Core.Diagnostics;
@@ -22,6 +22,7 @@ public void Register(ICakeContainerRegistrar registrar)
2222

2323
registrar.RegisterType<GitHubActionsEngine>().As<ICakeEngine>().Singleton();
2424
registrar.RegisterType<GitHubActionsLog>().As<ICakeLog>().Singleton();
25+
registrar.RegisterType<GitHubActionsReportPrinter>().As<ICakeReportPrinter>().Singleton();
2526
}
2627
}
2728
}
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
using System;
2+
using System.Linq;
3+
using System.Text;
4+
using Cake.Common.Build;
5+
using Cake.Core;
6+
using Cake.Core.Diagnostics;
7+
using Cake.Module.Shared;
8+
using JetBrains.Annotations;
9+
10+
namespace Cake.GitHubActions.Module
11+
{
12+
/// <summary>
13+
/// The GitHub Actions report printer.
14+
/// </summary>
15+
[UsedImplicitly]
16+
public class GitHubActionsReportPrinter : CakeReportPrinterBase
17+
{
18+
/// <summary>
19+
/// Initializes a new instance of the <see cref="GitHubActionsReportPrinter"/> class.
20+
/// </summary>
21+
/// <param name="console">The console.</param>
22+
/// <param name="context">The context.</param>
23+
public GitHubActionsReportPrinter(IConsole console, ICakeContext context)
24+
: base(console, context)
25+
{
26+
}
27+
28+
/// <inheritdoc />
29+
public override void Write(CakeReport report)
30+
{
31+
if (report == null)
32+
{
33+
throw new ArgumentNullException(nameof(report));
34+
}
35+
36+
try
37+
{
38+
if (_context.GitHubActions().IsRunningOnGitHubActions)
39+
{
40+
WriteToMarkdown(report);
41+
}
42+
43+
WriteToConsole(report);
44+
}
45+
finally
46+
{
47+
_console.ResetColor();
48+
}
49+
}
50+
51+
/// <inheritdoc />
52+
public override void WriteLifeCycleStep(string name, Verbosity verbosity)
53+
{
54+
// Intentionally left blank
55+
}
56+
57+
/// <inheritdoc />
58+
public override void WriteSkippedStep(string name, Verbosity verbosity)
59+
{
60+
// Intentionally left blank
61+
}
62+
63+
/// <inheritdoc />
64+
public override void WriteStep(string name, Verbosity verbosity)
65+
{
66+
// Intentionally left blank
67+
}
68+
69+
private void WriteToMarkdown(CakeReport report)
70+
{
71+
var includeSkippedReasonColumn = report.Any(r => !string.IsNullOrEmpty(r.SkippedMessage));
72+
73+
var sb = new StringBuilder();
74+
sb.AppendLine(string.Empty);
75+
76+
if (includeSkippedReasonColumn)
77+
{
78+
sb.AppendLine("|Task|Duration|Status|Skip Reason|");
79+
sb.AppendLine("|----|--------|------|-----------|");
80+
}
81+
else
82+
{
83+
sb.AppendLine("|Task|Duration|Status|");
84+
sb.AppendLine("|----|--------|------|");
85+
}
86+
87+
foreach (var item in report)
88+
{
89+
if (ShouldWriteTask(item))
90+
{
91+
if (includeSkippedReasonColumn)
92+
{
93+
sb.AppendLine(string.Format("|{0}|{1}|{2}|{3}|", item.TaskName, FormatDuration(item), item.ExecutionStatus.ToReportStatus(), item.SkippedMessage));
94+
}
95+
else
96+
{
97+
sb.AppendLine(string.Format("|{0}|{1}|{2}|", item.TaskName, FormatDuration(item), item.ExecutionStatus.ToReportStatus()));
98+
}
99+
}
100+
}
101+
102+
if (includeSkippedReasonColumn)
103+
{
104+
sb.AppendLine("|||||");
105+
sb.AppendLine(string.Format("|**_{0}_**|**_{1}_**|||", "Total:", GetTotalTime(report)));
106+
}
107+
else
108+
{
109+
sb.AppendLine("||||");
110+
sb.AppendLine(string.Format("|**_{0}_**|**_{1}_**||", "Total:", GetTotalTime(report)));
111+
}
112+
113+
_context.GitHubActions().Commands.SetStepSummary(sb.ToString());
114+
}
115+
}
116+
}

src/Cake.GitLabCI.Module/Cake.GitLabCI.Module.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net10.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
<GenerateDocumentationFile>true</GenerateDocumentationFile>
66
<AssemblyName>Cake.GitLabCI.Module</AssemblyName>
77
<IsPackable>false</IsPackable>

src/Cake.Module.Shared/Cake.Module.Shared.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net10.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
<GenerateDocumentationFile>true</GenerateDocumentationFile>
66
<AssemblyName>Cake.Module.Shared</AssemblyName>
77
<IsPackable>false</IsPackable>

src/Cake.MyGet.Module/Cake.MyGet.Module.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net10.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
<GenerateDocumentationFile>true</GenerateDocumentationFile>
66
<AssemblyName>Cake.MyGet.Module</AssemblyName>
77
<IsPackable>false</IsPackable>

src/Cake.TeamCity.Module/Cake.TeamCity.Module.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net10.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
<GenerateDocumentationFile>true</GenerateDocumentationFile>
66
<AssemblyName>Cake.TeamCity.Module</AssemblyName>
77
<IsPackable>false</IsPackable>

src/Cake.TravisCI.Module/Cake.TravisCI.Module.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net10.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
<GenerateDocumentationFile>true</GenerateDocumentationFile>
66
<AssemblyName>Cake.TravisCI.Module</AssemblyName>
77
<IsPackable>false</IsPackable>

0 commit comments

Comments
 (0)