297 lines
11 KiB
Groovy
297 lines
11 KiB
Groovy
/*
|
|
* Licensed to Elasticsearch under one or more contributor
|
|
* license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright
|
|
* ownership. Elasticsearch licenses this file to you under
|
|
* the Apache License, Version 2.0 (the "License"); you may
|
|
* not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
import org.gradle.util.GradleVersion
|
|
|
|
plugins {
|
|
id 'java-gradle-plugin'
|
|
id 'groovy'
|
|
}
|
|
|
|
group = 'org.elasticsearch.gradle'
|
|
|
|
String minimumGradleVersion = file('src/main/resources/minimumGradleVersion').text.trim()
|
|
if (GradleVersion.current() < GradleVersion.version(minimumGradleVersion)) {
|
|
throw new GradleException("Gradle ${minimumGradleVersion}+ is required to build elasticsearch")
|
|
}
|
|
|
|
if (project == rootProject) {
|
|
// change the build dir used during build init, so that doing a clean
|
|
// won't wipe out the buildscript jar
|
|
buildDir = 'build-bootstrap'
|
|
}
|
|
|
|
/*****************************************************************************
|
|
* Propagating version.properties to the rest of the build *
|
|
*****************************************************************************/
|
|
|
|
// we update the version property to reflect if we are building a snapshot or a release build
|
|
// we write this back out below to load it in the Build.java which will be shown in rest main action
|
|
// to indicate this being a snapshot build or a release build.
|
|
File propsFile = project.file('version.properties')
|
|
Properties props = VersionPropertiesLoader.loadBuildSrcVersion(propsFile)
|
|
version = props.getProperty("elasticsearch")
|
|
processResources {
|
|
inputs.file(propsFile)
|
|
// We need to be explicit with the version because we add snapshot and qualifier to it based on properties
|
|
inputs.property("dynamic_elasticsearch_version", props.getProperty("elasticsearch"))
|
|
doLast {
|
|
Writer writer = file("$destinationDir/version.properties").newWriter()
|
|
try {
|
|
props.store(writer, "Generated version properties")
|
|
} finally {
|
|
writer.close()
|
|
}
|
|
}
|
|
}
|
|
|
|
/*****************************************************************************
|
|
* Java version *
|
|
*****************************************************************************/
|
|
|
|
if (JavaVersion.current() < JavaVersion.VERSION_11) {
|
|
throw new GradleException('At least Java 11 is required to build elasticsearch gradle tools')
|
|
}
|
|
// Gradle 4.10 does not support setting this to 11 yet
|
|
targetCompatibility = "10"
|
|
sourceCompatibility = "10"
|
|
|
|
// We have a few classes that need to be compiled for older java versions because these are used to run checks against
|
|
// those
|
|
sourceSets {
|
|
minimumRuntime {
|
|
// We only want Java here, but the Groovy doesn't configure javadoc correctly if we don't define this as groovy
|
|
groovy {
|
|
srcDirs = ['src/main/minimumRuntime']
|
|
}
|
|
}
|
|
}
|
|
compileMinimumRuntimeGroovy {
|
|
// We can't use BuildPlugin here, so read from file
|
|
String minimumRuntimeVersion = file('src/main/resources/minimumRuntimeVersion').text.trim()
|
|
targetCompatibility = minimumRuntimeVersion
|
|
sourceCompatibility = minimumRuntimeVersion
|
|
}
|
|
dependencies {
|
|
if (project.ext.has("isEclipse") == false || project.ext.isEclipse == false) {
|
|
// eclipse is confused if this is set explicitly
|
|
compile sourceSets.minimumRuntime.output
|
|
}
|
|
minimumRuntimeCompile "junit:junit:${props.getProperty('junit')}"
|
|
minimumRuntimeCompile localGroovy()
|
|
minimumRuntimeCompile gradleApi()
|
|
}
|
|
jar {
|
|
from sourceSets.minimumRuntime.output
|
|
}
|
|
|
|
|
|
/*****************************************************************************
|
|
* Dependencies used by the entire build *
|
|
*****************************************************************************/
|
|
|
|
repositories {
|
|
jcenter()
|
|
}
|
|
|
|
dependencies {
|
|
compile localGroovy()
|
|
compile "com.carrotsearch.randomizedtesting:junit4-ant:${props.getProperty('randomizedrunner')}"
|
|
compile "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${props.getProperty('randomizedrunner')}"
|
|
|
|
compile 'com.netflix.nebula:gradle-extra-configurations-plugin:3.0.3'
|
|
compile 'com.netflix.nebula:nebula-publishing-plugin:4.4.4'
|
|
compile 'com.netflix.nebula:gradle-info-plugin:3.0.3'
|
|
compile 'org.eclipse.jgit:org.eclipse.jgit:3.2.0.201312181205-r'
|
|
compile 'com.perforce:p4java:2012.3.551082' // THIS IS SUPPOSED TO BE OPTIONAL IN THE FUTURE....
|
|
compile 'org.apache.rat:apache-rat:0.11'
|
|
compile "org.elasticsearch:jna:4.5.1"
|
|
compile 'com.github.jengelman.gradle.plugins:shadow:2.0.4'
|
|
compile 'de.thetaphi:forbiddenapis:2.6'
|
|
compile 'com.avast.gradle:gradle-docker-compose-plugin:0.8.12'
|
|
testCompile "junit:junit:${props.getProperty('junit')}"
|
|
}
|
|
|
|
|
|
// Gradle 2.14+ removed ProgressLogger(-Factory) classes from the public APIs
|
|
// Use logging dependency instead
|
|
// Gradle 4.3.1 stopped releasing the logging jars to jcenter, just use the last available one
|
|
GradleVersion logVersion = GradleVersion.current() > GradleVersion.version('4.3') ? GradleVersion.version('4.3') : GradleVersion.current()
|
|
|
|
dependencies {
|
|
compileOnly "org.gradle:gradle-logging:${logVersion.getVersion()}"
|
|
}
|
|
|
|
/*****************************************************************************
|
|
* Bootstrap repositories *
|
|
*****************************************************************************/
|
|
// this will only happen when buildSrc is built on its own during build init
|
|
if (project == rootProject) {
|
|
repositories {
|
|
if (System.getProperty("repos.mavenLocal") != null) {
|
|
mavenLocal()
|
|
}
|
|
}
|
|
// only run tests as build-tools
|
|
test.enabled = false
|
|
}
|
|
|
|
/*****************************************************************************
|
|
* Normal project checks *
|
|
*****************************************************************************/
|
|
|
|
// this happens when included as a normal project in the build, which we do
|
|
// to enforce precommit checks like forbidden apis, as well as setup publishing
|
|
if (project != rootProject) {
|
|
apply plugin: 'elasticsearch.build'
|
|
apply plugin: 'nebula.maven-base-publish'
|
|
apply plugin: 'nebula.maven-scm'
|
|
|
|
// we need to apply these again to override the build plugin
|
|
targetCompatibility = "10"
|
|
sourceCompatibility = "10"
|
|
|
|
// groovydoc succeeds, but has some weird internal exception...
|
|
groovydoc.enabled = false
|
|
|
|
// build-tools is not ready for primetime with these...
|
|
dependencyLicenses.enabled = false
|
|
dependenciesInfo.enabled = false
|
|
forbiddenApisMain.enabled = false
|
|
forbiddenApisTest.enabled = false
|
|
forbiddenApisMinimumRuntime.enabled = false
|
|
jarHell.enabled = false
|
|
thirdPartyAudit.enabled = false
|
|
|
|
configurations {
|
|
distribution
|
|
}
|
|
|
|
dependencies {
|
|
distribution project(':distribution:archives:zip')
|
|
distribution project(':distribution:archives:oss-zip')
|
|
}
|
|
|
|
String localDownloads = "${rootProject.buildDir}/local-downloads"
|
|
task setupLocalDownloads(type:Copy) {
|
|
from configurations.distribution
|
|
into localDownloads
|
|
}
|
|
|
|
unitTest {
|
|
// The test task is configured to runtimeJava version, but build-tools doesn't support all of them, so test
|
|
// with compiler instead on the ones that are too old.
|
|
if (project.runtimeJavaVersion <= JavaVersion.VERSION_1_10) {
|
|
jvm = "${project.compilerJavaHome}/bin/java"
|
|
}
|
|
}
|
|
|
|
// This can't be an RandomizedTestingTask because we can't yet reference it
|
|
task integTest(type: Test) {
|
|
// integration test requires the local testing repo for example plugin builds
|
|
dependsOn project.rootProject.allprojects.collect {
|
|
it.tasks.matching { it.name == 'publishNebulaPublicationToLocalTestRepository'}
|
|
}
|
|
dependsOn setupLocalDownloads
|
|
exclude "**/*Tests.class"
|
|
testClassesDirs = sourceSets.test.output.classesDirs
|
|
classpath = sourceSets.test.runtimeClasspath
|
|
inputs.dir(file("src/testKit"))
|
|
// tell BuildExamplePluginsIT where to find the example plugins
|
|
systemProperty (
|
|
'test.build-tools.plugin.examples',
|
|
files(
|
|
project(':example-plugins').subprojects.collect { it.projectDir }
|
|
).asPath,
|
|
)
|
|
systemProperty 'test.local-test-repo-path', "${rootProject.buildDir}/local-test-repo"
|
|
systemProperty 'test.local-test-downloads-path', localDownloads
|
|
systemProperty 'test.version_under_test', version
|
|
systemProperty 'test.lucene-snapshot-revision', (versions.lucene =~ /\w+-snapshot-([a-z0-9]+)/)[0][1]
|
|
}
|
|
check.dependsOn(integTest)
|
|
|
|
// TODO: re-enable once randomizedtesting gradle code is published and removed from here
|
|
licenseHeaders.enabled = false
|
|
|
|
forbiddenPatterns {
|
|
exclude '**/*.wav'
|
|
// the file that actually defines nocommit
|
|
exclude '**/ForbiddenPatternsTask.java'
|
|
}
|
|
|
|
testingConventions {
|
|
naming.clear()
|
|
naming {
|
|
Tests {
|
|
baseClass 'org.elasticsearch.gradle.test.GradleUnitTestCase'
|
|
}
|
|
IT {
|
|
baseClass 'org.elasticsearch.gradle.test.GradleIntegrationTestCase'
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
* We alread configure publication and we don't need or want this one that
|
|
* comes from the java-gradle-plugin.
|
|
*/
|
|
afterEvaluate {
|
|
generatePomFileForPluginMavenPublication.enabled = false
|
|
}
|
|
}
|
|
|
|
// Define this here because we need it early.
|
|
class VersionPropertiesLoader {
|
|
static Properties loadBuildSrcVersion(File input) throws IOException {
|
|
Properties props = new Properties();
|
|
InputStream is = new FileInputStream(input)
|
|
try {
|
|
props.load(is)
|
|
} finally {
|
|
is.close()
|
|
}
|
|
loadBuildSrcVersion(props, System.getProperties())
|
|
return props
|
|
}
|
|
|
|
protected static void loadBuildSrcVersion(Properties loadedProps, Properties systemProperties) {
|
|
String elasticsearch = loadedProps.getProperty("elasticsearch")
|
|
if (elasticsearch == null) {
|
|
throw new IllegalStateException("Elasticsearch version is missing from properties.")
|
|
}
|
|
if (elasticsearch.matches("[0-9]+\\.[0-9]+\\.[0-9]+") == false) {
|
|
throw new IllegalStateException(
|
|
"Expected elasticsearch version to be numbers only of the form X.Y.Z but it was: " +
|
|
elasticsearch
|
|
)
|
|
}
|
|
String qualifier = systemProperties.getProperty("build.version_qualifier", "");
|
|
if (qualifier.isEmpty() == false) {
|
|
if (qualifier.matches("(alpha|beta|rc)\\d+") == false) {
|
|
throw new IllegalStateException("Invalid qualifier: " + qualifier)
|
|
}
|
|
elasticsearch += "-" + qualifier
|
|
}
|
|
if ("true".equals(systemProperties.getProperty("build.snapshot", "true"))) {
|
|
elasticsearch += "-SNAPSHOT"
|
|
}
|
|
loadedProps.put("elasticsearch", elasticsearch)
|
|
}
|
|
}
|