Repository navigation
Commit 0fbb5ea
committed
no-mistakes(ci): Hassfest CI failure diagnosed and fixed (2 files). ROOT CAUSE (confirmed against real upstream source, not inferred): the hassfest image discovers integrations from WORKDIR /github/workspace, and
Integration.domain is self.path.name (script/hassfest/model.py); script/hassfest/manifest.py:355 errors when manifest["domain"] != path.name. This repo deliberately keeps the integration at the repo root (hacs.json content_in_root: true, since commit 3ab6ae4), so the discovered directory is the checkout dir ("workspace" in the container) and can never equal "lumentree". hassfest has NO content_in_root exemption anywhere, so the error is unsatisfiable for a root layout. Reproduced with a 1:1 port of entrypoint discovery + Integration.domain + the manifest check: BEFORE -> path.name='workspace' vs domain='lumentree' -> FAIL. Docker is unavailable locally, so the validator logic was ported and executed directly rather than guessed. SECOND (MASKED) DEFECT found while verifying: manifest.py's validate() only calls sort_manifest if not integration.errors, so the domain error was hiding a key-order error. Fixing only the path would just move the failure to "[MANIFEST] Manifest keys are not sorted correctly: domain, name, then alphabetical order". Required order (script/util.py _sort_manifest_keys) is domain, name, then alphabetical. Both had to be fixed. FIX (minimal, 2 files): 1. manifest.json - reordered keys to domain, name, then alphabetical. Semantically identical to HEAD (json.load(old)==json.load(new) -> True); only key order changed. 2. .github/workflows/ci.yml - the hassfest job's actions/checkout@v5 now uses path: custom_components/lumentree, so hassfest discovers a directory actually named after its domain. This is the workaround endorsed in home-assistant/core#152942 (closed not_planned). It relocates only the checkout: no plugin skipped, no check suppressed, no continue-on-error, and the validated file set is unchanged (.github holds no .json/.py, so the json/dependencies plugins see no new input). VERIFICATION: simulated the exact post-fix CI layout -> discovered integration-path=/custom_components/lumentree, domain='lumentree', dir.name='lumentree' -> match -> Hassfest PASS (exit 0). pytest tests/ -q -> 48 passed; ruff check . -> All checks passed; hacs.json untouched (HACS job already passing). The "[CONFIG_SCHEMA]" line in the log is a warning, not an error (hassfest exits 0 with warnings), so it was never the cause. Evidence written to C:\Users\Vokupt\.no-mistakes\evidence\hassfest-diagnosis.md1 parent ddb59d8 commit 0fbb5ea
2 files changed
Lines changed: 21 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
48 | 57 | | |
| 58 | + | |
| 59 | + | |
49 | 60 | | |
50 | 61 | | |
51 | 62 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
4 | 7 | | |
5 | 8 | | |
| 9 | + | |
| 10 | + | |
6 | 11 | | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
7 | 16 | | |
8 | 17 | | |
9 | 18 | | |
10 | 19 | | |
11 | 20 | | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
0 commit comments