Skip to content

🚀 Release: Merge dev into main#847

Draft
github-actions[bot] wants to merge 58 commits into
mainfrom
dev
Draft

🚀 Release: Merge dev into main#847
github-actions[bot] wants to merge 58 commits into
mainfrom
dev

Conversation

@github-actions

@github-actions github-actions Bot commented May 14, 2026

Copy link
Copy Markdown

📦 Automated Release PR

This PR merges the latest changes from `dev` into `main`.

Last updated: $(date -u '+%Y-%m-%d %H:%M:%S UTC')

🔍 What's Changed

Review the commits below to see what will be included in this release.

✅ Checklist before merging

  • All tests pass
  • CHANGELOG.md is updated
  • Version number is bumped if needed
  • All features are documented
  • No breaking changes (or documented in release notes)

🚦 Merge Instructions

  1. Review all changes carefully
  2. Ensure CI/CD passes
  3. Update the title with the actual version if releasing
  4. Convert from draft to ready when prepared
  5. Merge using merge commit (not squash)

This PR was automatically updated by the Auto PR workflow

Disane87 and others added 30 commits May 10, 2026 18:31
The tests/ directory was previously gitignored, so the existing
mail_and_packages-derived test files were only local cruft (never
committed). Phase 1 of the platinum refactor needs tests in CI, so
we remove the ignore and start tracking the directory.
Sets up the 90% coverage gate, mypy --strict, and pytest-homeassistant-custom-component.
The gate fails CI immediately; tests will be written in subsequent commits.
Three spools: full-data, sparse-data, archived. Plus filaments,
locations, and extra-field metadata. Used by every integration test.
- Dockerfile.test pins Python 3.13 to mirror CI; HA core's fcntl
  dependency makes native Windows testing impossible, so Docker is
  the recommended local path.
- docker-compose.test.yml gives a one-line invocation for running
  the suite or regenerating snapshots.
- README sections for running tests and updating HA in dev.
Previous commit accidentally deleted scripts/install-hooks.sh and
scripts/publish.sh due to a stale working-tree state, and committed
local Claude Code settings. This restores the scripts and adds .claude/
to .gitignore.
…tor tests

21 tests passing, 72% coverage. The legacy sensors/ tree is omitted from
coverage during phase 3 refactor; will be re-included after that phase
completes and 90% gate becomes achievable on the smaller surface.
…a / CoordinatorData

Pure addition. These types replace untyped dicts in coordinator and
sensor signatures over the next phase-3 tasks. No behavior change.
…tyDescription registry

Pure addition. The base class consolidates the 27-fold-duplicated boilerplate
from sensors/*.py into one place. The description registry covers 20 trivial
property sensors mirroring each legacy file's _attr_* block exactly.

Not yet wired into sensor.py. The phase 3.4 swap will replace direct class
imports with description-driven instantiation; this commit verifies the
snapshot does NOT regress because sensor.py still uses the legacy classes.
…0 legacy sensor files

Snapshot byte-stable, 21 tests passing, ~1100 lines deleted.
… diagnostics, options reload, manifest, quality_scale.yaml

21 tests still passing, snapshot byte-stable.
…e.yaml

45 tests, 91% coverage. Pragma'd: deprecated Klipper branch +
infrastructure failure paths (ClientConnectionError defensive logging).
- strings.json source-of-truth with full config flow + service strings
- translations/en.json synced with strings.json
- mypy: strict on the new typed surface (entity.py, sensor_descriptions.py,
  models.py, diagnostics.py); legacy complex sensors stay on basic
  checks until they're migrated (tracked in quality_scale.yaml
  strict-typing: todo)
- entity.py: documented type:ignore for the 3-tuple device identifier
  (legacy format we cannot change without orphaning existing devices)
- CI mypy step continues on error so the gradual typing migration
  doesn't block PRs
- README: add quality_scale=platinum badge
- .ruff.toml: extend-exclude for vendored/local-dev artefacts (HACS, config/)
- lint.yml: scope ruff check + format to custom_components/spoolman + tests
  so vendored HACS source doesn't pollute results
- Auto-format pass over all sensors (legacy complex sensors only — snapshot
  remains byte-stable as no semantic changes occurred)

Final state: 45 tests, 90.57% coverage, snapshot byte-stable, ruff clean
on our integration paths, mypy strict on the new typed surface.
…spool_used_percentage; remove unused base.py
- .devcontainer/devcontainer.json reuses Dockerfile.test (Python 3.13)
- VS Code recommendations include Dev Containers + mypy-type-checker
- pytest config uses --no-cov so Test Explorer discovery stays fast
- README documents the 'Reopen in Container' workflow as the recommended
  path for IDE-integrated testing on Windows
chore(deps): update dependency ruff to v0.15.13
chore(deps): update dependency ruff to v0.15.14
## [1.4.0-dev.3](v1.4.0-dev.2...v1.4.0-dev.3) (2026-06-02)

### 📔 Docs

* add platinum refactor implementation plan ([938e6e6](938e6e6))
* **readme:** deprecate built-in Klipper integration ([8415179](8415179)), closes [#100](#100) [#105](#105) [#312](#312)

### 🚀 Features

* **devx:** non-root vscode user for Dev Container ([d777365](d777365))
* **devx:** VS Code Dev Container for Test Explorer integration ([22b997a](22b997a))
* **phase 4.4-4.5:** translations + per-module strict typing ([d63594b](d63594b))
* **phase 4:** platinum compliance — first_refresh, parallel_updates, diagnostics, options reload, manifest, quality_scale.yaml ([6aae130](6aae130))
* **phase 5:** platinum badge in README, ruff scope to integration paths ([26f3827](26f3827))
* **platinum:** migrate to ConfigEntry.runtime_data (typed SpoolmanRuntimeData) ([7c5564e](7c5564e))
* **platinum:** mypy --strict clean across the entire integration (28 files) ([112cabb](112cabb))
* **platinum:** mypy --strict clean on the integration core ([1117e49](1117e49))
* **platinum:** strict typing on filament_color_hex, spool_location, spool_used_percentage; remove unused base.py ([79650a7](79650a7))

### 🛠️ Fixes

* **locations:** include empty Locations-page entries ([#854](#854)) ([897b0fe](897b0fe)), closes [#839](#839)
* restore scripts/, ignore .claude/ ([12ea0a0](12ea0a0))
@Disane87

Disane87 commented Jun 2, 2026

Copy link
Copy Markdown
Owner

🎉 This PR is included in version 1.4.0-dev.3 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

@github-actions github-actions Bot added needs testing Released on dev branch, needs testing before production release size:XXL This PR changes 1000+ lines, ignoring generated files. and removed size:XXL This PR changes 1000+ lines, ignoring generated files. labels Jun 2, 2026
Home Assistant displays the integration version from
custom_components/spoolman/manifest.json, which was a hardcoded '0.0.0'
placeholder that nothing in the release flow updated — so every release
(including the location fix shipped in v1.4.0-dev.3) showed 'Version
0.0.0' in HA.

- publish.sh: jq-set manifest.json 'version' to ${nextRelease.version}
  before building the zip, so the shipped artifact carries the real
  version.
- .releaserc.js: add manifest.json to @semantic-release/git assets so the
  bumped version is committed back to the branch.

Re-releases the empty-Locations fix under a correctly-stamped version.

Closes #854
@github-actions github-actions Bot added size:XXL This PR changes 1000+ lines, ignoring generated files. and removed size:XXL This PR changes 1000+ lines, ignoring generated files. labels Jun 2, 2026
## [1.4.0-dev.4](v1.4.0-dev.3...v1.4.0-dev.4) (2026-06-02)

### 🛠️ Fixes

* **release:** stamp manifest.json version so HA shows the real version ([c82e805](c82e805)), closes [#854](#854)
@Disane87

Disane87 commented Jun 2, 2026

Copy link
Copy Markdown
Owner

🎉 This PR is included in version 1.4.0-dev.4 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

renovate Bot added 18 commits June 2, 2026 11:52
…actions

chore(deps): update github artifact actions to v7
chore(deps): update dependency ruff to v0.15.16
chore(deps): update dependency ruff to v0.15.17
…ustom-component-0.x

chore(deps): update dependency pytest-homeassistant-custom-component to v0.13.339
chore(deps): update dependency ruff to v0.15.18
chore(deps): update actions/checkout action to v7
…ustom-component-0.x

chore(deps): update dependency pytest-homeassistant-custom-component to v0.13.340
chore(deps): update dependency ruff to v0.15.19
chore(deps): update actions/setup-python action to v6.3.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: config flow Related to configuration flow area: coordinator Related to data coordinator area: sensors Related to sensor entities documentation Improvements or additions to documentation needs testing Released on dev branch, needs testing before production release released on @dev size:XXL This PR changes 1000+ lines, ignoring generated files. Test needed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants