|
1 | 1 | #tool "nuget:?package=GitVersion.CommandLine&version=5.0.1"
|
2 |
| -#tool "nuget:?package=GitReleaseNotes" |
3 | 2 | #addin nuget:?package=Cake.Json
|
4 | 3 | #addin nuget:?package=Newtonsoft.Json
|
5 | 4 | #addin nuget:?package=System.Net.Http
|
@@ -63,6 +62,9 @@ Task("Default")
|
63 | 62 | Task("Build")
|
64 | 63 | .IsDependentOn("RunTests");
|
65 | 64 |
|
| 65 | +Task("ReleaseNotes") |
| 66 | + .IsDependentOn("CreateReleaseNotes"); |
| 67 | + |
66 | 68 | Task("RunTests")
|
67 | 69 | .IsDependentOn("RunUnitTests")
|
68 | 70 | .IsDependentOn("RunAcceptanceTests")
|
@@ -96,8 +98,62 @@ Task("Clean")
|
96 | 98 | }
|
97 | 99 | CreateDirectory(artifactsDir);
|
98 | 100 | });
|
| 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 | + }); |
99 | 154 |
|
100 | 155 | Task("Version")
|
| 156 | + .IsDependentOn("CreateReleaseNotes") |
101 | 157 | .Does(() =>
|
102 | 158 | {
|
103 | 159 | versioning = GetNuGetVersionForCommit();
|
@@ -210,17 +266,13 @@ Task("CreateArtifacts")
|
210 | 266 |
|
211 | 267 | CopyFiles("./src/**/Release/Ocelot.*.nupkg", packagesDir);
|
212 | 268 |
|
213 |
| - // todo fix this for docker build |
214 |
| - //GenerateReleaseNotes(releaseNotesFile); |
215 |
| - |
216 | 269 | var projectFiles = GetFiles("./src/**/Release/Ocelot.*.nupkg");
|
217 | 270 |
|
218 | 271 | foreach(var projectFile in projectFiles)
|
219 | 272 | {
|
220 | 273 | System.IO.File.AppendAllLines(artifactsFile, new[]{
|
221 | 274 | projectFile.GetFilename().FullPath,
|
222 |
| - // todo fix this for docker build |
223 |
| - //"releaseNotes:releasenotes.md" |
| 275 | + "releaseNotes:releasenotes.md" |
224 | 276 | });
|
225 | 277 | }
|
226 | 278 |
|
@@ -339,32 +391,6 @@ private void PersistVersion(string committedVersion, string newVersion)
|
339 | 391 | }
|
340 | 392 | }
|
341 | 393 |
|
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 |
| - |
368 | 394 | /// Publishes code and symbols packages to nuget feed, based on contents of artifacts file
|
369 | 395 | private void PublishPackages(ConvertableDirectoryPath packagesDir, ConvertableFilePath artifactsFile, string feedApiKey, string codeFeedUrl, string symbolFeedUrl)
|
370 | 396 | {
|
@@ -392,7 +418,7 @@ private void PublishPackages(ConvertableDirectoryPath packagesDir, ConvertableFi
|
392 | 418 |
|
393 | 419 | private void CreateGitHubRelease()
|
394 | 420 | {
|
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 }}"; |
396 | 422 | var content = new System.Net.Http.StringContent(json, System.Text.Encoding.UTF8, "application/json");
|
397 | 423 |
|
398 | 424 | using(var client = new System.Net.Http.HttpClient())
|
@@ -442,7 +468,7 @@ private void UploadFileToGitHubRelease(FilePath file)
|
442 | 468 |
|
443 | 469 | private void CompleteGitHubRelease()
|
444 | 470 | {
|
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 }}"; |
446 | 472 | var request = new System.Net.Http.HttpRequestMessage(new System.Net.Http.HttpMethod("Patch"), $"https://api.github.com/repos/ThreeMammals/Ocelot/releases/{releaseId}");
|
447 | 473 | request.Content = new System.Net.Http.StringContent(json, System.Text.Encoding.UTF8, "application/json");
|
448 | 474 |
|
|
0 commit comments