Home

Awesome

GitHub Action: Run golangci-lint with reviewdog

release GitHub release (latest SemVer) action-bumpr supported Used-by counter

This action runs golangci-lint with reviewdog on pull requests to improve code review experience.

annotation on diff tab example check tab example status check example

Migrating from v1 to v2

In many cases, you need to do nothing. Just use reviewdog/action-golangci-lint@v2 instead of reviewdog/action-golangci-lint@v1.

If your workflow have steps for setting up Go and caching go modules, they are no longer needed. reviewdog/action-golangci-lint@v2 now set up Go and cache modules automatically, so remove these steps.

on: [pull_request]
jobs:
  golangci-lint:
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      # no need with v2
      # - name: Set up Go
      #   uses: actions/setup-go@v2
      #   with:
      #     go-version: '1.17'

      # no need with v2
      # - uses: actions/cache@v2
      #   with:
      #     path: |
      #         ~/.cache/golangci-lint
      #         ~/.cache/go-build
      #         ~/go/pkg/mod
      #     key: ${{ runner.os }}-golangcilint-${{ hashFiles('**/go.sum') }}
      #     restore-keys: |
      #       ${{ runner.os }}-golangcilint-

      - name: golangci-lint
        uses: reviewdog/action-golangci-lint@v2

Inputs

github_token

Required. Default is ${{ github.token }}.

golangci_lint_flags

Optional. golangci-lint flags. (golangci-lint run --out-format=line-number <golangci_lint_flags>)

Note that you can change golangci-lint behavior by configuration file too.

tool_name

Optional. Tool name to use for reviewdog reporter. Useful when running multiple actions with different config.

level

Optional. Report level for reviewdog [info,warning,error]. It's same as -level flag of reviewdog.

workdir

Optional. Working directory relative to the root directory.

reporter

Optional. Reporter of reviewdog command [github-pr-check,github-pr-review]. It's same as -reporter flag of reviewdog.

filter_mode

Optional. Filtering mode for the reviewdog command [added,diff_context,file,nofilter]. Default is added.

fail_level

Optional. If set to none, always use exit code 0 for reviewdog. Otherwise, exit code 1 for reviewdog if it finds at least 1 issue with severity greater than or equal to the given level. Possible values: [none, any, info, warning, error] Default is none.

fail_on_error

Deprecated, use fail_level instead. Optional. Exit code for reviewdog when errors are found [true, false] Default is false.

reviewdog_flags

Optional. Additional reviewdog flags

go_version

Optional. Install a specific version of Go. By default, the latest version of Go 1.x is installed.

go_version_file

Optional. Install a specific version of Go from a file. It accepts a path to a go.mod file or a file containing only Go version. If both the go_version and the go_version_file inputs are provided then the go_version input is used.

cache

Optional. [true, false] It enables cache. The action caches ~/.cache/golangci-lint, ~/.cache/go-build, ~/go/pkg/mod. Default is true.

reviewdog_version

Optional. Install a specific version of reviewdog. By default, the latest version of reviewdog is installed.

golangci_lint_version

Optional. Install a specific version of golangci-lint. By default, the latest version of golangci-lint is installed.

Example usage

Minimum Usage Example

.github/workflows/reviewdog.yml

name: reviewdog
on: [pull_request]
jobs:
  golangci-lint:
    name: runner / golangci-lint
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: golangci-lint
        uses: reviewdog/action-golangci-lint@v2

Advanced Usage Example

.github/workflows/reviewdog.yml

name: reviewdog
on: [pull_request]
jobs:
  # NOTE: golangci-lint doesn't report multiple errors on the same line from
  # different linters and just report one of the errors?

  golangci-lint:
    name: runner / golangci-lint
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: golangci-lint
        uses: reviewdog/action-golangci-lint@v2
        with:
          # optionally use a specific version of Go rather than the latest one
          go_version: "1.17"

          # Can pass --config flag to change golangci-lint behavior and target
          # directory.
          golangci_lint_flags: "--config=.github/.golangci.yml ./testdata"
          workdir: subdirectory/

  # Use golint via golangci-lint binary with "warning" level.
  golint:
    name: runner / golint
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: golint
        uses: reviewdog/action-golangci-lint@v2
        with:
          golangci_lint_flags: "--disable-all -E golint"
          tool_name: golint # Change reporter name.
          level: warning # GitHub Status Check won't become failure with this level.

  # You can add more and more supported linters with different config.
  errcheck:
    name: runner / errcheck
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: errcheck
        uses: reviewdog/action-golangci-lint@v2
        with:
          golangci_lint_flags: "--disable-all -E errcheck"
          tool_name: errcheck
          level: info

  # Disable cache of golangci-lint result, go build and go dependencies
  with_cache:
    name: runner / errcheck
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: golangci-lint
        uses: reviewdog/action-golangci-lint@v2
        with:
          cache: false

All-in-one golangci-lint configuration without config file

.github/workflows/reviewdog.yml

name: reviewdog
on: [pull_request]
jobs:
  golangci-lint:
    name: runner / golangci-lint
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: golangci-lint
        uses: reviewdog/action-golangci-lint@v2
        with:
          golangci_lint_flags: "--enable-all --exclude-use-default=false"