Skip to content

Commit

Permalink
Fix AddChangelogItemTask fails if there is no version in the changelog
Browse files Browse the repository at this point in the history
  • Loading branch information
JavierQonto authored and JavierSegoviaCordoba committed Mar 18, 2024
1 parent d6e446c commit 6d9fe3c
Show file tree
Hide file tree
Showing 10 changed files with 138 additions and 23 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@

### Fixed

- `AddChangelogItemTask` fails if there is no version in the changelog

### Removed

- priorities
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.javiersc.hubdle.project.extensions.config.documentation.changelog._in
import com.javiersc.hubdle.project.extensions.config.documentation.changelog._internal.changelogFile
import com.javiersc.hubdle.project.extensions.config.documentation.changelog._internal.fromString
import com.javiersc.kotlin.stdlib.isNotNullNorEmpty
import com.javiersc.kotlin.stdlib.or
import java.io.File
import javax.inject.Inject
import org.eclipse.jgit.api.Git
Expand Down Expand Up @@ -153,22 +154,19 @@ private fun AddChangelogItemTask.setupRenovate(): Unit =

private fun String.addChanges(header: String, changes: List<String>): Changelog =
buildList<String> {
val firstVersionIndex =
lines().indexOfFirst {
val isUnreleased: Boolean =
it.contains("## [Unreleased]", true) || it.contains("## Unreleased", true)
val isNotUnreleased = !isUnreleased
val isHeader = it.startsWith("## [") || it.startsWith("## ")

isHeader && isNotUnreleased
}
val lastUnreleasedLineIndex: Int =
lines()
.indexOfFirst { line -> line.isHeader && !line.isUnreleased }
.takeIf { it != -1 }
.or { lines().lastIndex }
var shouldAddUpdate = true
lines().onEach { line ->
if (line.startsWith(header) && shouldAddUpdate) {
shouldAddUpdate = false
add(line)
for (change in changes) {
if (lines().subList(0, firstVersionIndex).none { it.contains(change) }) {
val unreleasedLines = lines().subList(0, lastUnreleasedLineIndex)
if (unreleasedLines.none { it.contains(change) }) {
add("- $change")
}
}
Expand All @@ -180,7 +178,7 @@ private fun String.addChanges(header: String, changes: List<String>): Changelog
forEachIndexed { index: Int, line ->
val updateRegex = """(- `)(.*)( )(->)( )(.*)(`)"""
if (Regex(updateRegex).matches(line)) {
for (j in index + 1 until firstVersionIndex) {
for (j in index + 1 until lastUnreleasedLineIndex) {
val lineToRemove = this[j]
val shouldRemovePreviousUpdate =
lineToRemove.module == line.module &&
Expand Down Expand Up @@ -264,3 +262,8 @@ private val String.module: String
.replaceAfter("->", "")
.replace("->", "")
.drop(1)

private val String.isHeader: Boolean
get() = startsWith("## [") || startsWith("## ")
private val String.isUnreleased: Boolean
get() = contains("## [Unreleased]", true) || contains("## Unreleased", true)
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package com.javiersc.hubdle.project._utils

import java.io.File
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.Config
import org.eclipse.jgit.lib.GpgConfig

internal fun File.commitAndCheckout(message: String, branch: String = "sandbox/hubdle") {
val git: Git = Git.init().setDirectory(this).call()
git.add().addFilepattern(".").call()
git.commit().setMessage(message).call()
git.commit().setSign(false).setGpgConfig(GpgConfig(Config())).setMessage(message).call()
git.checkout().setCreateBranch(true).setName(branch).call()
}
Original file line number Diff line number Diff line change
Expand Up @@ -107,10 +107,10 @@ internal class AddChangelogItemTest : GradleTestKitTest() {
projectDir.commitAndCheckout(
message =
"""
| datasource | package | from | to |
| ---------- | --------------------------------------------------------- | ----- | --- |
| maven | com.gradle.enterprise:com.gradle.enterprise.gradle.plugin | 3.6.4 | 3.7 |
"""
| datasource | package | from | to |
| ---------- | --------------------------------------------------------- | ----- | --- |
| maven | com.gradle.enterprise:com.gradle.enterprise.gradle.plugin | 3.6.4 | 3.7 |
"""
.trimIndent(),
)
gradlewArgumentFromTXT()
Expand All @@ -124,13 +124,13 @@ internal class AddChangelogItemTest : GradleTestKitTest() {
projectDir.commitAndCheckout(
message =
"""
| datasource | package | from | to |
| ---------- | --------------------------------------------------------- | ----- | ----- |
| maven | com.gradle.enterprise:com.gradle.enterprise.gradle.plugin | 3.6.4 | 3.7 |
| maven | com.javiersc.mokoki:mokoki-core | 1.0.0 | 1.0.1 |
| maven | com.javiersc.either:either-core | 2.0.1 | 2.0.2 |
| maven | com.javiersc.either:either-core | 2.0.1 | 2.0.2 |
"""
| datasource | package | from | to |
| ---------- | --------------------------------------------------------- | ----- | ----- |
| maven | com.gradle.enterprise:com.gradle.enterprise.gradle.plugin | 3.6.4 | 3.7 |
| maven | com.javiersc.mokoki:mokoki-core | 1.0.0 | 1.0.1 |
| maven | com.javiersc.either:either-core | 2.0.1 | 2.0.2 |
| maven | com.javiersc.either:either-core | 2.0.1 | 2.0.2 |
"""
.trimIndent(),
)
gradlewArgumentFromTXT()
Expand Down Expand Up @@ -193,4 +193,21 @@ internal class AddChangelogItemTest : GradleTestKitTest() {
projectDir.testChangelog()
}
}

@Test
fun `renovate 9`() {
gradleTestKitTest("$basePath/sandbox-renovate-9") {
projectDir.commitAndCheckout(
message =
"""
| datasource | package | from | to |
| ---------- | ----------------------------------------------------- | ------------------------------ | ------------------------------ |
| maven | com.javiersc.hubdle:com.javiersc.hubdle.gradle.plugin | 0.6.4+2.0.0-dev-17175-SNAPSHOT | 0.6.4+2.0.0-dev-18803-SNAPSHOT |
"""
.trimIndent(),
)
gradlewArgumentFromTXT()
projectDir.testChangelog()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
addChangelogItem --renovateCommitTable --no-scan --stacktrace
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Changelog

## [Unreleased]

### Added

### Changed

### Deprecated

### Removed

### Fixed

### Updated

- `gradle -> 8.5`
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Changelog

## [Unreleased]

### Added

### Changed

### Deprecated

### Fixed

### Removed

### Updated

- `com.javiersc.hubdle:com.javiersc.hubdle.gradle.plugin -> 0.6.4+2.0.0-dev-18803-SNAPSHOT`
- `gradle -> 8.5`
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
@file:Suppress("PackageDirectoryMismatch")

plugins {
id("com.javiersc.hubdle")
}

hubdle {
config {
documentation {
changelog()
}

versioning {
isEnabled.set(false)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
####################################################################################################
### CONFIGURATION ###
####################################################################################################
root.project.name=sandbox-project
project.group=com.javiersc.foo
main.project.name=bar.baz
####################################################################################################
### CODE ANALYSIS ###
####################################################################################################
analysis.sonar.organization=javiersc
####################################################################################################
### POM ###
####################################################################################################
pom.name=Sandbox name
pom.description=Sandbox description
pom.url=https://github.com/JavierSegoviaCordoba/sandbox-project
pom.license.name=The Apache License, Version 2.0
pom.license.url=https://www.apache.org/licenses/LICENSE-2.0.txt
pom.developer.id=JavierSegoviaCordoba
pom.developer.name=Javier Segovia Cordoba
pom.developer.email=[email protected]
pom.scm.url=https://github.com/JavierSegoviaCordoba/sandbox-project
pom.scm.connection=scm:git:[email protected]:JavierSegoviaCordoba/sandbox-project.git
pom.scm.developerConnection=scm:git:[email protected]:JavierSegoviaCordoba/sandbox-project.git
####################################################################################################
### Gradle ###
####################################################################################################
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@file:Suppress("PackageDirectoryMismatch")

plugins { //
id("com.javiersc.hubdle")
}

dependencyResolutionManagement {
repositories { //
mavenLocalTest()
}
}

0 comments on commit 6d9fe3c

Please sign in to comment.