from pathlib import Path import argparse,hashlib,json,subprocess,os ROOT=Path(__file__).resolve().parents[2];HERE=ROOT/'build/exposed-skin-audit' SOURCE=ROOT/'src/main/java/ar/com/companeros/identity/HostSkinAtlas.java' BASELINE=ROOT/'respaldos/piel-continua-20261007/Raps.jar' JAVABIN=Path('C:/Program Files/Eclipse Adoptium/jdk-17.0.20.8-hotspot/bin') def sha(path):return hashlib.sha256(path.read_bytes()).hexdigest() def main(): parser=argparse.ArgumentParser();parser.add_argument('--jar',type=Path);args=parser.parse_args() digest=sha(SOURCE);classes=HERE/'classes';classes.mkdir(parents=True,exist_ok=True) harness=Path(__file__).resolve().parent/'ExposedSkinAudit.java' subprocess.run([str(JAVABIN/'javac.exe'),'-encoding','UTF-8','-d',str(classes),str(SOURCE),str(harness)],check=True,capture_output=True,timeout=45) cp=str(classes) if args.jar is None else str(args.jar.resolve())+os.pathsep+str(classes) completed=subprocess.run([str(JAVABIN/'java.exe'),'-cp',cp,'ExposedSkinAudit',str(BASELINE),str(ROOT/'docs/skin-huesped-neon.png')],check=True,capture_output=True,text=True,encoding='utf-8',timeout=45) report=json.loads(completed.stdout);assert sha(SOURCE)==digest,'Compositor changed during validation' report.update(compositor_sha256=digest,baseline_sha256=sha(BASELINE),reference_skin_sha256=sha(ROOT/'docs/skin-huesped-neon.png'),harness_sha256=sha(harness),runtime='source' if args.jar is None else 'packaged_jar') if args.jar is not None:report.update(jar_sha256=sha(args.jar.resolve())) destination=HERE/('result.json' if args.jar is None else 'packaged-result.json');destination.write_text(json.dumps(report,indent=2)+'\n',encoding='utf-8') print(json.dumps(report,indent=2)) if __name__=='__main__':main()