どうも、フリーランスのITエンジニア兼ブロガー兼投資家のKerubitoです。
ソフトウェア開発のワークフリーを自動化してくれるGitHub Actions。
人がやる必要のない面倒な作業は全部コンピューターにやってもらいましょうという素晴らしい仕組みです。
今回はこのGitHub Actionsを使って「プルリクエストとリンクされたIssueを自動で移動させる」をやってみました。
GitHub Actionsといえば「masterやstagingにマージされたらCIまわす」みたいなのが王道だと思うんですが、そんな情報はあちこちに転がっています。
なので、ちょっとググってもあんまり情報がなかったニッチなことを記事にしてみました。
GitHubにて事前準備
GithubのProjectsを使います。
これで開発のワークフロー回していることが前提になりますね。
すでにある人はすっ飛ばしてください。
「kanban」をテンプレートとしたKanbanを適当に作成します。
さらにプルリクエストが送られたということは、コードレビューなりが入ると想定して「review」というcolumnを追加します。
さらにIssueを作成します。
GitHub Actionsのworkflowを作成する
それではGitHub Actionsのworkflowを作成していきます。
リポジトリ直下にて「Actions」のタプを選択します。
すると下のような画面になりますので、左にある「New workflow」を押します。
「set up a workflow yourself」を押します。
下のほうへとスクロールすると、既存のものが選べるようになっていて、「Amazon ECSへの自動デプロイ」、「Azure Web Appへの自動デプロイ」といったメジャーなものは一通り揃っていますね。
ここまできたら、あとはどのような動作をさせるかをコードで書きます。
コードはyml形式にて/workflows/*.ymlといった形で保存されます。
プルリクエストとリンクされたIssueを自動でcolumn間を移動させる
「プルリクエストにリンクされたIssueを自動でcolumn間を移動させる」をGitHub Actionsにて自動化させます。
コード本体はこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | name: move_issue on: issues: types: [edited] jobs: job1: runs-on: ubuntu-latest steps: - id: step1 if: github.event.issue.pull_request.url != '' uses: alex-page/github-project-automation-plus@v0.2.4 with: project: Kanban column: review repo-token: ${{ secrets.TOKEN }} |
ymlを適用するには右側の「Start commit」を押します。
さらっと説明しておくと
name → workflow名
on: issues: types: [edited] → issueが変更されたらというトリガー
if: github.event.issue.pull_request.url != '' → issuとプルリクエストがリンクしている場合
uses: alex-page/github-project-automation-plus@v0.2.4 → 既存のGitHub Actionsのコードを使います
project → Kanbanというprojectを対象とする
column → reviewというcolumnに移動させる
repo-token: ${{ secrets.TOKEN }} → リポジトリにアクセするため
おおよそイメージできるかと思いますが、2点だけ説明を加えておきます。
通常runでコマンドを実行するのですが、今回はusesという公開アクションを利用する方法を用いています。
「alex-page/github-project-automation-plus@v0.2.4」というのは、issueを指定したcolumnに移動させてくれるアクションです。
また、repo-tokenで認証トークンを渡しています。
認証トークンの作成
通常publicなリポジトリであれば「GITHUB_TOKEN」でいけるそうなのですが、どういうわけか失敗するので、認証トークンを作成しました。
認証トークンの作り方は以下です。
アカウントの設定(Settings)→Developer settings→Personal access tokens→Generate new token
こんな感じで設定して動きました。
適当なので動作は保証しません(笑
作った認証トークンをSecretsに登録します。
リポジトリ直下から「Settings」→Secrets→New secretです。
GitHub Actionsのworkflowを動かす
それでは試しに動かしてみます。
「なんか困ったことが発生」というissueの対応が終わったとして、プルリクをリンクさせます。
reviewへと自動で移動してくれました。
この面倒な作業を1回30秒、1日3回やるとしたら、1ヶ月(20日)で30*3*20 = 1800秒ほどかかります。
私は現在5人ぐらいのチームで開発しているのですが、それだと9000秒です。
さらにこれを1年続けると108000秒。
約30時間。
このアクションを作るのに2時間ほどですので、効率化のメリットはありそうです。