wheatandcatの開発ブログ

React Nativeで開発しているペペロミア & memoirの技術系記事を投稿してます

GoでGitHub Actionsでreviewdogを実装してみる

今までmonorepoで管理していたペペロミアのプロジェクトをリポジトリに分け始めたので、ついでにreviewdogを実装してみました

github.com

reviewdogとは

reviewdogはPull Requestに対して指定したlinterや静的解析を行い、対象行に以下の画像みたいにコメントをつけてくれるツールです。

f:id:wheatandcat:20200531125421p:plain

画像の例だとGoはidの変数名はID(大文字)にしないとgolintに怒られるので、それについてコメントしています。

実装方法

実装はGitHub Actionsで行いました。 コードはこんな感じです。

■ .github/workflows/reviewdog.yml

name: reviewdog
on: [pull_request]
jobs:
  reviewdog:
    name: reviewdog
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-go@v2
        with:
          go-version: '^1.14'
      - run: go version
      - uses: actions/checkout@v2
      - name: Install linters
        run: go get golang.org/x/lint/golint
      - name: Setup reviewdog
        run: |
          mkdir -p $HOME/bin && curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh| sh -s -- -b $HOME/bin
          echo ::add-path::$HOME/bin
          echo ::add-path::$(go env GOPATH)/bin
      - run: GO111MODULE=off go get -u golang.org/x/lint/golint
      - name: Run reviewdog Pull Request
        env:
          REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          reviewdog -reporter=github-pr-review -runners=golint,govet -tee

このまま実行するとしたら.reviewdog.yml が無いと怒られたので追加

f:id:wheatandcat:20200531130015p:plain

reviewdogではgolintとgovetを実行するので、以下のように記載

■ .reviewdog.yml

runner:
  golint:
    cmd: golint $(go list ./... | grep -v /vendor/)
    format: golint
  govet:
    cmd: go vet $(go list ./... | grep -v /vendor/)
    format: govet

これで問題なく通りました 👌

f:id:wheatandcat:20200531130311p:plain

これでPull Requestを見ると以下の画像のようにコメントが追加されました。

f:id:wheatandcat:20200531125421p:plain

指摘部分を修正するとコメントは消えます 👌

Pull Request

今回の修正はこちら

https://github.com/wheatandcat/PeperomiaBackend/pull/5/files