From 7b4c03afc246d08940c9a1cc35c38d18bcd11c2f Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 6 Nov 2026 03:20:01 +0100 Subject: [PATCH] docs: say what the archived status changes The README, the setup pages and adding-a-platform tied archived to a scraping schedule and a CI matrix that do not exist. Archived keeps a platform out of the runs that cover every platform unless --include-archived is passed. --- README.md | 4 ++-- scripts/generate_pack.py | 6 +++--- scripts/generate_readme.py | 4 ++-- scripts/generate_site.py | 4 ++-- scripts/list_platforms.py | 8 ++++---- tests/test_doc_pages.py | 29 +++++++++++++++++++++++++++++ wiki/adding-a-platform.md | 11 +++++++---- 7 files changed, 49 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 398f4b771..b325f26ae 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ The Files column counts what a pack holds once extracted, the figure a file mana ZIPs are made for the setups most people download. The others read "Use the command": the installer above installs every file for them and checks each one, and `--dry-run` shows what it would install ([why no ZIP](https://abdess.github.io/retrobios/wiki/faq/#why-is-there-no-zip-for-my-setup)). -\* Archived: the configuration is kept and the installer serves it, but upstream is no longer scraped on a schedule. +\* Archived: the installer serves it, and checks that cover every setup include it only on request. ## What's included @@ -206,4 +206,4 @@ The scripts and tooling are released under the [MIT License](LICENSE). The BIOS and firmware files are not covered by that license: they are third-party system software, preserved and provided for personal backup, archival, and interoperability with emulation software. [NOTICE](NOTICE) sets out their status and how to ask for a file to be removed. The reasoning, and where it is weakest, is in [the project's legal position](https://abdess.github.io/retrobios/wiki/legal/). -*Auto-generated on 2026-11-05T22:45:23Z* +*Auto-generated on 2026-11-06T02:18:34Z* diff --git a/scripts/generate_pack.py b/scripts/generate_pack.py index 4039b1655..f62bb4c35 100644 --- a/scripts/generate_pack.py +++ b/scripts/generate_pack.py @@ -3639,9 +3639,9 @@ def _main(held: contextlib.ExitStack) -> None: # Platform mode if args.all and args.manifest: # Install manifests cover every registered platform: the installer - # serves each one, with or without a release pack. "Archived" means - # upstream is no longer scraped on a schedule, not that the platform - # lost its users. + # serves each one, with or without a release pack. "Archived" keeps a + # platform out of the runs that cover every platform, not out of the + # installer: it has not lost its users. platforms = list_registered_platforms(args.platforms_dir, include_archived=True) elif args.all: # A release publishes the packs the registry marks release_pack and diff --git a/scripts/generate_readme.py b/scripts/generate_readme.py index 006aab519..6a15faaae 100644 --- a/scripts/generate_readme.py +++ b/scripts/generate_readme.py @@ -638,8 +638,8 @@ def generate_readme(db: dict, platforms_dir: str, db_path: str = "database.json" lines.extend( [ "", - "\\* Archived: the configuration is kept and the installer serves it," - " but upstream is no longer scraped on a schedule.", + "\\* Archived: the installer serves it, and checks that cover every" + " setup include it only on request.", ] ) diff --git a/scripts/generate_site.py b/scripts/generate_site.py index 2380d3b5a..9a22b1e52 100644 --- a/scripts/generate_site.py +++ b/scripts/generate_site.py @@ -3346,8 +3346,8 @@ def setup_table(coverages: dict, registry: dict | None = None) -> list[str]: lines += ["No ZIP: the setup is served by the command alone. " f"[Why?](../{NO_ZIP_FAQ})", ""] if archived: - lines += ["An archived setup keeps its page and the command. Its list is no longer " - "read again on a schedule.", ""] + lines += ["An archived setup keeps its page and the command. Checks that cover " + "every setup include it only on request.", ""] return lines diff --git a/scripts/list_platforms.py b/scripts/list_platforms.py index 9eaface44..4adb20fad 100644 --- a/scripts/list_platforms.py +++ b/scripts/list_platforms.py @@ -1,12 +1,12 @@ #!/usr/bin/env python3 -"""List available platforms for CI matrix strategy. +"""List the registered platforms. Respects the `status` field in _registry.yml: -- active: included in CI releases and automated scraping -- archived: excluded from CI, user can generate manually +- active: listed by default +- archived: listed with --include-archived only Usage: - python scripts/list_platforms.py # Active platforms (for CI) + python scripts/list_platforms.py # active platforms python scripts/list_platforms.py --include-archived # archived ones too python scripts/list_platforms.py >> "$GITHUB_OUTPUT" """ diff --git a/tests/test_doc_pages.py b/tests/test_doc_pages.py index ee225c127..2f342fcee 100644 --- a/tests/test_doc_pages.py +++ b/tests/test_doc_pages.py @@ -1900,5 +1900,34 @@ class SkipFlagsNameTheSteps(unittest.TestCase): self.assertEqual(set(re.findall(self.STEP, text)), steps) +class ArchivedIsWhatTheToolsDo(unittest.TestCase): + """The README and the setup pages said an archived platform is no longer + scraped on a schedule, and adding-a-platform said `active` feeds a CI + matrix and the scrapers. No workflow calls list_platforms.py and no tool + reads `schedule:`: what `archived` changes is which full runs include it.""" + + def test_no_text_ties_the_status_to_automation(self): + import generate_pack # noqa: PLC0415 + import generate_readme # noqa: PLC0415 + import generate_site # noqa: PLC0415 + import list_platforms # noqa: PLC0415 + + texts = { + "adding-a-platform.md": (WIKI / "adding-a-platform.md").read_text(encoding="utf-8"), + "generate_readme": inspect.getsource(generate_readme), + "generate_site": inspect.getsource(generate_site), + "generate_pack": inspect.getsource(generate_pack), + "list_platforms": inspect.getsource(list_platforms), + } + for name, text in texts.items(): + with self.subTest(name): + for claim in ("scraped on a schedule", "read again on a schedule", + "CI matrix", "without the automation"): + self.assertNotIn(claim, text) + self.assertIn("`--include-archived`", texts["adding-a-platform.md"]) + for workflow in (ROOT / ".github" / "workflows").glob("*.yml"): + self.assertNotIn("list_platforms", workflow.read_text(encoding="utf-8")) + + if __name__ == "__main__": unittest.main() diff --git a/wiki/adding-a-platform.md b/wiki/adding-a-platform.md index 39a61435c..a17f818d4 100644 --- a/wiki/adding-a-platform.md +++ b/wiki/adding-a-platform.md @@ -732,10 +732,13 @@ This executes in sequence, numbered as the run prints them (`STEP_LABELS` in `--offline` skips steps 2 to 2b2. -A new platform is archived-by-default nowhere: `status: active` puts it in -`list_platforms.py`, the CI matrix, and the scrapers. Set -`status: archived` to keep the configuration without the automation. Archived -platforms are excluded unless `--all` or `--include-archived` is passed. +A new platform is `status: active`. `status: archived` keeps the platform +out of the runs that cover every platform (`verify.py --all`, +`generate_pack.py --all`, `slots.py`, `pipeline.py`, `list_platforms.py`) +unless `--include-archived` is passed. The installer manifests, the site, the +native export and `check_freshness.py` cover archived platforms as well. No +tool scrapes a platform on its own, archived or not: the `schedule:` field is +the cadence a maintainer keeps by hand. A new platform has no release ZIP: `release_pack: true` is set for the setups most people download, and the installer serves every other one from its