Налаштування автоматичного запуску тестів при Pull Request

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування автоматичного запуску тестів при Pull Request
Проста
від 1 робочого дня до 3 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування автоматичного запуску тестів при Pull Request

Автоматичний запуск тестів при PR — базовий захист від регресій. Розробник не може об'єднати код, який порушує існуючу функціональність. Це не заміна code review, а його доповнення: рецензент зосереджується на логіці, а не на ловленні явних ошибок.

Структура pipeline

Хорошо структурований pipeline розбивається на паралельні job'и зі стратегією fail-fast:

# .github/workflows/pr.yml
name: PR Tests
on:
  pull_request:
    branches: [main, develop]

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true  # Скасувати старі запуски при новому push

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20, cache: npm }
      - run: npm ci
      - run: npm run lint && npm run type-check

  unit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20, cache: npm }
      - run: npm ci
      - run: npm test -- --coverage
      - uses: codecov/codecov-action@v4
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

  integration:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:16
        env:
          POSTGRES_DB: testdb
          POSTGRES_PASSWORD: test
        options: >-
          --health-cmd pg_isready
          --health-interval 5s
          --health-timeout 5s
          --health-retries 5
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20, cache: npm }
      - run: npm ci
      - run: npm run test:integration
        env:
          DATABASE_URL: postgresql://postgres:test@localhost:5432/testdb

Кешування залежностей

# Кеш node_modules за package-lock.json
- uses: actions/setup-node@v4
  with:
    node-version: 20
    cache: npm  # Вбудований кеш в actions/setup-node

# Або явно через actions/cache
- uses: actions/cache@v4
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}

Без кешу npm ci на холодному раннері — 60–90 секунд. З кешем — 5–10 секунд.

Матриця тестування

Якщо програма повинна працювати на кількох версіях Node.js або PHP:

strategy:
  matrix:
    node-version: [18, 20, 22]
  fail-fast: false  # Запустити всі версії навіть якщо одна впала

PHP / Laravel

- name: Run PHPUnit
  run: php artisan test --parallel --coverage-clover=coverage.xml
  env:
    DB_CONNECTION: pgsql
    DB_DATABASE: testing

- name: Upload coverage
  uses: codecov/codecov-action@v4
  with:
    files: coverage.xml

--parallel запускає тести паралельно через brianium/paratest. На 200+ тестах прискорює в 3–4 рази.

Статус-перевірки та захист гілки

У GitHub Settings → Branches → Branch protection rules додаємо обов'язкові статус-перевірки: lint, unit, integration. Merge в main без проходження цих перевірок неможливий.

Оптимізація швидкості

  • Path filtering — запускати тести тільки при зміні релевантних файлів
  • Test splitting — розподілити тести по кількох раннерах (GitHub Actions matrix)
  • Тільки змінені модулі — Jest --changedSince, pytest --testpaths

Мета: pipeline укладається в 5 хвилин. Повільніше — розробники починають ігнорувати.

Часовий графік

Налаштування базового pipeline з unit та integration тестами для Node.js або PHP проекту — 1–2 дні. Налаштування coverage звітів та badge в README — 0,5 дня.