Практична побудова GitHub Actions workflow для Python/Playwright-проєкту: triggers, lint, smoke і regression jobs, підготовка runner, artifacts із reports/traces, діагностика відмінностей між локальним та CI-запуском і публікація HTML report через GitHub Pages.
Примітка: конспект укладено за автоматичними українськими субтитрами; назви GitHub Actions, `uv`, pytest і Playwright API нормалізовано за контекстом відео.
Після цього уроку ви зможете
Описати triggers і jobs GitHub Actions workflow.
Підготувати runner для lint та Python/Playwright tests.
Передавати reports і traces між jobs через artifacts.
Локалізувати CI-only failure через logs, точну test command і Trace Viewer.
Опублікувати статичний report через GitHub Pages workflow.
Workflow починається з назви та triggers. Для перевірки змін використовується pull_request, для регулярного прогону — schedule, а workflow_dispatch дозволяє запустити вибраний набір вручну. Scheduled run є прийнятним компромісом, коли deployment events або сам delivery pipeline ще нестабільні, але команді вже потрібен регулярний feedback.
Перша job виконує checkout репозиторію, налаштовує uv і Python, встановлює dependencies, запускає Ruff та format check. Checkout обов’язковий, бо runner стартує без коду проєкту.
Що змінилося після запису
Що змінилося після запису
У відеоWorkflow у відео окремо налаштовує uv і Python.
АктуальноПоточний setup-uv може встановити Python через uv, тому actions/setup-python не є обов’язковим. Окремий setup-python може залишатися виправданим через runner tool cache.
Що змінилосяsetup-uv v9.0.0 перевірено 2026-07-31; точну дату появи Python management у цьому brief не встановлено.
Термін
Playwright CI setup
Мінімальна послідовність для browser tests у CI: checkout, Python/dependency setup, встановлення browser dependencies, запуск pytest і збереження diagnostic artifact.
Термін
setup-uv
GitHub Action, який встановлює uv і додає його до PATH; dependencies усе одно встановлюються окремою uv command, а Python може керувати сам uv.
Test job повторює підготовку середовища, встановлює Chromium для Playwright і запускає pytest з відповідними markers. Smoke, regression, API та UI перевірки повинні мати явні набори запуску; в міру зростання проєкту їх краще рознести по окремих workflow, якщо вони мають різні triggers, dependencies або час виконання.
Markers треба переглядати як продуктову класифікацію, а не разове маркування: smoke suite має залишатися малим і відповідати на питання, чи застосунок узагалі придатний до глибшої перевірки. Regression містить ширше покриття й не повинен блокувати ранній feedback від smoke.
Багато CI-систем встановлюють стандартну environment variable CI. Проєкт читає її, щоб увімкнути CI-специфічні налаштування: headless browser, відсутність локального video recording або іншу політику traces. Це дозволяє зберегти один кодовий шлях із мінімальною конфігураційною різницею.
Зміни комітяться й пушаться в task branch, після чого результат перевіряється не лише за загальним статусом, а й за logs конкретної job.
Повторювані checkout, setup uv, setup Python та install dependencies винесено у локальний composite action. Input install-playwright вмикає браузерні залежності лише для jobs, яким вони потрібні. Це виправдане перевикористання, бо той самий setup уже виконується в smoke і regression jobs.
Після тестів workflow завантажує HTML report і Playwright traces як artifacts. Для них задається retention, наприклад 14 днів: це тимчасові діагностичні результати, а не постійне сховище. HTML report зберігається завжди, traces — переважно після failure.
Що змінилося після запису
Що змінилося після запису
У відеоSmoke і regression jobs передають reports/results через artifacts.
Актуальноupload-artifact v4+ створює immutable artifacts: кілька jobs не можуть дописувати один artifact з однаковим name. Smoke і regression outputs потребують унікальних names і явного merge у publish job.
Що змінилосяupload-artifact v4; перевірено за GitHub Docs 2026-07-31.
Термін
Artifact
Файл або набір файлів, створений під час workflow run і збережений GitHub для обміну між jobs або подальшого завантаження.
Перед CI-запуском переглядаються pytest markers: частина тестів переноситься зі smoke до regression, окремо позначаються API, web і Selenium paths. Після відкриття pull request треба ще раз перевірити diff, reviewers і checks, щоб випадково не опублікувати зайві файли або credentials.
Перший pipeline закономірно знаходить lint і formatting problems. Їх виправляють локально тими самими командами, що виконує CI, комітять і повторюють запуск. CI тут є відтворюваною перевіркою, а не заміною локального feedback loop.
Після зеленого linter smoke tests падають. Рекомендований порядок діагностики: відтворити точну pipeline-команду локально, звузити запуск до suite, а потім до одного тесту. Якщо тест проходить окремо, але падає у suite, треба шукати shared state, порядок виконання, fixture scope або неповне очищення browser context.
Локальний і CI runner також відрізняються потужністю, швидкістю, браузерним режимом і доступами. Тому timeout або race condition може проявлятися лише на одній машині. Logs і artifact trace важливіші за припущення про причину.
Завантажений trace відкривається через Playwright Trace Viewer. Демонстрація виявляє, що hover-стан поводиться інакше на headless CI runner, а сторінка може зберігати неочікуваний authorization state. Тимчасовий fix перевіряється повним smoke-командним запуском, але нез’ясована причина shared state прямо залишається окремою проблемою, а не оголошується остаточно виправленою.
Smoke suite має падати рано й зупиняти беззмістовний regression run, якщо застосунок не завантажився або критичний flow зламаний. Якщо smoke зелений, а regression масово червоний, критерії smoke треба переглянути.
Окрема publish job завантажує artifacts, створені smoke/regression jobs, готує Pages artifact і виконує deployment. Artifact є мостом між runners: файл, створений однією job, не з’являється автоматично на машині іншої job.
У repository settings джерелом Pages обирається GitHub Actions, а environment github-pages отримує правила deployment, сумісні з task branches. Наприкінці workflow ще має test failures, тому урок завершується чесною межею: механізм pipeline і Pages показано, але конкретні нестабільні тести потребують подальшого розбору.
Що змінилося після запису
Що змінилося після запису
У відеоPublish job завантажує report artifacts і deploys GitHub Pages.
АктуальноПоточний official Pages flow вимагає configure-pages, upload-pages-artifact і deploy-pages; deploy job має needs, pages: write, id-token: write, environment github-pages і може повертати canonical page_url.
Що змінилосяПоточний contract перевірено 2026-07-31; одна дата зміни не встановлена.
Термін
Pages artifact
Artifact зі статичними файлами сайту, який передається deployment job для публікації через GitHub Pages.