mirror of
https://github.com/velopack/velopack.git
synced 2025-10-25 15:19:22 +00:00
Vpk Upload GitHub - add targetCommitish option
This commit is contained in:
@@ -25,6 +25,8 @@ public class GitHubUploadOptions : GitHubDownloadOptions
|
|||||||
|
|
||||||
public string TagName { get; set; }
|
public string TagName { get; set; }
|
||||||
|
|
||||||
|
public string TargetCommitish { get; set; }
|
||||||
|
|
||||||
public bool Merge { get; set; }
|
public bool Merge { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,6 +94,7 @@ public class GitHubRepository : SourceRepository<GitHubDownloadOptions, GithubSo
|
|||||||
Draft = true,
|
Draft = true,
|
||||||
Prerelease = options.Prerelease,
|
Prerelease = options.Prerelease,
|
||||||
Name = string.IsNullOrWhiteSpace(options.ReleaseName) ? semVer.ToString() : options.ReleaseName,
|
Name = string.IsNullOrWhiteSpace(options.ReleaseName) ? semVer.ToString() : options.ReleaseName,
|
||||||
|
TargetCommitish = options.TargetCommitish,
|
||||||
};
|
};
|
||||||
Log.Info($"Creating draft release titled '{newReleaseReq.Name}'");
|
Log.Info($"Creating draft release titled '{newReleaseReq.Name}'");
|
||||||
release = await client.Repository.Release.Create(repoOwner, repoName, newReleaseReq);
|
release = await client.Repository.Release.Create(repoOwner, repoName, newReleaseReq);
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ public class GitHubUploadCommand : GitHubBaseCommand
|
|||||||
|
|
||||||
public string TagName { get; private set; }
|
public string TagName { get; private set; }
|
||||||
|
|
||||||
|
public string TargetCommitish { get; private set; }
|
||||||
|
|
||||||
public bool Prerelease { get; private set; }
|
public bool Prerelease { get; private set; }
|
||||||
|
|
||||||
public bool Merge { get; private set; }
|
public bool Merge { get; private set; }
|
||||||
@@ -32,6 +34,10 @@ public class GitHubUploadCommand : GitHubBaseCommand
|
|||||||
.SetDescription("A custom tag for the release.")
|
.SetDescription("A custom tag for the release.")
|
||||||
.SetArgumentHelpName("NAME");
|
.SetArgumentHelpName("NAME");
|
||||||
|
|
||||||
|
AddOption<string>((v) => TargetCommitish = v, "--targetCommitish")
|
||||||
|
.SetDescription("A commitish value for tag (branch or commit SHA).")
|
||||||
|
.SetArgumentHelpName("NAME");
|
||||||
|
|
||||||
ReleaseDirectoryOption.SetRequired();
|
ReleaseDirectoryOption.SetRequired();
|
||||||
ReleaseDirectoryOption.MustNotBeEmpty();
|
ReleaseDirectoryOption.MustNotBeEmpty();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,4 +97,26 @@ public class GitHubUploadCommandTests : GitHubCommandTests<GitHubUploadCommand>
|
|||||||
|
|
||||||
Assert.Equal("my release", command.ReleaseName);
|
Assert.Equal("my release", command.ReleaseName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Tag_WithTag_ParsesValue()
|
||||||
|
{
|
||||||
|
var command = new GitHubUploadCommand();
|
||||||
|
|
||||||
|
string cli = GetRequiredDefaultOptions() + $"--tag \"v1.2.3\"";
|
||||||
|
ParseResult parseResult = command.ParseAndApply(cli);
|
||||||
|
|
||||||
|
Assert.Equal("v1.2.3", command.TagName);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TargetCommitish_WithTargetCommitish_ParsesValue()
|
||||||
|
{
|
||||||
|
var command = new GitHubUploadCommand();
|
||||||
|
|
||||||
|
string cli = GetRequiredDefaultOptions() + $"--targetCommitish \"main\"";
|
||||||
|
ParseResult parseResult = command.ParseAndApply(cli);
|
||||||
|
|
||||||
|
Assert.Equal("main", command.TargetCommitish);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -184,22 +184,95 @@ This is just a _test_!
|
|||||||
Assert.True(File.Exists(Path.Combine(releaseDirNew, filename)));
|
Assert.True(File.Exists(Path.Combine(releaseDirNew, filename)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[SkippableFact]
|
||||||
|
public void WillCreateTagOnDefaultBranchIfTargetCommitishNotSet()
|
||||||
|
{
|
||||||
|
Skip.If(String.IsNullOrWhiteSpace(GITHUB_TOKEN), "VELOPACK_GITHUB_TEST_TOKEN is not set.");
|
||||||
|
using var logger = _output.BuildLoggerFor<GithubDeploymentTests>();
|
||||||
|
using var _1 = Utility.GetTempDirectory(out var releaseDir);
|
||||||
|
using var ghvar = GitHubReleaseTest.Create("targetCommitish", logger, true);
|
||||||
|
var (repoOwner, repoName) = GitHubRepository.GetOwnerAndRepo(GITHUB_REPOURL);
|
||||||
|
var id = "GithubUpdateTest";
|
||||||
|
var releaseName = ghvar.ReleaseName;
|
||||||
|
var client = ghvar.Client;
|
||||||
|
var uniqueSuffix = ghvar.UniqueSuffix;
|
||||||
|
var version = $"0.0.1-{uniqueSuffix}";
|
||||||
|
TestApp.PackTestApp(id, version, "t1", releaseDir, logger, channel: uniqueSuffix);
|
||||||
|
|
||||||
|
var gh = new GitHubRepository(logger);
|
||||||
|
var options = new GitHubUploadOptions {
|
||||||
|
ReleaseName = releaseName,
|
||||||
|
ReleaseDir = new DirectoryInfo(releaseDir),
|
||||||
|
RepoUrl = GITHUB_REPOURL,
|
||||||
|
Token = GITHUB_TOKEN,
|
||||||
|
Prerelease = false,
|
||||||
|
Publish = true,
|
||||||
|
Channel = uniqueSuffix,
|
||||||
|
TagName = version
|
||||||
|
};
|
||||||
|
|
||||||
|
gh.UploadMissingAssetsAsync(options).GetAwaiterResult();
|
||||||
|
|
||||||
|
var expected = "main"; //Default branch in VelopackGithubUpdateTest repo
|
||||||
|
var newRelease = client.Repository.Release.GetAll(repoOwner, repoName).GetAwaiterResult().Single(s => s.Name == releaseName);
|
||||||
|
Assert.Equal(expected, newRelease.TargetCommitish);
|
||||||
|
}
|
||||||
|
|
||||||
|
[SkippableTheory]
|
||||||
|
[InlineData("main")]
|
||||||
|
[InlineData("31fca3d97e657a4fbee076462c5efb271f074656")] //Commit SHA in VelopackGithubUpdateTest repo
|
||||||
|
public void WillCreateTagUsingTargetCommitish(string targetCommitish)
|
||||||
|
{
|
||||||
|
Skip.If(String.IsNullOrWhiteSpace(GITHUB_TOKEN), "VELOPACK_GITHUB_TEST_TOKEN is not set.");
|
||||||
|
using var logger = _output.BuildLoggerFor<GithubDeploymentTests>();
|
||||||
|
using var _1 = Utility.GetTempDirectory(out var releaseDir);
|
||||||
|
using var ghvar = GitHubReleaseTest.Create("targetCommitish", logger, true);
|
||||||
|
var (repoOwner, repoName) = GitHubRepository.GetOwnerAndRepo(GITHUB_REPOURL);
|
||||||
|
var id = "GithubUpdateTest";
|
||||||
|
var releaseName = ghvar.ReleaseName;
|
||||||
|
var client = ghvar.Client;
|
||||||
|
var uniqueSuffix = ghvar.UniqueSuffix;
|
||||||
|
var version = $"0.0.1-{uniqueSuffix}";
|
||||||
|
TestApp.PackTestApp(id, version, "t1", releaseDir, logger, channel: uniqueSuffix);
|
||||||
|
|
||||||
|
var gh = new GitHubRepository(logger);
|
||||||
|
var options = new GitHubUploadOptions {
|
||||||
|
ReleaseName = releaseName,
|
||||||
|
ReleaseDir = new DirectoryInfo(releaseDir),
|
||||||
|
RepoUrl = GITHUB_REPOURL,
|
||||||
|
Token = GITHUB_TOKEN,
|
||||||
|
Prerelease = false,
|
||||||
|
Publish = true,
|
||||||
|
Channel = uniqueSuffix,
|
||||||
|
TagName = version,
|
||||||
|
TargetCommitish = targetCommitish
|
||||||
|
};
|
||||||
|
|
||||||
|
gh.UploadMissingAssetsAsync(options).GetAwaiterResult();
|
||||||
|
|
||||||
|
var newRelease = client.Repository.Release.GetAll(repoOwner, repoName).GetAwaiterResult().Single(s => s.Name == releaseName);
|
||||||
|
Assert.Equal(targetCommitish, newRelease.TargetCommitish);
|
||||||
|
}
|
||||||
|
|
||||||
private class GitHubReleaseTest : IDisposable
|
private class GitHubReleaseTest : IDisposable
|
||||||
{
|
{
|
||||||
|
private readonly bool deleteTagOnDispose;
|
||||||
|
|
||||||
public string ReleaseName { get; }
|
public string ReleaseName { get; }
|
||||||
public string UniqueSuffix { get; }
|
public string UniqueSuffix { get; }
|
||||||
public GitHubClient Client { get; }
|
public GitHubClient Client { get; }
|
||||||
public ILogger Logger { get; }
|
public ILogger Logger { get; }
|
||||||
|
|
||||||
public GitHubReleaseTest(string releaseName, string uniqueSuffix, GitHubClient client, ILogger logger)
|
public GitHubReleaseTest(string releaseName, string uniqueSuffix, GitHubClient client, ILogger logger, bool deleteTagOnDispose = false)
|
||||||
{
|
{
|
||||||
ReleaseName = releaseName;
|
ReleaseName = releaseName;
|
||||||
UniqueSuffix = uniqueSuffix;
|
UniqueSuffix = uniqueSuffix;
|
||||||
Client = client;
|
Client = client;
|
||||||
Logger = logger;
|
Logger = logger;
|
||||||
|
this.deleteTagOnDispose = deleteTagOnDispose;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static GitHubReleaseTest Create(string method, ILogger logger)
|
public static GitHubReleaseTest Create(string method, ILogger logger, bool deleteTagOnDispose = false)
|
||||||
{
|
{
|
||||||
var ci = !String.IsNullOrEmpty(Environment.GetEnvironmentVariable("CI"));
|
var ci = !String.IsNullOrEmpty(Environment.GetEnvironmentVariable("CI"));
|
||||||
var uniqueSuffix = (ci ? "ci-" : "local-") + VelopackRuntimeInfo.SystemOs.GetOsShortName();
|
var uniqueSuffix = (ci ? "ci-" : "local-") + VelopackRuntimeInfo.SystemOs.GetOsShortName();
|
||||||
@@ -213,9 +286,12 @@ This is just a _test_!
|
|||||||
var existingRelease = client.Repository.Release.GetAll(repoOwner, repoName).GetAwaiterResult().SingleOrDefault(s => s.Name == releaseName);
|
var existingRelease = client.Repository.Release.GetAll(repoOwner, repoName).GetAwaiterResult().SingleOrDefault(s => s.Name == releaseName);
|
||||||
if (existingRelease != null) {
|
if (existingRelease != null) {
|
||||||
client.Repository.Release.Delete(repoOwner, repoName, existingRelease.Id).GetAwaiterResult();
|
client.Repository.Release.Delete(repoOwner, repoName, existingRelease.Id).GetAwaiterResult();
|
||||||
|
if (deleteTagOnDispose) {
|
||||||
|
client.Git.Reference.Delete(repoOwner, repoName, $"tags/{existingRelease.TagName}").GetAwaiterResult();
|
||||||
|
}
|
||||||
logger.Info("Deleted existing release: " + releaseName);
|
logger.Info("Deleted existing release: " + releaseName);
|
||||||
}
|
}
|
||||||
return new GitHubReleaseTest(releaseName, uniqueSuffix, client, logger);
|
return new GitHubReleaseTest(releaseName, uniqueSuffix, client, logger, deleteTagOnDispose);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
@@ -224,6 +300,9 @@ This is just a _test_!
|
|||||||
var finalRelease = Client.Repository.Release.GetAll(repoOwner, repoName).GetAwaiterResult().SingleOrDefault(s => s.Name == ReleaseName);
|
var finalRelease = Client.Repository.Release.GetAll(repoOwner, repoName).GetAwaiterResult().SingleOrDefault(s => s.Name == ReleaseName);
|
||||||
if (finalRelease != null) {
|
if (finalRelease != null) {
|
||||||
Client.Repository.Release.Delete(repoOwner, repoName, finalRelease.Id).GetAwaiterResult();
|
Client.Repository.Release.Delete(repoOwner, repoName, finalRelease.Id).GetAwaiterResult();
|
||||||
|
if (deleteTagOnDispose) {
|
||||||
|
Client.Git.Reference.Delete(repoOwner, repoName, $"tags/{finalRelease.TagName}").GetAwaiterResult();
|
||||||
|
}
|
||||||
Logger.Info($"Deleted final release '{ReleaseName}'");
|
Logger.Info($"Deleted final release '{ReleaseName}'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user