@@ -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