GitHub Actions を使って定期的に issue を作成する
はじめに
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 として残せるのが気に入っています。
参考にさせていただいたサイト
Discussion