df2a183dbf
Plain overlay (33 items, same-source lineage, zero patch replay). Theme suites 35/35; full run 453 passed + 10 known Windows env fails (suspect-module rerun confirms identical failure set). Live: container 8.34.1-dev.1; hesupipe home leftover industrial-preset blocks cleared via studio draft+publish flow — home now renders pure trade-pro template (sf-section/Chinese blocks = 0). Co-Authored-By: Claude Code <noreply@anthropic.com>
29 lines
2.2 KiB
Python
29 lines
2.2 KiB
Python
"""V8.29 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=90);ap.add_argument('--group-size',type=int,default=3);ap.add_argument('--start',type=int,default=1);ap.add_argument('--end',type=int,default=999);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/v8341-regression';dest.mkdir(parents=True,exist_ok=True)
|
|
outcomes=[]
|
|
for index,files in enumerate(groups,1):
|
|
if not args.start <= index <= args.end:continue
|
|
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.34.1-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())
|