Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
f449b50
Initial commit [no ci]
Hexa-Hexagon Aug 27, 2026
39156c1
Removed MatterExceptions
Hexa-Hexagon Aug 28, 2026
6db270b
Added credentials into start_pairing_window method added last_error m…
Hexa-Hexagon Aug 29, 2026
000d4d0
chore(deps-pip): bump zwave-js-server-python in the python-deps group…
dependabot[bot] Sep 3, 2026
f7cc2c9
Updated .gitignore
Hexa-Hexagon Sep 5, 2026
255b2c2
Added mock in tests
Hexa-Hexagon Sep 5, 2026
8c904a1
Updated readme file
Hexa-Hexagon Sep 5, 2026
00e4e41
style: apply ruff auto-fixes
Hexa-Hexagon Sep 8, 2026
90e4f37
Fixed pyproject.toml
Hexa-Hexagon Sep 8, 2026
f4df8bf
Added poetry-cov
Hexa-Hexagon Sep 8, 2026
ebeb327
Fix poe errors
Hexa-Hexagon Sep 8, 2026
6d2cd0c
Fixed poe code style
Hexa-Hexagon Sep 8, 2026
3f86f37
Fixed ty errors and code style
Hexa-Hexagon Sep 8, 2026
c78bfc5
chore(deps-pip): bump the python-deps group with 2 updates (#3)
dependabot[bot] Sep 17, 2026
5ae3f2b
Keep pending discovery alive until node is actually removed
Hexa-Hexagon Sep 19, 2026
48d56cc
Files fixed for the template
Hexa-Hexagon Sep 19, 2026
50c5011
Poe fixed
Hexa-Hexagon Sep 19, 2026
37f53bc
Fixed pyproject.toml
Hexa-Hexagon Sep 19, 2026
d578114
Fixed poe
Hexa-Hexagon Sep 19, 2026
564bd32
Poe fix
Hexa-Hexagon Sep 19, 2026
a451468
New poetry lock
Hexa-Hexagon Sep 19, 2026
1ab28cf
Fixed merge conflict
Hexa-Hexagon Sep 19, 2026
5753883
Changed readme, added notices by hardware testing
Hexa-Hexagon Sep 20, 2026
93dfd86
Prepare the first release
MarkParker5 Oct 6, 2026
9207936
Test against a mock Z-Wave network
MarkParker5 Oct 6, 2026
c3c79ae
Fix the integration against the mock network
MarkParker5 Oct 6, 2026
8d4d9e5
Require the SDK that keeps a set default
MarkParker5 Oct 6, 2026
8efc404
Add the command-class catalogue and its canary
MarkParker5 Oct 7, 2026
896b7a4
Support SmartStart and notifications, review parameter UX
MarkParker5 Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions .github/workflows/canary.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Command-class catalogue canary

# Monthly canary, like the Matter and ESPHome integrations'.
#
# PURPOSE: catch zwave-js / zwave-js-server / zwave-js-server-python changes this integration does not support yet.
# Each run installs their LATEST releases (not the locked ones) and runs the whole suite, whose catalogue
# (tests/test_catalogue.py) hosts one mock device per command class. It goes RED when upstream ships something
# unsupported: a new command class, value metadata type or unit (the fast checks), or a new or changed value of a
# hosted command class (the sweep). That is the signal to add support, or to explain why not.

on:
schedule:
- cron: "0 4 1 * *" # monthly
workflow_dispatch:

permissions:
contents: read

jobs:
canary:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.12"

- uses: actions/setup-node@v4
with:
node-version: "22"

- name: Install the project
run: (command -v poetry || pipx install poetry) && poetry install

- name: Upgrade to the latest zwave-js, zwave-js-server and zwave-js-server-python
run: |
npm ci --prefix tests/mock --no-audit --no-fund
npm install --prefix tests/mock --no-save --no-audit --no-fund zwave-js@latest @zwave-js/server@latest
poetry run pip install --upgrade zwave-js-server-python
npm ls --prefix tests/mock zwave-js @zwave-js/server
poetry run pip show zwave-js-server-python | head -2

- name: Whole suite, catalogue included
run: poetry run pytest -v
38 changes: 38 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Release

on:
workflow_dispatch:

permissions:
contents: write
id-token: write

jobs:
release:
uses: ParkerIndustries/workflows/.github/workflows/release.yml@v1
with:
pypi-package-name: majordom-zwave
python-version: "3.12"
stable-branch: master
# the QA run needs the mock Z-Wave network: see test.yml
setup-script: npm ci --prefix tests/mock --no-audit --no-fund

# PyPI publish runs HERE, in the caller — Trusted Publishing can't match a reusable workflow.
publish-pypi:
name: Publish to PyPI
needs: release
runs-on: ubuntu-latest
environment:
name: release
url: https://pypi.org/p/majordom-zwave
permissions:
id-token: write
steps:
- name: Download distributions
uses: actions/download-artifact@v8
with:
pattern: dist-*
merge-multiple: true
path: dist/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
47 changes: 4 additions & 43 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,55 +2,16 @@ name: QA & Tests

on:
push:
# Long-lived branches — keep whichever your repo uses (main or master) and develop.
branches:
- main
- master
- develop
pull_request:
workflow_dispatch:

jobs:
# Real integrations created from this template (any repo other than the template itself)
# run the full shared QA suite, including tests/test_controller.py — which stays red until
# the controller is implemented.
test:
if: github.repository != 'MajorDom-Systems/integration-template'
uses: ParkerIndustries/workflows/.github/workflows/test.yml@v1
# Defaults to the team matrix ["3.12", "3.13"]. Uncomment to customize:
# with:
# python-versions: '["3.12", "3.13", "3.14"]'
# # Runs after `poetry install`, before checks (system deps, Cython build_ext, ...):
# setup-script: |
# sudo apt-get update && sudo apt-get install -y espeak-ng
# # Teardown, always runs after checks:
# post-run-script: docker compose down

# ─────────────────────────────────────────────────────────────────────────────
# TEMPLATE-ONLY — delete this whole job AND the `if:` line on `test` above when you
# scaffold a real integration.
#
# tests/test_controller.py is prefilled to FAIL until the controller is implemented (no
# skip markers in the code or pytest config — deliberate, so a real integration's CI is
# red until it works). On the template repo itself we run everything *except* that file so
# the template stays green. This exclusion lives only here, only for the template's repo.
template-selfcheck:
if: github.repository == 'MajorDom-Systems/integration-template'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Install poetry
run: pipx install poetry
- uses: actions/setup-python@v7
with:
python-version: "3.12"
# No `cache: poetry` — the template gitignores poetry.lock, so there's nothing to key on.
- name: Install dependencies
run: poetry install
- name: Lint & type-check (full tree, including the skeleton tests)
run: |
poetry run ruff check .
poetry run ruff format --check .
poetry run ty check
- name: Tests (excluding the prefilled, expected-to-fail controller suite)
run: poetry run pytest --ignore=tests/test_controller.py
with:
# The end-to-end tests run against a mock Z-Wave network (zwave-js's mock controller behind a real
# zwave-js-server, tests/mock): install it. Node.js comes with the runner.
setup-script: npm ci --prefix tests/mock --no-audit --no-fund
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,4 @@ venv/
# OS
.DS_Store
Thumbs.db
node_modules/
Loading
Loading