Шпаргалка по GitHub Actions — стандартная структура и список наиболее полезных действий

Немного о распространённых GitHub Actions и их структуре.

Содержимое страницы

GitHub Actions — это платформа автоматизации и CI/CD внутри GitHub, предназначенная для сборки, тестирования и развертывания кода на основе событий, таких как пуши (push), запросы на слияние (pull requests) или по расписанию.

Помимо стандартного GitHub, вы можете использовать GitHub Actions на самохостинговом сервере Gitea.

github actions flow

Действия (Actions) охватывают официальные, общедоступные и сторонние инструменты, поддерживая автоматизацию от сборки и тестирования до развертывания, управления релизами, QA и уведомлений.


Данное краткое руководство охватывает структуру GitHub Actions, краткое описание и наиболее распространенные действия, используемые в рабочих процессах с открытым исходным кодом и коммерческих проектах. Оно является частью раздела Инструменты разработчика: Полное руководство по современным рабочим процессам.

Базовая структура конфигурации

Рабочие процессы GitHub Actions определяются в YAML-файлах, расположенных в директории .github/workflows внутри репозитория.

name: Workflow Name
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - name: Run tests
        run: npm test
  • Блок on указывает события-триггеры.
  • Каждая job выполняется на своем раннере (runner).
  • steps могут выполнять команды оболочки или вызывать переиспользуемые действия.

Основные компоненты рабочего процесса

Компонент Описание
Workflow Автоматизированный процесс (YAML), запускаемый событием
Event Событие, запускающее рабочий процесс (push, pull_request и т.д.)
Job Последовательность шагов, выполняемых на раннере, могут выполняться последовательно или параллельно
Step Каждая команда или действие в задаче
Runner ВМ или контейнер, где выполняются задачи
Action Переиспользуемое расширение/дополнение, инкапсулирующее задачу

События-триггеры

  • push
  • pull_request
  • schedule (используя синтаксис cron)
  • workflow_dispatch (ручной запуск, позволяет передавать входные параметры)
  • release, issue и др.

Пример:

on:
  push:
    branches: [ main ]
  workflow_dispatch:
    inputs:
      environment:
        description: 'Deployment Environment'
        required: true
        default: 'production'
        type: string

Полезные встроенные действия

Действие Назначение Общие параметры
actions/checkout Клонирование кода репозитория ref, token, submodules, persist-credentials
actions/setup-node Настройка окружения Node.js node-version, cache, architecture, check-latest
actions/setup-python Настройка Python python-version, architecture
actions/cache Кэширование зависимостей path, key, restore-keys
docker/build-push-action Сборка и публикация Docker-образов context, file, platforms, tags, push, build-args
actions/upload-artifact Загрузка артефактов сборки name, path, if-no-files-found
actions/download-artifact Скачивание артефактов name, path
github/email-actions Отправка email-уведомлений to, subject, content, attachments
peter-evans/create-pull-request Создание PR через рабочий процесс branch, title, body, labels, base
actions/github-script Выполнение произвольного JavaScript в рабочем процессе script, github-token

Параметры действий

Общие параметры для любого вызова действия:

- name: Some Action or Step
  uses: owner/repo@ref
  with:
    param1: value
    param2: value
  env:
    ENV_VAR: value
  if: ${{ condition }}
  run: command_to_run
  shell: bash|pwsh|python|sh
  continue-on-error: true|false
  • with: аргументы, передаваемые действию (см. документацию действия для всех опций)
  • env: переменные окружения для шага
  • if: условное выполнение
  • run: команды оболочки (если не используется действие)
  • shell: оболочка, используемая для выполнения шага
  • continue-on-error: продолжить выполнение даже если шаг завершился ошибкой

Определение пользовательских входных данных действия

В метаданных вашего действия (action.yml):

inputs:
  example-input:
    description: 'An example input'
    required: false
    default: 'default-value'

При использовании в рабочем процессе:

- uses: my/action@v1
  with:
    example-input: 'custom-value'

Доступно как переменная окружения INPUT_EXAMPLE_INPUT при выполнении действия.

Пример: Рабочий процесс с ручными параметрами

name: Deploy
on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Deployment Environment'
        required: true
        default: 'production'
        type: string
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Deploy to environment
        run: echo "Deploying to ${{ github.event.inputs.environment }}"

Маркетплейс действий

  • Тысячи переиспользуемых действий доступны в Маркетплейсе GitHub.
  • Категории включают: облачные развертывания, инструменты уведомлений, фреймворки тестирования, анализ кода и многое другое.
  • Изучите: actions/checkout, actions/setup-node, docker/build-push-action, actions/cache, actions/upload-artifact и многие другие.

Полезные советы

  • Размещайте файлы рабочих процессов в .github/workflows.
  • Используйте workflow_dispatch с inputs для ручного запуска с параметрами.
  • Используйте действие cache для ускорения установки зависимостей.
  • Используйте матрицу задач (matrix) для тестирования нескольких версий ОС и среды выполнения.
  • Используйте секреты для конфиденциальных данных, ссылаясь на них как ${{ secrets.SECRET_NAME }}.

Данная шпаргалка охватывает основы использования, настройки и расширения GitHub Actions для автоматизации, CI/CD и других задач. Для получения дополнительной информации и обновлений всегда обращайтесь к официальной документации GitHub и репозиториям действий.

Распространенные действия GitHub Actions

Вот практический список часто используемых действий GitHub, которые помогают автоматизировать CI/CD, тестирование, сборку, развертывание и задачи рабочих процессов:

Основные официальные действия

Действие Назначение Ключевые параметры
actions/checkout Клонирование кода репозитория ref, submodules
actions/setup-node Настройка окружения Node.js node-version, cache
actions/setup-python Настройка окружения Python python-version
actions/setup-java Настройка Java JDK distribution, java-version
actions/cache Кэширование зависимостей и результатов сборки path, key, restore-keys
actions/upload-artifact Загрузка артефактов сборки name, path
actions/download-artifact Скачивание артефактов из рабочего процесса name, path
actions/github-script Выполнение JavaScript с использованием контекста GitHub и API script
actions/create-release Создание релиза GitHub tag_name, release_name
actions/upload-release-asset Загрузка файлов в релиз upload_url, asset_path
actions/labeler Автоматическое применение меток к issue/PR repo-token, configuration-path

Популярные общедоступные и сторонние действия

Действие Назначение
docker/build-push-action Сборка и публикация Docker-образов
actions/setup-go Настройка окружения Go
super-linter/super-linter Универсальная автоматизированная линт-проверка
trufflesecurity/trufflehog Сканирование на наличие секретов и учетных данных
peaceiris/actions-gh-pages Развертывание статических сайтов на GitHub Pages
JamesIves/github-pages-deploy-action Развертывание проектов на GitHub Pages
peter-evans/create-pull-request Автоматическое создание запросов на слияние
softprops/action-gh-release Создание и загрузка релизов GitHub
ad-m/github-push-action Отправка изменений обратно в репозиторий GitHub
actions/setup-dotnet Настройка .NET SDK
azure/login Аутентификация в Azure
google-github-actions/auth Аутентификация в Google Cloud

Действия для тестирования, QA и отчетности

Действие Назначение
actions/setup-ruby Настройка окружения Ruby
codecov/codecov-action Загрузка отчетов о покрытии кода в Codecov
coverallsapp/github-action Загрузка результатов покрытия в Coveralls
dorny/test-reporter Прикрепление результатов тестов к проверкам GitHub
stefanzweifel/git-auto-commit-action Автоматическая фиксация и отправка изменений файлов

Действия для развертывания и уведомлений

Действие Назначение
appleboy/scp-action Загрузка файлов с использованием SCP
SamKirkland/FTP-Deploy-Action Развертывание файлов через FTP/FTPS
cypress-io/github-action Запуск end-to-end тестов Cypress
slackapi/slack-github-action Отправка сообщений в Slack
dawidd6/action-send-mail Отправка email во время выполнения рабочего процесса

Утилиты и управление рабочими процессами

Действие Назначение
peter-evans/repository-dispatch Запуск внешних рабочих процессов репозитория
fregante/setup-git-user Настройка учетных данных Git для коммитов
andymckay/labeler Присвоение меток issue и PR на основе путей
actions/configure-pages Настройка публикации на GitHub Pages
EndBug/add-and-commit Добавление и коммит файлов в рамках рабочего процесса
dangoslen/changelog-enforcer Проверка обновления changelog для PRs

Как найти больше действий

Существует множество действий GitHub, которые позволяют автоматизировать рабочие процессы, такие как автоматическое тестирование, развертывание на продакшен, уведомления и интеграция с другими сервисами. В Маркетплейсе GitHub перечислены тысячи действий по категориям: тестирование, безопасность, развертывание, уведомления, качество кода и интеграции. Кураторские списки, такие как “Awesome Actions”, также отлично подходят для вдохновения и поиска.

Полезные ссылки