ha-deploy-kit 0.1.2__tar.gz → 0.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/CHANGELOG.md +14 -0
  2. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/PKG-INFO +1 -1
  3. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/pyproject.toml +1 -1
  4. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/ha/repairs_flow.py +9 -9
  5. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/ha/test_repairs_flow.py +4 -0
  6. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/.coveragerc-ha +0 -0
  7. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/.github/workflows/release.yml +0 -0
  8. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/.github/workflows/validate.yml +0 -0
  9. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/.gitignore +0 -0
  10. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/LICENSE +0 -0
  11. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/README.md +0 -0
  12. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/docs/adopting.md +0 -0
  13. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/docs/configuration.md +0 -0
  14. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/docs/install.md +0 -0
  15. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/docs/releasing.md +0 -0
  16. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/examples/backend_only/.env.example +0 -0
  17. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/examples/backend_only/deploy.py +0 -0
  18. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/examples/backend_only/deploy.sh +0 -0
  19. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/examples/frontend_card/.env.example +0 -0
  20. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/examples/frontend_card/deploy.py +0 -0
  21. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/examples/frontend_card/deploy.sh +0 -0
  22. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/examples/frontend_card/ha_adapter.py +0 -0
  23. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/examples/synthetic_widget/deploy.py +0 -0
  24. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/examples/synthetic_widget/ha_adapter.py +0 -0
  25. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/__init__.py +0 -0
  26. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/cli.py +0 -0
  27. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/comparison.py +0 -0
  28. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/config.py +0 -0
  29. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/frontend.py +0 -0
  30. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/ha/__init__.py +0 -0
  31. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/ha/repairs_issue.py +0 -0
  32. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/ha/service.py +0 -0
  33. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/ha/serving.py +0 -0
  34. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/inventory.py +0 -0
  35. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/metadata/services.yaml.tmpl +0 -0
  36. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/metadata/strings.snippet.fixflow.json +0 -0
  37. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/metadata/strings.snippet.json +0 -0
  38. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/notify.py +0 -0
  39. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/settings.py +0 -0
  40. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/src/ha_deploy_kit/transport.py +0 -0
  41. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/conftest.py +0 -0
  42. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/ha/conftest.py +0 -0
  43. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/ha/test_example_adapters.py +0 -0
  44. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/ha/test_real_http_to_service.py +0 -0
  45. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/ha/test_repairs_issue.py +0 -0
  46. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/ha/test_service.py +0 -0
  47. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/ha/test_serving.py +0 -0
  48. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/test_cli.py +0 -0
  49. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/test_comparison.py +0 -0
  50. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/test_config.py +0 -0
  51. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/test_frontend.py +0 -0
  52. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/test_installed_smoke.py +0 -0
  53. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/test_inventory.py +0 -0
  54. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/test_multi_consumer.py +0 -0
  55. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/test_notify.py +0 -0
  56. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/test_packaging.py +0 -0
  57. {ha_deploy_kit-0.1.2 → ha_deploy_kit-0.1.3}/tests/test_transport.py +0 -0
@@ -1,6 +1,20 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v0.1.3 (2026-10-29)
5
+
6
+ ### Bug Fixes
7
+
8
+ - **ha**: Show restart confirmation without an empty schema
9
+ ([`c6de7bb`](https://github.com/latrekc-meta/ha-deploy-kit/commit/c6de7bba87c0116d137a5cac918a5a050763ef59))
10
+
11
+ HA's Repairs frontend auto-submits a form that has an empty data schema, so
12
+ async_show_form(step_id=..., data_schema=vol.Schema({})) restarted Home Assistant the instant the
13
+ user opened the issue -- no confirmation. Show the form with no data schema (as in the proven
14
+ hand-rolled flow) so HA renders a confirmation that waits for an explicit submit. Add a regression
15
+ guard asserting data_schema is None.
16
+
17
+
4
18
  ## v0.1.2 (2026-10-29)
5
19
 
6
20
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ha-deploy-kit
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: HA-free SSH deploy / compare / notify / optional-frontend toolkit for Home Assistant custom components
5
5
  Project-URL: Homepage, https://github.com/latrekc-meta/ha-deploy-kit
6
6
  Project-URL: Repository, https://github.com/latrekc-meta/ha-deploy-kit
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ha-deploy-kit"
7
- version = "0.1.2"
7
+ version = "0.1.3"
8
8
  description = "HA-free SSH deploy / compare / notify / optional-frontend toolkit for Home Assistant custom components"
9
9
  readme = "README.md"
10
10
  license = { file = "LICENSE" }
@@ -1,16 +1,17 @@
1
1
  """Optional opt-in confirm-and-restart Repairs flow.
2
2
 
3
- The restart happens ONLY after the user submits the confirmation dialog. Opening
4
- the Repairs issue shows a dialog describing the restart; clicking submit is the
5
- explicit confirmation. No executable restart lives in the core engine; this flow
6
- is the single opt-in place a consumer may wire it.
3
+ Opening the Repairs issue shows a confirmation dialog; the restart happens ONLY
4
+ when the user submits it. The form is shown WITHOUT a data schema: Home Assistant
5
+ renders a confirmation that waits for the user. (An empty ``vol.Schema({})`` has
6
+ no fields, so the frontend auto-submits it and restarts immediately -- that is the
7
+ bug this avoids.) No executable restart lives in the core engine; this flow is the
8
+ single opt-in place a consumer may wire it.
7
9
  """
8
10
 
9
11
  from __future__ import annotations
10
12
 
11
13
  from typing import TYPE_CHECKING, Any
12
14
 
13
- import voluptuous as vol
14
15
  from homeassistant.components.repairs import RepairsFlow
15
16
 
16
17
  if TYPE_CHECKING:
@@ -30,10 +31,9 @@ class _RestartRequiredFixFlow(RepairsFlow):
30
31
  self, user_input: dict[str, Any] | None = None
31
32
  ) -> FlowResult:
32
33
  if user_input is None:
33
- return self.async_show_form(
34
- step_id="confirm_restart", data_schema=vol.Schema({})
35
- )
36
- await self.hass.services.async_call("homeassistant", "restart", blocking=False)
34
+ # No data schema: HA renders a confirmation that waits for submit.
35
+ return self.async_show_form(step_id="confirm_restart")
36
+ await self.hass.services.async_call("homeassistant", "restart")
37
37
  return self.async_create_entry(title="", data={})
38
38
 
39
39
 
@@ -16,6 +16,10 @@ async def test_showing_the_form_never_restarts(hass):
16
16
  shown = await flow.async_step_init()
17
17
  assert shown["type"] == "form"
18
18
  assert shown["step_id"] == "confirm_restart"
19
+ # No data schema: HA must render a confirmation that WAITS for submit. An
20
+ # empty vol.Schema({}) would be auto-submitted by the frontend and restart
21
+ # immediately -- guard against that regression.
22
+ assert shown["data_schema"] is None
19
23
  assert len(calls) == 0 # merely showing the confirmation dialog never restarts
20
24
 
21
25
 
File without changes
File without changes
File without changes