upgrade: adopt V8.31.1 (theme 1.3/1.4 redesigns, editor deep-canvas, guided launch, component library)
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>
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
"""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=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/v829-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.31.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())
|
||||
Reference in New Issue
Block a user