include и exclude

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

Модификаторы include и exclude в matrix-стратегии GitHub Actions дают авторам пайплайна точный контроль над тем, какие комбинации переменных фактически выполняются, не жертвуя выразительностью matrix-сетки. Список exclude: удаляет конкретные комбинации из сгенерированной matrix — например, исключает {os: windows-latest, node: 18} из полного декартова произведения, — предотвращая заведомо несовместимые или избыточные перестановки от расходования минут runner. Список include: добавляет новые записи в matrix, выходящие за рамки базового декартова произведения, или дополняет существующие записи дополнительными переменными, например для канареечной сборки под release-candidate версию среды выполнения в том же workflow непрерывной интеграции. И include, и exclude принимают частичные объекты: частичная запись exclude: удаляет все комбинации, совпадающие по указанным ключам, тогда как частичная запись include: с ключами, соответствующими существующей комбинации, расширяет эту комбинацию дополнительными переменными вместо создания дублирующегося job. Освоение include и exclude — ключевой навык GitHub Actions для проектирования эффективных matrix-пайплайнов, максимизирующих тестовое покрытие при минимизации избыточных CI/CD-вычислений.

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

include и exclude: strategy: matrix: { os: [ubuntu, windows], node: [18, 20, 22] } гоняет job на комбинацию (тут 6 jobs). include: добавляет конкретные комбинации; exclude: убирает. fail-fast: false гоняет все комбинации даже при сбоях. max-parallel: ограничивает конкурентность. Matrix-outputs доступны через ${{ matrix.os }}. Каждая matrix-ячейка — независимый job: своя VM, свой state.

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

Matrix — для тестов cross-platform / cross-version (библиотеки на Node 18/20/22, Python 3.9/3.10/3.11/3.12). fail-fast: false — когда хотите видеть все падения, не только первое. include: — для "Node 20 + Postgres 16 специфичного теста" без взрыва matrix. Размер matrix разумный — 20 ячеек × 5 мин = 100 мин compute на PR.

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

Ловушки include и exclude: matrix взрывается (3 OS × 4 Node × 3 БД = 36 jobs); flaky-тесты в matrix роняют одну ячейку случайно + все дебажат не ту; нет fail-fast: false — теряете видимость других падений, когда одна ячейка падает рано.

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

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