23 lines
2.0 KiB
Python
23 lines
2.0 KiB
Python
"""Production compilation in the isolated source; preserve every active build asset."""
|
|
from pathlib import Path
|
|
from datetime import datetime,timezone
|
|
import hashlib,json,subprocess,os,sys
|
|
root=Path(__file__).resolve().parent.parent
|
|
private=root/'storage/app/private/investmoz-v2/portal-audit'
|
|
plan=json.loads((private/'portal-stability-latest.json').read_text(encoding='utf-8-sig'))
|
|
source=Path(plan['source']);assert source.is_relative_to(private)
|
|
sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
|
|
before={p.relative_to(root/'public/build').as_posix():sha(p) for p in (root/'public/build').rglob('*') if p.is_file()}
|
|
assert 'portal-stability-runtime.php' in (source/'artisan').read_text(encoding='utf-8')
|
|
env=dict(os.environ);env['PATH']='C:/laragon/bin/php/php-8.5.11-Win32-vs17-x64'+os.pathsep+env['PATH'];env['STABILITY_QA_MODE']='consumers';env.pop('INVESTMOZ_QA_BUILD',None)
|
|
prefix='workflow-upgrade-production-build-20261011' if '--upgrade' in sys.argv else ('functional-scope-production-build-20261011' if '--scope' in sys.argv else 'functional-production-build-20261011')
|
|
log=private/(prefix+'.log')
|
|
with log.open('w',encoding='utf-8') as stream:
|
|
result=subprocess.run(['npm.cmd','run','build'],cwd=source,env=env,stdout=stream,stderr=subprocess.STDOUT,shell=True)
|
|
assert result.returncode==0,'QA production build failed; diagnostic retained privately'
|
|
assert before=={p.relative_to(root/'public/build').as_posix():sha(p) for p in (root/'public/build').rglob('*') if p.is_file()}
|
|
assets={p.relative_to(source/'public/build').as_posix():sha(p) for p in (source/'public/build').rglob('*') if p.is_file()}
|
|
proof={'at':datetime.now(timezone.utc).isoformat(),'result':'passed','mode':'production','assets':assets,'manifest_sha256':assets['manifest.json'],'active_assets_preserved':True,'active_writes':0}
|
|
(private/(prefix+'.json')).write_text(json.dumps(proof,indent=2),encoding='utf-8')
|
|
print(json.dumps({'result':'passed','manifest_sha256':proof['manifest_sha256'],'assets':len(assets),'active_assets_preserved':True}))
|