Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 28 additions & 2 deletions build-driver/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,22 @@ def usage(program_name):
print(message.strip(), file=sys.stderr)


class DelegatedProgramFailed(Exception):
program_name: str
returncode: str
cmd: list[str]

def __init__(self, program_name, returncode, cmd):
self.program_name = program_name
self.returncode = returncode
self.cmd = cmd

def message(self):
return f"{self.program_name} failed with exit code {self.returncode}, command was: " + (
" ".join(['"' + arg + '"' for arg in self.cmd])
)


def run_x(args, check: bool = True, **kwargs):
# str-ify Paths, not necessary, but for readability in logs.
args = [arg if isinstance(arg, str) else str(arg) for arg in args]
Expand Down Expand Up @@ -135,7 +151,10 @@ def run_grml_live(
if old_iso_path:
grml_live_cmd += ["-b", "-e", old_iso_path]
with ci_section("Building with grml-live", collapsed=False):
run_x(grml_live_cmd, env=env)
try:
run_x(grml_live_cmd, env=env)
except subprocess.CalledProcessError as except_inst:
raise DelegatedProgramFailed("grml-live", except_inst.returncode, except_inst.cmd)


def upload_daily(job_name: str, build_dir: Path, job_timestamp: datetime.datetime):
Expand Down Expand Up @@ -349,7 +368,7 @@ def download_old_sources(tmp_dir: Path, old_iso_url: str) -> Path | None:
return path


def main(program_name: str, argv: list[str]) -> int:
def _main(program_name: str, argv: list[str]) -> int:
print(f"I: {program_name} started with {argv=}")
try:
grml_live_path = Path(argv.pop(0))
Expand Down Expand Up @@ -522,5 +541,12 @@ def main(program_name: str, argv: list[str]) -> int:
return 0


def main(program_name: str, argv: list[str]) -> int:
try:
return _main(program_name, argv)
except DelegatedProgramFailed as except_inst:
return bail(except_inst.message())


if __name__ == "__main__":
sys.exit(main(sys.argv.pop(0), sys.argv))
Loading