Files
2026-09-21 22:29:23 +08:00

31 lines
1.3 KiB
Python
Executable File

#!/usr/bin/env python3
"""Compare complete independently restored builds; retain mismatches as evidence."""
import argparse
import json
from pathlib import Path
import sys
from release_artifacts import compare
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('first', type=Path)
parser.add_argument('second', type=Path)
parser.add_argument('--report', required=True, type=Path)
args = parser.parse_args()
try:
if args.first.resolve() == args.second.resolve():
raise ValueError('Specify two independently restored build trees')
if args.report.exists() or args.report.is_symlink():
raise ValueError('Report output already exists')
report = compare(args.first, args.second)
with args.report.open('x') as stream:
stream.write(json.dumps(report, indent=2) + '\n')
for item in report['artifacts']:
print(('PASS' if item['identical'] else 'MISMATCH') + ': ' + item['name'])
if report['status'] != 'passed':
raise ValueError(f'Builds differ; inspect {args.report}')
print(f'PASS: all {len(report["artifacts"])} artifacts are byte-identical: {args.report}')
print('NOTE: this comparison establishes matching bytes; retain each isolated build log as execution evidence')
except (OSError, ValueError, KeyError) as error:
sys.exit(f'ERROR: {error}')