The runner's system CPython is built without a shared libpython3.x.so,
which PyInstaller --onefile requires. setup-uv's python-version input
makes uv provision its managed CPython, which ships the shared library.
Gitea Actions workflow (.gitea/workflows/ci.yml):
- check job: ruff format --check, ruff check, ty check on pushes to main
- release job on v* tags: build a standalone Linux executable with
PyInstaller (--onefile), smoke-test it, create a Gitea release via
the API and upload the binary as an asset
Also add a pyinstaller build dependency group and bump to 0.3.0.