Skip to content
This repository has been archived by the owner on Jul 5, 2024. It is now read-only.

Commit

Permalink
Add title, body and draft release flag.
Browse files Browse the repository at this point in the history
Also included the release notes in the release body. Switched check to check against the tag instead of the title.
  • Loading branch information
sirdoombox committed Aug 21, 2022
1 parent 4c20e31 commit ad538b2
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 13 deletions.
28 changes: 16 additions & 12 deletions src/Squirrel.CommandLine/Sync/GitHubRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
8 changes: 7 additions & 1 deletion src/Squirrel.CommandLine/SyncOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down

0 comments on commit ad538b2

Please sign in to comment.