From 06cfde7a61326a987d6f2ec7e68317e9b506551b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20=C5=81yso=C5=84?= Date: Tue, 26 Sep 2017 19:17:58 +0200 Subject: [PATCH] (GH-90) Relax restriction of one label per issue Previously GitReleaseManager wasn't able to generate release note for issues with multiple labels. With this change it's become possible, but additional configuration flag needs to be set. --- .../ConfigurationTests.cs | 26 ++++++++++++ ...ests.NoCommitsWrongIssueLabel.approved.txt | 1 + ...ests.NoCommitsWrongIssueLabel.received.txt | 3 ++ ...ts.SomeCommitsWrongIssueLabel.approved.txt | 1 + ...ts.SomeCommitsWrongIssueLabel.received.txt | 3 ++ ...eLabelsWhenManyLabelsDisabled.approved.txt | 9 ++++ ...leLabelsWhenManyLabelsEnabled.approved.txt | 12 ++++++ .../ReleaseNotesBuilderTests.cs | 13 ++++++ .../Resources.Designer.cs | 38 ++++++++++++++++- Source/GitReleaseManager.Tests/Resources.resx | 34 +++++++++++++++ .../GitReleaseManager/Configuration/Config.cs | 3 ++ .../GitReleaseManager/ReleaseNotesBuilder.cs | 2 +- .../enable-many-labels-per-issue.md | 42 +++++++++++++++++++ 13 files changed, 185 insertions(+), 2 deletions(-) create mode 100644 Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.NoCommitsWrongIssueLabel.approved.txt create mode 100644 Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.NoCommitsWrongIssueLabel.received.txt create mode 100644 Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeCommitsWrongIssueLabel.approved.txt create mode 100644 Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeCommitsWrongIssueLabel.received.txt create mode 100644 Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeIssuesWithMultipleLabelsWhenManyLabelsDisabled.approved.txt create mode 100644 Source/GitReleaseManager.Tests/ReleaseNotesBuilderTests.SomeIssuesWithMultipleLabelsWhenManyLabelsEnabled.approved.txt create mode 100644 docs/configuration/enable-many-labels-per-issue.md 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 +