Skip to content

Commit 31255f2

Browse files
committed
(#112) Add new method for creating empty release
This is similar to the overload for passing in an input file, the difference being that string.Empty is passed in, rather than reading the contents of the file, and then creating a release.
1 parent ded0ef6 commit 31255f2

File tree

6 files changed

+47
-1
lines changed

6 files changed

+47
-1
lines changed

src/GitReleaseManager.Core.Tests/Commands/CreateCommandTests.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,31 @@ public void Setup()
2727
_command = new CreateCommand(_vcsService, _logger);
2828
}
2929

30+
public async Task Should_Create_Empty_Release()
31+
{
32+
var options = new CreateSubOptions
33+
{
34+
RepositoryOwner = "owner",
35+
RepositoryName = "repository",
36+
TargetCommitish = "target commitish",
37+
Prerelease = false,
38+
AllowEmpty = true,
39+
};
40+
41+
var releaseName = options.Name ?? options.Milestone;
42+
43+
_vcsService.CreateEmptyReleaseAsync(options.RepositoryOwner, options.RepositoryName, options.Name, options.TargetCommitish, options.Prerelease)
44+
.Returns(_release);
45+
46+
var result = await _command.Execute(options).ConfigureAwait(false);
47+
result.ShouldBe(0);
48+
49+
await _vcsService.Received(1).CreateEmptyReleaseAsync(options.RepositoryOwner, options.RepositoryName, releaseName, options.TargetCommitish, options.Prerelease).ConfigureAwait(false);
50+
_logger.Received(1).Information(Arg.Any<string>());
51+
_logger.Received(1).Information(Arg.Any<string>(), _release.HtmlUrl);
52+
_logger.Received(1).Verbose(Arg.Any<string>(), _release.Body);
53+
}
54+
3055
[TestCase(null, 2)]
3156
[TestCase("release", 1)]
3257
public async Task Should_Create_Release_From_Milestone(string name, int logVerboseCount)

src/GitReleaseManager.Core/Commands/CreateCommand.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ public async Task<int> Execute(CreateSubOptions options)
2222

2323
Release release;
2424

25-
if (!string.IsNullOrEmpty(options.Milestone))
25+
if (options.AllowEmpty)
26+
{
27+
_logger.Verbose("The AllowEmpty option has been passed, so an empty release will now be created");
28+
release = await _vcsService.CreateEmptyReleaseAsync(options.RepositoryOwner, options.RepositoryName, options.Name, options.TargetCommitish, options.Prerelease).ConfigureAwait(false);
29+
}
30+
else if (!string.IsNullOrEmpty(options.Milestone))
2631
{
2732
_logger.Verbose("Milestone {Milestone} was specified", options.Milestone);
2833
var releaseName = options.Name;

src/GitReleaseManager.Core/IVcsService.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ namespace GitReleaseManager.Core
66
{
77
public interface IVcsService
88
{
9+
Task<Release> CreateEmptyReleaseAsync(string owner, string repository, string name, string targetCommitish, bool prerelease);
10+
911
Task<Release> CreateReleaseFromMilestoneAsync(string owner, string repository, string milestone, string releaseName, string targetCommitish, IList<string> assets, bool prerelease, string templateFilePath);
1012

1113
Task<Release> CreateReleaseFromInputFileAsync(string owner, string repository, string name, string inputFilePath, string targetCommitish, IList<string> assets, bool prerelease);

src/GitReleaseManager.Core/Options/CreateSubOptions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,8 @@ public class CreateSubOptions : BaseVcsOptions
2626

2727
[Option('e', "pre", Required = false, HelpText = "Creates the release as a pre-release.")]
2828
public bool Prerelease { get; set; }
29+
30+
[Option("allowEmpty", Required = false, HelpText = "Allow the creation of an empty set of release notes. In this mode, milestone and input file path will be ignored.")]
31+
public bool AllowEmpty { get; set; }
2932
}
3033
}

src/GitReleaseManager.Core/VcsService.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ public VcsService(IVcsProvider vcsProvider, ILogger logger, IReleaseNotesBuilder
3737
_configuration = configuration;
3838
}
3939

40+
public async Task<Release> CreateEmptyReleaseAsync(string owner, string repository, string name, string targetCommitish, bool prerelease)
41+
{
42+
var release = await CreateReleaseAsync(owner, repository, name, name, string.Empty, prerelease, targetCommitish, null).ConfigureAwait(false);
43+
return release;
44+
}
45+
4046
public async Task<Release> CreateReleaseFromMilestoneAsync(string owner, string repository, string milestone, string releaseName, string targetCommitish, IList<string> assets, bool prerelease, string templateFilePath)
4147
{
4248
var templatePath = ReleaseTemplates.DEFAULT_NAME;

src/GitReleaseManager.Tests/VcsServiceMock.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ public VcsServiceMock()
2525

2626
public int NumberOfCommits { get; set; }
2727

28+
public Task<Release> CreateEmptyReleaseAsync(string owner, string repository, string name, string targetCommitish, bool prerelease)
29+
{
30+
throw new System.NotImplementedException();
31+
}
32+
2833
public Task<Release> CreateReleaseFromMilestoneAsync(string owner, string repository, string milestone, string releaseName, string targetCommitish, IList<string> assets, bool prerelease, string templateFilePath)
2934
{
3035
throw new System.NotImplementedException();

0 commit comments

Comments
 (0)