# Installing the project installs its dependencies and nothing else: # `pip install -e ".[dev]"` gives a contributor every tool the tests use. # scripts/ and tests/ run from the checkout, so no package is built from them. [build-system] requires = ["setuptools>=61"] build-backend = "setuptools.build_meta" [tool.setuptools] packages = [] py-modules = [] [project] # Not the package PyPI serves (packaging/pypi/ builds that one, named # retrobios): a contributor's `pip install -e ".[dev]"` and `pip install # retrobios` in one environment would otherwise replace each other. name = "retrobios-dev" version = "1.0.0" description = "BIOS collection manager for retrogaming platforms" # install.py is the only entry point a user runs before cloning, and both # bootstraps accept 3.8, so the floor stays where the bootstraps put it. That # floor covers install.py alone: the build scripts under scripts/ need 3.9 # (common.py, which every build script imports, checks it), and CI runs the # test suite on 3.12. requires-python = ">=3.8" dependencies = [ "pyyaml", ] # jsonschema is tooling, not a runtime dependency: scripts/validate_schemas.py # and the CI contract check are the only callers, and no user path imports it. [project.optional-dependencies] dev = [ "jsonschema[format-nongpl]>=4.23", "markdown>=3.7", # The installer's full-screen tests: pyte reads the screen back, # hypothesis fuzzes the key decoder, vermin holds install.py to 3.8. "pyte>=0.8.2", "hypothesis>=6.100", "vermin>=1.9", # The packaging guard reads this file through setuptools, which pip # installs only in its isolated build environment and 3.12 no longer # bundles: without it the guard skipped on every CI run. "setuptools>=61", # scripts/build_pypi.py runs `uv build` for the PyPI package and its test. "uv==0.13.4", # The type check CI runs, pinned: another mypy reports other errors # than the ones mypy-baseline.txt holds. "mypy==1.18.2", "mypy-baseline==0.7.4", ] # The site is built by Astro Starlight from website/package.json and its # lockfile (npm ci --prefix website): no Python package builds it. [project.urls] Repository = "https://github.com/Abdess/retrobios" # The annotations are checked, not only written. Third-party packages are left # out (no_site_packages) so the result does not depend on what the machine # has installed: yaml, jsonschema and the rest read as Any everywhere. The # errors the code carried when the check started sit in mypy-baseline.txt. # CI fails on an error that is not there and on an entry that no longer # occurs: `mypy > out.txt`, then `mypy-baseline filter < out.txt`, and # `mypy-baseline sync < out.txt` once the fix is in. [tool.mypy] files = ["install.py", "scripts"] python_version = "3.9" explicit_package_bases = true ignore_missing_imports = true no_site_packages = true disable_error_code = ["import-untyped"] cache_dir = "tmp/mypy_cache" [tool.mypy-baseline] baseline_path = "mypy-baseline.txt" ignore_categories = ["note"] sort_baseline = true