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.
This commit is contained in:
Aaron
2022-08-21 10:41:47 +01:00
parent 4c20e31784
commit ad538b2b6a
2 changed files with 23 additions and 13 deletions

View File

@@ -89,35 +89,39 @@ namespace Squirrel.CommandLine.Sync
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();

View File

@@ -85,12 +85,18 @@ namespace Squirrel.CommandLine
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()