|
35 | 35 | import org.elasticsearch.gradle.info.BuildParams;
|
36 | 36 | import org.elasticsearch.gradle.internal.InternalDistributionDownloadPlugin;
|
37 | 37 | import org.elasticsearch.gradle.util.GradleUtils;
|
| 38 | +import org.elasticsearch.gradle.util.Util; |
38 | 39 | import org.elasticsearch.gradle.vagrant.VagrantBasePlugin;
|
39 | 40 | import org.elasticsearch.gradle.vagrant.VagrantExtension;
|
40 | 41 | import org.gradle.api.Action;
|
|
47 | 48 | import org.gradle.api.plugins.JavaBasePlugin;
|
48 | 49 | import org.gradle.api.provider.Provider;
|
49 | 50 | import org.gradle.api.specs.Specs;
|
| 51 | +import org.gradle.api.tasks.Copy; |
50 | 52 | import org.gradle.api.tasks.TaskProvider;
|
51 | 53 | import org.gradle.api.tasks.testing.Test;
|
52 | 54 |
|
| 55 | +import java.io.File; |
53 | 56 | import java.util.ArrayList;
|
54 | 57 | import java.util.Arrays;
|
55 | 58 | import java.util.HashMap;
|
@@ -79,6 +82,7 @@ public class DistroTestPlugin implements Plugin<Project> {
|
79 | 82 | public void apply(Project project) {
|
80 | 83 | project.getRootProject().getPluginManager().apply(DockerSupportPlugin.class);
|
81 | 84 | project.getPlugins().apply(InternalDistributionDownloadPlugin.class);
|
| 85 | + project.getPlugins().apply(JdkDownloadPlugin.class); |
82 | 86 | project.getPluginManager().apply("elasticsearch.build");
|
83 | 87 |
|
84 | 88 | Provider<DockerSupportService> dockerSupport = GradleUtils.getBuildService(
|
@@ -157,11 +161,22 @@ public void apply(Project project) {
|
157 | 161 | }
|
158 | 162 | }
|
159 | 163 |
|
| 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 | + |
160 | 170 | project.subprojects(vmProject -> {
|
161 | 171 | 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 | + ); |
165 | 180 |
|
166 | 181 | Map<ElasticsearchDistribution.Type, TaskProvider<?>> vmLifecyleTasks = lifecycleTasks(vmProject, "distroTest");
|
167 | 182 | Map<String, TaskProvider<?>> vmVersionTasks = versionTasks(vmProject, "distroUpgradeTest");
|
@@ -237,57 +252,61 @@ private static Map<String, TaskProvider<?>> versionTasks(Project project, String
|
237 | 252 | return versionTasks;
|
238 | 253 | }
|
239 | 254 |
|
240 |
| - private static Jdk createJdk( |
241 |
| - NamedDomainObjectContainer<Jdk> jdksContainer, |
242 |
| - String name, |
| 255 | + private static TaskProvider<Copy> createJdk( |
| 256 | + Project project, |
| 257 | + String purpose, |
243 | 258 | String vendor,
|
244 | 259 | String version,
|
245 | 260 | String platform,
|
246 | 261 | String architecture
|
247 | 262 | ) {
|
248 |
| - Jdk jdk = jdksContainer.create(name); |
| 263 | + Jdk jdk = JdkDownloadPlugin.getContainer(project).create(platform + "-" + purpose); |
249 | 264 | jdk.setVendor(vendor);
|
250 | 265 | jdk.setVersion(version);
|
251 | 266 | jdk.setPlatform(platform);
|
252 | 267 | 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; |
254 | 276 | }
|
255 | 277 |
|
256 |
| - private static List<Object> configureVM(Project project) { |
| 278 | + private static void configureVM(Project project, TaskProvider<Copy> gradleJdkProvider, TaskProvider<Copy> systemJdkProvider) { |
257 | 279 | String box = project.getName();
|
258 | 280 |
|
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 |
| - |
266 | 281 | // setup VM used by these tests
|
267 | 282 | VagrantExtension vagrant = project.getExtensions().getByType(VagrantExtension.class);
|
268 | 283 | vagrant.setBox(box);
|
269 |
| - vagrant.vmEnv("SYSTEM_JAVA_HOME", convertPath(project, vagrant, systemJdk, "", "")); |
| 284 | + |
| 285 | + vagrant.vmEnv("SYSTEM_JAVA_HOME", convertPath(project, vagrant, systemJdkProvider, "", "")); |
270 | 286 | 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")); |
272 | 288 | // pass these along to get correct build scans
|
273 | 289 | if (System.getenv("JENKINS_URL") != null) {
|
274 | 290 | Stream.of("JOB_NAME", "JENKINS_URL", "BUILD_NUMBER", "BUILD_URL").forEach(name -> vagrant.vmEnv(name, System.getenv(name)));
|
275 | 291 | }
|
276 | 292 | vagrant.setIsWindowsVM(isWindows(project));
|
277 |
| - |
278 |
| - return Arrays.asList(systemJdk, gradleJdk); |
279 | 293 | }
|
280 | 294 |
|
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; |
289 | 308 | }
|
290 |
| - }; |
| 309 | + }); |
291 | 310 | }
|
292 | 311 |
|
293 | 312 | private static Configuration configureExamplePlugin(Project project) {
|
|
0 commit comments