From f0065e39721ed6e7a045af0bb23d204f4f1e0992 Mon Sep 17 00:00:00 2001 From: Andres Almiray Date: Wed, 22 Dec 2021 22:23:39 +0100 Subject: [PATCH] [changelog] ad a key property to categories. Resolves #619 --- .../java/org/jreleaser/model/Changelog.java | 20 +++++++++-- .../model/validation/GitServiceValidator.java | 20 +++++------ .../changelog/preset-conventional-commits.yml | 9 ++++- .../jreleaser/changelog/preset-gitmoji.yml | 36 ++++++++++++------- .../gradle/plugin/dsl/Changelog.groovy | 2 ++ .../plugin/internal/dsl/ChangelogImpl.groovy | 3 ++ .../org/jreleaser/maven/plugin/Changelog.java | 18 +++++----- .../internal/JReleaserModelConverter.java | 1 + 8 files changed, 76 insertions(+), 33 deletions(-) diff --git a/core/jreleaser-model/src/main/java/org/jreleaser/model/Changelog.java b/core/jreleaser-model/src/main/java/org/jreleaser/model/Changelog.java index 4e3fcfa86..500c55019 100644 --- a/core/jreleaser-model/src/main/java/org/jreleaser/model/Changelog.java +++ b/core/jreleaser-model/src/main/java/org/jreleaser/model/Changelog.java @@ -36,6 +36,7 @@ import java.util.TreeSet; import java.util.stream.Collectors; +import static org.jreleaser.util.StringUtils.isBlank; import static org.jreleaser.util.StringUtils.isNotBlank; import static org.jreleaser.util.StringUtils.toSafeRegexPattern; @@ -334,11 +335,13 @@ public static Set sort(Set categories) { } private final Set labels = new LinkedHashSet<>(); + private String key; private String title; private String format; private Integer order; void setAll(Category category) { + this.key = category.key; this.title = category.title; this.format = category.format; this.order = category.order; @@ -353,12 +356,23 @@ public void setFormat(String format) { this.format = format; } + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + public String getTitle() { return title; } public void setTitle(String title) { this.title = title; + if (isBlank(this.key)) { + this.key = title; + } } public Set getLabels() { @@ -385,6 +399,7 @@ public void setOrder(Integer order) { @Override public Map asMap(boolean full) { Map map = new LinkedHashMap<>(); + map.put("key", key); map.put("title", title); map.put("labels", labels); map.put("format", format); @@ -397,7 +412,7 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Category category = (Category) o; - return title.equals(category.title); + return key.equals(category.key); } @Override @@ -405,8 +420,9 @@ public int hashCode() { return Objects.hash(title); } - public static Category of(String title, String format, String... labels) { + public static Category of(String key, String title, String format, String... labels) { Category category = new Category(); + category.key = key; category.title = title; category.format = format; category.labels.addAll(Arrays.asList(labels)); diff --git a/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/GitServiceValidator.java b/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/GitServiceValidator.java index 0ef1a1a53..3f0fa0604 100644 --- a/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/GitServiceValidator.java +++ b/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/GitServiceValidator.java @@ -247,8 +247,8 @@ private static void validateChangelog(JReleaserContext context, GitService servi } if (changelog.getCategories().isEmpty()) { - changelog.getCategories().add(Changelog.Category.of(RB.$("default.category.feature"), "", "feature", "enhancement")); - changelog.getCategories().add(Changelog.Category.of(RB.$("default.category.bug.fix"), "", "bug", "fix")); + changelog.getCategories().add(Changelog.Category.of("feature", RB.$("default.category.feature"), "", "feature", "enhancement")); + changelog.getCategories().add(Changelog.Category.of("fix", RB.$("default.category.bug.fix"), "", "bug", "fix")); } else { int i = 0; for (Changelog.Category category : changelog.getCategories()) { @@ -325,19 +325,19 @@ private static void loadPreset(JReleaserContext context, Changelog changelog, Er replacersCopy.addAll(loaded.getReplacers()); changelog.setReplacers(replacersCopy); - Map> categoriesByTitle = changelog.getCategories().stream() - .collect(groupingBy(Changelog.Category::getTitle)); - Map> loadedCategoriesByTitle = loaded.getCategories().stream() - .collect(groupingBy(Changelog.Category::getTitle)); - categoriesByTitle.forEach((categoryTitle, categories) -> { - if (loadedCategoriesByTitle.containsKey(categoryTitle)) { - Changelog.Category loadedCategory = loadedCategoriesByTitle.remove(categoryTitle).get(0); + Map> categoriesByKey = changelog.getCategories().stream() + .collect(groupingBy(Changelog.Category::getKey)); + Map> loadedCategoriesByKey = loaded.getCategories().stream() + .collect(groupingBy(Changelog.Category::getKey)); + categoriesByKey.forEach((categoryKey, categories) -> { + if (loadedCategoriesByKey.containsKey(categoryKey)) { + Changelog.Category loadedCategory = loadedCategoriesByKey.remove(categoryKey).get(0); Changelog.Category category = categories.get(0); category.addLabels(loadedCategory.getLabels()); } }); - loadedCategoriesByTitle.values().forEach(list -> changelog.getCategories().add(list.get(0))); + loadedCategoriesByKey.values().forEach(list -> changelog.getCategories().add(list.get(0))); // sort categories once again as order might have changed changelog.setCategories(Changelog.Category.sort(changelog.getCategories())); diff --git a/core/jreleaser-model/src/main/resources/META-INF/jreleaser/changelog/preset-conventional-commits.yml b/core/jreleaser-model/src/main/resources/META-INF/jreleaser/changelog/preset-conventional-commits.yml index b2d6a70df..6dc9b7bec 100644 --- a/core/jreleaser-model/src/main/resources/META-INF/jreleaser/changelog/preset-conventional-commits.yml +++ b/core/jreleaser-model/src/main/resources/META-INF/jreleaser/changelog/preset-conventional-commits.yml @@ -41,18 +41,22 @@ labelers: categories: - title: '🔀 Merge' + key: 'merge' order: 0 labels: - 'merge' - title: '🚀 Features' + key: 'features' order: 10 labels: - 'feat' - title: '🐛 Fixes' + key: 'fixes' order: 20 labels: - 'fix' - - title: '♻️ Changes' + - title: '🔄️ Changes' + key: 'changes' order: 30 labels: - 'perf' @@ -60,16 +64,19 @@ categories: - 'revert' - 'style' - title: '🧰 Tasks' + key: 'tasks' order: 40 labels: - 'chore' - title: '🛠 Build' + key: 'build' order: 50 labels: - 'test' - 'build' - 'ci' - title: '📝 Documentation' + key: 'docs' order: 60 labels: - 'docs' diff --git a/core/jreleaser-model/src/main/resources/META-INF/jreleaser/changelog/preset-gitmoji.yml b/core/jreleaser-model/src/main/resources/META-INF/jreleaser/changelog/preset-gitmoji.yml index 0501b7ceb..dfd9a763a 100644 --- a/core/jreleaser-model/src/main/resources/META-INF/jreleaser/changelog/preset-gitmoji.yml +++ b/core/jreleaser-model/src/main/resources/META-INF/jreleaser/changelog/preset-gitmoji.yml @@ -143,51 +143,63 @@ labelers: title: 'regex:^(🔖|:bookmark:).*' categories: - - title: 'Merge' + - title: '🔀 Merge' + key: 'merge' order: 0 labels: - 'merge' - - title: 'Added' + - title: '🚀 Added' + key: 'added' order: 10 labels: - 'added' - - title: 'Changed' + - title: '🔄️ Changed' + key: 'changed' order: 20 labels: - 'changed' - - title: 'Breaking' + - title: '🚨 Breaking' + key: 'breaking' order: 30 labels: - 'breaking_changes' - - title: 'Deprecated' + - title: '💥 Deprecated' + key: 'deprecated' order: 40 labels: - 'deprecated' - - title: 'Removed' + - title: '🗑 Removed' + key: 'removed' order: 50 labels: - 'removed' - - title: 'Fixed' + - title: '🐛 Fixed' + key: 'fixed' order: 60 labels: - 'fixed' - - title: 'Security' + - title: '🔒️ Security' + key: 'security' order: 70 labels: - 'security' - - title: 'Dependencies' + - title: '📦 Dependencies' + key: 'deps' order: 80 labels: - 'dependencies' - - title: 'Documentation' + - title: '📝 Documentation' + key: 'docs' order: 90 labels: - 'documentation' - - title: 'Miscellaneous' + - title: '🎲 Miscellaneous' + key: 'misc' order: 100 labels: - 'misc' - - title: 'Release' + - title: '🏁 Release' + key: 'release' order: 110 labels: - 'release' diff --git a/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/dsl/Changelog.groovy b/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/dsl/Changelog.groovy index 514494db9..1cc819dc7 100644 --- a/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/dsl/Changelog.groovy +++ b/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/dsl/Changelog.groovy @@ -88,6 +88,8 @@ interface Changelog { void contributors(@DelegatesTo(strategy = Closure.DELEGATE_FIRST, value = Contributors) Closure action) interface Category { + Property getKey() + Property getTitle() SetProperty getLabels() diff --git a/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/internal/dsl/ChangelogImpl.groovy b/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/internal/dsl/ChangelogImpl.groovy index 912a0bb4b..dda22ea59 100644 --- a/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/internal/dsl/ChangelogImpl.groovy +++ b/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/internal/dsl/ChangelogImpl.groovy @@ -228,6 +228,7 @@ class ChangelogImpl implements Changelog { @CompileStatic static class CategoryImpl implements Category { + final Property key final Property title final SetProperty labels final Property format @@ -235,6 +236,7 @@ class ChangelogImpl implements Changelog { @Inject CategoryImpl(ObjectFactory objects) { + key = objects.property(String).convention(Providers.notDefined()) title = objects.property(String).convention(Providers.notDefined()) labels = objects.setProperty(String).convention(Providers.notDefined()) format = objects.property(String).convention(Providers.notDefined()) @@ -243,6 +245,7 @@ class ChangelogImpl implements Changelog { org.jreleaser.model.Changelog.Category toModel() { org.jreleaser.model.Changelog.Category category = new org.jreleaser.model.Changelog.Category() + category.key = key.orNull category.title = title.orNull category.labels = (Set) labels.getOrElse([] as Set) category.format = format.orNull diff --git a/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/Changelog.java b/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/Changelog.java index 16e54c7bb..004980bca 100644 --- a/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/Changelog.java +++ b/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/Changelog.java @@ -259,17 +259,27 @@ public enum Sort { public static class Category { private final Set labels = new LinkedHashSet<>(); + private String key; private String title; private String format; private Integer order; void setAll(Category category) { + this.key = category.key; this.title = category.title; setLabels(category.labels); this.format = category.format; this.order = category.order; } + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + public String getTitle() { return title; } @@ -310,14 +320,6 @@ public Integer getOrder() { public void setOrder(Integer order) { this.order = order; } - - public static Category of(String title, String format, String... labels) { - Category category = new Category(); - category.title = title; - category.format = format; - category.labels.addAll(Arrays.asList(labels)); - return category; - } } public static class Replacer { diff --git a/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/internal/JReleaserModelConverter.java b/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/internal/JReleaserModelConverter.java index ef52f6cec..150249e4b 100644 --- a/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/internal/JReleaserModelConverter.java +++ b/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/internal/JReleaserModelConverter.java @@ -364,6 +364,7 @@ private static Set convertCategories(Col Set set = new LinkedHashSet<>(); for (Changelog.Category category : categories) { org.jreleaser.model.Changelog.Category c = new org.jreleaser.model.Changelog.Category(); + c.setKey(tr(category.getKey())); c.setTitle(tr(category.getTitle())); c.setLabels(category.getLabels()); c.setFormat(tr(category.getFormat()));