Awesome
GitHub Action: Run golangci-lint with reviewdog
This action runs golangci-lint with reviewdog on pull requests to improve code review experience.
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"