はじめに
人知れずGitHub Actionsの仕様が変わっていて、つられてgit-pr-releaseの仕様も人知れず変わっていた。その影響をモロに受けて少し苦労をしたので、取り急ぎの対応を備忘録にまとめたいと思います。
ちなみに纏めるのは仕様変更への対応のみなのでGitHub Actionsの基本的な使い方などの説明は割愛しますので
準備
ブランチ
本番用のmasterブランチと動作検証用のreleaseブランチがあります。
テンプレート・ワークフロー
.
└── .github
├── PR_RELEASE_TEMPLATE.md.erb
├── PULL_REQUEST_TEMPLATE.md
└── workflows
└── create_release_pr.yml
全ては解説しませんがcreate_release_pr.ymlにはreleaseブランチにマージされると、masterブランチへマージするためのプルリクリストを作成します。下図の様な感じです。
その際に読み込まれるRelease PRを作成するテンプレートがPR_RELEASE_TEMPLATE.md.erbです。今回はこのファイルを修正します。
もう一つのPULL_REQUEST_TEMPLATE.mdはプルリクを作成する際のテンプレートです。今回は必要ありません。
変更点
ここでmasterブランチへのマージに反応して動くmaster_complete_task.ymlというワークフローを作成します。
name: Master Complete Task
on:
pull_request:
types: [closed]
jobs:
build:
name: Master Complete Task
runs-on: ubuntu-18.04
if: github.event.pull_request.merged == true && github.base_ref == 'master'
steps:
- name: 'Master Complete Task'
env:
PULL_REQ_BODY: ${{github.event.pull_request.body}}
run: |
echo $PULL_REQ_BODY
上はプルリクリストのプルリクタイトルとボディを出力するだけの処理です。通常テストやデプロイ処理を実行する記述をするところかと思います。
この${{github.event.pull_request.body}}
で取得出来る値の仕様が変わりました。プルリクタイトルが標準で取得出来なくなったのです。
今までの出力結果
[x] [プルリクタイトル] #4 @user1
仕様変更後の出力結果
[x] #4 @user1
これはGitHub Actionsのアップデートによって、リリースプルリクのリストにプルリクへのURLが記述されていればそれを元にプルリクのタイトル名を勝手にレンダリングしてくれるようになったからだそうです。恐らくプルリクをシンプルにしようという思想からではないかと思います。
その結果ここを見ると分かりますが意図的にタイトルを除外しております。したがって先述の様な出力結果に違いが生じるようになりました。私はこのプルリクタイトルを元に後続の処理を条件分岐させていたのでこの変更には対応する必要がありました。
リリースプルリクテンプレート修正
PR_RELEASE_TEMPLATE.md.erbを修正することでプルリクタイトルを参照出来るようにします。
Release <%=
require 'date'
add_days = (2 - Time.now.wday) % 7
add_days = 7 if add_days == 0
date = (Date.today + add_days)
date.to_s
%>
<% pull_requests.each do |pr| -%>
<%= pr.to_checklist_item %>
<%= pr.to_hash[:data][:title] %>
<% end -%>
10行目で強引にプルリクタイトルをプレーンテキストで追記しています。それ以外は基本的なテンプレートです。
するとリリースプルリクのチェックリストのアイテムの下にプルリクタイトルが追記される様になります。そして${{github.event.pull_request.body}}
の出力結果は下記の様になります。
[x] #5 @user1 [プルリクタイトル]
これでプルリクタイトルを使うことが可能になりました。
終わりに
GitHub Actionsもgit-pr-releaseも便利で無くてはならないものです。故に変更を追い続ける必要があり、時にはこうしてバタバタすることもあります。