fail-fast
Тема дорожной карты · GitHub Actions
Параметр fail-fast в matrix-сборке GitHub Actions определяет, будет ли runner отменять все выполняющиеся и поставленные в очередь matrix-jobs, как только какой-либо из них завершается с ошибкой. Это позволяет выбирать между исчерпывающим параллельным покрытием и более быстрой обратной связью от CI/CD-пайплайна. По умолчанию fail-fast равен true: единственная сломанная комбинация matrix — например, падение теста на windows-latest — завершает оставшиеся jobs на ubuntu-latest и macos-latest, экономя минуты runner и быстро сигнализируя о неудаче. Установка fail-fast: false в ключе strategy: предписывает GitHub Actions доводить все matrix-jobs до завершения независимо от отдельных сбоев, что ценно, когда нужен полный отчёт о совместимости по всем платформам и версиям перед принятием решения о способе исправления пайплайна. Команды часто переключают fail-fast в зависимости от контекста: true для workflow на pull request, где важна скорость, и false для ночных плановых сборок, где приоритет — полное покрытие непрерывной интеграции. Понимание поведения fail-fast необходимо для проектирования эффективной автоматизации workflow на основе matrix, балансирующей стоимость runner и объём информации, получаемой за каждый запуск пайплайна.
Как это работает
fail-fast: 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.
Типичные ошибки
Ловушки fail-fast: matrix взрывается (3 OS × 4 Node × 3 БД = 36 jobs); flaky-тесты в matrix роняют одну ячейку случайно + все дебажат не ту; нет fail-fast: false — теряете видимость других падений, когда одна ячейка падает рано.