Skip to content

Commit 9823ed8

Browse files
committed
Merge branch 'release/0.3.0'
2 parents e17c9af + ada0f7f commit 9823ed8

36 files changed

+1172
-44
lines changed

.appveyor.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
#---------------------------------#
22
# Build Script #
33
#---------------------------------#
4+
install:
5+
# Update to latest NuGet version since we require 5.3.0 for embedded icon
6+
- ps: nuget update -self
7+
48
build_script:
59
- ps: .\build.ps1 -Target AppVeyor
610

711
# Tests
8-
test: off
12+
test_script:
13+
- ps: .\build.ps1 -Target Run-Integration-Tests --exclusive
914

1015
#---------------------------------#
1116
# Branches to build #

.github/CODEOWNERS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# These owners will be the default owners for everything in the repo and
2+
# will be requested for review when someone opens a pull request.
3+
* @pascalberger

Cake.Issues.Recipe/Cake.Issues.Recipe.nuspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ See the Project Site for documentation and an overview of the whole ecosystem of
1414
</description>
1515
<license type="expression">MIT</license>
1616
<projectUrl>https://cakeissues.net</projectUrl>
17-
<iconUrl>https://cdn.jsdelivr.net/gh/cake-contrib/graphics@a5cf0f881c390650144b2243ae551d5b9f836196/png/cake-contrib-medium.png</iconUrl>
17+
<icon>icon.png</icon>
1818
<requireLicenseAcceptance>false</requireLicenseAcceptance>
1919
<repository type="git" url="https://github.com/cake-contrib/Cake.Issues.Recipe.git"/>
2020
<copyright>Copyright © Pascal Berger</copyright>
2121
<tags>Build Cake Cake.Issues Recipe</tags>
22-
<releaseNotes>https://github.com/cake-contrib/Cake.Issues.Recipe/releases/tag/0.2.2</releaseNotes>
22+
<releaseNotes>https://github.com/cake-contrib/Cake.Issues.Recipe/releases/tag/0.3.0</releaseNotes>
2323
</metadata>
2424
</package>

Cake.Issues.Recipe/Content/IssuesBuildTasksDefinitions.cake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ public class IssuesBuildTaskDefinitions
2323
/// </summary>
2424
public CakeTaskBuilder PublishIssuesArtifactsTask { get; set; }
2525

26+
/// <summary>
27+
/// Gets or sets the task for reporting issues to build server.
28+
/// </summary>
29+
public CakeTaskBuilder ReportIssuesToBuildServerTask { get; set; }
30+
2631
/// <summary>
2732
/// Gets or sets the task for creating a summary issue report.
2833
/// </summary>

Cake.Issues.Recipe/Content/addins.cake

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
///////////////////////////////////////////////////////////////////////////////
44

55
#addin nuget:?package=Cake.Git&version=0.21.0
6-
#addin nuget:?package=Cake.Issues&version=0.7.0
7-
#addin nuget:?package=Cake.Issues.MsBuild&version=0.7.0
8-
#addin nuget:?package=Cake.Issues.InspectCode&version=0.7.1
9-
#addin nuget:?package=Cake.Issues.Reporting&version=0.7.0
10-
#addin nuget:?package=Cake.Issues.Reporting.Generic&version=0.7.1
11-
#addin nuget:?package=Cake.Issues.PullRequests&version=0.7.0
12-
#addin nuget:?package=Cake.Issues.PullRequests.Tfs&version=0.7.2
13-
#addin nuget:?package=Cake.Tfs&version=0.3.2
6+
#addin nuget:?package=Cake.Issues&version=0.8.0
7+
#addin nuget:?package=Cake.Issues.MsBuild&version=0.8.0
8+
#addin nuget:?package=Cake.Issues.InspectCode&version=0.8.0
9+
#addin nuget:?package=Cake.Issues.Reporting&version=0.8.0
10+
#addin nuget:?package=Cake.Issues.Reporting.Generic&version=0.8.0
11+
#addin nuget:?package=Cake.Issues.PullRequests&version=0.8.0
12+
#addin nuget:?package=Cake.Issues.PullRequests.AppVeyor&version=0.8.0
13+
#addin nuget:?package=Cake.Issues.PullRequests.AzureDevOps&version=0.8.0
14+
#addin nuget:?package=Cake.AzureDevOps&version=0.4.0

Cake.Issues.Recipe/Content/build.cake

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
#load addins.cake
2+
#load IssuesBuildTasksDefinitions.cake
3+
#load version.cake
14
#load data/data.cake
25
#load parameters/parameters.cake
36

@@ -16,7 +19,7 @@ var IssuesBuildTasks = new IssuesBuildTaskDefinitions();
1619

1720
Setup<IssuesData>(setupContext =>
1821
{
19-
Information("Initializing Cake.Issues.Recipe (Version {0})...", BuildMetaData.Version);
22+
Information("Initializing Cake.Issues.Recipe (Version {0})...", BuildMetaDataCakeIssuesRecipe.Version);
2023
return new IssuesData(setupContext);
2124
});
2225

@@ -27,6 +30,7 @@ Setup<IssuesData>(setupContext =>
2730
IssuesBuildTasks.IssuesTask = Task("Issues")
2831
.Description("Main tasks for issue management integration.")
2932
.IsDependentOn("Publish-IssuesArtifacts")
33+
.IsDependentOn("Report-IssuesToBuildServer")
3034
.IsDependentOn("Create-SummaryIssuesReport")
3135
.IsDependentOn("Report-IssuesToPullRequest")
3236
.IsDependentOn("Set-PullRequestIssuesState");
@@ -35,12 +39,6 @@ IssuesBuildTasks.ReadIssuesTask = Task("Read-Issues")
3539
.Description("Reads issues from the provided log files.")
3640
.Does<IssuesData>((data) =>
3741
{
38-
var settings =
39-
new ReadIssuesSettings(data.RepositoryRootDirectory)
40-
{
41-
Format = IssueCommentFormat.Markdown
42-
};
43-
4442
// Determine which issue providers should be used.
4543
var issueProviders = new List<IIssueProvider>();
4644

@@ -71,7 +69,7 @@ IssuesBuildTasks.ReadIssuesTask = Task("Read-Issues")
7169
data.AddIssues(
7270
ReadIssues(
7371
issueProviders,
74-
settings));
72+
data.RepositoryRootDirectory));
7573

7674
Information("{0} issues are found.", data.Issues.Count());
7775
});
@@ -82,7 +80,15 @@ IssuesBuildTasks.CreateFullIssuesReportTask = Task("Create-FullIssuesReport")
8280
.IsDependentOn("Read-Issues")
8381
.Does<IssuesData>((data) =>
8482
{
85-
data.FullIssuesReport = IssuesParameters.OutputDirectory.CombineWithFilePath("report.html");
83+
var reportFileName = "report";
84+
if (!string.IsNullOrWhiteSpace(IssuesParameters.BuildIdentifier))
85+
{
86+
reportFileName += $"-{IssuesParameters.BuildIdentifier}";
87+
}
88+
reportFileName += ".html";
89+
90+
data.FullIssuesReport =
91+
IssuesParameters.OutputDirectory.CombineWithFilePath(reportFileName);
8692
EnsureDirectoryExists(IssuesParameters.OutputDirectory);
8793

8894
// Create HTML report using DevExpress template.
@@ -99,6 +105,7 @@ IssuesBuildTasks.CreateFullIssuesReportTask = Task("Create-FullIssuesReport")
99105

100106
IssuesBuildTasks.PublishIssuesArtifactsTask = Task("Publish-IssuesArtifacts")
101107
.Description("Publish issue artifacts to build server.")
108+
.WithCriteria(() => !BuildSystem.IsLocalBuild, "Not running on build server")
102109
.IsDependentOn("Create-FullIssuesReport")
103110
.Does<IssuesData>((data) =>
104111
{
@@ -111,8 +118,25 @@ IssuesBuildTasks.PublishIssuesArtifactsTask = Task("Publish-IssuesArtifacts")
111118
data.BuildServer.PublishIssuesArtifacts(Context, data);
112119
});
113120

121+
IssuesBuildTasks.ReportIssuesToBuildServerTask = Task("Report-IssuesToBuildServer")
122+
.Description("Report issues to build server.")
123+
.WithCriteria(() => !BuildSystem.IsLocalBuild, "Not running on build server")
124+
.WithCriteria(() => IssuesParameters.BuildServer.ShouldReportIssuesToBuildServer, "Reporting of issues to build server is disabled")
125+
.IsDependentOn("Read-Issues")
126+
.Does<IssuesData>((data) =>
127+
{
128+
if (data.BuildServer == null)
129+
{
130+
Information("Not supported build server.");
131+
return;
132+
}
133+
134+
data.BuildServer.ReportIssuesToBuildServer(Context, data);
135+
});
136+
114137
IssuesBuildTasks.CreateSummaryIssuesReportTask = Task("Create-SummaryIssuesReport")
115138
.Description("Creates a summary issue report.")
139+
.WithCriteria(() => !BuildSystem.IsLocalBuild, "Not running on build server")
116140
.WithCriteria(() => IssuesParameters.BuildServer.ShouldCreateSummaryIssuesReport, "Creating of summary issues report is disabled")
117141
.IsDependentOn("Read-Issues")
118142
.Does<IssuesData>((data) =>
@@ -128,6 +152,7 @@ IssuesBuildTasks.CreateSummaryIssuesReportTask = Task("Create-SummaryIssuesRepor
128152

129153
IssuesBuildTasks.ReportIssuesToPullRequestTask = Task("Report-IssuesToPullRequest")
130154
.Description("Report issues to pull request.")
155+
.WithCriteria(() => !BuildSystem.IsLocalBuild, "Not running on build server")
131156
.WithCriteria(() => IssuesParameters.PullRequestSystem.ShouldReportIssuesToPullRequest, "Reporting of issues to pull requests is disabled")
132157
.WithCriteria<IssuesData>((context, data) => data.BuildServer != null ? data.BuildServer.DetermineIfPullRequest(context) : false, "Not a pull request build")
133158
.IsDependentOn("Read-Issues")
@@ -144,6 +169,7 @@ IssuesBuildTasks.ReportIssuesToPullRequestTask = Task("Report-IssuesToPullReques
144169

145170
IssuesBuildTasks.SetPullRequestIssuesStateTask = Task("Set-PullRequestIssuesState")
146171
.Description("Set pull request status.")
172+
.WithCriteria(() => !BuildSystem.IsLocalBuild, "Not running on build server")
147173
.WithCriteria(() => IssuesParameters.PullRequestSystem.ShouldSetPullRequestStatus, "Setting of pull request status is disabled")
148174
.WithCriteria<IssuesData>((context, data) => data.BuildServer != null ? data.BuildServer.DetermineIfPullRequest(context) : false, "Not a pull request build")
149175
.IsDependentOn("Read-Issues")

Cake.Issues.Recipe/Content/data/IssuesData.cake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,11 @@ public class IssuesData
117117
return new AzureDevOpsBuildServer();
118118
}
119119

120+
if (context.AppVeyor().IsRunningOnAppVeyor)
121+
{
122+
return new AppVeyorBuildServer();
123+
}
124+
120125
return null;
121126
}
122127

Cake.Issues.Recipe/Content/parameters/IssuesParameters.cake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@ public static class IssuesParameters
1010
/// </summary>
1111
public static DirectoryPath OutputDirectory { get; set; } = "BuildArtifacts";
1212

13+
/// <summary>
14+
/// Gets or sets a identifier for the build run.
15+
/// If set this identifier will be used to identify to artifacts provided by the
16+
/// build if building on multiple configurations.
17+
/// Default value is <c>string.Empty</c>.
18+
/// </summary>
19+
public static string BuildIdentifier { get; set; } = string.Empty;
20+
1321
/// <summary>
1422
/// Gets the parameters for the input files.
1523
/// </summary>

Cake.Issues.Recipe/Content/parameters/IssuesParametersBuildServer.cake

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
/// </summary>
44
public class IssuesParametersBuildServer
55
{
6+
/// <summary>
7+
/// Gets or sets a value indicating whether issues should be reported to the build server.
8+
/// Default value is <c>true</c>.
9+
/// </summary>
10+
public bool ShouldReportIssuesToBuildServer { get; set; } = true;
11+
612
/// <summary>
713
/// Gets or sets a value indicating whether full issues report should be published as artifact to the build system.
814
/// Default value is <c>true</c>.
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
/// <summary>
2+
/// Support for AppVeyor builds.
3+
/// </summary>
4+
public class AppVeyorBuildServer : BaseBuildServer
5+
{
6+
/// <inheritdoc />
7+
public override Uri DetermineRepositoryRemoteUrl(
8+
ICakeContext context,
9+
DirectoryPath repositoryRootDirectory)
10+
{
11+
if (context == null)
12+
{
13+
throw new ArgumentNullException(nameof(context));
14+
}
15+
16+
switch(context.AppVeyor().Environment.Repository.Provider)
17+
{
18+
case "bitBucket": return new System.Uri($"https://bitbucket.org/{context.AppVeyor().Environment.Repository.Name}/src");
19+
case "gitHub": return new System.Uri($"https://github.com/{context.AppVeyor().Environment.Repository.Name}.git");
20+
case "gitLab": return new System.Uri($"https://gitlab.com/{context.AppVeyor().Environment.Repository.Name}.git");
21+
case "vso": return new System.Uri($"https://dev.azure.com/{context.AppVeyor().Environment.Repository.Name}");
22+
default: return new System.Uri(context.AppVeyor().Environment.Repository.Name);
23+
}
24+
}
25+
26+
/// <inheritdoc />
27+
public override bool DetermineIfPullRequest(ICakeContext context)
28+
{
29+
if (context == null)
30+
{
31+
throw new ArgumentNullException(nameof(context));
32+
}
33+
34+
return context.AppVeyor().Environment.PullRequest.IsPullRequest;
35+
}
36+
37+
/// <inheritdoc />
38+
public override int? DeterminePullRequestId(ICakeContext context)
39+
{
40+
if (context == null)
41+
{
42+
throw new ArgumentNullException(nameof(context));
43+
}
44+
45+
return context.AppVeyor().Environment.PullRequest.Number;
46+
}
47+
48+
/// <inheritdoc />
49+
public override void ReportIssuesToBuildServer(
50+
ICakeContext context,
51+
IssuesData data)
52+
{
53+
if (context == null)
54+
{
55+
throw new ArgumentNullException(nameof(context));
56+
}
57+
58+
if (data == null)
59+
{
60+
throw new ArgumentNullException(nameof(data));
61+
}
62+
63+
context.ReportIssuesToPullRequest(
64+
data.Issues,
65+
context.AppVeyorBuilds(),
66+
data.RepositoryRootDirectory);
67+
}
68+
69+
/// <inheritdoc />
70+
public override void CreateSummaryIssuesReport(
71+
ICakeContext context,
72+
IssuesData data,
73+
[System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "")
74+
{
75+
if (context == null)
76+
{
77+
throw new ArgumentNullException(nameof(context));
78+
}
79+
80+
if (data == null)
81+
{
82+
throw new ArgumentNullException(nameof(data));
83+
}
84+
85+
// Summary issues report is not supported for AppVeyor.
86+
}
87+
88+
/// <inheritdoc />
89+
public override void PublishIssuesArtifacts(ICakeContext context, IssuesData data)
90+
{
91+
if (context == null)
92+
{
93+
throw new ArgumentNullException(nameof(context));
94+
}
95+
96+
if (data == null)
97+
{
98+
throw new ArgumentNullException(nameof(data));
99+
}
100+
101+
if (IssuesParameters.BuildServer.ShouldPublishFullIssuesReport &&
102+
data.FullIssuesReport != null &&
103+
context.FileExists(data.FullIssuesReport))
104+
{
105+
context.AppVeyor().UploadArtifact(data.FullIssuesReport);
106+
}
107+
}
108+
}

Cake.Issues.Recipe/Content/tasks/buildservers/AzureDevOpsBuildServer.cake

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ public class AzureDevOpsBuildServer : BaseBuildServer
4646
}
4747
}
4848

49+
/// <inheritdoc />
50+
public override void ReportIssuesToBuildServer(
51+
ICakeContext context,
52+
IssuesData data)
53+
{
54+
// Not implemented for Azure DevOps
55+
}
4956

5057
/// <inheritdoc />
5158
public override void CreateSummaryIssuesReport(
@@ -63,17 +70,23 @@ public class AzureDevOpsBuildServer : BaseBuildServer
6370
throw new ArgumentNullException(nameof(data));
6471
}
6572

66-
var summaryFile = IssuesParameters.OutputDirectory.CombineWithFilePath("summary.md");
73+
var summaryFileName = "summary";
74+
if (!string.IsNullOrWhiteSpace(IssuesParameters.BuildIdentifier))
75+
{
76+
summaryFileName += $"-{IssuesParameters.BuildIdentifier}";
77+
}
78+
summaryFileName += ".md";
79+
var summaryFilePath = IssuesParameters.OutputDirectory.CombineWithFilePath(summaryFileName);
6780

6881
// Create summary for Azure Pipelines using custom template.
6982
context.CreateIssueReport(
7083
data.Issues,
7184
context.GenericIssueReportFormatFromFilePath(
7285
new FilePath(sourceFilePath).GetDirectory().Combine("tasks").Combine("buildservers").CombineWithFilePath("AzurePipelineSummary.cshtml")),
7386
data.RepositoryRootDirectory,
74-
summaryFile);
87+
summaryFilePath);
7588

76-
context.TFBuild().Commands.UploadTaskSummary(summaryFile);
89+
context.TFBuild().Commands.UploadTaskSummary(summaryFilePath);
7790
}
7891

7992
/// <inheritdoc />

Cake.Issues.Recipe/Content/tasks/buildservers/AzurePipelineSummary.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ There are @Model.Count() issues in the code.
3838
@issue.Rule;
3939
}
4040
</td>
41-
<td>@issue.Message</td>
41+
<td>@issue.Message(IssueCommentFormat.Html)</td>
4242
</tr>
4343
}
4444
</tbody>

Cake.Issues.Recipe/Content/tasks/buildservers/BaseBuildServer.cake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ public abstract class BaseBuildServer : IIssuesBuildServer
4444
return null;
4545
}
4646

47+
/// <inheritdoc />
48+
public abstract void ReportIssuesToBuildServer(
49+
ICakeContext context,
50+
IssuesData data);
51+
4752
/// <inheritdoc />
4853
public abstract void CreateSummaryIssuesReport(
4954
ICakeContext context,

0 commit comments

Comments
 (0)