Первый workflow: реагируем на push

Своими руками создаём первый рабочий workflow и смотрим зелёную галочку.

Workflow «оживает», как только файл .yml попадает в каталог .github/workflows/ в любой ветке репозитория.

Куда класть файл

GitHub ищет workflow строго в каталоге .github/workflows/ в корне репозитория. Имя файла любое, расширение — .yml или .yaml. Создадим первый файл:

mkdir -p .github/workflows
touch .github/workflows/ci.yml

Содержимое первого workflow

Опишем простейший процесс: на каждый push скачать код и запустить пару команд.

name: CI
on: push

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Получить код
        uses: actions/checkout@v4

      - name: Показать версию системы
        run: uname -a

      - name: Список файлов
        run: ls -la

Разберём построчно:

  • name: CI — человекочитаемое имя workflow (видно во вкладке Actions).
  • on: push — триггер: запускать при каждом пуше в любую ветку.
  • jobs.build — единственный job с произвольным именем build.
  • runs-on: ubuntu-latest — выполнять на свежей виртуалке с Ubuntu.
  • steps — список шагов; у каждого опциональное name для читаемых логов.

Зачем нужен checkout

Это типичная ловушка новичка: runner стартует пустым, вашего кода на нём нет. Action actions/checkout@v4 клонирует репозиторий в рабочую директорию. Без него команды вроде ls покажут пустоту, а сборка не найдёт исходники. Поэтому checkout почти всегда — первый шаг.

Запуск и результат

Коммитим файл и пушим:

git add .github/workflows/ci.yml
git commit -m "Добавил первый workflow"
git push

Открываем вкладку Actions в репозитории на GitHub — там появится запуск с именем последнего коммита. Кликнув по нему, увидим job build и логи каждого шага. Успешный прогон выглядит так:

Вывод:

build  ✓
  Получить код           ✓
  Показать версию системы ✓
  Список файлов           ✓

Зелёная галочка означает, что все шаги завершились с кодом возврата 0. Если любая команда вернёт ненулевой код, шаг станет красным, а job — упавшим.

Итог

  • Workflow-файлы живут в .github/workflows/*.yml.
  • on: push запускает процесс на каждый пуш.
  • actions/checkout обязателен, чтобы код вообще появился на runner.
  • Результат и логи — во вкладке Actions; ненулевой код команды роняет шаг.
Проверьте себя
1. В каком каталоге GitHub ищет workflow-файлы?
A.github/actions/
B.github/workflows/
Cworkflows/ в корне
D.ci/
2. Почему почти в каждом workflow первым шагом ставят actions/checkout?
AОн ускоряет интернет
BRunner стартует пустым, и checkout клонирует код репозитория в рабочую директорию
CОн обязателен для оплаты минут
DБез него не работает YAML
3. Когда шаг с командой run считается упавшим?
AКогда выводит много текста
BКогда команда завершается с ненулевым кодом возврата
CКогда занимает больше секунды
DКогда у шага нет name
Поддержать проект