Skip to content

Commit 1763077

Browse files
authored
Merge pull request #366 from gep13/feature/GH-99
(#99) Add SkipPrereleases option
2 parents 7ee1049 + 5e4c001 commit 1763077

File tree

11 files changed

+33
-19
lines changed

11 files changed

+33
-19
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public async Task Should_Execute_Command()
3939

4040
var releaseText = "releaseText";
4141

42-
_vcsService.ExportReleasesAsync(options.RepositoryOwner, options.RepositoryName, options.TagName)
42+
_vcsService.ExportReleasesAsync(options.RepositoryOwner, options.RepositoryName, options.TagName, options.SkipPrereleases)
4343
.Returns(releaseText);
4444

4545
var result = await _command.Execute(options).ConfigureAwait(false);
@@ -51,7 +51,7 @@ public async Task Should_Execute_Command()
5151
var exportFileContent = File.ReadAllText(_fileOutputPath);
5252
exportFileContent.ShouldBe(releaseText);
5353

54-
await _vcsService.Received(1).ExportReleasesAsync(options.RepositoryOwner, options.RepositoryName, options.TagName).ConfigureAwait(false);
54+
await _vcsService.Received(1).ExportReleasesAsync(options.RepositoryOwner, options.RepositoryName, options.TagName, options.SkipPrereleases).ConfigureAwait(false);
5555
_logger.Received(1).Information(Arg.Any<string>(), options.TagName);
5656

5757
if (exportFileExists)

src/GitReleaseManager.Core.Tests/Provider/GitHubProviderTests.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class GitHubProviderTests
4141
private const int RELEASE_ID = 1;
4242
private const int ASSET_ID = 1;
4343
private const string NOT_FOUND_MESSAGE = "NotFound";
44+
private const bool SKIP_PRERELEASES = false;
4445

4546
private readonly Release _release = new Release();
4647
private readonly ReleaseAssetUpload _releaseAssetUpload = new ReleaseAssetUpload();
@@ -667,7 +668,7 @@ public async Task Should_Get_Releases()
667668
_mapper.Map<IEnumerable<Release>>(Arg.Any<object>())
668669
.Returns(releases);
669670

670-
var result = await _gitHubProvider.GetReleasesAsync(OWNER, REPOSITORY).ConfigureAwait(false);
671+
var result = await _gitHubProvider.GetReleasesAsync(OWNER, REPOSITORY, SKIP_PRERELEASES).ConfigureAwait(false);
671672
result.ShouldBeSameAs(releases);
672673

673674
await _gitHubClient.Repository.Release.Received(1).GetAll(OWNER, REPOSITORY, Arg.Any<ApiOptions>()).ConfigureAwait(false);
@@ -680,7 +681,7 @@ public async Task Should_Throw_An_Exception_On_Getting_Releases()
680681
_gitHubClient.Repository.Release.GetAll(OWNER, REPOSITORY, Arg.Any<ApiOptions>())
681682
.Returns(Task.FromException<IReadOnlyList<Octokit.Release>>(_exception));
682683

683-
var ex = await Should.ThrowAsync<ApiException>(() => _gitHubProvider.GetReleasesAsync(OWNER, REPOSITORY)).ConfigureAwait(false);
684+
var ex = await Should.ThrowAsync<ApiException>(() => _gitHubProvider.GetReleasesAsync(OWNER, REPOSITORY, SKIP_PRERELEASES)).ConfigureAwait(false);
684685
ex.Message.ShouldBe(_exception.Message);
685686
ex.InnerException.ShouldBe(_exception);
686687
}

src/GitReleaseManager.Core.Tests/VcsServiceTests.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class VcsServiceTests
3131
private const string TAG_NAME = "0.1.0";
3232
private const string RELEASE_NOTES = "Release Notes";
3333
private const string ASSET_CONTENT = "Asset Content";
34+
private const bool SKIP_PRERELEASES = false;
3435

3536
private const string UNABLE_TO_FOUND_MILESTONE_MESSAGE = "Unable to find a {State} milestone with title '{Title}' on '{Owner}/{Repository}'";
3637
private const string UNABLE_TO_FOUND_RELEASE_MESSAGE = "Unable to find a release with tag '{TagName}' on '{Owner}/{Repository}'";
@@ -591,17 +592,17 @@ public async Task Should_Get_Release_Notes()
591592
var releases = Enumerable.Empty<Release>();
592593
var releaseNotes = "Release Notes";
593594

594-
_vcsProvider.GetReleasesAsync(OWNER, REPOSITORY)
595+
_vcsProvider.GetReleasesAsync(OWNER, REPOSITORY, SKIP_PRERELEASES)
595596
.Returns(Task.FromResult(releases));
596597

597598
_releaseNotesExporter.ExportReleaseNotes(Arg.Any<IEnumerable<Release>>())
598599
.Returns(releaseNotes);
599600

600-
var result = await _vcsService.ExportReleasesAsync(OWNER, REPOSITORY, null).ConfigureAwait(false);
601+
var result = await _vcsService.ExportReleasesAsync(OWNER, REPOSITORY, null, SKIP_PRERELEASES).ConfigureAwait(false);
601602
result.ShouldBeSameAs(releaseNotes);
602603

603604
await _vcsProvider.DidNotReceive().GetReleaseAsync(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<string>()).ConfigureAwait(false);
604-
await _vcsProvider.Received(1).GetReleasesAsync(OWNER, REPOSITORY).ConfigureAwait(false);
605+
await _vcsProvider.Received(1).GetReleasesAsync(OWNER, REPOSITORY, SKIP_PRERELEASES).ConfigureAwait(false);
605606
_logger.Received(1).Verbose(Arg.Any<string>(), OWNER, REPOSITORY);
606607
_releaseNotesExporter.Received(1).ExportReleaseNotes(Arg.Any<IEnumerable<Release>>());
607608
}
@@ -617,11 +618,11 @@ public async Task Should_Get_Release_Notes_For_Tag()
617618
_releaseNotesExporter.ExportReleaseNotes(Arg.Any<IEnumerable<Release>>())
618619
.Returns(RELEASE_NOTES);
619620

620-
var result = await _vcsService.ExportReleasesAsync(OWNER, REPOSITORY, TAG_NAME).ConfigureAwait(false);
621+
var result = await _vcsService.ExportReleasesAsync(OWNER, REPOSITORY, TAG_NAME, SKIP_PRERELEASES).ConfigureAwait(false);
621622
result.ShouldBeSameAs(RELEASE_NOTES);
622623

623624
await _vcsProvider.Received(1).GetReleaseAsync(OWNER, REPOSITORY, TAG_NAME).ConfigureAwait(false);
624-
await _vcsProvider.DidNotReceive().GetReleasesAsync(Arg.Any<string>(), Arg.Any<string>()).ConfigureAwait(false);
625+
await _vcsProvider.DidNotReceive().GetReleasesAsync(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<bool>()).ConfigureAwait(false);
625626
_logger.Received(1).Verbose(Arg.Any<string>(), OWNER, REPOSITORY, TAG_NAME);
626627
_releaseNotesExporter.Received(1).ExportReleaseNotes(Arg.Any<IEnumerable<Release>>());
627628
}
@@ -635,7 +636,7 @@ public async Task Should_Get_Default_Release_Notes_For_Non_Existent_Tag()
635636
_releaseNotesExporter.ExportReleaseNotes(Arg.Any<IEnumerable<Release>>())
636637
.Returns(RELEASE_NOTES);
637638

638-
var result = await _vcsService.ExportReleasesAsync(OWNER, REPOSITORY, TAG_NAME).ConfigureAwait(false);
639+
var result = await _vcsService.ExportReleasesAsync(OWNER, REPOSITORY, TAG_NAME, SKIP_PRERELEASES).ConfigureAwait(false);
639640
result.ShouldBeSameAs(RELEASE_NOTES);
640641

641642
await _vcsProvider.Received(1).GetReleaseAsync(OWNER, REPOSITORY, TAG_NAME).ConfigureAwait(false);

src/GitReleaseManager.Core/Commands/ExportCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public ExportCommand(IVcsService vcsService, ILogger logger)
1919
public async Task<int> Execute(ExportSubOptions options)
2020
{
2121
_logger.Information("Exporting release {TagName}", options.TagName);
22-
var releasesContent = await _vcsService.ExportReleasesAsync(options.RepositoryOwner, options.RepositoryName, options.TagName).ConfigureAwait(false);
22+
var releasesContent = await _vcsService.ExportReleasesAsync(options.RepositoryOwner, options.RepositoryName, options.TagName, options.SkipPrereleases).ConfigureAwait(false);
2323

2424
using (var sw = new StreamWriter(File.Open(options.FileOutputPath, FileMode.OpenOrCreate)))
2525
{

src/GitReleaseManager.Core/IVcsService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public interface IVcsService
1414

1515
Task AddAssetsAsync(string owner, string repository, string tagName, IList<string> assets);
1616

17-
Task<string> ExportReleasesAsync(string owner, string repository, string tagName);
17+
Task<string> ExportReleasesAsync(string owner, string repository, string tagName, bool skipPrereleases);
1818

1919
Task CloseMilestoneAsync(string owner, string repository, string milestoneTitle);
2020

src/GitReleaseManager.Core/Options/ExportSubOptions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,8 @@ public class ExportSubOptions : BaseVcsOptions
1010

1111
[Option('t', "tagName", HelpText = "The name of the release (Typically this is the generated SemVer Version Number).", Required = false)]
1212
public string TagName { get; set; }
13+
14+
[Option("skipPrereleases", HelpText = "Should pre-release releases be ignored when generating release notes? Defaults to false.", Required = false)]
15+
public bool SkipPrereleases { get; set; }
1316
}
1417
}

src/GitReleaseManager.Core/Provider/GitHubProvider.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ public Task<Release> GetReleaseAsync(string owner, string repository, string tag
260260
});
261261
}
262262

263-
public Task<IEnumerable<Release>> GetReleasesAsync(string owner, string repository)
263+
public Task<IEnumerable<Release>> GetReleasesAsync(string owner, string repository, bool skipPrereleases)
264264
{
265265
return ExecuteAsync(async () =>
266266
{
@@ -273,7 +273,15 @@ public Task<IEnumerable<Release>> GetReleasesAsync(string owner, string reposito
273273
var options = GetApiOptions(startPage);
274274
results = await _gitHubClient.Repository.Release.GetAll(owner, repository, options).ConfigureAwait(false);
275275

276-
releases.AddRange(results);
276+
if (skipPrereleases)
277+
{
278+
releases.AddRange(results.Where(r => !r.Prerelease));
279+
}
280+
else
281+
{
282+
releases.AddRange(results);
283+
}
284+
277285
startPage++;
278286
}
279287
while (results.Count == PAGE_SIZE);

src/GitReleaseManager.Core/Provider/IVcsProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public interface IVcsProvider
3838

3939
Task<Release> GetReleaseAsync(string owner, string repository, string tagName);
4040

41-
Task<IEnumerable<Release>> GetReleasesAsync(string owner, string repository);
41+
Task<IEnumerable<Release>> GetReleasesAsync(string owner, string repository, bool skipPrereleases);
4242

4343
Task PublishReleaseAsync(string owner, string repository, string tagName, int releaseId);
4444

src/GitReleaseManager.Core/VcsService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,14 +204,14 @@ public async Task AddAssetsAsync(string owner, string repository, string tagName
204204
}
205205
}
206206

207-
public async Task<string> ExportReleasesAsync(string owner, string repository, string tagName)
207+
public async Task<string> ExportReleasesAsync(string owner, string repository, string tagName, bool skipPrereleases)
208208
{
209209
var releases = Enumerable.Empty<Release>();
210210

211211
if (string.IsNullOrWhiteSpace(tagName))
212212
{
213213
_logger.Verbose("Finding all releases on '{Owner}/{Repository}'", owner, repository);
214-
releases = await _vcsProvider.GetReleasesAsync(owner, repository).ConfigureAwait(false);
214+
releases = await _vcsProvider.GetReleasesAsync(owner, repository, skipPrereleases).ConfigureAwait(false);
215215
}
216216
else
217217
{

src/GitReleaseManager.IntegrationTests/GitHubProviderIntegrationTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public class GitHubProviderIntegrationTests
1919
{
2020
private const string OWNER = "GitTools";
2121
private const string REPOSITORY = "GitReleaseManager";
22+
private const bool SKIP_PRERELEASES = false;
2223

2324
private GitHubProvider _gitHubProvider;
2425
private IGitHubClient _gitHubClient;
@@ -87,7 +88,7 @@ public async Task Should_Get_Issue_Comments()
8788
[Order(5)]
8889
public async Task Should_Get_Releases()
8990
{
90-
var result = await _gitHubProvider.GetReleasesAsync(OWNER, REPOSITORY).ConfigureAwait(false);
91+
var result = await _gitHubProvider.GetReleasesAsync(OWNER, REPOSITORY, SKIP_PRERELEASES).ConfigureAwait(false);
9192
result.Count().ShouldBeGreaterThan(0);
9293

9394
var orderedReleases = result.OrderByDescending(r => r.Id).ToList();

0 commit comments

Comments
 (0)