27 янв. 2022 г.
Всем привет! Сегодня хотел бы поделиться подборкой Github Actions для управления репозиторием и автоматизации релизов.
У меня была задача автоматизировать существующий ручной процесс подготовки релиза(создание ветки, обновление файла и т.д.). А также последующих действий - создание тега/релиза, слияние веток, удаление релиз бранча и т.д.)
Существующий ручной процесс был отчасти похож на gitflow, но имел свою специфику. Это не позволяло использовать существующие общедоступные workflow, например github-action-gitflow-release-workflow).
В этом посте хотел бы поделиться полезными Github Actions, а также некоторыми приемами.
Workflow можно запускать вручную с помощью workflow_dispatch. В этом случае можно выбирать ветку.
В случае ручного запуска можно передавать параметры в workflow.
Для поиска Actions под конкретную задачу удобно использовать marketplace
Иногда задачу можно решить консольной bash-командой. Также можно использовать последовательность команд. Однако, возможно, в этом случае стоит задуматься о создании собственного action.
Для быстрого завершения workflow можно использовать exit 1
. Этот прием можно использовать для кастомной валидации входных параметров workflow.
- name: Retrieve tag exists flag
uses: mukunku/tag-exists-action@v1.0.0
id: checkTag
with:
tag: ${{ github.event.inputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Verify tag not exists
run: |
if [ ${{ steps.checkTag.outputs.exists }} == true ]; then exit 1; else exit 0; fi
- name: Verify release branch not exists
run: |
git fetch --all
if git branch -a | grep -q release-${{ steps.dashed_version.outputs.result }}; then exit 1; else exit 0; fi
- name: Update version
run: |
echo ${{ github.event.inputs.version }} > .version
- name: Verify branch name
if: "!contains(github.ref, 'refs/heads/release-')"
run: |
echo "Wrong branch name: ${{ github.ref }}, should be release branch"
exit 1
С использованием указанных actions мне удалось реализовать pre и post release workflows и автоматизировать рутинную работу по подготовке релизов.
На этом пока все. Спасибо за внимание!