From 1a8b48035507bdfe6451f214cf95306af9b62cfa Mon Sep 17 00:00:00 2001 From: Codex Date: Thu, 27 Aug 2026 18:46:53 +0300 Subject: [PATCH] ci: every workflow and job carries a human-readable Russian name Owner decision (chat, 2026-08-27): the running check's name must say what it does, in Russian. Scripts locate workflows by file name (release-gate.mjs -> validate.yml), so display names are free; job ids and needs are untouched. The same content is cherry-picked to main because release workflows execute from the default branch and process.yml must stay identical in main and dev. Issue: #327 User-Visible: no --- .github/workflows/announce.yml | 3 ++- .github/workflows/docs-screenshots.yml | 3 ++- .github/workflows/mutation-gate.yml | 3 ++- .github/workflows/performance.yml | 3 ++- .github/workflows/process.yml | 4 +++- .github/workflows/publish-prerelease.yml | 6 +++++- .github/workflows/release-zip.yml | 3 ++- .github/workflows/release.yml | 5 ++++- .github/workflows/validate.yml | 16 +++++++++++++++- 9 files changed, 37 insertions(+), 9 deletions(-) diff --git a/.github/workflows/announce.yml b/.github/workflows/announce.yml index 66c6f39d..08327464 100644 --- a/.github/workflows/announce.yml +++ b/.github/workflows/announce.yml @@ -1,4 +1,4 @@ -name: Announce release +name: Анонс релиза # Telegram notifications for t.me/ha_houseplan (owner request, 2026-08-07). # Stable releases are announced; prereleases are deliberately silent. # workflow_dispatch exists purely as a connectivity test button and therefore @@ -36,6 +36,7 @@ permissions: contents: read jobs: telegram: + name: Оповещение в Telegram (только стабильные) if: ${{ github.event_name == 'workflow_dispatch' || (github.event_name == 'release' && github.event.release.prerelease == false) || (github.event_name == 'workflow_call' && inputs.prerelease == false) }} runs-on: ubuntu-latest steps: diff --git a/.github/workflows/docs-screenshots.yml b/.github/workflows/docs-screenshots.yml index 92de4ad8..3a021777 100644 --- a/.github/workflows/docs-screenshots.yml +++ b/.github/workflows/docs-screenshots.yml @@ -9,7 +9,7 @@ # локально через `npm run docs:accept -- --reviewed --from=<распакованный>`. # Та же конструкция, что у golden-эталонов, и по той же причине: картинки # попадают в репозиторий через явное решение, а не через бота. -name: Docs screenshots +name: Скриншоты документации on: workflow_dispatch: @@ -24,6 +24,7 @@ permissions: jobs: capture: + name: Съёмка и сверка скриншот-индекса runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 diff --git a/.github/workflows/mutation-gate.yml b/.github/workflows/mutation-gate.yml index 55d77621..d9af24e8 100644 --- a/.github/workflows/mutation-gate.yml +++ b/.github/workflows/mutation-gate.yml @@ -1,4 +1,4 @@ -name: Mutation gate +name: Мутационный гейт # Реестр известных поломок (issue #85): каждый мутант ломает продуктовый код # известным способом, и объявленный тест ОБЯЗАН на этом покраснеть. Тест, @@ -31,6 +31,7 @@ concurrency: jobs: mutants: + name: "Мутанты: каждый обязан красить тесты" runs-on: ubuntu-latest # Все мутанты × (сборка + свой guard) — это десятки минут, и это нормально: # гейт предрелизный. Час — потолок против зависшего Chromium. diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml index 599648ba..3fd73776 100644 --- a/.github/workflows/performance.yml +++ b/.github/workflows/performance.yml @@ -1,4 +1,4 @@ -name: Full Performance +name: Полные бенчмарки производительности on: # Every main promotion is a stable-release candidate and must have an @@ -24,6 +24,7 @@ concurrency: jobs: performance: + name: Бенчмарки рендера и геометрии # Every profile keeps base and candidate sequential on one hosted runner. # Independent profile pairs run in parallel: cross-profile timing is never # compared, while serialising all five pairs cannot fit the job timeout. diff --git a/.github/workflows/process.yml b/.github/workflows/process.yml index 0604ef5a..ec41b543 100644 --- a/.github/workflows/process.yml +++ b/.github/workflows/process.yml @@ -1,4 +1,4 @@ -name: Process +name: Ревью-конвейер # Событийный конвейер процесса (PROCESS.md). Смена статусной метки — это # сообщение: она порождает событие, событие запускает следующий шаг. @@ -35,6 +35,7 @@ permissions: jobs: guard: + name: "Страж: ребейз на dev и предпосылки ревью" runs-on: ubuntu-latest outputs: stage: ${{ steps.decide.outputs.stage }} @@ -162,6 +163,7 @@ jobs: echo "limit=$limit" >> "$GITHUB_OUTPUT" review: + name: "Ревью (Claude): вердикт в issue" needs: guard if: needs.guard.outputs.stage != '' runs-on: ubuntu-latest diff --git a/.github/workflows/publish-prerelease.yml b/.github/workflows/publish-prerelease.yml index 7fd6be79..19991da3 100644 --- a/.github/workflows/publish-prerelease.yml +++ b/.github/workflows/publish-prerelease.yml @@ -1,4 +1,4 @@ -name: Publish prerelease +name: Публикация пре-релиза (ручная) run-name: Publish ${{ inputs.tag }} on: @@ -19,6 +19,7 @@ concurrency: jobs: gate: + name: "Гейт: зелёная Проверка и релизный контракт" runs-on: ubuntu-latest outputs: sha: ${{ steps.candidate.outputs.sha }} @@ -61,6 +62,7 @@ jobs: run: node scripts/release-gate.mjs "$SHA" publish: + name: Публикация тега и релиза needs: gate runs-on: ubuntu-latest outputs: @@ -198,6 +200,7 @@ jobs: # A manual step after a successful release is the worst kind: by the time it is # due, the work already looks finished, which is exactly why it gets forgotten. close-merged: + name: Закрытие вошедших issue needs: [gate, publish] if: ${{ needs.publish.outputs.newly_published == 'true' }} runs-on: ubuntu-latest @@ -245,6 +248,7 @@ jobs: } announce: + name: Комментарий о публикации needs: [gate, publish] if: ${{ needs.publish.outputs.newly_published == 'true' }} uses: ./.github/workflows/announce.yml diff --git a/.github/workflows/release-zip.yml b/.github/workflows/release-zip.yml index c1547ecd..a2545897 100644 --- a/.github/workflows/release-zip.yml +++ b/.github/workflows/release-zip.yml @@ -1,4 +1,4 @@ -name: Attach HACS zip to release +name: HACS-zip к релизу # hacs.json declares zip_release + filename=houseplan.zip, so every release # (prereleases included) must carry the asset — HACS installs from it and # GitHub's public download counter becomes a free per-version install metric @@ -19,6 +19,7 @@ permissions: contents: write jobs: zip: + name: Собрать houseplan.zip и приложить к релизу runs-on: ubuntu-latest steps: - name: Resolve tag diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ee070acc..ba5e34d1 100755 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Release +name: "Релиз: ассеты после зелёной проверки" on: release: types: [published] @@ -14,6 +14,7 @@ jobs: # Needs a push with a token that has the `workflow` scope (the ordinary # Personal Access Token used for `git push` refuses workflow file updates). gate: + name: "Гейт: зелёная Проверка точного SHA тега" runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 @@ -44,6 +45,7 @@ jobs: SHA=$(git rev-parse HEAD) node scripts/release-gate.mjs "$SHA" --workflow=performance.yml --label="Full Performance" build: + name: Сборка бандла и загрузка ассетов needs: gate runs-on: ubuntu-latest steps: @@ -71,6 +73,7 @@ jobs: with: files: dist/houseplan-card.js hacs-discovery: + name: HACS-видимость пре-релиза (порядок бет) # HACS 2.0.x takes the first prerelease in GitHub's response instead of # sorting SemVer. A valid asset can therefore be invisible to beta users # (beta.10 appeared after beta.9). Keep the release asset, but diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index eef37a4c..515fbc62 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -1,4 +1,4 @@ -name: Validate +name: Проверка (CI) on: push: @@ -22,6 +22,7 @@ concurrency: jobs: docs: + name: "Документация: гайды, ченджлоги, скриншот-индекс" runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 @@ -34,6 +35,7 @@ jobs: # совпадать в `main` и `dev`. До этой проверки совпадение держалось на # дисциплине: каждая правка требовала двух пушей и ручной сверки. process-workflow-sync: + name: "Процесс: process.yml идентичен в main и dev" runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 @@ -53,6 +55,7 @@ jobs: fi provenance: + name: "Провенанс коммитов: трейлеры и эталоны" runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 @@ -76,6 +79,7 @@ jobs: # где нарушение правила №1 ловится машиной. Job независимый: краснеет сам и # не роняет остальные, откат — удалить его отсюда, скрипт остаётся рабочим. process-gate: + name: "Процессный гейт: диапазон, трейлеры, статусы issue" runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 @@ -104,6 +108,7 @@ jobs: # экономят на ветках задач, где Validate — ранний сигнал: настоящую приёмку # там делает код-ревью, которое гоняет гейты само (#127). changes: + name: Классификация изменённых файлов runs-on: ubuntu-latest outputs: frontend: ${{ steps.classify.outputs.frontend }} @@ -158,6 +163,7 @@ jobs: # CARD_VERSION и package.json входят в фингерпринт, поэтому ключи кандидата # заведомо новые и полный набор гейтов перед бетой и релизом идёт всегда. reuse: + name: "Переиспользование: это дерево уже проверено" runs-on: ubuntu-latest outputs: smoke: ${{ steps.probe.outputs.smoke }} @@ -237,6 +243,7 @@ jobs: waive backend "$BACKEND" hacs: + name: "HACS: валидация репозитория" needs: changes if: needs.changes.outputs.integration == 'true' runs-on: ubuntu-latest @@ -248,6 +255,7 @@ jobs: category: integration hassfest: + name: "Hassfest: манифест интеграции" needs: changes if: needs.changes.outputs.integration == 'true' runs-on: ubuntu-latest @@ -257,6 +265,7 @@ jobs: uses: home-assistant/actions/hassfest@master frontend: + name: "Фронтенд: типы, юниты, мутанты, синхрон бандла" needs: changes if: needs.changes.outputs.frontend == 'true' runs-on: ubuntu-latest @@ -278,6 +287,7 @@ jobs: run: cmp dist/houseplan-card.js custom_components/houseplan/frontend/houseplan-card.js smoke: + name: Смоки в браузере (шард ${{ matrix.shard }} из 3) # Gated on `frontend` so a typecheck failure does not burn browser minutes. needs: [frontend, reuse] if: needs.reuse.outputs.smoke != 'true' @@ -350,6 +360,7 @@ jobs: # Маркер переиспользования пишется ОДИН раз и только когда прошли все шарды: # частично прогнанная матрица не имеет права выглядеть как выполненная работа. smoke_done: + name: "Смоки: все шарды зелёные" needs: [smoke, reuse] if: needs.reuse.outputs.smoke != 'true' runs-on: ubuntu-latest @@ -370,6 +381,7 @@ jobs: key: reuse-smoke-${{ needs.reuse.outputs.smoke_key }} golden: + name: Golden-кадры против принятых эталонов # Deterministic visual correctness stays in every prerelease gate: it is # inexpensive and catches a different class of regressions than timings. needs: [frontend, reuse] @@ -432,6 +444,7 @@ jobs: key: reuse-golden-${{ needs.reuse.outputs.golden_key }} performance_smoke: + name: "Перф-смок: бюджет времени кадра" # Candidate-only catastrophic-regression guard for ordinary pushes and # prereleases. The expensive same-runner comparison lives in performance.yml. needs: [frontend, reuse] @@ -494,6 +507,7 @@ jobs: key: reuse-performance_smoke-${{ needs.reuse.outputs.performance_smoke_key }} backend: + name: "Бэкенд: pytest в Home Assistant" needs: [changes, reuse] if: needs.changes.outputs.backend == 'true' && needs.reuse.outputs.backend != 'true' runs-on: ubuntu-latest