From ad538b2b6a60fe30f36eceac11ab73354ecda9a9 Mon Sep 17 00:00:00 2001 From: Aaron Date: Sun, 21 Aug 2022 10:41:47 +0100 Subject: [PATCH] Add title, body and draft release flag. Also included the release notes in the release body. Switched check to check against the tag instead of the title. --- .../Sync/GitHubRepository.cs | 28 +++++++++++-------- src/Squirrel.CommandLine/SyncOptions.cs | 8 +++++- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/Squirrel.CommandLine/Sync/GitHubRepository.cs b/src/Squirrel.CommandLine/Sync/GitHubRepository.cs index f7150ae6a..191a2877c 100644 --- a/src/Squirrel.CommandLine/Sync/GitHubRepository.cs +++ b/src/Squirrel.CommandLine/Sync/GitHubRepository.cs @@ -89,35 +89,39 @@ public async Task UploadMissingPackages() if (releases.Length == 0) throw new Exception("There are no nupkg's in the releases directory to upload"); - var ver = releases.Select(r => r.Version).Max(); - if (ver == null) + var ver = Enumerable.MaxBy(releases, x => x.Version); + if(ver == null) throw new Exception("There are no nupkg's in the releases directory to upload"); + var semVer = ver.Version; Log.Info($"Preparing to upload latest local release to GitHub"); - var newReleaseReq = new NewRelease(ver.ToString()) { - Body = "TODO", // TODO, this should use the release notes from the release, if they exist - Draft = true, - Prerelease = ver.HasMetadata || ver.IsPrerelease, - Name = ver.ToString(), + + var newReleaseReq = new NewRelease(semVer.ToString()) { + Body = _options.body + "\r\n" + ver.GetReleaseNotes(releaseDirectoryInfo.FullName), + Draft = _options.draft, + Prerelease = semVer.HasMetadata || semVer.IsPrerelease, + Name = string.IsNullOrWhiteSpace(_options.name) + ? semVer.ToString() + : _options.name, }; - Log.Info($"Creating draft release titled '{ver.ToString()}'"); + Log.Info($"Creating draft release titled '{semVer.ToString()}'"); var existingReleases = await client.Repository.Release.GetAll(repoOwner, repoName); - if (existingReleases.Any(r => r.Name == ver.ToString())) { - throw new Exception($"There is already an existing release titled '{ver}'. Please delete this release or choose a new version number."); + if (existingReleases.Any(r => r.TagName == semVer.ToString())) { + throw new Exception($"There is already an existing release titled '{semVer}'. Please delete this release or choose a new version number."); } var release = await client.Repository.Release.Create(repoOwner, repoName, newReleaseReq); // locate files to upload var files = releaseDirectoryInfo.GetFiles("*", SearchOption.TopDirectoryOnly); - var msiFile = files.Where(f => f.FullName.EndsWith(".msi", StringComparison.InvariantCultureIgnoreCase)).SingleOrDefault(); + var msiFile = files.SingleOrDefault(f => f.FullName.EndsWith(".msi", StringComparison.InvariantCultureIgnoreCase)); var setupFile = files.Where(f => f.FullName.EndsWith("Setup.exe", StringComparison.InvariantCultureIgnoreCase)) .ContextualSingle("release directory", "Setup.exe file"); - var releasesToUpload = releases.Where(x => x.Version == ver).ToArray(); + var releasesToUpload = releases.Where(x => x.Version == semVer).ToArray(); MemoryStream releasesFileToUpload = new MemoryStream(); ReleaseEntry.WriteReleaseFile(releasesToUpload, releasesFileToUpload); var releasesBytes = releasesFileToUpload.ToArray(); diff --git a/src/Squirrel.CommandLine/SyncOptions.cs b/src/Squirrel.CommandLine/SyncOptions.cs index af3218220..61e35063b 100644 --- a/src/Squirrel.CommandLine/SyncOptions.cs +++ b/src/Squirrel.CommandLine/SyncOptions.cs @@ -85,12 +85,18 @@ internal class SyncGithubOptions : BaseOptions public string repoUrl { get; private set; } public string token { get; private set; } public bool pre { get; private set; } + public bool draft { get; private set; } + public string name { get; private set; } + public string body { get; private set; } public SyncGithubOptions() { Add("repoUrl=", "Full url to the github repository\nexample: 'https://github.com/myname/myrepo'", v => repoUrl = v); Add("token=", "OAuth token to use as login credentials", v => token = v); - Add("pre", "Download pre-release instead of stable", v => pre = true); + Add("pre", "Download pre-release instead of stable", _ => pre = true); + Add("draft", "(up only) Mark release as draft", _ => draft = true); + Add("name=", "(up only) Name of the release", v => name = v); + Add("body=", "(up only) Body of the release, will be written before the release notes.", v => body = v); } public override void Validate()