Table of Contents
CI installation
Most installations of golangci-lint
are performed for CI.
GitHub Actions
We recommend using our GitHub Action for running golangci-lint
in CI for GitHub projects.
It's fast and uses smart caching inside
and it can be much faster than the simple binary installation.
Also, the action creates GitHub annotations for found issues: you don't need to dig into build log to see found by golangci-lint
issues:
Other CI
It's important to have reproducible CI:
don't start to fail all builds at the same time. With golangci-lint this can happen if you
use deprecated option --enable-all
and a new linter is added or even without --enable-all
: when one upstream linter is upgraded.
It's highly recommended to install a specific version of golangci-lint available on the releases page.
Here is the recommended way to install golangci-lint v1.27.0:
# binary will be $(go env GOPATH)/bin/golangci-lintcurl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.27.0# or install it into ./bin/curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.27.0# In alpine linux (as it does not come with curl by default)wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.27.0golangci-lint --version
It is advised that you periodically update the version of golangci-lint
as the project is under active development
and is constantly being improved. For any problems with golangci-lint
, check out recent GitHub issues and update if needed.
Local Installation
macOS
You can also install a binary release on macOS using brew:
brew install golangci/tap/golangci-lintbrew upgrade golangci/tap/golangci-lint
Docker
docker run --rm -v $(pwd):/app -w /app golangci/golangci-lint:v1.27.0 golangci-lint run -v
Install from Source
Go source installations are supported for the two most recent Go releases.
go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.27.0
Versioning Policy
golangci-lint
follows semantic versioning. However, due to the nature of golangci-lint
as a code quality tool,
it's not always clear when a minor or major version bump occurs. To help clarify this for everyone, we've defined the following semantic versioning policy:
- Patch release (intended to not break your lint build)
- A patch version update in a specific linter that results in
golangci-lint
reporting fewer errors. - A bug fix to the CLI or core (packages loading, runner, postprocessors, etc).
- Improvements to documentation.
- Non-user-facing changes such as refactoring code, adding, deleting, or modifying tests, and increasing test coverage.
- Re-releasing after a failed release (i.e., publishing a release that doesn't work for anyone).
- A patch version update in a specific linter that results in
- Minor release (might break your lint build because of newly found issues)
- A major or minor version update of a specific linter that results in
golangci-lint
reporting more errors. - A new linter is added.
- An existing configuration option or linter is deprecated.
- A new CLI command is created.
- Backward incompatible change of configuration with extremely low impact, e.g. adding validation of a list of enabled
go-critic
checkers.
- A major or minor version update of a specific linter that results in
- Major release (likely to break your lint build)
- Backward incompatible change of configuration with huge impact, e.g. removing excluding issues about missed comments from
golint
by default. - A linter is removed.
- Backward incompatible change of configuration with huge impact, e.g. removing excluding issues about missed comments from
According to our policy, any minor update may report more errors than the previous release (ex: from a bug fix). As such, we recommend using the fixed minor version and fixed or the latest patch version to guarantee the results of your builds.
For example, in our GitHub Action we require users to explicitly set the minor version of golangci-lint
and we always use the latest patch version.
Next
Quick Start: how to use golangci-lint
.