Действия GitHub — это фантастический способ запуска рабочих процессов непрерывной интеграции, от выполнения тестов до проверки статического анализа и многого другого.
В приложениях Laravel крайне важно запускать рабочие процессы, чтобы убедиться, что ваш код соответствует определенному стандарту. До того, как у нас появился конвейер CI, мы запускали все эти рабочие процессы локально, что вызывало проблемы, когда другие забывали их запускать.
В этом уроке я расскажу о настройке ваших действий GitHub для ваших приложений Laravel, чтобы вы могли с радостью сидеть сложа руки и убедиться, что ваш код готов к запуску.
Началом этого процесса является добавление каталога в корень проекта, .github/workflows
. Здесь мы добавляем наши файлы рабочих процессов, чтобы GitHub мог взять каждый из них и запустить его отдельно. С этого момента вы можете проектировать свои рабочие процессы так, как вам нужно, от отдельных рабочих процессов для каждой части до объединения их всех в один рабочий процесс.
Я начну с тестового рабочего процесса, так как это наиболее вероятный для начала. Даже если вы реализуете этот рабочий процесс, вы сделали шаг в правильном направлении.
Я не буду делать полное пошаговое руководство о том, как вы должны создавать действия GitHub, так как это довольно сложная тема, которая очень специфична для того, как вы хотели бы их реализовать. Рабочий процесс будет выстраиваться шаг за шагом, позволяя понять, как это работает.
name: Run tests
on: [push]
Начнем с того, что нам нужно дать рабочему процессу имя, то, что GitHub будет использовать для отображения того, что происходит. Затем мы добавляем запись on
, сообщая GitHub, на каких событиях должен выполняться этот рабочий процесс. Здесь можно добавить несколько событий, и существует широкий спектр событий, которые вы можете использовать.
Следующим шагом является определение заданий, которые мы хотим иметь возможность выполнять. Каждый рабочий процесс может иметь несколько заданий. Однако, как правило, я придерживаюсь одного задания на рабочий процесс, чтобы сделать его простым.
name: Run tests
on: [push]
jobs:
tests:
name: Run tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv
coverage: none
- name: Run composer install
run: composer install -n --prefer-dist
- name: Prepare Laravel Application
run: |
cp .env.ci .env
php artisan key:generate
- name: Run tests
run: php artisan test
У нашей работы есть имя, которое GitHub может использовать в качестве метки при отображении происходящего. Нам нужно определить, на чем будет выполняться это задание. Здесь я использую ubuntu-latest
, так как это, как правило, мое целевое развертывание. Здесь есть много вариантов, ориентированных на конкретные версии ОС и даже различные доступные операционные системы. Затем наша работа состоит из нескольких шагов, которые задание должно выполнить для выполнения, от проверки кода до выполнения того, что необходимо выполнить.
Большинство заданий начинаются с действия по оформлению заказа, официального действия команды GitHub. Я использую здесь версию 3, потому что она поддерживает последнюю версию узла для любого JavaScript в моем проекте. Если вам нужна определенная версия узла, просмотрите заметки о выпуске каждой версии, чтобы убедиться, что вы соответствуете вашим требованиям.
Затем мы используем действие shivammathur/setup-php@v2
, которое мы используем для настройки нашей среды PHP. Передача нашей версии PHP и любых расширений PHP, которые необходимо установить.
Затем мы устанавливаем наши зависимости PHP, чтобы обеспечить бесперебойную установку, когда дело доходит до развертывания позже. На каждом шаге можно выполнить либо упакованное действие, либо команду CLI, которую можно выполнить. Затем мы настраиваем наше приложение Laravel, выполняя любые ремесленные команды или что-то еще, что нам может понадобиться. В моем проекте я использую базу данных SQLite, выполняемую в памяти, для моей тестовой базы данных. Если вы используете что-то другое, есть довольно много доступных вариантов, которые хорошо документированы. Все, что я делаю в своем, это копирую указанный файл .env.ci
в файл .env
, который будет использовать приложение. Затем мы можем сгенерировать ключ шифрования приложения с помощью команды artisan.
Нашим последним шагом является запуск нашего набора тестов, который я использую с помощью команды artisan test. Вы можете вызвать тестовый двоичный файл самостоятельно или использовать команду artisan. В эту команду также можно добавить любые дополнительные параметры, которые могут потребоваться для отладки потенциальных сбоев тестирования в CI.
Теперь, когда наш первоначальный рабочий процесс запущен, мы можем взглянуть на другой. На этот раз мы будем использовать один из моих любимых рабочих процессов для запуска, статический анализ. Как многие, возможно, уже знают, я откровенный разработчик, который всегда размахивает флагом статического анализа.
В следующей части я не буду проходить все этапы снова. Вместо этого мы сосредоточимся на заключительной
name: Static Analysis
on: [push]
jobs:
phpstan:
name: phpstan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
coverage: none
- name: Install composer dependencies
run: composer install -n --prefer-dist
- name: Run Static Analysis
run: ./vendor/bin/phpstan --error-format=github
части.Поскольку нам не нужно запускать приложение, на этот раз нам не нужно беспокоиться обо всех зависимостях PHP. Нашим последним шагом является запуск самого статического анализа. Лично я использую PHPStan для своего статического анализа. Однако это будет работать с любой из доступных библиотек статического анализа. Я передаю флаг error-format
, чтобы любые потенциальные ошибки были в формате, который GitHub может понять и предназначен для среды CI.
Вы можете пойти дальше, например, запустить Laravel Pint или более. Тем не менее, в качестве введения, я думаю, что это охватывает то, что вам понадобится.