Skip to content

Release v1.0.2

Latest

Choose a tag to compare

@github-actions github-actions released this 05 Apr 08:57

Release Notes v1.0.2

Released: 2026-04-05

This release modernizes the entire project foundation — Python 3.13+ with PEP 695 generics, a complete docs rebuild on VitePress, and a fully automated CI/CD pipeline with OIDC-trusted PyPI publishing. Runtime dependencies are trimmed to four packages, dead code is removed, and every developer workflow runs through a single justfile.

🌟 Highlights

⬆️ Python 3.13+ with PEP 695 Generics

The minimum Python version is now 3.13 (previously 3.11). Generic type parameters in signalrgb/client.py and signalrgb/cli.py use the new PEP 695 inline syntax (def _run_async[T](...), def handle_exceptions[F: Callable[..., Any]](...)), replacing module-level TypeVar declarations. Both clients adopt typing.Self for context manager return types and drop from __future__ import annotations.

🔮 VitePress Documentation Site

The MkDocs + Material doc site is replaced with a VitePress site using the SilkCircuit theme. Docs are restructured into guide/ (intro, installation, quick-start, development, contributing) and reference/ (CLI, library, async client, models). The homepage uses VitePress hero layout with feature cards. All MkDocs dependencies (mkdocs, mkdocs-material, mkdocstrings) are removed — docs deps now live in docs/package.json via pnpm.

👷 Automated Release Pipeline

A new release.yml workflow handles the full release lifecycle: version bump via uv version, lock file sync, commit, tag, and push. It generates AI-powered release notes using hyperb1iss/git-iris@v2 with Anthropic Claude, then dispatches publish.yml for PyPI publishing and docs.yml for site deployment. Trigger with just release [bump] or just release-version <version>.

🔥 Dead Code and Dependency Cleanup

Runtime dependencies are trimmed from nine packages to four: httpx, rich, typer, and mashumaro. The unused requests import and requests.Session instance in SignalRGBClient are removed — the sync client delegates entirely to the async httpx backend. The urllib3, wcwidth, ruff, and pre-commit packages are moved out of runtime deps.

🔧 Justfile Developer Interface

A 230-line justfile replaces scattered commands with 40+ recipes covering the full development loop: just install, just verify, just check (fast fix-and-test), just test, just lint-fix, just fmt, just typecheck, just docs-serve, just release, and more. Aliases i, t, l, f, c, v for quick access.

👷 CI/CD Overhaul

  • Replaced monolithic ci-cd.yml with four focused workflows: ci.yml, publish.yml, docs.yml, release.yml
  • CI delegates to hyperb1iss/shared-workflows reusable workflows for Python CI, publishing, and docs deployment
  • PyPI publishing uses OIDC trusted publishing — no stored API tokens; pypa/gh-action-pypi-publish handles attestation
  • Inlined build+publish steps in publish.yml to work around PyPI's reusable-workflow OIDC limitation
  • Fixed GITHUB_TOKEN push not triggering downstream workflows — release.yml now explicitly dispatches publish.yml and docs.yml via gh workflow run
  • Fixed publish/release concurrency deadlock by giving publish.yml its own concurrency group
  • docs.yml triggers on push to main with path filtering (docs/**), plus workflow_dispatch for manual runs
  • AI-generated release notes artifact is uploaded and passed through the publish → github-release chain

🎨 Toolchain Modernization

  • Type checker: mypy replaced with ty (Astral's Rust-based checker) — configured in pyproject.toml under [tool.ty], targets Python 3.13
  • Ruff: bumped from v0.5.4 to v0.15.8, line length tightened from 120 to 100, target version set to py313
  • Pre-commit: ruff hooks split into ruff-check and ruff-format (new hook IDs); added local ty check hook via uv run
  • Prettier: new .prettierrc and .prettierignore for Markdown/YAML/JSON formatting (printWidth 100, proseWrap always); just prose and just prose-check recipes added to the verify pipeline
  • Removed orphaned [tool.pylint] and [tool.mypy] configuration blocks from pyproject.toml
  • Dropped types-requests stub package

📝 Documentation and Content

  • README rewritten: cleaner feature list without emoji bullets, uv add as the recommended install method, just commands throughout the development section
  • CI badge updated from ci-cd.yml to ci.yml; added Python version badge
  • Broken docs/async_usage.md link in README replaced with the published docs URL (hyperb1iss.github.io/signalrgb-python/reference/async)
  • examples/async_example.py now prints actual output instead of no-op pass stubs
  • Status emoji in signalrgb/cli.py changed from to for the "enabled" state
  • __version__ bumped to 1.0.2 in signalrgb/__init__.py; __version__ added to __all__ exports

💥 Breaking Changes

  • Python 3.13+ required — Python 3.11 and 3.12 are no longer supported. Update your runtime before upgrading. The requires-python field, ruff target, ty config, and CI matrix all enforce >=3.13.
  • requests removed from dependencies — The requests library is no longer a runtime dependency. If your code imported requests transitively through signalrgb, add it to your own dependencies.
  • SignalRGBClient._session removed — The internal requests.Session attribute and its close() call in __exit__ are gone. If you accessed client._session directly (private API), remove that code. The sync client delegates all HTTP calls to the async httpx backend.

⬆️ Upgrade Notes

  • Ensure your environment runs Python 3.13 or later before installing v1.0.2
  • If you pinned requests as a transitive dependency of signalrgb, add it explicitly to your project if still needed
  • Update any CI matrices to use Python 3.13+ — 3.11 and 3.12 are no longer tested or supported
  • The docs site URL remains https://hyperb1iss.github.io/signalrgb-python/ but is now powered by VitePress; update any deep links from the old MkDocs paths (e.g., docs/async_usage.md/reference/async)