From 6d7304725f8ed2c28ec3a5364840ede99943be98 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 14:35:22 +0200 Subject: [PATCH] chore: one folder for fbalpha 2012 samples The three committed samples sat under FBAlpha 2012 while the four release assets and the profile use fba2012/samples. The folder check now folds Alpha to A and also reads database paths, which list the release assets the index never holds. --- .../samples/dkong.zip | Bin .../samples/dkongjr.zip | Bin .../samples/galaga.zip | Bin database.json | 152 +++++++++--------- install/amberelec.json | 8 +- install/batocera.json | 8 +- install/emudeck.json | 8 +- install/emuelec.json | 8 +- install/knulli.json | 8 +- install/lakka.json | 8 +- install/retroarch.json | 8 +- install/retrobat.json | 8 +- install/retrodeck.json | 8 +- install/retropie.json | 8 +- install/rocknix.json | 8 +- tests/test_site_r3_collection.py | 43 ++++- 16 files changed, 161 insertions(+), 122 deletions(-) rename bios/Arcade/{FBAlpha 2012 => fba2012}/samples/dkong.zip (100%) rename bios/Arcade/{FBAlpha 2012 => fba2012}/samples/dkongjr.zip (100%) rename bios/Arcade/{FBAlpha 2012 => fba2012}/samples/galaga.zip (100%) diff --git a/bios/Arcade/FBAlpha 2012/samples/dkong.zip b/bios/Arcade/fba2012/samples/dkong.zip similarity index 100% rename from bios/Arcade/FBAlpha 2012/samples/dkong.zip rename to bios/Arcade/fba2012/samples/dkong.zip diff --git a/bios/Arcade/FBAlpha 2012/samples/dkongjr.zip b/bios/Arcade/fba2012/samples/dkongjr.zip similarity index 100% rename from bios/Arcade/FBAlpha 2012/samples/dkongjr.zip rename to bios/Arcade/fba2012/samples/dkongjr.zip diff --git a/bios/Arcade/FBAlpha 2012/samples/galaga.zip b/bios/Arcade/fba2012/samples/galaga.zip similarity index 100% rename from bios/Arcade/FBAlpha 2012/samples/galaga.zip rename to bios/Arcade/fba2012/samples/galaga.zip diff --git a/database.json b/database.json index 9508bef9..a783ac4a 100644 --- a/database.json +++ b/database.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "generated_at": "2026-10-23T07:43:10Z", + "generated_at": "2026-10-23T12:12:19Z", "total_files": 19711, "total_size": 16808555694, "bios_dir": "bios", @@ -10294,36 +10294,6 @@ "crc32": "732f8208", "adler32": "fd717083" }, - "764ec667084bc237c1de6bd1db7541ad8cb59975": { - "path": "bios/Arcade/FBAlpha 2012/samples/dkong.zip", - "name": "dkong.zip", - "size": 29270, - "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", - "md5": "a93ed3e9468576c03528bceec8a6236a", - "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", - "crc32": "ff2dc92e", - "adler32": "8783efdf" - }, - "2725373cc8e6e3c04bca4bf7bd0b027be6bec058": { - "path": "bios/Arcade/FBAlpha 2012/samples/dkongjr.zip", - "name": "dkongjr.zip", - "size": 300220, - "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", - "md5": "c2428525597a69fc71621e0cdf114619", - "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", - "crc32": "8e243fa9", - "adler32": "876c8eb3" - }, - "9e52cc30850cf9e1855fbd2e26f987cbc05b910a": { - "path": "bios/Arcade/FBAlpha 2012/samples/galaga.zip", - "name": "galaga.zip", - "size": 243090, - "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", - "md5": "40b8624b7a72c782998e52a0782b69e2", - "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", - "crc32": "e37c02b4", - "adler32": "54e4596a" - }, "1bef29ccc16eeb2e3c0759bfd2a4f86b1aba03a7": { "path": "bios/Arcade/FBNeo/.variants/hiscore.dat.37fc4e05", "name": "hiscore.dat", @@ -31555,6 +31525,26 @@ "crc32": "c4c96c52", "adler32": "01a73180" }, + "764ec667084bc237c1de6bd1db7541ad8cb59975": { + "path": "bios/Arcade/fba2012/samples/dkong.zip", + "name": "dkong.zip", + "size": 29270, + "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", + "md5": "a93ed3e9468576c03528bceec8a6236a", + "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", + "crc32": "ff2dc92e", + "adler32": "8783efdf" + }, + "2725373cc8e6e3c04bca4bf7bd0b027be6bec058": { + "path": "bios/Arcade/fba2012/samples/dkongjr.zip", + "name": "dkongjr.zip", + "size": 300220, + "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", + "md5": "c2428525597a69fc71621e0cdf114619", + "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", + "crc32": "8e243fa9", + "adler32": "876c8eb3" + }, "cdb09d3ffaa867ff9e7387cf1934e9011565d546": { "path": "bios/Arcade/fba2012/samples/fireshrk.zip", "name": "fireshrk.zip", @@ -31565,6 +31555,16 @@ "crc32": "37c6b3d0", "adler32": "907cbc85" }, + "9e52cc30850cf9e1855fbd2e26f987cbc05b910a": { + "path": "bios/Arcade/fba2012/samples/galaga.zip", + "name": "galaga.zip", + "size": 243090, + "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", + "md5": "40b8624b7a72c782998e52a0782b69e2", + "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", + "crc32": "e37c02b4", + "adler32": "54e4596a" + }, "11ab10d51b27594f71336dd6d83ef30cd2742e6e": { "path": "bios/Arcade/fba2012/samples/ghox.zip", "name": "ghox.zip", @@ -203333,9 +203333,6 @@ "cec002ace50f3a048a3f6c096b85e6da": "adbc01de2b85148080add3123cf1d78599dae8ea", "9e7ec19b80ea4ac41953c6384850f148": "d7769bbda95fef35866ab00248628603595d4dce", "05f3b12502bb6c9c1b986f4065528c65": "34bf7dc699080552e89342bf8ad59dc6a2f0a5db", - "a93ed3e9468576c03528bceec8a6236a": "764ec667084bc237c1de6bd1db7541ad8cb59975", - "c2428525597a69fc71621e0cdf114619": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", - "40b8624b7a72c782998e52a0782b69e2": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "37fc4e050b53a1ef2c2e7f3042553025": "1bef29ccc16eeb2e3c0759bfd2a4f86b1aba03a7", "192918d31f38165d2b898891c7ea658d": "de369cb4a7df147b55168fa7aaf0b98c753b735e", "054a7bcc1f2a16264472dfbeb25768ea": "f4aa64bfe0b93e5df07b4fe2e0f638d91c7f2e71", @@ -205448,7 +205445,10 @@ "468e876b23be2c9c102aa68dcd12feb5": "d4b0c8277c187a92279e2d2b71fc91b72d581257", "19a3df57a902f49f8b022fc3d26de048": "a7d7a0538e2d1d9f3c623488af44b0d8b5e564e2", "d744304609ce1bd8509cea018fe7c648": "d1e956230118b8198c526693cd24d70ec2050e7b", + "a93ed3e9468576c03528bceec8a6236a": "764ec667084bc237c1de6bd1db7541ad8cb59975", + "c2428525597a69fc71621e0cdf114619": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "1ea651a4211f738077eb29cfb6c26ca1": "cdb09d3ffaa867ff9e7387cf1934e9011565d546", + "40b8624b7a72c782998e52a0782b69e2": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "c53298b7736577e0cd9f57d4fcbfdf4c": "11ab10d51b27594f71336dd6d83ef30cd2742e6e", "9d8d873d6646b799d003433d06156d5c": "17997863696749e6ff07e0f4659631e3c9e0ef2f", "b0385bbe76f9ea31ce499fa570306b70": "df704220bce28652ced65f53ca18d286b4bcd42f", @@ -225151,15 +225151,6 @@ "uvt.zip": [ "34bf7dc699080552e89342bf8ad59dc6a2f0a5db" ], - "dkong.zip": [ - "764ec667084bc237c1de6bd1db7541ad8cb59975" - ], - "dkongjr.zip": [ - "2725373cc8e6e3c04bca4bf7bd0b027be6bec058" - ], - "galaga.zip": [ - "9e52cc30850cf9e1855fbd2e26f987cbc05b910a" - ], "236-bios.sp1": [ "de369cb4a7df147b55168fa7aaf0b98c753b735e" ], @@ -231475,9 +231466,18 @@ "gts80a.zip": [ "d1e956230118b8198c526693cd24d70ec2050e7b" ], + "dkong.zip": [ + "764ec667084bc237c1de6bd1db7541ad8cb59975" + ], + "dkongjr.zip": [ + "2725373cc8e6e3c04bca4bf7bd0b027be6bec058" + ], "fireshrk.zip": [ "cdb09d3ffaa867ff9e7387cf1934e9011565d546" ], + "galaga.zip": [ + "9e52cc30850cf9e1855fbd2e26f987cbc05b910a" + ], "ghox.zip": [ "11ab10d51b27594f71336dd6d83ef30cd2742e6e" ], @@ -280217,9 +280217,6 @@ "c7052ca4": "adbc01de2b85148080add3123cf1d78599dae8ea", "04600953": "d7769bbda95fef35866ab00248628603595d4dce", "732f8208": "34bf7dc699080552e89342bf8ad59dc6a2f0a5db", - "ff2dc92e": "764ec667084bc237c1de6bd1db7541ad8cb59975", - "8e243fa9": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", - "e37c02b4": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "92cfba00": "1bef29ccc16eeb2e3c0759bfd2a4f86b1aba03a7", "853e6b96": "de369cb4a7df147b55168fa7aaf0b98c753b735e", "02bf4426": "f4aa64bfe0b93e5df07b4fe2e0f638d91c7f2e71", @@ -282332,7 +282329,10 @@ "45dde813": "d4b0c8277c187a92279e2d2b71fc91b72d581257", "d0f35b64": "a7d7a0538e2d1d9f3c623488af44b0d8b5e564e2", "c4c96c52": "d1e956230118b8198c526693cd24d70ec2050e7b", + "ff2dc92e": "764ec667084bc237c1de6bd1db7541ad8cb59975", + "8e243fa9": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "37c6b3d0": "cdb09d3ffaa867ff9e7387cf1934e9011565d546", + "e37c02b4": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "23974c8e": "11ab10d51b27594f71336dd6d83ef30cd2742e6e", "59a8ab28": "17997863696749e6ff07e0f4659631e3c9e0ef2f", "33fedbd5": "df704220bce28652ced65f53ca18d286b4bcd42f", @@ -299929,9 +299929,6 @@ "994d0a53357ca1f0a8712aa4ba37fc12b29222502befd8ffd943fcc73b303825": "adbc01de2b85148080add3123cf1d78599dae8ea", "a4e5a732be1663eec6affbf19bec6509f4eec517e1660c4cb38fa5ae27611008": "d7769bbda95fef35866ab00248628603595d4dce", "89f877baa90d76d058954eb364cdff9b3f099231141c7a892538cc7c856d7f8d": "34bf7dc699080552e89342bf8ad59dc6a2f0a5db", - "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d": "764ec667084bc237c1de6bd1db7541ad8cb59975", - "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", - "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "eea7622c75e304f896f327d54adcc5683947e2fa33a81f0f2e0a505ad3e581c6": "1bef29ccc16eeb2e3c0759bfd2a4f86b1aba03a7", "2d491586dffd8f4387c340457a30161272e3e18bbba4a439c1890cb4590fc6bc": "de369cb4a7df147b55168fa7aaf0b98c753b735e", "847a46bff44756487e157c4aa30802e0fa9d92186a371ec315abecabb15c4ef0": "f4aa64bfe0b93e5df07b4fe2e0f638d91c7f2e71", @@ -302044,7 +302041,10 @@ "bc9de75976d523320ebb05b8a31e4c082c442bc564475db540b36c68026b6e15": "d4b0c8277c187a92279e2d2b71fc91b72d581257", "4cb64ed2a761883a674a338e2f41cb83648867046c69a3c866964bccf3b676cf": "a7d7a0538e2d1d9f3c623488af44b0d8b5e564e2", "637f7cbe7cc2ec95752821e744889c096897edc29ed7ef78ff50133bf670e22a": "d1e956230118b8198c526693cd24d70ec2050e7b", + "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d": "764ec667084bc237c1de6bd1db7541ad8cb59975", + "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "6588d252edde50d4e997227995a85f377d773536aafe33eba1be294ecc013789": "cdb09d3ffaa867ff9e7387cf1934e9011565d546", + "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "999eb2dd6f45fd6a208758eb2891937f74eddaf2d30dcc95340bd69e86390da8": "11ab10d51b27594f71336dd6d83ef30cd2742e6e", "1cd58a73f74f220aae72a6db9dd6956bd14c8fe08154745ebc7b08e9e5e0705b": "17997863696749e6ff07e0f4659631e3c9e0ef2f", "e59827ad24dd295eb1eb5c6c820c4d0ef548bc36fbcf3bcf64ad02e2ac6ba5f7": "df704220bce28652ced65f53ca18d286b4bcd42f", @@ -325068,33 +325068,6 @@ "Daphne/uvt.zip": [ "34bf7dc699080552e89342bf8ad59dc6a2f0a5db" ], - "Arcade/FBAlpha 2012/samples/dkong.zip": [ - "764ec667084bc237c1de6bd1db7541ad8cb59975" - ], - "FBAlpha 2012/samples/dkong.zip": [ - "764ec667084bc237c1de6bd1db7541ad8cb59975" - ], - "samples/dkong.zip": [ - "764ec667084bc237c1de6bd1db7541ad8cb59975" - ], - "Arcade/FBAlpha 2012/samples/dkongjr.zip": [ - "2725373cc8e6e3c04bca4bf7bd0b027be6bec058" - ], - "FBAlpha 2012/samples/dkongjr.zip": [ - "2725373cc8e6e3c04bca4bf7bd0b027be6bec058" - ], - "samples/dkongjr.zip": [ - "2725373cc8e6e3c04bca4bf7bd0b027be6bec058" - ], - "Arcade/FBAlpha 2012/samples/galaga.zip": [ - "9e52cc30850cf9e1855fbd2e26f987cbc05b910a" - ], - "FBAlpha 2012/samples/galaga.zip": [ - "9e52cc30850cf9e1855fbd2e26f987cbc05b910a" - ], - "samples/galaga.zip": [ - "9e52cc30850cf9e1855fbd2e26f987cbc05b910a" - ], "Arcade/FBNeo/.variants/hiscore.dat.37fc4e05": [ "1bef29ccc16eeb2e3c0759bfd2a4f86b1aba03a7" ], @@ -342398,6 +342371,24 @@ "roms/gts80a.zip": [ "d1e956230118b8198c526693cd24d70ec2050e7b" ], + "Arcade/fba2012/samples/dkong.zip": [ + "764ec667084bc237c1de6bd1db7541ad8cb59975" + ], + "fba2012/samples/dkong.zip": [ + "764ec667084bc237c1de6bd1db7541ad8cb59975" + ], + "samples/dkong.zip": [ + "764ec667084bc237c1de6bd1db7541ad8cb59975" + ], + "Arcade/fba2012/samples/dkongjr.zip": [ + "2725373cc8e6e3c04bca4bf7bd0b027be6bec058" + ], + "fba2012/samples/dkongjr.zip": [ + "2725373cc8e6e3c04bca4bf7bd0b027be6bec058" + ], + "samples/dkongjr.zip": [ + "2725373cc8e6e3c04bca4bf7bd0b027be6bec058" + ], "Arcade/fba2012/samples/fireshrk.zip": [ "cdb09d3ffaa867ff9e7387cf1934e9011565d546" ], @@ -342407,6 +342398,15 @@ "samples/fireshrk.zip": [ "cdb09d3ffaa867ff9e7387cf1934e9011565d546" ], + "Arcade/fba2012/samples/galaga.zip": [ + "9e52cc30850cf9e1855fbd2e26f987cbc05b910a" + ], + "fba2012/samples/galaga.zip": [ + "9e52cc30850cf9e1855fbd2e26f987cbc05b910a" + ], + "samples/galaga.zip": [ + "9e52cc30850cf9e1855fbd2e26f987cbc05b910a" + ], "Arcade/fba2012/samples/ghox.zip": [ "11ab10d51b27594f71336dd6d83ef30cd2742e6e" ], diff --git a/install/amberelec.json b/install/amberelec.json index ad30a4fb..a5ef0fe2 100644 --- a/install/amberelec.json +++ b/install/amberelec.json @@ -6,7 +6,7 @@ "platform": "amberelec", "display_name": "AmberELEC", "version": "1.0", - "generated": "2026-10-23T07:11:31Z", + "generated": "2026-10-23T12:12:19Z", "base_destination": "", "detect": [ { @@ -41341,7 +41341,7 @@ "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", "size": 29270, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkong.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkong.zip", "cores": [ "fbalpha2012" ], @@ -41352,7 +41352,7 @@ "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", "size": 300220, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkongjr.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkongjr.zip", "cores": [ "fbalpha2012" ], @@ -41363,7 +41363,7 @@ "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", "size": 243090, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/galaga.zip", + "repo_path": "bios/Arcade/fba2012/samples/galaga.zip", "cores": [ "fbalpha2012" ], diff --git a/install/batocera.json b/install/batocera.json index b3cbe256..65fa032f 100644 --- a/install/batocera.json +++ b/install/batocera.json @@ -6,7 +6,7 @@ "platform": "batocera", "display_name": "Batocera", "version": "1.0", - "generated": "2026-10-23T07:11:31Z", + "generated": "2026-10-23T12:12:19Z", "base_destination": "bios", "detect": [ { @@ -179780,7 +179780,7 @@ "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", "size": 29270, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkong.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkong.zip", "cores": [ "fbalpha2012" ], @@ -179791,7 +179791,7 @@ "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", "size": 300220, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkongjr.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkongjr.zip", "cores": [ "fbalpha2012" ], @@ -179802,7 +179802,7 @@ "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", "size": 243090, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/galaga.zip", + "repo_path": "bios/Arcade/fba2012/samples/galaga.zip", "cores": [ "fbalpha2012" ], diff --git a/install/emudeck.json b/install/emudeck.json index a64c86c0..12be1b6c 100644 --- a/install/emudeck.json +++ b/install/emudeck.json @@ -6,7 +6,7 @@ "platform": "emudeck", "display_name": "EmuDeck", "version": "1.0", - "generated": "2026-10-23T07:43:10Z", + "generated": "2026-10-23T12:12:19Z", "base_destination": "bios", "detect": [ { @@ -69599,7 +69599,7 @@ "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", "size": 29270, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkong.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkong.zip", "cores": [ "fbalpha2012" ], @@ -69610,7 +69610,7 @@ "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", "size": 300220, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkongjr.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkongjr.zip", "cores": [ "fbalpha2012" ], @@ -69621,7 +69621,7 @@ "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", "size": 243090, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/galaga.zip", + "repo_path": "bios/Arcade/fba2012/samples/galaga.zip", "cores": [ "fbalpha2012" ], diff --git a/install/emuelec.json b/install/emuelec.json index 7868b537..a5eb97a5 100644 --- a/install/emuelec.json +++ b/install/emuelec.json @@ -6,7 +6,7 @@ "platform": "emuelec", "display_name": "EmuELEC", "version": "1.0", - "generated": "2026-10-23T07:11:31Z", + "generated": "2026-10-23T12:12:19Z", "base_destination": "", "detect": [ { @@ -45507,7 +45507,7 @@ "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", "size": 29270, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkong.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkong.zip", "cores": [ "fbalpha2012" ], @@ -45518,7 +45518,7 @@ "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", "size": 300220, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkongjr.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkongjr.zip", "cores": [ "fbalpha2012" ], @@ -45529,7 +45529,7 @@ "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", "size": 243090, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/galaga.zip", + "repo_path": "bios/Arcade/fba2012/samples/galaga.zip", "cores": [ "fbalpha2012" ], diff --git a/install/knulli.json b/install/knulli.json index 4bade4d0..6f627ce9 100644 --- a/install/knulli.json +++ b/install/knulli.json @@ -6,7 +6,7 @@ "platform": "knulli", "display_name": "KNULLI", "version": "1.0", - "generated": "2026-10-23T07:11:31Z", + "generated": "2026-10-23T12:12:19Z", "base_destination": "bios", "detect": [ { @@ -112803,7 +112803,7 @@ "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", "size": 29270, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkong.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkong.zip", "cores": [ "fbalpha2012" ], @@ -112814,7 +112814,7 @@ "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", "size": 300220, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkongjr.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkongjr.zip", "cores": [ "fbalpha2012" ], @@ -112825,7 +112825,7 @@ "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", "size": 243090, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/galaga.zip", + "repo_path": "bios/Arcade/fba2012/samples/galaga.zip", "cores": [ "fbalpha2012" ], diff --git a/install/lakka.json b/install/lakka.json index 6a83238e..695c1f9c 100644 --- a/install/lakka.json +++ b/install/lakka.json @@ -6,7 +6,7 @@ "platform": "lakka", "display_name": "Lakka", "version": "1.0", - "generated": "2026-10-23T07:43:10Z", + "generated": "2026-10-23T12:12:19Z", "base_destination": "system", "detect": [ { @@ -84289,7 +84289,7 @@ "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", "size": 29270, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkong.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkong.zip", "cores": [ "fbalpha2012" ], @@ -84303,7 +84303,7 @@ "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", "size": 300220, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkongjr.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkongjr.zip", "cores": [ "fbalpha2012" ], @@ -84317,7 +84317,7 @@ "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", "size": 243090, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/galaga.zip", + "repo_path": "bios/Arcade/fba2012/samples/galaga.zip", "cores": [ "fbalpha2012" ], diff --git a/install/retroarch.json b/install/retroarch.json index 0eff4528..681e6cd8 100644 --- a/install/retroarch.json +++ b/install/retroarch.json @@ -6,7 +6,7 @@ "platform": "retroarch", "display_name": "RetroArch", "version": "1.0", - "generated": "2026-10-23T07:43:10Z", + "generated": "2026-10-23T12:12:19Z", "base_destination": "system", "detect": [ { @@ -85219,7 +85219,7 @@ "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", "size": 29270, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkong.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkong.zip", "cores": [ "fbalpha2012" ], @@ -85233,7 +85233,7 @@ "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", "size": 300220, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkongjr.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkongjr.zip", "cores": [ "fbalpha2012" ], @@ -85247,7 +85247,7 @@ "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", "size": 243090, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/galaga.zip", + "repo_path": "bios/Arcade/fba2012/samples/galaga.zip", "cores": [ "fbalpha2012" ], diff --git a/install/retrobat.json b/install/retrobat.json index 8d6ba31f..6adde91f 100644 --- a/install/retrobat.json +++ b/install/retrobat.json @@ -6,7 +6,7 @@ "platform": "retrobat", "display_name": "RetroBat", "version": "1.0", - "generated": "2026-10-23T07:14:35Z", + "generated": "2026-10-23T12:12:19Z", "base_destination": "bios", "detect": [ { @@ -43737,7 +43737,7 @@ "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", "size": 29270, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkong.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkong.zip", "cores": [ "fbalpha2012" ], @@ -43748,7 +43748,7 @@ "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", "size": 300220, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkongjr.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkongjr.zip", "cores": [ "fbalpha2012" ], @@ -43759,7 +43759,7 @@ "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", "size": 243090, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/galaga.zip", + "repo_path": "bios/Arcade/fba2012/samples/galaga.zip", "cores": [ "fbalpha2012" ], diff --git a/install/retrodeck.json b/install/retrodeck.json index a8a573d1..07d14cf6 100644 --- a/install/retrodeck.json +++ b/install/retrodeck.json @@ -6,7 +6,7 @@ "platform": "retrodeck", "display_name": "RetroDECK", "version": "1.0", - "generated": "2026-10-23T07:43:10Z", + "generated": "2026-10-23T12:12:19Z", "base_destination": "", "detect": [ { @@ -117861,7 +117861,7 @@ "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", "size": 29270, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkong.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkong.zip", "cores": [ "fbalpha2012" ], @@ -117875,7 +117875,7 @@ "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", "size": 300220, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkongjr.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkongjr.zip", "cores": [ "fbalpha2012" ], @@ -117889,7 +117889,7 @@ "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", "size": 243090, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/galaga.zip", + "repo_path": "bios/Arcade/fba2012/samples/galaga.zip", "cores": [ "fbalpha2012" ], diff --git a/install/retropie.json b/install/retropie.json index de8d5884..48cdd230 100644 --- a/install/retropie.json +++ b/install/retropie.json @@ -6,7 +6,7 @@ "platform": "retropie", "display_name": "RetroPie", "version": "1.0", - "generated": "2026-10-23T07:43:10Z", + "generated": "2026-10-23T12:12:19Z", "base_destination": "BIOS", "detect": [ { @@ -89352,7 +89352,7 @@ "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", "size": 29270, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkong.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkong.zip", "cores": [ "fbalpha2012" ], @@ -89366,7 +89366,7 @@ "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", "size": 300220, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkongjr.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkongjr.zip", "cores": [ "fbalpha2012" ], @@ -89380,7 +89380,7 @@ "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", "size": 243090, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/galaga.zip", + "repo_path": "bios/Arcade/fba2012/samples/galaga.zip", "cores": [ "fbalpha2012" ], diff --git a/install/rocknix.json b/install/rocknix.json index 4d313576..149956af 100644 --- a/install/rocknix.json +++ b/install/rocknix.json @@ -6,7 +6,7 @@ "platform": "rocknix", "display_name": "ROCKNIX", "version": "1.0", - "generated": "2026-10-23T07:43:10Z", + "generated": "2026-10-23T12:12:19Z", "base_destination": "bios", "detect": [ { @@ -55066,7 +55066,7 @@ "sha1": "764ec667084bc237c1de6bd1db7541ad8cb59975", "sha256": "a66bc2ea040ec792308259ee96ba57b4c88de48fbce244714800b6b6340c730d", "size": 29270, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkong.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkong.zip", "cores": [ "fbalpha2012" ], @@ -55077,7 +55077,7 @@ "sha1": "2725373cc8e6e3c04bca4bf7bd0b027be6bec058", "sha256": "73b9e51295fe7412712ccf73c7010d92181aa12d420c40c1c6bc4f8b948e5a11", "size": 300220, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/dkongjr.zip", + "repo_path": "bios/Arcade/fba2012/samples/dkongjr.zip", "cores": [ "fbalpha2012" ], @@ -55088,7 +55088,7 @@ "sha1": "9e52cc30850cf9e1855fbd2e26f987cbc05b910a", "sha256": "a9e936f78c9db009fa9561ebb35dc374b343ba38037133ae30e95906ab0ac312", "size": 243090, - "repo_path": "bios/Arcade/FBAlpha 2012/samples/galaga.zip", + "repo_path": "bios/Arcade/fba2012/samples/galaga.zip", "cores": [ "fbalpha2012" ], diff --git a/tests/test_site_r3_collection.py b/tests/test_site_r3_collection.py index 9c9f7b5f..514667a4 100644 --- a/tests/test_site_r3_collection.py +++ b/tests/test_site_r3_collection.py @@ -4,11 +4,15 @@ A system section is named after the folder its files live in. Nintendo held DS and Nintendo DS, 64DD and Nintendo 64DD, Sega held Mega CD and Mega-CD, Sinclair ZX Spectrum and ZXSpectrum, VTech V.Smile and VSmile, Acorn BBC and BBC Micro: each console had two sections that hid each other on the site. -Reads the git index, which is what a clone checks out. +Reads the git index, which is what a clone checks out, and the database, +which also lists the release assets the index never holds: FBAlpha 2012 had +three samples committed under "FBAlpha 2012" and four release assets under +"fba2012", the folder the core reads. """ from __future__ import annotations +import json import re import subprocess import unittest @@ -19,7 +23,9 @@ REPO_ROOT = Path(__file__).resolve().parents[1] def console_key(name: str) -> str: - return re.sub(r"[\s.\-]", "", name).casefold() + """Spaces, dashes, dots and case folded, and "Alpha" read as its "A" + abbreviation, so "FBAlpha 2012" and "fba2012" are one core.""" + return re.sub(r"[\s.\-]", "", name).casefold().replace("alpha", "a") def twin_consoles(paths: list[str]) -> list[list[str]]: @@ -58,6 +64,39 @@ class OneFolderPerConsole(unittest.TestCase): [["Sega/Mega CD", "Sega/Mega-CD"], ["VTech/V.Smile", "VTech/VSmile"]], ) + def test_database_paths_name_each_console_once(self) -> None: + db_path = REPO_ROOT / "database.json" + if not db_path.is_file(): + self.skipTest("database.json not generated") + files = json.loads(db_path.read_text(encoding="utf-8"))["files"] + self.assertEqual(twin_consoles([f["path"] for f in files.values()]), []) + + def test_alpha_abbreviation_is_the_same_core(self) -> None: + self.assertEqual( + twin_consoles([ + "bios/Arcade/FBAlpha 2012/samples/dkong.zip", + "bios/Arcade/fba2012/samples/ghox.zip", + ]), + [["Arcade/FBAlpha 2012", "Arcade/fba2012"]], + ) + + def test_fbalpha2012_samples_sit_where_the_profile_reads(self) -> None: + db_path = REPO_ROOT / "database.json" + if not db_path.is_file(): + self.skipTest("database.json not generated") + files = json.loads(db_path.read_text(encoding="utf-8"))["files"] + samples = sorted( + f["path"] for f in files.values() + if f["path"].startswith("bios/Arcade/") + and "/samples/" in f["path"] and "fba" in f["path"].casefold() + ) + self.assertEqual( + samples, + [f"bios/Arcade/fba2012/samples/{name}.zip" for name in ( + "dkong", "dkongjr", "fireshrk", "galaga", "ghox", "tekipaki", "vimana", + )], + ) + if __name__ == "__main__": unittest.main()