actions/github-script — это официальный и чрезвычайно популярный экшн от самой команды GitHub.

Это не какой-то специальный язык, это самый обычный, стандартный JavaScript (Node.js).

Его главная прелесть в том, что он позволяет писать логику автоматизации прямо внутри YAML-файлов твоих GitHub Workflows без необходимости создавать отдельные файлы скриптов или разрабатывать собственные сложные экшены.


Зачем он нужен?

Когда мы пишем CI/CD сценарии на чистом Bash/PowerShell, нам часто приходится делать сложные вещи: парсить JSON, делать API-запросы к GitHub, оставлять комментарии в PR, вешать лейблы. Писать такое на Bash с использованием curl и jq — это настоящее мучение (легко ошибиться с кавычками, экранированием и т.д.).

github-script решает эту проблему, давая тебе полноценную среду Node.js прямо в шаге воркфлоу, где уже импортированы и авторизованы все необходимые библиотеки для работы с GitHub.


Какие встроенные объекты он предоставляет?

Внутри скрипта тебе автоматически доступны несколько предопределенных глобальных объектов:

  1. github — это полностью авторизованный клиент Octokit (официальная библиотека для работы с REST API и GraphQL API GitHub). С его помощью можно делать абсолютно всё: создавать issues, одобрять PR, мержить ветки, управлять релизами.
  2. context — объект, содержащий весь контекст текущего запуска (название репозитория, имя автора, данные о триггере, номер PR или коммита). Тебе не нужно парсить переменные окружения вручную.
  3. core — библиотека для управления самим воркфлоу (можно объявлять выходные переменные core.setOutput(), вызывать ошибку core.setFailed() или писать цветные логи).
  4. exec — утилита для быстрого запуска консольных команд операционной системы прямо из JS.

Простой пример использования

Вот как выглядит автоматическое приветствие в новом Issue:

- name: Welcome new issues
  uses: actions/github-script@v7
  with:
    script: |
      github.rest.issues.createComment({
        issue_number: context.issue.number,
        owner: context.repo.owner,
        repo: context.repo.repo,
        body: '👋 Спасибо за создание задачи! Мы рассмотрим её в ближайшее время.'
      })

Почему разработчики его обожают?

  • Безопасность и отсутствие авторизации: Тебе не нужно передавать токены вручную в переменные среды — экшн сам использует встроенный ${{ secrets.GITHUB_TOKEN }}.
  • Кроссплатформенность: Код на JavaScript выполнится абсолютно одинаково на виртуальных машинах Linux (Ubuntu), macOS и Windows. Тебе больше не нужно думать о разнице синтаксиса Bash и PowerShell.
  • Лаконичность: Сложные вычисления, регулярные выражения и обработка массивов пишутся в 2-3 строчки на JS.

Это один из самых мощных инструментов в арсенале DevOps-инженера для расширения стандартных возможностей GitHub Actions!