from ops import *
paths=['app/pipeline_diagnostics.py','app/analysis_metrics.py','app/native_metadata.py','app/multi_pipeline.py',
       'app/artifact_diagnostics.py','app/artifact_media.py','app/event_artifact_service.py']
bases={'old':'sha256:1ec9a50b7d2c25b58c171022661134d4d4a3033f963d3f8599516a2485557f3e',
       'current':json.loads((HERE/'baseline.json').read_text())['containers']['contextra-analytics-1']['image']}
for mode,base in bases.items():
    selected=paths+(['app/single_decode_pipeline.py'] if mode=='current' else [])
    hashes={p:hashlib.sha256((REPO/p).read_bytes()).hexdigest() for p in selected}
    digest=hashlib.sha256(json.dumps(hashes,sort_keys=True).encode()).hexdigest()[:10]
    snapshot=HERE/('image-'+mode);snapshot.mkdir(mode=0o700)
    for p in selected:
        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-ab-'+mode+'-'+digest
    save('build-'+mode+'-intent.json',dict(base=base,hashes=hashes,tag=tag))
    assert shutil.disk_usage('/').free>15*1024**3
    with (HERE/('build-'+mode+'.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-'+mode+'.json',dict(tag=tag,id=image));print(json.dumps(dict(mode=mode,tag=tag,id=image)),flush=True)
