composite action

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

Composite action в GitHub Actions — это тип кастомного action, объединяющий несколько steps: — включая как shell-команды run:, так и ссылки uses: на другие actions — в единую повторно используемую единицу, не требующую Docker-контейнера или среды выполнения Node.js. Composite actions определяются в файле action.yml с runs.using: composite, что делает их самым лёгким вариантом для упаковки повторяющейся логики CI/CD-пайплайна, охватывающей несколько shell-команд или вызовов инструментов. Поскольку composite action выполняется в среде runner вызывающего workflow, а не в изолированном контейнере, он может обращаться к существующему рабочему пространству, переменным окружения и ранее установленным инструментам, что упрощает обмен состоянием между шагами пайплайна. Входные данные, передаваемые через with:, доступны внутри composite action как ${{ inputs.<name> }}, а выходные данные, объявленные в action.yml, могут возвращать результаты обратно в родительский workflow для последующих jobs. Composite actions — лучшая практика GitHub Actions для устранения дублирования в автоматизации workflow: они заменяют скопированные блоки шагов в нескольких пайплайнах единым версионированным и тестируемым компонентом.

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

composite action пакетируют несколько шагов в один переиспользуемый action без написания JavaScript или Docker-контейнера. Определяется в action.yml с runs: using: "composite" + список steps:. Inputs (inputs:) + outputs (outputs:). Хранятся в корне репо или поддиректории + ссылка через uses: ./.github/actions/my-action (локально) или uses: org/repo/.github/actions/x@sha (remote).

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

Composite actions — для дедупликации повторяющихся между workflows шагов (например "setup + cache + install" прелюдия). Дешевле JS или Docker actions — просто YAML-wrapper. Локальный composite — для repo-внутреннего переиспользования; публичный action — только когда другие команды хотят. Smoke-test workflow, гоняющий composite action.

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

Ловушки composite action: глубоко вложенные composite actions, зовущие другие composite actions (отладка сложная); нет версионирования вашего action (другие workflows тянут main, сюрпризы ломают); большие composite actions, делающие "всё" (делите на меньшие).

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

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