Skip to content

Commit c29bc87

Browse files
Move bwcVersions extension property to BuildParams (back port) (elastic#56381)
* Move bwcVersions extension property to BuildParams (elastic#56206) * Fix :qa Task Using Broken BwC Versions Resolution (elastic#56332) Co-authored-by: Armin Braun <[email protected]>
1 parent ebe1e4c commit c29bc87

File tree

19 files changed

+61
-40
lines changed

19 files changed

+61
-40
lines changed

build.gradle

+2-14
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin
2222
import de.thetaphi.forbiddenapis.gradle.ForbiddenApisPlugin
2323
import org.apache.tools.ant.taskdefs.condition.Os
2424
import org.elasticsearch.gradle.BuildPlugin
25-
import org.elasticsearch.gradle.BwcVersions
2625
import org.elasticsearch.gradle.Version
2726
import org.elasticsearch.gradle.VersionProperties
2827
import org.elasticsearch.gradle.info.BuildParams
@@ -117,14 +116,6 @@ subprojects {
117116
}
118117
}
119118

120-
/* Introspect all versions of ES that may be tested against for backwards
121-
* compatibility. It is *super* important that this logic is the same as the
122-
* logic in VersionUtils.java, throwing out alphas because they don't have any
123-
* backwards compatibility guarantees and only keeping the latest beta or rc
124-
* in a branch if there are only betas and rcs in the branch so we have
125-
* *something* to test against. */
126-
BwcVersions versions = new BwcVersions(file('server/src/main/java/org/elasticsearch/Version.java').readLines('UTF-8'))
127-
128119
task updateCIBwcVersions() {
129120
doLast {
130121
File yml = file(".ci/bwcVersions")
@@ -155,9 +146,6 @@ allprojects {
155146
gradle.startParameter.taskNames.contains('eclipse') || // Detects gradle launched from the command line to do eclipse stuff
156147
gradle.startParameter.taskNames.contains('cleanEclipse')
157148

158-
// for BWC testing
159-
bwcVersions = versions
160-
161149
buildMetadata = buildMetadataMap
162150
}
163151
}
@@ -171,15 +159,15 @@ task verifyVersions {
171159
// Fetch the metadata and parse the xml into Version instances because it's more straight forward here
172160
// rather than bwcVersion ( VersionCollection ).
173161
new URL('https://repo1.maven.org/maven2/org/elasticsearch/elasticsearch/maven-metadata.xml').openStream().withStream { s ->
174-
bwcVersions.compareToAuthoritative(
162+
BuildParams.bwcVersions.compareToAuthoritative(
175163
new XmlParser().parse(s)
176164
.versioning.versions.version
177165
.collect { it.text() }.findAll { it ==~ /\d+\.\d+\.\d+/ }
178166
.collect { Version.fromString(it) }
179167
)
180168
}
181169
String ciYml = file(".ci/bwcVersions").text
182-
bwcVersions.indexCompatible.each {
170+
BuildParams.bwcVersions.indexCompatible.each {
183171
if (ciYml.contains("\"$it\"\n") == false) {
184172
throw new Exception(".ci/bwcVersions is outdated, run `./gradlew updateCIBwcVersions` and check in the results");
185173
}

buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import org.gradle.api.credentials.HttpHeaderCredentials;
4141
import org.gradle.api.file.FileTree;
4242
import org.gradle.api.file.RelativePath;
43-
import org.gradle.api.plugins.ExtraPropertiesExtension;
4443
import org.gradle.api.provider.Provider;
4544
import org.gradle.api.tasks.Sync;
4645
import org.gradle.api.tasks.TaskProvider;
@@ -93,8 +92,7 @@ public void apply(Project project) {
9392
setupDownloadServiceRepo(project);
9493

9594
if (BuildParams.isInternal()) {
96-
ExtraPropertiesExtension extraProperties = project.getExtensions().getExtraProperties();
97-
this.bwcVersions = (BwcVersions) extraProperties.get("bwcVersions");
95+
this.bwcVersions = BuildParams.getBwcVersions();
9896
}
9997

10098
project.afterEvaluate(this::setupDistributions);

buildSrc/src/main/java/org/elasticsearch/gradle/info/GlobalBuildInfoPlugin.java

+26-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.elasticsearch.gradle.info;
22

3+
import org.apache.commons.io.IOUtils;
4+
import org.elasticsearch.gradle.BwcVersions;
35
import org.elasticsearch.gradle.OS;
46
import org.elasticsearch.gradle.util.Util;
57
import org.gradle.api.GradleException;
@@ -20,6 +22,7 @@
2022
import java.io.BufferedReader;
2123
import java.io.ByteArrayOutputStream;
2224
import java.io.File;
25+
import java.io.FileInputStream;
2326
import java.io.FileReader;
2427
import java.io.IOException;
2528
import java.io.UncheckedIOException;
@@ -44,6 +47,7 @@
4447

4548
public class GlobalBuildInfoPlugin implements Plugin<Project> {
4649
private static final Logger LOGGER = Logging.getLogger(GlobalBuildInfoPlugin.class);
50+
private static final String DEFAULT_VERSION_JAVA_FILE_PATH = "server/src/main/java/org/elasticsearch/Version.java";
4751
private static Integer _defaultParallel = null;
4852

4953
private final JavaInstallationRegistry javaInstallationRegistry;
@@ -69,10 +73,13 @@ public void apply(Project project) {
6973
File compilerJavaHome = findCompilerJavaHome();
7074
File runtimeJavaHome = findRuntimeJavaHome(compilerJavaHome);
7175

72-
GitInfo gitInfo = gitInfo(project.getRootProject().getRootDir());
76+
File rootDir = project.getRootDir();
77+
GitInfo gitInfo = gitInfo(rootDir);
7378

74-
// Initialize global build parameters
7579
BuildParams.init(params -> {
80+
// Initialize global build parameters
81+
boolean isInternal = GlobalBuildInfoPlugin.class.getResource("/buildSrc.marker") != null;
82+
7683
params.reset();
7784
params.setCompilerJavaHome(compilerJavaHome);
7885
params.setRuntimeJavaHome(runtimeJavaHome);
@@ -88,16 +95,32 @@ public void apply(Project project) {
8895
params.setBuildDate(ZonedDateTime.now(ZoneOffset.UTC));
8996
params.setTestSeed(getTestSeed());
9097
params.setIsCi(System.getenv("JENKINS_URL") != null);
91-
params.setIsInternal(GlobalBuildInfoPlugin.class.getResource("/buildSrc.marker") != null);
98+
params.setIsInternal(isInternal);
9299
params.setDefaultParallel(findDefaultParallel(project));
93100
params.setInFipsJvm(Util.getBooleanProperty("tests.fips.enabled", false));
94101
params.setIsSnapshotBuild(Util.getBooleanProperty("build.snapshot", true));
102+
if (isInternal) {
103+
params.setBwcVersions(resolveBwcVersions(rootDir));
104+
}
95105
});
96106

97107
// Print global build info header just before task execution
98108
project.getGradle().getTaskGraph().whenReady(graph -> logGlobalBuildInfo());
99109
}
100110

111+
/* Introspect all versions of ES that may be tested against for backwards
112+
* compatibility. It is *super* important that this logic is the same as the
113+
* logic in VersionUtils.java. */
114+
private static BwcVersions resolveBwcVersions(File root) {
115+
File versionsFile = new File(root, DEFAULT_VERSION_JAVA_FILE_PATH);
116+
try {
117+
List<String> versionLines = IOUtils.readLines(new FileInputStream(versionsFile), "UTF-8");
118+
return new BwcVersions(versionLines);
119+
} catch (IOException e) {
120+
throw new IllegalStateException("Unable to resolve to resolve bwc versions from versionsFile.", e);
121+
}
122+
}
123+
101124
private void logGlobalBuildInfo() {
102125
final String osName = System.getProperty("os.name");
103126
final String osVersion = System.getProperty("os.version");

buildSrc/src/main/java/org/elasticsearch/gradle/test/DistroTestPlugin.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ private static Version getUpgradeVersion(Project project) {
219219

220220
String firstPartOfSeed = BuildParams.getTestSeed().split(":")[0];
221221
final long seed = Long.parseUnsignedLong(firstPartOfSeed, 16);
222-
BwcVersions bwcVersions = (BwcVersions) extraProperties.get("bwcVersions");
222+
BwcVersions bwcVersions = BuildParams.getBwcVersions();
223223
final List<Version> indexCompatVersions = bwcVersions.getIndexCompatible();
224224
return indexCompatVersions.get(new Random(seed).nextInt(indexCompatVersions.size()));
225225
}
@@ -287,8 +287,7 @@ private static TaskProvider<Copy> configureCopyUpgradeTask(Project project, Vers
287287
Path upgradePath = upgradeDir.get().getAsFile().toPath();
288288

289289
// write bwc version, and append -SNAPSHOT if it is an unreleased version
290-
ExtraPropertiesExtension extraProperties = project.getExtensions().getByType(ExtraPropertiesExtension.class);
291-
BwcVersions bwcVersions = (BwcVersions) extraProperties.get("bwcVersions");
290+
BwcVersions bwcVersions = BuildParams.getBwcVersions();
292291
final String upgradeFromVersion;
293292
if (bwcVersions.unreleasedInfo(upgradeVersion) != null) {
294293
upgradeFromVersion = upgradeVersion.toString() + "-SNAPSHOT";

buildSrc/src/minimumRuntime/java/org/elasticsearch/gradle/info/BuildParams.java

+9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.elasticsearch.gradle.info;
22

3+
import org.elasticsearch.gradle.BwcVersions;
34
import org.gradle.api.JavaVersion;
45

56
import java.io.File;
@@ -30,6 +31,7 @@ public class BuildParams {
3031
private static Boolean isInternal;
3132
private static Integer defaultParallel;
3233
private static Boolean isSnapshotBuild;
34+
private static BwcVersions bwcVersions;
3335

3436
/**
3537
* Initialize global build parameters. This method accepts and a initialization function which in turn accepts a
@@ -95,6 +97,10 @@ public static ZonedDateTime getBuildDate() {
9597
return value(buildDate);
9698
}
9799

100+
public static BwcVersions getBwcVersions() {
101+
return value(bwcVersions);
102+
}
103+
98104
public static String getTestSeed() {
99105
return value(testSeed);
100106
}
@@ -228,5 +234,8 @@ public void setIsSnapshotBuild(final boolean isSnapshotBuild) {
228234
BuildParams.isSnapshotBuild = isSnapshotBuild;
229235
}
230236

237+
public void setBwcVersions(BwcVersions bwcVersions) {
238+
BuildParams.bwcVersions = requireNonNull(bwcVersions);
239+
}
231240
}
232241
}

buildSrc/src/testKit/distribution-download/build.gradle

+1-3
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,5 @@ if (internal) {
4949
BwcVersions versions = new BwcVersions(new TreeSet<>(
5050
Arrays.asList(Version.fromString("8.0.0"), Version.fromString("8.0.1"), Version.fromString("8.1.0"), currentVersion)),
5151
currentVersion)
52-
allprojects {
53-
ext.bwcVersions = versions
54-
}
52+
BuildParams.init { it.setBwcVersions(versions) }
5553
}

distribution/bwc/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import static org.elasticsearch.gradle.util.JavaUtil.getJavaHome
3636
* unreleased versions are when Gradle projects are set up, so we use "build-unreleased-version-*" as placeholders
3737
* and configure them to build various versions here.
3838
*/
39-
bwcVersions.forPreviousUnreleased { BwcVersions.UnreleasedVersionInfo unreleasedVersion ->
39+
BuildParams.bwcVersions.forPreviousUnreleased { BwcVersions.UnreleasedVersionInfo unreleasedVersion ->
4040
project("${unreleasedVersion.gradleProjectPath}") {
4141
Version bwcVersion = unreleasedVersion.version
4242
String bwcBranch = unreleasedVersion.branch

gradle/bwc-test.gradle

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import org.elasticsearch.gradle.Version
2+
import org.elasticsearch.gradle.info.BuildParams
23

34
ext.bwcTaskName = { Version version ->
45
return "v${version}#bwcTest"
56
}
67

78
def bwcTestSnapshots = tasks.register("bwcTestSnapshots") {
89
if (project.bwc_tests_enabled) {
9-
dependsOn tasks.matching { task -> bwcVersions.unreleased.any { version -> bwcTaskName(version) == task.name } }
10+
dependsOn tasks.matching { task -> BuildParams.bwcVersions.unreleased.any { version -> bwcTaskName(version) == task.name } }
1011
}
1112
}
1213

qa/full-cluster-restart/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ apply plugin: 'elasticsearch.testclusters'
2727
apply plugin: 'elasticsearch.standalone-test'
2828
apply from : "$rootDir/gradle/bwc-test.gradle"
2929

30-
for (Version bwcVersion : bwcVersions.indexCompatible) {
30+
for (Version bwcVersion : BuildParams.bwcVersions.indexCompatible) {
3131
String baseName = "v${bwcVersion}"
3232

3333
testClusters {

qa/mixed-cluster/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ restResources {
3232
}
3333
}
3434

35-
for (Version bwcVersion : bwcVersions.wireCompatible) {
35+
for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
3636
if (bwcVersion == VersionProperties.getElasticsearchVersion()) {
3737
// Not really a mixed cluster
3838
continue;

qa/repository-multi-version/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ dependencies {
2929
testCompile project(':client:rest-high-level')
3030
}
3131

32-
for (Version bwcVersion : bwcVersions.indexCompatible) {
32+
for (Version bwcVersion : BuildParams.bwcVersions.indexCompatible) {
3333
String baseName = "v${bwcVersion}"
3434
String oldClusterName = "${baseName}-old"
3535
String newClusterName = "${baseName}-new"

qa/rolling-upgrade/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ apply plugin: 'elasticsearch.testclusters'
2525
apply plugin: 'elasticsearch.standalone-test'
2626
apply from : "$rootDir/gradle/bwc-test.gradle"
2727

28-
for (Version bwcVersion : bwcVersions.wireCompatible) {
28+
for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
2929
/*
3030
* The goal here is to:
3131
* <ul>

qa/verify-version-constants/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ apply plugin: 'elasticsearch.testclusters'
2626
apply plugin: 'elasticsearch.standalone-test'
2727
apply from : "$rootDir/gradle/bwc-test.gradle"
2828

29-
for (Version bwcVersion : bwcVersions.indexCompatible) {
29+
for (Version bwcVersion : BuildParams.bwcVersions.indexCompatible) {
3030
String baseName = "v${bwcVersion}"
3131

3232
testClusters {

test/framework/build.gradle

+4-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19+
import org.elasticsearch.gradle.info.BuildParams;
1920

2021
dependencies {
2122
compile project(":client:rest")
@@ -60,9 +61,9 @@ thirdPartyAudit.ignoreMissingClasses(
6061
)
6162

6263
test {
63-
systemProperty 'tests.gradle_index_compat_versions', bwcVersions.indexCompatible.join(',')
64-
systemProperty 'tests.gradle_wire_compat_versions', bwcVersions.wireCompatible.join(',')
65-
systemProperty 'tests.gradle_unreleased_versions', bwcVersions.unreleased.join(',')
64+
systemProperty 'tests.gradle_index_compat_versions', BuildParams.bwcVersions.indexCompatible.join(',')
65+
systemProperty 'tests.gradle_wire_compat_versions', BuildParams.bwcVersions.wireCompatible.join(',')
66+
systemProperty 'tests.gradle_unreleased_versions', BuildParams.bwcVersions.unreleased.join(',')
6667
}
6768

6869
task integTest(type: Test) {

x-pack/qa/full-cluster-restart/build.gradle

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import org.elasticsearch.gradle.Version
2+
import org.elasticsearch.gradle.info.BuildParams
23
import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
34

45
apply plugin: 'elasticsearch.testclusters'
@@ -33,7 +34,7 @@ tasks.register("copyTestNodeKeyMaterial", Copy) {
3334
into outputDir
3435
}
3536

36-
for (Version bwcVersion : bwcVersions.indexCompatible) {
37+
for (Version bwcVersion : BuildParams.bwcVersions.indexCompatible) {
3738
String baseName = "v${bwcVersion}"
3839

3940
testClusters {

x-pack/qa/rolling-upgrade-basic/build.gradle

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import org.elasticsearch.gradle.Version
2+
import org.elasticsearch.gradle.info.BuildParams
23
import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
34

45
apply plugin: 'elasticsearch.testclusters'
@@ -9,7 +10,7 @@ dependencies {
910
testCompile project(':x-pack:qa')
1011
}
1112

12-
for (Version bwcVersion : bwcVersions.wireCompatible) {
13+
for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
1314
String baseName = "v${bwcVersion}"
1415

1516
testClusters {

x-pack/qa/rolling-upgrade-multi-cluster/build.gradle

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import org.elasticsearch.gradle.Version
2+
import org.elasticsearch.gradle.info.BuildParams
23
import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
34

45
apply plugin: 'elasticsearch.testclusters'
@@ -9,7 +10,7 @@ dependencies {
910
testCompile project(':x-pack:qa')
1011
}
1112

12-
for (Version bwcVersion : bwcVersions.wireCompatible) {
13+
for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
1314
String baseName = "v${bwcVersion}"
1415

1516
testClusters {

x-pack/qa/rolling-upgrade/build.gradle

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import org.elasticsearch.gradle.Version
2+
import org.elasticsearch.gradle.info.BuildParams
23
import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
34

45
apply plugin: 'elasticsearch.testclusters'
@@ -29,7 +30,7 @@ task copyTestNodeKeyMaterial(type: Copy) {
2930
into outputDir
3031
}
3132

32-
for (Version bwcVersion : bwcVersions.wireCompatible) {
33+
for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
3334
String baseName = "v${bwcVersion}"
3435

3536
testClusters {

0 commit comments

Comments
 (0)