mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
85 lines
4.7 KiB
YAML
85 lines
4.7 KiB
YAML
# Скриншоты документации снимаются здесь и только здесь (#246).
|
|
#
|
|
# Съёмка на машине исполнителя даёт байтово разный PNG при одинаковом кадре:
|
|
# сглаживание и хинтинг зависят от окружения. Измерено на истории — пересъёмка
|
|
# в #231 изменила два файла из девяти на 7–8 байт, набор с беты все девять
|
|
# целиком. Одно окружение убирает этот шум насовсем.
|
|
#
|
|
# Джоба ничего не коммитит: она публикует артефакт, который человек принимает
|
|
# локально через `npm run docs:accept -- --reviewed --from=<распакованный>`.
|
|
# Та же конструкция, что у golden-эталонов, и по той же причине: картинки
|
|
# попадают в репозиторий через явное решение, а не через бота.
|
|
name: Docs screenshots
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
ref:
|
|
description: Ветка или SHA, с которого снимать
|
|
required: false
|
|
default: dev
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
capture:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
ref: ${{ inputs.ref }}
|
|
- uses: actions/setup-node@v7
|
|
with:
|
|
node-version: 22
|
|
cache: npm
|
|
- run: npm ci
|
|
# Тот же кэш и тот же отказ от --with-deps, что в smoke/golden (#175, #206):
|
|
# системные библиотеки Chromium уже в образе раннера.
|
|
- name: Кэш браузеров Playwright
|
|
id: pw
|
|
uses: actions/cache@v6
|
|
with:
|
|
path: ~/.cache/ms-playwright
|
|
key: playwright-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
|
|
- name: Install pinned Chromium
|
|
if: steps.pw.outputs.cache-hit != 'true'
|
|
run: npx playwright install chromium
|
|
- name: Build the bundle the screenshots must come from
|
|
run: npm run build
|
|
- name: Capture
|
|
run: node demo/docs/capture.mjs
|
|
# Вердикт до всякой приёмки. Само число изменившихся файлов ничего не
|
|
# говорит: набор, снятый другим браузером, меняет их все, и это нормально
|
|
# ровно один раз — при переходе на канонический прогон. Сравнивать надо
|
|
# браузер: тот же Chromium и десять изменившихся картинок означают, что
|
|
# изменился продукт (или что-то не так), другой Chromium — ожидаемую
|
|
# разницу рендеринга.
|
|
- name: Вердикт
|
|
run: |
|
|
git status --porcelain docs/images
|
|
changed=$(git diff --name-only docs/images | grep -c png || true)
|
|
before=$(git show HEAD:docs/images/screenshots.json | node -e \
|
|
"let s='';process.stdin.on('data',d=>s+=d).on('end',()=>{try{console.log(JSON.parse(s).chromium||'')}catch{console.log('')}})")
|
|
after=$(node -e "console.log(require('./docs/images/screenshots.json').chromium)")
|
|
echo "--- изменившихся PNG: $changed"
|
|
echo "--- Chromium: было «${before:-не записан}», стало «$after»"
|
|
if [ "$before" = "$after" ] && [ "$changed" -gt 0 ]; then
|
|
echo "ВЕРДИКТ: тот же браузер, а картинки изменились — изменился продукт."
|
|
echo "Смотрите на кадры: если изменение ожидаемое, принимайте."
|
|
elif [ "$before" != "$after" ]; then
|
|
echo "ВЕРДИКТ: браузер другой, поэтому переписаны все кадры сразу."
|
|
echo "Это ожидаемо один раз — при переходе на канонический прогон."
|
|
echo "Если Chromium сменился неожиданно, сверьте закреплённую версию в package-lock."
|
|
else
|
|
echo "ВЕРДИКТ: ничего не изменилось, принимать нечего."
|
|
fi
|
|
- name: Upload candidate
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: docs-screenshots
|
|
path: |
|
|
docs/images/*.png
|
|
docs/images/screenshots.json
|
|
if-no-files-found: error
|