2020-09-15: GitHub CLIに入門した

満遍なくミーティングが入っていたのだけど、その合間にちょっとしたコード書きなどを。

今回の課題は「あるリポジトリのmainブランチへのマージをトリガーとして別のリポジトリにそれを反映したPull Requestを出したい」というもの。ペパボではGitHub Enterpriseをホストしていて、CIはDrone CIのOSS版を構築して使っている都合上、それらに合わせて仕組みを作る必要がある。

最初はGitHubのAPIをコードを書いて叩こうかと思っていたのだけど、GitHub CLIはどんなもんかとみてみたら、大体これでできるじゃんとなったのでシェルスクリプトで済ませてしまった。

ざっくりとした流れはこんな感じ。

  1. GitHub Enterpriseのpersonal access tokenをDroneの秘匿情報を扱う仕組みで環境変数として読み込ませる
  2. echo $TOKEN | gh auth login --hostname xxxx --with-tokenなどとして、CI上でGitHub CLIを使えるようにする
  3. gh clone yyyyとして適当なディレクトリにPull Requestを出したいリポジトリをcloneしてくる
  4. cloneしてきたディレクトリでごにょごにょする
  5. gh pr create -t 'pr title' -b 'pr bodyとしてpull requestを出す

gh pr createで複数行のbody(GitHub上ではPull Requestのdescriptionになる)をうまく書けなかったので少しハマってしまったが、HTMLのタグも書けるのを思い出して<br>を入れたらうまくいったのでよかった。

今までGitHub CLIは存在は知っていたが使ったことはなかったのだけど、issueやPRに関する機能は現時点でもかなり充実しているから、手元からシュッと操作するには便利だと思う。また、インストールも簡単なのでCIに組み込むのも楽でいいね。

GitHub ActionsがEnterpriseにもきたらまた別のやり方ができる気がするので、またそのときに仕組みを見直そうと思う。