next lint の結果を Reviewdog でプルリクエストに反映する
next lint の結果を Reviewdog に食わせて PR にコメントとして出したかったんだけど結構ハマったのでメモ。
普通に next lint を動かしてもだめ
"scripts": { "lint": "next lint" }
- uses: reviewdog/action-setup@v1 with: reviewdog_version: latest - name: Run reviewdog env: REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: npm run lint | reviewdog -f=eslint -reporter=github-pr-review -filter-mode=diff_context -fail-on-error=true
こんな感じでやってみたんだけど、lint ではエラーが出てるけど reviewdog が PR に反映してくれなくてなんで? ってなっていた。
next lint はフォーマッタが eslint デフォルトと違う
next lint の warning メッセージ:
$ npm run lint:next ./src/hoge/index.tsx 39:6 Warning: React Hook useEffect has an unnecessary dependency: 'ref.current'. Either exclude it or remove the dependency array. Mutable values like 'ref.current' aren't valid dependencies because mutating them doesn't re-render the component. react-hooks/exhaustive-deps info - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/basic-features/eslint#disabling-rules
eslint の warning メッセージ:
& npm run lint:next /Users/hoge/index.tsx 39:6 warning React Hook useEffect has an unnecessary dependency: 'ref.current'. Either exclude it or remove the dependency array. Mutable values like 'ref.current' aren't valid dependencies because mutating them doesn't re-render the component react-hooks/exhaustive-deps ✖ 1 problems (0 errors, 1 warnings) info - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/basic-features/eslint#disabling-rules
となっており、若干の違いがある。
next lint、formatter を自前で作ってるのか
— mizdra (@mizdra) 2023年1月14日
NowBrowsing: next.js/customFormatter.ts at canary · vercel/next.js: https://t.co/jbaoqvAzRl
next lint -f stylish
next lint にフォーマットを指定できるので、 -f stylish をすると reviewdog が解釈できるようになる。
https://eslint.org/docs/latest/use/formatters/#stylish にあるように、eslint は stylish がデフォルトフォーマットとなっている。
"scripts": { "lint": "next lint -f stylish" }
これでPRにコメントしてくれるようになった。
おわり
Reviewdog で試行錯誤したPRは reviewdog by starhoshi · Pull Request #3 · starhoshi/romoco · GitHub で、最終的な workflow yml はこれです
name: Test on: [pull_request] jobs: build: name: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup Node uses: actions/setup-node@v3 with: node-version: 18 cache: 'npm' - run: npm ci - uses: reviewdog/action-setup@v1 with: reviewdog_version: latest - name: Run reviewdog env: REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: npm run lint | reviewdog -f=eslint -reporter=github-pr-review -filter-mode=diff_context -fail-on-error=true
https://github.com/starhoshi/romoco/blob/main/.github/workflows/pr.yml
追記
Reviewdog を使わないで next lint -f stylish
するだけで PR には反映できるのでそっちでも良さそう
reviewdog なるほど。僕は GitHub の Files changed にエラーの詳細を出したくて stylish に変更してました ( https://t.co/JVvIuty0TR )。next lint のカスタムフォーマッター使いづらい。 / “next lint の結果を Reviewdog で Github Actions に反映する - star__hoshi's…” https://t.co/i1Ttgz2Sqg
— mizdra (@mizdra) 2023年1月17日