Skip to content

Commit f01b8bd

Browse files
ShikaSDliamoberg
authored andcommitted
Update Compose relnote script to include commits with issues attached
1 parent 1e368ec commit f01b8bd

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

plugins/compose/generate-release-notes.kts

100644100755
Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,26 @@ fun getCommits(fromRevision: String, toRevision: String, path: String?): List<Co
1919

2020
val commits = process.inputStream.bufferedReader().readText().split("\n\ncommit ")
2121
return commits.mapNotNull { commit ->
22-
val commitId = matchCommit.find(commit)?.groupValues?.let { it[1] } ?: return@mapNotNull null
23-
val changeId = matchChangeId.find(commit)?.groupValues?.let { it[1] }
24-
val relnote = matchRelnote.find(commit)?.groupValues?.let { it[1] }
25-
val issues = matchIssue.findAll(commit).mapNotNull { it.groups[1]?.value }.toList()
26-
return@mapNotNull Commit(commitId, changeId, relnote, issues)
22+
val sanitizedCommit = commit.removePrefix("commit ").padEnd(2, '\n')
23+
val commitGroups = parseCommit.find(sanitizedCommit)?.groupValues ?: return@mapNotNull null
24+
if (commitGroups?.size != 4) {
25+
// group 1: commit hash
26+
// group 2: commit message
27+
// group 3: title
28+
return@mapNotNull null
29+
}
30+
val commitId = commitGroups[1]
31+
val title = commitGroups[3]
32+
val commitMessage = commitGroups[2]
33+
val changeId = matchChangeId.find(commitMessage)?.groupValues?.let { it[1] }
34+
val relnote = matchRelnote.find(commitMessage)?.groupValues?.let { it[1] }
35+
val issues = matchIssue.findAll(commitMessage).mapNotNull { it.groups[1]?.value }.toList()
36+
return@mapNotNull Commit(commitId, title, changeId, relnote?.trim('\"'), issues)
2737
}
2838
}
2939

30-
val matchCommit = Regex("^([0-9a-f]+)\n", RegexOption.IGNORE_CASE)
40+
val parseCommit =
41+
Regex("^([0-9a-f]+)\\nAuthor:.*?\\nDate:.*?\\n[\\s]+((.*?)\\n[\\s\\S]+)", RegexOption.MULTILINE)
3142
val matchRelnote =
3243
Regex(
3344
"^\\s*Relnote:\\s+(\"{3}.+\"{3}|\".+\"|[^\\n]+)$",
@@ -38,6 +49,7 @@ val matchIssue = Regex("(?:Bug|Fixes):\\s+(\\d+)", RegexOption.IGNORE_CASE)
3849

3950
data class Commit(
4051
val commit: String,
52+
val title: String,
4153
val changeId: String?,
4254
val relnote: String?,
4355
val issues: List<String>,
@@ -50,7 +62,7 @@ fun issueToBuganizerUrl(issue: String): String = "https://issuetracker.google.co
5062
fun Commit.asReleaseNote(): String {
5163
val commitLink = "[${commit.substring(0, 7)}](${commitToGitHubUrl(commit)})"
5264
val issueLinks = issues.map { issue -> "[b/$issue](${issueToBuganizerUrl(issue)})" }.joinToString(", ")
53-
return "$commitLink $relnote $issueLinks"
65+
return "$commitLink ${relnote ?: title} $issueLinks"
5466
}
5567

5668
if (args.isEmpty()) {
@@ -72,6 +84,9 @@ val toRevision = args[1]
7284
val path = args.getOrNull(2)
7385

7486
getCommits(fromRevision, toRevision, path)
75-
.filterNot { it.relnote == null || ignoreRelnotes.contains(it.relnote.toLowerCase()) }
87+
.filter {
88+
(it.relnote != null && !ignoreRelnotes.contains(it.relnote.toLowerCase())) ||
89+
it.issues.isNotEmpty()
90+
}
7691
.map { it.asReleaseNote() }
7792
.forEach { println(it) }

0 commit comments

Comments
 (0)