in src/main/java/org/apache/openejb/tools/release/cmd/ReleaseNotes.java [79:178]
public PrintOutput generate(final String version,
@Option("include-versions") final String includeVersions,
@Option("account") @Default("default") final Account account) throws ExecutionException, InterruptedException {
final Set<String> versions = new HashSet<>();
versions.add(version);
if (includeVersions != null) {
versions.addAll(Arrays.asList(includeVersions.split(" *, *| ")));
}
final Client client = account.getClient();
final SearchRestClient searchClient = client.getSearchClient();
final Map<String, Issue> issuesByKey = new HashMap<>();
for (final String ver : versions) {
final String s = "project = TOMEE AND status = Resolved AND fixVersion = " + ver;
final SearchResult result = searchClient.searchJql(s).get();
for (final Issue issue : result.getIssues()) {
issuesByKey.put(issue.getKey(), issue);
}
}
final List<IssueType> sections = Arrays.asList(
client.getIssueType("Dependency upgrade"),
client.getIssueType("New Feature"),
client.getIssueType("Bug"),
client.getIssueType("Improvement"),
client.getIssueType("Task"),
client.getIssueType("Documentation"),
client.getIssueType("Sub-task"),
client.getIssueType("Wish")
);
return out -> {
out.println("= Apache TomEE " + version + " Release Notes\n" +
":index-group: Release Notes\n" +
":jbake-type: page\n" +
":jbake-status: published");
final List<Issue> cveIssues = new ArrayList<>();
for (final IssueType section : sections) {
final Map<Boolean, List<Issue>> issuesPartitionedByCve = issuesByKey.values()
.stream().filter(issue -> issue.getIssueType().getName().equals(section.getName()))
.collect(Collectors.partitioningBy(issue ->
issue.getLabels().stream().anyMatch(label -> "cve".equals(label.toLowerCase(Locale.ROOT)))));
final List<Issue> issues = Stream.of(issuesPartitionedByCve.values())
.flatMap(Collection::stream).flatMap(Collection::stream)
.collect(Collectors.toList());
if (issues.size() <= 0) continue;
cveIssues.addAll(issuesPartitionedByCve.get(true));
out.println();
out.printf("== %s%n", section.getName());
out.println();
out.println("[.compact]");
if (section.getName().equals("Dependency upgrade")) {
removeSuperseded(issues).stream()
.map(Upgrade::new)
.sorted(Comparator.comparing(Upgrade::getSummary))
.forEach(upgrade -> {
out.printf(" - link:https://issues.apache.org/jira/browse/%s[%s] %s%n",
upgrade.getKey(),
upgrade.getKey(),
upgrade.getSummary());
});
} else {
for (final Issue issue : issues) {
out.printf(" - link:https://issues.apache.org/jira/browse/%s[%s] %s%n",
issue.getKey(),
issue.getKey(),
issue.getSummary());
}
}
}
if(cveIssues.size() > 0) {
//CVE section
out.println();
out.printf("== %s%n", "Fixed Common Vulnerabilities and Exposures (CVEs)");
out.println();
out.println("[.compact]");
for (final Issue issue : cveIssues) {
out.printf(" - link:https://issues.apache.org/jira/browse/%s[%s] %s%n",
issue.getKey(),
issue.getKey(),
issue.getSummary());
}
}
};
}