Артефакты и статусные проверки на PR

Сохраняем результаты сборки и превращаем CI в надёжный барьер перед мержем.

Артефакт — файл или каталог, который job сохраняет после выполнения, чтобы скачать его вручную или передать другому job.

Зачем артефакты

Runner после job исчезает вместе со всеми файлами. Чтобы сохранить отчёт о покрытии, собранный dist/, лог или скриншоты упавших тестов — их выгружают как артефакт. Артефакты видны на странице прогона и доступны для скачивания.

Загрузка артефакта

- name: Сборка
  run: npm run build

- name: Сохранить сборку
  uses: actions/upload-artifact@v4
  with:
    name: dist
    path: dist/
    retention-days: 7

retention-days — сколько хранить (по умолчанию обычно 90 дней; меньше — экономнее).

Передача между jobs

Помните: jobs изолированы. Один job собирает и выгружает, другой — скачивает:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm run build
      - uses: actions/upload-artifact@v4
        with:
          name: dist
          path: dist/

  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/download-artifact@v4
        with:
          name: dist
          path: dist/
      - run: echo "Деплою содержимое dist/"

Здесь needs: build гарантирует, что deploy стартует только после build и сможет скачать его артефакт.

Статусные проверки на pull request

Главная ценность CI на PR — не пустить плохой код в main. Каждый workflow на pull_request публикует статус (галочка/крестик) прямо в PR. Чтобы статус стал обязательным:

  1. Settings → Branches → добавить правило защиты для main.
  2. Включить Require status checks to pass before merging.
  3. Выбрать нужные проверки (например, job test).

После этого кнопка Merge заблокируется, пока CI не станет зелёным. Это и есть тот «барьер», ради которого всё затевалось.

Итог

  • Артефакты сохраняют файлы после job; upload-artifact/download-artifact + needs передают их между jobs.
  • Статусы проверок видны прямо в PR.
  • Защита ветки с обязательными проверками блокирует мерж красного кода в main.
Проверьте себя
1. Зачем нужны артефакты в GitHub Actions?
AЧтобы хранить секреты
BЧтобы сохранить файлы (сборку, отчёты) после исчезновения runner и передать их между jobs
CЧтобы ускорить установку зависимостей
DЧтобы задать триггер
2. Что нужно, чтобы job deploy скачал артефакт, собранный в job build?
AНичего, jobs делят файлы
BОбъявить needs: build и использовать download-artifact
CЗапустить оба job в одном runner вручную
DПоложить артефакт в секреты
3. Как сделать прохождение CI обязательным условием для мержа PR?
AДобавить комментарий в PR
BВключить защиту ветки с require status checks в настройках репозитория
CУдалить ветку main
DПоставить fail-fast: true
Поддержать проект