From fbfd173bbdc2c00cc13a62619e1caa95e8cbb75f Mon Sep 17 00:00:00 2001 From: Rob Oxspring Date: Wed, 24 Sep 2025 00:27:55 +0100 Subject: [PATCH 1/8] fix(extensions): underscores are invalid in prerelease --- .../internal/extensions/RefExtensions.kt | 2 +- .../extensions/RefExtensionsKtSpec.kt | 60 +++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/test/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensionsKtSpec.kt diff --git a/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt b/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt index 687aab5b..14b8b13a 100644 --- a/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt +++ b/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt @@ -22,7 +22,7 @@ import org.eclipse.jgit.lib.Ref const val R_REMOTES_ORIGIN = "$R_REMOTES$DEFAULT_REMOTE_NAME" -private val validCharacters: Regex = """[^0-9A-Za-z\-_.]+""".toRegex() +private val validCharacters: Regex = """[^0-9A-Za-z\-.]+""".toRegex() fun Ref.prereleaseLabel(): String = name.trim() diff --git a/src/test/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensionsKtSpec.kt b/src/test/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensionsKtSpec.kt new file mode 100644 index 00000000..693168c4 --- /dev/null +++ b/src/test/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensionsKtSpec.kt @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2024 Figure Technologies + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.figure.gradle.semver.internal.extensions + +import io.github.z4kn4fein.semver.nextPreRelease +import io.github.z4kn4fein.semver.toVersion +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.shouldBe +import org.eclipse.jgit.lib.Constants +import org.eclipse.jgit.lib.ObjectId +import org.eclipse.jgit.lib.Ref +import org.eclipse.jgit.lib.Ref.Storage + +class RefExtensionsKtSpec : FunSpec({ + test("prereleaseLabel for dependabot branch") { + // Create a test implementation of Ref + val branchName = "dependabot-github_actions-softprops-action-gh-release-2" + val fullRefName = Constants.R_HEADS + branchName + + // Create a mock Ref with the specified branch name + val ref = object : Ref { + override fun getName(): String = fullRefName + + override fun getObjectId(): ObjectId? = null + + override fun getPeeledObjectId(): ObjectId? = null + + override fun isPeeled(): Boolean = false + + override fun getStorage(): Storage = Storage.LOOSE + + override fun isSymbolic(): Boolean = false + + override fun getTarget(): Ref? = null + + override fun getLeaf(): Ref = this + } + + // Test the prereleaseLabel extension function + val expectedLabel = "dependabot-github-actions-softprops-action-gh-release-2" + ref.prereleaseLabel() shouldBe expectedLabel + + // Test the prereleaseLabel extension function produces valid preRelease values + val expectedVersion = "1.0.1-$expectedLabel".toVersion(true) + "1.0.0".toVersion(true).nextPreRelease(expectedLabel) shouldBe expectedVersion + } +}) From c95f760fa69598187552b3ab3f45ae837c26ea3a Mon Sep 17 00:00:00 2001 From: Rob Oxspring Date: Wed, 24 Sep 2025 00:29:57 +0100 Subject: [PATCH 2/8] chore(spotless): Update copyright headers --- build.gradle.kts | 2 +- settings.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 35f7c7ff..e086af48 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 Figure Technologies + * Copyright (C) 2024-2025 Figure Technologies * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/settings.gradle.kts b/settings.gradle.kts index 5095d6fe..b855ed2a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 Figure Technologies + * Copyright (C) 2024-2025 Figure Technologies * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From d0c58e4e6e1ef00bd27aab7558d3b67dbdfb3b7f Mon Sep 17 00:00:00 2001 From: Tyler Crawford <91682066+tbcrawford@users.noreply.github.com> Date: Wed, 24 Sep 2025 09:53:21 -0400 Subject: [PATCH 3/8] Update src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt --- .../figure/gradle/semver/internal/extensions/RefExtensions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt b/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt index 14b8b13a..6f3d451f 100644 --- a/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt +++ b/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt @@ -22,7 +22,7 @@ import org.eclipse.jgit.lib.Ref const val R_REMOTES_ORIGIN = "$R_REMOTES$DEFAULT_REMOTE_NAME" -private val validCharacters: Regex = """[^0-9A-Za-z\-.]+""".toRegex() +private val invalidSemverCharacters: Regex = """[^0-9A-Za-z\-.]+""".toRegex() fun Ref.prereleaseLabel(): String = name.trim() From 651a12e59072cfe26384960fc6be8a4472a96839 Mon Sep 17 00:00:00 2001 From: Tyler Crawford <91682066+tbcrawford@users.noreply.github.com> Date: Wed, 24 Sep 2025 17:20:12 -0400 Subject: [PATCH 4/8] Update src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt --- .../figure/gradle/semver/internal/extensions/RefExtensions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt b/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt index 6f3d451f..14b8b13a 100644 --- a/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt +++ b/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt @@ -22,7 +22,7 @@ import org.eclipse.jgit.lib.Ref const val R_REMOTES_ORIGIN = "$R_REMOTES$DEFAULT_REMOTE_NAME" -private val invalidSemverCharacters: Regex = """[^0-9A-Za-z\-.]+""".toRegex() +private val validCharacters: Regex = """[^0-9A-Za-z\-.]+""".toRegex() fun Ref.prereleaseLabel(): String = name.trim() From 3a4aecd2b93571ea280c657afcc825d3e4496038 Mon Sep 17 00:00:00 2001 From: Tyler Crawford Date: Thu, 25 Sep 2025 09:21:41 -0400 Subject: [PATCH 5/8] fix(branching): support cross-repo PRs --- .../com/figure/gradle/semver/internal/command/Branch.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/figure/gradle/semver/internal/command/Branch.kt b/src/main/kotlin/com/figure/gradle/semver/internal/command/Branch.kt index 34a185a0..78fd2ffc 100644 --- a/src/main/kotlin/com/figure/gradle/semver/internal/command/Branch.kt +++ b/src/main/kotlin/com/figure/gradle/semver/internal/command/Branch.kt @@ -34,7 +34,9 @@ class Branch( Env.isCI -> Env.githubHeadRef ?: Env.githubRefName else -> git.repository.branch } - return branchList.find(refName) ?: error("Could not find current branch: $refName") + return branchList.find(refName) + ?: headRef.takeIf { !it.target.name.startsWith("refs/heads/") } + ?: error("Could not find current branch: $refName") } fun isOnMainBranch(providedMainBranch: String? = null): Boolean = From f09adf1cb1ee007b92367b46648468b759d6c49b Mon Sep 17 00:00:00 2001 From: Tyler Crawford Date: Fri, 26 Sep 2025 10:04:17 -0400 Subject: [PATCH 6/8] Cleanup --- .../com/figure/gradle/semver/internal/command/Branch.kt | 4 +--- .../gradle/semver/internal/extensions/RefExtensions.kt | 8 ++++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/com/figure/gradle/semver/internal/command/Branch.kt b/src/main/kotlin/com/figure/gradle/semver/internal/command/Branch.kt index 78fd2ffc..34a185a0 100644 --- a/src/main/kotlin/com/figure/gradle/semver/internal/command/Branch.kt +++ b/src/main/kotlin/com/figure/gradle/semver/internal/command/Branch.kt @@ -34,9 +34,7 @@ class Branch( Env.isCI -> Env.githubHeadRef ?: Env.githubRefName else -> git.repository.branch } - return branchList.find(refName) - ?: headRef.takeIf { !it.target.name.startsWith("refs/heads/") } - ?: error("Could not find current branch: $refName") + return branchList.find(refName) ?: error("Could not find current branch: $refName") } fun isOnMainBranch(providedMainBranch: String? = null): Boolean = diff --git a/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt b/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt index 14b8b13a..95e1fadc 100644 --- a/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt +++ b/src/main/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensions.kt @@ -22,7 +22,11 @@ import org.eclipse.jgit.lib.Ref const val R_REMOTES_ORIGIN = "$R_REMOTES$DEFAULT_REMOTE_NAME" -private val validCharacters: Regex = """[^0-9A-Za-z\-.]+""".toRegex() +/** + * Regex pattern matching any character not allowed in branch names: + * excludes all except digits, letters, hyphens, and periods. + */ +private val invalidCharacters: Regex = """[^0-9A-Za-z\-.]+""".toRegex() fun Ref.prereleaseLabel(): String = name.trim() @@ -30,7 +34,7 @@ fun Ref.prereleaseLabel(): String = .replace(R_HEADS, "") .replace("$R_REMOTES_ORIGIN/", "") .removePrefix("/") - .replace(validCharacters, "-") + .replace(invalidCharacters, "-") fun String.shortName(): String = trim() From 0675aaee92bdd711138c6cc1742d4293f9babf82 Mon Sep 17 00:00:00 2001 From: Tyler Crawford Date: Fri, 26 Sep 2025 13:56:38 -0400 Subject: [PATCH 7/8] Update Copyright year --- .../gradle/semver/internal/command/extension/RefExtensions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/figure/gradle/semver/internal/command/extension/RefExtensions.kt b/src/main/kotlin/com/figure/gradle/semver/internal/command/extension/RefExtensions.kt index 45b946e1..4fbeb831 100644 --- a/src/main/kotlin/com/figure/gradle/semver/internal/command/extension/RefExtensions.kt +++ b/src/main/kotlin/com/figure/gradle/semver/internal/command/extension/RefExtensions.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 Figure Technologies + * Copyright (C) 2025 Figure Technologies * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From b9c1e0aecc85c15f566ed223e900d8ed60446f06 Mon Sep 17 00:00:00 2001 From: Tyler Crawford Date: Fri, 26 Sep 2025 13:57:57 -0400 Subject: [PATCH 8/8] Fix the right Copyright year --- .../gradle/semver/internal/extensions/RefExtensionsKtSpec.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensionsKtSpec.kt b/src/test/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensionsKtSpec.kt index 693168c4..3d503203 100644 --- a/src/test/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensionsKtSpec.kt +++ b/src/test/kotlin/com/figure/gradle/semver/internal/extensions/RefExtensionsKtSpec.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 Figure Technologies + * Copyright (C) 2025 Figure Technologies * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License.