You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.8 KiB
60 lines
1.8 KiB
1 year ago
|
#!/usr/bin/env python3
|
||
1 year ago
|
import argparse
|
||
|
import json
|
||
1 year ago
|
import os
|
||
1 year ago
|
import pathlib
|
||
|
import tempfile
|
||
1 year ago
|
import time
|
||
1 year ago
|
from openpilot.common.basedir import BASEDIR
|
||
1 year ago
|
from openpilot.system.hardware.tici.agnos import StreamingDecompressor, unsparsify, noop, AGNOS_MANIFEST_FILE
|
||
1 year ago
|
from openpilot.system.updated.casync.common import create_casync_from_file
|
||
1 year ago
|
from release.package_casync_build import upload_casync_release
|
||
1 year ago
|
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
parser = argparse.ArgumentParser(description="creates a casync release")
|
||
|
parser.add_argument("--manifest", type=str, help="json manifest to create agnos release from", \
|
||
1 year ago
|
default=str(pathlib.Path(BASEDIR) / AGNOS_MANIFEST_FILE))
|
||
1 year ago
|
args = parser.parse_args()
|
||
|
|
||
1 year ago
|
manifest_file = pathlib.Path(args.manifest)
|
||
1 year ago
|
|
||
1 year ago
|
with tempfile.TemporaryDirectory() as temp_dir:
|
||
|
working_dir = pathlib.Path(temp_dir)
|
||
|
casync_dir = working_dir / "casync"
|
||
|
casync_dir.mkdir()
|
||
1 year ago
|
|
||
1 year ago
|
agnos_casync_dir = casync_dir / "agnos"
|
||
|
agnos_casync_dir.mkdir()
|
||
1 year ago
|
|
||
1 year ago
|
entry_path = working_dir / "entry"
|
||
1 year ago
|
|
||
|
with open(manifest_file) as f:
|
||
|
manifest = json.load(f)
|
||
|
|
||
|
for entry in manifest:
|
||
|
print(f"creating casync agnos build from {entry}")
|
||
1 year ago
|
start = time.monotonic()
|
||
1 year ago
|
downloader = StreamingDecompressor(entry['url'])
|
||
|
|
||
1 year ago
|
parse_func = unsparsify if entry['sparse'] else noop
|
||
|
|
||
|
parsed_chunks = parse_func(downloader)
|
||
1 year ago
|
|
||
|
size = entry["size"]
|
||
|
|
||
|
cur = 0
|
||
|
with open(entry_path, "wb") as f:
|
||
1 year ago
|
for chunk in parsed_chunks:
|
||
|
f.write(chunk)
|
||
1 year ago
|
|
||
1 year ago
|
print(f"downloaded in {time.monotonic() - start}")
|
||
|
|
||
|
start = time.monotonic()
|
||
1 year ago
|
agnos_filename = os.path.basename(entry["url"]).split(".")[0]
|
||
1 year ago
|
create_casync_from_file(entry_path, agnos_casync_dir, agnos_filename)
|
||
1 year ago
|
print(f"created casnc in {time.monotonic() - start}")
|
||
1 year ago
|
|
||
|
upload_casync_release(casync_dir)
|