diff --git a/Source/GitReleaseManager.Tests/ConfigurationTests.cs b/Source/GitReleaseManager.Tests/ConfigurationTests.cs index c9e128b0..c90eb919 100644 --- a/Source/GitReleaseManager.Tests/ConfigurationTests.cs +++ b/Source/GitReleaseManager.Tests/ConfigurationTests.cs @@ -31,5 +31,31 @@ public void Should_Read_Label_Aliases() Assert.AreEqual("Baz", config.LabelAliases[1].Header); Assert.AreEqual("Qux", config.LabelAliases[1].Plural); } + + [Test] + public void Many_Labels_For_Issue_Disabled_By_Default() + { + // Given + var text = Resources.Default_Configuration_Yaml; + + // When + var config = ConfigSerializer.Read(new StringReader(text)); + + // Then + Assert.AreEqual(false, config.IssueLabelsMany); + } + + [Test] + public void Should_Read_Many_Labels_Issue() + { + // Given + var text = Resources.Many_Labels_For_Issue_Configuration_Yaml; + + // When + var config = ConfigSerializer.Read(new StringReader(text)); + + // Then + Assert.AreEqual(true, config.IssueLabelsMany); + } } } diff --git a/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.NoCommitsWrongIssueLabel.approved.txt b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.NoCommitsWrongIssueLabel.approved.txt new file mode 100644 index 00000000..19a76f13 --- /dev/null +++ b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.NoCommitsWrongIssueLabel.approved.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.NoCommitsWrongIssueLabel.received.txt b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.NoCommitsWrongIssueLabel.received.txt new file mode 100644 index 00000000..1498245e --- /dev/null +++ b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.NoCommitsWrongIssueLabel.received.txt @@ -0,0 +1,3 @@ +As part of this release we had [1 issue](https://github.com/FakeRepository/issues/issues?milestone=0&state=closed) closed. + + diff --git a/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeCommitsWrongIssueLabel.approved.txt b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeCommitsWrongIssueLabel.approved.txt new file mode 100644 index 00000000..19a76f13 --- /dev/null +++ b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeCommitsWrongIssueLabel.approved.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeCommitsWrongIssueLabel.received.txt b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeCommitsWrongIssueLabel.received.txt new file mode 100644 index 00000000..fb4ce68f --- /dev/null +++ b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeCommitsWrongIssueLabel.received.txt @@ -0,0 +1,3 @@ +As part of this release we had [5 commits](https://github.com/TestUser/FakeRepository/commits/1.2.3) which resulted in [1 issue](https://github.com/FakeRepository/issues/issues?milestone=0&state=closed) being closed. + + diff --git a/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeIssuesWithMultipleLabelsWhenManyLabelsDisabled.approved.txt b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeIssuesWithMultipleLabelsWhenManyLabelsDisabled.approved.txt new file mode 100644 index 00000000..f387c8f4 --- /dev/null +++ b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeIssuesWithMultipleLabelsWhenManyLabelsDisabled.approved.txt @@ -0,0 +1,9 @@ +As part of this release we had [5 commits](https://github.com/TestUser/FakeRepository/commits/1.2.3) which resulted in [2 issues](https://github.com/FakeRepository/issues/issues?milestone=0&state=closed) being closed. + + +__Help Wanteds__ + +- [__#1__](http://example.com/1) Issue 1 +- [__#2__](http://example.com/2) Issue 2 + + \ No newline at end of file diff --git a/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeIssuesWithMultipleLabelsWhenManyLabelsEnabled.approved.txt b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeIssuesWithMultipleLabelsWhenManyLabelsEnabled.approved.txt new file mode 100644 index 00000000..f7321658 --- /dev/null +++ b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeIssuesWithMultipleLabelsWhenManyLabelsEnabled.approved.txt @@ -0,0 +1,12 @@ +As part of this release we had [5 commits](https://github.com/TestUser/FakeRepository/commits/1.2.3) which resulted in [2 issues](https://github.com/FakeRepository/issues/issues?milestone=0&state=closed) being closed. + + +__Bug__ + +- [__#1__](http://example.com/1) Issue 1 + +__Help Wanteds__ + +- [__#1__](http://example.com/1) Issue 1 +- [__#2__](http://example.com/2) Issue 2 + diff --git a/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.cs b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.cs index 3a65a92a..bfd503eb 100644 --- a/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.cs +++ b/Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.cs @@ -110,6 +110,19 @@ public void NoCommitsWrongIssueLabel() Assert.Throws(() => AcceptTest(0, CreateIssue(1, "Test"))); } + [Test] + public void SomeIssuesWithMultipleLabelsWhenManyLabelsDisabled() + { + Assert.Throws(() => AcceptTest(5, CreateIssue(1, "Help Wanted", "Bug"), CreateIssue(2, "Help Wanted"))); + } + + [Test] + public void SomeIssuesWithMultipleLabelsWhenManyLabelsEnabled() + { + var config = new Config {IssueLabelsMany = true}; + AcceptTest(5, config, CreateIssue(1, "Help Wanted", "Bug", "Internal Refactoring"), CreateIssue(2, "Help Wanted")); + } + [Test] public void SomeCommitsWrongIssueLabel() { diff --git a/Source/GitReleaseManager.Tests/Resources.Designer.cs b/Source/GitReleaseManager.Tests/Resources.Designer.cs index ac2133ec..82d8268c 100644 --- a/Source/GitReleaseManager.Tests/Resources.Designer.cs +++ b/Source/GitReleaseManager.Tests/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace GitReleaseManager.Tests { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -95,5 +95,41 @@ internal static string Default_Configuration_Yaml { return ResourceManager.GetString("Default_Configuration_Yaml", resourceCulture); } } + + /// + /// Looks up a localized string similar to create: + /// include-footer: false + /// footer-heading: + /// footer-content: + /// footer-includes-milestone: false + /// milestone-replace-text: + /// + ///export: + /// include-created-date-in-title: false + /// created-date-string-format: + /// perform-regex-removal: false + /// regex-text: + /// multiline-regex: false + /// + ///issue-labels-include: + ///- Bug + ///- Feature + ///- Improvement + /// + ///issue-labels-exclude: + ///- Internal Refactoring + /// + ///issue-labels-alias: + /// - name: Bug + /// header: Foo + /// plural: Bar + /// + /// - name: Improvement [rest of string was truncated]";. + /// + internal static string Many_Labels_For_Issue_Configuration_Yaml { + get { + return ResourceManager.GetString("Many_Labels_For_Issue_Configuration_Yaml", resourceCulture); + } + } } } diff --git a/Source/GitReleaseManager.Tests/Resources.resx b/Source/GitReleaseManager.Tests/Resources.resx index 394ce665..99a42197 100644 --- a/Source/GitReleaseManager.Tests/Resources.resx +++ b/Source/GitReleaseManager.Tests/Resources.resx @@ -149,4 +149,38 @@ issue-labels-alias: header: Baz plural: Qux + + create: + include-footer: false + footer-heading: + footer-content: + footer-includes-milestone: false + milestone-replace-text: + +export: + include-created-date-in-title: false + created-date-string-format: + perform-regex-removal: false + regex-text: + multiline-regex: false + +issue-labels-include: +- Bug +- Feature +- Improvement + +issue-labels-exclude: +- Internal Refactoring + +issue-labels-alias: + - name: Bug + header: Foo + plural: Bar + + - name: Improvement + header: Baz + plural: Qux + +issue-labels-many: true + \ No newline at end of file diff --git a/Source/GitReleaseManager/Configuration/Config.cs b/Source/GitReleaseManager/Configuration/Config.cs index 367e0016..1fdbbe3b 100644 --- a/Source/GitReleaseManager/Configuration/Config.cs +++ b/Source/GitReleaseManager/Configuration/Config.cs @@ -66,5 +66,8 @@ public Config() [YamlMember(Alias = "issue-labels-alias")] public IList LabelAliases { get; private set; } + + [YamlMember(Alias = "issue-labels-many")] + public bool IssueLabelsMany { get; set; } } } \ No newline at end of file diff --git a/Source/GitReleaseManager/ReleaseNotesBuilder.cs b/Source/GitReleaseManager/ReleaseNotesBuilder.cs index 1c69f0b8..95cc0601 100644 --- a/Source/GitReleaseManager/ReleaseNotesBuilder.cs +++ b/Source/GitReleaseManager/ReleaseNotesBuilder.cs @@ -119,7 +119,7 @@ private void CheckForValidLabels(Issue issue) count += this.configuration.IssueLabelsExclude.Count(issueToExclude => issueLabel.Name.ToUpperInvariant() == issueToExclude.ToUpperInvariant()); } - if (count != 1) + if (count != 1 && !this.configuration.IssueLabelsMany) { var allIssueLabels = this.configuration.IssueLabelsInclude.Union(this.configuration.IssueLabelsExclude).ToList(); var allIssuesExceptLast = allIssueLabels.Take(allIssueLabels.Count - 1); diff --git a/docs/configuration/enable-many-labels-per-issue.md b/docs/configuration/enable-many-labels-per-issue.md new file mode 100644 index 00000000..a39ab161 --- /dev/null +++ b/docs/configuration/enable-many-labels-per-issue.md @@ -0,0 +1,42 @@ +# Enable Many Labels Per Issue + +When you are using many labels per issue in your project, you need explicitly tell GitReleaseManager about that, otherwise it won't generate report. + +Here is the example of how to configure it: + +``` +create: + include-footer: false + footer-heading: + footer-content: + footer-includes-milestone: false + milestone-replace-text: +export: + include-created-date-in-title: false + created-date-string-format: + perform-regex-removal: false + regex-text: + multiline-regex: false +issue-labels-include: +- Bug +- Feature +- Improvement +issue-labels-exclude: +- Internal Refactoring +issue-labels-many: true +``` + +This configuration will generate following report for you: + +As part of this release we had [5 commits](https://github.com/TestUser/FakeRepository/commits/1.2.3) which resulted in [2 issues](https://github.com/FakeRepository/issues/issues?milestone=0&state=closed) being closed. + + +__Bug__ + +- [__#1__](http://example.com/1) Issue 1 + +__Improvement__ + +- [__#1__](http://example.com/1) Issue 1 +- [__#2__](http://example.com/2) Issue 2 +