Skip to content

v1.14.0

Choose a tag to compare

@github-actions github-actions released this 27 Apr 08:50

User-facing additions

Two new services

The integration now exposes custom actions you can call from automations or Developer tools → Actions:

  • eaux_marseille.refresh — triggers an immediate poll of the customer portal for the selected contract, instead of waiting for the next 1-hour cycle. Useful for manual recovery after a network outage or to sync with an automation that runs at meter-read time.
  • eaux_marseille.reimport_statistics — re-runs the historical monthly statistics import for the selected contract. Useful after a previously failed import (a Repair issue is shown in that case) or to fill in a recorder gap.

Both services use ServiceValidationError with translation keys when the target entry is unknown or not loaded, so users see localised error messages. Documented in README (EN + FR) under a new Services section.

Manifest polish

  • integration_type: "hub" — Home Assistant now groups our sensors under a hub device card, which matches our one-config-entry-per-contract topology.
  • loggers: ["custom_components.eaux_marseille"] — declares our logger namespace so it shows up with a dedicated debug toggle in Settings → System → Logs.

CI hardening

Three new workflows added under .github/workflows/:

  • release.yml — auto-creates the GitHub release on tag push, pulling the changelog from Conventional-Commit prefixes. Verifies the manifest version matches the tag before publishing. Removes the manual gh release create step from the maintainer flow.
  • dependabot-auto-approve.yml — approves and enables auto-merge on patch-level Dependabot PRs once the five required status checks pass. Major/minor bumps stay manual so the maintainer reviews behaviour-affecting changes.
  • codeql.yml — GitHub's native security analysis on push, PR, and a weekly schedule. Catches issue classes (injection, hard-coded secrets, weak crypto, unsafe deserialisation) that mypy and ruff don't cover. Findings appear under the Security tab.

A new tests/test_translations.py adds three structural checks:

  • en.json keys are exactly the strings.json keys
  • fr.json keys are exactly the strings.json keys
  • no http(s):// URLs in any translation value (hassfest forbids it; we shipped that mistake once in v1.11.0 → v1.11.1, this lock catches it locally)

Quality scale

Three rules promoted from exempt to done:

  • action-setup (services registered with proper schema)
  • action-exceptions (services raise ServiceValidationError with translation keys)
  • docs-actions (services documented in README)

Verified

  • All 5 CI jobs green (Lint, Typecheck, Pytest, Hassfest, HACS)
  • Coverage: 96.22% (well above the 95% threshold)
  • 64 tests passed (was 49)
  • Live smoke test on a Raspberry Pi against SEM