fix: declare silabs-ble-ota explicitly in the manifest - #120
Merged
Conversation
Home Assistant's installed-requirement check parses each requirement and compares only the distribution name and version specifier. Extras are never inspected, so once py-opendisplay is present at a matching version the requirement counts as satisfied and the [silabs-ota] extra is never resolved. Silabs OTA then fails at install time with "silabs-ble-ota is required for Silabs firmware updates". Listing silabs-ble-ota as its own requirement makes HA check and install it independently. The extra stays declared so upstream keeps owning what the OTA path needs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Silabs OTA can fail on an otherwise healthy install with:
even though the manifest asks for
py-opendisplay[silabs-ota].Cause
homeassistant/util/package.py:is_installed()parses each requirement string and returnsreq.specifier.contains(installed_version). It looks at the distribution name and the version specifier only, and never atreq.extras. So oncepy-opendisplayis installed at a matching version, HA considers the requirement satisfied and skips the install entirely, and the extra never gets resolved. Any environment where the base package arrived without the extra stays broken across restarts and upgrades.Fix
List
silabs-ble-otaas a requirement of its own so HA checks and installs it independently. The version matches whatuv.lockresolves for the extra.The
[silabs-ota]extra stays declared on purpose, so upstream keeps owning the full dependency set for the OTA path and anything it gains later still comes along.fixes #121