run: команды
Тема дорожной карты · GitHub Actions
Ключ run в шаге GitHub Actions workflow выполняет произвольные shell-команды непосредственно на runner'е — это наиболее гибкий строительный блок любого CI/CD-пайплайна. По умолчанию run использует bash на Linux и macOS и PowerShell на Windows, но вы можете переопределить shell для каждого шага через ключ shell — например, указать shell: python для встроенного Python-скрипта. Многострочные команды записываются как YAML block scalar под run, и шаг завершается ошибкой, если любая команда вернёт ненулевой код. Вы можете ссылаться на динамические значения через выражения контекста, такие как ${{ github.ref }}, или через переменные окружения в карте env шага. Сочетание run с working-directory и грамотно ограниченными env — идиоматичный способ выполнять скрипты сборки, тесты и операции деплоя.
Шаги с ключом run позволяют выполнять произвольные shell-команды непосредственно на runner'е, что делает их незаменимыми для автоматизации различных задач, таких как сборка, тестирование и деплой. Это делает run ключевым элементом для создания сложных CI/CD-пайплайнов, которые могут автоматизировать практически любые процессы.
Как это работает
run: команды: uses: actions/checkout@v4 (клон репо), uses: actions/setup-node@v4 / setup-python@v5 / setup-go@v5 и т.д. (toolchain), run: (shell-команда — bash на Linux/Mac, pwsh на Windows по дефолту). Multi-line скрипты — run: |. Cross-step state: пишите в $GITHUB_OUTPUT / $GITHUB_ENV для передачи значений следующим step в том же job. Условное исполнение через if:.
Когда вы используете run, вы можете выполнять любые shell-команды, которые вам необходимы. Например, вы можете использовать run для выполнения скриптов сборки, запуска тестов или выполнения команд деплоя. Дополнительно, вы можете использовать run для выполнения скриптов управления зависимостями, таких как npm install или pip install.
Когда применять
Всегда начинайте с checkout (actions/checkout@v4); без него workflow без исходников. setup-* actions — для языко-специфичных toolchain (они обрабатывают кеш). actions/cache — для кеша зависимостей (~/.npm, ~/.cargo, ~/.gradle, ~/.m2). Heredocs в run — для multi-line скриптов; держите шаги сфокусированными.
Используйте run для выполнения команд, которые требуют доступа к файловой системе или другим ресурсам на runner'е. Например, если вам нужно выполнить скрипт сборки, который требует доступа к файлам в определенной директории, вы можете использовать run для выполнения этого скрипта. Также run полезен для выполнения команд, которые требуют взаимодействия с другими службами или системами через командную строку.
Типичные ошибки
Ловушки run: команды: не указали fetch-depth: 0, когда нужна полная история для blame/log/tag-detection; дорогие шаги безусловно (используйте if: для skip на docs-only изменениях); баги shell-эскейпинга в run: | (закавычьте переменные — "$VAR", не $VAR); state через файлы в /tmp между шагами (используйте $GITHUB_ENV правильно).
Одной из распространенных ошибок при использовании run является не указание глубины клонирования (fetch-depth: 0), что может привести к проблемам при выполнении команд, требующих полной истории коммитов. Также важно использовать условные выражения (if:) для пропуска выполнения команд в тех случаях, когда это не требуется, например, при обновлении документации без изменений в коде.