ha(H5): README+HACS, скрипт приёмки, релизный чек-лист

- custom_components/fglair/README.md: HACS-установка, cloud/ручной/импорт,
  превью шаблона, сущности, ключ для ESPHome (reconfigure/CLI), диагностика
  и troubleshoot; заглушки screenshots/step-1..8.png (сгенерированы)
- tests/acceptance/test_esphome_ha.py: quick/burst/long через REST API HA
  (long-lived token), адаптивная матрица по capabilities, возврат исходного
  состояния, CSV-отчёт long, опциональный ESPHome-канал (aioesphomeapi)
- self-test приёмки на моке HA REST (6 тестов, без железа)
- hacs.json; README: раздел Home Assistant; docs/RELEASE_HA.md: публикация
  pyfglair на PyPI (wheel/sdist, auditwheel), HACS-релиз, приёмка
- scripts/py-ci.sh: tests/acceptance; план H5 отмечен
This commit is contained in:
2026-09-29 14:42:41 +03:00
parent 4d0bbd1d8e
commit 8013781e09
16 changed files with 739 additions and 3 deletions
+1 -1
View File
@@ -163,4 +163,4 @@ Security → Long-lived access tokens) и REST API: вызов сервисов
| H2 ✅ | компонент: manifest, config flow (облако/ручной/импорт) + пробное подключение |
| H3 ✅ | шаг «превью шаблона» с ручными конверсиями; climate + сущности |
| H4 ✅ | repair, диагностика (ключ для ESPHome), translations |
| H5 | README с HACS-инструкцией и заглушками скриншотов (§6), скрипт приёмки (§7), HACS-релиз; публикация `pyfglair` на PyPI (manylinux x86_64/aarch64, cibuildwheel) — штатный installer HA резолвит `requirements` только оттуда |
| H5 ✅ | README с HACS-инструкцией и заглушками скриншотов (§6), скрипт приёмки (§7), hacs.json; публикация `pyfglair` на PyPI (manylinux x86_64/aarch64) — релизное действие, чек-лист `docs/RELEASE_HA.md` |
+55
View File
@@ -0,0 +1,55 @@
# Чек-лист релиза HA-интеграции (H5)
## 1. Публикация pyfglair
Манифест компонента требует `pyfglair>=1.0.0`; штатный installer HA
резолвит требования только через PyPI.
```sh
# на каждой целевой архитектуре (linux x86_64/aarch64):
.venv/bin/python -m build --wheel # py3-none-linux_<arch>.whl с .so и mbedtls
.venv/bin/python -m build --sdist # sdist с C++-исходниками (MANIFEST.in)
twine upload dist/*
```
Проверки перед публикацией:
* `scripts/py-ci.sh` — 28 pyfglair + 47 components + 6 acceptance self-test;
* `scripts/ci.sh` — ядро (gcc/clang, ASan/UBSan) 11/11;
* `readelf -d pyfglair/libfgl-aircon.so*` — нет внешней `libmbedcrypto`
(mbedtls встроен);
* `auditwheel show dist/pyfglair-*.whl` — платформа совместима с manylinux
(зависимости: libstdc++/libc);
* установка wheel в чистый venv вне репозитория: `import pyfglair.session`.
При невозможности публикации wheel для какой-то архитектуры в манифесте
можно указать прямую ссылку на wheel, но это лишает HACS-пользователей
других архитектур; предпочтителен PyPI.
## 2. HACS
* Репозиторий содержит `custom_components/fglair/` и `hacs.json` (name).
* Заполнить `codeowners` в `custom_components/fglair/manifest.json`
(GitHub-хендлы владельцев; сейчас пустой список — допустимо для custom
repository, но не для выкладки в HACS по умолчанию).
* Проверить `documentation`/`issue_tracker` в манифесте (актуальные URL).
* Заменить заглушки `custom_components/fglair/screenshots/step-N.png`
реальными скриншотами (описания «что должно быть видно» — в README).
* Добавить brand-ассеты (`custom_components/fglair/brand/icon.png`,
`logo.png`) при выкладке в HACS.
* Создать git-тег (semver) и указать его в HACS-релизе.
## 3. Приёмка на живом стенде
* `tests/acceptance/test_esphome_ha.py quick` — матрица изменений
(HA; при наличии ESPHome-компонента — обе стороны), с возвратом.
* `--long --hours 24` — суточный прогон с CSV-отчётом.
* Проверить сценарии: 503 (два слота заняты), key_error и Repair,
offline/восстановление, несколько устройств (разные порты прослушивания),
reconfigure без потери конверсий.
## 4. Ограничения текущего стенда
* Реального железа/облака в CI нет: протокол проверен mock-модулем
(`tests/ayla/mock_ac.py`), облако — мок-сервером.
* Суточный soak и работа с реальными re-key — только на приборе.