Commit Graph
65 Commits
Author SHA1 Message Date
Abdessamad Derraz 962f18ac3f chore: keep the launchers off the release
check_release reports a launcher in the checksum list as unrecorded and
one attached as extra, as it does for install.py. The release steps no
longer run build_port, and the checksum and upload globs name the packs
(*_BIOS_Pack*.zip) so a launcher left in dist/ is never caught.
2026-11-10 11:50:39 +01:00
Abdessamad Derraz 12daa6698f docs: keep the release page to packs and launchers
The release carries the packs, the handheld launchers and the signed checksum list. The installer and the file lists are pinned from the tag (installer page, For packagers), and check_release.py now refuses them as unrecorded files. The notes link each pack's files on the release itself, in a beginner's page: one idea per line. The handheld section links the latest release.
2026-11-10 10:54:04 +01:00
Abdessamad Derraz 025fd08a72 chore: merge origin/main 2026-11-09 14:02:45 +01:00
Abdessamad Derraz 51aa626028 fix: fetch platform originals without exporting
--fetch also exported and stopped on the absent dist/truth before any
download, so CI skipped every exporter fidelity case and tolerated the
step. --refresh-cache only downloads: the step can no longer fail
unseen.
2026-11-09 12:45:57 +01:00
Abdessamad Derraz b9a35589a8 feat: build the PyPI package with flit_core
build_pypi.py stages install.py, the launcher, __main__.py, README and
LICENSE, then runs uv build with flit_core 3.12.0 pinned and
SOURCE_DATE_EPOCH set from install.py's commit. Adds python -m retrobios,
the PyPA classifiers, keywords and project URLs. CI installs uv.
2026-11-09 11:45:49 +01:00
Abdessamad Derraz 7da48ca56a feat: date the PyPI package by install.py commits 2026-11-09 11:40:37 +01:00
Abdessamad Derraz e6c83859d5 chore: merge origin/main 2026-11-09 08:35:52 +01:00
Abdessamad Derraz a70f8bcb34 docs: write the site without personal pronouns 2026-11-09 08:09:47 +01:00
Abdessamad Derraz 7ba899d467 feat: build the installer as a PyPI package
scripts/build_pypi.py writes a wheel and an sdist from install.py, the
copy install.sh pins, and packaging/pypi. The version is the date of the
release in release.json. validate.yml now runs on packaging/ changes.
2026-11-09 07:07:54 +01:00
Abdessamad Derraz 4d3f589ef4 refactor: drop the archived platform status
RetroPie was the only platform with status: archived, which kept it out
of verify --all, slots, the pipeline and list_platforms unless
--include-archived was typed. release_pack already decides which packs a
release publishes and the installer serves every platform, so the status
set nothing apart. The field, its schema entry and the flag are gone, and
RetroPie is covered by every full run like any other platform.
2026-11-06 11:52:34 +01:00
Abdessamad Derraz 25b11fa497 chore: merge site fixes, fourth pass 2026-11-06 10:33:56 +01:00
Abdessamad Derraz 21dd14c851 fix: a verified large file keeps its bytes
fetch_large_file verified a cached copy and returned its name, which another run replaces when the release serves a re-upload: the caller then packed bytes it never verified. The returned path is now a hard link under .cache/large/.by-sha1/<sha1>/, kept only if it holds the inode that was hashed. Revisions no name holds are dropped a day later. restore_large_files hashes each copy before moving it into place.
2026-11-06 08:30:55 +01:00
Abdessamad Derraz 556855421a fix: keep release notes to checked claims
The v2026.10.10 notes said a pack holds every file its emulators open, so
a game never stops on a missing file, and that hashes never come from a
forum list: the gap analysis lists files no pack carries, and in md5
mode a pack keeps the platform's own md5 (verification-modes.md). The
generated text and the README now point to the gap analysis, and
release_notes.py refuses a whats-new text holding a judging or
contradicted phrase.
2026-11-06 08:25:25 +01:00
Abdessamad Derraz e9ecef6896 docs: name the committed files over 50 MB
release-process.md listed tbblue.mmc, removed from bios/ on 2026-10-20, and left out uqm-remix-disc1.uqm. A test now reads the list against git ls-files.
2026-11-05 19:55:59 +01:00
Abdessamad Derraz 8936861a0c docs: align ci, release and report pages 2026-11-03 10:12:41 +01:00
Abdessamad Derraz 3806f60c8e docs: say probes run on demand only 2026-10-28 07:30:01 +01:00
Abdessamad Derraz 6e7047b3fc feat: attach the installer to each release 2026-10-23 18:48:02 +02:00
Abdessamad Derraz eeef4fc6fb feat: packs for the most downloaded setups 2026-10-23 17:18:00 +02:00
Abdessamad Derraz ba3d519189 docs: explain setups without a ZIP
FAQ entry, the release_pack field and how to revisit it from download
counts, the get/ pages, and RetroPie 4.8 now installs from a computer with
the Pi's network folder as --dest. The start pages are back under their
word ceilings.
2026-10-23 17:06:54 +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 08f174bf32 docs: name the part marker in the release steps 2026-10-23 07:22:46 +02:00
Abdessamad Derraz 123d698e43 feat: build the site with Astro Starlight
generate_site.py writes the Starlight project in website/ and nothing
else: mkdocs.yml, the MkDocs hooks, theme overrides and stylesheet go,
and the wiki is written in Starlight's syntax. Both workflows set up
Node with the official actions/setup-node pinned by commit, run npm ci
from the committed lockfile, build with the strict link validator and
check the result with validate_site.py.

The search weighs a page by what it answers: Start here pages first,
a system page's cards and file names before a guide citing them, deep
guides, launchers, aliases and frozen copies after. Status badges,
hash blocks and the export change lists leave the index. The ranking
sits at the centre of a range where the 13 queries of search_gate.py
all answer, in the search box itself.

839 pages, every URL and 45,611 ids match the MkDocs build. The tests
read the Starlight content and syntax.
2026-10-22 18:47:22 +02:00
Abdessamad Derraz be3324f869 feat: read guides and wiki nav from data
Platform guides, device groups, terminal tabs, pack README manuals and
logo credits move from Python tables to platforms/_guides.yml, checked
against the registry on load. A folder row without a path is the
registry's extract_to, written once.

Wiki pages place themselves in the navigation with order and nav_title
in their front matter. Generated docs/ and mkdocs.yml are unchanged.
2026-10-22 15:06:52 +02:00
Abdessamad Derraz 90dd493f3d chore: declare the mkdocs pin with the theme 2026-10-22 13:53:34 +02:00
Abdessamad Derraz be5be996db feat: hold the site to page and index budgets
validate_site.py fails a page over 1 MB of HTML, a search index over
8.5 MB (1.7 MB gzip), a skipped heading level, a table header without
text, a script from another host and a diagram drawn at runtime. The
limits sit above what the site now measures (0.88 MB, 7.2 MB, 1.43 MB),
each with its reason, and each has a test.
2026-10-22 13:13:55 +02:00
Abdessamad Derraz 6353ee53df feat: lay the site out as a reading funnel
Five tabs from Start here to Contribute, a level on every page, a device picker on Get your files that lists every registered platform, and platform pages that open on where the files go, the command, the pack and how to check. FAQ and troubleshooting keep the questions asked before installing, the technical ones move to their own page, and getting started points to the pages that took its content.
2026-10-22 11:50:53 +02:00
Abdessamad Derraz 87c81e9694 feat: ship the handheld port with each release
build_port.py runs after split_pack.py, so RetroBIOS.zip is in the
signed checksum list and uploaded with the packs. check_release.py takes
the port from that list: it is no pack, so release.json does not record
it.
2026-10-22 03:58:45 +02:00
Abdessamad Derraz 57ac252482 feat: check the profiles a branch adds or edits
profile_sync gains --changed (added or edited profiles, uncommitted
ones included) and --added, both against the merge base of --base
(origin/main by default). CONTRIBUTING runs --changed --strict instead
of one --emulator call per new profile, and the CI job runs --added
in place of its own diff loop.
2026-10-21 06:09:55 +02:00
Abdessamad Derraz 53da2a95d2 chore: merge audit fixes (docs)
# Conflicts:
#	tests/test_doc_surfaces.py
#	wiki/installer.md
#	wiki/testing-guide.md
2026-10-21 05:50:25 +02:00
Abdessamad Derraz e03fe338ee chore: merge audit fixes (tests) 2026-10-21 05:44:32 +02:00
Abdessamad Derraz 9edf785513 docs: refresh installer and release pages
The installer output example showed 5865 files and no Not installable
line, while the RetroArch manifest gives 8069 and omits 11. Exit code 2
also comes from every option argparse refuses. RETROBIOS_REF holds a
file list only until the next release deletes its tag, and large files
always come from large-files. The release commit now carries the
manifests the pipeline regenerates. A RetroPie 4.8 image ships Python
3.7.3, below the bootstrap's floor, and the pages say what to use.
2026-10-21 05:22:28 +02:00
Abdessamad Derraz fbc8b1877e fix: build the site in pull request validation
mkdocs was installed by the deploy alone, after the merge, and wiki/
was not a validation path: a dead link or a stray heading failed the
deploy on main with nothing in front of it. The test job now runs the
deploy's site build, and every site input triggers validation.
2026-10-21 05:08:37 +02:00
Abdessamad Derraz 6ee138a819 docs: point users to --check and exact pack files
Troubleshooting, the FAQ and the download page sent people who only ran
the installer to verify.py, which reads the repository, not their BIOS
folder. Download links now name the exact asset of the recorded release,
the --dest example names the BIOS folder on the card, the slice layout
left with the last release that used it, and the shown verify output is
what the tool prints.
2026-10-21 04:34:04 +02:00
Abdessamad Derraz 23b69d185c docs: write headings in sentence case
The gaps page and the Advanced usage, Verification modes, Release process and Testing guide pages titled in Title Case beside sentence-case pages. A test now reads every wiki heading.
2026-10-20 06:16:00 +02:00
Abdessamad Derraz 36e30beac0 docs: give the troubleshooting topics headings
Twenty-one topics were bold lines ending in a colon: MkDocs gave them no anchor to link from an issue and left them out of the page contents. They are headings now, and the prose test refuses the form.
2026-10-20 06:08:03 +02:00
Abdessamad Derraz 2e0d3d626a docs: build RetroPie in the release pipeline run
The release built and checked the RetroPie pack with two commands after the pipeline, which left it out of the verify and pack consistency check. pipeline.py --include-archived builds and checks it with the rest.
2026-10-20 04:52:25 +02:00
Abdessamad Derraz 810396941d feat: write the release notes from the record
The pack table, its parts sentence and the install commands were typed by hand from figures release.json already held. A copied cell or an old collection total at the top is how issue 81 happened. release_notes.py renders them and appends the hand-written account of what changed.
2026-10-20 04:51:56 +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 4231902a6c docs: write prose without dashes or semicolons
Profiles, the wiki, comments, docstrings, command output and schema descriptions carried em-dashes, clause-joining semicolons, unicode arrows, box-drawing banners and check-mark glyphs. Each sentence was rewritten rather than having its character swapped. Hashes, paths, source_ref values and every cited file:line are unchanged, which a comparison of each parsed profile against the previous revision confirms.

validate_pr comments now say PASS and FAIL in words, and source_ref values in a profile's structured blocks render as code. test_prose_style fails if any of these comes back, in tracked files or in the generated site.
2026-10-19 06:47:31 +02:00
Abdessamad Derraz 7895657747 docs: name the new-profile check CI runs 2026-10-19 04:14:44 +02:00
Abdessamad Derraz 1e29d1c266 docs: align release and install examples 2026-10-18 16:01:13 +02:00
Abdessamad Derraz 572a2d20de feat: check a release against its record
A count of assets misses a failed upload beside a stray file and a part
re-uploaded from an older build. check_release.py holds each asset's
GitHub sha256 against SHA256SUMS.txt and release.json, and the release
process publishes the draft only on its clean exit.
2026-10-18 06:26:39 +02:00
Abdessamad Derraz 648784d875 fix: run the suite so its package setup applies
The documented command, discover tests, makes tests/ the top level,
so tests/__init__.py never ran and the variable it sets to keep tests
offline was missing from every local run. Every documented and CI
run now passes -s tests -t ., and a test requires it.
2026-10-18 05:05:09 +02:00
Abdessamad Derraz e089cb86e3 docs: align tools and release pages with the code 2026-10-17 21:20:26 +02:00
Abdessamad Derraz 5c89ac6edc docs: name jsonschema where the build needs it 2026-10-06 09:46:10 +02:00
Abdessamad Derraz 0d3a2b87ed fix: name homonymous release assets by path 2026-10-05 02:51:13 +02:00
Abdessamad Derraz 243e95725b fix: print the released pack counts, not main's 2026-10-04 20:26:09 +02:00
Abdessamad Derraz 14975ce5da fix: keep an issue number from opening a heading 2026-10-04 20:02:34 +02:00
Abdessamad Derraz 52f682cdd6 feat: publish a large pack as zips, not byte ranges 2026-10-04 18:09:24 +02:00