mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
Validate / hacs (push) Failing after 15s
Validate / hassfest (push) Failing after 13s
Validate / provenance (push) Successful in 43s
Validate / process-gate (push) Failing after 44s
Validate / frontend (push) Successful in 6m54s
Validate / backend (push) Failing after 10m31s
Validate / golden (push) Failing after 9m38s
Validate / performance_smoke (push) Failing after 10m29s
Validate / smoke (push) Failing after 29m50s
Full Performance / performance (push) Failing after 1h43m37s
gh workflow run answered 404: workflow_dispatch and schedule both resolve the workflow file against the default branch, and the file sat only in dev. The same trap as the process pipeline — even documented in that file's header — and still stepped in a second time. The job itself checks out dev, so running from main tests exactly the code it should. Issue: #85 User-Visible: no
62 lines
2.5 KiB
YAML
62 lines
2.5 KiB
YAML
name: Mutation gate
|
|
|
|
# Реестр известных поломок (issue #85): каждый мутант ломает продуктовый код
|
|
# известным способом, и объявленный тест ОБЯЗАН на этом покраснеть. Тест,
|
|
# оставшийся зелёным на сломанном коде, ничего не защищает — он лишь выглядит
|
|
# защитой, и это хуже его отсутствия.
|
|
#
|
|
# Прогон дорогой: пересборка бандла на каждого мутанта. Поэтому он не входит в
|
|
# Validate и не идёт на каждый push. Его место — перед стабильным релизом
|
|
# (PROCESS.md §8) и раз в неделю по расписанию, чтобы дрейф тестов не копился
|
|
# до релиза. Дешёвая половина — «якоря патчей живы, guard-файлы существуют» —
|
|
# идёт с обычными юнитами: test/mutation-gate.test.mjs.
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
schedule:
|
|
# Понедельник, 05:20 UTC — до начала рабочего дня владельца.
|
|
- cron: '20 5 * * 1'
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: mutation-gate
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
mutants:
|
|
runs-on: ubuntu-latest
|
|
# Шесть мутантов × (сборка + браузерный смок) — это десятки минут, и это
|
|
# нормально: гейт предрелизный. Час — потолок против зависшего Chromium.
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: dev
|
|
fetch-depth: 0
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 22
|
|
cache: npm
|
|
|
|
- run: npm ci
|
|
|
|
- name: Кэш браузеров Playwright
|
|
id: pw
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cache/ms-playwright
|
|
key: playwright-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
|
|
|
|
- name: Установить Chromium
|
|
if: steps.pw.outputs.cache-hit != 'true'
|
|
run: npx playwright install --with-deps chromium
|
|
|
|
- name: Реестр применим к текущему коду
|
|
run: node scripts/mutation-gate.mjs --check
|
|
|
|
- name: Каждый тест ловит свою поломку
|
|
run: node scripts/mutation-gate.mjs
|