← Python мануфактура

Після цього уроку ви зможете

Конспект і таймкоди

0:00

Створення 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.

Приклад коду

Мінімальна smoke job

name: tests
on:
  pull_request:
  workflow_dispatch:

jobs:
  smoke:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262
      - uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9
      - run: uv sync --frozen
      - run: uv run playwright install --with-deps chromium
      - run: uv run pytest -m smoke

Показує найкоротший workflow path від checkout до smoke tests без винесення setup у composite action.

Очікуваний результат: Pull request або manual dispatch створює smoke job на ubuntu-latest і запускає pytest marker smoke.

Потрібно: GitHub Actions, uv, pytest, Playwright for Python

Практика

Зібрати smoke workflow

  1. Створіть workflow з pull_request і workflow_dispatch.
  2. Запустіть lint та smoke в окремих jobs.
  3. Збережіть report завжди, а traces — після failure.
  4. Навмисно зламайте один smoke test і пройдіть шлях від job log до локального trace.
4:30

Smoke і regression jobs

Test job повторює підготовку середовища, встановлює Chromium для Playwright і запускає pytest з відповідними markers. Smoke, regression, API та UI перевірки повинні мати явні набори запуску; в міру зростання проєкту їх краще рознести по окремих workflow, якщо вони мають різні triggers, dependencies або час виконання.

Markers треба переглядати як продуктову класифікацію, а не разове маркування: smoke suite має залишатися малим і відповідати на питання, чи застосунок узагалі придатний до глибшої перевірки. Regression містить ширше покриття й не повинен блокувати ранній feedback від smoke.

8:30

Поведінка тестів у CI

Багато CI-систем встановлюють стандартну environment variable CI. Проєкт читає її, щоб увімкнути CI-специфічні налаштування: headless browser, відсутність локального video recording або іншу політику traces. Це дозволяє зберегти один кодовий шлях із мінімальною конфігураційною різницею.

Зміни комітяться й пушаться в task branch, після чого результат перевіряється не лише за загальним статусом, а й за logs конкретної job.

11:30

Composite action і artifacts

Повторювані 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 або подальшого завантаження.

16:00

Класифікація тестів і перший pull request

Перед CI-запуском переглядаються pytest markers: частина тестів переноситься зі smoke до regression, окремо позначаються API, web і Selenium paths. Після відкриття pull request треба ще раз перевірити diff, reviewers і checks, щоб випадково не опублікувати зайві файли або credentials.

Перший pipeline закономірно знаходить lint і formatting problems. Їх виправляють локально тими самими командами, що виконує CI, комітять і повторюють запуск. CI тут є відтворюваною перевіркою, а не заміною локального feedback loop.

21:30

Діагностика падінь CI

Після зеленого linter smoke tests падають. Рекомендований порядок діагностики: відтворити точну pipeline-команду локально, звузити запуск до suite, а потім до одного тесту. Якщо тест проходить окремо, але падає у suite, треба шукати shared state, порядок виконання, fixture scope або неповне очищення browser context.

Локальний і CI runner також відрізняються потужністю, швидкістю, браузерним режимом і доступами. Тому timeout або race condition може проявлятися лише на одній машині. Logs і artifact trace важливіші за припущення про причину.

28:00

Trace Viewer і мінімальний smoke gate

Завантажений trace відкривається через Playwright Trace Viewer. Демонстрація виявляє, що hover-стан поводиться інакше на headless CI runner, а сторінка може зберігати неочікуваний authorization state. Тимчасовий fix перевіряється повним smoke-командним запуском, але нез’ясована причина shared state прямо залишається окремою проблемою, а не оголошується остаточно виправленою.

Smoke suite має падати рано й зупиняти беззмістовний regression run, якщо застосунок не завантажився або критичний flow зламаний. Якщо smoke зелений, а regression масово червоний, критерії smoke треба переглянути.

35:30

Публікація report у GitHub Pages

Окрема 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.

Джерела та додаткові матеріали