Переиспользуемые workflow и composite actions
Перестаём копировать одинаковые шаги между репозиториями и workflow.
Reusable workflow — workflow, который можно вызвать из другого workflow как функцию, передав параметры и секреты.
Проблема дублирования
Когда у вас десяток репозиториев с одинаковым CI, копипаста YAML превращается в кошмар сопровождения: поправил в одном — забыл в девяти. Два инструмента борются с этим: переиспользуемые workflow и composite actions.
Reusable workflow
Объявляется через триггер workflow_call с описанием входов и секретов:
# .github/workflows/reusable-ci.yml
name: Reusable CI
on:
workflow_call:
inputs:
node-version:
type: string
default: "20"
secrets:
NPM_TOKEN:
required: false
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
- run: npm ci
- run: npm test
Вызов из другого workflow — через uses на уровне job:
# .github/workflows/ci.yml
jobs:
call-ci:
uses: ./.github/workflows/reusable-ci.yml
with:
node-version: "22"
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
Логика описана один раз, а используется во многих местах с разными параметрами.
Composite action
Если нужно переиспользовать группу шагов внутри job (а не целый job), подойдёт composite action — мини-экшен из нескольких steps. Его кладут в свой каталог с файлом action.yml:
# .github/actions/setup/action.yml
name: "Setup project"
description: "Checkout, Node и зависимости одной строкой"
runs:
using: "composite"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
- run: npm ci
shell: bash
Подключение — обычным uses с путём к каталогу:
steps:
- uses: ./.github/actions/setup
- run: npm test
Когда что
| Reusable workflow | переиспользуете целые jobs, в т.ч. между репозиториями |
| Composite action | переиспользуете группу steps внутри job |
Итог
- Reusable workflow вызывается как функция (
workflow_call+usesна уровне job) с inputs и secrets. - Composite action группирует несколько шагов и подключается обычным
uses. - Оба убирают копипасту: правка в одном месте — эффект везде.