/home/by-natures/dev*

ソフトウェア開発者としての技術的なメモと、たまに普通の日記。

2018/11/01 クロスコンパイルとリリース

ハロウィンについてフィリピン人の英会話の先生と話をしていたら、フィリピンは世界でもっともクリスマスを長く祝う国?らしく、9月1日からクリスマスのデコレーションをするのだとか。ハロウィンもハロウィンで仮装して騒いで楽しむらしく、10月末はハロウィンとクリスマスが混在するようです。

11月からクリスマスなんて早いなぁと思っていましたが、それよりはるかに長い期間クリスマスを祝う国があると知っておどろきました。日本のお正月準備はクリスマスの後ばたばたと始まるので、フィリピンのようにイベントを重ねてやったらどうかなと一瞬考えましたが、和と洋で頭がおかしくなりそうなのでハロウィン・クリスマスほどは上手く行かなそうです。。

リリースの仕方

リリースの仕方について調べていたところ、以下のブログ記事がとても役に立ちました。

golang勉強会でGo製ツールの配布方法について話してきた | SOTA

Go言語ではクロスコンパイルしてさまざまなプラットフォーム向けのバイナリファイルを生成できるのですが、それをまとめて行える gox コマンド、そしてそれを GitHub へリリースする ghr コマンドなどが紹介されています。

speakerdeck.com

gox コマンドは -output オプションで出力ファイル名を指定できます。出力ディレクトリを指定するわけではないので、例えば以下のようにすると dist/ ディレクトリ以下に成果物が出力されます:

$ gox -os "linux" -output="dist/{{.Dir}}_{{.OS}}_{{.Arch}}" ./...

ghr コマンドはパブリックな GitHub を想定しており、GitHub EnterPrise(GHE) で利用する場合には環境変数を利用する必要がありました:

$ GITHUB_API=https://<GHEのドメイン>/api/v3/ GITHUB_TOKEN=<トークン> ghr <バージョン> <リリース対象ディレクトリ>

トークンは以下の公式ページで紹介されているやり方で、GUI からトークン生成可能です:

Creating a personal access token for the command line - User Documentation