fix(cores): pin every remaining core to a verified upstream commit - #18
Merged
Conversation
The mgba and fceumm breakages were symptoms: every core is a --depth 1 clone of a third-party HEAD, patched locally, so any upstream change to a patched file breaks the build with no commit here. Two had already rotted; the rest were one push away from doing the same. Pin the remaining 24 to the commit each was verified against. For each core: fetched upstream HEAD, then ran git apply --check with both the tg5040 and tg5050 patches, which differ per platform. All 24 apply cleanly there, so this pins what already builds today rather than moving anything - it cannot make the current build worse, only stop it changing underneath us. Builds are now reproducible: the same nexterUI commit produces the same cores regardless of when it is built. The cost is that cores no longer drift forward on their own, so pins want bumping deliberately - see #16 for the proposed automation.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Makes builds reproducible. Completes the "pin every remaining core" item in #16.
Why
mgba and fceumm weren't unlucky, they were first. Every core is a
--depth 1clone of third-party HEAD with a local patch applied, so any upstream edit to a patched file breaks the build with no commit here. Two had rotted already; the other 24 were one push away from the same.What I did
For each of the 24 unpinned cores: fetched upstream HEAD, then ran
git apply --checkwith both the tg5040 and tg5050 patches, which differ per platform.All 24 apply cleanly at the commits pinned here. So this pins what already builds today — it moves nothing. It cannot make the current build worse than an unpinned build; it only stops it changing underneath us.
The 24 cores and their verified commits
a2600a5200a7800bluemsxc128c64fake-08gambattegearcolecogpsphandylibretro-cap32libretro-uaemednafen_pce_fastmednafen_supafaustmednafen_vbpcsx_rearmedpetplus4prboomracesnes9xsnes9x2005_plusvicThe five vice-libretro cores (
c64,c128,vic,pet,plus4) share a repo and therefore a commit. Exact SHAs are in the diff.Both makefiles still parse (
make --dry-run), and every core carrying a patch now has a pin — checked programmatically, no gaps.Limits of this verification
I confirmed the patches apply, not that the cores compile. Those are different things and only CI can settle the second. That said, the risk is bounded: these are the same commits an unpinned build would fetch right now, so a compile failure here would be a compile failure on
maintoday too.The trade
Cores stop drifting forward on their own. That's the point — but stale is only acceptable if bumping is easy, so #16 carries a proposed scheduled workflow that tries bumping each pin, builds what applies, and opens a PR with the ones that went green. This PR is essentially that loop run once by hand.
Cadence matters unevenly: FBNeo most (arcade romset compatibility is version-coupled and user-visible),
pcsx_rearmednext (active ARM performance work), and the mature 8/16-bit cores can sit for a year without anyone noticing.