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.
Какие встроенные объекты он предоставляет?
Внутри скрипта тебе автоматически доступны несколько предопределенных глобальных объектов:
github— это полностью авторизованный клиент Octokit (официальная библиотека для работы с REST API и GraphQL API GitHub). С его помощью можно делать абсолютно всё: создавать issues, одобрять PR, мержить ветки, управлять релизами.context— объект, содержащий весь контекст текущего запуска (название репозитория, имя автора, данные о триггере, номер PR или коммита). Тебе не нужно парсить переменные окружения вручную.core— библиотека для управления самим воркфлоу (можно объявлять выходные переменныеcore.setOutput(), вызывать ошибкуcore.setFailed()или писать цветные логи).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!