import java.util.regex.Matcher import org.elasticsearch.gradle.LoggedExec /** * This is a dummy project which does a local checkout of the previous * wire compat version's branch, and builds a snapshot. This allows backcompat * tests to test against the next unreleased version, closest to this version, * without relying on snapshots. */ String bwcVersion = wireCompatVersions[-1] if (bwcVersion.endsWith('-SNAPSHOT')) { apply plugin: 'distribution' def (String major, String minor, String bugfix) = bwcVersion.split('\\.') String bwcBranch = bugfix == '0-SNAPSHOT' ? "${major}.x" : "${major}.${minor}" File esCheckoutDir = file("${buildDir}/bwc/checkout-es-${bwcBranch}") File xpackCheckoutDir = file("${esCheckoutDir}-extra/x-pack-elasticsearch") 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 findElasticsearchUpstream(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.esUpstreamExists = false output.toString('UTF-8').eachLine { if (it.contains("upstream")) { project.ext.esUpstreamExists = true } } } } task findXPackUpstream(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.xpackUpstreamExists = false output.toString('UTF-8').eachLine { if (it.contains("upstream")) { project.ext.xpackUpstreamExists = true } } } } task addElasticsearchUpstream(type: LoggedExec) { dependsOn findElasticsearchUpstream onlyIf { project.ext.esUpstreamExists == false } workingDir = esCheckoutDir commandLine = ['git', 'remote', 'add', 'upstream', 'git@github.com:elastic/elasticsearch.git'] } task addXPackUpstream(type: LoggedExec) { dependsOn findXPackUpstream onlyIf { project.ext.xpackUpstreamExists == false } workingDir = xpackCheckoutDir commandLine = ['git', 'remote', 'add', 'upstream', 'git@github.com:elastic/x-pack-elasticsearch.git'] } task fetchElasticsearchLatest(type: LoggedExec) { dependsOn addElasticsearchUpstream workingDir = esCheckoutDir commandLine = ['git', 'fetch', 'upstream'] } task fetchXPackLatest(type: LoggedExec) { dependsOn addXPackUpstream workingDir = xpackCheckoutDir commandLine = ['git', 'fetch', 'upstream'] } task checkoutElasticsearchBwcBranch(type: LoggedExec) { dependsOn fetchElasticsearchLatest workingDir = esCheckoutDir commandLine = ['git', 'checkout', "upstream/${bwcBranch}"] } task checkoutXPackBwcBranch(type: LoggedExec) { dependsOn fetchXPackLatest workingDir = xpackCheckoutDir commandLine = ['git', 'checkout', "upstream/${bwcBranch}"] } File bwcZip = file("${xpackCheckoutDir}/plugin/build/distributions/x-pack-${bwcVersion}.zip") task buildBwcVersion(type: GradleBuild) { dependsOn checkoutXPackBwcBranch, checkoutElasticsearchBwcBranch dir = xpackCheckoutDir tasks = [':x-pack-elasticsearch:plugin:assemble'] } artifacts { 'default' file: bwcZip, name: 'x-pack', type: 'zip', builtBy: buildBwcVersion } }