Siderが終わるのでlintをreviewdogに移した

このとおりですが,

siderlabs.com

siderがサービス終了するらしいです.

今まで個人プロジェクトでも,会社のプロジェクトでも結構お世話になってきました.使い始めた頃は,まだSideCIという名前で,会社名もアクトキャットという名前だった気がしますが,感慨深い.

とりあえず使えなくなるので,移行します.

reviewdogに移し替える

siderで動かしていたものはほぼreviewdogに移し替える. 後述するが,他のSaaSもいくつか使ったことはあるのだが,どうしても実行環境をこちらで制御しきれないという問題が残る.何が困るかと言うと,手元ではlintが動いているにも関わらず,CIでは失敗するという状態が発生したりする.これは必要なツールを入れられなかったり,何かしらのバージョンが手元と違っていたりする場合によく起こる.

例えばsiderでもstylelintの14.x系がいつになっても使えず,ずっと13系で動いていたりしたので,エラーが出続けていたりした.

こういうのがあるので,できるだけ実行環境をコントロールできて,実行ログも見える形のものを求めた結果,reviewdogに落ち着いた. GitHub Actionsが出て以降,これをActionsで実行するのが非常にコストが低く,PRコメントにも特別な権限を要さないあたりがとても良い.

eslint, stylelint

公式で

github.com

こういうのも用意されているが,あえてこれは使わずに自分で書いている.

name: reviewdog

on:
  pull_request:

jobs:
  eslint:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@master
      - uses: actions/setup-node@v3
        with:
          node-version: 16
      - name: Install
        run: |
          yarn install
      - uses: reviewdog/action-setup@v1
      - name: Run eslint
        env:
          REVIEWDOG_GITHUB_API_TOKEN: ${{ github.token }}
        run: |
          yarn run lint:eslint | reviewdog -f=eslint -reporter=github-pr-review -filter-mode=diff_context -fail-on-error=true

reviewdogはシンプルなCLIだし,action-eslintを使ったからと言って,そこまで行数が減るわけではない. また,一部yarn workspaceを使っているプロジェクトがあり,この場合はaction-eslintを使うとかえって複雑になるので,これで統一している.

-filter-modediff_contextが一番好みだった.デフォルトだとaddedになっているけど,もう少し広く見てもらえるほうが好み.

golang

golangci-lintのCLIを自分で入れなきゃいけないのがちょっと面倒. そのくらいであとはほとんど同じだった.

name: reviewdog

on:
  pull_request:

jobs:
  golangci-lint:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@master
      - uses: actions/setup-go@v2
        with:
          go-version: '^1.16.0'
      - uses: reviewdog/action-setup@v1
      - name: Install golangci-lint
        run: |
          curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.47.2
          golangci-lint --version
      - name: Run golangci-lint
        env:
          REVIEWDOG_GITHUB_API_TOKEN: ${{ github.token }}
        run: |
          golangci-lint run --timeout 3m | reviewdog -f=golangci-lint -reporter=github-pr-review -filter-mode=diff_context -fail-on-error=true

ちょっと気になったのは,golangci-lintが結構遅かったこと……なぜかわからないけど,手元でもActionsでも,デフォルトの1minタイムアウトだとオーバーしてしまったので,これを伸ばしている. そこまで劇的に遅いわけじゃないので真面目に調べる気力がない…….これが普通なんだろうか.

一部はhoundciを使っている

今回移したのはjsとgolangのプロジェクトのみ.というかもともとSiderで使っていたのはこれだけだった.

一部Rubyのプロジェクトはもともとhoundciを使っており,これらはまだ移行していない.あと,最近Rubyあんまり書かないので気づくタイミングがない…….

reviewdogにcredoがほしい

たまにElixirのコードを書くことがあるんだけど,credoを実行してくれるCIがほぼなかったので,現代であればActions+reviewdogでかなり楽にできるんじゃないか!と思った.のだが,reviewdogのformatにcredoは存在しない. 一応flycheckを経由してパースさせているactionはあるのだが,現状ほぼこれしか選択肢はないみたい.

github.com

formatにcredoが追加されると最高なんだけどなぁ.