Skip to content

Commit 063f511

Browse files
committed
For now, only hard fail graalos gate on master where we can fix it
1 parent 64b8ba9 commit 063f511

2 files changed

Lines changed: 38 additions & 23 deletions

File tree

mx.graalpython/mx_graalpython.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import os
3535
import pathlib
3636
import re
37+
import signal
3738
import shlex
3839
import shutil
3940
import subprocess
@@ -1989,7 +1990,17 @@ def graalpython_gate_runner(_, tasks):
19891990

19901991
with Task('GraalPython GraalOS standalone build on SVM', tasks, tags=[GraalPythonTags.svm_graalos_standalone_build]) as task:
19911992
if task:
1992-
mx_graalpython_graalos.graalpy_graalos_standalone_build_and_test(report=report())
1993+
branch = _normalize_branch_name(os.environ.get("TO_BRANCH") or SUITE.vc.active_branch(SUITE.dir, abortOnError=False) or 'master')
1994+
if branch == 'master':
1995+
on_fail = mx.abort
1996+
else:
1997+
def on_fail(codeOrMessage, context=None, killsig=signal.SIGTERM):
1998+
mx.warn(codeOrMessage)
1999+
assert False, "GraalOS build and test failed"
2000+
try:
2001+
mx_graalpython_graalos.graalpy_graalos_standalone_build_and_test(report=report(), on_fail=on_fail)
2002+
except AssertionError:
2003+
pass
19932004

19942005
with Task('GraalPython tests on SVM', tasks, tags=[GraalPythonTags.svmunit]) as task:
19952006
if task:

mx.graalpython/mx_graalpython_graalos.py

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,17 @@ def run(*args, **kwargs):
6464
return run(*args, **kwargs)
6565

6666

67-
def _download_graalos_standalone_artifact(source, target):
67+
def _download_graalos_standalone_artifact(source, target, on_fail=mx.abort):
6868
source = mx_urlrewrites.rewriteurl(source)
6969
if "artifact/latest" in source:
7070
artifact_base_url = os.environ.get("GRAALPY_GRAALOS_ARTIFACT_BASE_URL")
7171
if not artifact_base_url:
72-
mx.abort("GRAALPY_GRAALOS_ARTIFACT_BASE_URL must be set to resolve GraalOS artifact metadata")
72+
on_fail("GRAALPY_GRAALOS_ARTIFACT_BASE_URL must be set to resolve GraalOS artifact metadata")
7373
with urllib.request.urlopen(urllib.request.Request(source, headers={"Accept": "application/json"})) as response:
7474
metadata = json.loads(response.read().decode("utf-8"))
7575
artifact_name = metadata.get("artifactName")
7676
if not artifact_name:
77-
mx.abort(f"GraalOS artifact metadata does not contain artifactName: {source}")
77+
on_fail(f"GraalOS artifact metadata does not contain artifactName: {source}")
7878
if script := os.environ.get("ARTIFACT_DOWNLOAD_SCRIPT"):
7979
run([sys.executable, script, artifact_name, target])
8080
return
@@ -85,7 +85,7 @@ def _download_graalos_standalone_artifact(source, target):
8585
shutil.copyfileobj(response, fp)
8686

8787

88-
def _extract_tarball(tarball, destination, strip_components=0):
88+
def _extract_tarball(tarball, destination, strip_components=0, on_fail=mx.abort):
8989
if os.path.isdir(destination):
9090
shutil.rmtree(destination)
9191
mx_util.ensure_dir_exists(destination)
@@ -102,24 +102,24 @@ def _extract_tarball(tarball, destination, strip_components=0):
102102
if not stripped_name:
103103
continue
104104
if not mx.Extractor._is_sane_name(stripped_name): # pylint: disable=protected-access
105-
mx.abort(f"Refusing to extract unsafe archive entry after stripping: {original_name}")
105+
on_fail(f"Refusing to extract unsafe archive entry after stripping: {original_name}")
106106
member.name = stripped_name
107107
archive.extract(member, destination)
108108
member.name = original_name
109109
os.utime(destination, None)
110110

111111

112-
def _find_graalos_runtime_home(runtime_root):
112+
def _find_graalos_runtime_home(runtime_root, on_fail=mx.abort):
113113
default = os.path.join(runtime_root, "opt", "graalos")
114114
if os.path.isdir(default):
115115
return default
116116
for root, dirs, _ in os.walk(runtime_root):
117117
if os.path.basename(root) == "opt" and "graalos" in dirs:
118118
return os.path.join(root, "graalos")
119-
mx.abort(f"Could not find opt/graalos in extracted GraalOS runtime artifact: {runtime_root}")
119+
on_fail(f"Could not find opt/graalos in extracted GraalOS runtime artifact: {runtime_root}")
120120

121121

122-
def _ensure_graalos_runtime_inputs(runtime_home):
122+
def _ensure_graalos_runtime_inputs(runtime_home, on_fail=mx.abort):
123123
graalhost_dir = os.path.join(runtime_home, "graalhost")
124124
required = [
125125
os.path.join(graalhost_dir, "graalhost"),
@@ -134,10 +134,10 @@ def _ensure_graalos_runtime_inputs(runtime_home):
134134
required.append(libbinsweep)
135135
missing = [path for path in required if not os.path.exists(path)]
136136
if missing:
137-
mx.abort("Extracted GraalOS runtime artifact is missing required files:\n" + "\n".join(missing))
137+
on_fail("Extracted GraalOS runtime artifact is missing required files:\n" + "\n".join(missing))
138138

139139

140-
def graalpy_graalos_standalone_build_and_test(report=None):
140+
def graalpy_graalos_standalone_build_and_test(report=None, on_fail=mx.abort):
141141
del report # This gate executes an in-sandbox smoke test directly instead of using the source-tree test runner.
142142
toolchain_url = os.environ.get("GRAALPY_GRAALOS_TOOLCHAIN_URL")
143143
runtime_url = os.environ.get("GRAALPY_GRAALOS_RUNTIME_URL")
@@ -155,18 +155,18 @@ def graalpy_graalos_standalone_build_and_test(report=None):
155155
graalvm_home = os.path.join(work_dir, "graalvm")
156156
runtime_root = os.path.join(work_dir, "runtime")
157157

158-
_download_graalos_standalone_artifact(toolchain_url, graalvm_tarball)
159-
_extract_tarball(graalvm_tarball, graalvm_home, strip_components=1)
158+
_download_graalos_standalone_artifact(toolchain_url, graalvm_tarball, on_fail=on_fail)
159+
_extract_tarball(graalvm_tarball, graalvm_home, strip_components=1, on_fail=on_fail)
160160
musl_toolchain = os.path.join(graalvm_home, "lib", "toolchains", "musl-swcfi")
161161
if not os.path.exists(os.path.join(graalvm_home, "bin", mx.exe_suffix("java"))):
162-
mx.abort(f"Extracted GraalOS toolchain artifact does not contain bin/java: {graalvm_home}")
162+
on_fail(f"Extracted GraalOS toolchain artifact does not contain bin/java: {graalvm_home}")
163163
if not os.path.isdir(musl_toolchain):
164-
mx.abort(f"Extracted GraalOS toolchain artifact does not contain musl-swcfi toolchain: {musl_toolchain}")
164+
on_fail(f"Extracted GraalOS toolchain artifact does not contain musl-swcfi toolchain: {musl_toolchain}")
165165

166-
_download_graalos_standalone_artifact(runtime_url, runtime_tarball)
167-
_extract_tarball(runtime_tarball, runtime_root)
168-
graalos_runtime_home = _find_graalos_runtime_home(runtime_root)
169-
_ensure_graalos_runtime_inputs(graalos_runtime_home)
166+
_download_graalos_standalone_artifact(runtime_url, runtime_tarball, on_fail=on_fail)
167+
_extract_tarball(runtime_tarball, runtime_root, on_fail=on_fail)
168+
graalos_runtime_home = _find_graalos_runtime_home(runtime_root, on_fail=on_fail)
169+
_ensure_graalos_runtime_inputs(graalos_runtime_home, on_fail=on_fail)
170170

171171
from mx_graalpython import extend_os_env, run_mx, _graalpy_launcher
172172
env = extend_os_env(
@@ -176,16 +176,18 @@ def graalpy_graalos_standalone_build_and_test(report=None):
176176
GRAALOS_RUNTIME_HOME=graalos_runtime_home,
177177
NATIVE_IMAGE_EXPERIMENTAL_OPTIONS_ARE_FATAL="false",
178178
)
179-
run_mx([
179+
result = run_mx([
180180
"--multitarget=linux-amd64-musl-swcfi",
181181
"build",
182182
"--target", "GRAALPY_NATIVE_GRAALOS_STANDALONE",
183-
], env=env)
183+
], env=env, nonZeroIsFatal=(on_fail == mx.abort))
184+
if result != 0:
185+
on_fail("Building GRAALPY_NATIVE_GRAALOS_STANDALONE failed")
184186

185187
standalone_home = os.path.join(SUITE.dir, "mxbuild", "linux-amd64", "GRAALPY_NATIVE_GRAALOS_STANDALONE")
186188
launcher = os.path.join(standalone_home, "bin", _graalpy_launcher())
187189
if not os.path.exists(launcher):
188-
mx.abort(f"GRAALPY_NATIVE_GRAALOS_STANDALONE launcher was not built: {launcher}")
190+
on_fail(f"GRAALPY_NATIVE_GRAALOS_STANDALONE launcher was not built: {launcher}")
189191

190192
test_path = os.path.join(
191193
SUITE.dir,
@@ -205,4 +207,6 @@ def graalpy_graalos_standalone_build_and_test(report=None):
205207
"""
206208
smoke_test_arg = base64.b64encode(smoke_test.encode("utf-8")).decode("ascii")
207209
smoke_test_command = f"import base64; exec(base64.b64decode({smoke_test_arg!r}).decode('utf-8'))"
208-
run([launcher, "-c", smoke_test_command], env=env)
210+
result = run([launcher, "-c", smoke_test_command], env=env, nonZeroIsFatal=(on_fail == mx.abort))
211+
if result != 0:
212+
on_fail("Testing GraalOS standalone failed")

0 commit comments

Comments
 (0)