• Время чтения ~4 мин
  • 23.02.2023

Действия 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 или более. Тем не менее, в качестве введения, я думаю, что это охватывает то, что вам понадобится.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297