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

50 lines
3.8 KiB
Python

"""Extend the immutable 41a5 QA tree; active application files are never edited."""
from pathlib import Path
from datetime import datetime, timezone
import json, shutil, subprocess, sys, re
R=Path(__file__).resolve().parent.parent;P=R/'storage/app/private/investmoz-v2/portal-audit'
old=json.loads((P/'onboarding-governance-plan.json').read_text(encoding='utf-8'))
base=Path(old['source']);assert base.parent==P and old['target']['port']==55441
if len(sys.argv)>1:
stamp=sys.argv[1];assert re.fullmatch(r'\d{8}_\d{6}',stamp)
S=P/('onboarding-qa-internal-'+stamp);assert S.is_dir() and S.parent==P
db='onboarding_internal_'+stamp+'_test'
xml=(base/'onboarding-phpunit.xml').read_text(encoding='utf-8')
xml=xml.replace(str(base).replace('\\','/'),str(S).replace('\\','/')).replace(str(base),str(S)).replace(old['target']['database'],db)
(S/'phpunit.xml').write_text(xml,encoding='utf-8')
plan={'at':datetime.now(timezone.utc).isoformat(),'source':str(S),'target':{'database':db,'host':'127.0.0.1','port':55441},'base_delta':'41a5ce778932','base_source':str(base),'active_application_changes':0,'active_database_writes':0}
(P/'internal-designation-plan.json').write_text(json.dumps(plan,indent=2),encoding='utf-8')
print(json.dumps(plan));raise SystemExit(0)
stamp=datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S')
S=P/('onboarding-qa-internal-'+stamp);S.mkdir()
for folder in ['app','config','database','routes','resources','tests','bootstrap','public/build']:
shutil.copytree(base/folder,S/folder)
for file in ['artisan','qa-autoload.php','.env','public/index.php','composer.json','composer.lock','package.json','package-lock.json','tsconfig.json','vite.config.ts','components.json']:
if (base/file).exists():
(S/file).parent.mkdir(parents=True,exist_ok=True);shutil.copyfile(base/file,S/file)
for folder in ['storage/app/private','storage/logs','storage/framework/cache/data','storage/framework/sessions','storage/framework/views','bootstrap/cache']:
(S/folder).mkdir(parents=True,exist_ok=True)
for name,target in [('vendor',R/'vendor'),('node_modules',R/'node_modules')]:
p=str(S/name).replace("'","''");t=str(target).replace("'","''")
subprocess.run(['powershell.exe','-NoProfile','-Command',f"New-Item -ItemType Junction -Path '{p}' -Target '{t}' | Out-Null"],check=True,capture_output=True)
db='onboarding_internal_'+stamp+'_test'
php='C:/laragon/bin/php/php-8.5.11-Win32-vs17-x64/php.exe'
create=S/'create-qa-database.php'
create.write_text('''<?php
$p=new PDO('pgsql:host=127.0.0.1;port=55441;dbname=postgres','postgres','',[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]);
if((int)$p->query('SELECT inet_server_port()')->fetchColumn()!==55441 || !preg_match('/^onboarding_internal_\\d{8}_\\d{6}_test$/D',$argv[1]))throw new RuntimeException('QA refused');
$p->exec('CREATE DATABASE "'.$argv[1].'" OWNER investmoz_test');
''',encoding='utf-8')
subprocess.run([php,str(create),db],cwd=S,capture_output=True,check=True)
env=(S/'.env').read_text(encoding='utf-8')
env=env.replace(old['target']['database'],db).replace('http://127.0.0.1:18117','http://127.0.0.1:18118').replace('investmoz_onboarding_qa','investmoz_internal_onboarding_qa')
(S/'.env').write_text(env,encoding='utf-8')
xml=(base/'onboarding-phpunit.xml').read_text(encoding='utf-8')
xml=xml.replace(str(base).replace('\\','/'),str(S).replace('\\','/')).replace(str(base),str(S)).replace(old['target']['database'],db)
(S/'phpunit.xml').write_text(xml,encoding='utf-8')
plan={'at':datetime.now(timezone.utc).isoformat(),'source':str(S),'target':{'database':db,'host':'127.0.0.1','port':55441},
'base_delta':'41a5ce778932','base_source':str(base),'active_application_changes':0,'active_database_writes':0}
(P/'internal-designation-plan.json').write_text(json.dumps(plan,indent=2),encoding='utf-8')
print(json.dumps(plan))