Commit Graph
45 Commits
Author SHA1 Message Date
Abdessamad Derraz 8d0b6d5f93 fix: find RetroArch in Steam libraries and ES-DE
The installer looked for retroarch.exe in C:\RetroArch-Win64 and
Program Files\RetroArch only, so a RetroArch under Program Files\
RetroArch-Win64, in a Steam library on another drive, or in an
installed ES-DE's Emulators folder went undetected. All three are
searched; Steam libraries come from Steam's own library list.
2026-10-18 05:26:39 +02:00
Abdessamad Derraz 5a32a42d25 fix: pass the installer's own lint gate
install.py held a local it never read and, since the registry path
rules, a loop variable shadowing the platform module, so the py38
ruff gate the installer is held to failed. Both are fixed, and the
suite reads the two rules from the syntax tree since CI has no ruff.
2026-10-18 05:18:08 +02:00
Abdessamad Derraz cc18b4f2d6 fix: detect platforms the registry describes
The registry declares where each platform keeps its BIOS and every
manifest publishes it, but the installer detects before it fetches
any manifest and never had RetroPie, BizHawk, RetroBat's paths, or
EmuDeck's default folder. It now carries the registry's path rules,
held equal to the registry by a test.
2026-10-18 05:13:20 +02:00
Abdessamad Derraz 91b378d641 fix: copy standalone files from their pack path
The registry names one path per standalone copy for every platform,
but each manifest places the file its own way, so the installer
looked where the pack had put nothing and copied nothing: EmuDeck's
aes_keys.txt for Azahar, Batocera's switch/prod.keys. Each manifest
copy now names its source, which the installer validates and reads.
2026-10-18 05:09:05 +02:00
Abdessamad Derraz faa8af0800 refactor: annotate every remaining signature 2026-10-18 00:44:20 +02:00
Abdessamad Derraz 0bac022c2b fix: replay absent core claims when narrowing 2026-10-17 22:21:50 +02:00
Abdessamad Derraz 55631a2fbc fix: end listings quietly when the reader leaves 2026-10-17 20:50:22 +02:00
Abdessamad Derraz e85819e0e4 fix: name the files the installer skipped 2026-10-17 20:29:55 +02:00
Abdessamad Derraz 2c61a909f7 fix: find RetroArch where Windows and macOS keep it 2026-10-17 20:26:02 +02:00
Abdessamad Derraz d165005a78 fix: lock the installer's partial downloads 2026-10-17 19:25:41 +02:00
Abdessamad Derraz c1c3808e1e fix: tell the installer user what blocks a write 2026-10-17 12:41:45 +02:00
Abdessamad Derraz e659228777 fix: let target installs match their target pack 2026-10-17 00:39:57 +02:00
Abdessamad Derraz 8892432866 fix: fail install --check when files are missing 2026-10-16 22:09:12 +02:00
Abdessamad Derraz 0ddeb2afa4 fix: keep a platform omission behind core claims 2026-10-16 12:22:26 +02:00
Abdessamad Derraz 5cfaf97173 fix: replay system drops and keep file modes 2026-10-16 09:44:23 +02:00
Abdessamad Derraz fbe432ccd0 feat: install only what the installed cores read 2026-10-16 05:02:50 +02:00
Abdessamad Derraz 12f362dfb9 fix: never follow a link at a partial download 2026-10-15 22:31:04 +02:00
Abdessamad Derraz a3941e843c feat: show installer progress and resume downloads 2026-10-15 22:24:39 +02:00
Abdessamad Derraz c64e146a43 fix: refuse standalone copies install can't run 2026-10-10 12:13:18 +02:00
Abdessamad Derraz 1cedc9930b fix: let search order guard regional files 2026-10-10 10:56:09 +02:00
Abdessamad Derraz d2a61b4a89 refactor: name the new exceptions as errors 2026-10-10 05:29:38 +02:00
Abdessamad Derraz 6fca4149f5 feat: offer the files no platform system owns 2026-10-10 04:42:11 +02:00
Abdessamad Derraz ece2c06aaf feat: choose systems, cores and regions to install 2026-10-10 04:31:57 +02:00
Abdessamad Derraz bfa741a9c9 fix: accept the slug omission in the installer 2026-10-10 03:59:23 +02:00
Abdessamad Derraz 4a30cbf882 fix: count a refused standalone copy as an error 2026-10-09 22:57:15 +02:00
Abdessamad Derraz ed7e83e99b fix: default each platform to the folder it reads 2026-10-06 12:46:35 +02:00
Abdessamad Derraz 2a56fccc85 fix: refuse targets when their list cannot be read 2026-10-06 01:39:31 +02:00
Abdessamad Derraz 22d7e4aa9f feat: end the install run on what happened 2026-09-05 07:39:50 +02:00
Abdessamad Derraz f864613f11 feat: detect android in the installer 2026-09-05 07:00:12 +02:00
Abdessamad Derraz 3adb34d322 fix: let a run name its host os 2026-09-04 02:57:46 +02:00
Abdessamad Derraz 3d9df87dd0 fix: follow linked dirs and ask for a platform 2026-09-03 17:51:08 +02:00
Abdessamad Derraz 34619c778f fix: publish target aliases and refuse an unknown one
The pack builder accepts the aliases declared in the target overrides,
so --target switch works there, but the installer's target manifests
carried only canonical names. The documented word was the one that
failed, and the installer then carried on with every file: 1911 files
and 4.1 GB where the user had asked for the 863 that target needs.

Aliases are emitted beside their canonical target, and an unknown
target now stops the run and lists what is available. A filter is
applied or refused, never ignored.
2026-08-12 06:13:21 +02:00
Abdessamad Derraz 185cf47bbc fix: hold manifest paths inside the trust boundary
Every other manifest field was treated as hostile input, but
standalone_copies targets were only length-checked before being
expanded and written to: a traversal component or a symlink already
sitting at the destination sent the copy outside the directory the
user opted into. Targets are now validated like the other paths and a
symlinked destination is never followed.

RETROBIOS_BASE_URL serves the manifest and the files it declares, so
it now has to be HTTPS the way both bootstraps already require of the
installer URL; loopback stays open for the end-to-end tests.

install.ps1 left TLS at the Windows PowerShell 5.1 default, which
GitHub refuses, so the download failed before any hash was checked.

check_local read every file once per declared digest, single threaded.
One read now feeds both, across the same pool the downloads use.

RetroPie had no manifest, so the one-line installer answered 'unknown
platform' for a frontend whose packs do ship.
2026-08-11 00:54:27 +02:00
Abdessamad Derraz 9001ebb992 feat: harden the installer boundary
The manifest is untrusted input. It is now read under a size limit and
validated before use: destinations are contained below the BIOS root,
repo_path stays inside bios/, release_asset is a basename, hashes match
their shape, declared totals match their lists, and every entry has a
download source.

Downloads stream against the declared size, are checked by SHA-256 then
SHA-1, land in a per-process temporary file and are installed with
os.replace. Copies into standalone-emulator directories are opt-in with
--standalone-copies so a detection never writes outside the selected
tree.

Both bootstraps verify install.py against an embedded SHA-256 before
running it, and require the Python version install.py actually needs.

A target that publishes no core list is a target with no filter, not a
broken manifest: rejecting it disabled --target for the whole platform.
2026-08-10 13:36:52 +02:00
Abdessamad Derraz 69d53c97c9 feat: add launchbox detection to installer 2026-08-08 04:24:17 +02:00
Abdessamad Derraz 227ad27b15 feat: validate platform input in installers 2026-08-07 16:23:15 +02:00
Abdessamad Derraz 8663ec17b7 feat: add misterfpga platform support 2026-08-07 13:28:15 +02:00
Abdessamad Derraz d4a58c4937 feat: wire rocknix into installer and docs 2026-08-07 11:25:51 +02:00
Abdessamad Derraz 4f6773bcc4 fix: resolve shell values in installer configs 2026-08-06 05:00:50 +02:00
Abdessamad Derraz 486b359c22 feat: extend do_standalone_copies with pattern, note, wsl fallback 2026-04-03 11:16:34 +02:00
Abdessamad Derraz 6dbc3f510b fix: retrodeck bios_path double prefix 2026-04-03 11:07:46 +02:00
Abdessamad Derraz 0a721fbef1 fix: url-encode repo paths with spaces 2026-03-28 18:46:36 +01:00
Abdessamad Derraz 2118571ca2 fix: emudeck detection path and base url override 2026-03-28 18:45:36 +01:00
Abdessamad Derraz 080cc8f19d fix: manifest dest paths relative to bios dir 2026-03-28 18:42:19 +01:00
Abdessamad Derraz 46426aa1e4 feat: add install.py universal installer engine 2026-03-28 18:07:28 +01:00