😸

今日の個人開発3~Github ActionsでRustのCIをやってみよう~

2023/02/18に公開

はじめに

この記事は、coloname33が不定期で行う小規模個人開発の記録です。

本日のテーマ

前回の続きです。

Github ActionsでrustのCIをやってみます。

環境

Rust

% cargo --version
cargo 1.67.1 (8ecd4f20a 2023-01-10)

作るもの

clippyの導入と、github actionsでのテスト・ビルドをやります。

実装

Clippyの導入

参考:https://tech.uzabase.com/entry/2022/12/28/094600

以下のコマンドで追加、実行を確認できます。

rustup component add clippy
cargo clippy

vscodeで設定するには、以下の設定を追加してください。

{
  "rust-analyzer.check.command": "clippy",
}

なお、このコマンドではauto-fixは行われません。auto-fixがしたい場合、
この記事のようにoverrideCommandを設定する必要があるようです。

他の設定が効かなくなるなど弊害がありそうなので、今回はやりませんでした。

Clippyが吐いたwarningを確認・修正

やっぱり、assert_eqでbooleanの比較は良くないみたいです。

@@ -30,10 +30,7 @@ impl CheckResult {
            }
        }

        Ok(CheckResult {
            hit: hit,
            blow: blow,
        })
        Ok(CheckResult { hit, blow })
    }

    pub fn correct(&self) -> bool {
@@ -87,6 +84,6 @@ mod tests {
        assert!(result.correct());

        let result = CheckResult { hit: 1, blow: 0 };
        assert_eq!(result.correct(), false);
        assert!(!result.correct());
    }
}

Commit時にlint, testを実行してくれるCIを作成

github actionsで使えるrust用のworkflowとして、action-rsが有名だったようですが、このIsuueにあるように、メンテナンスがされていないようです。

今回は、その代わりとして挙げられていたdtolnay/rust-toolchainを使おうと思います。

実行する項目は、以下のようになります。

  • lint
    • cargo check
    • cargo fmt (rustfmtのインストールが必要)
    • cargo clippy (clippyのインストールが必要)
  • test
    • cargo test

これらを元に、.github/workflows/on-pull-request.ymlを作成しました。

name: Rust lint & test

on: pull_request

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Crate
      uses: actions/checkout@v3
    - name: Set Toolchain
      # https://github.com/dtolnay/rust-toolchain
      uses: dtolnay/rust-toolchain@master
      with:
        toolchain: stable
        components: rustfmt, clippy
    - name: Run check
      run: cargo check
    - name: Run rustfmt
      run: cargo fmt --all -- --check
    - name: Run clippy
      run: cargo clippy -- -D warnings

  test:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Crate
      uses: actions/checkout@v3
    - name: Set Toolchain
      uses: dtolnay/rust-toolchain@stable
    - name: Run test
      run: cargo test

作成したコードは以下になります。

https://github.com/kyuki3rain/hit-and-blow-rust/

最後に

今回はgithub actionsでrustのCIをやってみました。

続きはこちら:
今日の個人開発4~Rustアプリの機能改善・追加~

記事については、もっと読みやすくなるような修正を適宜していくつもりです。

実装こっちの方がいいよ!などあればコメントください。

Discussion