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' }}
で
成功したときのみ実行するように条件を追加
これで、うまく流れるように(*´ω`*)
以上!! ワークフローが連携できるとだいぶいろいろできそう(*´ω`*)