Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
68
tundra/tools/deploy-droidian.py
Normal file
68
tundra/tools/deploy-droidian.py
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: MPL-2.0
|
||||
"""Copy a checked trial into a new user directory, then open its Wayland window."""
|
||||
import argparse
|
||||
import hashlib
|
||||
import importlib.util
|
||||
import json
|
||||
from pathlib import Path
|
||||
import shlex
|
||||
import subprocess
|
||||
from datetime import datetime, timezone
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--control-socket', type=Path, required=True)
|
||||
parser.add_argument('--host', default='10.15.19.82')
|
||||
parser.add_argument('--user', default='droidian')
|
||||
args = parser.parse_args()
|
||||
spec = importlib.util.spec_from_file_location('collector', ROOT/'tools/collect-device-ssh.py')
|
||||
collector = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(collector)
|
||||
base = collector.ssh_base(args.control_socket.resolve(), args.host, args.user)
|
||||
subprocess.run(base[:-1]+['-O','check',base[-1]], check=True)
|
||||
def run(command, **kwargs):
|
||||
return subprocess.run(base+[shlex.join(command)], check=True, **kwargs)
|
||||
identity = run(['getprop','ro.product.device'], capture_output=True, text=True).stdout.strip()
|
||||
if identity != 'sargo':
|
||||
raise RuntimeError('Expected the previously inventoried sargo device')
|
||||
archive = ROOT/'out/droidian/vulpes-droidian.tar.gz'
|
||||
metadata = json.loads(archive.with_suffix('.json').read_text())
|
||||
with archive.open('rb') as stream:
|
||||
if hashlib.file_digest(stream,'sha256').hexdigest() != metadata['sha256']:
|
||||
raise RuntimeError('Local archive hash differs from its manifest')
|
||||
stamp = datetime.now(timezone.utc).strftime('%Y%m%dT%H%M%SZ')
|
||||
remote = run(['python3','-c',
|
||||
"from pathlib import Path; p=Path.home()/'vulpes-tundra-tests'/"+repr(stamp)+
|
||||
"; p.mkdir(parents=True,exist_ok=False); print(p)"],
|
||||
capture_output=True,text=True).stdout.strip()
|
||||
with archive.open('rb') as stream:
|
||||
run(['python3','-c',
|
||||
"import sys,shutil; f=open(sys.argv[1],'xb'); shutil.copyfileobj(sys.stdin.buffer,f); f.close()",
|
||||
remote+'/payload.tar.gz'], stdin=stream, timeout=300)
|
||||
code = '''import hashlib,json,pathlib,subprocess,sys,tarfile
|
||||
p=pathlib.Path(sys.argv[1]); archive=p/'payload.tar.gz'
|
||||
with archive.open('rb') as stream: digest=hashlib.file_digest(stream,'sha256').hexdigest()
|
||||
if digest != sys.argv[2]: raise RuntimeError('Transfer hash mismatch')
|
||||
product=p/'product'; product.mkdir()
|
||||
with tarfile.open(archive) as package: package.extractall(product,filter='data')
|
||||
log=(p/'session.log').open('w')
|
||||
proc=subprocess.Popen(['python3',str(product/'trial/session.py')],stdin=subprocess.DEVNULL,
|
||||
stdout=log,stderr=subprocess.STDOUT,start_new_session=True)
|
||||
print(json.dumps({'directory':str(p),'pid':proc.pid,'sha256':digest}))
|
||||
'''
|
||||
result = json.loads(run(['python3','-c',code,remote,metadata['sha256']],
|
||||
capture_output=True,text=True,timeout=900).stdout)
|
||||
result['engine'] = metadata['engine']
|
||||
result['createdAt'] = stamp
|
||||
path = ROOT/'logs/device/droidian-deployment.json'
|
||||
path.write_text(json.dumps(result,indent=2)+'\n')
|
||||
path.chmod(0o600)
|
||||
print(json.dumps(result,indent=2))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Loading…
Reference in a new issue