Как запускать 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 не будет опубликован. Обязательные поля помечены *