Skip to content

Latest commit

 

History

History
89 lines (69 loc) · 4.44 KB

File metadata and controls

89 lines (69 loc) · 4.44 KB

Fork tracking — intarweb/RetroSaveManager

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 intarweb GitHub org. See the ghcr-fork-mirror skill for the canonical recipe.

Branch model

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

Upstream sync

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

Build pipeline

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).

Local patches we carry on intarweb-dev (vs upstream/main)

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)

How to consume

# docker-compose.yml
services:
  retrosavemanager:
    image: ghcr.io/intarweb/retrosavemanager:latest

Pin to a specific build for reproducibility:

    image: ghcr.io/intarweb/retrosavemanager:sha-<short>

Maintenance recipes

Manually re-sync onto upstream:

gh workflow run "Sync from upstream + auto-regen intarweb-dev" --repo intarweb/RetroSaveManager

Force a fresh build of :latest without an upstream change:

gh workflow run "Build from source → GHCR" --repo intarweb/RetroSaveManager --ref intarweb-dev

Add 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.