ci: upload each run's screenshots + meta.json to R2 (runs/pcbjam/<run-id>/)

Durable per-run screenshot store for the morelli review app
(github.com/PCBJam/morelli): after the report step, CI uploads the renders
and a meta.json index (identity, branch/commit, per-shot sha256+dims,
embedded compare summary) to runs/pcbjam/<GITHUB_RUN_ID>/ — 30-day R2
lifecycle; GH artifacts remain the debugging archive. meta.json is written
last as the upload-complete marker. Uses a new optional WRITE keypair
(CI_SCREENSHOTS_S3_WRITE_*); without it the step no-ops, so secretless
callers stay green. R2Store gains putKey() for the non-CAS run keys.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Istvan Matejcsok 2026-08-19 11:45:40 +02:00
commit 4196958c10
4 changed files with 192 additions and 0 deletions

View file

@ -24,6 +24,7 @@
"screenshots:changelog": "tsx tools/screenshots/changelog.ts",
"screenshots:manifest": "tsx tools/screenshots/gen-manifest.ts",
"screenshots:fetch": "tsx tools/screenshots/r2-sync.ts --pull",
"screenshots:upload-run": "tsx tools/screenshots/upload-run.ts",
"screenshots:push": "tsx tools/screenshots/r2-sync.ts --push",
"3d:compare": "tsx tools/screenshots/compare-dirs.ts",
"3d:check": "tsx tools/screenshots/compare-dirs.ts --old 3d-regression/baseline --new 3d-regression/output/native --out 3d-regression/output/diff/native-self --floors 3d-regression/floors.json --level native-self --label 3d-native --fail-on-change",