8884e100f9
Overlay 190 upstream items (V8.22→8.31) preserving trade-pro theme, registry tests, and design docs. Re-applied full patch set on identical anchors (discovery/env_for/blocks.css/type-mapping/locale-override/ theme_color/frontend entries/test_theme_pro_v3 mods) plus compose pins. Verified: theme suites 35/35; dual-baseline full run 415 passed vs pristine 386+29 ours, FAILED-set diff EMPTY (same 10 Windows env fails). Live: container 8.31.1-dev.1 healthy, hesupipe 192 entries intact, trade-pro build 203 pages 0 errors. Co-Authored-By: Claude Code <noreply@anthropic.com>
28 lines
2.0 KiB
Python
28 lines
2.0 KiB
Python
"""V8.24 isolated regression with per-batch deadline and raw logs."""
|
|
import argparse,datetime,json,subprocess,sys,time
|
|
from pathlib import Path
|
|
ROOT=Path(__file__).resolve().parents[1]
|
|
def main():
|
|
ap=argparse.ArgumentParser();ap.add_argument('--timeout',type=int,default=50);ap.add_argument('--group-size',type=int,default=3);args=ap.parse_args()
|
|
all_files=sorted((ROOT/'tests').glob('test_*.py'))
|
|
groups=[all_files[i:i+args.group_size] for i in range(0,len(all_files),args.group_size)]
|
|
dest=ROOT/'reports/v824-regression';dest.mkdir(parents=True,exist_ok=True)
|
|
outcomes=[]
|
|
for index,files in enumerate(groups,1):
|
|
start=time.monotonic();command=[sys.executable,'-m','pytest','-q',*[str(f.relative_to(ROOT)) for f in files]]
|
|
try:
|
|
proc=subprocess.run(command,cwd=ROOT,capture_output=True,text=True,timeout=args.timeout)
|
|
code=proc.returncode;output=proc.stdout+'\n'+proc.stderr;status='passed' if code==0 else 'failed'
|
|
except subprocess.TimeoutExpired as e:
|
|
output=(e.stdout or b'').decode(errors='replace') if isinstance(e.stdout,bytes) else (e.stdout or '')
|
|
output+='\nTIMEOUT exceeded';status='timeout'
|
|
elapsed=round(time.monotonic()-start,2)
|
|
(dest/f'batch-{index:02}.log').write_text(output,encoding='utf-8')
|
|
outcomes.append({'batch':index,'files':[f.name for f in files],'status':status,'seconds':elapsed,'summary':output[-350:]})
|
|
print(f'[{index:02}/{len(groups)}] {status.upper()} {elapsed:.1f}s: '+', '.join(f.name for f in files),flush=True)
|
|
result={'version':'8.25.0-dev.1','generated_utc':datetime.datetime.now(datetime.timezone.utc).isoformat(),'groups':outcomes,'all_passed':all(x['status']=='passed' for x in outcomes)}
|
|
(dest/'result.json').write_text(json.dumps(result,ensure_ascii=False,indent=2),encoding='utf-8')
|
|
print('RESULT:',result['all_passed'],sum(x['status']=='passed' for x in outcomes),len(groups),flush=True)
|
|
return 0 if result['all_passed'] else 1
|
|
if __name__=='__main__':raise SystemExit(main())
|