私が歌川です

@utgwkk が書いている

goreleaserのmainの指定方法

goreleaserはGoのプログラムをGitHubのreleasesとかHomebrewとかに簡単にリリースしてくれるプログラム。

goreleaserの設定ファイルでmainパッケージの位置を指定できるけど、指定方法によって挙動が変わる(し、あまりちゃんとドキュメントに書いてない気がする?)ので備忘録的にメモしておく。

goreleaser.com *1

たとえば go get github.com/utgwkk/hoge/cmd/hoge でインストールされるバイナリ*2をリリース対象としたいときを考えると、以下の指定が考えられると思うけど、正しく動くのは1つ(2つ)だけ。

./cmd/hoge/main.go

./cmd/hoge/main.go 単体で動くならこれでも問題ないと思う。 main.goが ./cmd/hoge/ 以下のプログラムに依存していてもうまく見てくれないのでファイルを分けているとこれでは動かない。

cmd/hoge

cmd/hoge モジュールを探しにいくけどおそらく存在しないし、存在したとして違うものが発見されるので間違い。

./cmd/hoge

これが正しい。相対パスでディレクトリを指定する必要がある。

最終的に完成した設定ファイルがこちら。

justify/.goreleaser.yml at 12e1147dc6ea2f5cd27ff42d237f068c927634df · utgwkk/justify · GitHub

*1:2020/11/12: ドキュメントのURLが変わっていたので修正

*2:つまり、mainパッケージがリポジトリの直下にないとき