くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

github-actionsボットが作ったタグではon:crete:tagがトリガーされないのでworkflow_runをつかう

GitHub Actionsでタグ付とリリースを自動化できないかな?
と思ったら、かなりハマったので、いろいろ調べたときの備忘録(*´ω`*)

やりたかったこと

2つのymlを使って以下のようなことがしたかった。

  1. mainにPRがマージされたらタグを付け(add-tag.yml)
  2. 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には、requestedin_progressもあるけど、
完了したら開始したいので、completedを設定。

ただ、終わったかどうかだけなので、成功/失敗は制御できない。

なので、${{ github.event.workflow_run.conclusion == 'success' }}
成功したときのみ実行するように条件を追加

これで、うまく流れるように(*´ω`*)


以上!! ワークフローが連携できるとだいぶいろいろできそう(*´ω`*)

参考にしたサイトさま