RustのクロスビルドバイナリをGithub Releasesで配布するワークフロー

2022.01.31

はじめに

Rustで作ったCLIツールを各環境(M1 mac, intel mac, Windows)向けにビルドしていい感じにGithubで配布したかったので慣れないGithub Actionsワークフローを書いてみました。

やること

リリースのフローは以下の流れです。ここではgit flowでブランチ運用する前提です。

  1. リリースの機運が高まったらdevelopからreleaseブランチを作成する
  2. リリース準備をする
    1. cargo.tomlのバージョンをインクリメントする
    2. CHANGELOGを書く
  3. releaseブランチをmainにマージする
  4. mainからドラフトリリースを作成する(バージョンはcargo.tomlのもの)
    1. リリースにビルドしたバイナリを添付する
  5. リリースブランチをdevelopにもマージする
  6. ドラフトリリースを編集して公開する

ワークフロー

これをふまえて次のようなステップからなるGithubActionsを作成します。 ワークフローはrust-draft-release で公開しています。

  • build: テストやビルドをする、ビルド成果物をアップロードして保存する
  • draft-release: リリースのドラフトを作成する (このときに生成したリリースのアップロードURLを保存する)
  • attach-assets-to-release: buildで生成した成果物をリリースに添付する(draft-releaseで生成したURLにアップロードする)

cargo.tomlからパッケージのバージョンを参照する方法

手軽にバージョンを取得する方法が見当たらなかった(tomlファイルの中身をgrepするのはナイーブすぎるように感じた)ので下記のようにCARGO_PKG_VERSIONを表示するエントリポイントを作ってごまかしています。

[[bin]]
name = "version"
path = "scripts/version.rs"
fn main() {
  println!("v{}", env!("CARGO_PKG_VERSION"));
}

まとめ

ワークフローのデバッグにえらい時間がかかったのですが記事にするとそんなに書くことがなかったです。