$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

Github Actionsをcronとして利用し、notify-issues-to-slackを動かす

以前、レビュータイムや定期的なissueチェックのためにGithubのissueを検索してSlackに投稿するCLIツールを作ったで紹介したnotify-issues-to-slackだが、これまでは

  • 適当に立てたサーバーのcronで動かす
  • Jenkinsなどで実行する

という方法で動かしていた。

しかし、issueをslackに通知するためだけにサーバーを立てたりするのもだるい。そこでGithub Actionsで動かしてみた。

Github Actionsを動かすレポジトリのみを対象とする場合

secrets.GITHUB_TOKENを使えば、そのレポジトリへアクセス可能なので、何も設定せずとも以下のように設定できる。

.github/workflows/notify-issues.yml

name: daily bug report

on:
  schedule:
    - cron: 30 12 * * 1-5 # UTC 12:30 on weekdays

jobs:
  notify:
    runs-on: ubuntu-latest
    steps:
      - name: daily bug report
        env:
          # You can use secrets.GITHUB_TOKEN if you
          # don't have to access other repositories
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          docker pull shibayu36/notify-issues-to-slack
          docker run --rm shibayu36/notify-issues-to-slack \
            -github-token=${GITHUB_TOKEN} \
            -slack-webhook-url=... \
            -query='repo:shibayu36/notify-issues-to-slack state:open label:"bug"' \
            -text="Please check bug reports @shibayu36" \
            -channel="bug-report-channel"

ポイントとしては、on schedule cronはUTCで設定する必要がある、くらい。

別レポジトリも含めてissue検索し、通知したい場合

Personal access tokenを発行して、secretsに登録すれば良い。

.github/workflows/notify-issues-with-personal-access-token.yml

name: daily bug report

on:
  schedule:
    - cron: 30 12 * * 1-5 # UTC 12:30 on weekdays

jobs:
  notify:
    runs-on: ubuntu-latest
    steps:
      - name: daily bug report
        env:
          # You have to use personal access token if you
          # want to access other repositories.
          # Create secrets ( named NOTIFY_ISSUES_GITHUB_TOKEN in this example ) in repository settings, and use it.
          GITHUB_TOKEN: ${{ secrets.NOTIFY_ISSUES_GITHUB_TOKEN }}
        run: |
          docker pull shibayu36/notify-issues-to-slack
          docker run --rm shibayu36/notify-issues-to-slack \
            -github-token=${GITHUB_TOKEN} \
            -slack-webhook-url=... \
            -query='repo:shibayu36/notify-issues-to-slack state:open label:"bug"' \
            -text="Please check bug reports @shibayu36" \
            -channel="bug-report-channel"

まとめ

今回はGithub Actionsでnotify-issues-to-slackを動かしてみた。こういうツールはコンテナイメージを作りDocker Hubとかに公開しておけば、シュッとGithub Actionsで利用することが出来て便利だった。

参考