Address review of PR #1 (Valentin): replace the linear config walk-through
and single-section schema.
- weekly-activity config becomes a menu loop: Current sources (masked) ->
Add a new source (pick kind, repeatable) / Remove a source / Exit; the
file is written only when something changed
- new versioned config layout (version = 2): [[kind.accounts]] arrays so
several accounts or instances per provider coexist; optional display
labels; strict unknown-key/type validation kept (errors carry account
position, e.g. [github.accounts[1]])
- legacy v1 files (no version key, one section per source) migrate
transparently in memory on load; saving from the wizard persists v2;
the file itself is never rewritten by load_config
- non-anonymous Launchpad accounts now authenticate at config time:
constructing LaunchpadSource runs launchpadlib's browser OAuth and the
token lands in the system keyring before any report; an explicit
credentials_file stays supported as an additive opt-out
- report aggregates every configured account in stable order with failure
isolation intact; headings add the account label when it disambiguates
(source_label shared between aggregate and wizard)
- GitHub accounts gain optional token_env resolved lazily against the
environment before falling back to GITHUB_TOKEN / `gh auth token`
The runner's system CPython 3.12.3 satisfies the '3.12' request, so uv
kept using it and PyInstaller failed: system python is built without
libpython3.x.so. Set UV_PYTHON_PREFERENCE=only-managed and install the
managed interpreter explicitly.
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.
The pyinstaller build group was added to pyproject.toml without
regenerating uv.lock, so 'uv sync --frozen --group build' failed in CI
with: Group 'build' is not defined in the project's dependency-groups.
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.
New `bts` subcommand backed by python-debianbts (bugs.debian.org SOAP):
- Identify by email address: get_bugs(submitter=...) for bugs filed,
get_bugs(owner=...) for bugs owned
- Filed filtered on creation date, owned on log_modified; status
lookups capped at 500 bugs per collect
- Per-query failures degrade to warnings like other sources