Как запускать CI-тесты с помощью GitHub Actions ⚙️

Благодаря GitHub Actions мы можем очень быстро настроить рабочие процессы для нашего git-репозитория без какой-либо конфигурации со стороны платформы GitHub. Действительно, нам просто нужно создать специальный файл .yml в папке .github/workflows вашего репозитория.

Наличие CI, запускаемого при каждом «git pull» (или запланированного с помощью настройки cron в GitHub Action), повышает качество каждого pull-запроса, сделанного для вашего проекта.
Вы можете запускать инструменты проверки производительности (PHPStan), анализа кода (ESLint/Prettier), скрипты форматирования (PHP CS/CodeSniffer), модульные тесты и т.д.

Создайте свой первый GitHub Action 🎉

В этой статье мы создадим действие GitHub, которое запускает модульные тесты вашего приложения. Однако вы можете создать буквально любое действие GitHub для рабочих процессов вашего репозитория 😃.

Сначала перейдите в свой репозиторий GitHub, а затем создайте .github/workflows.

В папке workflows создайте файл под названием test.yml или ci.yml.

Внутри него вы начнете с названия CI Action (как оно будет отображаться на вкладке GitHub Actions).

В нашем примере, давайте сделаем name: Tests 🙂 .

Затем вы можете упомянуть, какое событие вы хотите, чтобы GitHub слушал благодаря on:. Я обычно упоминаю on: [push,pull_request]. Таким образом, он будет запускаться при каждом git push и pull request.

Затем мы можем начать объявлять задания нашего GitHub Action, jobs: run:, где мы упоминаем каждое действие, которое мы хотим, чтобы задание выполнялось для нас.

runs-on — это на какой ОС вы хотите, чтобы задание выполнялось. В моем случае это будут только Linux и Windows, поэтому я могу упомянуть runs-on: [ 'ubuntu-latest', 'windows-latest' ]. Суффикс -latest означает, что будет использоваться самая новая из доступных ОС.

Итак, на данный момент мы имеем следующее 👇

name: Tests

on: [push, pull_request]

jobs:
  run:
    runs-on: [ 'ubuntu-latest', 'windows-latest' ]
    strategy:
      matrix:
        php-versions: ['7.3', '7.4', '8.0', '8.1']
    name: PHP ${{ matrix.php-versions }} Test on ${{ matrix.os }}

    # The set of steps will be below
    steps:
Вход в полноэкранный режим Выйти из полноэкранного режима

Теперь мы можем упомянуть шаги для заданий нашего GitHub Action. Это те шаги, которые должны выполняться каждый раз при запуске нашего GitHub Action.

- name: Checkout
  uses: actions/checkout@v2

- name: Setup PHP
  uses: shivammathur/setup-php@v2
  with:
    php-version: ${{ matrix.php-versions }}
    extensions: mbstring
    coverage: none
    tools: phpunit:${{ matrix.phpunit-version }}, composer:v2

- name: Check PHP Version
  run: php -v

- name: Check Composer Version
  run: composer -V

- name: Validate composer.json & composer.lock
  run: composer validate --strict

- name: Install PHP dependencies
  run: composer install --no-interaction --no-progress --no-suggest

- name: Run Test Suite
  run: vendor/bin/phpunit
Войти в полноэкранный режим Выйти из полноэкранного режима

Несколько шагов задания, таких как

- name: Check PHP Version
  run: php -v
Войти в полноэкранный режим Выход из полноэкранного режима

и

- name: Check Composer Version
  run: composer -V
Войти в полноэкранный режим Выход из полноэкранного режима

предназначены для получения дополнительной информации о версии, запущенной на вашем CI, на случай, если вам понадобится расследовать проблему, поступившую с вашего GitHub Action.


И следующее

- name: Validate composer.json & composer.lock
  run: composer validate --strict
Войти в полноэкранный режим Выйти из полноэкранного режима

используется для проверки файла composer.json перед установкой зависимостей.

Наконец, на последнем шаге будут выполнены модульные тесты

- name: Run Test Suite
  run: vendor/bin/phpunit
Вход в полноэкранный режим Выход из полноэкранного режима

Как только вы закончите с настройкой вашего CI-файла, GitHub автоматически запустит ваше новое действие рабочего процесса, которое вы только что добавили.

При новом коммите pushed или pull request (в зависимости от того, какое событие у вас настроено (on: [push,pull_request])), GitHub покажет статус каждого запуска CI.


👆 Вот, CI для Pull Request показывает, что все шаги пройдены ✅



👆 Вот, задание Action прошло ✅



*👆 Там задание не выполнено из-за ошибки в модульном тесте ❌ *


Скорость и кэширование

При использовании CI всегда полезно кэшировать необходимые зависимости. Некоторые CI (Travis, Circle CI или другие) не бесплатны, и вам придется платить за их использование. Когда вы кэшируете их, они становятся быстрее и потребляют меньше ресурсов. Таким образом, их выполнение также будет дешевле.

Если вы используете Composer, вы можете добавить эти два шага в задания вашего GitHub Action.

- name: Get Composer Cache Directory
  id: composer-cache
  run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache Composer dependencies
  uses: actions/cache@v2
  with:
  path: ${{ steps.composer-cache.outputs.dir }}
  key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
  restore-keys: ${{ runner.os }}-composer-
Вход в полноэкранный режим Выйти из полноэкранного режима

Примечание: Вы также можете использовать хэш коммита key: mycache-${{ github.sha }} в качестве ключа кэша для обновления кэша при публикации нового коммита. Это обычно полезно, если ваш проект — просто библиотека, и ваш composer.lock не будет изменен.

С помощью NPM

- name: Cache NPM deps
  uses: actions/cache@v2
  with:
    path: ~/.npm
    key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
    restore-keys: ${{ runner.os }}-npm-

Войти в полноэкранный режим Выйти из полноэкранного режима

Если вы используете Pipenv с Python,

- name: Cache Pipenv
  uses: actions/cache@v2
  with:
    path: |
      ~/.cache/pip
      ~/.cache/pipenv
      ~/.local/share/virtualenvs/
    key: pip-pipenv-${{ hashFiles('Pipfile.lock') }}
    restore-keys: pip-pipenv-
- uses: actions/setup-python@v2
  with:
    python-version: 3.9
- run: pip install pipenv
- run: pipenv install --deploy --dev
Войти в полноэкранный режим Выйти из полноэкранного режима

Ресурс: GitHub: Кэширование зависимостей для ускорения рабочих процессов.

Пример 👉 https://github.com/pH-7/pH2Gravatar/blob/master/.github/workflows/test.yml

За пределами тестирования действий 🚀

Как я уже говорил, действия GitHub могут использоваться не только для запуска тестов.

Действительно, разработчики часто сталкиваются с тем, что выполняют повторяющиеся задачи, которые можно легко автоматизировать с помощью CI 🎉.

Вы можете использовать действия GitHub для гораздо большего, чем просто запуск тестов, например, для развертывания ваших изменений на GitHub Pages, повторной публикации пакетов NPM или даже для действия, которое создает PR с вашим пост-файлом DEV.to .md.



А вы? Как вы чаще всего используете GitHub Actions? 😄

👉 Наконец, если вы хотите углубиться в PHP или JavaScript/Node, не забудьте заглянуть в мои курсы на Udemy https://www.udemy.com/user/pierresoria/.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *