Skip to content

chore: bump golangci-lint to v2.0.2 #4368

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ jobs:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install Go
uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0
with:
go-version: 1.24.x
- name: Install snmp_exporter/generator dependencies
run: sudo apt-get update && sudo apt-get -y install libsnmp-dev
if: github.repository == 'prometheus/snmp_exporter'
- name: Lint
uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2
uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0
with:
args: --verbose
version: v1.64.6
version: v2.0.2
176 changes: 87 additions & 89 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -1,99 +1,97 @@
output:
sort-results: true

formatters:
enable:
- gofumpt
- goimports
settings:
gofumpt:
extra-rules: true
goimports:
local-prefixes:
- github.com/prometheus/alertmanager
issues:
max-issues-per-linter: 0
max-same-issues: 0
linters:
enable:
- depguard
- errorlint
- godot
- gofumpt
- goimports
- misspell
- revive
- testifylint
- sloglint

issues:
max-issues-per-linter: 0
max-same-issues: 0
exclude-rules:
- path: _test.go
linters:
- errcheck
exclude-files:
# Skip autogenerated files.
- ^.*\.(pb|y)\.go$

- testifylint
exclusions:
generated: strict
presets:
- comments
- common-false-positives
- legacy
- std-error-handling
paths:
# Skip autogenerated files.
- ^.*\.(pb|y)\.go$
rules:
- linters:
- errcheck
path: _test.go
warn-unused: true
settings:
depguard:
rules:
main:
deny:
- pkg: github.com/go-kit/kit/log
desc: "Use github.com/go-kit/log instead of github.com/go-kit/kit/log"
- pkg: github.com/pkg/errors
desc: "Use errors or fmt instead of github.com/pkg/errors"
- pkg: github.com/stretchr/testify/assert
desc: "Use github.com/stretchr/testify/require instead of github.com/stretchr/testify/assert"
- pkg: sync/atomic
desc: "Use go.uber.org/atomic instead of sync/atomic"
errcheck:
exclude-functions:
# Don't flag lines such as "io.Copy(io.Discard, resp.Body)".
- io.Copy
# The next two are used in HTTP handlers, any error is handled by the server itself.
- io.WriteString
- (net/http.ResponseWriter).Write
# No need to check for errors on server's shutdown.
- (*net/http.Server).Shutdown
# Never check for rollback errors as Rollback() is called when a previous error was detected.
- (github.com/prometheus/prometheus/storage.Appender).Rollback
godot:
capital: true
exclude:
- "^ ?This file is safe to edit"
- "^ ?scheme value"
period: true
scope: toplevel
revive:
rules:
- name: blank-imports
- name: context-as-argument
- name: error-naming
- name: error-return
- name: error-strings
- name: errorf
- name: exported
arguments:
- disableStutteringCheck
- name: if-return
- name: increment-decrement
- name: indent-error-flow
- name: package-comments
- name: range
- name: receiver-naming
- name: time-naming
- name: unexported-return
- name: var-declaration
- name: var-naming
testifylint:
disable:
- float-compare
- go-require
enable-all: true
run:
timeout: 5m

linters-settings:
depguard:
rules:
main:
deny:
- pkg: sync/atomic
desc: "Use go.uber.org/atomic instead of sync/atomic"
- pkg: github.com/stretchr/testify/assert
desc: "Use github.com/stretchr/testify/require instead of github.com/stretchr/testify/assert"
- pkg: github.com/go-kit/kit/log
desc: "Use github.com/go-kit/log instead of github.com/go-kit/kit/log"
- pkg: github.com/pkg/errors
desc: "Use errors or fmt instead of github.com/pkg/errors"
errcheck:
exclude-functions:
# Don't flag lines such as "io.Copy(io.Discard, resp.Body)".
- io.Copy
# The next two are used in HTTP handlers, any error is handled by the server itself.
- io.WriteString
- (net/http.ResponseWriter).Write
# No need to check for errors on server's shutdown.
- (*net/http.Server).Shutdown
# Never check for rollback errors as Rollback() is called when a previous error was detected.
- (github.com/prometheus/prometheus/storage.Appender).Rollback
godot:
scope: toplevel
exclude:
- "^ ?This file is safe to edit"
- "^ ?scheme value"
period: true
capital: true
goimports:
local-prefixes: github.com/prometheus/alertmanager
gofumpt:
extra-rules: true
revive:
rules:
- name: exported
arguments: ["disableStutteringCheck"]
- name: blank-imports
- name: context-as-argument
- name: error-return
- name: error-strings
- name: error-naming
- name: if-return
- name: increment-decrement
- name: var-naming
- name: var-declaration
- name: package-comments
- name: range
- name: receiver-naming
- name: time-naming
- name: unexported-return
- name: indent-error-flow
- name: errorf
testifylint:
disable:
- float-compare
- go-require
enable:
- bool-compare
- compares
- empty
- error-is-as
- error-nil
- expected-actual
- len
- require-error
- suite-dont-use-pkg
- suite-extra-assert-call
version: "2"
2 changes: 1 addition & 1 deletion Makefile.common
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_
SKIP_GOLANGCI_LINT :=
GOLANGCI_LINT :=
GOLANGCI_LINT_OPTS ?=
GOLANGCI_LINT_VERSION ?= v1.64.6
GOLANGCI_LINT_VERSION ?= v2.0.2
# golangci-lint only supports linux, darwin and windows platforms on i386/amd64/arm64.
# windows isn't included here because of the path separator being different.
ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin))
Expand Down
12 changes: 6 additions & 6 deletions api/v2/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -565,16 +565,16 @@ func SortSilences(sils open_api_models.GettableSilences) {
}
switch state1 {
case types.SilenceStateActive:
endsAt1 := time.Time(*sils[i].Silence.EndsAt)
endsAt2 := time.Time(*sils[j].Silence.EndsAt)
endsAt1 := time.Time(*sils[i].EndsAt)
endsAt2 := time.Time(*sils[j].EndsAt)
return endsAt1.Before(endsAt2)
case types.SilenceStatePending:
startsAt1 := time.Time(*sils[i].Silence.StartsAt)
startsAt2 := time.Time(*sils[j].Silence.StartsAt)
startsAt1 := time.Time(*sils[i].StartsAt)
startsAt2 := time.Time(*sils[j].StartsAt)
return startsAt1.Before(startsAt2)
case types.SilenceStateExpired:
endsAt1 := time.Time(*sils[i].Silence.EndsAt)
endsAt2 := time.Time(*sils[j].Silence.EndsAt)
endsAt1 := time.Time(*sils[i].EndsAt)
endsAt2 := time.Time(*sils[j].EndsAt)
return endsAt1.After(endsAt2)
}
return false
Expand Down
4 changes: 2 additions & 2 deletions cli/format/format_extended.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ func (formatter *ExtendedFormatter) FormatSilences(silences []models.GettableSil
"%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",
*silence.ID,
extendedFormatMatchers(silence.Matchers),
FormatDate(*silence.Silence.StartsAt),
FormatDate(*silence.Silence.EndsAt),
FormatDate(*silence.StartsAt),
FormatDate(*silence.EndsAt),
FormatDate(*silence.UpdatedAt),
*silence.CreatedBy,
*silence.Comment,
Expand Down
2 changes: 1 addition & 1 deletion cli/format/sort.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ type ByEndAt []models.GettableSilence
func (s ByEndAt) Len() int { return len(s) }
func (s ByEndAt) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s ByEndAt) Less(i, j int) bool {
return time.Time(*s[i].Silence.EndsAt).Before(time.Time(*s[j].Silence.EndsAt))
return time.Time(*s[i].Silence.EndsAt).Before(time.Time(*s[j].EndsAt))
}

type ByStartsAt []*models.GettableAlert
Expand Down
4 changes: 2 additions & 2 deletions cluster/cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ func testJoinLeave(t *testing.T) {
p2.Leave(0 * time.Second)
require.Equal(t, 1, p.ClusterSize())
require.Len(t, p.failedPeers, 1)
require.Equal(t, p2.Self().Address(), p.peers[p2.Self().Address()].Node.Address())
require.Equal(t, p2.Self().Address(), p.peers[p2.Self().Address()].Address())
require.Equal(t, p2.Name(), p.failedPeers[0].Name)
}

Expand Down Expand Up @@ -341,6 +341,6 @@ func testTLSConnection(t *testing.T) {
p2.Leave(0 * time.Second)
require.Equal(t, 1, p1.ClusterSize())
require.Len(t, p1.failedPeers, 1)
require.Equal(t, p2.Self().Address(), p1.peers[p2.Self().Address()].Node.Address())
require.Equal(t, p2.Self().Address(), p1.peers[p2.Self().Address()].Address())
require.Equal(t, p2.Name(), p1.failedPeers[0].Name)
}
6 changes: 3 additions & 3 deletions cluster/delegate.go
Original file line number Diff line number Diff line change
Expand Up @@ -236,19 +236,19 @@ func (d *delegate) MergeRemoteState(buf []byte, _ bool) {
// NotifyJoin is called if a peer joins the cluster.
func (d *delegate) NotifyJoin(n *memberlist.Node) {
d.logger.Debug("NotifyJoin", "node", n.Name, "addr", n.Address())
d.Peer.peerJoin(n)
d.peerJoin(n)
}

// NotifyLeave is called if a peer leaves the cluster.
func (d *delegate) NotifyLeave(n *memberlist.Node) {
d.logger.Debug("NotifyLeave", "node", n.Name, "addr", n.Address())
d.Peer.peerLeave(n)
d.peerLeave(n)
}

// NotifyUpdate is called if a cluster peer gets updated.
func (d *delegate) NotifyUpdate(n *memberlist.Node) {
d.logger.Debug("NotifyUpdate", "node", n.Name, "addr", n.Address())
d.Peer.peerUpdate(n)
d.peerUpdate(n)
}

// NotifyAlive implements the memberlist.AliveDelegate interface.
Expand Down
8 changes: 4 additions & 4 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ func (u *URL) Copy() *URL {
// MarshalYAML implements the yaml.Marshaler interface for URL.
func (u URL) MarshalYAML() (interface{}, error) {
if u.URL != nil {
return u.URL.String(), nil
return u.String(), nil
}
return nil, nil
}
Expand All @@ -119,7 +119,7 @@ func (u *URL) UnmarshalYAML(unmarshal func(interface{}) error) error {
// MarshalJSON implements the json.Marshaler interface for URL.
func (u URL) MarshalJSON() ([]byte, error) {
if u.URL != nil {
return json.Marshal(u.URL.String())
return json.Marshal(u.String())
}
return []byte("null"), nil
}
Expand All @@ -145,7 +145,7 @@ type SecretURL URL
func (s SecretURL) MarshalYAML() (interface{}, error) {
if s.URL != nil {
if MarshalSecretValue {
return s.URL.String(), nil
return s.String(), nil
}
return secretToken, nil
}
Expand Down Expand Up @@ -174,7 +174,7 @@ func (s SecretURL) MarshalJSON() ([]byte, error) {
return json.Marshal("")
}
if MarshalSecretValue {
return json.Marshal(s.URL.String())
return json.Marshal(s.String())
}
return json.Marshal(secretToken)
}
Expand Down
8 changes: 4 additions & 4 deletions config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -818,15 +818,15 @@ func TestUnmarshalEmptyRegexp(t *testing.T) {
err := json.Unmarshal(b, &re)
require.NoError(t, err)
require.Equal(t, regexp.MustCompile("^(?:)$"), re.Regexp)
require.Equal(t, "", re.original)
require.Empty(t, re.original)
}

{
var re Regexp
err := yaml.Unmarshal(b, &re)
require.NoError(t, err)
require.Equal(t, regexp.MustCompile("^(?:)$"), re.Regexp)
require.Equal(t, "", re.original)
require.Empty(t, re.original)
}
}

Expand All @@ -837,15 +837,15 @@ func TestUnmarshalNullRegexp(t *testing.T) {
var re Regexp
err := json.Unmarshal(input, &re)
require.NoError(t, err)
require.Equal(t, "", re.original)
require.Empty(t, re.original)
}

{
var re Regexp
err := yaml.Unmarshal(input, &re) // Interestingly enough, unmarshalling `null` in YAML doesn't even call UnmarshalYAML.
require.NoError(t, err)
require.Nil(t, re.Regexp)
require.Equal(t, "", re.original)
require.Empty(t, re.original)
}
}

Expand Down
2 changes: 1 addition & 1 deletion featurecontrol/featurecontrol.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ func NewFlags(logger *slog.Logger, features string) (Flagger, error) {
opts = append(opts, enableAutoGOMAXPROCS())
logger.Warn("Automatically set GOMAXPROCS to match Linux container CPU quota")
default:
return nil, fmt.Errorf("Unknown option '%s' for --enable-feature", feature)
return nil, fmt.Errorf("unknown option '%s' for --enable-feature", feature)
}
}

Expand Down
4 changes: 2 additions & 2 deletions featurecontrol/featurecontrol_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ func TestFlags(t *testing.T) {
{
name: "with only invalid feature flags",
featureFlags: "somethingsomething",
err: errors.New("Unknown option 'somethingsomething' for --enable-feature"),
err: errors.New("unknown option 'somethingsomething' for --enable-feature"),
},
{
name: "with both, valid and invalid feature flags",
featureFlags: strings.Join([]string{FeatureReceiverNameInMetrics, "somethingbad"}, ","),
err: errors.New("Unknown option 'somethingbad' for --enable-feature"),
err: errors.New("unknown option 'somethingbad' for --enable-feature"),
},
}

Expand Down
Loading