123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- /*
- * 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
- import java.util.regex.Matcher
- 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:windows-zip')
- distribution project(':distribution:archives:oss-windows-zip')
- distribution project(':distribution:archives:darwin-tar')
- distribution project(':distribution:archives:oss-darwin-tar')
- distribution project(':distribution:archives:linux-tar')
- distribution project(':distribution:archives:oss-linux-tar')
- }
- 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
- Matcher isLuceneSnapshot = (/\w+-snapshot-([a-z0-9]+)/ =~ versions.lucene)
- if (isLuceneSnapshot) {
- systemProperty 'test.lucene-snapshot-revision', isLuceneSnapshot[0][1]
- }
- String defaultParallel = System.getProperty('tests.jvms', project.rootProject.ext.defaultParallel)
- if (defaultParallel == "auto") {
- defaultParallel = Math.max(Runtime.getRuntime().availableProcessors(), 4)
- }
- maxParallelForks defaultParallel as Integer
- }
- check.dependsOn(integTest)
- // TODO: re-enable once randomizedtesting gradle code is published and removed from here
- licenseHeaders.enabled = false
- forbiddenPatterns {
- exclude '**/*.wav'
- exclude '**/*.p12'
- // 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)
- }
- }
|