Skip to content

Commit 196babc

Browse files
authored
Merge pull request #3067 from vlsi/buildscripts
Upgrade Gradle to 8.6, use Java 17 for building code, target Java 11, polish buildscripts
2 parents d6ed528 + 9f0406d commit 196babc

29 files changed

+625
-331
lines changed

.github/workflows/matrix.js

Lines changed: 63 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -1,127 +1,37 @@
11
// The script generates a random subset of valid jdk, os, timezone, and other axes.
22
// You can preview the results by running "node matrix.js"
33
// See https://github.com/vlsi/github-actions-random-matrix
4+
let fs = require('fs');
5+
let os = require('os');
46
let {MatrixBuilder} = require('./matrix_builder');
57
const matrix = new MatrixBuilder();
68
matrix.addAxis({
7-
name: 'jdk',
8-
title: x => x.version + ', ' + x.group,
9+
name: 'java_distribution',
910
values: [
10-
// Zulu
11-
{group: 'Zulu', version: '11', distribution: 'zulu', jit: 'hotspot'},
12-
{group: 'Zulu', version: '17', distribution: 'zulu', jit: 'hotspot'},
13-
14-
// Adopt
15-
{group: 'Adopt Hotspot', version: '11', distribution: 'adopt-hotspot', jit: 'hotspot'},
16-
{group: 'Adopt Hotspot', version: '17', distribution: 'adopt-hotspot', jit: 'hotspot'},
11+
{value: 'corretto', vendor: 'amazon', weight: 1},
12+
{value: 'liberica', vendor: 'bellsoft', weight: 1},
13+
{value: 'microsoft', vendor: 'microsoft', weight: 1},
14+
{value: 'oracle', vendor: 'oracle', weight: 1},
15+
// There are issues running Semeru JDK with Gradle 8.5
16+
// See https://github.com/gradle/gradle/issues/27273
17+
// {value: 'semeru', vendor: 'ibm', weight: 4},
18+
{value: 'temurin', vendor: 'eclipse', weight: 1},
19+
{value: 'zulu', vendor: 'azul', weight: 1},
20+
]
21+
});
1722

18-
// Amazon Corretto
19-
{
20-
group: 'Corretto',
21-
version: '17',
22-
jit: 'hotspot',
23-
distribution: 'jdkfile',
24-
url: 'https://corretto.aws/downloads/latest/amazon-corretto-17-x64-linux-jdk.tar.gz'
25-
},
26-
{
27-
group: 'Corretto',
28-
version: '11',
29-
jit: 'hotspot',
30-
distribution: 'jdkfile',
31-
url: 'https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.tar.gz'
32-
},
33-
//DragonWell
34-
{
35-
group: 'DragonWell',
36-
version: '11',
37-
jit: 'hotspot',
38-
distribution: 'jdkfile',
39-
url: 'https://github.com/alibaba/dragonwell11/releases/download/dragonwell-standard-11.0.16.12_jdk-11.0.16-ga/Alibaba_Dragonwell_Standard_11.0.16.12.8_x64_linux.tar.gz'
40-
},
41-
{
42-
group: 'DragonWell',
43-
version: '17',
44-
jit: 'hotspot',
45-
distribution: 'jdkfile',
46-
url: 'https://github.com/alibaba/dragonwell17/releases/download/dragonwell-standard-17.0.4.0.4%2B8_jdk-17.0.4-ga/Alibaba_Dragonwell_Standard_17.0.4.0.4%2B8_x64_linux.tar.gz'
47-
},
48-
//GraalVM
49-
{
50-
group: 'GraalVM',
51-
version: '11',
52-
jit: 'hotspot',
53-
distribution: 'jdkfile',
54-
url: 'https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.3.0/graalvm-ce-java11-linux-amd64-22.3.0.tar.gz'
55-
},
56-
{
57-
group: 'GraalVM',
58-
version: '17',
59-
jit: 'hotspot',
60-
distribution: 'jdkfile',
61-
url: 'https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.3.0/graalvm-ce-java17-linux-amd64-22.3.0.tar.gz'
62-
},
63-
// Microsoft
64-
{
65-
group: 'Microsoft',
66-
version: '11',
67-
jit: 'hotspot',
68-
distribution: 'jdkfile',
69-
url: 'https://aka.ms/download-jdk/microsoft-jdk-11.0.11.9.1-linux-x64.tar.gz'
70-
},
71-
{
72-
group: 'Microsoft',
73-
version: '17',
74-
jit: 'hotspot',
75-
distribution: 'jdkfile',
76-
url: 'https://aka.ms/download-jdk/microsoft-jdk-17.0.1.12.1-linux-x64.tar.gz'
77-
},
78-
// Liberica
79-
{
80-
group: 'Liberica',
81-
version: '17',
82-
jit: 'hotspot',
83-
distribution: 'jdkfile',
84-
url: 'https://download.bell-sw.com/java/17.0.1+12/bellsoft-jdk17.0.1+12-linux-amd64.tar.gz'
85-
},
86-
{
87-
group: 'Liberica',
88-
version: '11',
89-
jit: 'hotspot',
90-
distribution: 'jdkfile',
91-
url: 'https://download.bell-sw.com/java/11.0.13+8/bellsoft-jdk11.0.13+8-linux-amd64.tar.gz'
92-
},
93-
// SapMachine
94-
{
95-
group: 'SapMachine',
96-
version: '11',
97-
jit: 'hotspot',
98-
distribution: 'jdkfile',
99-
url: 'https://github.com/SAP/SapMachine/releases/download/sapmachine-11.0.17/sapmachine-jdk-11.0.17_linux-x64_bin.tar.gz'
100-
},
101-
{
102-
group: 'SapMachine',
103-
version: '17',
104-
jit: 'hotspot',
105-
distribution: 'jdkfile',
106-
url: 'https://github.com/SAP/SapMachine/releases/download/sapmachine-17.0.5/sapmachine-jdk-17.0.5_linux-x64_bin.tar.gz'
107-
},
108-
//Semeru
109-
{
110-
group: 'Semeru',
111-
version: '11',
112-
jit: 'hotspot',
113-
distribution: 'jdkfile',
114-
url: 'https://github.com/ibmruntimes/semeru11-binaries/releases/download/jdk-11.0.17%2B8_openj9-0.35.0/ibm-semeru-open-jdk_x64_linux_11.0.17_8_openj9-0.35.0.tar.gz'
115-
},
116-
{
117-
group: 'Semeru',
118-
version: '17',
119-
jit: 'hotspot',
120-
distribution: 'jdkfile',
121-
url: 'https://github.com/ibmruntimes/semeru17-binaries/releases/download/jdk-17.0.5%2B8_openj9-0.35.0/ibm-semeru-open-jdk_x64_linux_17.0.5_8_openj9-0.35.0.tar.gz'
122-
},
23+
const eaJava = '22';
24+
matrix.addAxis({
25+
name: 'java_version',
26+
// Strings allow versions like 18-ea
27+
values: [
28+
'11',
29+
'17',
30+
'21',
31+
eaJava,
12332
]
12433
});
34+
12535
matrix.addAxis({
12636
name: 'tz',
12737
values: [
@@ -157,25 +67,41 @@ matrix.addAxis({
15767
]
15868
});
15969

160-
matrix.setNamePattern(['jdk', 'hash', 'os', 'tz', 'locale']);
70+
matrix.setNamePattern(['java_version', 'java_distribution', 'hash', 'os', 'tz', 'locale']);
16171

162-
// TODO: figure out how "same hashcode" could be configured in OpenJ9
163-
matrix.exclude({hash: {value: 'same'}, jdk: {jit: 'openj9'}});
164-
matrix.exclude({jdk: {distribution: 'jdkfile'}, os: ['windows-latest', 'macos-latest']});
72+
matrix.imply({java_version: eaJava}, {java_distribution: {value: 'oracle'}})
73+
// Oracle JDK is only supported for JDK 17 and later
74+
matrix.exclude({java_distribution: {value: 'oracle'}, java_version: ['11']});
75+
// Semeru uses OpenJ9 jit which has no option for making hash codes the same
76+
// See https://github.com/eclipse-openj9/openj9/issues/17309
77+
matrix.exclude({java_distribution: {value: 'semeru'}, hash: {value: 'same'}});
16578
// Ensure at least one job with "same" hashcode exists
16679
matrix.generateRow({hash: {value: 'same'}});
16780
// Ensure at least one windows and at least one linux job is present (macos is almost the same as linux)
16881
matrix.generateRow({os: 'windows-latest'});
16982
matrix.generateRow({os: 'ubuntu-latest'});
170-
// Ensure there will be at least one job with Java 17
171-
matrix.generateRow({jdk: {version: 17}});
17283
// Ensure there will be at least one job with Java 11
173-
matrix.generateRow({jdk: {version: 11}});
84+
matrix.generateRow({java_version: "11"});
85+
// Ensure there will be at least one job with Java 17
86+
matrix.generateRow({java_version: "17"});
87+
// Ensure there will be at least one job with Java 21
88+
matrix.generateRow({java_version: "21"});
89+
// Ensure there will be at least one job with Java EA
90+
matrix.generateRow({java_version: eaJava});
17491
const include = matrix.generateRows(process.env.MATRIX_JOBS || 5);
17592
if (include.length === 0) {
17693
throw new Error('Matrix list is empty');
17794
}
17895
include.sort((a, b) => a.name.localeCompare(b.name, undefined, {numeric: true}));
96+
include.forEach(v => {
97+
// Pass locale via Gradle arguments in case it won't be inherited from _JAVA_OPTIONS
98+
// In fact, _JAVA_OPTIONS is non-standard and might be ignored by some JVMs
99+
let gradleArgs = [
100+
`-Duser.country=${v.locale.country}`,
101+
`-Duser.language=${v.locale.language}`,
102+
];
103+
v.extraGradleArgs = gradleArgs.join(' ');
104+
});
179105
include.forEach(v => {
180106
let jvmArgs = [];
181107
if (v.hash.value === 'same') {
@@ -184,23 +110,30 @@ include.forEach(v => {
184110
// Gradle does not work in tr_TR locale, so pass locale to test only: https://github.com/gradle/gradle/issues/17361
185111
jvmArgs.push(`-Duser.country=${v.locale.country}`);
186112
jvmArgs.push(`-Duser.language=${v.locale.language}`);
187-
if (v.jdk.jit === 'hotspot' && Math.random() > 0.5) {
113+
v.java_vendor = v.java_distribution.vendor;
114+
v.java_distribution = v.java_distribution.value;
115+
if (v.java_distribution === 'oracle') {
116+
v.oracle_java_website = v.java_version === eaJava ? 'jdk.java.net' : 'oracle.com';
117+
}
118+
v.non_ea_java_version = v.java_version === eaJava ? '' : v.java_version;
119+
if (v.java_distribution !== 'semeru' && Math.random() > 0.5) {
188120
// The following options randomize instruction selection in JIT compiler
189121
// so it might reveal missing synchronization in TestNG code
190122
v.name += ', stress JIT';
123+
v.testDisableCaching = 'JIT randomization should not be cached';
191124
jvmArgs.push('-XX:+UnlockDiagnosticVMOptions');
192125
// Randomize instruction scheduling in GCM
193126
// share/opto/c2_globals.hpp
194127
jvmArgs.push('-XX:+StressGCM');
195128
// Randomize instruction scheduling in LCM
196129
// share/opto/c2_globals.hpp
197130
jvmArgs.push('-XX:+StressLCM');
198-
if (v.jdk.version >= 16) {
131+
if (v.java_version >= 16) {
199132
// Randomize worklist traversal in IGVN
200133
// share/opto/c2_globals.hpp
201134
jvmArgs.push('-XX:+StressIGVN');
202135
}
203-
if (v.jdk.version >= 17) {
136+
if (v.java_version >= 17) {
204137
// Randomize worklist traversal in CCP
205138
// share/opto/c2_globals.hpp
206139
jvmArgs.push('-XX:+StressCCP');
@@ -211,4 +144,9 @@ include.forEach(v => {
211144
});
212145

213146
console.log(include);
214-
console.log('::set-output name=matrix::' + JSON.stringify({include}));
147+
let filePath = process.env['GITHUB_OUTPUT'] || '';
148+
if (filePath) {
149+
fs.appendFileSync(filePath, `matrix<<MATRIX_BODY${os.EOL}${JSON.stringify({include})}${os.EOL}MATRIX_BODY${os.EOL}`, {
150+
encoding: 'utf8'
151+
});
152+
}

0 commit comments

Comments
 (0)