actions/checkout

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

actions/checkout@v4 — наиболее часто используемый action в workflow GitHub Actions. Он отвечает за клонирование репозитория в рабочее пространство runner, чтобы последующие шаги пайплайна имели доступ к исходному коду, конфигурационным файлам и скриптам сборки. Без actions/checkout runner GitHub Actions стартует с пустым рабочим пространством, поэтому практически каждый пайплайн непрерывной интеграции начинается с шага uses: actions/checkout@v4 для получения нужного коммита SHA или ветки. Action поддерживает параметры with:, включая fetch-depth: (установите в 0 для получения полной истории), token: для переопределения стандартного ${{ secrets.GITHUB_TOKEN }} при доступе к другим репозиториям, и submodules: для рекурсивной инициализации Git-субмодулей. actions/checkout@v4 внутренне использует sparse checkout для минимизации времени клонирования больших монорепозиториев, что делает его производительным выбором для высокочастотных CI/CD-пайплайнов. Всегда закрепляйте actions/checkout на конкретный тег мажорной версии или коммит SHA, чтобы защитить автоматизацию workflow от ломающих изменений, вносимых в апстрим.

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

actions/checkout: 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:.

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

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

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

Ловушки actions/checkout: не указали fetch-depth: 0, когда нужна полная история для blame/log/tag-detection; дорогие шаги безусловно (используйте if: для skip на docs-only изменениях); баги shell-эскейпинга в run: | (закавычьте переменные — "$VAR", не $VAR); state через файлы в /tmp между шагами (используйте $GITHUB_ENV правильно).

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

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