diff --git a/build.gradle b/build.gradle index 34c78b7ab54..211ccd64811 100644 --- a/build.gradle +++ b/build.gradle @@ -43,5 +43,8 @@ subprojects { approvedLicenses = ['Elasticsearch Confidential'] additionalLicense 'ESCON', 'Elasticsearch Confidential', 'ELASTICSEARCH CONFIDENTIAL' } - ext.projectSubstitutions += [ "org.elasticsearch.plugin:x-pack-api:${version}": ':x-pack-elasticsearch:plugin' ] + ext.projectSubstitutions += [ + "org.elasticsearch.plugin:x-pack-api:${version}": ':x-pack-elasticsearch:plugin', + "org.elasticsearch.plugin:x-pack:${bwcVersion}": ':x-pack-elasticsearch:plugin:bwc-zip' + ] } diff --git a/plugin/bwc-zip/build.gradle b/plugin/bwc-zip/build.gradle new file mode 100644 index 00000000000..d929b930694 --- /dev/null +++ b/plugin/bwc-zip/build.gradle @@ -0,0 +1,116 @@ +import java.util.regex.Matcher +import org.elasticsearch.gradle.LoggedExec + +/** + * This is a dummy project which does a local checkout of the previous + * major version's stable branch, and builds a snapshot. This allows backcompat + * tests in the next major version to test against the next unreleased minor + * version, without relying on snapshots. + */ + +apply plugin: 'distribution' + +File esCheckoutDir = file("${buildDir}/bwc/checkout-es-5.x") +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/5.x'] +} + +task checkoutXPackBwcBranch(type: LoggedExec) { + dependsOn fetchXPackLatest + workingDir = xpackCheckoutDir + commandLine = ['git', 'checkout', 'upstream/5.x'] +} + +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 +} + diff --git a/qa/rolling-upgrade/build.gradle b/qa/rolling-upgrade/build.gradle index 37ae7452c83..47f28043b01 100644 --- a/qa/rolling-upgrade/build.gradle +++ b/qa/rolling-upgrade/build.gradle @@ -56,7 +56,7 @@ task oldClusterTest(type: RestIntegTestTask) { oldClusterTestCluster { plugin ':x-pack-elasticsearch:plugin' distribution = 'zip' - bwcVersion = '5.4.0-SNAPSHOT' // TODO: either randomize, or make this settable with sysprop + bwcVersion = project.bwcVersion // TODO: either randomize, or make this settable with sysprop numBwcNodes = 2 numNodes = 2 clusterName = 'rolling-upgrade'