この記事は はてなエンジニア Advent Calendar 2021 の16日目の記事です。昨日は id:masayosu の はてなにおけるCloudNative推進会の活動について でした。 サブ会という仕組みで専門領域における情報共有や深い議論ができるようになっていて、僕もスマート会*1に所属しています
はてなではリリースブランチへのマージPRの管理にgit-pr-releaseをよく使っています。 git-pr-releaseは現在のリリースブランチのheadとの差分にあるPull Requestを一覧して、リリース前にチェックできます。このgit-pr-releaseはとても便利で、git-flowのようなブランチ戦略に非常にマッチしています。
一方、リリースブランチのないGitHub Flowのようなブランチ戦略を取った場合、リリースブランチが作られないため、マージ先のブランチがなく、PRも作れません。リリースブランチがなくてもgit-pr-releaseのようなリリース管理をしたい!と思ったので、同じようなリリース差分をGitHub Actionsを使ってIssueに可視化できるようにしてみました。
Issueで管理するのでgit-issue-releaseです。
PRをマージすると、GitHubのAutomatically generated release notesのAPIを使い、直近リリースからの差分をIssueに記録します。GitHubのReleaseがPublishされると、Issueはクローズされます。全体のフローを動画に短くまとめました。
使い方
GitHub Actionsで動作します。以下のYAMLを .github/workflows
以下に配置することで使えます。
name: git-issue-release on: pull_request: # PRがマージされた時にIssueを更新するために使います。 types: [closed] release: # ReleaseがPublishされた時にIssueをクローズするために使います。 types: [published] jobs: action: runs-on: ubuntu-latest steps: - name: git-issue-release uses: kouki-dan/git-issue-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: release-tag-pattern: ^v # 最新のリリースを探すために使います。 release-label: "release" # リリースIssueを管理するために使います。ラベルは自動で作られないので事前に作成してください。
git-issue-releaseでは、リリースのIssueを管理するためにラベルを使います。ラベルは自動で作られないので、先に作成しておきます。(この例では、releaseという名前のラベルを作成しておきます)
このYAMLを配置後にPRをマージすると、このようなIssueが作られます。
最近のリリースから release-tag-pattern
にマッチする最新リリースタグを取得します。そのタグからの差分PRをGitHubのAutomatically generated release notes APIを使って生成し、IssueのBodyとします。
別のPRがマージされると、IssueのBodyも追従して更新され、常に最新リリースからの差分をIssueで確認することができます。
また、新しいリリースをGitHubに公開すると、Issueも自動でクローズされ、タイトルもリリース後のタグを含んだものに変更されます。GitHub Releaseへのリンクがコメントされ、リリースに簡単に遷移できます。
リリースがIssueに残るため、過去のリリースを検索しやすかったり、GitHubが作るバックリンクでPRがどのバージョンでリリースされたかを確認できるようにもなります。
リポジトリにYAMLを置くだけでいい感じにコンピューティングしてくれるのはとてもいい時代になりましたね。GitHub Releasesでリリースの管理をしている方は、Issueでリリースを管理してみませんか?こちらからお試しください!
明日は id:dekokun です!
*1:スマートフォンアプリエンジニアが集まっているサブ会