- Move the R2 sync out of release.yml into a standalone sync-r2.yml
triggered on release promotion (release: released) or manual dispatch,
so the mirror follows the same gate as GitHub's /releases/latest
- Hard-fail on the official repo when R2 secrets are missing (a silently
stale mirror strands updater users); forks may still skip
- Only the tag that is currently releases/latest may rewrite the root
manifests or prune old versions; backfills of older tags restore
versioned files only
- Resolve releases/latest with retries and fail instead of guessing on
API errors; re-verify right before publishing the root manifests
- Add scripts/rewrite-updater-manifest.mjs to point latest.json download
URLs at the mirror (minisign signatures cover file contents and stay
valid); upload the macOS .tar.gz updater payload alongside installers
- Put https://dl.ccswitch.io/latest.json first in the updater endpoints
with GitHub as connectivity fallback