Skip to content
Merged
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
@@ -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<String> 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")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
List<String> 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<String> args = new ArrayList<>()
args.add(":myserver:generateTransportVersion")
args.addAll(additionalArgs);
args.addAll(additionalArgs)
return gradleRunner(args.toArray())
}

Expand Down Expand Up @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Boolean> getResolveConflict();
abstract Property<Boolean> getResolveConflict();

/**
* The name of the upper bounds file which will be used at runtime on the current branch. Normally
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

import java.util.Map;
import java.util.Properties;
import java.util.function.Consumer;

public class TransportVersionResourcesPlugin implements Plugin<Project> {

Expand Down Expand Up @@ -82,16 +83,28 @@ public void apply(Project project) {
t.into(resourceRoot + "/definitions", c -> c.from(generateManifestTask));
});

Consumer<GenerateTransportVersionDefinitionTask> generationConfiguration = t -> {
Copy link
Contributor

@mark-vieira mark-vieira Sep 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FWIW, if we made this an Action then we could make applying this to tasks slightly more ergonomic. Such as:

Action<MyTask> commonConfig = t -> { t.setGroup("foo") };
project.getTasks.register("myTask", MyTask.class, commonConfig).configure { 
  // unique config 
};

or

project.getTasks.register("myTask", MyTask.class, t -> {
  // unique config
}.configure(commonConfig);

Pick your preferred style.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I forgot about this, I'll do it the next time I tweak this file.

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);
Expand Down
4 changes: 2 additions & 2 deletions docs/internal/Versioning.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down