Custom actions
Тема дорожной карты · GitHub Actions
Кастомные actions в GitHub Actions — самодостаточные, повторно используемые единицы автоматизации, которые вы создаёте для инкапсуляции логики, недоступной в GitHub Actions Marketplace или требующей соответствия внутренним стандартам. GitHub Actions поддерживает три типа кастомных actions: JavaScript/TypeScript actions, использующие @actions/core и выполняющиеся непосредственно на runner; Docker-actions, упаковывающие полную среду выполнения; и composite actions, выстраивающие цепочку существующих шагов без зависимости от среды выполнения. Каждый кастомный action требует файла метаданных action.yml, в котором объявляются name:, description:, inputs:, outputs: action и блок runs:, указывающий runner, как его выполнять. Кастомные actions могут храниться в том же репозитории, что и использующие их workflow (ссылка через uses: ./.github/actions/my-action), или публиковаться в отдельный репозиторий с версионированием для повторного использования в рамках всей организации непрерывной интеграции. Написание кастомных actions — фундаментальный навык GitHub Actions, превращающий одноразовые скрипты пайплайна в тестируемые, документированные и версионированные компоненты, ускоряющие автоматизацию workflow в масштабе.
Как это работает
Custom actions: три варианта. JavaScript actions (runs: using: node20) — быстрый старт, гоняются на runner напрямую, должны быть cross-platform. Docker actions (runs: using: docker) — только Linux, медленнее старт (pull/build образа), полный контроль env. Composite actions (рассматриваются отдельно). JS actions требуют dist/ в репо (или компиляция через @vercel/ncc). Дистрибуция через GitHub Marketplace или приватный internal-репо.
Когда применять
JavaScript actions — когда логика маленькая (< 200 строк) + нужен cross-platform. Docker actions — нужно конкретное OS-окружение или сложные зависимости. Composite — просто цепочка существующих actions. Всегда релизьте tagged-версии (v1, v1.2.3); никогда не говорите юзерам использовать main.
Типичные ошибки
Ловушки Custom actions: JS action без коммита dist/ (action валится, потому что node_modules недоступен); Docker action с огромным образом (медленный старт на каждом job); breaking input/output изменения в major-версии, которые юзеры на @v1 получают тихо (всегда major-version-пин или SHA).