feat: profile RetroPie's AdvanceMAME tip build

RetroPie clones amadvance/advancemame at the branch tip with no
revision (scriptmodules/emulators/advmame.sh:16, 39-41 at 427e762), so
advmame is profiled at 96237a5 (v5.0-484), built_by retropie and held
by pin_follows. RetroPie's advmame now resolves to it, advancemame
keeping EmuELEC, AmberELEC and Recalbox.

The MAME workflow at 96237a5: 28 BIOS roots registered in
mame/mamedriv.c (macs2bios is not), the eight ZN roots under their MAME
names (coh1000c, coh3002c, coh1002m, coh1000t, coh1002e, coh1001l,
coh1000w, coh1000a), modern Neo Geo members, coh1000w's CAT702, and 15
device archives that BIOS_LOAD reads first (atarisy1, coh3002t, m1comm,
midssio, namcoc65/68/69/71/74, s_smp, saa5050, sente6vb, sns_dsp1bleg,
t5182, v4bios). bctvidbs declares no ROM of its own. Three laserdisc
player programs are opened by name outside any ROM list, with a fatal
length, CRC32 and SHA1 check: pr8210, 22vp931 and simutrek.

pin_build accepts pin_follows in the schema, and bump_commit advances a
built_by profile that follows the tip.

Manifests: RetroPie gains 24 archives at its BIOS root, the ZN ones
under their new names, and nss.zip moves to the copy holding
nss-c.dat and nss-ic14.02. The other platforms do not change.
verify --all keeps its counts. profile_sync: 0 to review.
This commit is contained in:
Abdessamad Derraz committed 2026-11-11 13:27:00 +01:00
1 parent 157d60691d
commit 7ff8f17808
6 files changed
+1311 -6

No files matched your search

-1
View File
@@ -44,7 +44,6 @@ mode: standalone
cores:
- advancemame
- advmame
- "AdvanceMame"
systems:
File diff suppressed because it is too large. Load diff
+3 -2
View File
@@ -11,7 +11,7 @@
],
"allOf": [
{
"comment": "A build reference documents why a pin is held, or the build config_reads are read at: it never stands without the pin_frozen or the config_reads that say so.",
"comment": "A build reference documents why a pin is held or follows the branch tip, or the build config_reads are read at: it never stands without the pin_frozen, pin_follows or config_reads that say so.",
"if": {
"required": [
"pin_build"
@@ -20,6 +20,7 @@
"then": {
"anyOf": [
{"required": ["pin_frozen"]},
{"required": ["pin_follows"]},
{"required": ["config_reads"]}
]
}
@@ -1142,7 +1143,7 @@
"pin_build": {
"type": "array",
"minItems": 1,
"description": "The build file each platform that ships a pin_frozen build, or the build a config_reads entry is read at, reads its revision from, so check_freshness can read it again where the platform's YAML now stands and say when the platform builds another revision.",
"description": "The build file each platform that ships a pin_frozen or pin_follows build, or the build a config_reads entry is read at, reads its revision from, so check_freshness can read it again where the platform's YAML now stands and say when the platform builds another revision.",
"items": {
"type": "object",
"additionalProperties": false,
+3 -2
View File
@@ -3682,10 +3682,11 @@ def bump_commit(
if pending_recale(report, accept_changed, text):
return False
document = yaml.safe_load(text)
if document.get("built_by"):
if document.get("built_by") and not document.get("pin_follows"):
# The pin is the commit a platform builds (recalbox gsplus.mk, the
# mame0258 its package fetches), not a point on a moving branch:
# HEAD is a build nobody ships under this name.
# HEAD is a build nobody ships under this name. A build of the
# branch tip (RetroPie's advmame) is HEAD, and follows it.
print(
f"{path.stem}: pinned to the build {', '.join(document['built_by'])} "
"ships, advanced by hand",
+6
View File
@@ -145,7 +145,13 @@ class EveryBuildReferenceNamesThePin(unittest.TestCase):
else {str(versions)} if versions else set()
)
source = str(profile.get("source") or "").rstrip("/").removesuffix(".git")
def names_it(value: str) -> bool:
if profile.get("pin_follows"):
# A build of the branch tip names the repository it
# clones, at no revision: RetroPie's advmame.
return value.split()[-1].rstrip("/").removesuffix(".git") == source
token = value.split()[-1].rsplit("/", 1)[-1].removesuffix(".tar.gz")
return value in pins or any(token in v or v in value for v in versions)
+25 -1
View File
@@ -3079,7 +3079,10 @@ class TestDeliberatelyFrozenPin(TestBuildReport):
# systems are a subset, not an equal set. A live build can also drop
# a system upstream deleted: advancemame removed its Hyper Neo Geo 64
# driver in dff25b6ee7, which advmame-1.4 still carries.
removed_upstream = {("advmame-1.4", "advancemame"): {"hyper-neogeo64"}}
removed_upstream = {
("advmame-1.4", "advancemame"): {"hyper-neogeo64"},
("advmame-1.4", "advmame"): {"hyper-neogeo64"},
}
pairs = 0
for names in by_source.values():
frozen = [
@@ -3373,6 +3376,27 @@ class TestBumpCommit(unittest.TestCase):
self.assertFalse(bump_commit(self.path, report))
self.assertNotIn("newhead", self.path.read_text())
def test_a_build_of_the_branch_tip_follows_it(self):
# RetroPie builds AdvanceMAME from the tip of master
# (advmame.sh:16, 39-41): HEAD is the build it ships.
self.path.write_text(
SAMPLE + "built_by: [retropie]\n"
+ 'pin_follows: "RetroPie builds the branch tip"\n',
encoding="utf-8",
)
part = PartResult(
RefPart("a.c", 10, 12, "a.c:10-12"), "ANCHORED", None, 10, 12, []
)
report = ProfileReport(
name="p", repo="o/n", pin="pin", head="newhead",
entries=[
EntryReport("a.bin", "a.c:10-12, (just a note)", "ANCHORED", [part])
],
counts={"ANCHORED": 1},
)
self.assertTrue(bump_commit(self.path, report))
self.assertIn("newhead", self.path.read_text())
def test_refused_when_no_ref_reads_the_pinned_repository(self):
"""gam4980: every bare libretro.c ref anchored in upstream, and the
bump wrote the fork's HEAD over refs that never described it."""