import argparse import json import pathlib import tempfile from openpilot.common.basedir import BASEDIR from openpilot.system.hardware.tici.agnos import StreamingDecompressor, unsparsify, noop from openpilot.system.updated.casync.common import create_casync_from_file if __name__ == "__main__": parser = argparse.ArgumentParser(description="creates a casync release") parser.add_argument("output_dir", type=str, help="output directory for the channel") parser.add_argument("version", type=str, help="version of agnos this is") parser.add_argument("--manifest", type=str, help="json manifest to create agnos release from", \ default=str(pathlib.Path(BASEDIR) / "system/hardware/tici/agnos.json")) args = parser.parse_args() output_dir = pathlib.Path(args.output_dir) output_dir.mkdir(parents=True, exist_ok=True) manifest_file = pathlib.Path(args.manifest) with tempfile.NamedTemporaryFile() as entry_file: entry_path = pathlib.Path(entry_file.name) with open(manifest_file) as f: manifest = json.load(f) for entry in manifest: print(f"creating casync agnos build from {entry}") downloader = StreamingDecompressor(entry['url']) parse_func = unsparsify if entry['sparse'] else noop parsed_chunks = parse_func(downloader) size = entry["size"] cur = 0 with open(entry_path, "wb") as f: for chunk in parsed_chunks: f.write(chunk) create_casync_from_file(entry_path, output_dir, f"agnos-{args.version}-{entry['name']}")