Разные Github Actions для разных веток разработки

#github #tips

Я уже писал про обновление DNS-зон через обновление git-репозитория. Единственно тогда использовал запуск программы на локальной машине. После того, как появились Github Actions, решил все автоматизировать.

Уже есть готовое решение в виде koenrh/[email protected], достаточно закомитить изменения и они будут применены. Но меня интересовало немного другое решение, опишу по пунктам:

  1. master ветка содержит в себе текущую конфигурацию dns
  2. комитить в master запрещено, можно только создавать pull-request
  3. мерж изменений в master ветку запускает применение изменений зоны
  4. комиты в ветки разработки, отличных от master, запускает проверку конфигурации dns

В документации описывается только вариант использования одного воркфлоу, запускаемого по комиту. Здесь же нужно запускать различные ворклфлоу в зависимости от используемой ветки. В результате ряда экспериментов пришел к следующей конфигурации:

  1. под каждый воркфлоу создаются отдельные файлы
  2. в каждом файле обязательно описываются ветки, в которых они будут запускаться

Описание веток будет выглядеть следующим образом, для master-ветки:

on:
  push:
    # Sequence of patterns matched against refs/heads
    branches:
      - master         # Push events on master branch

Для остальных веток:

on:
  push:
    # Sequence of patterns matched against refs/heads
    branches:
      - '*'
      - '!master'         # Push events on master branch

Данное правило включает все ветки, и исключает master, чего мы и добиваемся. В результате при комите в зависимости от имени ветки будет запускаться требуемый воркфлоу, в мастер-ветке будет проводиться применение изменений конфигурации, а в остальных ветках только проверка.

Таким образом остается только запретить комитить напрямую в мастер-ветку, для чего меняем конфигурацию репозитория:

И для внесения изменений создаем новую ветку, комитим, запускается проверка, если она успешно проходит, создаем пул-реквест. После чего мержим изменения в master-ветку, и изменения будут применены в очень короткий срок.