from ops import *
assert not (HERE/'build-intent.json').exists()
base=inspect('contextra-analytics-1')['Image']
assert base=='sha256:639a3ccf27c1863f7621792ad10cbafac4b3f8de364d4f4378caecc694d64358'
paths=['app/single_decode_pipeline.py','app/multi_provider_results.py']
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-source';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 app/ /opt/contextra/app/\n')
tag='contextra-analytics:pr13-timing-'+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_RESOURCE_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)))
