#!/usr/bin/env python3
import argparse
import json
import pathlib
import tempfile
import time
from openpilot . common . basedir import BASEDIR
from openpilot . system . hardware . tici . agnos import StreamingDecompressor , unsparsify , noop , AGNOS_MANIFEST_FILE
from openpilot . system . updated . casync . common import create_casync_from_file
from openpilot . system . version import get_agnos_version
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 ( " working_dir " , type = str , help = " working directory " )
parser . add_argument ( " --version " , type = str , help = " version of agnos this is " , default = get_agnos_version ( ) )
parser . add_argument ( " --manifest " , type = str , help = " json manifest to create agnos release from " , \
default = str ( pathlib . Path ( BASEDIR ) / AGNOS_MANIFEST_FILE ) )
args = parser . parse_args ( )
output_dir = pathlib . Path ( args . output_dir )
output_dir . mkdir ( parents = True , exist_ok = True )
working_dir = pathlib . Path ( args . working_dir )
working_dir . mkdir ( parents = True , exist_ok = True )
manifest_file = pathlib . Path ( args . manifest )
with tempfile . NamedTemporaryFile ( dir = str ( working_dir ) ) 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 } " )
start = time . monotonic ( )
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 )
print ( f " downloaded in { time . monotonic ( ) - start } " )
start = time . monotonic ( )
create_casync_from_file ( entry_path , output_dir , f " agnos- { args . version } - { entry [ ' name ' ] } " )
print ( f " created casnc in { time . monotonic ( ) - start } " )