Skip to content

Commit b195fb2

Browse files
committed
Update distro packaging when testing java ea versions
1 parent 80d730e commit b195fb2

File tree

4 files changed

+118
-55
lines changed

4 files changed

+118
-55
lines changed

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/BuildParameterExtension.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public interface BuildParameterExtension {
3232

3333
Boolean getIsRuntimeJavaHomeSet();
3434

35+
Boolean getIsEarlyAccessRuntimeJavaVersion();
36+
3537
List<JavaHome> getJavaVersions();
3638

3739
JavaVersion getMinimumCompilerVersion();

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/DefaultBuildParameterExtension.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public abstract class DefaultBuildParameterExtension implements BuildParameterEx
2929
private final Provider<Boolean> inFipsJvm;
3030
private final Provider<File> runtimeJavaHome;
3131
private final Boolean isRuntimeJavaHomeSet;
32+
private final Boolean earlyAccessJavaRuntime;
3233
private final List<JavaHome> javaVersions;
3334
private final JavaVersion minimumCompilerVersion;
3435
private final JavaVersion minimumRuntimeVersion;
@@ -54,6 +55,7 @@ public DefaultBuildParameterExtension(
5455
Provider<? extends Action<JavaToolchainSpec>> javaToolChainSpec,
5556
Provider<JavaVersion> runtimeJavaVersion,
5657
boolean isRuntimeJavaHomeSet,
58+
boolean earlyAccessJavaRuntime,
5759
Provider<String> runtimeJavaDetails,
5860
List<JavaHome> javaVersions,
5961
JavaVersion minimumCompilerVersion,
@@ -72,6 +74,7 @@ public DefaultBuildParameterExtension(
7274
this.javaToolChainSpec = cache(providers, javaToolChainSpec);
7375
this.runtimeJavaVersion = cache(providers, runtimeJavaVersion);
7476
this.isRuntimeJavaHomeSet = isRuntimeJavaHomeSet;
77+
this.earlyAccessJavaRuntime = earlyAccessJavaRuntime;
7578
this.runtimeJavaDetails = cache(providers, runtimeJavaDetails);
7679
this.javaVersions = javaVersions;
7780
this.minimumCompilerVersion = minimumCompilerVersion;
@@ -119,6 +122,12 @@ public Boolean getIsRuntimeJavaHomeSet() {
119122
return isRuntimeJavaHomeSet;
120123
}
121124

125+
@Override
126+
public Boolean getIsEarlyAccessRuntimeJavaVersion() {
127+
return earlyAccessJavaRuntime;
128+
}
129+
130+
122131
@Override
123132
public List<JavaHome> getJavaVersions() {
124133
return javaVersions;

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/GlobalBuildInfoPlugin.java

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -116,37 +116,36 @@ public void apply(Project project) {
116116
JavaVersion minimumCompilerVersion = JavaVersion.toVersion(getResourceContents("/minimumCompilerVersion"));
117117
JavaVersion minimumRuntimeVersion = JavaVersion.toVersion(getResourceContents("/minimumRuntimeVersion"));
118118

119-
Provider<File> explicitRuntimeJavaHome = findRuntimeJavaHome();
120-
boolean isRuntimeJavaHomeExplicitlySet = explicitRuntimeJavaHome.isPresent();
121-
Provider<File> actualRuntimeJavaHome = isRuntimeJavaHomeExplicitlySet
122-
? explicitRuntimeJavaHome
123-
: resolveJavaHomeFromToolChainService(VersionProperties.getBundledJdkMajorVersion());
124-
125-
Provider<JvmInstallationMetadata> runtimeJdkMetaData = actualRuntimeJavaHome.map(
126-
runtimeJavaHome -> metadataDetector.getMetadata(getJavaInstallation(runtimeJavaHome))
119+
RuntimeJavaHome runtimeJavaHome = findRuntimeJavaHome();
120+
121+
Provider<JvmInstallationMetadata> runtimeJdkMetaData = runtimeJavaHome.getJavahome().map(
122+
j -> metadataDetector.getMetadata(getJavaInstallation(j))
127123
);
128124
AtomicReference<BwcVersions> cache = new AtomicReference<>();
129125
Provider<BwcVersions> bwcVersionsProvider = providers.provider(
130126
() -> cache.updateAndGet(val -> val == null ? resolveBwcVersions() : val)
131127
);
128+
129+
132130
BuildParameterExtension buildParams = project.getExtensions()
133131
.create(
134132
BuildParameterExtension.class,
135133
BuildParameterExtension.EXTENSION_NAME,
136134
DefaultBuildParameterExtension.class,
137135
providers,
138-
actualRuntimeJavaHome,
136+
runtimeJavaHome.getJavahome(),
139137
resolveToolchainSpecFromEnv(),
140-
actualRuntimeJavaHome.map(
138+
runtimeJavaHome.javahome.map(
141139
javaHome -> determineJavaVersion(
142140
"runtime java.home",
143141
javaHome,
144-
isRuntimeJavaHomeExplicitlySet
142+
runtimeJavaHome.javahome.isPresent()
145143
? minimumRuntimeVersion
146144
: JavaVersion.toVersion(VersionProperties.getBundledJdkMajorVersion())
147145
)
148146
),
149-
isRuntimeJavaHomeExplicitlySet,
147+
runtimeJavaHome.expclicitlySet,
148+
runtimeJavaHome.earlyAccess,
150149
runtimeJdkMetaData.map(m -> formatJavaVendorDetails(m)),
151150
getAvailableJavaVersions(),
152151
minimumCompilerVersion,
@@ -344,30 +343,33 @@ private static void assertMinimumCompilerVersion(JavaVersion minimumCompilerVers
344343
}
345344
}
346345

347-
private Provider<File> findRuntimeJavaHome() {
346+
private RuntimeJavaHome findRuntimeJavaHome() {
348347
String runtimeJavaProperty = System.getProperty("runtime.java");
349348

350349
if (runtimeJavaProperty != null) {
351350
if (runtimeJavaProperty.toLowerCase().endsWith("-ea")) {
352351
// handle EA builds differently due to lack of support in Gradle toolchain service
353352
// we resolve them using JdkDownloadPlugin for now.
354353
Integer major = Integer.parseInt(runtimeJavaProperty.substring(0, runtimeJavaProperty.length() - 3));
355-
return resolveEarlyAccessJavaHome(major);
354+
return new RuntimeJavaHome(resolveEarlyAccessJavaHome(major), true, true);
356355
} else {
357-
return resolveJavaHomeFromToolChainService(runtimeJavaProperty);
356+
return new RuntimeJavaHome(resolveJavaHomeFromToolChainService(runtimeJavaProperty), true, false);
358357
}
359358
}
360359
if (System.getenv("RUNTIME_JAVA_HOME") != null) {
361-
return providers.provider(() -> new File(System.getenv("RUNTIME_JAVA_HOME")));
360+
return new RuntimeJavaHome(providers.provider(() -> new File(System.getenv("RUNTIME_JAVA_HOME"))), true, false);
362361
}
363362
// fall back to tool chain if set.
364363
String env = System.getenv("JAVA_TOOLCHAIN_HOME");
365-
return providers.provider(() -> {
366-
if (env == null) {
367-
return null;
368-
}
369-
return new File(env);
370-
});
364+
boolean explicitlySet = env != null;
365+
Provider<File> javaHome = explicitlySet ?
366+
providers.provider(() -> new File(env)) :
367+
resolveJavaHomeFromToolChainService(VersionProperties.getBundledJdkMajorVersion());
368+
return
369+
new RuntimeJavaHome(
370+
javaHome,
371+
explicitlySet,
372+
false);
371373
}
372374

373375
private Provider<File> resolveEarlyAccessJavaHome(Integer runtimeJavaProperty) {
@@ -444,4 +446,25 @@ public void execute(JavaToolchainSpec spec) {
444446
spec.getLanguageVersion().set(expectedJavaLanguageVersion);
445447
}
446448
}
449+
450+
private static class RuntimeJavaHome {
451+
452+
private final boolean earlyAccess;
453+
private final Provider<File> javahome;
454+
private final boolean expclicitlySet;
455+
456+
// RuntimeJavaHome(Provider<File> javahome) {
457+
// this(javahome, false);
458+
// }
459+
//
460+
RuntimeJavaHome(Provider<File> javahome, boolean explicitlySet, boolean earlyAccess) {
461+
this.javahome = javahome;
462+
this.expclicitlySet = explicitlySet;
463+
this.earlyAccess = earlyAccess;
464+
}
465+
466+
public Provider<File> getJavahome() {
467+
return javahome;
468+
}
469+
}
447470
}

distribution/build.gradle

Lines changed: 62 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import org.elasticsearch.gradle.transform.FilteringJarTransform
2020
import java.nio.file.Files
2121
import java.nio.file.Path
2222

23+
import static org.elasticsearch.gradle.internal.toolchain.EarlyAccessCatalogJdkToolchainResolver.findLatestEABuildNumber
24+
2325
plugins {
2426
id 'base'
2527
id 'elasticsearch.distro'
@@ -48,9 +50,9 @@ dependencies {
4850

4951
def thisProj = project
5052
rootProject.allprojects { proj ->
51-
proj.plugins.withType(DependenciesInfoPlugin) {
52-
thisProj.dependencies.add("dependencyInfos", project.dependencies.project(path: proj.path))
53-
}
53+
proj.plugins.withType(DependenciesInfoPlugin) {
54+
thisProj.dependencies.add("dependencyInfos", project.dependencies.project(path: proj.path))
55+
}
5456
}
5557

5658
/*****************************************************************************
@@ -61,9 +63,10 @@ rootProject.allprojects { proj ->
6163
tasks.register("generateDependenciesReport", ConcatFilesTask) {
6264
files = configurations.dependencyInfos
6365
headerLine = "name,version,url,license,sourceURL"
64-
target = new File(providers.systemProperty('csv')
65-
.orElse("${project.buildDir}/reports/dependencies/es-dependencies.csv")
66-
.get()
66+
target = new File(
67+
providers.systemProperty('csv')
68+
.orElse("${project.buildDir}/reports/dependencies/es-dependencies.csv")
69+
.get()
6770
)
6871
// explicitly add our dependency on the JDK
6972
String jdkVersion = VersionProperties.versions.get('bundled_jdk').split('@')[0]
@@ -246,20 +249,45 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
246249
apply plugin: 'elasticsearch.jdk-download'
247250
apply plugin: 'elasticsearch.repositories'
248251

249-
// Setup all required JDKs
250-
project.jdks {
251-
['darwin', 'windows', 'linux'].each { platform ->
252-
(platform == 'linux' || platform == 'darwin' ? ['x64', 'aarch64'] : ['x64']).each { architecture ->
253-
"bundled_${platform}_${architecture}" {
254-
it.platform = platform
255-
it.version = VersionProperties.bundledJdkVersion
256-
it.vendor = VersionProperties.bundledJdkVendor
257-
it.architecture = architecture
252+
if (buildParams.getIsEarlyAccessRuntimeJavaVersion()) {
253+
Integer buildNumber = Integer.getInteger("runtime.java.build");
254+
def runtimeJavaMajorVersion = Integer.parseInt(buildParams.runtimeJavaVersion.get().getMajorVersion())
255+
if (buildNumber == null) {
256+
buildNumber = findLatestEABuildNumber(runtimeJavaMajorVersion);
257+
}
258+
String eaVersionString = String.format("%d-ea+%d", runtimeJavaMajorVersion, buildNumber);
259+
260+
project.jdks {
261+
['darwin', 'windows', 'linux'].each { platform ->
262+
(platform == 'linux' || platform == 'darwin' ? ['x64', 'aarch64'] : ['x64']).each { architecture ->
263+
"bundled_${platform}_${architecture}" {
264+
it.version = eaVersionString;
265+
it.vendor = "openjdk"
266+
it.platform = platform
267+
it.architecture = architecture
268+
it.distributionVersion = "ea"
269+
}
270+
}
271+
}
272+
}
273+
} else {
274+
// Setup all required JDKs
275+
project.jdks {
276+
['darwin', 'windows', 'linux'].each { platform ->
277+
(platform == 'linux' || platform == 'darwin' ? ['x64', 'aarch64'] : ['x64']).each { architecture ->
278+
"bundled_${platform}_${architecture}" {
279+
it.platform = platform
280+
it.version = VersionProperties.bundledJdkVersion
281+
it.vendor = VersionProperties.bundledJdkVendor
282+
it.architecture = architecture
283+
}
258284
}
259285
}
260286
}
287+
261288
}
262289

290+
263291
// TODO: the map needs to be an input of the tasks, so that when it changes, the task will re-run...
264292
/*****************************************************************************
265293
* Properties to expand when copying packaging files *
@@ -288,7 +316,8 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
288316
}
289317
all {
290318
resolutionStrategy.dependencySubstitution {
291-
substitute module("org.apache.logging.log4j:log4j-core") using project(":libs:log4j") because "patched to remove JndiLookup class"}
319+
substitute module("org.apache.logging.log4j:log4j-core") using project(":libs:log4j") because "patched to remove JndiLookup class"
320+
}
292321
}
293322
}
294323

@@ -354,7 +383,7 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
354383
into('platform') {
355384
from(configurations.libsNative)
356385
if (os != null) {
357-
include (os + '-' + architecture + '/*')
386+
include(os + '-' + architecture + '/*')
358387
}
359388
}
360389
into('entitlement-agent') {
@@ -416,7 +445,7 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
416445
// main config files, processed with distribution specific substitutions
417446
from '../src/config'
418447
exclude 'log4j2.properties' // this is handled separately below
419-
filter("tokens" : expansionsForDistribution(distributionType, isTestDistro), ReplaceTokens.class)
448+
filter("tokens": expansionsForDistribution(distributionType, isTestDistro), ReplaceTokens.class)
420449
}
421450
from buildDefaultLog4jConfigTaskProvider
422451
from isTestDistro ? integTestConfigFiles : defaultConfigFiles
@@ -431,19 +460,19 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
431460
exclude '*.exe'
432461
exclude '*.bat'
433462
eachFile {
434-
it.permissions{
463+
it.permissions {
435464
unix(0755)
436465
}
437466
}
438-
filter("tokens" : expansionsForDistribution(distributionType, testDistro), ReplaceTokens.class)
467+
filter("tokens": expansionsForDistribution(distributionType, testDistro), ReplaceTokens.class)
439468
}
440469
// windows files, only for zip
441470
if (distributionType == 'zip') {
442471
with copySpec {
443472
from '../src/bin'
444473
include '*.bat'
445474
filter(FixCrLfFilter, eol: FixCrLfFilter.CrLf.newInstance('crlf'))
446-
filter("tokens" : expansionsForDistribution(distributionType, testDistro), ReplaceTokens.class)
475+
filter("tokens": expansionsForDistribution(distributionType, testDistro), ReplaceTokens.class)
447476
}
448477
with copySpec {
449478
from '../src/bin'
@@ -466,7 +495,7 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
466495
if (testDistro) {
467496
from buildServerNoticeTaskProvider
468497
} else {
469-
from (buildDefaultNoticeTaskProvider) {
498+
from(buildDefaultNoticeTaskProvider) {
470499
filePermissions {
471500
unix(0644)
472501
}
@@ -547,57 +576,57 @@ subprojects {
547576
String footer = "# Built for ${project.name}-${project.version} " +
548577
"(${distributionType})"
549578
Map<String, Object> expansions = [
550-
'project.name': project.name,
551-
'project.version': version,
579+
'project.name' : project.name,
580+
'project.version' : version,
552581
'project.minor.version': "${VersionProperties.elasticsearchVersion.major}.${VersionProperties.elasticsearchVersion.minor}",
553582

554-
'path.conf': [
583+
'path.conf' : [
555584
'deb': '/etc/elasticsearch',
556585
'rpm': '/etc/elasticsearch',
557586
'def': '"$ES_HOME"/config'
558587
],
559-
'path.data': [
588+
'path.data' : [
560589
'deb': packagingPathData,
561590
'rpm': packagingPathData,
562591
'def': '#path.data: /path/to/data'
563592
],
564-
'path.env': [
593+
'path.env' : [
565594
'deb': '/etc/default/elasticsearch',
566595
'rpm': '/etc/sysconfig/elasticsearch',
567596
/* There isn't one of these files for tar or zip but its important to
568597
make an empty string here so the script can properly skip it. */
569598
'def': 'if [ -z "$ES_PATH_CONF" ]; then ES_PATH_CONF="$ES_HOME"/config; done',
570599
],
571-
'source.path.env': [
600+
'source.path.env' : [
572601
'deb': 'source /etc/default/elasticsearch',
573602
'rpm': 'source /etc/sysconfig/elasticsearch',
574603
'def': 'if [ -z "$ES_PATH_CONF" ]; then ES_PATH_CONF="$ES_HOME"/config; fi',
575604
],
576-
'path.logs': [
605+
'path.logs' : [
577606
'deb': packagingPathLogs,
578607
'rpm': packagingPathLogs,
579608
'def': '#path.logs: /path/to/logs'
580609
],
581610

582-
'scripts.footer': [
611+
'scripts.footer' : [
583612
/* Debian needs exit 0 on these scripts so we add it here and preserve
584613
the pretty footer. */
585614
'deb': "exit 0\n${footer}",
586615
'def': footer
587616
],
588617

589-
'es.distribution.type': [
618+
'es.distribution.type' : [
590619
'deb': 'deb',
591620
'rpm': 'rpm',
592621
'tar': 'tar',
593622
'zip': 'zip'
594623
],
595624

596-
'license.name': [
625+
'license.name' : [
597626
'deb': 'Elastic-License'
598627
],
599628

600-
'license.text': [
629+
'license.text' : [
601630
'deb': licenseText,
602631
],
603632
]

0 commit comments

Comments
 (0)