Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,18 @@ class TracerVersionPlugin @Inject constructor(
// Not a git repository
extension.defaultVersion.get()
} else {
val currentBranchProvider = gitCurrentBranchProvider(repoWorkingDirectory)
providerFactory.zip(
gitDescribeProvider(extension, repoWorkingDirectory),
gitCurrentBranchProvider(repoWorkingDirectory)
currentBranchProvider.flatMap { currentBranch ->
// Use --first-parent only on release branches so they stay anchored to their own
// version line; feature branches pick up newer tags merged in from main.
gitDescribeProvider(
extension,
repoWorkingDirectory,
firstParent = currentBranch.startsWith("release/v")
)
},
currentBranchProvider
) { describeString, currentBranch ->
toTracerVersion(describeString, extension) {
when {
Expand Down Expand Up @@ -87,7 +96,8 @@ class TracerVersionPlugin @Inject constructor(

private fun gitDescribeProvider(
extension: TracerVersionExtension,
repoWorkingDirectory: File
repoWorkingDirectory: File,
firstParent: Boolean,
) = providerFactory.of(GitCommandValueSource::class.java) {
parameters {
val tagPrefix = extension.tagVersionPrefix.get()
Expand All @@ -96,10 +106,13 @@ class TracerVersionPlugin @Inject constructor(
"describe",
"--abbrev=8",
"--tags",
"--first-parent",
"--match=$tagPrefix[0-9].[0-9]*.[0-9]*",
)

if (firstParent) {
gitCommand.add("--first-parent")
}

if (extension.detectDirty.get()) {
gitCommand.add("--dirty")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,29 @@ class TracerVersionIntegrationTest {
)
}

@Test
fun `should increment minor from merged main version tag on feature branch`(@TempDir projectDir: File) {
val fixture = VersionPluginsFixture(projectDir)
fixture.assertTracerVersion(
expectedVersion = "1.53.0-SNAPSHOT",
beforeGradle = {
fixture.initGitRepo()
fixture.exec("git", "tag", "v1.50.0", "-m", "")
fixture.exec("git", "switch", "-c", "feature")
File(projectDir, "feature.txt").writeText("feature")
fixture.exec("git", "add", "feature.txt")
fixture.exec("git", "commit", "-m", "Feature commit")
fixture.exec("git", "switch", "main")
File(projectDir, "main.txt").writeText("main")
fixture.exec("git", "add", "main.txt")
fixture.exec("git", "commit", "-m", "Main commit")
fixture.exec("git", "tag", "v1.52.0", "-m", "")
fixture.exec("git", "switch", "feature")
fixture.exec("git", "merge", "main", "--no-edit")
},
)
}

@Test
fun `should increment minor with snapshot and dirtiness with added commits after version tag and dirty`(@TempDir projectDir: File) {
val fixture = VersionPluginsFixture(projectDir)
Expand All @@ -106,6 +129,29 @@ class TracerVersionIntegrationTest {
)
}

@Test
fun `should increment patch from first parent on release branch after main merge`(@TempDir projectDir: File) {
val fixture = VersionPluginsFixture(projectDir)
fixture.assertTracerVersion(
expectedVersion = "1.52.1-SNAPSHOT",
beforeGradle = {
fixture.initGitRepo()
fixture.exec("git", "tag", "v1.52.0", "-m", "")
fixture.exec("git", "switch", "-c", "release/v1.52.x")
File(projectDir, "release.txt").writeText("release")
fixture.exec("git", "add", "release.txt")
fixture.exec("git", "commit", "-m", "Release commit")
fixture.exec("git", "switch", "main")
File(projectDir, "main.txt").writeText("main")
fixture.exec("git", "add", "main.txt")
fixture.exec("git", "commit", "-m", "Main commit")
fixture.exec("git", "tag", "v1.53.0", "-m", "")
fixture.exec("git", "switch", "release/v1.52.x")
fixture.exec("git", "merge", "main", "--no-edit")
},
)
}

@Test
fun `should increment patch on release branch and no patch release tag`(@TempDir projectDir: File) {
val fixture = VersionPluginsFixture(projectDir)
Expand Down
Loading