in tools/changelog/changelog.main.kts [169:256]
fun getChangelog(firstCommit: String, lastCommit: String, firstVersion: String, lastVersion: String): String {
val isPrerelease = lastVersion.contains("-")
val entries = entriesForRepo("JetBrains/compose-multiplatform-core", firstCommit, lastCommit) +
entriesForRepo("JetBrains/compose-multiplatform", firstCommit, lastCommit)
return buildString {
appendLine("# $lastVersion (${currentChangelogDate()})")
appendLine()
appendLine("_Changes since ${firstVersion}_")
appendLine()
entries
.filter { isPrerelease || !it.isPrerelease }
.sortedBy { it.sectionOrder() }
.groupBy { it.sectionName() }
.forEach { (section, sectionEntries) ->
appendLine("## $section")
appendLine()
sectionEntries
.sortedBy { it.subsectionOrder() }
.groupBy { it.subsectionName() }
.forEach { (subsection, subsectionEntries) ->
appendLine("### $subsection")
appendLine()
subsectionEntries.forEach {
appendLine(it.run { "- $title [#$prNumber]($link)" })
if (it.details != null) {
if (!it.details.startsWith("-")) {
appendLine()
}
appendLine(it.details.prependIndent(" "))
}
}
appendLine()
}
}
append(
"""
## Components
### Gradle plugin
`org.jetbrains.compose` version `$versionCompose`
### Libraries
| Library group | Coordinates | Based on Jetpack |
|---------------|-------------|------------------|
| Runtime | `org.jetbrains.compose.runtime:runtime*:$versionCompose` | [Runtime $versionRedirectingCompose](https://developer.android.com/jetpack/androidx/releases/compose-runtime#$versionRedirectingCompose) |
| UI | `org.jetbrains.compose.ui:ui*:$versionCompose` | [UI $versionRedirectingCompose](https://developer.android.com/jetpack/androidx/releases/compose-ui#$versionRedirectingCompose) |
| Foundation | `org.jetbrains.compose.foundation:foundation*:$versionCompose` | [Foundation $versionRedirectingCompose](https://developer.android.com/jetpack/androidx/releases/compose-foundation#$versionRedirectingCompose) |
| Material | `org.jetbrains.compose.material:material*:$versionCompose` | [Material $versionRedirectingCompose](https://developer.android.com/jetpack/androidx/releases/compose-material#$versionRedirectingCompose) |
| Material3 | `org.jetbrains.compose.material3:material3*:$versionComposeMaterial3` | [Material3 $versionRedirectingComposeMaterial3](https://developer.android.com/jetpack/androidx/releases/compose-material3#$versionRedirectingComposeMaterial3) |
| Material3 Adaptive | `org.jetbrains.compose.material3.adaptive:adaptive*:$versionComposeMaterial3Adaptive` | [Material3 Adaptive $versionRedirectingComposeMaterial3Adaptive](https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive#$versionRedirectingComposeMaterial3Adaptive) |
| Lifecycle | `org.jetbrains.androidx.lifecycle:lifecycle-*:$versionLifecycle` | [Lifecycle $versionRedirectingLifecycle](https://developer.android.com/jetpack/androidx/releases/lifecycle#$versionRedirectingLifecycle) |
| Navigation | `org.jetbrains.androidx.navigation:navigation-*:2.9.1` | [Navigation 2.9.4](https://developer.android.com/jetpack/androidx/releases/navigation#2.9.4) |
| Navigation3 | `org.jetbrains.androidx.navigation3:navigation3-*:$versionNavigation3` | [Navigation3 $versionRedirectingNavigation3](https://developer.android.com/jetpack/androidx/releases/navigation3#$versionRedirectingNavigation3) |
| Navigation Event | `org.jetbrains.androidx.navigationevent:navigationevent-compose:$versionNavigationEvent` | [Navigation Event $versionRedirectingNavigationEvent](https://developer.android.com/jetpack/androidx/releases/navigationevent#$versionRedirectingNavigationEvent) |
| Savedstate | `org.jetbrains.androidx.savedstate:savedstate*:$versionSavedstate` | [Savedstate $versionRedirectingSavedstate](https://developer.android.com/jetpack/androidx/releases/savedstate#$versionRedirectingSavedstate) |
| WindowManager Core | `org.jetbrains.androidx.window:window-core:$versionWindow` | [WindowManager $versionRedirectingWindow](https://developer.android.com/jetpack/androidx/releases/window#$versionRedirectingWindow) |
---
""".trimIndent()
)
appendLine()
appendLine()
val nonstandardSectionEntries = entries
.filter {
it.section != null && it.subsection != null
&& it.section !in standardSections && it.subsection !in standardSubsections
}
if (nonstandardSectionEntries.isNotEmpty()) {
println()
println("WARNING! Changelog contains nonstandard sections. Please change them to the standard ones, or enhance the list in the PR template.")
for (entry in nonstandardSectionEntries) {
println("${entry.section} - ${entry.subsection} in ${entry.link}")
}
}
}
}