debian-forge/osbuild
Tom Gundersen 65151e22ff osbuild.py: assign ids to stages rather than to pipelines
Compute a hash based on the content of a stage, together with the
hash of its parent stage.

The output of a pipeline is saved by the id of the last stage.

This is largely equivalent to the current logic, where it is the
pipeline that contains the id, but this means that the ids are
indepedent of how pipelines are split, the only thing that matters
is the sequence of stages, not whether or not they are in one or
several interdependent pipelines.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-07-09 12:41:26 +02:00

43 lines
1.5 KiB
Python
Executable file

#!/usr/bin/python3
import argparse
import json
import os
import osbuild
import subprocess
import sys
RESET = "\033[0m"
BOLD = "\033[1m"
RED = "\033[31m"
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Build operating system images")
parser.add_argument("pipeline_path", metavar="PIPELINE",
help="json file containing the pipeline that should be built")
parser.add_argument("--objects", metavar="DIRECTORY", type=os.path.abspath,
default=".osbuild/objects",
help="the directory where intermediary os trees are stored")
requiredNamed = parser.add_argument_group('required named arguments')
requiredNamed.add_argument("-o", "--output", dest="output_dir", metavar="DIRECTORY", type=os.path.abspath,
help="provide the empty DIRECTORY as output argument to the last stage", required=True)
args = parser.parse_args()
os.makedirs("/run/osbuild", exist_ok=True)
with open(args.pipeline_path) as f:
pipeline = json.load(f)
pipeline = osbuild.Pipeline(pipeline, args.objects)
try:
pipeline.run(args.output_dir, interactive=True)
except KeyboardInterrupt:
print()
print(f"{RESET}{BOLD}{RED}Aborted{RESET}")
sys.exit(130)
except osbuild.StageFailed as error:
print()
print(f"{RESET}{BOLD}{RED}{error.stage} failed with code {error.returncode}{RESET}")
sys.exit(1)