from ops import *
paths=['tools/provider_process_compare.py']
base=json.loads((HERE/'baseline.json').read_text())['containers']['contextra-analytics-1']['image']
hashes={p:hashlib.sha256((REPO/p).read_bytes()).hexdigest() for p in paths}
digest=hashlib.sha256(json.dumps(hashes,sort_keys=True).encode()).hexdigest()[:10]
snapshot=HERE/'image';snapshot.mkdir(mode=0o700)
for p in paths:
    t=snapshot/p;t.parent.mkdir(parents=True,exist_ok=True);shutil.copyfile(REPO/p,t);t.chmod(0o644)
(snapshot/'Dockerfile').write_text('FROM '+base+'\nCOPY tools/ /opt/contextra/tools/\n')
tag='contextra-analytics:pr13-process-compare-'+digest
save('build-intent.json',dict(base=base,hashes=hashes,tag=tag))
assert shutil.disk_usage('/').free>15*1024**3
with (HERE/'build.log').open('x') as log:
    p=subprocess.Popen(['docker','build','--pull=false','--network=none','--memory=2g','--cpu-period=100000','--cpu-quota=200000','-t',tag,str(snapshot)],env=dict(os.environ,DOCKER_BUILDKIT='0'),stdout=log,stderr=log)
    start=time.monotonic()
    while p.poll() is None:
        if shutil.disk_usage('/').free<15*1024**3 or time.monotonic()-start>150:
            p.terminate();p.wait(15);raise RuntimeError('BUILD_BOUND')
        time.sleep(1)
assert p.returncode==0
image=json.loads(cmd(['docker','image','inspect',tag]))[0]['Id']
save('image.json',dict(tag=tag,id=image));print(json.dumps(dict(tag=tag,id=image)),flush=True)
