diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/ResolveTransportVersionConflictFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/ResolveTransportVersionConflictFuncTest.groovy new file mode 100644 index 0000000000000..44801d97a26fc --- /dev/null +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/ResolveTransportVersionConflictFuncTest.groovy @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +package org.elasticsearch.gradle.internal.transport + +import org.gradle.testkit.runner.BuildResult +import org.gradle.testkit.runner.GradleRunner +import org.gradle.testkit.runner.TaskOutcome + +class ResolveTransportVersionConflictFuncTest extends AbstractTransportVersionFuncTest { + + GradleRunner runResolveAndValidateTask() { + List args = List.of(":myserver:validateTransportVersionResources", ":myserver:resolveTransportVersionConflict") + return gradleRunner(args.toArray()) + } + + void assertResolveAndValidateSuccess(BuildResult result) { + assert result.task(":myserver:resolveTransportVersionConflict").outcome == TaskOutcome.SUCCESS + assert result.task(":myserver:validateTransportVersionResources").outcome == TaskOutcome.SUCCESS + } + + def "update flag works with current"() { + given: + referableAndReferencedTransportVersion("new_tv", "8123000") + file("myserver/src/main/resources/transport/latest/9.2.csv").text = + """ + <<<<<<< HEAD + existing_92,8123000 + ======= + new_tv,8123000 + >>>>>> name + """.strip() + + when: + def result = runResolveAndValidateTask().build() + + then: + assertResolveAndValidateSuccess(result) + assertReferableDefinition("existing_92", "8123000,8012001") + assertReferableDefinition("new_tv", "8124000") + assertUpperBound("9.2", "new_tv,8124000") + } + + def "update flag works with multiple branches"() { + given: + referableAndReferencedTransportVersion("new_tv", "8123000,8012001,7123001") + file("myserver/src/main/resources/transport/latest/9.2.csv").text = + """ + <<<<<<< HEAD + existing_92,8123000 + ======= + new_tv,8123000 + >>>>>> name + """.strip() + file("myserver/src/main/resources/transport/latest/9.1.csv").text = + """ + <<<<<<< HEAD + existing_92,8012001 + ======= + new_tv,8012001 + >>>>>> name + """.strip() + file("myserver/src/main/resources/transport/latest/8.19.csv").text = + """ + <<<<<<< HEAD + initial_8.19.7,7123001 + ======= + new_tv,7123001 + >>>>>> name + """.strip() + + when: + def result = runResolveAndValidateTask().build() + + then: + assertResolveAndValidateSuccess(result) + assertReferableDefinition("existing_92", "8123000,8012001") + assertUnreferableDefinition("initial_8.19.7", "7123001") + assertReferableDefinition("new_tv", "8124000,8012002,7123002") + assertUpperBound("9.2", "new_tv,8124000") + assertUpperBound("9.1", "new_tv,8012002") + assertUpperBound("8.19", "new_tv,7123002") + } +} diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionGenerationFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionGenerationFuncTest.groovy index 0762607e15b9b..72c33746e32e9 100644 --- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionGenerationFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionGenerationFuncTest.groovy @@ -19,14 +19,14 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes List args = new ArrayList<>() args.add(":myserver:validateTransportVersionResources") args.add(":myserver:generateTransportVersion") - args.addAll(additionalArgs); + args.addAll(additionalArgs) return gradleRunner(args.toArray()) } def runGenerateTask(String... additionalArgs) { List args = new ArrayList<>() args.add(":myserver:generateTransportVersion") - args.addAll(additionalArgs); + args.addAll(additionalArgs) return gradleRunner(args.toArray()) } @@ -277,77 +277,6 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes assertUpperBound("9.2", "second_tv,8124000") } - def "update flag works with current"() { - given: - referableAndReferencedTransportVersion("new_tv", "8123000") - file("myserver/src/main/resources/transport/latest/9.2.csv").text = - """ - <<<<<<< HEAD - existing_92,8123000 - ======= - new_tv,8123000 - >>>>>> name - """.strip() - - when: - def result = runGenerateAndValidateTask("--resolve-conflict").build() - - then: - assertGenerateAndValidateSuccess(result) - assertReferableDefinition("existing_92", "8123000,8012001") - assertReferableDefinition("new_tv", "8124000") - assertUpperBound("9.2", "new_tv,8124000") - } - - def "update flag works with multiple branches"() { - given: - referableAndReferencedTransportVersion("new_tv", "8123000,8012001,7123001") - file("myserver/src/main/resources/transport/latest/9.2.csv").text = - """ - <<<<<<< HEAD - existing_92,8123000 - ======= - new_tv,8123000 - >>>>>> name - """.strip() - file("myserver/src/main/resources/transport/latest/9.1.csv").text = - """ - <<<<<<< HEAD - existing_92,8012001 - ======= - new_tv,8012001 - >>>>>> name - """.strip() - file("myserver/src/main/resources/transport/latest/8.19.csv").text = - """ - <<<<<<< HEAD - initial_8.19.7,7123001 - ======= - new_tv,7123001 - >>>>>> name - """.strip() - - when: - def result = runGenerateAndValidateTask("--resolve-conflict").build() - - then: - assertGenerateAndValidateSuccess(result) - assertReferableDefinition("existing_92", "8123000,8012001") - assertUnreferableDefinition("initial_8.19.7", "7123001") - assertReferableDefinition("new_tv", "8124000,8012002,7123002") - assertUpperBound("9.2", "new_tv,8124000") - assertUpperBound("9.1", "new_tv,8012002") - assertUpperBound("8.19", "new_tv,7123002") - } - - def "update flag cannot be used with backport branches"() { - when: - def result = runGenerateTask("--resolve-conflict", "--backport-branches=9.1").buildAndFail() - - then: - assertGenerateFailure(result, "Cannot use --resolve-conflict with --backport-branches") - } - def "branches param order does not matter"() { given: referencedTransportVersion("test_tv") diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/GenerateTransportVersionDefinitionTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/GenerateTransportVersionDefinitionTask.java index 527130c7b9a5f..5cd66c6f322cf 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/GenerateTransportVersionDefinitionTask.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/GenerateTransportVersionDefinitionTask.java @@ -74,11 +74,7 @@ public abstract class GenerateTransportVersionDefinitionTask extends DefaultTask @Input @Optional - @Option( - option = "resolve-conflict", - description = "Regenerate the transport version currently being added to upstream to resolve a merge conflict" - ) - public abstract Property getResolveConflict(); + abstract Property getResolveConflict(); /** * The name of the upper bounds file which will be used at runtime on the current branch. Normally diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionResourcesPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionResourcesPlugin.java index a5b4d36761244..4f8cf995f100e 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionResourcesPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionResourcesPlugin.java @@ -23,6 +23,7 @@ import java.util.Map; import java.util.Properties; +import java.util.function.Consumer; public class TransportVersionResourcesPlugin implements Plugin { @@ -82,16 +83,28 @@ public void apply(Project project) { t.into(resourceRoot + "/definitions", c -> c.from(generateManifestTask)); }); + Consumer generationConfiguration = t -> { + t.setGroup(taskGroup); + t.getReferencesFiles().setFrom(tvReferencesConfig); + t.getIncrement().convention(1000); + t.getCurrentUpperBoundName().convention(currentVersion.getMajor() + "." + currentVersion.getMinor()); + }; + var generateDefinitionsTask = project.getTasks() .register("generateTransportVersion", GenerateTransportVersionDefinitionTask.class, t -> { - t.setGroup(taskGroup); + generationConfiguration.accept(t); t.setDescription("(Re)generates a transport version definition file"); - t.getReferencesFiles().setFrom(tvReferencesConfig); - t.getIncrement().convention(1000); - t.getCurrentUpperBoundName().convention(currentVersion.getMajor() + "." + currentVersion.getMinor()); }); validateTask.configure(t -> t.mustRunAfter(generateDefinitionsTask)); + var resolveConflictTask = project.getTasks() + .register("resolveTransportVersionConflict", GenerateTransportVersionDefinitionTask.class, t -> { + generationConfiguration.accept(t); + t.setDescription("Resolve merge conflicts in transport version internal state files"); + t.getResolveConflict().set(true); + }); + validateTask.configure(t -> t.mustRunAfter(resolveConflictTask)); + var generateInitialTask = project.getTasks() .register("generateInitialTransportVersion", GenerateInitialTransportVersionTask.class, t -> { t.setGroup(taskGroup); diff --git a/docs/internal/Versioning.md b/docs/internal/Versioning.md index 1c76964a75f67..93d64ab475de8 100644 --- a/docs/internal/Versioning.md +++ b/docs/internal/Versioning.md @@ -122,9 +122,9 @@ the latter will have a merge conflict with `main`. In the event of a conflict, merge `main` into your branch. You will have conflict(s) with transport version internal state files. Run the following -generate task to resolve the conflict(s): +task to resolve the conflict(s): - ./gradlew generateTransportVersion --resolve-conflict + ./gradlew resolveTransportVersionConflict This command will regenerate your transport version and stage the updated state files in git. You can then proceed with your merge as usual.