Skip to content

Mitaka Club

clippy-action という GitHub Action をつくっているので紹介する

Rust には Clippy という Rust が公式で提供しているリンターがあり、自分はこれが好きで趣味でも仕事でも利用しているしメンテも行っている。

CI で Clippy を使用する場合にはドキュメントの通り -Dwarnings をオプションに追加してコード全体を Clippy でチェックしてリンターに引っかかるところがあれば CI を落とすようにする、という使い方がある。自分もこうしている。

しかし、上記の場合には CI の詳細画面まで見にいかないとコードのどこでリンターに引っかかったかがわからず一手間かかっていた。また、自分はたまたまなかったが、プロジェクトの初期は Clippy を使用しておらず途中から Clippy を使いたくなった場合にコード全体をチェックして多くのワーニングが出てしまうことはありそうだと考えた。

Clippy を使う既存の Action を探したところ clippy-check というのがあったが現状メンテナンスが行われていないようであった。 このため clippy-action というのをつくり始めた。

clippy_action

使い方は以下の通りで、clippy-action 自体に rust のツールチェインをインストールする機能はないので dtolnay/rust-toolchain を使用してもらうようにしている。ここで nightly を指定していればプロジェクト自体は stable で開発していたとしても nightly で追加されたリントを先に適用できるといったことが可能になるはずである。

name: clippy-action
on: [pull_request]
jobs:
  clippy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: dtolnay/rust-toolchain@stable
      with:
        components: clippy
    - uses: giraffate/clippy-action@v1
      with:
        reporter: 'github-pr-review'
        github_token: ${{ secrets.GITHUB_TOKEN }}

reviewdog を使用しているので GitHub へ review comment したり annotation を表示したりするのはこれに任せている。また、reviewdog はその pull request での差分のみをチェックしてくれる機能があるのでプロジェクト途中からの導入も比較的容易ではないかと考えている。

いくつかバグがあり、ドキュメントがまだまだ不十分だったり、また forked repo の場合は secrets.GITHUB_TOKEN を使用していると権限の関係で想定した動作にならない場合もあるのでいくつか検証も行っているが、自分のプロジェクトではまあ機能しているので既に導入している。

clippy-action が Clippy 導入のハードルを下げられるようしばらくはメンテを行っていきたいと考えている。