Skip to content

Release v1.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 08 Apr 17:49

Release Notes v1.1.0

Released: 2026-04-08

This release cuts SignalRGB API polling in half, adds granular error diagnostics, and fixes entity ID breakage on Home Assistant 2026.02+. The development stack moves fully to the Astral toolchain (ruff + ty + uv), the CI pipeline adopts shared reusable workflows, and the minimum requirement jumps to Home Assistant 2026.4.0 with Python 3.14.2+.

🌟 Highlights

⚡ Halved API Polling Cost

The coordinator now calls get_current_state() + get_effect(state.id) instead of three separate calls (get_current_effect + get_enabled + get_brightness). API round-trips per poll cycle drop from 4 to 2 — applied in light.py coordinator updates, _delayed_refresh, and button.py press handlers.

🐛 Granular Exception Handling

The blanket SignalRGBException catch is replaced with specific handlers for SignalRGBConnectionError, NotFoundError, and APIError. Users now see actionable messages in the HA log — connection errors include the host, API errors include err.code and err.detail. The coordinator raises UpdateFailed instead of HomeAssistantError, preventing refresh cycle crashes.

🐛 Entity ID Compatibility Fix

Explicit self.entity_id assignments are removed from light.py, button.py, and select.py. Home Assistant 2026.02 tightened entity ID validation and rejected the uppercase ULID characters from config_entry.entry_id. Entities now use HA's idiomatic auto-generation from unique_id + device name. Fixes #13, closes #14, closes #15.

🔧 Astral Toolchain Migration

pylint and mypy are replaced by ruff (lint + format) and ty (type checking). Ruff line-length moves from 88 to 100. The Makefile gains typecheck, fix, and coverage targets, and make check now runs lint → typecheck → test in sequence.

👷 CI Overhaul and Release Pipeline

The monolithic ci-cd.yml is replaced by two focused workflows: ci.yml (shared hyperb1iss/shared-workflows/python-ci.yml@v1 + local typecheck and HACS validation) and release.yml (a workflow_dispatch pipeline that bumps versions in manifest.json and pyproject.toml, verifies the build, commits, tags, and creates a GitHub Release with AI-generated notes via git-iris).

⚡ Performance

  • Coordinator polling reduced from 4 API calls to 2 per cycle using get_current_state() in light.py and button.py
  • Setup probe switched from get_current_effect() to get_current_state() in __init__.py — 1 call instead of 2
  • Connection errors during setup logged at WARNING (retries expected) rather than ERROR, reducing log noise during SignalRGB restarts

🐛 Bug Fixes

  • Entity ID breakage on HA 2026.02+: Removed hardcoded entity_id assignments that contained uppercase ULID characters, letting HA auto-generate valid IDs (#13, #14, #15)
  • Coordinator crash on API errors: UpdateFailed replaces HomeAssistantError in the coordinator update function — DataUpdateCoordinator only handles UpdateFailed, so the old exception would crash the refresh cycle
  • CI deadlock: Removed caller-side concurrency group from ci.yml that conflicted with the shared workflow's own concurrency handling
  • Pre-commit ruff-format bug: Fixed a copy-pasted files regex that excluded custom_components/ from formatting
  • Missing trailing newline in translations/en.json

⬆️ Dependencies

  • Home Assistant: >=2025.7.1 → >=2026.4.0
  • Python: >=3.13.2 → >=3.14.2
  • signalrgb SDK: >=1.0.1 → >=1.0.2 (PEP 695 type params, dead requests.Session removal)
  • pytest: ==8.4.0>=8.4.1 (relaxed pin for compatibility)
  • ruff: v0.9.10 → v0.15.9 in pre-commit
  • pre-commit-hooks: v5 → v6
  • Added: ty>=0.0.28 for type checking
  • Removed: pylint, mypy, legacy requirements.txt

🔧 Developer Experience

  • New Makefile targets: make typecheck (ty), make fix (ruff auto-fix + format), make coverage (HTML report)
  • make check now runs lint → typecheck → test as a single command
  • Pre-commit gains safety hooks: check-json, check-toml, check-added-large-files (1 MB), check-merge-conflict, detect-private-key, check-case-conflict, mixed-line-ending --fix=lf
  • Stricter pytest: --strict-markers, --strict-config, branch + parallel coverage with show_missing
  • All source reformatted to line-length 100

📝 Documentation

  • README modernized: for-the-badge badges, HACS Default badge (integration accepted into the default repository), HA 2026.4+ and Python 3.14+ compatibility badges, Astral stack development section with Make target table
  • CHANGELOG.md added following Keep a Changelog format with historical entries for v1.0.1, v1.0.0, and earlier
  • HACS install instructions updated — custom repository workaround removed, replaced with standard HACS default flow

💥 Breaking Changes

  • Home Assistant 2026.4.0+ required — Users on HA 2025.x must upgrade Home Assistant before installing this version. Python 3.14.2+ is also required (bundled with HA 2026.4+).
  • Entity IDs will change on upgrade — Explicit entity IDs like light.signalrgb_<ulid> are replaced by HA auto-generated IDs (typically light.signalrgb). Automations, scripts, and dashboard cards referencing the old entity IDs must be updated.

📋 Upgrade Notes

  1. Update Home Assistant to 2026.4.0 or newer before upgrading this integration
  2. Check your automations and scripts for hardcoded entity IDs — after upgrade, entity IDs will be auto-generated by HA (e.g., light.signalrgb instead of light.signalrgb_<entry_id>). Update references accordingly.
  3. HACS users: The integration is now in the HACS default repository — no custom repository configuration needed
  4. Developers: Run uv sync to pick up the new ty dependency and dropped pylint/mypy packages. Use make check for the full lint → typecheck → test pipeline.