Commit Graph

55 Commits

Author SHA1 Message Date
Mads Jensen
f38fc5d064 Enforce plusbuild rule with golangci-lint 2026-01-19 20:27:56 +01:00
Patrick Ohly
e058fbdd99 golangci-lint: enforce control over ginkgo.ReportBeforeSuite/ReportAfterSuite
https://git.k8s.io/enhancements/keps/sig-testing/5468-invariant-testing
introduced a mechanism for tests which hook into the test suite run via
ginkgo.ReportAfterSuite. Usage was limited to code in test/e2e/invariants with
stricter reviews.

However, this was not enforced mechanically. With forbidigo we can be sure that
nothing slips through.

ginkgo.ReportBeforeSuite has similar restrictions.
2026-01-16 13:32:05 +01:00
Patrick Ohly
e0514f6656 lint: don't ignore go vet printf
Our current code does not have any such issues related to printf and
we want to keep it that way.
2026-01-05 13:44:57 +01:00
Kubernetes Prow Robot
be49637f88 Merge pull request #135385 from PatrickLaabs/132086-denypointerpkg
chore: Denying deprecated pointer package in golangci-linters config
2025-12-17 21:42:31 -08:00
PatrickLaabs
7402fc23db Denying deprecated pointer package in golangci-linters config 2025-11-21 09:51:20 +01:00
Stephen Kitt
55c337637e Enforce Golang a, b = b, a swaps
This eliminates the last two remaining three-step value swaps (t =
a; a = b; b = t instead of a, b = b, a) and enables linting to prevent
new ones being added in future.

Signed-off-by: Stephen Kitt <skitt@redhat.com>
2025-11-13 06:38:23 -05:00
Kubernetes Prow Robot
60e1f61a63 Merge pull request #133511 from BenTheElder/no-md5
eliminate md5 usage, block new usage
2025-10-24 10:59:35 -07:00
Stephen Kitt
1e2817d589 Avoid no-change lambdas
This replaces functions that wrap another function with no change with
a direct reference to the wrapped function.

Signed-off-by: Stephen Kitt <skitt@redhat.com>
2025-10-23 09:46:15 +02:00
Stephen Kitt
5bfc9aba9f Disable unwanted gocritic checks instead of filtering them
The golangci-lint docs indicate that, for gocritic, disabled-checks
and enabled-checks can't be combined. That is however not accurate;
enabled-checks adds checks, disabled-checks disables them, in that
order. If disable-all isn't set, then the setup starts with the checks
enabled by default, adds any additional checks specified in
enabled-checks, and removes checks specified in disabled-checks.

This means that instead of filtering unwanted checks, we can disable
them entirely. This makes the set of disabled checks easier to read,
and perhaps easier to clean up in future.

For singleCaseSwitch and wrapperFunc, we only want to ignore specific
instances, so this is still done by filtering.

Signed-off-by: Stephen Kitt <skitt@redhat.com>
2025-10-22 15:00:53 +02:00
Benjamin Elder
886fdeefae forbid new use of md5 2025-10-21 15:25:11 -07:00
Tim Hockin
b1c85ef2fe golangci-lint: no need to enable deprecatedComment 2025-10-21 12:47:38 -07:00
Kubernetes Prow Robot
22a567ac31 Merge pull request #133571 from BenTheElder/deprecated-missing-oh-no
fix many incorrect deprecation warnings in godoc, enable deprecatedComment linter
2025-08-27 18:30:53 -07:00
Benjamin Elder
b9d5edd444 remove stray strailing tabs from gocritic settings 2025-08-18 11:22:40 -07:00
Benjamin Elder
535b4e07e9 enable gocritic deprecatedComment check to help lint for malformed deprecation comments 2025-08-18 11:22:08 -07:00
Taahir Ahmed
c11759bdbf golangci: Disable staticcheck QF1008 in hints
Disable QF1008 in pull-kubernetes-linter-hints, based on discussion in
\#k8s-code-organization.  We might want a check that forced a consistent
style within a single file, but there is no reason to prefer a global
choice between `obj.ObjectMeta.Name` and `obj.Name`.

Change-Id: If2e7a3a464cdf1ac83fdaaa18b065df1f19e8568
2025-07-29 21:06:22 +00:00
Kubernetes Prow Robot
9a50e30636 Merge pull request #132668 from dims/fix-todos-from-sorted-features-original-pr
Fix todos from sorted features golangci-lint plugin PR
2025-07-09 13:15:26 -07:00
Patrick Ohly
b22ffdb48f golangci-lint: exclude naming convention check for swagger docs
This started to show up now as linter hints at the start of the 1.34 cycle in
all PRs which modify the API. We don't want to enforce that convention in that
generated code, so suppressing it.
2025-07-06 16:54:04 +02:00
Davanum Srinivas
1514568ddf rename sortedfeatures -> sorted
Signed-off-by: Davanum Srinivas <davanum@gmail.com>
2025-07-01 22:12:26 -04:00
Davanum Srinivas
f2d8b7ec2c Add linter to report on unsorted feature gates
Signed-off-by: Davanum Srinivas <davanum@gmail.com>
2025-06-27 11:05:13 -04:00
Kubernetes Prow Robot
3e39d1074f Merge pull request #132221 from dims/new-cmp-diff-impl
New implementation for `Diff` (drop in replacement for `cmp.Diff`)
2025-06-16 18:02:58 -07:00
Davanum Srinivas
03afe6471b Add a replacement for cmp.Diff using json+go-difflib
Co-authored-by: Jordan Liggitt <jordan@liggitt.net>
Signed-off-by: Davanum Srinivas <davanum@gmail.com>
2025-06-16 17:10:42 -04:00
Pierre Gimalac
40c718864b chore(apiserver): avoid using html template which disables dce 2025-06-13 15:28:55 +02:00
Stephen Kitt
d1bddfd779 Forbid github.com/pkg/errors in k/k
kubeadm has replaced pkg/errors with an internal implementation, which
means that pkg/errors can be marked as unwanted (once a final
straggler is replaced).

Signed-off-by: Stephen Kitt <skitt@redhat.com>
2025-06-05 18:03:56 +03:00
Stephen Kitt
a6e2268994 Ensure github.com/pkg/errors is used only in kubeadm
Now that all other uses have been removed, this configures depguard to
ensure that new ones aren't added outside kubeadm.

Signed-off-by: Stephen Kitt <skitt@redhat.com>
2025-06-02 14:29:38 +02:00
Joel Speed
2f50d0a510 Add kube-api-linter plugin to golangci-lint 2025-05-16 16:04:15 +01:00
Patrick Ohly
2ea4b1aba6 golangci-lint: don't warn about conversion and defaulting functions
The linter suppression got removed in the migration to golangci-lint v2 because
it wasn't triggered for existing code, but as seen in a PR which adds a
conversion package the suppression is still needed.

Furthermore, we also want to suppress for unexported, manually written
conversion and defaulting functions because those follow the same Kubernetes
naming convention.
2025-05-05 13:00:08 +02:00
Patrick Ohly
5d9a2f30f2 golangci-lint: finish migration to v2
This finishes the work started in
https://github.com/kubernetes/kubernetes/pull/131113.

Changes:
- Remove TODOs for things that we don't have plans to fix.
- Add issue for older TODO.
- Reorganize and remove suppression rules so that the base check
  has no unused rules.
- Document warn-unused, but don't enable it.
- Remove disabling of statistics (they are useful) and ensure that
  they don't get the ERROR prefix.
- Avoid ../ prefix in paths via `run.relative-path-mode: gomod`.
2025-05-02 14:38:09 +02:00
Matthieu MOREL
4adb58565c chore: bump golangci-lint to v2
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
2025-05-02 12:51:02 +02:00
Oleksandr Redko
67f0e95b3a hack: fix text 2025-03-10 14:31:08 +02:00
Oleksandr Redko
a9d558de26 hack: verify golangci-lint config, update text 2025-03-10 12:40:04 +02:00
Oleksandr Redko
834a0d92cf hack: fix settings for forbidigo linter 2025-03-07 17:27:03 +02:00
Patrick Ohly
650db7fab9 golangci-lint: temporarily suppress known issues in the code base
These suppressions are necessary to make golangci-lint 1.64 pass with the
current code base. This change is meant to be backported to release
branches. On master, we may want to revert some of it together with fixing the
findings.
2025-02-26 16:09:28 +01:00
Jordan Liggitt
43509b63d7 Bump hack/tools to github.com/golangci/golangci-lint 1.64.5 for go 1.24 2025-02-26 11:27:14 +01:00
xin.li
d92c70b826 enable go-required check
Signed-off-by: xin.li <xin.li@daocloud.io>
2025-02-24 10:38:44 +08:00
Patrick Ohly
949385731f golangci-lint: remove "strict" checking
The corresponding "pull-kubernetes-verify-lint" job was already removed
earlier. Manual strict checking was still possible, but doesn't really make
sense for the same reasons why the job was removed (e.g. the decisions which
checks should be "strict" were too arbitrary).

The explanations for "hints" no longer end with "In general please prefer to
fix the error, ..." because that was misleading and only really applied to the
checks for existing code. For those checks we prefer to fix errors instead of
suppressing them, but not for hints.
2025-02-02 18:50:27 +01:00
Kubernetes Prow Robot
547654a8a1 Merge pull request #129813 from yongruilin/golangci-featuregate-add
feat: add a lint rule to prevent Add unversioned featuregate
2025-01-29 16:41:22 -08:00
yongruilin
8a0937c034 feat: add a lint rule to prevent Add unversioned featuregate 2025-01-28 09:37:43 -08:00
Davanum Srinivas
4e05bc20db Linter to ensure go-cmp/cmp is used ONLY in tests
Signed-off-by: Davanum Srinivas <davanum@gmail.com>
2025-01-24 20:49:14 -05:00
Kubernetes Prow Robot
3d7c95f241 Merge pull request #127769 from mmorel-35/golangci-lint/usestdlibvars
fix: apply usestdlibvars linter with golangci strict and hints
2024-10-23 02:21:42 +01:00
Antonin Bas
7dc4af6c8a Ignore false positives from unused linter
This is a workaround for a false positive in the staticcheck linter,
which has not been addressed yet.
See https://github.com/dominikh/go-tools/issues/1294.
Once this is fixed in staticcheck, we can just remove the exclude rule
from the golangci config.

Signed-off-by: Antonin Bas <antonin.bas@broadcom.com>
2024-10-03 14:44:08 -07:00
Matthieu MOREL
25222cb812 fix: apply usestdlibvars linter with golangci strict and hints
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
2024-10-01 08:36:50 +02:00
Matthieu MOREL
0d2ad0ee43 fix: clean up testifylint configuration in golangci-lint
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
2024-09-29 11:45:21 +02:00
Matthieu MOREL
64e9fd50ed chore: disable require-error rule from testifylint
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
2024-09-24 07:17:52 +02:00
Matthieu MOREL
552cebfa7e fix: enable blank-import rule from testifylint
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
2024-09-22 11:36:42 +02:00
Kubernetes Prow Robot
fe1840205c Merge pull request #125926 from MadhavJivrajani/bump-staticcheck-exclude-SA1006
[go1.23] hack: bump go-tools and exclude SA1006
2024-07-15 10:05:19 -07:00
Madhav Jivrajani
0d2c0e0d3c hack: disable SA1006 check
Signed-off-by: Madhav Jivrajani <madhav.jiv@gmail.com>
2024-07-15 15:03:15 +05:30
Matthieu MOREL
f014b754fb fix: enable empty and len rules from testifylint on pkg package
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>

Co-authored-by: Patrick Ohly <patrick.ohly@intel.com>
2024-07-06 23:15:43 +00:00
Matthieu MOREL
0cde5f1e28 fix: enable bool-compare rule from testifylint linter (#125135)
* fix: enable bool-compare rule from testifylint linter

Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>

* Update hack/golangci.yaml.in

Co-authored-by: Patrick Ohly <patrick.ohly@intel.com>

* Update golangci.yaml.in

* Update golangci-strict.yaml

* Update golangci.yaml.in

* Update golangci.yaml.in

* Update golangci.yaml.in

* Update golangci.yaml.in

* Update golangci.yaml

* Update golangci-hints.yaml

* Update golangci-strict.yaml

* Update golangci.yaml.in

* Update golangci.yaml

* Update mux_test.go

---------

Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
Co-authored-by: Patrick Ohly <patrick.ohly@intel.com>
2024-06-28 10:58:05 -07:00
Patrick Ohly
8876b68a60 golangci-lint: add hints for error wrapping
Wrapping errors may or may not be the right thing to do (see
https://go.dev/blog/go1.13-errors#whether-to-wrap and the discussion in
https://github.com/kubernetes/kubernetes/issues/123234). But developers should
at least think about it, so let's emit linter hints for it: the golangci-lint
config by default enables it for go-errorlint, just not the linter itself, so
we just need to add it for the "hints" config.

Direct error comparisons and assertions also get checked. Those are typically
something that should be replaced by errors.Is and errors.As, but as the
existing code often doesn't do that, let's also treat those as just hints.
2024-02-13 14:12:04 +01:00
Patrick Ohly
36cceff0a3 e2e: forbid usage of gomega.BeTrue/False
`BeTrue` without explanation in `Should` just prints "false is not true", which
isn't a useful failure message. Even with an explanation that message is still
printed, which is just noise. The new BeTrue/FalseBecause avoid that by
requiring that an explanation is provided and using that instead of "false is
not true".

In Kubernetes, we can enforce the usage of those better alternatives or the
if+Fail combination via forbidigo. Because we have existing code which still
needs to be updated, this can only be a hint for now.

Some examples found with this:

ERROR: test/e2e/apimachinery/protocol.go:75:20: use of `o.BeTrue` forbidden because "it does not produce a good failure message, use BeTrueBecause with an explicit printf-style failure message instead or plain Go: if ... { ginkgo.Fail(...) }" (forbidigo)
ERROR: 			o.Expect(ok).To(o.BeTrue())
ERROR: 			                ^

ERROR: test/e2e_node/unknown_pods_test.go:163:52: use of `gomega.BeTrue` forbidden because "it does not produce a good failure message, use BeTrueBecause with an explicit printf-style failure message instead or plain Go: if ... { ginkgo.Fail(...) }" (forbidigo)
ERROR: 			}, f.Timeouts.PodStart, f.Timeouts.Poll).Should(gomega.BeTrue())
ERROR: 			                                                ^

The solution might also be to write a custom matcher, but that is a bit hard to
explain in the forbidigo message.
2023-12-20 10:11:56 +01:00