blog.syfm

徒然なるままに考えていることなどを書いていくブログ

Pull Request と共に GoDoc を生成してくれる GitHub Action をつくった

これは Go5 Advent Calendar 2019 の 13 日目の記事です。12 日目は shiimaxx さん、14 日目は nsega さんです。


以前、以下のような記事を書いており、その中で GoDoc を通してソフトウェアを見ることでドキュメントや仕様の質を確認しやすくなるといったメリットを紹介していました。

syfm.hatenablog.com

この記事の最後に

本当は GitHub で Pull Request をつくるときにも変更を元に生成したドキュメントを見れるようにしてレビューできるようにしたいけど、あまり良い方法が思いつかないのでできていない。いずれ何かの仕組みをつくってやっていきたいと思っている。

と書き残していましたが、最近になり GitHub Actions の正式バージョンがリリースされたため、これを利用して Pull Request がつくられたときにそのブランチを元に GoDoc を生成してくれる Action をつくりました。

github.com

github.com

まだ荒削りの状態ですが、基本的な機能は提供できていると思います。以下のように設定することで、Pull Request がつくられたときに Action が動き、GoDoc が生成され、GitHub Pages へデプロイされ、Pull Request のコメントに GoDoc へのリンクが投稿されます。

f:id:ktr_0731:20191213224232p:plain

add Go files by ktr0731 · Pull Request #1 · ktr0731/godoc-action-example · GitHub

実装はシェルスクリプトで素朴に行っています。実際にやっていることは以下のとおりです。

  1. godoc コマンドで GoDoc サーバを起動
  2. スキャン中は 404 が返ってくるので 200 が返ってくるまでポーリング
  3. Wget で対象リポジトリの GoDoc をクローリング
  4. gh-pages へ commit
  5. GoDoc のリンクをコメント通知

現状、GoDoc の HTML 形式をファイルへ生成する手段がないため GoDoc サーバを起動することにしています。もしもっと良いやり方があれば教えて下さい。

注意点としては、GitHub Pages はプライベートリポジトリでも利用することができますが、誰からもアクセス可能な状態になっており認証を設けることもできないという点があります。そのため、プライベートリポジトリでの使用はおすすめできません。

この Action ができることは素朴ですが、案外便利かと思うので良かったら試してみてください。