Commit Graph
1662 Commits
Author SHA1 Message Date
Abdessamad Derraz 8f50015a0c feat: round 4 reference and data 2026-10-23 19:23:58 +02:00
Abdessamad Derraz 167597ad5e feat: round 4 emulator pages 2026-10-23 19:23:58 +02:00
Abdessamad Derraz 5e09301dd8 feat: round 4 system pages 2026-10-23 19:23:58 +02:00
Abdessamad Derraz 3bbe7225af docs: round 4 wiki and release docs 2026-10-23 19:23:53 +02:00
Abdessamad Derraz 03d12ffe98 feat: round 4 entry pages 2026-10-23 19:23:29 +02:00
Abdessamad Derraz 7a2b83882d feat: round 4 search 2026-10-23 19:23:29 +02:00
Abdessamad Derraz 370bee1470 feat: round 4 components 2026-10-23 19:23:29 +02:00
Abdessamad Derraz 7d412939fa feat: system pages by arcade board and start file
Start lines count which emulators require a file, arcade cards are grouped by board, romsets match by CRC32, cards name emulators and group setups by place, and parts carry parent, neighbours and a name.
2026-10-23 19:23:01 +02:00
Abdessamad Derraz 6a13eda370 fix: run pipeline children without node's cache
The render step's npm build wrote Node's compile cache to /tmp, a 4 GB
tmpfs on this host, and a day of pipeline runs filled it to 3.4 GB.
Every child the pipeline starts now carries NODE_DISABLE_COMPILE_CACHE=1.
2026-10-23 19:19:49 +02:00
Abdessamad Derraz 5a3f621e94 fix: read the mirror of a gone source
select_views stopped on the first repository that answered as gone, so
yuzu's source_mirror was never read and the profile stayed unchecked. A
gone repository is now passed over, and a profile declared gone that
answers only through its mirror is not reported as a contradiction.
2026-10-23 19:13:48 +02:00
Abdessamad Derraz 86f9bda4ef chore: minify the svg logos
svgo drops the editor markup, and the PNG inside RetroDECK's icon is cut to the 80 px tile: 12.7 KB down to 5.1 KB.
2026-10-23 19:06:10 +02:00
Abdessamad Derraz fcb4aa27da feat: search fields and descriptions from pages 2026-10-23 18:58:55 +02:00
Abdessamad Derraz 685945771e feat: network route and offline line on setups
A device setup with no ZIP and a cited network folder gets the command run from a computer into that folder. Every setup with a ZIP links the offline install, the Linux handhelds guide opens with a jump to its download, home and the setup index drop the stray Reference labels, the index lists the handheld tiles, and Get your files answers iPhone and iPad with each app's own steps.
2026-10-23 18:54:01 +02:00
Abdessamad Derraz c1a942ad31 feat: cite a folder for every handheld row
Allium, JELOS, KOLOS and MiyooCFW folders come from their own trees at the revision the installer reads. Rows with no cited folder point at RetroArch's System/BIOS setting, and a folder only Linux reads says so. KNULLI's SAMBA switch is linked, AmberELEC's roms share is named, the MinUI family says the command makes each folder, and an iPhone and iPad tile joins the handheld group.
2026-10-23 18:53:55 +02:00
Abdessamad Derraz 6d938f3d54 feat: reference pages answer every hash and field
A platform or emulator record whose value designates a collection
file carries its sha1 and is filed under the file's other hashes, so
a SHA1 paste finds the setups listing it by MD5. The data page shows
every manifest field, writes URL templates as code, states the EmuDeck
rule, the browser lookup and the empty lists. systems.json gives every
id holding files a page, Files to source splits at 100 rows with an
upload link per file, and MiSTer and BizHawk get no empty core table.
2026-10-23 18:52:13 +02:00
Abdessamad Derraz 00cd203b23 feat: add schema_version to release.json 2026-10-23 18:52:04 +02:00
Abdessamad Derraz 2ba0effd3b fix: check emudeck folders by any file
An EmuDeck entry names no file: the system passes when any file
directly in the BIOS folder has one of its md5, as checkBIOS.sh loops
over "$biosPath/"*. The script looked each one up as a file named
system:md5 and reported 134 of 170 entries missing.
2026-10-23 18:52:04 +02:00
Abdessamad Derraz 7ca7be064a feat: link only source paths a tree confirms
The deploy has no tree cache, so a citation it could not check was
linked into the declared repository: 30 paths answered 404. The paths
held at each pin are now recorded in website/src/data/source-paths.json
by python scripts/sitesources.py, and a path absent from it renders as
code. An address inside a shipped binary reads as one.
2026-10-23 18:52:00 +02:00
Abdessamad Derraz 6e7047b3fc feat: attach the installer to each release 2026-10-23 18:48:02 +02:00
Abdessamad Derraz d614acbef3 fix: offer only a pack that serves the system
Release packs now exist for six platforms only, and install.py refuses a
pack named for another. build_port.py writes packs.txt from the
registry's release_pack groups. Offline, the launcher takes only a pack
spelling the detected system, names that pack, or says no release pack
serves it and gives Wi-Fi or the computer route.
2026-10-23 18:39:45 +02:00
Abdessamad Derraz f568c79e19 feat: emulator pages for any-name bios apps
An app found by content says to get one BIOS of any name and where it goes, with no install command it cannot carry out. Every arcade core names its romset, part pages name their parent and neighbours, a required file says which system it serves, and the core template leaves the index.
2026-10-23 18:39:28 +02:00
Abdessamad Derraz e6ce3085b1 chore: merge main into the launcher fixes 2026-10-23 18:32:08 +02:00
Abdessamad Derraz 5db889f538 fix: end handheld runs that lose their input
Start + Select now kills a sentinel the launcher owns, and the launcher
asks the interface to stop, so a running install still writes its result.
A mapper that dies, a chvt the compositor refuses, a terminal app that
cannot open and a read-only card each end the run or hand over to the
next route instead of a console waiting for a button. muOS starts
gptokeyb2 with -X and keeps muxterm off the pad so Y opens the options.
2026-10-23 18:21:45 +02:00
Abdessamad Derraz af3caed8ab fix: give xbox 360 its own section 2026-10-23 18:01:45 +02:00
Abdessamad Derraz 82bf236a5a feat: hold an upstream pin a port vendors
upstream_frozen says why upstream_commit stays: the port vendors that
upstream tree, synced to that release, or merged that commit. The view
is then read at its own pin, the way pin_frozen holds source_commit, and
a bump leaves it. Outside a GitHub fork network nothing else could tell
aps3e's vendored RPCS3 1f080485 from an upstream read on a date.
2026-10-23 17:30:20 +02:00
Abdessamad Derraz 01465ecf6b fix: ignore a release older than the tag
--check-version said pcsx2x6's v0.2.22 was older than its code because
the pin holds release v0.2.20, the latest the project published. A
release that is an ancestor of the declared tag is not a later one.
2026-10-23 17:26:25 +02:00
Abdessamad Derraz 19f22da75f fix: write prose and quoted refs as written
A folded run rewritten whole keeps its separators (boom3, mame), a
double-quoted source_ref is matched as the loader reads it and escaped on
write (etlegacy), two files sharing a name take their build mode in the
field path (supermodel Games.xml), and a project word ending the line
before a path marks the citation external (genesis_plus_gx_expanded).
2026-10-23 17:23:01 +02:00
Abdessamad Derraz eeef4fc6fb feat: packs for the most downloaded setups 2026-10-23 17:18:00 +02:00
Abdessamad Derraz a2fc09a89e feat: permanent download page per platform
get/<platform>/ lists the files of the current release pack, read from
release.json, or gives the command for a setup without one. The README,
setup pages, Get your files and the release notes link it instead of
asset URLs, which die with each deleted tag. Setups without a ZIP say so
with the command beside it, and validate_site checks every get/ page.
2026-10-23 17:06:51 +02:00
Abdessamad Derraz 32c648b67d feat: release packs for marked platforms only
release_pack: true in the registry is the list a release builds: RetroArch,
EmuDeck, RetroBat, Batocera, RomM and MiSTer, 83% of the downloads of
v2026.10.10. generate_pack --all, --verify-packs, the pipeline consistency
step, release_record and check_release read it. Manifests are still written
for every platform.
2026-10-23 17:06:46 +02:00
Abdessamad Derraz af32a0c6bf chore: merge the handheld launchers 2026-10-23 16:56:52 +02:00
Abdessamad Derraz 77d7ab36de fix: open each part of a split list on its own
The files-to-source table outgrew one page and split in two. Both
parts opened on the same intro, which is the page description, and
validate_site refused the duplicate. Each part now opens on "Part n of
N.". The element-budget exception for the unsplit table is gone: the
parts hold 8,987 and 7,674 elements.
2026-10-23 16:50:46 +02:00
Abdessamad Derraz 0369c75dfe chore: merge main into the launchers 2026-10-23 16:42:00 +02:00
Abdessamad Derraz c826e0fc05 fix: keep release profiles on the build they pin
mame_hash_scraper --release rewrote the whole profile and dropped the
pin_frozen that mame0258 and mame0278 carry: libretro/mame HEAD is a
later release, so without it profile_sync compares their refs with code
the Recalbox build never had. A release profile now states it, from
built_by, and keeps the reason a reader wrote.
2026-10-23 16:41:58 +02:00
Abdessamad Derraz 6f8d3dede3 fix: read prose where its path is written
realign_prose stripped a path prefix, or read a path two repositories
share, in the repository whose pin moved, while the profile meant the
other. hatarib's hatari/src/tos.c became hatari/hatari's src/tos.c, and
freej2me_plus's fork citations were read in hex007/freej2me: 32 and 8
citations asked to be read again although their files were unchanged.
The path as written now decides first, and a shared path belongs to the
repository declared first, as in attribution.

test_a_frozen_build_files_its_content_with_the_build_that_follows paired
every pin_frozen profile with every live one of the same source. It now
skips platform builds (built_by), and requires the frozen systems to be
a subset: a later release can add a board (advancemame's coh1002v).
2026-10-23 16:41:04 +02:00
Abdessamad Derraz 8ea1129063 chore: merge copy from an old card 2026-10-23 16:36:03 +02:00
Abdessamad Derraz 5136c5a53a chore: merge main into the --from branch 2026-10-23 16:35:39 +02:00
Abdessamad Derraz 801a0150e6 feat: run the handheld launchers in the tui
The PortMaster port now starts install.py --tui on the console (or in
foot or xterm under a compositor), with gptokeyb in kill mode on the
installer's path, retrobios.gptk, TERM=linux and a Terminus font, and
puts the console, font and mapper back on exit. pugwash screens stay as
the fallback where no terminal can show, and start in no-check mode so
PortMaster's A/B fix applies. Without a network, every launcher installs
from a pack found on the card or names the pack and the folder.

Adds launchers for Batocera and Knulli (Ports, evmapy .keys), muOS
(.muxapp in muxterm with gptokeyb2) and the Tools menu of ArkOS,
dArkOS, ROCKNIX, JELOS and AmberELEC, built by build_port.py with the
pinned installer and tested on a simulated device.
2026-10-23 16:26:47 +02:00
Abdessamad Derraz 861b89dd44 feat: follow a fork's base as its upstream head
For a port that is a GitHub fork of its upstream, the upstream code it
carries is the merge base of the two, not upstream's HEAD. The bump moved
upstream_commit to upstream HEAD on snes9x, kronos, np2kai and others
whose pin was that base. The upstream view's head is now the merge base
GitHub's compare names, the way _follow_submodule already reads a
vendored submodule. Outside a fork network the HEAD stays.
2026-10-23 16:25:56 +02:00
Abdessamad Derraz 2d48cde8d6 fix: judge each recaled citation at its own place
A sentence written in two fields was located over the whole file, found
twice and left in both: the writer now searches the lines of its own
scalar. A structured ref was judged pending when its old text appeared
anywhere, so a chain of shifts (tr1x cut2 508 to 531, cut3 531 to 552)
held the pin on the values the previous entries took: it is now looked
up at its own field.
2026-10-23 16:21:04 +02:00
Abdessamad Derraz 97c960484c fix: read the file a detected literal names
A printf conversion glued to a name, a name with spaces cut to its last
word, an extension list, and an identifier in code were reported as new
files.
2026-10-23 16:21:04 +02:00
Abdessamad Derraz 5fba72f1a3 fix: map a file edited line for line as changed 2026-10-23 16:21:04 +02:00
Abdessamad Derraz 42dfc87e24 fix: recale wrapped and comment prose citations
The recale skipped runs in YAML comments and runs wrapped over two
lines of a literal block, while the pin check counted them: the run
wrote nothing and said nothing. Both are now rewritten at their located
position. A citation that still cannot move is named on stderr and the
profile is left untouched.
2026-10-23 16:21:04 +02:00
Abdessamad Derraz 506d18c935 fix: read a spaced line list in prose citations 2026-10-23 16:21:04 +02:00
Abdessamad Derraz e63bdd23c2 fix: name only the pin moves a bump keeps
A bump rolled back for stale prose still printed the pins it would have
set (yaps2: upstream_commit -> 7fe1e55 after "nothing was written").
2026-10-23 15:57:19 +02:00
Abdessamad Derraz 4a1d875f43 feat: name systems in the install manifests
Each manifest carries system_titles, the name the site prints for every system its files list (Sony PlayStation, not sony-playstation or psx), so the installer can show it. Older installers ignore the field.
2026-10-23 15:55:46 +02:00
Abdessamad Derraz d1a6e96820 fix: check the prose a bump leaves behind
The prose guard read citations under the pins a profile held before the
write. A bump that moves upstream_commit alone could then leave prose the
report had judged in the fork under the new upstream pin: ten profiles
(dolphin-mmjr2, hatari, xenios among them) came out of a bump with prose
to read again. The written file is now read again and the original bytes
put back when a citation is left under an older pin.

A pin_frozen reason was printed as a tag name ("pinned to tag EmuELEC,
the only platform..."); it now reads "pin held (...)".
2026-10-23 15:50:51 +02:00
Abdessamad Derraz 9dd2a3d95f fix: date-order tags and scope the write guard
check_version read latest_tag as the first entry of GitHub's REST
listing, which sorts by name (nesoid: 2.5 before 2.5-4, gargoyle:
stable-20090825 before 2026.1.1), and found the declared tag only on that
first page of 100. The newest tag now comes from GraphQL by commit date,
and the declared one is asked for by name on GitHub, GitLab and Forgejo.

The clean-tree guard of the write modes looked at the whole emulators
directory: a loop of --emulator X --rebase-refs refused every profile
after the first it wrote. It now looks at the selected profiles only.
2026-10-23 15:40:56 +02:00
Abdessamad Derraz 18fc5ce53f fix: leave platform-built pins to a reader
bump_commit advanced any profile whose refs all anchored at HEAD. On a
built_by profile the pin is the commit a platform compiles (mame0258,
mame0278, gsplus-legacy at recalbox gsplus.mk:8-9), so HEAD is a build
nobody ships under that name. The bump now refuses those profiles.
2026-10-23 15:35:51 +02:00
Abdessamad Derraz de6f616bb9 docs: split a docstring sentence in profile_sync 2026-10-23 15:34:11 +02:00