Skip to content

Commit a2db7b5

Browse files
committed
Improve Truffle CI gates and introduce tiers.
1 parent 53748bb commit a2db7b5

File tree

2 files changed

+233
-229
lines changed

2 files changed

+233
-229
lines changed

truffle/ci/ci.jsonnet

Lines changed: 154 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,21 @@
88
local darwin_amd64 = common.darwin_amd64,
99
local darwin_aarch64 = common.darwin_aarch64,
1010
local linux_amd64 = common.linux_amd64,
11+
local linux_aarch64 = common.linux_aarch64,
1112
local windows_amd64 = common.windows_amd64,
1213

14+
local winDevKit(jdk) =
15+
devkits[
16+
if jdk.jdk_version == 21
17+
then "windows-jdk21"
18+
else "windows-jdkLatest"
19+
],
20+
1321
local truffle_common = {
1422
setup+: [
1523
["cd", "./truffle"],
1624
],
17-
targets: ["gate"],
18-
timelimit: "30:00",
19-
},
20-
21-
local guard = {
22-
guard+: {
23-
includes+: ["<graal>/sdk/**", "<graal>/truffle/**", "**.jsonnet"] + top_level_ci,
24-
}
25+
notify_groups:: ["truffle"],
2526
},
2627

2728
local bench_common = {
@@ -35,33 +36,8 @@
3536
]
3637
},
3738

38-
local gate_lite(target) = truffle_common + {
39-
name: target + '-truffle-lite-oraclejdk-' + self.jdk_name + '-' + self.os + '-' + self.arch,
40-
run: [
41-
["mx", "build"],
42-
["mx", "unittest", "--verbose"],
43-
],
44-
targets: [target],
45-
},
46-
47-
local sigtest = truffle_common + {
48-
name: 'gate-truffle-sigtest-' + self.jdk_name,
49-
run: [
50-
["mx", "build"],
51-
["mx", "sigtest", "--check", (if self.jdk_version == 21 then "all" else "bin")],
52-
],
53-
},
54-
55-
local graalVMCELatest = common.labsjdkLatest + common.deps.svm + {
56-
mx_build_graalvm_cmd: ["mx", "-p", "../vm", "--env", "ce", "--native-images=lib:jvmcicompiler"],
57-
run+: [
58-
self.mx_build_graalvm_cmd + ["build"],
59-
["set-export", "JAVA_HOME", self.mx_build_graalvm_cmd + ["--quiet", "--no-warning", "graalvm-home"]]
60-
]
61-
},
62-
6339
local simple_tool_maven_project_gate = truffle_common + {
64-
name: 'gate-external-mvn-simpletool-' + self.jdk_name,
40+
name: self.name_prefix + 'truffle-simpletool-maven-' + self.jdk_name + '-' + self.os + '-' + self.arch,
6541
packages+: {
6642
maven: "==3.3.9"
6743
},
@@ -80,7 +56,7 @@
8056
},
8157

8258
local simple_language_maven_project_gate = truffle_common + {
83-
name: 'gate-external-mvn-simplelanguage-' + self.jdk_name,
59+
name: self.name_prefix + 'truffle-simplelanguage-maven-' + self.jdk_name + '-' + self.os + '-' + self.arch,
8460
packages+: {
8561
maven: "==3.3.9",
8662
ruby: "==3.0.2",
@@ -103,146 +79,172 @@
10379
],
10480
},
10581

106-
local truffle_jvm_gate = truffle_common + {
82+
local truffle_common_gate = truffle_common + common.deps.eclipse + common.deps.jdt + common.deps.spotbugs {
83+
components+: ["truffle"],
84+
},
85+
86+
# this is only valid for gates that depend only on truffle files
87+
# do not use for latest GraalVM builds
88+
local guard = {
89+
guard+: {
90+
includes+: ["<graal>/sdk/**", "<graal>/truffle/**", "**.jsonnet"] + top_level_ci,
91+
}
92+
},
93+
94+
local truffle_style_gate = truffle_common_gate + guard + {
95+
name: self.name_prefix + 'truffle-style-' + self.truffle_jdk_name + '-' + self.os + '-' + self.arch,
10796
run+: [
108-
['mx', '--no-jlinking', 'gate', '--no-warning-as-error', '--tags', 'build,truffle-jvm'],
97+
["mx", "--strict-compliance", "gate", "--strict-mode", "--tag", "style,fullbuild,sigtest"],
10998
],
110-
notify_groups: ["truffle"],
111-
components+: ["truffle"],
112-
timelimit: '1:15:00',
113-
name: 'gate-truffle-ce-jvm-' + self.jdk_name + '-linux-amd64',
11499
},
115100

116-
# runs only truffle native unittests
117-
local truffle_native_unittest_gate = truffle_common + {
118-
gate_tag_suffix: '',
101+
local truffle_test_full_gate = truffle_common_gate + guard + {
102+
name: self.name_prefix + 'truffle-full-test-' + self.truffle_jdk_name + '-' + self.os + '-' + self.arch,
119103
run+: [
120-
['mx', '--no-jlinking', 'gate', '--no-warning-as-error', '--tags', 'build,unittest-native' + self.gate_tag_suffix],
104+
["mx", "--strict-compliance", "gate", "--strict-mode", "--tag", "style,fullbuild,fulltest"]
105+
],
106+
},
107+
local truffle_test_lite_gate= truffle_common_gate + guard + {
108+
name: self.name_prefix + 'truffle-lite-test-' + self.truffle_jdk_name + '-' + self.os + '-' + self.arch,
109+
run+: [
110+
["mx", "--strict-compliance", "gate", "--strict-mode", "--tag", "build,test"],
121111
],
122-
notify_groups: ["truffle"],
123-
components+: ["truffle"],
124-
timelimit: '1:00:00',
125-
name: 'gate-truffle-ce-native-unittest' + self.gate_tag_suffix + '-jvm-' + self.jdk_name + '-' + self.os + '-' + self.arch,
126112
},
127113

128-
# runs native SL tests and truffle native unittests
129-
local truffle_native_gate = truffle_common + {
130-
gate_tag_suffix: '',
114+
local truffle_test_super_lite_gate = truffle_common_gate + guard + {
115+
name: self.name_prefix + 'truffle-super-lite-test-' + self.truffle_jdk_name + '-' + self.os + '-' + self.arch,
131116
run+: [
132-
['mx', '--no-jlinking', 'gate', '--no-warning-as-error', '--tags', 'build,truffle-native' + self.gate_tag_suffix],
117+
["mx", "build"],
118+
["mx", "unittest", "--verbose"],
133119
],
134-
notify_groups: ["truffle"],
135-
components+: ["truffle"],
136-
timelimit: '1:30:00',
137-
name: 'gate-truffle-ce-native' + self.gate_tag_suffix + '-jvm-' + self.jdk_name + '-' + self.os + '-' + self.arch,
138120
},
139121

140-
local truffle_gate = truffle_common + common.deps.eclipse + common.deps.jdt + common.deps.spotbugs {
141-
name: 'gate-truffle-oraclejdk-' + self.jdk_name + '-' + self.os + '-' + self.arch,
142-
# The `fulltest` tag includes all Truffle test gate tasks except those that require GraalVM.
143-
run: [["mx", "--strict-compliance", "gate", "--strict-mode", "--tag"] + (if (self.os == 'windows') then ["style:0:6,fullbuild,fulltest"] else ["style,fullbuild,fulltest"])],
144-
environment+: if self.os == 'windows' then {
145-
ECLIPSE_EXE: "$ECLIPSE\\eclipse.exe",
146-
} else {},
122+
local truffle_coverage = truffle_common + common.deps.eclipse + common.deps.jdt + guard + {
123+
name: self.name_prefix + 'truffle-coverage-' + self.truffle_jdk_name + '-' + self.os + '-' + self.arch,
124+
run+: [
125+
["mx", "--strict-compliance", "gate", "--strict-mode", "--jacoco-relativize-paths", "--jacoco-omit-src-gen", "--jacocout", "coverage", "--jacoco-format", "lcov", "--tags", "build,fulltest"],
126+
],
127+
teardown+: [
128+
["mx", "sversions", "--print-repositories", "--json", "|", "coverage-uploader.py", "--associated-repos", "-"],
129+
],
130+
timelimit: "45:00",
147131
},
148132

149-
local truffle_weekly = common.weekly + {notify_groups:: ["truffle"]},
133+
local jmh_benchmark = bench_common + {
134+
name: self.name_prefix + 'truffle-jmh-' + self.truffle_jdk_name + '-' + self.os + '-' + self.arch,
135+
notify_groups:: ["truffle_bench"],
136+
run+: [
137+
["mx", "--kill-with-sigquit", "benchmark", "--results-file", "${BENCH_RESULTS_FILE_PATH}", "truffle:*", "--", "--", "org.graalvm.truffle.benchmark"],
138+
],
139+
timelimit: "3:00:00",
140+
teardown: [
141+
["bench-uploader.py", "${BENCH_RESULTS_FILE_PATH}"],
142+
],
143+
},
144+
145+
local jmh_benchmark_test = bench_common + guard + {
146+
name: self.name_prefix + 'truffle-test-benchmarks-' + self.truffle_jdk_name + '-' + self.os + '-' + self.arch,
147+
run+: [
148+
["mx", "benchmark", "truffle:*", "--", "--jvm", "server", "--jvm-config", "graal-core", "--", "org.graalvm.truffle.benchmark", "-f", "1", "-wi", "1", "-w", "1", "-i", "1", "-r", "1"],
149+
],
150+
},
151+
152+
local tier1 = common.tier1 + {
153+
name_prefix: "gate-",
154+
timelimit: "0:30:00"
155+
},
156+
local tier2 = common.tier2 + {
157+
name_prefix: "gate-",
158+
timelimit: "01:00:00"
159+
},
160+
local tier3 = common.tier3 + {
161+
name_prefix: "gate-",
162+
timelimit: "01:15:00"
163+
},
164+
local daily = common.daily + {
165+
name_prefix: "daily-",
166+
timelimit: "04:00:00"
167+
},
168+
local weekly = common.weekly + {
169+
name_prefix: "weekly-",
170+
timelimit: "04:00:00"
171+
},
172+
local bench = common.weekly + {
173+
name_prefix: "bench-",
174+
timelimit: "04:00:00"
175+
},
176+
177+
local jdk_21_oracle = common.oraclejdk21 + {truffle_jdk_name: "oraclejdk-21"},
178+
local jdk_latest_oracle = common.oraclejdkLatest + {truffle_jdk_name: "oraclejdk-latest"},
179+
local jdk_latest_labs = common.labsjdkLatestCE+ {truffle_jdk_name: "labsjdk-latest"},
180+
181+
local jdk_latest_graalvm_ce = jdk_latest_labs + common.deps.svm + {
182+
truffle_jdk_name: "graalvm-ce-latest",
183+
mx_build_graalvm_cmd: ["mx", "-p", "../vm", "--env", "ce", "--native-images=lib:jvmcicompiler"],
184+
run+: [
185+
self.mx_build_graalvm_cmd + ["build", "--force-javac"],
186+
["set-export", "JAVA_HOME", self.mx_build_graalvm_cmd + ["--quiet", "--no-warning", "graalvm-home"]]
187+
]
188+
},
189+
190+
local test_jdks = [jdk_latest_oracle, jdk_21_oracle],
191+
local graalvm_jdks = [jdk_latest_graalvm_ce],
192+
193+
local forEach(arr, fn) = std.flattenArrays([fn(x) for x in arr]),
150194

151195
local _builds = std.flattenArrays([
196+
197+
# Regular Truffle gates
198+
[linux_amd64 + tier1 + jdk_latest_oracle + truffle_style_gate],
199+
200+
forEach(test_jdks, function(jdk)
152201
[
153-
linux_amd64 + jdk + sigtest + guard,
154-
darwin_amd64 + jdk + truffle_weekly + gate_lite("daily") + guard,
155-
darwin_aarch64 + jdk + truffle_weekly + gate_lite("gate") + guard,
156-
] for jdk in [common.oraclejdk21, common.oraclejdkLatest]
157-
]) +
158-
[
159-
# The simple_language_maven_project_gate uses native-image, so we must run on labsjdk rather than oraclejdk
160-
linux_amd64 + common.graalvmee21 + simple_language_maven_project_gate,
161-
linux_amd64 + graalVMCELatest + simple_language_maven_project_gate,
162-
# The simple_tool_maven_project_gate builds compiler, so we must run on labsjdk rather than oraclejdk because of compiler module rename
163-
linux_amd64 + common.graalvmee21 + simple_tool_maven_project_gate,
164-
linux_amd64 + graalVMCELatest + simple_tool_maven_project_gate,
165-
# Truffle JVM gate
166-
linux_amd64 + common.graalvmee21 + truffle_jvm_gate,
167-
# GR-65191
168-
# linux_amd64 + common.oraclejdk24 + truffle_jvm_gate,
169-
linux_amd64 + graalVMCELatest + truffle_jvm_gate,
170-
# Truffle Native gate
171-
linux_amd64 + common.graalvmee21 + truffle_native_gate,
172-
linux_amd64 + common.graalvmee21 + truffle_native_gate + {
173-
gate_tag_suffix: '-quickbuild'
174-
},
175-
linux_amd64 + graalVMCELatest + truffle_native_gate,
176-
windows_amd64 + graalVMCELatest + devkits["windows-jdkLatest"] + truffle_native_unittest_gate,
177-
linux_amd64 + graalVMCELatest + truffle_native_gate + {
178-
gate_tag_suffix: '-quickbuild'
179-
},
180-
windows_amd64 + graalVMCELatest + devkits["windows-jdkLatest"] + truffle_native_unittest_gate + {
181-
gate_tag_suffix: '-quickbuild'
182-
},
202+
linux_amd64 + tier2 + jdk + truffle_test_lite_gate,
203+
linux_amd64 + tier3 + jdk + truffle_test_full_gate,
183204

184-
linux_amd64 + common.oraclejdk21 + truffle_gate + guard + {timelimit: "1:30:00"},
185-
linux_amd64 + common.oraclejdkLatest + truffle_gate + guard + {environment+: {DISABLE_DSL_STATE_BITS_TESTS: "true"}},
205+
linux_aarch64 + tier3 + jdk + truffle_test_lite_gate,
206+
darwin_aarch64 + tier3 + jdk + truffle_test_lite_gate,
207+
windows_amd64 + tier3 + jdk + truffle_test_lite_gate + winDevKit(jdk),
186208

187-
truffle_common + linux_amd64 + common.oraclejdkLatest + guard {
188-
name: "gate-truffle-javadoc-" + self.jdk_name,
189-
run: [
190-
["mx", "build"],
191-
["mx", "javadoc"],
192-
],
193-
},
209+
# we do have very few resources for Darwin AMD64 so only run weekly
210+
darwin_amd64 + weekly + jdk + truffle_test_lite_gate,
211+
]
212+
),
194213

195-
truffle_common + linux_amd64 + common.oraclejdk21 + guard {
196-
name: "gate-truffle-slow-path-unittests",
197-
run: [
198-
["mx", "build", "-n", "-c", "-A-Atruffle.dsl.GenerateSlowPathOnly=true"],
199-
# only those tests exercise meaningfully implemented nodes
200-
# e.g. com.oracle.truffle.api.dsl.test uses nodes that intentionally produce
201-
# different results from fast/slow path specializations to test their activation
202-
["mx", "unittest", "com.oracle.truffle.api.test.polyglot", "com.oracle.truffle.nfi.test"],
203-
],
204-
},
214+
# SimpleLanguage Maven Integration Test
215+
forEach(graalvm_jdks, function(jdk)
216+
[
217+
linux_amd64 + tier3 + jdk + simple_language_maven_project_gate,
205218

206-
windows_amd64 + truffle_gate + common.oraclejdk21 + devkits["windows-jdk21"] + guard + {timelimit: "1:30:00"},
207-
windows_amd64 + truffle_gate + common.oraclejdkLatest + devkits["windows-jdkLatest"] + guard + {timelimit: "1:00:00", environment+: {DISABLE_DSL_STATE_BITS_TESTS: "true"}},
208-
209-
truffle_common + linux_amd64 + common.oraclejdk21 + common.deps.eclipse + common.deps.jdt + guard + {
210-
name: "weekly-truffle-coverage-21-linux-amd64",
211-
run: [
212-
["mx", "--strict-compliance", "gate", "--strict-mode", "--jacoco-relativize-paths", "--jacoco-omit-src-gen", "--jacocout", "coverage", "--jacoco-format", "lcov", "--tags", "build,fulltest"],
213-
],
214-
teardown+: [
215-
["mx", "sversions", "--print-repositories", "--json", "|", "coverage-uploader.py", "--associated-repos", "-"],
216-
],
217-
targets: ["weekly"],
218-
notify_groups:: ["truffle"],
219-
timelimit: "45:00",
220-
},
219+
linux_aarch64 + weekly + jdk + simple_language_maven_project_gate,
220+
darwin_amd64 + weekly + jdk + simple_language_maven_project_gate,
221+
darwin_aarch64 + weekly + jdk + simple_language_maven_project_gate,
221222

222-
# BENCHMARKS
223-
224-
bench_hw.x52 + common.labsjdkLatestCE + bench_common + {
225-
name: "bench-truffle-jmh-linux-amd64",
226-
notify_groups:: ["truffle_bench"],
227-
run: [
228-
["mx", "--kill-with-sigquit", "benchmark", "--results-file", "${BENCH_RESULTS_FILE_PATH}", "truffle:*", "--", "--", "com.oracle.truffle"],
229-
],
230-
targets+: ["weekly"],
231-
timelimit: "3:00:00",
232-
teardown: [
233-
["bench-uploader.py", "${BENCH_RESULTS_FILE_PATH}"],
234-
],
235-
},
223+
# GR-68277 currently unsupported
224+
# windows_amd64 + weekly + jdk + simple_language_maven_project_gate + winDevKit(jdk),
225+
]
226+
),
236227

237-
linux_amd64 + common.labsjdkLatestCE + bench_common + {
238-
name: "gate-truffle-test-benchmarks",
239-
run: [
240-
["mx", "benchmark", "truffle:*", "--", "--jvm", "server", "--jvm-config", "graal-core", "--", "com.oracle.truffle", "-f", "1", "-wi", "1", "-w", "1", "-i", "1", "-r", "1"],
241-
],
242-
targets: ["gate"],
243-
timelimit: "30:00",
244-
},
245-
],
228+
# SimpleTool Maven Integration Test
229+
forEach(graalvm_jdks, function(jdk)
230+
[
231+
linux_amd64 + tier3 + jdk + simple_tool_maven_project_gate,
232+
233+
linux_aarch64 + weekly + jdk + simple_tool_maven_project_gate,
234+
darwin_amd64 + weekly + jdk + simple_tool_maven_project_gate,
235+
darwin_aarch64 + weekly + jdk + simple_tool_maven_project_gate,
236+
237+
# GR-68277 currently unsupported
238+
# windows_amd64 + weekly + jdk + simple_tool_maven_project_gate + winDevKit(jdk),
239+
]
240+
),
241+
242+
# Truffle Coverage
243+
[linux_amd64 + weekly + jdk_21_oracle + truffle_coverage],
246244

245+
# Truffle Benchmarks
246+
[linux_amd64 + tier3 + jdk_latest_labs + jmh_benchmark_test],
247+
[bench_hw.x52 + bench + jdk_latest_labs + jmh_benchmark]
248+
]),
247249
builds: utils.add_defined_in(_builds, std.thisFile),
248250
}

0 commit comments

Comments
 (0)