はじめに
私のチームでは、GitHubのIssueに課題を登録し、対応するブランチを切って課題を対応してプルリクエストでマージしていくという一連のサイクルでタスクの進捗や管理を行っているですが、Issueの登録からの処理は毎度同じことを行っているため自動化できないか調べてやってみました。
参考:ちょっと前にGithubからCreating a branch to work on an issueでIssueより、対応するブランチの作成がボタン一つでできるようになる機能が出てますが、ブランチの命名ルールを決めて自動でやってほしいなという思いがあり他の方法も調べました。
今回調べたもの
GitHubActionsにcreate-issue-branchという自分がやって欲しかったことを実現してくれるアクションが公開されていましたので利用してみました。
動作
create-issue-branchではGitHubのProjectsやLabelなども組み合わせていろいろできるみたいですが、今回は、Issueの登録時に特定の命名ルールでブランチを自動作成し、作成したブランチをプルリクエストのマージ時にクローズさせる機能を利用してみました。
以下は、ブランチの命名ルールは issue-[Issueの番号] というものを設定してみた結果です。
Issueを追加すると自動で issue-47 というブランチを生成してくれました。
(IssueのAssigneesに自動で作成者が入るGitHubActionsも併用してます。)
issue-47 ブランチの変更をプルリクエストでマージすると自動でIssueもクローズされます。
作成したymlファイル
create-issue-branchが提供してくれるデフォルトのymlそのままですが、
issueの登録・issueへのコメントの投稿・プルリクエストのクローズに反応して動作します。
on:
issues:
types: [ assigned ]
issue_comment:
types: [ created ]
pull_request:
types: [ closed ]
name: CreateIssueBranch
jobs:
create_issue_branch_job:
runs-on: ubuntu-latest
steps:
- name: Create Issue Branch
uses: robvanderleek/create-issue-branch@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
.github/workflowsフォルダと並列な箇所に以下の設定ファイルも準備します。
create-issue-branchのReadmeにもいろいろ書いてありますが、今回自分が利用した機能については説明等もあわせてコメントしてあります。
# Issue作成時に自動的に作成されるブランチの名称ルールを設定する
# 組み込みの指定は以下です。”branchName: tiny”のように利用できます。
# tiny => iその後に発行番号が続きます。例:i15
# short => 単語のissue後に発行番号が続きます。例: issue-15
# full =>「issue」という単語の後に「issuenumber」の後に「issuetitle」を続けます。例:issue-15-Fix_nasty_bug
# 独自のルールを設定する場合に利用できるプレースホルダー名は以下を参照ください。
# https://github.com/robvanderleek/create-issue-branch/blob/main/tests/test-fixtures/issues.assigned.json
# '${issue.number}-${issue.title}' => Issueの番号-Issueのタイトル。例: ”37-ImprovePerformanceForReviewGrid” となる
branchName: 'issue-${issue.number}'
# プルリクエストのマージ後にIssueを自動的に閉じる機能の有効無効
# 自動的に閉じるには"issue-XX"あるいは"iXX"(XXはIssue番号)のようなブランチ名が設定されている必要がある。
autoCloseIssue: true
# trueの場合、Issue作成後、コメントを作成しないと自動ブランチ作成が行われない
# falseの場合、Assigneesが入れば自動でブランチが作成される。(IssuesAssignAuthor.ymlと組み合わせることでアサインも自動化可能)
silent: false
さいごに
ブランチの命名ルールであったり、Issueのクローズは別途行いたいのであれば、設定のautoCloseIssueをfalseにするなど、プロジェクトのやり方に合わせて、カスタマイズが可能な点がGoodだと思います。
自分のチームではProjectsやLabelをまだ積極的に活用できていないので試せない機能もありましたが、ゆくゆくはいろいろ試して自動化していきたいですね。