mohan-bee/rc-link-breakaway-panel

A four-layer RC link panel combining an STM32/E28 2.4‑GHz transmitter with USB-RP2040 socket and an STM32/E28 receiver providing six buffered PWM servo outputs, regulated 3.3‑V power, headers, controls, and protection/decoupling.

Version
0.1.5
License
unset
Stars
0

tools/verify-release.py

import hashlib
import json
import zipfile
from pathlib import Path

root = Path(__file__).resolve().parents[1]
circuit = root / 'dist/index/circuit.json'
reports = [
    'native-checks.json', 'styling-audit.json', 'panel-audit.json',
    'tscircuit-independent-copper.json', 'release/copper-connectivity.json',
    'servo-power-audit.json', 'assembly-export-audit.json', 'cam-audit.json',
]
for name in reports:
    path = root / 'validation' / name
    assert path.stat().st_mtime >= circuit.stat().st_mtime, f'Stale audit: {name}'
    assert json.loads(path.read_text())['status'] == 'pass', name
assert all(circuit.stat().st_mtime >= p.stat().st_mtime for p in root.glob('circuits/**/*.tsx'))
assert circuit.stat().st_mtime >= (root / 'index.circuit.tsx').stat().st_mtime
with zipfile.ZipFile(root / 'manufacturing/raw-gerbers.zip') as audited, zipfile.ZipFile(root / 'manufacturing/RC-LINK-PANEL-Gerbers.zip') as packaged:
    assert len(packaged.namelist()) == 13
    assert all(packaged.read(name) == audited.read(name) for name in packaged.namelist())
artifacts = [
    'dist/index/circuit.json', 'manufacturing/RC-LINK-PANEL-Gerbers.zip',
    'manufacturing/BOM.csv', 'manufacturing/CPL.csv',
    'manufacturing/ORDER.md', 'manufacturing/POWER-AND-WIRING.md',
    *['validation/' + name for name in reports],
]
manifest = dict(
    status='pass', version=json.loads((root / 'package.json').read_text())['version'],
    sha256={name: hashlib.sha256((root / name).read_bytes()).hexdigest() for name in artifacts},
    scope='Fresh build and fabrication audits; factory acceptance and physical qualification remain required.',
)
(root / 'validation/release-manifest.json').write_text(json.dumps(manifest, indent=2) + '\n')
print('Release files and eight fresh audits verified for version ' + manifest['version'])