From: Daan De Meyer Date: Thu, 14 May 2020 18:28:35 +0000 (+0200) Subject: Gracefully handle build script failures X-Git-Tag: v6~87^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F419%2Fhead;p=thirdparty%2Fmkosi.git Gracefully handle build script failures --- diff --git a/mkosi b/mkosi index e8d84638e..829db0815 100755 --- a/mkosi +++ b/mkosi @@ -3684,6 +3684,9 @@ def create_parser() -> ArgumentParserMkosi: class MkosiParseException(Exception): """Leads to sys.exit""" +class MkosiBuildScriptException(Exception): + """Leads to sys.exit""" + def parse_args(argv=None) -> Dict[str, CommandLineArguments]: """Load default values from files and parse command line arguments @@ -4722,7 +4725,11 @@ def run_build_script(args: CommandLineArguments, workspace: str, raw: Optional[B cmdline.append("--private-network") cmdline.append("/root/" + os.path.basename(args.build_script)) - run(cmdline, check=True) + + result = run(cmdline) + if result.returncode != 0: + raise MkosiBuildScriptException( + f"Build script returned non-zero exit code {result.returncode}.") def need_cache_images(args: CommandLineArguments) -> bool: @@ -5009,19 +5016,19 @@ def run_verb(args): def main() -> None: try: args = parse_args() - except MkosiParseException as exp: - die(str(exp)) - for job_name, a in args.items(): - # Change working directory if --directory is passed - if a.directory: - work_dir = a.directory - if os.path.isdir(work_dir): - os.chdir(work_dir) - else: - die("Error: %s is not a directory!" % work_dir) - with complete_step('Processing ' + job_name): - run_verb(a) + for job_name, a in args.items(): + # Change working directory if --directory is passed + if a.directory: + work_dir = a.directory + if os.path.isdir(work_dir): + os.chdir(work_dir) + else: + die("Error: %s is not a directory!" % work_dir) + with complete_step('Processing ' + job_name): + run_verb(a) + except (MkosiParseException, MkosiBuildScriptException) as exp: + die(str(exp)) if __name__ == "__main__":