Skip to content

Commit faab728

Browse files
committed
wip, worked on generate task
1 parent 76189b3 commit faab728

File tree

4 files changed

+82
-37
lines changed

4 files changed

+82
-37
lines changed
Lines changed: 66 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111

1212
import org.elasticsearch.gradle.VersionProperties;
1313
import org.elasticsearch.gradle.internal.transport.TransportVersionUtils.MajorMinor;
14+
import org.elasticsearch.gradle.internal.transport.TransportVersionUtils.TransportVersionDefinition;
1415
import org.gradle.api.DefaultTask;
15-
import org.gradle.api.file.RegularFileProperty;
16+
import org.gradle.api.file.DirectoryProperty;
1617
import org.gradle.api.provider.ListProperty;
1718
import org.gradle.api.provider.Property;
1819
import org.gradle.api.tasks.Input;
@@ -26,8 +27,10 @@
2627
import java.util.ArrayList;
2728
import java.util.Collections;
2829
import java.util.Comparator;
30+
import java.util.HashSet;
2931
import java.util.List;
3032
import java.util.Objects;
33+
import java.util.Set;
3134

3235
import static org.elasticsearch.gradle.internal.transport.TransportVersionUtils.IdIncrement.PATCH;
3336
import static org.elasticsearch.gradle.internal.transport.TransportVersionUtils.IdIncrement.SERVER;
@@ -38,61 +41,76 @@
3841
import static org.elasticsearch.gradle.internal.transport.TransportVersionUtils.writeDefinitionFile;
3942

4043
/**
41-
* This task generates TransportVersionSetData data files that contain information about transport versions. These files
42-
* are added to the server project's resource directory at `server/src/main/resources/org/elasticsearch/transport/`.
43-
* They have the following format:
44-
* <pre>
45-
* Filename: my-transport-version-set.json // Must be the same as the name of the transport version set.
46-
* {
47-
* "name": "my-transport-version-set", // The name of the transport version set used for reference in the code.
48-
* "ids": [
49-
* 9109000, // The transport version introduced to the main branch.
50-
* 8841059 // The transport version backported to a previous release branch.
51-
* ]
52-
* }
53-
* </pre>
44+
* This task generates transport version definition files. These files
45+
* are runtime resources that TransportVersion loads statically.
46+
* They contain a comma separated list of integer ids. Each file is named the same
47+
* as the transport version name itself (with the .csv suffix).
5448
*/
55-
public abstract class GenerateTransportVersionDataTask extends DefaultTask {
49+
public abstract class GenerateTransportVersionDefinitionTask extends DefaultTask {
5650

5751
/**
5852
* Specifies the directory in which contains all TransportVersionSet data files.
5953
*
6054
* @return
6155
*/
6256
@InputDirectory
63-
public abstract RegularFileProperty getDataFileDirectory(); // The plugin should always set this, not optional
57+
public abstract DirectoryProperty getTransportResourcesDirectory(); // The plugin should always set this, not optional
6458

59+
60+
// assumption: this task is always run on main, so we can determine the name by diffing with main and looking for new files added in the definition directory
6561
/**
6662
* Used to set the name of the TransportVersionSet for which a data file will be generated.
6763
*/
6864
@Input
69-
public abstract Property<String> getTVName(); // The plugin should always set this, not optional
65+
@Optional
66+
@Option(option = "name", description = "TBD")
67+
public abstract Property<String> getTransportVersionName(); // The plugin should always set this, not optional
7068

7169
/**
7270
* Used to set the `major.minor` release version for which the specific TransportVersion ID will be generated.
7371
* E.g.: "9.2", "8.18", etc.
7472
*/
7573
@Optional
7674
@Input
77-
public abstract ListProperty<String> getMinorVersionsForTV();
78-
79-
// TODO can the Option annotation be on getMinorVersionsForTV() so that we don't have a separate getter?
80-
@Optional
81-
@Input
82-
@Option(option = "versions", description = "The minor version(s) for which to generate IDs, e.g. -Pversions=\"9.2,9.1\"")
83-
public abstract ListProperty<String> getMinorVersionsForTVCmdLine();
75+
@Option(option = "versions", description = "The minor version(s) for which to generate IDs, e.g. --versions=\"9.2,9.1\"")
76+
public abstract ListProperty<String> getMinorVersions();
8477

8578
// @Optional
8679
// @Input
8780
// public abstract Property<Function<String, IdIncrement>> getIdIncrementSupplier();
8881

8982
@TaskAction
9083
public void generateTransportVersionData() throws IOException {
91-
final Path tvDataDir = Objects.requireNonNull(getDataFileDirectory().getAsFile().get()).toPath();
92-
final String tvName = Objects.requireNonNull(getTVName().get());
93-
final var forMinorVersions = getMinorVersionsForTV().getOrElse(
94-
Objects.requireNonNull(getMinorVersionsForTVCmdLine().get())
95-
);
84+
getLogger().lifecycle("Name: " + getTransportVersionName().get());
85+
getLogger().lifecycle("Versions: " + getMinorVersions().get());
86+
Path resourcesDir = Objects.requireNonNull(getTransportResourcesDirectory().getAsFile().get()).toPath();
87+
String name = getTransportVersionName().isPresent() ? getTransportVersionName().get() : findLocalTransportVersionName();
88+
Set<String> targetMinorVersions = new HashSet<>(getMinorVersions().isPresent() ? getMinorVersions().get() : findTargetMinorVersions());
89+
90+
List<Integer> ids = new ArrayList<>();
91+
for (String minorVersion : getKnownMinorVersions(resourcesDir)) {
92+
TransportVersionDefinition latest = TransportVersionUtils.getLatestFile(resourcesDir, minorVersion);
93+
TransportVersionDefinition newLatest = null;
94+
95+
if (name.equals(latest.name())) {
96+
if (targetMinorVersions.contains(minorVersion) == false) {
97+
// regenerate
98+
}
99+
} else {
100+
if (targetMinorVersions.contains(minorVersion)) {
101+
// increment
102+
}
103+
}
104+
105+
if (newLatest != null) {
106+
assert newLatest.ids().size() == 1;
107+
TransportVersionUtils.updateLatestFile(resourcesDir, minorVersion, newLatest.name(), newLatest.ids().getFirst());
108+
}
109+
}
110+
111+
/*
112+
final String tvName = Objects.requireNonNull(getTransportVersionName().get());
113+
List<String> minorVersions = getMinorVersions().get();
96114
// final var idIncrementSupplier = Objects.requireNonNull(getIdIncrementSupplier().get());
97115
98116
// TODO
@@ -141,6 +159,7 @@ public void generateTransportVersionData() throws IOException {
141159
}
142160
143161
writeDefinitionFile(tvDataDir, tvName, ids.stream().sorted(Comparator.reverseOrder()).toList());
162+
*/
144163
}
145164

146165
private int incrementTVId(int tvID, MajorMinor version) {
@@ -172,4 +191,22 @@ private Integer retrieveValueInRange(int lowerExclusive, int upperInclusive, Lis
172191
}
173192
return null;
174193
}
194+
195+
private List<String> getKnownMinorVersions(Path resourcesDir) {
196+
// list files under latest
197+
return List.of();
198+
}
199+
200+
private String findLocalTransportVersionName() {
201+
// check for missing
202+
// if none missing, look at git diff against main
203+
return "";
204+
}
205+
206+
private List<String> findTargetMinorVersions() {
207+
// look for env var indicating github PR link from CI
208+
// use github api to find current labels, filter down to version labels
209+
// map version labels to branches
210+
return List.of();
211+
}
175212
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/GlobalTransportVersionManagementPlugin.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void apply(Project project) {
4242
.register("validateTransportVersionDefinitions", ValidateTransportVersionDefinitionsTask.class, t -> {
4343
t.setGroup("Transport Versions");
4444
t.setDescription("Validates that all defined TransportVersion constants are used in at least one project");
45-
t.getDefinitionsDirectory().set(TransportVersionUtils.getDefinitionsDirectory(project));
45+
t.getDefinitionsDirectory().set(TransportVersionUtils.getTransportDefinitionsDirectory(project));
4646
t.getReferencesFiles().setFrom(tvReferencesConfig);
4747
});
4848
project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(t -> t.dependsOn(validateTask));
@@ -51,11 +51,15 @@ public void apply(Project project) {
5151
.register("generateTransportVersionManifest", GenerateTransportVersionManifestTask.class, t -> {
5252
t.setGroup("Transport Versions");
5353
t.setDescription("Generate a manifest resource for all the known transport version definitions");
54-
t.getDefinitionsDirectory().set(TransportVersionUtils.getDefinitionsDirectory(project));
54+
t.getDefinitionsDirectory().set(TransportVersionUtils.getTransportDefinitionsDirectory(project));
5555
t.getManifestFile().set(project.getLayout().getBuildDirectory().file("generated-resources/manifest.txt"));
5656
});
5757
project.getTasks().named(JavaPlugin.PROCESS_RESOURCES_TASK_NAME, Copy.class).configure(t -> {
5858
t.into("transport/defined", c -> c.from(generateManifestTask));
5959
});
60+
61+
project.getTasks().register("generateTransportVersionDefinition", GenerateTransportVersionDefinitionTask.class, t -> {
62+
t.getTransportResourcesDirectory().set(TransportVersionUtils.getTransportResourcesDirectory(project));
63+
});
6064
}
6165
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionManagementPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void apply(Project project) {
4242
.register("validateTransportVersionReferences", ValidateTransportVersionReferencesTask.class, t -> {
4343
t.setGroup("Transport Versions");
4444
t.setDescription("Validates that all TransportVersion references used in the project have an associated definition file");
45-
t.getDefinitionsDirectory().set(TransportVersionUtils.getDefinitionsDirectory(project));
45+
t.getDefinitionsDirectory().set(TransportVersionUtils.getTransportDefinitionsDirectory(project));
4646
t.getReferencesFile().set(collectTask.get().getOutputFile());
4747
});
4848
project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(t -> t.dependsOn(validateTask));

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionUtils.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ static int getLatestId(Path dataDir, String majorMinor) throws IOException {
5151
return getLatestFile(dataDir, majorMinor).ids().getFirst();
5252
}
5353

54-
static TransportVersionDefinition getLatestFile(Path dataDir, String majorMinor) throws IOException {
55-
return readDefinitionFile(dataDir.resolve(LATEST_DIR).resolve(majorMinor + ".csv"), true);
54+
static TransportVersionDefinition getLatestFile(Path resourcesDir, String minorVersion) throws IOException {
55+
return readDefinitionFile(resourcesDir.resolve(LATEST_DIR).resolve(minorVersion + ".csv"), true);
5656
}
5757

5858
static TransportVersionDefinition getDefinedFile(Path dataDir, String name) throws IOException {
@@ -121,13 +121,17 @@ static List<TransportVersionReference> readReferencesFile(Path file) throws IOEx
121121
return results;
122122
}
123123

124-
static Directory getDefinitionsDirectory(Project project) {
124+
static Directory getTransportDefinitionsDirectory(Project project) {
125+
return getTransportResourcesDirectory(project).dir("defined");
126+
}
127+
128+
static Directory getTransportResourcesDirectory(Project project) {
125129
var projectName = project.findProperty("org.elasticsearch.transport.definitionsProject");
126130
if (projectName == null) {
127131
projectName = ":server";
128132
}
129-
Directory projectDir = project.project(projectName.toString()).getLayout().getProjectDirectory();
130-
return projectDir.dir("src/main/resources/transport/defined");
133+
Directory serverDir = project.getRootProject().project(projectName.toString()).getLayout().getProjectDirectory();
134+
return serverDir.dir("src/main/resources/transport");
131135
}
132136

133137
static void addTransportVersionReferencesAttribute(AttributeContainer attributes) {

0 commit comments

Comments
 (0)