Skip to content

Commit 1a280dd

Browse files
authored
#1150: added simple way to get release notes using cake and git
1 parent b280b1c commit 1a280dd

File tree

5 files changed

+64
-36
lines changed

5 files changed

+64
-36
lines changed

Makefile

+3
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@ run_benchmarks:
1717

1818
run_unit_tests:
1919
./build.sh --target=RunUnitTests
20+
21+
release_notes:
22+
./build.sh --target=ReleaseNotes
2023

Ocelot.sln

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
1515
GitVersion.yml = GitVersion.yml
1616
LICENSE.md = LICENSE.md
1717
README.md = README.md
18-
ReleaseNotes.md = ReleaseNotes.md
18+
releasenotes.md = releasenotes.md
1919
EndProjectSection
2020
EndProject
2121
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{5B401523-36DA-4491-B73A-7590A26E420B}"

ReleaseNotes.md

-1
This file was deleted.

build.cake

+60-34
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#tool "nuget:?package=GitVersion.CommandLine&version=5.0.1"
2-
#tool "nuget:?package=GitReleaseNotes"
32
#addin nuget:?package=Cake.Json
43
#addin nuget:?package=Newtonsoft.Json
54
#addin nuget:?package=System.Net.Http
@@ -63,6 +62,9 @@ Task("Default")
6362
Task("Build")
6463
.IsDependentOn("RunTests");
6564

65+
Task("ReleaseNotes")
66+
.IsDependentOn("CreateReleaseNotes");
67+
6668
Task("RunTests")
6769
.IsDependentOn("RunUnitTests")
6870
.IsDependentOn("RunAcceptanceTests")
@@ -96,8 +98,62 @@ Task("Clean")
9698
}
9799
CreateDirectory(artifactsDir);
98100
});
101+
102+
Task("CreateReleaseNotes")
103+
.Does(() =>
104+
{
105+
Information("Generating release notes at " + releaseNotesFile);
106+
107+
IEnumerable<string> lastReleaseTag;
108+
109+
var lastReleaseTagExitCode = StartProcess(
110+
"git",
111+
new ProcessSettings {
112+
Arguments = "describe --tags --abbrev=0",
113+
RedirectStandardOutput = true
114+
},
115+
out lastReleaseTag
116+
);
117+
118+
if (lastReleaseTagExitCode != 0)
119+
{
120+
throw new Exception("Failed to get latest release tag");
121+
}
122+
123+
var lastRelease = lastReleaseTag.First();
124+
125+
Information("Last release tag is " + lastRelease);
126+
127+
IEnumerable<string> releaseNotes;
128+
129+
var releaseNotesExitCode = StartProcess(
130+
"git",
131+
new ProcessSettings {
132+
Arguments = $"log --pretty=format:\"%h - %an - %s\" {lastRelease}..HEAD",
133+
RedirectStandardOutput = true
134+
},
135+
out releaseNotes
136+
);
137+
138+
if (releaseNotesExitCode != 0)
139+
{
140+
throw new Exception("Failed to generate release notes");
141+
}
142+
143+
EnsureDirectoryExists(packagesDir);
144+
145+
System.IO.File.WriteAllLines(releaseNotesFile, releaseNotes);
146+
147+
if (string.IsNullOrEmpty(System.IO.File.ReadAllText(releaseNotesFile)))
148+
{
149+
System.IO.File.WriteAllText(releaseNotesFile, "No commits since last release");
150+
}
151+
152+
Information("Release notes are\r\n" + System.IO.File.ReadAllText(releaseNotesFile));
153+
});
99154

100155
Task("Version")
156+
.IsDependentOn("CreateReleaseNotes")
101157
.Does(() =>
102158
{
103159
versioning = GetNuGetVersionForCommit();
@@ -210,17 +266,13 @@ Task("CreateArtifacts")
210266

211267
CopyFiles("./src/**/Release/Ocelot.*.nupkg", packagesDir);
212268

213-
// todo fix this for docker build
214-
//GenerateReleaseNotes(releaseNotesFile);
215-
216269
var projectFiles = GetFiles("./src/**/Release/Ocelot.*.nupkg");
217270

218271
foreach(var projectFile in projectFiles)
219272
{
220273
System.IO.File.AppendAllLines(artifactsFile, new[]{
221274
projectFile.GetFilename().FullPath,
222-
// todo fix this for docker build
223-
//"releaseNotes:releasenotes.md"
275+
"releaseNotes:releasenotes.md"
224276
});
225277
}
226278

@@ -339,32 +391,6 @@ private void PersistVersion(string committedVersion, string newVersion)
339391
}
340392
}
341393

342-
/// generates release notes based on issues closed in GitHub since the last release
343-
private void GenerateReleaseNotes(ConvertableFilePath file)
344-
{
345-
if(!IsRunningOnWindows())
346-
{
347-
Warning("We are not running on Windows so we cannot generate release notes.");
348-
return;
349-
}
350-
351-
Information("Generating release notes at " + file);
352-
353-
var releaseNotesExitCode = StartProcess(
354-
@"tools/GitReleaseNotes/tools/gitreleasenotes.exe",
355-
new ProcessSettings { Arguments = ". /o " + file });
356-
357-
if (string.IsNullOrEmpty(System.IO.File.ReadAllText(file)))
358-
{
359-
System.IO.File.WriteAllText(file, "No issues closed since last release");
360-
}
361-
362-
if (releaseNotesExitCode != 0)
363-
{
364-
throw new Exception("Failed to generate release notes");
365-
}
366-
}
367-
368394
/// Publishes code and symbols packages to nuget feed, based on contents of artifacts file
369395
private void PublishPackages(ConvertableDirectoryPath packagesDir, ConvertableFilePath artifactsFile, string feedApiKey, string codeFeedUrl, string symbolFeedUrl)
370396
{
@@ -392,7 +418,7 @@ private void PublishPackages(ConvertableDirectoryPath packagesDir, ConvertableFi
392418

393419
private void CreateGitHubRelease()
394420
{
395-
var json = $"{{ \"tag_name\": \"{versioning.NuGetVersion}\", \"target_commitish\": \"master\", \"name\": \"{versioning.NuGetVersion}\", \"body\": \"todo: notes coming\", \"draft\": true, \"prerelease\": true }}";
421+
var json = $"{{ \"tag_name\": \"{versioning.NuGetVersion}\", \"target_commitish\": \"master\", \"name\": \"{versioning.NuGetVersion}\", \"body\": \"{System.IO.File.ReadAllText(releaseNotesFile)}\", \"draft\": true, \"prerelease\": true }}";
396422
var content = new System.Net.Http.StringContent(json, System.Text.Encoding.UTF8, "application/json");
397423

398424
using(var client = new System.Net.Http.HttpClient())
@@ -442,7 +468,7 @@ private void UploadFileToGitHubRelease(FilePath file)
442468

443469
private void CompleteGitHubRelease()
444470
{
445-
var json = $"{{ \"tag_name\": \"{versioning.NuGetVersion}\", \"target_commitish\": \"master\", \"name\": \"{versioning.NuGetVersion}\", \"body\": \"todo: notes coming\", \"draft\": false, \"prerelease\": false }}";
471+
var json = $"{{ \"tag_name\": \"{versioning.NuGetVersion}\", \"target_commitish\": \"master\", \"name\": \"{versioning.NuGetVersion}\", \"body\": \"{System.IO.File.ReadAllText(releaseNotesFile)}\", \"draft\": false, \"prerelease\": false }}";
446472
var request = new System.Net.Http.HttpRequestMessage(new System.Net.Http.HttpMethod("Patch"), $"https://api.github.com/repos/ThreeMammals/Ocelot/releases/{releaseId}");
447473
request.Content = new System.Net.Http.StringContent(json, System.Text.Encoding.UTF8, "application/json");
448474

releasenotes.md

Whitespace-only changes.

0 commit comments

Comments
 (0)