Skip to content
Closed
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
Expand Up @@ -32,6 +32,8 @@ public interface BuildParameterExtension {

Boolean getIsRuntimeJavaHomeSet();

Boolean getIsEarlyAccessRuntimeJavaVersion();

List<JavaHome> getJavaVersions();

JavaVersion getMinimumCompilerVersion();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public abstract class DefaultBuildParameterExtension implements BuildParameterEx
private final Provider<Boolean> inFipsJvm;
private final Provider<File> runtimeJavaHome;
private final Boolean isRuntimeJavaHomeSet;
private final Boolean earlyAccessJavaRuntime;
private final List<JavaHome> javaVersions;
private final JavaVersion minimumCompilerVersion;
private final JavaVersion minimumRuntimeVersion;
Expand All @@ -54,6 +55,7 @@ public DefaultBuildParameterExtension(
Provider<? extends Action<JavaToolchainSpec>> javaToolChainSpec,
Provider<JavaVersion> runtimeJavaVersion,
boolean isRuntimeJavaHomeSet,
boolean earlyAccessJavaRuntime,
Provider<String> runtimeJavaDetails,
List<JavaHome> javaVersions,
JavaVersion minimumCompilerVersion,
Expand All @@ -72,6 +74,7 @@ public DefaultBuildParameterExtension(
this.javaToolChainSpec = cache(providers, javaToolChainSpec);
this.runtimeJavaVersion = cache(providers, runtimeJavaVersion);
this.isRuntimeJavaHomeSet = isRuntimeJavaHomeSet;
this.earlyAccessJavaRuntime = earlyAccessJavaRuntime;
this.runtimeJavaDetails = cache(providers, runtimeJavaDetails);
this.javaVersions = javaVersions;
this.minimumCompilerVersion = minimumCompilerVersion;
Expand Down Expand Up @@ -119,6 +122,11 @@ public Boolean getIsRuntimeJavaHomeSet() {
return isRuntimeJavaHomeSet;
}

@Override
public Boolean getIsEarlyAccessRuntimeJavaVersion() {
return earlyAccessJavaRuntime;
}

@Override
public List<JavaHome> getJavaVersions() {
return javaVersions;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,37 +116,34 @@ public void apply(Project project) {
JavaVersion minimumCompilerVersion = JavaVersion.toVersion(getResourceContents("/minimumCompilerVersion"));
JavaVersion minimumRuntimeVersion = JavaVersion.toVersion(getResourceContents("/minimumRuntimeVersion"));

Provider<File> explicitRuntimeJavaHome = findRuntimeJavaHome();
boolean isRuntimeJavaHomeExplicitlySet = explicitRuntimeJavaHome.isPresent();
Provider<File> actualRuntimeJavaHome = isRuntimeJavaHomeExplicitlySet
? explicitRuntimeJavaHome
: resolveJavaHomeFromToolChainService(VersionProperties.getBundledJdkMajorVersion());
RuntimeJavaHome runtimeJavaHome = findRuntimeJavaHome();

Provider<JvmInstallationMetadata> runtimeJdkMetaData = actualRuntimeJavaHome.map(
runtimeJavaHome -> metadataDetector.getMetadata(getJavaInstallation(runtimeJavaHome))
);
Provider<JvmInstallationMetadata> runtimeJdkMetaData = runtimeJavaHome.getJavahome()
.map(j -> metadataDetector.getMetadata(getJavaInstallation(j)));
AtomicReference<BwcVersions> cache = new AtomicReference<>();
Provider<BwcVersions> bwcVersionsProvider = providers.provider(
() -> cache.updateAndGet(val -> val == null ? resolveBwcVersions() : val)
);

BuildParameterExtension buildParams = project.getExtensions()
.create(
BuildParameterExtension.class,
BuildParameterExtension.EXTENSION_NAME,
DefaultBuildParameterExtension.class,
providers,
actualRuntimeJavaHome,
runtimeJavaHome.getJavahome(),
resolveToolchainSpecFromEnv(),
actualRuntimeJavaHome.map(
runtimeJavaHome.javahome.map(
javaHome -> determineJavaVersion(
"runtime java.home",
javaHome,
isRuntimeJavaHomeExplicitlySet
runtimeJavaHome.javahome.isPresent()
? minimumRuntimeVersion
: JavaVersion.toVersion(VersionProperties.getBundledJdkMajorVersion())
)
),
isRuntimeJavaHomeExplicitlySet,
runtimeJavaHome.expclicitlySet,
runtimeJavaHome.earlyAccess,
runtimeJdkMetaData.map(m -> formatJavaVendorDetails(m)),
getAvailableJavaVersions(),
minimumCompilerVersion,
Expand Down Expand Up @@ -344,30 +341,29 @@ private static void assertMinimumCompilerVersion(JavaVersion minimumCompilerVers
}
}

private Provider<File> findRuntimeJavaHome() {
private RuntimeJavaHome findRuntimeJavaHome() {
String runtimeJavaProperty = System.getProperty("runtime.java");

if (runtimeJavaProperty != null) {
if (runtimeJavaProperty.toLowerCase().endsWith("-ea")) {
// handle EA builds differently due to lack of support in Gradle toolchain service
// we resolve them using JdkDownloadPlugin for now.
Integer major = Integer.parseInt(runtimeJavaProperty.substring(0, runtimeJavaProperty.length() - 3));
return resolveEarlyAccessJavaHome(major);
return new RuntimeJavaHome(resolveEarlyAccessJavaHome(major), true, true);
} else {
return resolveJavaHomeFromToolChainService(runtimeJavaProperty);
return new RuntimeJavaHome(resolveJavaHomeFromToolChainService(runtimeJavaProperty), true, false);
}
}
if (System.getenv("RUNTIME_JAVA_HOME") != null) {
return providers.provider(() -> new File(System.getenv("RUNTIME_JAVA_HOME")));
return new RuntimeJavaHome(providers.provider(() -> new File(System.getenv("RUNTIME_JAVA_HOME"))), true, false);
}
// fall back to tool chain if set.
String env = System.getenv("JAVA_TOOLCHAIN_HOME");
return providers.provider(() -> {
if (env == null) {
return null;
}
return new File(env);
});
boolean explicitlySet = env != null;
Provider<File> javaHome = explicitlySet
? providers.provider(() -> new File(env))
: resolveJavaHomeFromToolChainService(VersionProperties.getBundledJdkMajorVersion());
return new RuntimeJavaHome(javaHome, explicitlySet, false);
}

private Provider<File> resolveEarlyAccessJavaHome(Integer runtimeJavaProperty) {
Expand Down Expand Up @@ -444,4 +440,25 @@ public void execute(JavaToolchainSpec spec) {
spec.getLanguageVersion().set(expectedJavaLanguageVersion);
}
}

private static class RuntimeJavaHome {

private final boolean earlyAccess;
private final Provider<File> javahome;
private final boolean expclicitlySet;

// RuntimeJavaHome(Provider<File> javahome) {
// this(javahome, false);
// }
//
RuntimeJavaHome(Provider<File> javahome, boolean explicitlySet, boolean earlyAccess) {
this.javahome = javahome;
this.expclicitlySet = explicitlySet;
this.earlyAccess = earlyAccess;
}

public Provider<File> getJavahome() {
return javahome;
}
}
}
95 changes: 62 additions & 33 deletions distribution/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import org.elasticsearch.gradle.transform.FilteringJarTransform
import java.nio.file.Files
import java.nio.file.Path

import static org.elasticsearch.gradle.internal.toolchain.EarlyAccessCatalogJdkToolchainResolver.findLatestEABuildNumber

plugins {
id 'base'
id 'elasticsearch.distro'
Expand Down Expand Up @@ -48,9 +50,9 @@ dependencies {

def thisProj = project
rootProject.allprojects { proj ->
proj.plugins.withType(DependenciesInfoPlugin) {
thisProj.dependencies.add("dependencyInfos", project.dependencies.project(path: proj.path))
}
proj.plugins.withType(DependenciesInfoPlugin) {
thisProj.dependencies.add("dependencyInfos", project.dependencies.project(path: proj.path))
}
}

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

// Setup all required JDKs
project.jdks {
['darwin', 'windows', 'linux'].each { platform ->
(platform == 'linux' || platform == 'darwin' ? ['x64', 'aarch64'] : ['x64']).each { architecture ->
"bundled_${platform}_${architecture}" {
it.platform = platform
it.version = VersionProperties.bundledJdkVersion
it.vendor = VersionProperties.bundledJdkVendor
it.architecture = architecture
if (buildParams.getIsEarlyAccessRuntimeJavaVersion()) {
Integer buildNumber = Integer.getInteger("runtime.java.build");
def runtimeJavaMajorVersion = Integer.parseInt(buildParams.runtimeJavaVersion.get().getMajorVersion())
if (buildNumber == null) {
buildNumber = findLatestEABuildNumber(runtimeJavaMajorVersion);
}
String eaVersionString = String.format("%d-ea+%d", runtimeJavaMajorVersion, buildNumber);

project.jdks {
['darwin', 'windows', 'linux'].each { platform ->
(platform == 'linux' || platform == 'darwin' ? ['x64', 'aarch64'] : ['x64']).each { architecture ->
"bundled_${platform}_${architecture}" {
it.version = eaVersionString;
it.vendor = "openjdk"
it.platform = platform
it.architecture = architecture
it.distributionVersion = "ea"
}
}
}
}
} else {
// Setup all required JDKs
project.jdks {
['darwin', 'windows', 'linux'].each { platform ->
(platform == 'linux' || platform == 'darwin' ? ['x64', 'aarch64'] : ['x64']).each { architecture ->
"bundled_${platform}_${architecture}" {
it.platform = platform
it.version = VersionProperties.bundledJdkVersion
it.vendor = VersionProperties.bundledJdkVendor
it.architecture = architecture
}
}
}
}

}


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

Expand Down Expand Up @@ -354,7 +383,7 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
into('platform') {
from(configurations.libsNative)
if (os != null) {
include (os + '-' + architecture + '/*')
include(os + '-' + architecture + '/*')
}
}
into('entitlement-agent') {
Expand Down Expand Up @@ -416,7 +445,7 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
// main config files, processed with distribution specific substitutions
from '../src/config'
exclude 'log4j2.properties' // this is handled separately below
filter("tokens" : expansionsForDistribution(distributionType, isTestDistro), ReplaceTokens.class)
filter("tokens": expansionsForDistribution(distributionType, isTestDistro), ReplaceTokens.class)
}
from buildDefaultLog4jConfigTaskProvider
from isTestDistro ? integTestConfigFiles : defaultConfigFiles
Expand All @@ -431,19 +460,19 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
exclude '*.exe'
exclude '*.bat'
eachFile {
it.permissions{
it.permissions {
unix(0755)
}
}
filter("tokens" : expansionsForDistribution(distributionType, testDistro), ReplaceTokens.class)
filter("tokens": expansionsForDistribution(distributionType, testDistro), ReplaceTokens.class)
}
// windows files, only for zip
if (distributionType == 'zip') {
with copySpec {
from '../src/bin'
include '*.bat'
filter(FixCrLfFilter, eol: FixCrLfFilter.CrLf.newInstance('crlf'))
filter("tokens" : expansionsForDistribution(distributionType, testDistro), ReplaceTokens.class)
filter("tokens": expansionsForDistribution(distributionType, testDistro), ReplaceTokens.class)
}
with copySpec {
from '../src/bin'
Expand All @@ -466,7 +495,7 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) {
if (testDistro) {
from buildServerNoticeTaskProvider
} else {
from (buildDefaultNoticeTaskProvider) {
from(buildDefaultNoticeTaskProvider) {
filePermissions {
unix(0644)
}
Expand Down Expand Up @@ -547,57 +576,57 @@ subprojects {
String footer = "# Built for ${project.name}-${project.version} " +
"(${distributionType})"
Map<String, Object> expansions = [
'project.name': project.name,
'project.version': version,
'project.name' : project.name,
'project.version' : version,
'project.minor.version': "${VersionProperties.elasticsearchVersion.major}.${VersionProperties.elasticsearchVersion.minor}",

'path.conf': [
'path.conf' : [
'deb': '/etc/elasticsearch',
'rpm': '/etc/elasticsearch',
'def': '"$ES_HOME"/config'
],
'path.data': [
'path.data' : [
'deb': packagingPathData,
'rpm': packagingPathData,
'def': '#path.data: /path/to/data'
],
'path.env': [
'path.env' : [
'deb': '/etc/default/elasticsearch',
'rpm': '/etc/sysconfig/elasticsearch',
/* There isn't one of these files for tar or zip but its important to
make an empty string here so the script can properly skip it. */
'def': 'if [ -z "$ES_PATH_CONF" ]; then ES_PATH_CONF="$ES_HOME"/config; done',
],
'source.path.env': [
'source.path.env' : [
'deb': 'source /etc/default/elasticsearch',
'rpm': 'source /etc/sysconfig/elasticsearch',
'def': 'if [ -z "$ES_PATH_CONF" ]; then ES_PATH_CONF="$ES_HOME"/config; fi',
],
'path.logs': [
'path.logs' : [
'deb': packagingPathLogs,
'rpm': packagingPathLogs,
'def': '#path.logs: /path/to/logs'
],

'scripts.footer': [
'scripts.footer' : [
/* Debian needs exit 0 on these scripts so we add it here and preserve
the pretty footer. */
'deb': "exit 0\n${footer}",
'def': footer
],

'es.distribution.type': [
'es.distribution.type' : [
'deb': 'deb',
'rpm': 'rpm',
'tar': 'tar',
'zip': 'zip'
],

'license.name': [
'license.name' : [
'deb': 'Elastic-License'
],

'license.text': [
'license.text' : [
'deb': licenseText,
],
]
Expand Down