uses: ключевое слово

Тема дорожной карты · GitHub Actions

Ключевое слово uses: в шаге GitHub Actions указывает runner'у выполнить упакованный action вместо shell-команды. Это значение может указывать на публичный action (actions/checkout@v4), action из приватного репозитория (my-org/internal-action@v2), составной action по относительному пути (./.github/actions/setup) или образ Docker (docker://alpine:3.19). В продакшн-вёрсии работы ссылка после @ должна быть неизменяемым SHA коммита, чтобы перемещение тега не могло тихо изменить поведение. with: под uses: передаёт объявленные inputs action. Тот же синтаксис uses: вызывает переиспользуемые workflow на уровне задания (uses: owner/repo/.github/workflows/release.yml@v1), когда вызываемый workflow объявляет on: workflow_call. Освоение ключевого слова uses необходимо, поскольку оно — единственный механизм, через который в GitHub Actions поступают переиспользуемые строительные блоки, что существенно упрощает разработку и поддержку CI/CD-процессов.

Как это работает

Ключевое слово uses: позволяет вызывать действия, которые уже определены и доступны. Например, 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: |. Передача состояния между шагами осуществляется через переменные окружения $GITHUB_OUTPUT и $GITHUB_ENV. Условное выполнение команд через if: позволяет контролировать выполнение шагов в зависимости от условий.

Когда применять

Всегда начинайте с checkout (actions/checkout@v4), чтобы получить доступ к исходному коду. Без этого шага невозможно выполнить остальные команды, требующие доступа к исходникам. setup-* actions используются для настройки toolchain для конкретных языков программирования (они также могут обрабатывать кеширование зависимостей). actions/cache используется для кеширования зависимостей, таких как ~/.npm, ~/.cargo, ~/.gradle, ~/.m2. Для выполнения multi-line скриптов можно использовать heredocs в run. Это позволяет держать шаги сфокусированными и упрощает управление сложными скриптами.

Типичные ошибки

Типичные ошибки при использовании ключевого слова uses: включают неуказание fetch-depth: 0, когда требуется полная история для выявления blame/log/tag. Дорогие шаги безусловного выполнения могут привести к неэффективному использованию ресурсов. Баги в shell-эскейпинге в run: | могут привести к неправильной интерпретации переменных. Передача состояния через файлы в /tmp между шагами может привести к проблемам с доступом и синхронизацией данных.

Связанные понятия

Полезные ресурсы