Files
Investidor-V2/tools/portal-functional-build.py
nala 287e991486
tests / ci (push) Waiting to run
oportunidades 7
2026-10-13 11:40:29 +02:00

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}))