はじめに
自身のパブリックリポジトリのプルリクエストにラベルを自動付与するAgentic Workflowを作りました
release-drafterにて自動でラベルを考慮したリリースノートを作成していたので、常々ラベル付与も自動化したいなーと思っていました。
これまでの課題
自身で作成したプルリクエストや、Bot(Copilot、Github Appなど)が作成したプルリクエストに対して、ラベルを手動で付与していたのですが、以下の大変さを感じていました
- プルリクエスト1つ1つを見てどのラベルが適切か判断することが大変
- 自動化しようにも厳密なルール(ブランチやプルリクエストなどの命名規則)を決めて守るのは大変
解決策
ラベル付与の基準を書き、プロンプトとして生成AIに渡すことで、ラベル付与の判断を生成AIに任せました。
また、プルリクエストのコメントにラベルの選択理由をコメントするようなプロンプトも記載しました。
それにより、後でリリースする際に本当に適切か、判断根拠を1から探す手間も減るのではないかと思っています。
以下に動いている様子を示します
ワークフローの内容
Agentic Workflowの全文は以下の通りです。
フローとしては以下の通りです。
以下にAgentic Workflowの作るにあたって考慮したことを書いていきます。
toolsフィールド
MCPサーバやAgentic Workflowが実行できる処理を記載するフィールドです。
今回はGitHubのラベル付与、コメント記載をするため、githubと関連するツールを記載しています。
※参考
tools.github.min-integrity
min-integrityはmergedとしました。
min-integrityは、GitHub MCP経由でエージェントが参照できるIssue、Pull Request、コメントなどのGitHubコンテンツを、整合性レベルで絞り込むためのパラメタです。
設定したレベルより低い整合性のコンテンツは、Agentic Workflow内のエージェントから見えなくなります。
セキュリティ面でmin-integrityは以下の順で強いです。
merged > approved > unapproved > none
なお、blockedはblocked-usersで明示的に拒否したユーザに付与される扱いであり、通常のmin-integrityの設定値ではありません。
パブリックリポジトリのデフォルト値はapprovedであり、信頼されたユーザや信頼されたbotによるコンテンツのみがエージェントから参照できます。
今回は自身だけではなく、Github AppやCopilotもプルリクエストを作成しています。
その場合、未信頼ユーザであるためapprovedではAgentic Workflowが動きません。
※プライベートリポジトリでは、この整合性フィルタはデフォルトでは自動適用されません。
しかし、noneやunapprovedまで緩めると、未信頼のユーザが作成したコンテンツもエージェントから参照可能になってしまいます。
そこで、今回はmergedとして、マージ済みのプルリクエストだけをエージェントが参照できるようにしました。
プルリクエストのマージは責任をもって行う判断に至りました。
※参考
トリガー
on:
pull_request:
types: [closed]
if: github.event.pull_request.merged == true && github.event.pull_request.user.login != 'dependabot[bot]'
今回はマージされたプルリクエストに対してのみ許可するので、トリガーはプルリクエストがマージされたタイミングとしました。
また、Dependabotのプルリクエストはすでにラベルが付与されているため、if文で除外しています。
排他制御
concurrency:
group: agentic-workflows
cancel-in-progress: false
Copilotの実行を一度にしすぎるとエラーとなったことがありました
Sorry, you've hit a rate limit that restricts the number of Copilot model requests you can make within a specific time period. Please try again in 4 hours. Please review our Terms of Service (https://docs.github.com/site-policy/github-terms/github-terms-of-service).
Copilot利用に、具体的な数値は明示されていませんが、レート制限が設けられています。
そのため、実行頻度を緩和するため排他制御を入れました。
release-drafterの修正
release-drafterはAgentic Workflowの実行後に実行されるようトリガーを修正しました。
またうまく実行されなかった時にやり直せるようworkflow_dispatchも追加しました。
おわりに
まだまだプロンプトが最適化されていませんが、ラベル付与を自動化することで楽になったと感じています。
これからも勉強していきます!

