Github Actionsとcrossを使ってReleaseでクロスコンパイルしてバイナリをアップロードする
TL;DR
rustの用途として、コマンドラインツールを作成することが多い。コマンドラインツールを創るときにrustを使うメリットとしては、シングルバイナリで配布できるので利用しやすいということがある。
ソースコードはどうせgithubで管理するので、リリースするたびに最新のバイナリを配布できるようにしておくと便利。そして、複数プラットフォームで使えるようにクロスコンパイルを自動でできるようにしておくと更に便利なので、そのやり方について説明していく。
cross build
dockerを使ってcross buildしてくれるcrossというパッケージを使う。rustのGithub Actionsのactions-rs/cargoを使うと簡単にGithub Actionsでcross buildを行うことができる。
使い方は非常に簡単で、actions-rs/cargo@v1を使う際にwithの中でuse-crossをtrueにするだけでcrossを利用できる。
release and upload
releaseを作ったり、uploadしたりするアクションはあるが、バイナリをartifactにアップロードして...みたいな感じで結構長くなるので、Upload files to a GitHub releaseを使う。公式サンプルは以下のような感じで、非常に簡単にrelease作成とバイナリアップロードができる。
simple_example.yml
Release.yml
最終的にクロスビルドとrelease and uploadをあわせたymlはこちら。matrixを使って複数のプラットフォームでのビルドをしている。muslを指定しないと古いCentOSでは動かないという致命的な問題があるのでmuslとgnuを両方指定している。普通はWindowsとか入れとくといいと思う。
Windowsを入れる場合は、ubuntu上で普通にビルドできる。ただ出力ファイルに.exeが必要なのでそこだけ注意すればいい。
Release.yml