今日の個人開発3~Github ActionsでRustのCIをやってみよう~
はじめに
この記事は、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