Featured image of post Tagpr で tag trigger の workflow が実行されなくてハマった話

Tagpr で tag trigger の workflow が実行されなくてハマった話

最近 tagpr という便利ツールの存在を知って試していたのですが、使い方が悪くてハマったのでメモ。

tagpr とは

作者さまの記事を参照ください。

リリース用のpull requestを自動作成し、マージされたら自動でタグを打つtagpr

2022年からあったのに今まで知りませんでした。 git-pr-release を使ったことはありますが、それよりもずっと導入しやすいですね。

やろうとしたこと

tagpr がリリース用の tag を push したことをトリガーに workflow を実行したいと考えました。 tagpr の実行も GitHub Actions の workflow で行うため、GitHub Actions で自動的に払い出される secrets.GITHUB_TOKEN を使ってしまうと、不慮の連鎖を避けるために workflow の trigger として扱われません。 そのため、GitHub App を作成し、次のようにして GitHub App の token を使うようにしました。

name: tagpr

on:
  push:
    branches:
      - main

jobs:
  tagpr:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/create-github-app-token@v1
        id: app-token
        with:
          app-id: ${{ vars.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}
      - uses: actions/checkout@v4
      - uses: Songmu/tagpr@v1
        env:
          GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}

tagpr の作成する Pull Request であったり、release が GitHub App の token を使ったものであることは確認できたのですが、なぜか tag の push をトリガーにした workflow は実行されませんでした。

発生している event の情報を確認するためにすべての event を送るように webhook を設定し、その中身を見てみると tag の push は GitHub App では行われていませんでした。

何が違うのか tagpr のソースコードを確認してみると Pull Request や Release を作成するのには github の client library が使われているのに対して push は git コマンドが実行されていました。ここにヒントがありそうだと思い調査を進めると git コマンドで使われる認証情報は actions/checkout で設定されていることがわかりました。

actions/checkout でも token 指定が必要

なるほどそういうことかと actions/checkout にも with の token で GitHub App の token を指定することで無事解決できました。

      - uses: actions/checkout@v4
        with:
          token: ${{ steps.app-token.outputs.token }}

実は先の紹介記事にも書かれていたのですが、ちゃんと読んでいませんでした…

Built with Hugo
テーマ StackJimmy によって設計されています。