This is a soft fork of joeblack2k/RetroSaveManager. We track upstream HEAD and publish a HEAD-tracked image to GHCR with any open intarweb→upstream PRs cherry-picked on top.
All forks we manage with the sync-upstream + from-source-build pattern live under the
intarwebGitHub org. See theghcr-fork-mirrorskill for the canonical recipe.
| Branch | Purpose | Source of truth |
|---|---|---|
main |
Upstream-clean tracking + ops overlay (canonical workflows + FORK_INFO.md) | upstream + us |
intarweb-dev |
Deploy track — main + cherry-pick of every open intarweb→upstream PR. Drives :latest. |
us |
feat/*, fix/* |
Individual patch branches we PR upstream | us |
| Property | Value |
|---|---|
| Upstream | joeblack2k/RetroSaveManager |
| Upstream branch tracked | main |
| Sync cadence | Hourly (gated by vars.SYNC_CADENCE_HOURS) + workflow_dispatch + fold-on-push re-trigger on PR-branch push |
| Sync mechanism | Hard-reset main to upstream/main, re-apply ops overlay, regen intarweb-dev by cherry-picking every open intarweb→upstream PR |
| Sync workflow | .github/workflows/sync-upstream.yml |
| Property | Value |
|---|---|
| Image | ghcr.io/intarweb/retrosavemanager |
:latest source |
Build-from-source on intarweb-dev (gated by vars.IS_SOURCE_BUILT == 'true') |
:sha-<short> |
Every build |
Tagged releases (v*, etc.) |
Mirror upstream's released tags via fork-publish.yml |
| Build workflow | .github/workflows/build-from-source.yml |
| Smoke gate | Fail-closed on cherry-pick conflict — prior :latest keeps serving (honest-fact #65). |
| PR | Title |
|---|---|
| #1 | fix(helper-auth): rebind app-password on stale device ID instead of returning 409 |
| #3 | feat(auth): AUTH_MODE enforcement + TRUST_REMOTE_USER_HEADER + path-prefix coverage |
| #4 | quarantine: dedupe by payload SHA256 (cap unbounded growth from client retries) |
| #5 | frontend: bump react-router 6.30.4 + ws 8.21.0 to clear npm audit moderates |
| #6 | fix(noise-classifier): stop rejecting 007/Bond games as numbered slot artifact |
| #11 | fix(validators): libretro/RetroDECK format compat (GBA signature + GB rtc) |
| #12 | fix(n64): don't 422 on Controller Pak images with blank note slots |
| #13 | fix(frontend): npm audit fix — resolve 3 moderate transitive vulns |
| #14 | fix(frontend): npm audit fix — resolve 3 moderate transitive vulns (react-router, ws) |
| #15 | ci(frontend): make npm-audit step advisory (continue-on-error) |
# docker-compose.yml
services:
retrosavemanager:
image: ghcr.io/intarweb/retrosavemanager:latestPin to a specific build for reproducibility:
image: ghcr.io/intarweb/retrosavemanager:sha-<short>Manually re-sync onto upstream:
gh workflow run "Sync from upstream + auto-regen intarweb-dev" --repo intarweb/RetroSaveManagerForce a fresh build of :latest without an upstream change:
gh workflow run "Build from source → GHCR" --repo intarweb/RetroSaveManager --ref intarweb-devAdd a new patch to intarweb-dev:
git checkout -b feat/my-thing upstream/main
# ...do work...
git push origin feat/my-thing
gh pr create --repo joeblack2k/RetroSaveManager --base main --head intarweb:feat/my-thing
# Next sync-upstream tick auto-cherry-picks the new PR onto intarweb-dev.