Commit Graph
2179 Commits
Author SHA1 Message Date
Abdessamad Derraz fcfc10b985 chore: re-profile XRoar 1.12.1
Refs moved to the 1.12.1 tree and its src/ layout. The new rom.c table names the crc32 of nine ROMs, two of which the code checks.
2026-10-20 04:46:46 +02:00
Abdessamad Derraz 1ae2854474 fix: a truth hash conflict is reported once
Generating the model for every platform met the same two GameIndex.yaml declarations once per platform, and check_freshness opened on six identical warnings.
2026-10-20 04:46:03 +02:00
Abdessamad Derraz 50790a2988 fix: the pipeline summary says what does not fail
check_buildbot does not fail the run, yet the summary printed it FAILED right above Pipeline COMPLETE. It now prints WARN and a line saying the difference does not fail the run. The total is aligned under the step durations.
2026-10-20 04:44:30 +02:00
Abdessamad Derraz eaa40d7384 fix: offline target lists are skipped, not ok
Offline, check_freshness labelled every scraped target list static and counted it OK although nothing was compared. Other sections say SKIPPED offline, and now this one does too.
2026-10-20 04:43:45 +02:00
Abdessamad Derraz 2bb4dc9187 fix: the download bar fits the terminal
A 2 GB part drew a 98-column line, and on an 80-column console every redraw wrapped and left a copy behind. The bar now shrinks to the width and goes below ten columns of room.
2026-10-20 04:43:12 +02:00
Abdessamad Derraz d087caec40 fix: a refused standalone copy is named
A copy refused by a read-only emulator folder raised the error count with no failures entry: the summary named no file, gave the BIOS folder as the location and no advice. The failure now carries its path, and the summary names the emulator folder and what to do.
2026-10-20 04:41:18 +02:00
Abdessamad Derraz 4603b6ec77 fix: the check names files it cannot supply
--check counted the required files the list leaves out and named none, then said all files were up to date. A Recalbox user asking why Caesar III would not start learned nothing, though the list names c3.555. The count line no longer calls a file not found unsafe.
2026-10-20 04:41:08 +02:00
Abdessamad Derraz 9e8229c07a fix: a resumed download is not counted as speed
The live line divided every byte by the run's time, a partial copy left by an earlier run included, and showed a 3 GB resume as 2.5 GB/s with nothing left.
2026-10-20 04:40:52 +02:00
Abdessamad Derraz cf9406ab67 chore: watch release pages of off-forge profiles
38 profiles published outside a forge now name the page that announces their releases, so profile_sync and check_freshness see a new version. EDuke32 and Fury take the synthesis build label as core_version, the name the project gives that build.
2026-10-20 04:36:46 +02:00
Abdessamad Derraz 3f029578af fix: a scraper that cannot start says what to do
Scrapers resolve their tag or branch head in the constructor, which ran outside the try in scraper_cli: a refused GitHub call ended in a traceback. The error is now printed with the next step, setting GITHUB_TOKEN when the API refused an anonymous call.
2026-10-20 04:36:24 +02:00
Abdessamad Derraz 8d641dd35d docs: scope Lakka advice, list Recalbox MAME 2026-10-20 04:35:34 +02:00
Abdessamad Derraz 18e093182d docs: name the registries behind assets and dedup
The guides said files over 50 MB become release assets and that RPG Maker and ScummVM were the trees kept out of dedup. .gitignore decides the first, four committed files are over 50 MB, and NODEDUP_DIRS holds eleven trees.
2026-10-20 04:35:02 +02:00
Abdessamad Derraz 303b1fbd5f docs: verify a release outside a clone 2026-10-20 04:31:51 +02:00
Abdessamad Derraz 77c4857a46 fix: a site preview writes its own config
generate_site --docs-dir sent the pages elsewhere but always rewrote the tracked mkdocs.yml, outside the lock taken on that folder, with the navigation of the work in progress. Two previews into two folders both wrote it. Another folder now gets <name>.mkdocs.yml beside it, docs_dir set and its paths rebased, which mkdocs builds with -f.
2026-10-20 04:30:03 +02:00
Abdessamad Derraz 282f8d5d0a feat: watch the release page of off-forge profiles
About forty profiles describe projects published outside any forge (Altirra, ePSXe, DraStic, mednafen, xroar). profile_sync skipped them as an unsupported host and check_freshness reported the same UNKNOWN line every run, so a new release adding a firmware went unseen. A profile can now name the page announcing its releases and a pattern for the version: --check-version reads it, and check_freshness --profiles calls the profile stale when the page announces another version than core_version.
2026-10-20 04:28:27 +02:00
Abdessamad Derraz d43aa5354c chore: regenerate the install manifests
The collected Mac OS, DSi, POM2 and SC-55 files and the Basilisk II alias reach the platforms that run those emulators.
2026-10-20 04:25:49 +02:00
Abdessamad Derraz b1f20fb8e0 feat: collect a Mac OS ROM for SheepShaver
SheepShaver opens ROM or Mac OS ROM, decodes a CHRP-BOOT image and requires a nanokernel ID it knows. By name its entry was served the 128 KB Apple IIGS ROM, which it rejects. Mac OS ROM 1.4 is taken byte for byte from the System Folder of Apple's iMac Software Restore CD 691-2313-A (archive.org, ISO sha1 as listed). Its LZSS payload decodes to 4 MB with the NewWorld nanokernel ID, and a size floor derived from the decoder keeps the IIGS ROM out.
2026-10-20 03:37:57 +02:00
Abdessamad Derraz c07f0d9205 refactor: parse emulator profiles once per process
The alias-free profile set was parsed separately from the full one, so a process asking for both read the 534 profiles twice, 1.6 s of a site build. It is now a filter over the full set.
2026-10-20 03:37:57 +02:00
Abdessamad Derraz 1458f68b0d fix: test the targetless platform contract
A platform without hardware targets is now left out of a targeted --all run instead of being built unfiltered, and a run no platform can honour is refused.
2026-10-20 03:37:57 +02:00
Abdessamad Derraz 7edd438af1 fix: refuse a target no platform has
With --all, an unknown --target skipped every platform that has targets and ran the others (BizHawk, MiSTer) unfiltered, so verify, slots and the pipeline exited 0 on a typo. A platform without targets is now left out like the rest, and a target no platform has is refused.
2026-10-20 03:27:41 +02:00
Abdessamad Derraz c7c2f260f3 fix: check a forced rehash against the last one
The pipeline rebuilds the database with --force, which discarded the previous digests and wrote whatever the CPU computed, on a host that has given an incorrect SHA-1 under load. The forced run still rehashes every file, but a digest that contradicts the cache for an unchanged mtime and size is computed again, and the two readings that agree win, with a warning naming the file.
2026-10-20 03:24:55 +02:00
Abdessamad Derraz ab1f5d7eb4 fix: guard committed text against tooling names
Two test docstrings named the maintainer's private notes file, and nothing stopped it. They now state the rule itself, and test_prose_style fails on any tracked file that names the private notes or the assistant tooling.
2026-10-20 03:23:25 +02:00
Abdessamad Derraz dbf0647974 feat: find a RetroArch installed with Scoop
scoop install retroarch puts retroarch.exe under ~\scoop\apps\retroarch\current, its system folder persisted through a junction. The Windows search covered the installers' folders, Program Files, Steam, ES-DE and the Store package only, so the run offered C:\RetroArch-Win64\system, a folder that RetroArch never opens. The user and global Scoop roots are searched now, %SCOOP% and %SCOOP_GLOBAL% included.
2026-10-20 03:22:56 +02:00
Abdessamad Derraz 33091dabaf fix: list a platform's files without installing it
--list-systems, --list-cores and --list-targets read the manifest and write nothing, yet with --platform bizhawk they went through the portable-install refusal and stopped asking for --dest. Someone checking BizHawk's firmware before downloading BizHawk got an error. A listing now runs whether the platform is installed or not.
2026-10-20 03:22:05 +02:00
Abdessamad Derraz 600bb71fb1 fix: copy Azahar and Flycast files on macOS too
--standalone-copies named Linux and Windows folders for Azahar's aes_keys.txt and boot9.bin and Flycast's dc_boot.bin and dc_nvmem.bin, and nothing for macOS, where both emulators read a fixed folder: ~/Library/Application Support/Azahar/sysdata (common_paths.h:36,61) and ~/Library/Application Support/Flycast/data (osx-main.mm:83-101). A test now requires a macOS folder on every copy.
2026-10-20 03:20:01 +02:00
Abdessamad Derraz 96981b79d8 fix: boot Basilisk II from the 1 MB Mac ROM
Basilisk II opens a file named ROM, checks its size, its version word and the code PatchROM rewrites, and no hash. By name the only candidate was the 128 KB Apple IIGS ROM, which the size gate rejects, so the pack shipped nothing. The collection's mac.rom (Performa/Quadra 630, version 0x067c) passes every gate, and the entry now names it as an alias. KEGS and GSplus keep the IIGS file.
2026-10-20 03:19:17 +02:00
Abdessamad Derraz fd6d4d5563 fix: give DOSBox Pure an SC-55 mk1 slot
DOSBox Pure builds every Sound Canvas companion name from the ROM1 file the user picks and reads the third wave ROM only for an SC-55 mk1 or CM-300 (midi_sc55.h:71-124). The profile put every model in the SC-55/ folder holding the mkII set, so WAVEROM3 could never be met. The mkII group stays there, and the v1.00 mk1 set the collection holds gets its own folder under the names the code builds from sc55_rom1.bin.
2026-10-20 03:17:57 +02:00
Abdessamad Derraz 63ded27336 feat: extract the DSi font tables from held NANDs
DSperate reads TWLFontTable.dat for DSiWare run without a NAND. The file sits in nand:/sys/ of the DSi NAND dumps the collection holds. Decrypted with the console ID and CID in each dump's nocash footer, as DSperate's own NAND reader does, the four western and Japanese consoles give one table, the Chinese and Korean ones their own: 863296, 581664 and 162688 bytes, the sizes and sha1 already known for them.
2026-10-20 03:17:57 +02:00
Abdessamad Derraz 834d53c0fd feat: collect POM2's Virtual II sounds
POM2 reads nine Virtual ][ sounds from roms/virtual_ii_sons/. All nine are inside VirtualII.dmg from virtualii.com (13.3). The five AIFF files are taken as they are. The four .raw files are signed 16-bit little-endian mono at 44100 Hz, as Virtual ]['s own playback code declares them, and are wrapped in a WAV header, the data chunk being the raw file byte for byte. pom2 verifies 78/78.
2026-10-20 03:17:57 +02:00
Abdessamad Derraz a9d384d167 fix: no install folder no platform reads
A platform named but not found fell back to a folder it never opens: ~/bios for RetroBat on Linux and for BizHawk picked from the menu, and on Windows the embedded systems' /userdata/bios, which resolves to the root of the current drive. Each run downloaded gigabytes and reported done. Where no folder on the OS is one the platform reads, a forced run now asks for --dest and the menu asks for a path with no default.
2026-10-20 03:17:42 +02:00
Abdessamad Derraz 31516c1f7c feat: read Lakka's board for the install
Lakka's image writes the board in /etc/os-release: LIBREELEC_DEVICE when built for a device, LIBREELEC_PROJECT otherwise, the very names of our Lakka targets. The installer read the board on Batocera, Recalbox and ROCKNIX only, so a Lakka RPi4 installed 5.7 GB of every board's files where its own needs 4.0.
2026-10-20 03:13:35 +02:00
Abdessamad Derraz 1c4351fe60 chore: regenerate targets, README and site nav
The RetroArch target list publishes the OpenDingux, RetroFW, Miyoo and webOS boards, and GameTank joins the profiled emulators.
2026-10-20 03:10:58 +02:00
Abdessamad Derraz d5560244b4 feat: list the OpenDingux, Miyoo and webOS targets
The buildbot publishes .so cores for OpenDingux (mips32, its beta and RS-90 builds), RetroFW, MiyooCFW and webOS (armv7a, aarch64), 7 to 206 cores each. None was a target, so a handheld or TV user could not narrow a pack or an install to the board. They are scraped now, with opendingux, retrofw, miyoo and webos as aliases.
2026-10-20 02:28:14 +02:00
Abdessamad Derraz f40342de13 feat: profile the GameTank core
The buildbot now publishes gametank, a libretro port of GameTankEmulator by SundownerSport. The console has no boot ROM and the core opens no system file, only its flash save in the save directory. Every buildbot core name must reach a profile, or target filtering skips it.
2026-10-20 02:28:14 +02:00
Abdessamad Derraz 2fc0547a50 fix: check the banned vocabulary in tracked text
The project bans a short list of marketing words in what it publishes, and no test read for them: the site's platform table described Recalbox's interface with one. The line now says what Recalbox does, and test_prose_style fails on any of those words in a tracked file.
2026-10-20 02:25:12 +02:00
Abdessamad Derraz 8da4757538 fix: an unclaimed pcem ROM fails the owner test
The test skipped when slots stopped claiming pcem's ide_xt.bin. The profile declares it and the collection holds three copies, so that skip could only hide a claiming defect. It now skips only when the file is not collected and fails when it is not claimed.
2026-10-20 02:24:45 +02:00
Abdessamad Derraz b402a8b917 docs: install markdown with the test dependencies
CONTRIBUTING and the testing guide installed pyyaml and jsonschema only, while the CI test job also installs markdown. On a contributor's machine the wiki heading test skipped and the run read OK. Both name it now, and a test compares them to the packages the tests import.
2026-10-20 02:24:36 +02:00
Abdessamad Derraz 392a5d68cc fix: strict sync fails a profile it cannot check
profile_sync skipped a profile whose repository no longer answers, which carries no pin, or whose declared death the forge contradicts, with empty counts. --strict counted refs to review only, so the CI job meant to stop an unchecked new profile passed a mistyped repository. Such skips now fail a strict run. An unsupported host, a declared takedown and a profile without refs stay accepted.
2026-10-20 02:23:56 +02:00
Abdessamad Derraz 7bfe68b777 fix: an unanswered search is not a missing file
auto_fetch caught every network error in its repository and archive.org steps and reported the file as needing a community contribution. Offline or rate-limited, --create-issues asked the public for files the tool never looked for, and the errors counter stayed at 0. A 404 is still an answer. Any other failure now marks the file as not fully searched and keeps it out of issues.
2026-10-20 02:23:17 +02:00
Abdessamad Derraz 9fa1f45e92 fix: raise on a registry missing a platform file
list_registered_platforms skipped a registered platform whose YAML was missing and returned an empty list without a registry. verify --all --strict, every --all build, the CI matrix and the site then ran over fewer platforms and exited 0, and install.py kept serving the stale manifest. Both now raise and name the file.
2026-10-20 02:22:37 +02:00
Abdessamad Derraz c42c756b4a fix: group packs on everything that shapes them
group_identical_platforms fingerprinted each file by destination, sha1 and md5. Two platforms whose lists differed only in required, zipped_file, size or crc32, or in how the frontend checks a file, would have shared the representative's pack and verify result. The fingerprint now carries every field of every entry and the platform's verification_mode and hash_rule. No current platform is regrouped.
2026-10-20 02:14:14 +02:00
Abdessamad Derraz 23a999153d fix: read PR hashes the way the resolver does
load_profile_hashes and load_platform_hashes read hash fields by hand: crc32 was never indexed and a comma list of sha256 stayed one key. A contribution a profile names by crc32 alone (clk's Electron os.rom, among 626 entries) or by one of mesence's four sha256 was reported as referenced nowhere. Both indexes now read through parse_hash_list, and a crc32 counts where no stronger hash is declared, bounded by the declared size.
2026-10-20 02:12:54 +02:00
Abdessamad Derraz ac47faf7f2 fix: the pack check applies the frontend's rule
The integrity step compared a member's md5 by hand and ignored hash_rule, so under RomM's rule (size, then any of md5, sha1 and crc32) it would refuse a revision the builder rightly shipped on its sha1. The rule now lives in digest_verdict, which the path check and the pack member check both call. The member's archive digest is computed without the path cache, whose key a buffer's reused address made collide.
2026-10-20 02:11:53 +02:00
Abdessamad Derraz 20b4ce37e6 chore: regenerate the RetroBat manifest
simple64's PAL PIF now reads oceania.
2026-10-20 02:07:26 +02:00
Abdessamad Derraz de66807bf3 fix: test that a removed size is reported
Locks the counter added for neocdz.zip: the platform's size with no truth size is a removal the summary names.
2026-10-20 01:25:36 +02:00
Abdessamad Derraz 52b2970e1c fix: report a size the export removes
When the truth takes over an entry without a size of its own, the format writes it without the platform's size: System.dat's neocdz.zip lost size 953078 and no counter said so. Removed sizes are now counted and named, and the summary counts read 1 size, 2 sizes.
2026-10-20 01:25:25 +02:00
Abdessamad Derraz 19a7128ec6 fix: compare md5 when keeping Recalbox text
The attribute pattern took letters only, so md5 never entered the comparison and an element whose digest the truth corrects kept Recalbox's text. A test written before the change caught it. The RetroDECK fixture now names the core that reads its addition, as the placement rule requires.
2026-10-20 01:25:25 +02:00
Abdessamad Derraz c5fd079b78 fix: keep the text of unchanged Recalbox elements
Every <bios> element the model held was rendered again, so attribute order, alignment, a line break inside md5 and the case of a digest changed in 222 elements that stated the same thing. The diff deleted 451 lines for 136 corrections. An element whose attributes say what Recalbox wrote now keeps Recalbox's own text: 175 lines, the corrections.
2026-10-20 01:23:29 +02:00
Abdessamad Derraz cef6d943e2 fix: a Batocera note stays with its own item
Notes were keyed by file path, so a comment before one of the items reading an archive came back before every item reading it: bk's '# MAME' twelve times. A comment after the list's opening bracket matched neither rule and was dropped (enterprise's ep128emu-core). Notes are now keyed by file and archive member, written once, and a head-line comment goes with the first item.
2026-10-20 01:22:27 +02:00
Abdessamad Derraz e74d182d32 fix: a RetroDECK addition needs its component core
Additions took the component their system's entries sit in, whatever core reads them. 104 armsx2 and yaps2 files went into PCSX2's manifest, beetle_psx and rustation dumps into DuckStation's, a directxbox image into xemu's, all counted as added. An addition now lands only where a core reading it is that component's emulator: 132 additions instead of 581.
2026-10-20 01:21:38 +02:00