Skip to content

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

  • GitHub Actions
  • GitHub

📅 2020-08-22

⏱️ 5 min read

はじめに

GitHub Actions が正式リリースされて、一時期どんなことができるのか調べていた。その時に cron が実行できるということを発見し驚きだったのでやってみたのが本記事のきっかけだ。

今回はタイトルの通り、どうやって GitHub Actions を使って「定期的に issue を作成する」のか紹介できればと思う。

※ 基本的な GitHub Actions の構文やワークフローの設定方法などはここでは扱わない。

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

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

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

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

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

jobs:
  crete_issue: # job_id
    name: reminder
    runs-on: ubuntu-latest

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

※ 余談だが、 jobs.<job_id>.needs でそのジョブが必要としている依存ジョブを定義することができる。

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

issue を作成

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

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

hub3 は ubuntu-latest で指定した Ubuntu 16.04.7 LTS にデフォルトでインストールされているようだ4

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

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

    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 Action のスケジューリングトリガーを使って定期的に issue を作成するワークフローを構築してみた。何に応用できるかというと、単にタスクのリマインダーだったり、使用している外部 API やモジュールを監視し、変更が生じたら issue 作成ということができるんじゃないかなと思った。

監視し、通知するというプロセスは、slack に通知させた方が気付きやすいとは思うが、埋もれてしまったりするするので実際にコードを管理している GitHub 上にやるべき issue として残せるのが気に入っている(GitHub 通知を slack で設定しておくと issue 作成されたタイミングで通知を受け取ることも可能)。

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

← PrevNext →
  • © ysmtegsr 2019 - 2021