195 lines
7.4 KiB
Groovy
195 lines
7.4 KiB
Groovy
import java.util.regex.Matcher
|
|
import org.elasticsearch.gradle.LoggedExec
|
|
|
|
/**
|
|
* Subdirectories of this project are dummy projects which does a local
|
|
* checkout of the appropriate version's branch, and builds a snapshot. This
|
|
* allows backcompat tests to test against the next unreleased versions
|
|
* without relying on snapshots.
|
|
*/
|
|
|
|
subprojects {
|
|
String bwcVersion
|
|
boolean enabled = true
|
|
if (project.name == 'stable-snapshot') {
|
|
/* bwc-stable is only used if the last version is on a stable branch instead
|
|
* of a release branch */
|
|
enabled = indexCompatVersions[-1].bugfix == 0
|
|
bwcVersion = indexCompatVersions[-1]
|
|
} else if (project.name == 'release-snapshot') {
|
|
if (indexCompatVersions[-1].bugfix == 0) {
|
|
/* The last version is on a stable branch so it is handled by the bwc-stable
|
|
* project. This project will instead handle the version before that which
|
|
* *should* be on a release branch. */
|
|
bwcVersion = indexCompatVersions[-2]
|
|
} else {
|
|
// The last version is on a release branch so it is handled by this project
|
|
bwcVersion = indexCompatVersions[-1]
|
|
}
|
|
} else {
|
|
throw new InvalidUserDataException("Unsupport project name ${project.name}")
|
|
}
|
|
if (enabled) {
|
|
apply plugin: 'distribution'
|
|
// Not published so no need to assemble
|
|
tasks.remove(assemble)
|
|
build.dependsOn.remove('assemble')
|
|
|
|
def (String major, String minor, String bugfix) = bwcVersion.split('\\.')
|
|
def (String currentMajor, String currentMinor, String currentBugfix) = version.split('\\.')
|
|
String bwcBranch
|
|
if (project.name == 'stable-snapshot') {
|
|
bwcBranch = "${major}.x"
|
|
} else {
|
|
bwcBranch = "${major}.${minor}"
|
|
}
|
|
|
|
File esCheckoutDir = file("${buildDir}/bwc/checkout-es-${bwcBranch}")
|
|
File xpackCheckoutDir = file("${esCheckoutDir}-extra/x-pack-elasticsearch")
|
|
|
|
final String remote = System.getProperty("tests.bwc.remote", "elastic")
|
|
|
|
task createElasticsearchClone(type: LoggedExec) {
|
|
onlyIf { esCheckoutDir.exists() == false }
|
|
commandLine = ['git', 'clone', rootDir, esCheckoutDir]
|
|
}
|
|
|
|
task createXPackClone(type: LoggedExec) {
|
|
onlyIf { xpackCheckoutDir.exists() == false }
|
|
commandLine = ['git', 'clone', project(':x-pack-elasticsearch').projectDir, xpackCheckoutDir]
|
|
}
|
|
|
|
// we use regular Exec here to ensure we always get output, regardless of logging level
|
|
task findElasticsearchRemote(type: Exec) {
|
|
dependsOn createElasticsearchClone
|
|
workingDir = esCheckoutDir
|
|
commandLine = ['git', 'remote', '-v']
|
|
ignoreExitValue = true
|
|
ByteArrayOutputStream output = new ByteArrayOutputStream()
|
|
standardOutput = output
|
|
doLast {
|
|
if (execResult.exitValue != 0) {
|
|
output.toString('UTF-8').eachLine { line -> logger.error(line) }
|
|
execResult.assertNormalExitValue()
|
|
}
|
|
project.ext.esRemoteExists = false
|
|
output.toString('UTF-8').eachLine {
|
|
if (it.contains("${remote}\tgit@github.com:${remote}/elasticsearch.git")) {
|
|
project.ext.esRemoteExists = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
task findXPackRemote(type: Exec) {
|
|
dependsOn createXPackClone
|
|
workingDir = xpackCheckoutDir
|
|
commandLine = ['git', 'remote', '-v']
|
|
ignoreExitValue = true
|
|
ByteArrayOutputStream output = new ByteArrayOutputStream()
|
|
standardOutput = output
|
|
doLast {
|
|
if (execResult.exitValue != 0) {
|
|
output.toString('UTF-8').eachLine { line -> logger.error(line) }
|
|
execResult.assertNormalExitValue()
|
|
}
|
|
project.ext.xpackRemoteExists = false
|
|
output.toString('UTF-8').eachLine {
|
|
if (it.contains("${remote}\tgit@github.com:${remote}/x-pack-elasticsearch.git")) {
|
|
project.ext.xpackRemoteExists = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
task addElasticsearchRemote(type: LoggedExec) {
|
|
dependsOn findElasticsearchRemote
|
|
onlyIf { project.ext.esRemoteExists == false }
|
|
workingDir = esCheckoutDir
|
|
commandLine = ['git', 'remote', 'add', "${remote}", "git@github.com:${remote}/elasticsearch.git"]
|
|
}
|
|
|
|
task addXPackRemote(type: LoggedExec) {
|
|
dependsOn findXPackRemote
|
|
onlyIf { project.ext.xpackRemoteExists == false }
|
|
workingDir = xpackCheckoutDir
|
|
commandLine = ['git', 'remote', 'add', "${remote}", "git@github.com:${remote}/x-pack-elasticsearch.git"]
|
|
}
|
|
|
|
task fetchElasticsearchLatest(type: LoggedExec) {
|
|
dependsOn addElasticsearchRemote
|
|
workingDir = esCheckoutDir
|
|
commandLine = ['git', 'fetch', '--all']
|
|
}
|
|
|
|
task fetchXPackLatest(type: LoggedExec) {
|
|
dependsOn addXPackRemote
|
|
workingDir = xpackCheckoutDir
|
|
commandLine = ['git', 'fetch', '--all']
|
|
}
|
|
|
|
String esBuildMetadataKey = "bwc_refspec_${project.path.substring(1)}_elasticsearch"
|
|
task checkoutElasticsearchBwcBranch(type: LoggedExec) {
|
|
dependsOn fetchElasticsearchLatest
|
|
def String refspec = System.getProperty("tests.bwc.refspec", buildMetadata.get(esBuildMetadataKey, "${remote}/${bwcBranch}"))
|
|
workingDir = esCheckoutDir
|
|
commandLine = ['git', 'checkout', refspec]
|
|
}
|
|
|
|
String xpackBuildMetadataKey = "bwc_refspec_${project.path.substring(1)}_xpack"
|
|
task checkoutXPackBwcBranch(type: LoggedExec) {
|
|
dependsOn fetchXPackLatest
|
|
def String refspec = System.getProperty("tests.bwc.refspec", buildMetadata.get(xpackBuildMetadataKey, "${remote}/${bwcBranch}"))
|
|
workingDir = xpackCheckoutDir
|
|
commandLine = ['git', 'checkout', refspec]
|
|
}
|
|
|
|
File esBuildMetadataFile = project.file("build/${project.name}_elasticsearch/build_metadata")
|
|
task writeElasticsearchBuildMetadata(type: LoggedExec) {
|
|
dependsOn checkoutElasticsearchBwcBranch
|
|
workingDir = esCheckoutDir
|
|
commandLine = ['git', 'rev-parse', 'HEAD']
|
|
ignoreExitValue = true
|
|
ByteArrayOutputStream output = new ByteArrayOutputStream()
|
|
standardOutput = output
|
|
doLast {
|
|
if (execResult.exitValue != 0) {
|
|
output.toString('UTF-8').eachLine { line -> logger.error(line) }
|
|
execResult.assertNormalExitValue()
|
|
}
|
|
project.mkdir(esBuildMetadataFile.parent)
|
|
esBuildMetadataFile.setText("${esBuildMetadataKey}=${output.toString('UTF-8')}", 'UTF-8')
|
|
}
|
|
}
|
|
|
|
File xpackBuildMetadataFile = project.file("build/${project.name}_xpack/build_metadata")
|
|
task writeXPackBuildMetadata(type: LoggedExec) {
|
|
dependsOn checkoutXPackBwcBranch
|
|
workingDir = xpackCheckoutDir
|
|
commandLine = ['git', 'rev-parse', 'HEAD']
|
|
ignoreExitValue = true
|
|
ByteArrayOutputStream output = new ByteArrayOutputStream()
|
|
standardOutput = output
|
|
doLast {
|
|
if (execResult.exitValue != 0) {
|
|
output.toString('UTF-8').eachLine { line -> logger.error(line) }
|
|
execResult.assertNormalExitValue()
|
|
}
|
|
project.mkdir(xpackBuildMetadataFile.parent)
|
|
xpackBuildMetadataFile.setText("${xpackBuildMetadataKey}=${output.toString('UTF-8')}", 'UTF-8')
|
|
}
|
|
}
|
|
|
|
File bwcZip = file("${xpackCheckoutDir}/plugin/build/distributions/x-pack-${bwcVersion}.zip")
|
|
task buildBwcVersion(type: GradleBuild) {
|
|
dependsOn checkoutXPackBwcBranch, checkoutElasticsearchBwcBranch, writeElasticsearchBuildMetadata, writeXPackBuildMetadata
|
|
dir = xpackCheckoutDir
|
|
tasks = [':x-pack-elasticsearch:plugin:assemble']
|
|
}
|
|
|
|
artifacts {
|
|
'default' file: bwcZip, name: 'x-pack', type: 'zip', builtBy: buildBwcVersion
|
|
}
|
|
}
|
|
}
|