GitHub Actionsでタグ付とリリースを自動化できないかな?
と思ったら、かなりハマったので、いろいろ調べたときの備忘録(*´ω`*)
やりたかったこと
2つのymlを使って以下のようなことがしたかった。
- mainにPRがマージされたらタグを付け(
add-tag.yml) - tagが作られたら、Releaseを作成(
release.yml)
# add-tag.yml
# mainにPRがマージされたらタグを付ける
name: add-tag
on:
pull_request:
branches: [main]
types: [closed]
jobs:
add_tag:
if: github.event.pull_request.merged == true
# ....
# release.yml
# tagがつけられたら、Releaseを作成する
name: create-release-note
on:
create:
tags:
jobs:
release:
# ...
無事タグは付けられるけど、release.ymlは起動せず。。
ボットは別のワークフローをトリガーしない
GitHub Actions内では、特に指定しないと、
github-actions[bot]のTOKENが使われるけど、
別のワークフローをトリガーしないらしい。
Personal Access Token(PAT)を使う例があるけど、
管理がめんどくさくなるので、いやだなと思っていたら、
workflowが実行されたことをトリガーできるっぽい(*´ω`*)
workflow_runを使ってみる
こんな感じに変更
# release.yml
# tagがつけられたら、Releaseを作成する
name: create-release-note
on:
workflow_run:
workflows: ["add-tag"]
types: ["completed"]
jobs:
release:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
# ...
workflows: ["add-tag"]... トリガーしたいworkflowのnameを列挙types: ["completed"]... 指定したworkflowが完了したら開始
typesには、requestedやin_progressもあるけど、
完了したら開始したいので、completedを設定。
ただ、終わったかどうかだけなので、成功/失敗は制御できない。
なので、${{ github.event.workflow_run.conclusion == 'success' }}で
成功したときのみ実行するように条件を追加
これで、うまく流れるように(*´ω`*)
以上!! ワークフローが連携できるとだいぶいろいろできそう(*´ω`*)