From f1f368ad0dab8682d2f1bde542927581a60063e1 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Thu, 25 Sep 2025 11:01:40 -0700 Subject: [PATCH] Only validate upper bound of current branch on release branches (#135391) When transport version changes are backported they may carry along multiple upper bounds files that have been updated. Yet in release branches the only upper bound file that matter is that of the current branch. This commit adjusts validation on release branches to only check the current upper bound file. --- .../TransportVersionValidationFuncTest.groovy | 17 +++++++++++++++++ .../ValidateTransportVersionResourcesTask.java | 18 +++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionValidationFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionValidationFuncTest.groovy index 861b7a11b8f1a..712ac849222ad 100644 --- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionValidationFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionValidationFuncTest.groovy @@ -294,4 +294,21 @@ class TransportVersionValidationFuncTest extends AbstractTransportVersionFuncTes then: result.task(":myserver:validateTransportVersionResources").outcome == TaskOutcome.SUCCESS } + + def "only current upper bound validated on release branch"() { + given: + file("myserver/build.gradle") << """ + tasks.named('validateTransportVersionResources') { + currentUpperBoundName = '9.0' + } + """ + referableAndReferencedTransportVersion("some_tv", "8124000,8012004") + transportVersionUpperBound("9.1", "some_tv", "8012004") + + when: + def result = gradleRunner("validateTransportVersionResources").build() + + then: + result.task(":myserver:validateTransportVersionResources").outcome == TaskOutcome.SUCCESS + } } diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionResourcesTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionResourcesTask.java index 03a22cc586fc7..9bf97337287e7 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionResourcesTask.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionResourcesTask.java @@ -83,6 +83,7 @@ public void validateTransportVersions() throws IOException { Map allDefinitions = collectAllDefinitions(referableDefinitions, unreferableDefinitions); Map> idsByBase = collectIdsByBase(allDefinitions.values()); Map upperBounds = resources.getUpperBounds(); + TransportVersionUpperBound currentUpperBound = upperBounds.get(getCurrentUpperBoundName().get()); boolean onReleaseBranch = checkIfDefinitelyOnReleaseBranch(upperBounds); for (var definition : referableDefinitions.values()) { @@ -94,14 +95,21 @@ public void validateTransportVersions() throws IOException { } for (var entry : idsByBase.entrySet()) { - validateBase(entry.getKey(), entry.getValue()); + int baseId = entry.getKey(); + // on main we validate all bases, but on release branches we only validate up to the current upper bound + if (onReleaseBranch == false || baseId <= currentUpperBound.definitionId().base()) { + validateBase(baseId, entry.getValue()); + } } - for (var upperBound : upperBounds.values()) { - validateUpperBound(upperBound, allDefinitions, idsByBase); - } + if (onReleaseBranch) { + // on release branches we only check the current upper bound, others may be inaccurate + validateUpperBound(currentUpperBound, allDefinitions, idsByBase); + } else { + for (var upperBound : upperBounds.values()) { + validateUpperBound(upperBound, allDefinitions, idsByBase); + } - if (onReleaseBranch == false) { validatePrimaryIds(resources, upperBounds, allDefinitions); } }