2016-09-16 12:30:45 -04:00
|
|
|
description = 'Builds the Prelert Engine native binaries and Java classes'
|
|
|
|
|
2016-09-19 09:08:35 -04:00
|
|
|
import org.gradle.internal.os.OperatingSystem
|
2016-10-31 09:05:32 -04:00
|
|
|
import org.gradle.plugins.ide.eclipse.model.SourceFolder
|
2016-11-17 09:07:20 -05:00
|
|
|
import org.elasticsearch.gradle.precommit.LicenseHeadersTask
|
2016-11-22 03:29:13 -05:00
|
|
|
import org.elasticsearch.gradle.VersionProperties
|
2016-11-17 09:07:20 -05:00
|
|
|
|
2016-11-23 06:22:04 -05:00
|
|
|
import java.nio.file.Files
|
|
|
|
import java.nio.file.Paths
|
|
|
|
import java.nio.file.StandardCopyOption
|
|
|
|
|
|
|
|
boolean isWindows = OperatingSystem.current().isWindows()
|
|
|
|
boolean isLinux = OperatingSystem.current().isLinux()
|
|
|
|
boolean isMacOsX = OperatingSystem.current().isMacOsX()
|
|
|
|
|
|
|
|
project.ext.nasDirectory = isWindows ? "\\\\prelert-nas\\builds\\6.5.0\\" :
|
|
|
|
(isMacOsX ? "/Volumes/builds/6.5.0/" : "/export/builds/6.5.0/")
|
|
|
|
// norelease: replace with something else when we become part of x-plugins
|
|
|
|
project.ext.nasExtension = '_' + (System.getenv()['GIT_COMMIT'] ?: 'xxxxxxxxxxxxxx').substring(0, 14) +
|
|
|
|
(isWindows ? "_windows-x86_64.zip" : (isMacOsX ? "_darwin-x86_64.zip" :
|
|
|
|
(isLinux ? "_linux-x86_64.zip" : "_sunos-x86_64.zip")))
|
|
|
|
|
2016-11-18 03:34:18 -05:00
|
|
|
configurations.all {
|
|
|
|
// check for updates every build
|
|
|
|
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
|
|
|
|
}
|
|
|
|
|
2016-11-17 09:07:20 -05:00
|
|
|
buildscript {
|
|
|
|
repositories {
|
|
|
|
if (System.getProperty("repos.mavenlocal") != null) {
|
|
|
|
// with -Drepos.mavenlocal=true we can force checking the local .m2 repo which is useful for building against
|
|
|
|
// elasticsearch snapshots
|
|
|
|
mavenLocal()
|
|
|
|
}
|
|
|
|
mavenCentral()
|
|
|
|
maven {
|
|
|
|
name 'sonatype-snapshots'
|
|
|
|
url "https://oss.sonatype.org/content/repositories/snapshots/"
|
|
|
|
}
|
|
|
|
jcenter()
|
|
|
|
}
|
|
|
|
dependencies {
|
2016-11-18 03:34:18 -05:00
|
|
|
classpath group: 'org.elasticsearch.gradle', name: 'build-tools', version: "${elasticsearchVersion}", changing: true
|
2016-11-17 09:07:20 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
subprojects {
|
|
|
|
// we must not publish to sonatype until we have set up x-plugins to only publish the parts we want to publish!
|
|
|
|
project.afterEvaluate {
|
|
|
|
if (project.plugins.hasPlugin('com.bmuschko.nexus') && project.nexus.repositoryUrl.startsWith('file://') == false) {
|
|
|
|
uploadArchives.enabled = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-09-16 12:30:45 -04:00
|
|
|
|
2016-11-22 03:29:13 -05:00
|
|
|
task bundlePack(type: Zip) {
|
2016-11-23 09:00:08 -05:00
|
|
|
onlyIf { project('kibana').bundlePlugin.enabled && project('cpp').strip.enabled }
|
2016-11-22 03:29:13 -05:00
|
|
|
dependsOn 'elasticsearch:bundlePlugin'
|
|
|
|
dependsOn 'kibana:bundlePlugin'
|
|
|
|
from { zipTree(project('elasticsearch').bundlePlugin.outputs.files.singleFile) }
|
|
|
|
from { zipTree(project('kibana').bundlePlugin.outputs.files.singleFile) }
|
|
|
|
destinationDir file('build/distributions')
|
|
|
|
baseName = 'prelert'
|
|
|
|
version = VersionProperties.elasticsearch
|
|
|
|
}
|
|
|
|
|
|
|
|
task assemble(dependsOn: bundlePack) {
|
|
|
|
group = 'Build'
|
|
|
|
description = 'Assembles the outputs of this project.'
|
|
|
|
}
|
|
|
|
|
|
|
|
task build(dependsOn: assemble) {
|
|
|
|
group = 'Build'
|
|
|
|
description = 'Assembles and tests this project.'
|
|
|
|
}
|
|
|
|
|
|
|
|
task clean(type: Delete) {
|
|
|
|
group = 'Build'
|
|
|
|
description = 'Deletes the build directory'
|
|
|
|
delete 'build'
|
|
|
|
}
|
|
|
|
|
2016-11-23 06:22:04 -05:00
|
|
|
// norelease: this won't be needed when the pluginAll task below is removed
|
|
|
|
class SimpleCopy extends DefaultTask {
|
|
|
|
String sourceFile;
|
|
|
|
String destFile;
|
2016-11-17 08:12:26 -05:00
|
|
|
|
2016-11-23 06:22:04 -05:00
|
|
|
@TaskAction
|
|
|
|
def copy() {
|
|
|
|
Files.copy(Paths.get(sourceFile), Paths.get(destFile), StandardCopyOption.REPLACE_EXISTING)
|
|
|
|
}
|
2016-09-16 12:30:45 -04:00
|
|
|
}
|
|
|
|
|
2016-11-23 06:22:04 -05:00
|
|
|
// norelease: by the time we move to x-plugins we cannot use the Prelert NAS at all
|
|
|
|
task uploadPack(type: SimpleCopy) {
|
|
|
|
// This doesn't use a Copy task because that builds hashes for a huge number of files on the NAS
|
|
|
|
String zipFile = "prelert-${elasticsearchVersion}.zip"
|
|
|
|
sourceFile = "${projectDir}/build/distributions/" + zipFile
|
|
|
|
destFile = project.ext.nasDirectory + zipFile.replace('.zip', project.ext.nasExtension)
|
2016-09-16 12:30:45 -04:00
|
|
|
}
|
|
|
|
|
2016-11-23 06:22:04 -05:00
|
|
|
uploadPack.dependsOn build
|
2016-11-17 14:34:39 -05:00
|
|
|
|
2016-11-23 06:22:04 -05:00
|
|
|
task deploy(dependsOn: uploadPack) {
|
2016-09-16 12:30:45 -04:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
subprojects {
|
2016-11-07 04:27:22 -05:00
|
|
|
apply plugin: 'eclipse'
|
|
|
|
apply plugin: 'idea'
|
2016-11-22 03:29:13 -05:00
|
|
|
|
2016-11-07 04:27:22 -05:00
|
|
|
buildscript {
|
|
|
|
repositories {
|
|
|
|
if (System.getProperty("repos.mavenlocal") != null) {
|
|
|
|
// with -Drepos.mavenlocal=true we can force checking the local .m2 repo which is useful for building against
|
|
|
|
// elasticsearch snapshots
|
|
|
|
mavenLocal()
|
|
|
|
}
|
|
|
|
mavenCentral()
|
|
|
|
maven {
|
|
|
|
name 'sonatype-snapshots'
|
|
|
|
url "https://oss.sonatype.org/content/repositories/snapshots/"
|
|
|
|
}
|
|
|
|
jcenter()
|
|
|
|
}
|
|
|
|
}
|
2016-09-16 12:30:45 -04:00
|
|
|
|
2016-11-07 04:27:22 -05:00
|
|
|
group = 'org.elasticsearch.prelert'
|
2016-09-16 12:30:45 -04:00
|
|
|
|
|
|
|
repositories {
|
2016-11-07 04:27:22 -05:00
|
|
|
if (System.getProperty("repos.mavenlocal") != null) {
|
|
|
|
// with -Drepos.mavenlocal=true we can force checking the local .m2 repo which is useful for building against
|
|
|
|
// elasticsearch snapshots
|
|
|
|
mavenLocal()
|
|
|
|
}
|
|
|
|
mavenCentral()
|
|
|
|
maven {
|
|
|
|
name 'sonatype-snapshots'
|
|
|
|
url "https://oss.sonatype.org/content/repositories/snapshots/"
|
|
|
|
}
|
|
|
|
jcenter()
|
2016-09-16 12:30:45 -04:00
|
|
|
}
|
|
|
|
|
2016-11-17 09:07:20 -05:00
|
|
|
tasks.withType(LicenseHeadersTask.class) {
|
|
|
|
approvedLicenses = ['Elasticsearch Confidential']
|
|
|
|
additionalLicense 'ESCON', 'Elasticsearch Confidential', 'ELASTICSEARCH CONFIDENTIAL'
|
2016-09-16 12:30:45 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-10-31 09:05:32 -04:00
|
|
|
allprojects {
|
|
|
|
// injecting groovy property variables into all projects
|
|
|
|
project.ext {
|
|
|
|
// for ide hacks...
|
|
|
|
isEclipse = System.getProperty("eclipse.launcher") != null || gradle.startParameter.taskNames.contains('eclipse') || gradle.startParameter.taskNames.contains('cleanEclipse')
|
|
|
|
isIdea = System.getProperty("idea.active") != null || gradle.startParameter.taskNames.contains('idea') || gradle.startParameter.taskNames.contains('cleanIdea')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-11-17 08:12:26 -05:00
|
|
|
// intellij configuration
|
2016-10-31 09:05:32 -04:00
|
|
|
allprojects {
|
|
|
|
apply plugin: 'idea'
|
|
|
|
|
|
|
|
if (isIdea) {
|
|
|
|
project.buildDir = file('build-idea')
|
|
|
|
}
|
|
|
|
idea {
|
|
|
|
module {
|
|
|
|
inheritOutputDirs = false
|
|
|
|
outputDir = file('build-idea/classes/main')
|
|
|
|
testOutputDir = file('build-idea/classes/test')
|
|
|
|
|
|
|
|
// also ignore other possible build dirs
|
|
|
|
excludeDirs += file('build')
|
|
|
|
excludeDirs += file('build-eclipse')
|
|
|
|
|
|
|
|
iml {
|
|
|
|
// fix so that Gradle idea plugin properly generates support for resource folders
|
|
|
|
// see also https://issues.gradle.org/browse/GRADLE-2975
|
|
|
|
withXml {
|
|
|
|
it.asNode().component.content.sourceFolder.findAll { it.@url == 'file://$MODULE_DIR$/src/main/resources' }.each {
|
|
|
|
it.attributes().remove('isTestSource')
|
|
|
|
it.attributes().put('type', 'java-resource')
|
|
|
|
}
|
|
|
|
it.asNode().component.content.sourceFolder.findAll { it.@url == 'file://$MODULE_DIR$/src/test/resources' }.each {
|
|
|
|
it.attributes().remove('isTestSource')
|
|
|
|
it.attributes().put('type', 'java-test-resource')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Make sure gradle idea was run before running anything in intellij (including import).
|
|
|
|
File ideaMarker = new File(projectDir, '.local-idea-is-configured')
|
|
|
|
tasks.idea.doLast {
|
|
|
|
ideaMarker.setText('', 'UTF-8')
|
|
|
|
}
|
|
|
|
if (System.getProperty('idea.active') != null && ideaMarker.exists() == false) {
|
|
|
|
throw new GradleException('You must run gradle idea from the root of elasticsearch before importing into IntelliJ')
|
|
|
|
}
|
|
|
|
|
|
|
|
// eclipse configuration
|
|
|
|
allprojects {
|
|
|
|
apply plugin: 'eclipse'
|
|
|
|
// Name all the non-root projects after their path so that paths get grouped together when imported into eclipse.
|
|
|
|
if (path != ':') {
|
|
|
|
eclipse.project.name = path
|
2016-11-17 08:12:26 -05:00
|
|
|
if (isWindows) {
|
2016-10-31 09:05:32 -04:00
|
|
|
eclipse.project.name = eclipse.project.name.replace(':', '_')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
plugins.withType(JavaBasePlugin) {
|
|
|
|
File eclipseBuild = project.file('build-eclipse')
|
|
|
|
eclipse.classpath.defaultOutputDir = eclipseBuild
|
|
|
|
if (isEclipse) {
|
|
|
|
// set this so generated dirs will be relative to eclipse build
|
|
|
|
project.buildDir = eclipseBuild
|
|
|
|
}
|
|
|
|
eclipse.classpath.file.whenMerged { classpath ->
|
|
|
|
// give each source folder a unique corresponding output folder
|
|
|
|
int i = 0;
|
|
|
|
classpath.entries.findAll { it instanceof SourceFolder }.each { folder ->
|
|
|
|
i++;
|
|
|
|
// this is *NOT* a path or a file.
|
|
|
|
folder.output = "build-eclipse/" + i
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
task copyEclipseSettings(type: Copy) {
|
|
|
|
// TODO: "package this up" for external builds
|
|
|
|
from new File(project.rootDir, 'buildSrc/src/main/resources/eclipse.settings')
|
|
|
|
into '.settings'
|
|
|
|
}
|
|
|
|
// otherwise .settings is not nuked entirely
|
|
|
|
task wipeEclipseSettings(type: Delete) {
|
|
|
|
delete '.settings'
|
|
|
|
}
|
|
|
|
tasks.cleanEclipse.dependsOn(wipeEclipseSettings)
|
|
|
|
// otherwise the eclipse merging is *super confusing*
|
|
|
|
tasks.eclipse.dependsOn(cleanEclipse, copyEclipseSettings)
|
|
|
|
}
|