はじめに
GoQSystemではCI/CDツールにCircleCIとGitHub Actionsを採用しています。
ソースコード管理にGitHubを利用していることもあり、最近は何をするにしてもGitHub Actionsで書いています。
今回は題名通り、特定のラベルが付与されたIssueを特定のプロジェクトへ自動で追加するGitHub Actionsワークフローを作成したのでその紹介になります。
なぜやったか
ズバリ、トイルの撲滅が目的です。
GitHubのプロジェクトでIssueを管理しだしたのが最近なので厳密にはトイルではありません。トイルになる業務だとはっきりしていたので最初から自動化しました。
どうやったか
GitHub Actionsのadd-to-projectを使いました。めちゃくちゃ簡単です!
以下が実際のコードになります。これだけで「GoQ」というラベルがついたIssueが作成されるとプロジェクトに自動的に追加されるようになります。
name: 「GoQ」ラベルがついたIssueをプロジェクトに自動で登録する
on:
issues:
types:
- opened
env:
PROJECT_OWNER: GoQ
PROJECT_NUMBER: <プロジェクトID>
TARGET_LABEL: GoQ
jobs:
add-to-project:
name: Add issue to project
runs-on: ubuntu-latest
steps:
- uses: actions/add-to-project@v0.4.0
with:
project-url: https://github.com/orgs/${{ env.PROJECT_OWNER }}/projects/${{ env.PROJECT_NUMBER }}
github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}
labeled: ${{ env.TARGET_LABEL }}
各項目の説明
トリガー
今回作成したワークフローはIssueが作成されたタイミングで実行すればOKなので、タイプを- opened
のみに設定しています。
なぜかというと、Salesforceと連携してIssueを作成してるフロー内で使用しており、確実に「GoQ」ラベルがIssueに付与されるという前提条件があったためです。
本来であれば特定のラベルはIssue作成後にも付与される可能性はあると考えられるので、- labeled
もつけておくといいかなと思います。
on:
issues:
types:
- opened
環境変数
PROJECT_OWNER
はプロジェクトオーナー名、PROJECT_NUMBER
はプロジェクトIDです。
それぞれプロジェクトのURLで確認できます。
プロジェクトを開いたURL、https://github.com/orgs/GoQ/projects/1
のGoQ
がプロジェクトオーナーで、1
がプロジェクトIDです。
TARGET_LABEL
は付与されていたらアクションを実行させたいIssueのラベル名です。今回は1つだけで十分なので1つですが、2つ設定することも可能です。
env:
PROJECT_OWNER: GoQ
PROJECT_NUMBER: <プロジェクトID>
TARGET_LABEL: GoQ
ジョブ
最初に紹介したようにactions/add-to-project
を使用します。
※ 2023年2月執筆時点ではactions/add-to-project@v0.4.0
が最新です。
以下のように書くだけで、TARGET_LABEL
ラベルが付与されたIssueが作成されたらプロジェクト「GoQ」へ自動で追加してくれます。
jobs:
add-to-project:
name: Add issue to project
runs-on: ubuntu-latest
steps:
- uses: actions/add-to-project@v0.4.0
with:
project-url: https://github.com/orgs/${{ env.PROJECT_OWNER }}/projects/${{ env.PROJECT_NUMBER }}
github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}
labeled: ${{ env.TARGET_LABEL }}
複数のラベルをトリガーにしたい場合、label-operator
オプションを使うと簡単に実現できます。詳しくは公式を確認してください。
シークレット
上記で使用している${{ secrets.ADD_TO_PROJECT_PAT }}
は、repo
とproject
のscopeを持ったパーソナルアクセストークンを作成し、リポジトリのシークレットに保存し利用しています。
パーソナルアクセストークン作成やシークレットの保管や使用については公式を参考にしてください。
まとめ
非常に簡単にトイルを撲滅できますね。
もし1件処理するのに1分かかると仮定すると、10件/日発生すると作業時間:10分/日になります。
1ヶ月(20営業日)で計算すると作業時間:205分(3.4時間)もただIssueをプロジェクトに追加する作業を行なっていることになります。
日々数件だと意識しにくいですが、確実に効果がある改善活動になります。
もしこのような業務を手作業で行なっているのであれば、GitHub Actionsを利用して自動化してみてはいかがでしょうか。
最後に
GoQSystemでは一緒に働いてくれる仲間を募集中です!
求人は出していませんが、SREやQAエンジニアも今後募集していこうと考えています!
ご興味がある方は以下リンクよりご確認ください。