feat: a recipe for every archive, and its build

recipes/archives.json records each of the 2,222 archives database.json lists, .variants/ copies included: members in order with size, crc32 and sha1, the container sha1, md5 and size, exact when the TorrentZip build gives its bytes (1,790) and canonical otherwise (432), the profile and DAT recipes agreeing on its members, and the platforms or profiles pinning its bytes.

romset_recipes.py --capture writes it (pipeline step 1c), --build and --build-all rebuild from held members, loose first, then another archive, then its own copy, read back and checked before the move into place. Under zlib-ng nothing is claimed exact. A test fails when an archive has no recipe or a member is held nowhere.
This commit is contained in:
Abdessamad Derraz committed 2026-11-06 18:37:55 +01:00
1 parent 4648676c11
commit b7645f70ad
5 files changed
+3254 -2

No files matched your search

+10 -1
View File
@@ -5,7 +5,8 @@ Steps, numbered as the run prints them:
0 validate_schemas.py profiles and platform YAMLs, as PR CI checks them
1 generate_db.py --force rebuild database.json from bios/
1b provenance_report.py dump-catalog coverage, derivable.json
1c romset_recipes.py archive identification, reconstruction targets
1c romset_recipes.py archive identification, reconstruction targets,
and --capture: recipes/archives.json
2 refresh_data_dirs.py Dolphin Sys, PPSSPP assets and the other trees
2a mame_hash_scraper MAME BIOS hashes, and device sets on a new release
2a2 fbneo_hash_scraper FBNeo BIOS hashes
@@ -1216,6 +1217,14 @@ def main() -> None:
[sys.executable, "scripts/romset_recipes.py"],
STEP_LABELS["romset_recipes"],
)
# A recipe for every archive database.json lists (recipes/archives.json):
# only an archive whose sha1 moved is read again, so the step costs the
# archives added since the last run.
captured, _ = run(
[sys.executable, "scripts/romset_recipes.py", "--capture"],
f"{STEP_LABELS['romset_recipes']} (archive recipes)",
)
ok = ok and captured
results["romset_recipes"] = ok
all_ok = all_ok and ok