👌

GitHub Actions を使って定期的に issue を作成する

2021/04/07に公開

はじめに

GitHub Actions を社内の CI/CD ツールとして採用し初めてからどんなことができるのか調べていました。それで cron を実行できるということを知り、いろんなことに応用ができるのはないかと思ったのでとりあえず触ってみることにしました。

ワークフローのスケジュールを指定

yaml では on.schedule にトリガーとするイベントを指定する。なので今回は cron と指定します。書き方は一般的な cron と変わらないので、比較的わかりやすいのではないでしょうか。自分はよく忘れるので crontab guru[1] というサイトで確認しています。

on:
  schedule:
    - cron: '0 0 * * *'  # 毎日 0 時 0 分(UTC)にワークフローを実行する例

ジョブ実行とマシンの定義

次に、定期実行するジョブとそのジョブを実行するマシンを定義します。

jobs:
  create_issue: # job_id
    name: reminder
    runs-on: ubuntu-latest
    timeout-minutes: 10

job_id は文字列でないといけないらしいです。

そして、 runs-on にジョブを実行するマシンを定義します。他にも windows, macos が指定できます。
ちなみに ubuntu-latest では、デフォルトで GitHub のコマンドラインツール hub を使えるのもポイントです(後述)。

issue を作成

ようやく目的の箇所まで来ました。

実際に issue を作成するステップを定義していきます。
前述した hub コマンドを使って issue を作成します。

hub[2] は ubuntu-latest で指定した Ubuntu 20.04 LTS にデフォルトでインストールされています[3]

なので後は env という項目に GITHUB_TOKEN という環境変数を指定するだけで良い…なんと簡単な…!
もし独自の環境変数を使用したい場合は リポジトリ > settings > secrets に事前に登録する必要がありますが、 GITHUB_TOKEN はデフォルトで呼び出すことができます。

今回はお試しということで、assignee, label, message などのオプションを ${{ github.repository_owner }} とし自分にアサインされるようにしました。他にもオプションを指定できるので気になる人は、 $ hub issue -h とコマンドを手元で実行してみて下さい。

    steps:
    - name: Create a new issue
      run: hub issue create \
          -l bot \                             # ラベル
          -a ${{ github.repository_owner }} \  # アサインユーザ
          -m '[BOT] test issue created!'       # タイトル
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

おわりに

今回、GitHub Actions のスケジューリングトリガーを使って定期的に issue を作成するワークフローを構築してみました。タスクのリマインダーだったり、使用している外部 API やモジュールを監視し変更を検知し issue 作成したりということに応用ができるんじゃないでしょうか。

実際にコードを管理している GitHub 上にやるべき issue として残せるのが気に入っています。

参考にさせていただいたサイト

https://gotohayato.com/content/514/
https://qiita.com/kotala_b/items/8bfc7f2e97abc4ca48a7
https://mottox2.com/posts/407

脚注
  1. Crontab.guru - The cron schedule expression editor ↩︎

  2. github/hub: A command-line tool that makes git easier to use with GitHub. ↩︎

  3. virtual-environments/Ubuntu2004-README.md at main · actions/virtual-environments ↩︎

GitHubで編集を提案

Discussion