Skip to content

Commit 0fd3b59

Browse files
Calculate version using 'first-parent' only for release branches. For PRs calculate on latest released version. (#11385)
Calculate version using 'first-parent' only for release branches. For PRs calculate on latest released version. Merged with master. Changed code to use base class helpers. Co-authored-by: alexey.kuznetsov <alexey.kuznetsov@datadoghq.com>
1 parent 9353c26 commit 0fd3b59

2 files changed

Lines changed: 61 additions & 4 deletions

File tree

buildSrc/src/main/kotlin/datadog/gradle/plugin/version/TracerVersionPlugin.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,18 @@ class TracerVersionPlugin @Inject constructor(
4848
// Not a git repository
4949
extension.defaultVersion.get()
5050
} else {
51+
val currentBranchProvider = gitCurrentBranchProvider(repoWorkingDirectory)
5152
providerFactory.zip(
52-
gitDescribeProvider(extension, repoWorkingDirectory),
53-
gitCurrentBranchProvider(repoWorkingDirectory)
53+
currentBranchProvider.flatMap { currentBranch ->
54+
// Use --first-parent only on release branches so they stay anchored to their own
55+
// version line; feature branches pick up newer tags merged in from main.
56+
gitDescribeProvider(
57+
extension,
58+
repoWorkingDirectory,
59+
firstParent = currentBranch.startsWith("release/v")
60+
)
61+
},
62+
currentBranchProvider
5463
) { describeString, currentBranch ->
5564
toTracerVersion(describeString, extension) {
5665
when {
@@ -87,7 +96,8 @@ class TracerVersionPlugin @Inject constructor(
8796

8897
private fun gitDescribeProvider(
8998
extension: TracerVersionExtension,
90-
repoWorkingDirectory: File
99+
repoWorkingDirectory: File,
100+
firstParent: Boolean,
91101
) = providerFactory.of(GitCommandValueSource::class.java) {
92102
parameters {
93103
val tagPrefix = extension.tagVersionPrefix.get()
@@ -96,10 +106,13 @@ class TracerVersionPlugin @Inject constructor(
96106
"describe",
97107
"--abbrev=8",
98108
"--tags",
99-
"--first-parent",
100109
"--match=$tagPrefix[0-9].[0-9]*.[0-9]*",
101110
)
102111

112+
if (firstParent) {
113+
gitCommand.add("--first-parent")
114+
}
115+
103116
if (extension.detectDirty.get()) {
104117
gitCommand.add("--dirty")
105118
}

buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,50 @@ class TracerVersionIntegrationTest : VersionPluginsFixture() {
144144
)
145145
}
146146

147+
@Test
148+
fun `should increment minor from merged main version tag on feature branch`() {
149+
assertTracerVersion(
150+
expectedVersion = "1.53.0-SNAPSHOT",
151+
beforeGradle = {
152+
initGitRepo()
153+
exec("git", "tag", "v1.50.0", "-m", "")
154+
exec("git", "switch", "-c", "feature")
155+
writeFile("feature.txt", "feature")
156+
exec("git", "add", "feature.txt")
157+
exec("git", "commit", "-m", "Feature commit")
158+
exec("git", "switch", "main")
159+
writeFile("main.txt", "main")
160+
exec("git", "add", "main.txt")
161+
exec("git", "commit", "-m", "Main commit")
162+
exec("git", "tag", "v1.52.0", "-m", "")
163+
exec("git", "switch", "feature")
164+
exec("git", "merge", "main", "--no-edit")
165+
},
166+
)
167+
}
168+
169+
@Test
170+
fun `should increment patch from first parent on release branch after main merge`() {
171+
assertTracerVersion(
172+
expectedVersion = "1.52.1-SNAPSHOT",
173+
beforeGradle = {
174+
initGitRepo()
175+
exec("git", "tag", "v1.52.0", "-m", "")
176+
exec("git", "switch", "-c", "release/v1.52.x")
177+
writeFile("release.txt", "release")
178+
exec("git", "add", "release.txt")
179+
exec("git", "commit", "-m", "Release commit")
180+
exec("git", "switch", "main")
181+
writeFile("main.txt", "main")
182+
exec("git", "add", "main.txt")
183+
exec("git", "commit", "-m", "Main commit")
184+
exec("git", "tag", "v1.53.0", "-m", "")
185+
exec("git", "switch", "release/v1.52.x")
186+
exec("git", "merge", "main", "--no-edit")
187+
},
188+
)
189+
}
190+
147191
private fun assertTracerVersion(
148192
expectedVersion: String,
149193
workingDirectory: File = projectDir,

0 commit comments

Comments
 (0)