LoginSignup
0
0

GitHub CLIでテンプレートからPRを作成する

Posted at

概要

GitHub CLI で PR を作成する際に、リポジトリにあるPRテンプレートを利用したいケースがありました。この時の手順メモです。

以下の2つを紹介します。

  1. テンプレートをそのまま利用する場合
  2. テンプレート内の変数を書き換えたい場合

前提

  • gh version 2.46.0 (2024-03-20)
  • 記事内でPRテンプレートのファイル名は pull-request-template.md とします。

内容

1. テンプレートをそのまま利用する場合

git pr create --template pull-request-template.md 
# --template or -T でPRテンプレートのファイルを指定します

注意事項として、指定するファイルはコマンドを実行するディレクトリに存在する必要があるということです。つまり以下のようにパスを含めた指定はできません。

git pr create --template .github/pull-request-template.md
# ...略...
# 実行すると以下のようなエラーが出ます
template ".github/pull-request-template.md" not found

.gihub/ 配下にテンプレートを置き、gh コマンドの作業はプロジェクトのルートディレクトリで実施する人も多いと思いますが、注意いただければと思います。

2. テンプレート内の変数を書き換えたい場合

CIの中で GitHub CLI を使って自動で PR を作成しているケースを想定します。このようなケースでは、チケットのURLなどテンプレート内の変数を自動で書き換えてPRを作成できたら便利です。

色々調べましたが、sed 等のコマンドを使いテンプレートの文字列を置換するのが素直で確実なやり方のようです。  
私が調べた範囲では、GitHub CLI でそのまま実現できる方法はありませんでしたが、もし別の方法ご存じの方いましたらコメントください🙏

GitHub Actions 等の CI で使うことを想定したPR作成の流れは以下となります。

  1. テンプレートから置換した文字列を中間ファイルに出力
  2. 中間ファイルの文字列からPRを作成
TICKET_URL="https://xxx"
# PRテンプレート内の ${TICKET_URL} を一行上で設定した TICKET_URL で置換
sed "s|\${TICKET_URL}|$TICKET_URL|g" .github/pull-request-template.md > tmp-pull-request-template.tmp
# --body-file オプションを使う
gh pr create \
  --base main \
  --head your-branch-name \
  --title "Your PR Title" \
  --body-file tmp-pull-request-template.tmp

ポイントは以下です。

  • gh pr create コマンドでは --body-file (or -F) オプションを使う
    • --template は元のテンプレートファイルを利用するオプションであり、置換した後のPRテンプレートのファイルからPRを作りたいため
  • PRテンプレートから sed で置き換えた内容を中間ファイル(例:.tmp)として出力する。あらかじめ .tmp.gitignore に追加しておく
    • GitHub Actions からこのコマンドを実行した時、tmp-pull-request-template.tmp ファイルがプロジェクト配下に新規作成されるため、未コミットのファイルが残っているという趣旨のワーニングが出ます。余計なワーニングは混乱を招くだけなので、.gitignore されている拡張子で作成するようにします。
    • またはCIのプロセスで中間ファイルを削除しても良いです

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0