Разные Github Actions для разных веток разработки
Я уже писал про обновление DNS-зон через обновление git-репозитория. Единственно тогда использовал запуск программы на локальной машине. После того, как появились Github Actions, решил все автоматизировать.
Уже есть готовое решение в виде koenrh/dnscontrol-action@master
, достаточно закомитить изменения и они будут применены. Но меня интересовало немного другое решение, опишу по пунктам:
master
ветка содержит в себе текущую конфигурацию dns- комитить в
master
запрещено, можно только создавать pull-request - мерж изменений в
master
ветку запускает применение изменений зоны - комиты в ветки разработки, отличных от
master
, запускает проверку конфигурации dns
В документации описывается только вариант использования одного воркфлоу, запускаемого по комиту. Здесь же нужно запускать различные ворклфлоу в зависимости от используемой ветки. В результате ряда экспериментов пришел к следующей конфигурации:
- под каждый воркфлоу создаются отдельные файлы
- в каждом файле обязательно описываются ветки, в которых они будут запускаться
Описание веток будет выглядеть следующим образом, для 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-ветку, и изменения будут применены в очень короткий срок.