Skip to content

Commit ee835ee

Browse files
committed
Copy gradle/system jdk to local dir for packaging tests (#61436)
The distro tests rely on two jdks, pulled in by the jdk download plugin. The move the artifact transforms result in the path to the extracted jdks existing under the gradle cache dir, which is outside the vagrant mount of the elasticsearch project. This commit creates a local copy within the `qa:os` project that the packaging tests use. closes #61138
1 parent ae24dfc commit ee835ee

File tree

1 file changed

+48
-29
lines changed

1 file changed

+48
-29
lines changed

buildSrc/src/main/java/org/elasticsearch/gradle/test/DistroTestPlugin.java

Lines changed: 48 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.elasticsearch.gradle.info.BuildParams;
3636
import org.elasticsearch.gradle.internal.InternalDistributionDownloadPlugin;
3737
import org.elasticsearch.gradle.util.GradleUtils;
38+
import org.elasticsearch.gradle.util.Util;
3839
import org.elasticsearch.gradle.vagrant.VagrantBasePlugin;
3940
import org.elasticsearch.gradle.vagrant.VagrantExtension;
4041
import org.gradle.api.Action;
@@ -47,9 +48,11 @@
4748
import org.gradle.api.plugins.JavaBasePlugin;
4849
import org.gradle.api.provider.Provider;
4950
import org.gradle.api.specs.Specs;
51+
import org.gradle.api.tasks.Copy;
5052
import org.gradle.api.tasks.TaskProvider;
5153
import org.gradle.api.tasks.testing.Test;
5254

55+
import java.io.File;
5356
import java.util.ArrayList;
5457
import java.util.Arrays;
5558
import java.util.HashMap;
@@ -79,6 +82,7 @@ public class DistroTestPlugin implements Plugin<Project> {
7982
public void apply(Project project) {
8083
project.getRootProject().getPluginManager().apply(DockerSupportPlugin.class);
8184
project.getPlugins().apply(InternalDistributionDownloadPlugin.class);
85+
project.getPlugins().apply(JdkDownloadPlugin.class);
8286
project.getPluginManager().apply("elasticsearch.build");
8387

8488
Provider<DockerSupportService> dockerSupport = GradleUtils.getBuildService(
@@ -157,11 +161,22 @@ public void apply(Project project) {
157161
}
158162
}
159163

164+
// setup jdks used by no-jdk tests, and by gradle executing
165+
TaskProvider<Copy> linuxGradleJdk = createJdk(project, "gradle", GRADLE_JDK_VENDOR, GRADLE_JDK_VERSION, "linux", "x64");
166+
TaskProvider<Copy> linuxSystemJdk = createJdk(project, "system", SYSTEM_JDK_VENDOR, SYSTEM_JDK_VERSION, "linux", "x64");
167+
TaskProvider<Copy> windowsGradleJdk = createJdk(project, "gradle", GRADLE_JDK_VENDOR, GRADLE_JDK_VERSION, "windows", "x64");
168+
TaskProvider<Copy> windowsSystemJdk = createJdk(project, "system", SYSTEM_JDK_VENDOR, SYSTEM_JDK_VERSION, "windows", "x64");
169+
160170
project.subprojects(vmProject -> {
161171
vmProject.getPluginManager().apply(VagrantBasePlugin.class);
162-
vmProject.getPluginManager().apply(JdkDownloadPlugin.class);
163-
List<Object> vmDependencies = new ArrayList<>(configureVM(vmProject));
164-
vmDependencies.add(project.getConfigurations().getByName("testRuntimeClasspath"));
172+
TaskProvider<Copy> gradleJdk = isWindows(vmProject) ? windowsGradleJdk : linuxGradleJdk;
173+
TaskProvider<Copy> systemJdk = isWindows(vmProject) ? windowsSystemJdk : linuxSystemJdk;
174+
configureVM(vmProject, gradleJdk, systemJdk);
175+
List<Object> vmDependencies = Arrays.asList(
176+
gradleJdk,
177+
systemJdk,
178+
project.getConfigurations().getByName("testRuntimeClasspath")
179+
);
165180

166181
Map<ElasticsearchDistribution.Type, TaskProvider<?>> vmLifecyleTasks = lifecycleTasks(vmProject, "distroTest");
167182
Map<String, TaskProvider<?>> vmVersionTasks = versionTasks(vmProject, "distroUpgradeTest");
@@ -237,57 +252,61 @@ private static Map<String, TaskProvider<?>> versionTasks(Project project, String
237252
return versionTasks;
238253
}
239254

240-
private static Jdk createJdk(
241-
NamedDomainObjectContainer<Jdk> jdksContainer,
242-
String name,
255+
private static TaskProvider<Copy> createJdk(
256+
Project project,
257+
String purpose,
243258
String vendor,
244259
String version,
245260
String platform,
246261
String architecture
247262
) {
248-
Jdk jdk = jdksContainer.create(name);
263+
Jdk jdk = JdkDownloadPlugin.getContainer(project).create(platform + "-" + purpose);
249264
jdk.setVendor(vendor);
250265
jdk.setVersion(version);
251266
jdk.setPlatform(platform);
252267
jdk.setArchitecture(architecture);
253-
return jdk;
268+
269+
String taskname = "copy" + Util.capitalize(platform) + Util.capitalize(purpose) + "Jdk";
270+
TaskProvider<Copy> copyTask = project.getTasks().register(taskname, Copy.class);
271+
copyTask.configure(t -> {
272+
t.from(jdk);
273+
t.into(new File(project.getBuildDir(), "jdks/" + platform + "-" + architecture + "-" + vendor + "-" + version));
274+
});
275+
return copyTask;
254276
}
255277

256-
private static List<Object> configureVM(Project project) {
278+
private static void configureVM(Project project, TaskProvider<Copy> gradleJdkProvider, TaskProvider<Copy> systemJdkProvider) {
257279
String box = project.getName();
258280

259-
// setup jdks used by the distro tests, and by gradle executing
260-
261-
NamedDomainObjectContainer<Jdk> jdksContainer = JdkDownloadPlugin.getContainer(project);
262-
String platform = box.contains("windows") ? "windows" : "linux";
263-
Jdk systemJdk = createJdk(jdksContainer, "system", SYSTEM_JDK_VENDOR, SYSTEM_JDK_VERSION, platform, "x64");
264-
Jdk gradleJdk = createJdk(jdksContainer, "gradle", GRADLE_JDK_VENDOR, GRADLE_JDK_VERSION, platform, "x64");
265-
266281
// setup VM used by these tests
267282
VagrantExtension vagrant = project.getExtensions().getByType(VagrantExtension.class);
268283
vagrant.setBox(box);
269-
vagrant.vmEnv("SYSTEM_JAVA_HOME", convertPath(project, vagrant, systemJdk, "", ""));
284+
285+
vagrant.vmEnv("SYSTEM_JAVA_HOME", convertPath(project, vagrant, systemJdkProvider, "", ""));
270286
vagrant.vmEnv("JAVA_HOME", ""); // make sure any default java on the system is ignored
271-
vagrant.vmEnv("PATH", convertPath(project, vagrant, gradleJdk, "/bin:$PATH", "\\bin;$Env:PATH"));
287+
vagrant.vmEnv("PATH", convertPath(project, vagrant, gradleJdkProvider, "/bin:$PATH", "\\bin;$Env:PATH"));
272288
// pass these along to get correct build scans
273289
if (System.getenv("JENKINS_URL") != null) {
274290
Stream.of("JOB_NAME", "JENKINS_URL", "BUILD_NUMBER", "BUILD_URL").forEach(name -> vagrant.vmEnv(name, System.getenv(name)));
275291
}
276292
vagrant.setIsWindowsVM(isWindows(project));
277-
278-
return Arrays.asList(systemJdk, gradleJdk);
279293
}
280294

281-
private static Object convertPath(Project project, VagrantExtension vagrant, Jdk jdk, String additionaLinux, String additionalWindows) {
282-
return new Object() {
283-
@Override
284-
public String toString() {
285-
if (vagrant.isWindowsVM()) {
286-
return convertWindowsPath(project, jdk.getPath()) + additionalWindows;
287-
}
288-
return convertLinuxPath(project, jdk.getPath()) + additionaLinux;
295+
private static Object convertPath(
296+
Project project,
297+
VagrantExtension vagrant,
298+
TaskProvider<Copy> jdkProvider,
299+
String additionaLinux,
300+
String additionalWindows
301+
) {
302+
return Util.toStringable(() -> {
303+
String hostPath = jdkProvider.get().getDestinationDir().toString();
304+
if (vagrant.isWindowsVM()) {
305+
return convertWindowsPath(project, hostPath) + additionalWindows;
306+
} else {
307+
return convertLinuxPath(project, hostPath) + additionaLinux;
289308
}
290-
};
309+
});
291310
}
292311

293312
private static Configuration configureExamplePlugin(Project project) {

0 commit comments

Comments
 (0)