Commit Graph
1466 Commits
Author SHA1 Message Date
Abdessamad Derraz 2d74524d59 feat: file mame software lists and floppy samples
The -listxml names the software lists each machine and slot card
declares and the floppy drives it can instantiate. --devices now writes
one entry per hash/<list>.xml the release ships under the systems of its
placed machines (111 lists, 666 stay with hash/), and files each floppy
sample under the systems whose drives select its form factor
(floppy.cpp:1428-1473, 1759-1767).

Machines a registered platform declares under one of the profile's
systems seed the walk too: bbcb, cdimono1, cdimono2, dragon32, ep64 and
ep128. Unplaced device sets go from 903 to 861.
2026-10-21 12:24:37 +02:00
Abdessamad Derraz 7ac96f2b39 fix: check an entry's system: against its profile
The semantic check read systems: only. mame2010 filed seven BIOS root
sets under systems its list lacked: cpzn1, cpzn2 (zn.c:4543, 4563),
konamigv (konamigv.c:877), skns (suprnova.c:1686), alg_bios (alg.c:782),
maxaflex (maxaflex.c:541) and hng64 (hng64.c:2189) are GAME_IS_BIOS_ROOT
in mame2010-libretro at source_commit.
2026-10-21 12:06:06 +02:00
Abdessamad Derraz d6a0639330 chore: merge audit fixes (packrules)
# Conflicts:
#	scripts/packextras.py
2026-10-21 11:52:28 +02:00
Abdessamad Derraz cd589b2742 chore: merge audit fixes (mame) 2026-10-21 11:48:30 +02:00
Abdessamad Derraz 7030ef3350 chore: merge audit fixes (sysnames) 2026-10-21 11:48:30 +02:00
Abdessamad Derraz 7967e7a9fd chore: merge audit fixes (retrobat) 2026-10-21 11:48:30 +02:00
Abdessamad Derraz 8643d4a4ea chore: merge audit fixes (site)
# Conflicts:
#	emulators/flycast.yml
#	emulators/primehack.yml
2026-10-21 11:48:30 +02:00
Abdessamad Derraz 56e8cbe046 feat: file mame device sets by their machines
The -listxml names, for every machine, its parent (romof), the devices of its default configuration (device_ref) and the cards its slots offer (slotoption). A machine takes the system of the first set on its romof chain a written entry lists, and passes it to each device it can instantiate. A device set reached from one system gets system:, from several the new per-entry systems:, from none neither, and keeps serving every system of the profile. The gap report, the core extras and slots read the entry's own systems, so generate_pack --system and the installer pick by them.
2026-10-21 11:33:39 +02:00
Abdessamad Derraz ef69687fe1 fix: replay held omissions in install regions
The builder keeps a held regional fallback when the requested file is
missing (since 2026-10-17), and the comment beside the manifest's
omissions still said the opposite. A file the builder holds but the
manifest cannot download sat in omitted_files counted unheld, so the
installer kept a fallback the pack drops. Such an omission now carries
held: true and narrow() counts it held, as the builder does.
2026-10-21 11:18:53 +02:00
Abdessamad Derraz 7ca6adca56 fix: check narrowed packs against their own list
After --all-variants, --verify-packs printed "hashes checked during the
build" for the platform-only, truth and required-only packs and compared
none of them, so one missing a file its narrowed list requires passed.
Each pack is now held to the platform list narrowed the way it was built:
source and required_only, read from its name, reach the baseline, the
region grouping and the replay of the core extras.
2026-10-21 11:17:30 +02:00
Abdessamad Derraz 96674273c0 fix: write the pipeline export to exports/ 2026-10-21 11:10:38 +02:00
Abdessamad Derraz db0e10b687 fix: count data directory readers in truth
LRPS2 reads pcsx2/resources/GameIndex.yaml through its data directory
and declares no file entry for it, so the truth entry other cores build
named armsx2 and yaps2 alone and hash_conflict missed LRPS2's copy. A
core whose data directory holds a file at an entry's path now folds in
as a reader with the cached copy's hashes, unless the profile lists what
it reads under that tree (yaps2, pcee2).
2026-10-21 11:07:40 +02:00
Abdessamad Derraz 3fe88332e7 feat: accept platform system names in --system
generate_pack and verify read --system beside --platform through common.resolve_system_arg, built on platform_system_names, the mapping the manifest's system_names comes from. verify --platform --system now reports on the narrowed pack. Unknown names are refused with suggestions before the database is read.
2026-10-21 10:52:40 +02:00
Abdessamad Derraz 9a0501d9d3 fix: count an uncached release asset as fetched
verify resolved offline, so a release asset absent from bios/ and the
cache read as missing while an online build fetched and packed it. verify
now reads the database record of the registered path and counts such a
declaration present, listed as fetched at build time. --offline keeps the
old count, and the offline pipeline passes it to its verify step.
2026-10-21 10:50:03 +02:00
Abdessamad Derraz b4e5e42c97 fix: leave out core files the core refuses by size
A core extra resolved by name shipped on existence platforms even when
the core's own size check turns the copy away. The RetroPie pack carried
the 128 KB Apple IIGS ROM as Basilisk II's ROM (min 512 KB). The builder,
the manifest and verify now read validation.core_size_refusal, which
accepts a copy any version of the same profile slot takes.
2026-10-21 10:46:52 +02:00
Abdessamad Derraz 448540dced feat: extract retrobat guarded bios ini writes
emulatorLauncher writes a BIOS path into an emulator's configuration
only when the file exists: string x = Path.Combine(bios, "name");
if (File.Exists(x)) ini.WriteValue(section, key, x). The extractor now
records each such write as a fixed_name launcher record, with the
enclosing if and early-return conditions, and a key that receives the
bios folder itself as passes_path. A path reassigned before the check,
or a write under a loop or an else, is not read.

Generators read at 48cdc616: KegaFusion (SCD and 32X keys, GenesisBIOS
given the folder), Jgenesis, MelonDS (DS), Mupen64, Project64, mGBA.
The RetroBat paragraph of the Kega Fusion profile now lives in the
launcher layer.
2026-10-21 10:42:09 +02:00
Abdessamad Derraz c6b5e8b220 chore: merge upstream revision pins 2026-10-21 10:37:27 +02:00
Abdessamad Derraz a492e68045 fix: read a tagged upstream at its tag only
detect_pinned_tag matched core_version against every view, so an upstream_commit set to the release tag a port was cut from (triforce on Dolphin 2407, dosbox_pure on 1.0-preview7, GroovyMAME on mame0289) froze the whole profile: the port was no longer compared with its HEAD and bump_commit refused. Only the documented build's repository freezes the profile now. An upstream on its tag is self-checked at that tag, is not reported orphaned, and a bump leaves upstream_commit on it.
2026-10-21 10:34:46 +02:00
Abdessamad Derraz fd1d1b7b96 chore: merge round 2 fixes (pins)
# Conflicts:
#	install.ps1
#	install.sh
2026-10-21 10:31:09 +02:00
Abdessamad Derraz 052f837e69 chore: merge round 2 fixes (integrity) 2026-10-21 10:31:04 +02:00
Abdessamad Derraz 055627f39c chore: merge round 2 fixes (tooling) 2026-10-21 10:31:04 +02:00
Abdessamad Derraz 6409757c39 chore: merge round 2 fixes (docs)
# Conflicts:
#	CONTRIBUTING.md
#	scripts/check_release_assets.py
#	scripts/generate_readme.py
2026-10-21 10:31:04 +02:00
Abdessamad Derraz ce1f165d2f chore: merge round 2 fixes (tests)
# Conflicts:
#	install.ps1
#	install.py
#	install.sh
2026-10-21 10:29:19 +02:00
Abdessamad Derraz ccf61b96d7 fix: report names a RetroPie sentence gains
flycast now reads naomi2.zip, which the RetroArch list RetroPie inherits
already declares. The render added it to the flycast help sentences but
landed_changes counted additions only for entries the platform layer
lacks, so the report missed a name the diff carries. names_anew lets an
exporter whose unit is not the entry say so.
2026-10-21 10:26:04 +02:00
Abdessamad Derraz d87e1035ed chore: drop a clause semicolon in profile_sync 2026-10-21 10:24:39 +02:00
Abdessamad Derraz f15fa46d85 feat: offer the one-liner where users land
The download page had no Android line and no Windows form with
options, and platform and system pages offered only ZIP parts. One
generator now writes the Linux, Windows and Android commands for the
download page and the platform, emulator and system pages. A system
section lists each platform's command under the system id its install
manifest records, the only names --system accepts.
2026-10-21 10:20:19 +02:00
Abdessamad Derraz c8c4f3f486 chore: merge round 2 fixes (installer) 2026-10-21 10:17:44 +02:00
Abdessamad Derraz ccd1ff3b0b docs: describe each setup by what it is
The which-pack page called RetroPie the largest community with the most
guides, Batocera an easy setup and Recalbox good for a first build,
claims nothing in the repository measures. Each row now says what the
setup is, with board names taken from the platform target lists.
2026-10-21 10:17:04 +02:00
Abdessamad Derraz b89383ba68 fix: open the gap page on what is missing
The page opened on a slogan and four tiles that read Verified (100%)
for 5,437 of 5,438 files and Missing 0, above a table of red cells. It
now opens on what it covers and one sentence that says every count of
the platforms' own lists and points to the emulator files below.
2026-10-21 10:16:14 +02:00
Abdessamad Derraz 69965ebb25 feat: link each platform and system to its data
An emulator page linked its YAML and api/v1 JSON, platform and system
pages nothing. Each platform page now links its YAML, its own
api/v1/platforms/<id>.json and its install manifest, and each system
page its api/v1/systems/<slug>.json, both validated by the envelope
schema.
2026-10-21 10:15:11 +02:00
Abdessamad Derraz d7afac0993 chore: merge round 2 fixes (profile names) 2026-10-21 10:14:59 +02:00
Abdessamad Derraz 3ccee1b216 fix: drop the gba_bios.bin alias of nanoboyadvance
NanoBoyAdvance opens general.bios_path, default bios.bin (src/platform/core/src/config.cpp:36 at 3bb6f478). gba_bios.bin is the path ROCKNIX's config.toml sets, recorded under launchers: in rocknix.yml.

Without the alias the entry met only PCem's and QEMU's bios.bin, 64 and 128 KB, which BIOSLoader refuses (bios.cpp:17-48). verify counted it held by name, so the launcher layer left it alone and the ROCKNIX pack gained PCem's image. A hashless entry whose every same-named copy fails its size is now not held, and the gba_bios.bin ROCKNIX declares settles it.
2026-10-21 10:14:15 +02:00
Abdessamad Derraz 5004c4d8d5 fix: refuse an archive holding no declared member
_holding_members kept every same-named copy when the best held nothing,
so galgames.zip, a lone assembler listing, resolved by name for mame,
groovymame and mame4droid-2024, and awbios.zip for mame4droid. Such a
copy now resolves as hash_mismatch.

mame2003_plus declared its contents by name only, while fileio.c:1031-1040
loads a member by CRC when the name is absent. The 61 members now carry
the CRC their driver declares, so stvbios, megatech and the six ZN sets
keep matching the archives the collection holds.
2026-10-21 10:14:09 +02:00
Abdessamad Derraz 36d93c1750 feat: name the folder of a profile-only file
validate_pr.py built its folder advice from platform lists alone, so a
file only an emulator profile declares got the generic
bios/Manufacturer/Console/ advice. Profiles now feed the same table
through each entry's system, and the contributing guide says the
command answers where a file goes.
2026-10-21 10:13:09 +02:00
Abdessamad Derraz 2239df669f fix: address a hashed file card by its hash
An emulator card's anchor changed when a second entry with the same
path was added, so cited links landed at the page top. A card whose
entry declares a hash is now addressed by it, and the first card of a
path keeps the plain file-<path> id as an alias.
2026-10-21 10:12:26 +02:00
Abdessamad Derraz 10dc9a11ac feat: accept ISO country codes for --region
jp, us, kr and gb were aliases but au was unknown, and the first
spelling offered for it was auto, which means world. Every territory
of the region tree now answers to its ISO 3166-1 code, in the build
scripts and in the installer, whose SHA-256 is pinned again.
2026-10-21 10:12:07 +02:00
Abdessamad Derraz 2eee7a991d fix: accept -p and -t in every tool
verify, generate_pack and cross_reference took -p and -t, slots, generate_truth, diff_truth, export_native and refresh_data_dirs refused them. A test reads every add_argument call.
2026-10-21 10:11:22 +02:00
Abdessamad Derraz 746dee530f fix: compare a fork clone with the project main
A fork's clone has origin alone. Pushed to the fork's main, the commit
left origin/main...HEAD empty and --changed reported nothing with rc 0.
When no remote names the project, its main is fetched and compared, and
a fetch that fails is an error.
2026-10-21 10:10:41 +02:00
Abdessamad Derraz de8ab51d6e fix: derive pack install guides from the registry
The pack README's one-line install was written per platform: ROCKNIX and MiSTer had none, EmuDeck's Windows edition was told to open Konsole, and RomM users were sent to library/bios/ whatever their firmware template. The automatic section now follows each platform's install.detect systems, the EmuDeck and RomM manual steps name every layout, and the download page lists EmuDeck under Windows and macOS.
2026-10-21 10:10:15 +02:00
Abdessamad Derraz 604ab3371b fix: give a suffixed release its emulator's tree
_foreign_tree compared owner tokens by equality, so cxbx-reloaded-2023
read bios/Other/cxbx-reloaded/ as another emulator's tree and the
case-folded fallback served xemu's encrypted EEPROM. The leading whole
words of a profile key now name its own tree too. Across every profile
entry this moves cxbx-reloaded-2023's EEPROM.bin to the decrypted dump,
turns eight name matches on the same files into path matches, and gives
solarus-2.0.0 the Solarus tree's gamecontrollerdb.txt.
2026-10-21 10:09:57 +02:00
Abdessamad Derraz fac47dc4c0 fix: say how to run the schema check step 0 skips
Without jsonschema the step printed only the missing module, and the run then read COMPLETE while PR validation runs the same check. The skip now names the install command and the PR check.
2026-10-21 10:09:28 +02:00
Abdessamad Derraz 73ff57468f fix: page descriptions and urls match the page
A core that loads no file no longer promises paths and hashes in its
snippet, a description is cut at a word and keeps the underscores of
its code spans, and the JSON-LD url is encoded as mkdocs encodes the
canonical link and the sitemap.
2026-10-21 10:09:26 +02:00
Abdessamad Derraz ce7655affc chore: merge round 2 fixes (perf) 2026-10-21 10:08:54 +02:00
Abdessamad Derraz f8a9f98ae8 fix: title every consistency header from the list
Three headers of step 5 still read 5/8 beside the computed 5 consistency check [20/24], and a fourth had no number. All four now come from step_title.
2026-10-21 10:08:51 +02:00
Abdessamad Derraz 236f30860e fix: check core files where the builder puts them
The pack integrity check rebuilt the core extras with no taken paths and
tested presence alone, so it credited core files at paths the platform's
own file holds and printed a core count the builder contradicted. It now
replays the builder's placement through packextras.hidden_extras and
compares each placed member with the copy the builder resolves.
2026-10-21 10:08:48 +02:00
Abdessamad Derraz d890ad40e6 chore: merge round 2 fixes (ops) 2026-10-21 10:08:27 +02:00
Abdessamad Derraz 78e172fd5f fix: index archive members once per profile
archive_members scanned the whole file list on every call, and callers ask once per entry of the same profile: 38 million entries walked in one verify --all over mame.yml. Lists of 64 entries or more are now indexed by archive once (held so the id is not reused, indexed again when the length changes), members still read from the entries at each call. archive_members drops from 2.30 s to 0.14 s tottime under the profiler. verify --all (text and --json), slots --json and the retroarch manifest are byte-identical.
2026-10-21 10:08:25 +02:00
Abdessamad Derraz ec1001de95 fix: read validate_pr data from the repo root
Run from another directory, validate_pr.py read no database, platform or
profile and reported every file as referenced by no platform and outside
bios/. It now moves to the root as verify.py does, reading the files
named from where they were typed.
2026-10-21 10:08:23 +02:00
Abdessamad Derraz fb40b903ca fix: refuse an unknown --system before the refresh
The platform's systems are known once its config is loaded. The filter ran inside the build, after the output lock and a refresh of every data directory, and ended on a WARNING with exit 1. It is now a usage error before any work.
2026-10-21 10:08:17 +02:00
Abdessamad Derraz c9780c8822 docs: add one BIOS from the browser
A browser upload into bios/ lands on a fork and opens the pull request, and CI already hashes the file and names its folder. CONTRIBUTING asked for a fork, a clone, five packages and the whole suite, and promised a PR comment that a fork's read-only token cannot post. The issue chooser links the upload page.
2026-10-21 10:06:57 +02:00