Repository: jaegertracing/jaeger

Issue:
Help upgrading to golangci v2
We have an automated PR #6926 that is failing.

* To enable v2 linter the internal/tools/tools.go needs to be changed similar to https://github.com/jaegertracing/jaeger-idl/pull/160/files. Run `go mod tidy && (cd internal/tools && go mod tidy)` after that change.
* Then there may be some linting issues that need to be fixed, run `make lint` to validate

Discussion:
@AnmolxSingh: @yurishkuro did you use migration `golangci-lint migrate`?@yurishkuro: yes

Solution patch:
diff --git a/.golangci.yml b/.golangci.yml
index ae3fc074..47fb0ceb 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -1,196 +1,93 @@
-issues:
-  # Excluding configuration per-path, per-linter, per-text and per-source
-  exclude-rules:
-    # Exclude some linters from running on tests files.
-    - path: _test\.go
-      linters: [gosec, bodyclose, noctx]
-
-    - path: crossdock
-      linters: [noctx]
-
-    # See https://github.com/jaegertracing/jaeger/issues/4488
-    - path: internal/grpctest/
-      linters: [staticcheck]
-
-    - linters: [gocritic]
-      text: "dupArg"
-    - linters: [gocritic]
-      text: "exitAfterDefer"
-    - linters: [gocritic]
-      text: "appendAssign"
-  exclude-dirs-use-default: false
-  exclude-dirs:
-    - mocks
-    - thrift-0.9.2
-    - .*-gen
-  exclude-files:
-    - ".*.pb.go$"
-  max-issues-per-linter: 0
-  max-same-issues: 0
-
+version: "2"
+run:
+  go: "1.23"
 linters:
-  disable:
-    - errcheck
   enable:
-    # Plain ASCII identifiers.
     - asciicheck
-
-    # Checks for dangerous unicode character sequences.
     - bidichk
-
-    # Checks whether HTTP response body is closed successfully.
-    # TODO enable this but maybe find a way to disable in tests.
     - bodyclose
-
-    # Check whether the function uses a non-inherited context.
     - contextcheck
-
-    # Check declaration order of types, consts, vars and funcs.
+    - copyloopvar
     - decorder
-
-    # Checks if package imports are in a list of acceptable packages (see cfg below).
     - depguard
-
-    # Check for two durations multiplied together.
     - durationcheck
-
-    # Checks `Err-` prefix for var and `-Error` suffix for error type.
     - errname
-
-    # Suggests to use `%w` for error-wrapping.
     - errorlint
-
-    # Checks for pointers to enclosing loop variables.
-    - copyloopvar
-
     - gocritic
-    - gofmt
-    - gofumpt
-    - goimports
-
-    # Allow or ban replace directives in go.mod
-    # or force explanation for retract directives.
-    # Maybe enable once we get rid of old sarama.
-    # - gomoddirectives
-
     - gosec
-
-    # Linter that specializes in simplifying code.
-    - gosimple
-    - govet
-
-    # Detects when assignments to existing variables are not used.
-    - ineffassign
-
     - misspell
-
-    # Finds naked/bare returns and requires change them.
     - nakedret
-
-    # Require a bit more explicit returns.
     - nilerr
-
-    # Finds sending HTTP request without context.Context.
     - noctx
-
-    # Reports ill-formed or insufficient nolint directives.
     - nolintlint
-
-    # Checks that fmt.Sprintf can be replaced with a faster alternative.
     - perfsprint
-
-    # Fast, configurable, extensible, flexible, and beautiful linter for Go. Drop-in replacement of golint.
     - revive
-
-    # Checks usage of github.com/stretchr/testify.
     - testifylint
-
-    # Detects the possibility to use variables/constants from the Go standard library.
     - usestdlibvars
-
-    # TODO consider adding more linters, cf. https://olegk.dev/go-linters-configuration-the-right-version
-
-linters-settings:
-  depguard:
-    rules:
-      disallowed-deps:
-        deny:
-          - pkg: go.uber.org/atomic
-            desc: "Use 'sync/atomic' instead of go.uber.org/atomic"
-          - pkg: io/ioutil
-            desc: "Use os or io instead of io/ioutil"
-          - pkg: github.com/hashicorp/go-multierror
-            desc: "Use errors.Join instead of github.com/hashicorp/go-multierror"
-          - pkg: go.uber.org/multierr
-            desc: "Use errors.Join instead of github.com/hashicorp/go-multierror"
-          - pkg: "github.com/jaegertracing/jaeger/model$"
-            desc: "Use github.com/jaegertracing/jaeger-idl/model/v1"
-          - pkg: "github.com/jaegertracing/jaeger/internal/proto-gen/api_v2$"
-            desc: "Use github.com/jaegertracing/jaeger-idl/proto-gen/api_v2"
-      # crossdock-go provides assert/require similar to stretchr/testify
-      # but we never want to use them outside of the crossdock tests.
-      disallow-crossdock:
-        deny:
-          - pkg: github.com/crossdock/crossdock-go
-            desc: "Do not refer to crossdock from other packages"
-        files:
-          - "!**/crossdock/**"
-
-      disallow-uber/goleak:
-        deny:
-         - pkg: go.uber.org/goleak
-           desc: "Use github.com/jaegertracing/jaeger/internal/testutils"
-        files:
-          - "**_test.go"
-
-      disallow-otel-contrib-translator:
-        deny:
-          - pkg: github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger
-            desc: "Use v1adapter package instead of opentelemetry-collector-contrib/pkg/translator/jaeger"
-        files:
-          - "!**/v1adapter/**"
-
-  goimports:
-    local-prefixes: github.com/jaegertracing/jaeger
-  gosec:
-    # To specify a set of rules to explicitly exclude.
-    # Available rules: https://github.com/securego/gosec#available-rules
-    excludes:
-      - G104
-      - G107
-      - G404
-      - G601
-  govet:
-    enable-all: true
-    disable:
-      # There is rarely performance differences due to padding,
-      # the most noticable impact is memory usage. However,
-      # the main trace data is Protobuf-generated and we ignore
-      # those files from linting, so this linter is not useful.
-      - fieldalignment
-      # Disable shadow
-      - shadow
-  perfsprint:
-    # Optimizes even if it requires an int or uint type cast.
-    int-conversion: true
-    # Optimizes into `err.Error()` even if it is only equivalent for non-nil errors.
-    err-error: true
-    # Optimizes `fmt.Errorf`.
-    errorf: true
-    # Optimizes `fmt.Sprintf` with only one argument.
-    sprintf1: true
-    # Optimizes into strings concatenation.
-    strconcat: true
-  revive:
-      ignore-generated-header: true
+  disable:
+    - errcheck
+    - staticcheck
+  settings:
+    depguard:
+      rules:
+        disallow-crossdock:
+          files:
+            - '!**/crossdock/**'
+          deny:
+            - pkg: github.com/crossdock/crossdock-go
+              desc: Do not refer to crossdock from other packages
+        disallow-otel-contrib-translator:
+          files:
+            - '!**/v1adapter/**'
+          deny:
+            - pkg: github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger
+              desc: Use v1adapter package instead of opentelemetry-collector-contrib/pkg/translator/jaeger
+        disallow-uber/goleak:
+          files:
+            - '**_test.go'
+          deny:
+            - pkg: go.uber.org/goleak
+              desc: Use github.com/jaegertracing/jaeger/internal/testutils
+        disallowed-deps:
+          deny:
+            - pkg: go.uber.org/atomic
+              desc: Use 'sync/atomic' instead of go.uber.org/atomic
+            - pkg: io/ioutil
+              desc: Use os or io instead of io/ioutil
+            - pkg: github.com/hashicorp/go-multierror
+              desc: Use errors.Join instead of github.com/hashicorp/go-multierror
+            - pkg: go.uber.org/multierr
+              desc: Use errors.Join instead of github.com/hashicorp/go-multierror
+            - pkg: github.com/jaegertracing/jaeger/model$
+              desc: Use github.com/jaegertracing/jaeger-idl/model/v1
+            - pkg: github.com/jaegertracing/jaeger/internal/proto-gen/api_v2$
+              desc: Use github.com/jaegertracing/jaeger-idl/proto-gen/api_v2
+    gosec:
+      excludes:
+        - G104
+        - G107
+        - G404
+        - G601
+    govet:
+      disable:
+        - fieldalignment
+        - shadow
+      enable-all: true
+    perfsprint:
+      int-conversion: true
+      err-error: true
+      errorf: true
+      sprintf1: true
+      strconcat: true
+    revive:
       severity: error
       enable-all-rules: true
-      # See https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md
       rules:
         # not a completely bad linter, but needs clean-up and sensible width (80 is too small)
         - name: line-length-limit
+          arguments:
+            - 80
           disabled: true
-          arguments: [80]
         # would be ok if we could exclude the test files, but otherwise too noisy
         - name: add-constant
           disabled: true
@@ -245,9 +142,57 @@ linters-settings:
         # this rule conflicts with nolintlint which does insist on no-space in //nolint
         - name: comment-spacings
           disabled: true
-  testifylint:
-    enable-all: true
-
-run:
-  go: "1.23"
-  timeout: 20m
+    testifylint:
+      enable-all: true
+  exclusions:
+    generated: lax
+    presets:
+      - comments
+      - common-false-positives
+      - legacy
+      - std-error-handling
+    rules:
+      - linters:
+          - bodyclose
+          - gosec
+          - noctx
+        path: _test\.go
+      - linters:
+          - noctx
+        path: crossdock
+      - linters:
+          - staticcheck
+        path: internal/grpctest/
+      - linters:
+          - gocritic
+        text: dupArg
+      - linters:
+          - gocritic
+        text: exitAfterDefer
+      - linters:
+          - gocritic
+        text: appendAssign
+    paths:
+      - .*.pb.go$
+      - mocks
+      - thrift-0.9.2
+      - .*-gen
+issues:
+  max-issues-per-linter: 0
+  max-same-issues: 0
+formatters:
+  enable:
+    - gofmt
+    - gofumpt
+    - goimports
+  settings:
+    goimports:
+      local-prefixes:
+        - github.com/jaegertracing/jaeger
+  exclusions:
+    generated: lax
+    paths:
+      - .*.pb.go$
+      - mocks
+      - thrift-0.9.2
+      - .*-gen
diff --git a/internal/storage/integration/trace_compare.go b/internal/storage/integration/trace_compare.go
index fa9b1889..0accb917 100644
--- a/internal/storage/integration/trace_compare.go
+++ b/internal/storage/integration/trace_compare.go
@@ -16,7 +16,7 @@ import (
 
 // CompareSliceOfTraces compares two trace slices
 func CompareSliceOfTraces(t *testing.T, expected []*model.Trace, actual []*model.Trace) {
-	require.Equal(t, len(expected), len(actual), "Unequal number of expected vs. actual traces")
+	require.Len(t, actual, len(expected), "Unequal number of expected vs. actual traces")
 	model.SortTraces(expected)
 	model.SortTraces(actual)
 	for i := range expected {
@@ -82,14 +82,14 @@ func CompareTraces(t *testing.T, expected *model.Trace, actual *model.Trace) {
 }
 
 func checkSize(t *testing.T, expected *model.Trace, actual *model.Trace) {
-	require.Equal(t, len(expected.Spans), len(actual.Spans))
+	require.Len(t, actual.Spans, len(expected.Spans))
 	for i := range expected.Spans {
 		expectedSpan := expected.Spans[i]
 		actualSpan := actual.Spans[i]
-		require.Equal(t, len(expectedSpan.Tags), len(actualSpan.Tags))
-		require.Equal(t, len(expectedSpan.Logs), len(actualSpan.Logs))
+		require.Len(t, actualSpan.Tags, len(expectedSpan.Tags))
+		require.Len(t, actualSpan.Logs, len(expectedSpan.Logs))
 		if expectedSpan.Process != nil && actualSpan.Process != nil {
-			require.Equal(t, len(expectedSpan.Process.Tags), len(actualSpan.Process.Tags))
+			require.Len(t, actualSpan.Process.Tags, len(expectedSpan.Process.Tags))
 		}
 	}
 }
diff --git a/internal/tools/go.mod b/internal/tools/go.mod
index c248ab3d..d3a80ce6 100644
--- a/internal/tools/go.mod
+++ b/internal/tools/go.mod
@@ -3,7 +3,7 @@ module github.com/jaegertracing/jaeger/internal/tools
 go 1.24.0
 
 require (
-	github.com/golangci/golangci-lint v1.64.8
+	github.com/golangci/golangci-lint/v2 v2.0.2
 	github.com/josephspurrier/goversioninfo v1.4.1
 	github.com/vektra/mockery/v2 v2.53.1
 	mvdan.cc/gofumpt v0.7.0
@@ -14,14 +14,14 @@ require (
 	4d63.com/gochecknoglobals v0.2.2 // indirect
 	github.com/4meepo/tagalign v1.4.2 // indirect
 	github.com/Abirdcfly/dupword v0.1.3 // indirect
-	github.com/Antonboom/errname v1.0.0 // indirect
-	github.com/Antonboom/nilnil v1.0.1 // indirect
-	github.com/Antonboom/testifylint v1.5.2 // indirect
-	github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c // indirect
+	github.com/Antonboom/errname v1.1.0 // indirect
+	github.com/Antonboom/nilnil v1.1.0 // indirect
+	github.com/Antonboom/testifylint v1.6.0 // indirect
+	github.com/BurntSushi/toml v1.5.0 // indirect
 	github.com/Crocmagnon/fatcontext v0.7.1 // indirect
 	github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 // indirect
 	github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1 // indirect
-	github.com/Masterminds/semver/v3 v3.3.0 // indirect
+	github.com/Masterminds/semver/v3 v3.3.1 // indirect
 	github.com/OpenPeeDeeP/depguard/v2 v2.2.1 // indirect
 	github.com/akavel/rsrc v0.10.2 // indirect
 	github.com/alecthomas/go-check-sumtype v0.3.1 // indirect
@@ -31,23 +31,30 @@ require (
 	github.com/alingse/nilnesserr v0.1.2 // indirect
 	github.com/ashanbrown/forbidigo v1.6.0 // indirect
 	github.com/ashanbrown/makezero v1.2.0 // indirect
+	github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/bkielbasa/cyclop v1.2.3 // indirect
 	github.com/blizzy78/varnamelen v0.8.0 // indirect
-	github.com/bombsimon/wsl/v4 v4.5.0 // indirect
-	github.com/breml/bidichk v0.3.2 // indirect
-	github.com/breml/errchkjson v0.4.0 // indirect
+	github.com/bombsimon/wsl/v4 v4.6.0 // indirect
+	github.com/breml/bidichk v0.3.3 // indirect
+	github.com/breml/errchkjson v0.4.1 // indirect
 	github.com/butuzov/ireturn v0.3.1 // indirect
 	github.com/butuzov/mirror v1.3.0 // indirect
-	github.com/catenacyber/perfsprint v0.8.2 // indirect
+	github.com/catenacyber/perfsprint v0.9.1 // indirect
 	github.com/ccojocar/zxcvbn-go v1.0.2 // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
 	github.com/charithe/durationcheck v0.0.10 // indirect
+	github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
+	github.com/charmbracelet/lipgloss v1.1.0 // indirect
+	github.com/charmbracelet/x/ansi v0.8.0 // indirect
+	github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect
+	github.com/charmbracelet/x/term v0.2.1 // indirect
 	github.com/chavacava/garif v0.1.0 // indirect
 	github.com/chigopher/pathlib v0.19.1 // indirect
-	github.com/ckaznocha/intrange v0.3.0 // indirect
+	github.com/ckaznocha/intrange v0.3.1 // indirect
 	github.com/curioswitch/go-reassign v0.3.0 // indirect
-	github.com/daixiang0/gci v0.13.5 // indirect
+	github.com/daixiang0/gci v0.13.6 // indirect
+	github.com/dave/dst v0.27.3 // indirect
 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
 	github.com/denis-tingaikin/go-header v0.5.0 // indirect
 	github.com/ettle/strcase v0.2.0 // indirect
@@ -56,8 +63,8 @@ require (
 	github.com/firefart/nonamedreturns v1.0.5 // indirect
 	github.com/fsnotify/fsnotify v1.8.0 // indirect
 	github.com/fzipp/gocyclo v0.6.0 // indirect
-	github.com/ghostiam/protogetter v0.3.9 // indirect
-	github.com/go-critic/go-critic v0.12.0 // indirect
+	github.com/ghostiam/protogetter v0.3.12 // indirect
+	github.com/go-critic/go-critic v0.13.0 // indirect
 	github.com/go-toolsmith/astcast v1.1.0 // indirect
 	github.com/go-toolsmith/astcopy v1.1.0 // indirect
 	github.com/go-toolsmith/astequal v1.2.0 // indirect
@@ -73,6 +80,7 @@ require (
 	github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 // indirect
 	github.com/golangci/go-printf-func-name v0.1.0 // indirect
 	github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d // indirect
+	github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95 // indirect
 	github.com/golangci/misspell v0.6.0 // indirect
 	github.com/golangci/plugin-module-register v0.1.1 // indirect
 	github.com/golangci/revgrep v0.8.0 // indirect
@@ -108,7 +116,8 @@ require (
 	github.com/ldez/tagliatelle v0.7.1 // indirect
 	github.com/ldez/usetesting v0.4.2 // indirect
 	github.com/leonklingele/grouper v1.1.2 // indirect
-	github.com/macabu/inamedparam v0.1.3 // indirect
+	github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
+	github.com/macabu/inamedparam v0.2.0 // indirect
 	github.com/magiconair/properties v1.8.9 // indirect
 	github.com/maratori/testableexamples v1.0.0 // indirect
 	github.com/maratori/testpackage v1.1.1 // indirect
@@ -121,6 +130,7 @@ require (
 	github.com/mitchellh/go-homedir v1.1.0 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/moricho/tparallel v0.3.2 // indirect
+	github.com/muesli/termenv v0.16.0 // indirect
 	github.com/nakabonne/nestif v0.3.1 // indirect
 	github.com/nishanths/exhaustive v0.12.0 // indirect
 	github.com/nishanths/predeclared v0.2.2 // indirect
@@ -133,7 +143,7 @@ require (
 	github.com/prometheus/client_model v0.2.0 // indirect
 	github.com/prometheus/common v0.32.1 // indirect
 	github.com/prometheus/procfs v0.7.3 // indirect
-	github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1 // indirect
+	github.com/quasilyte/go-ruleguard v0.4.4 // indirect
 	github.com/quasilyte/go-ruleguard/dsl v0.3.22 // indirect
 	github.com/quasilyte/gogrep v0.5.0 // indirect
 	github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect
@@ -142,7 +152,7 @@ require (
 	github.com/rivo/uniseg v0.4.7 // indirect
 	github.com/rogpeppe/go-internal v1.14.1 // indirect
 	github.com/rs/zerolog v1.33.0 // indirect
-	github.com/ryancurrah/gomodguard v1.3.5 // indirect
+	github.com/ryancurrah/gomodguard v1.4.1 // indirect
 	github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect
 	github.com/sagikazarmark/locafero v0.7.0 // indirect
 	github.com/sagikazarmark/slog-shim v0.1.0 // indirect
@@ -153,7 +163,6 @@ require (
 	github.com/securego/gosec/v2 v2.22.2 // indirect
 	github.com/sirupsen/logrus v1.9.3 // indirect
 	github.com/sivchari/containedctx v1.0.3 // indirect
-	github.com/sivchari/tenv v1.12.1 // indirect
 	github.com/sonatard/noctx v0.1.0 // indirect
 	github.com/sourcegraph/conc v0.3.0 // indirect
 	github.com/sourcegraph/go-diff v0.7.0 // indirect
@@ -169,7 +178,7 @@ require (
 	github.com/subosito/gotenv v1.6.0 // indirect
 	github.com/tdakkota/asciicheck v0.4.1 // indirect
 	github.com/tetafro/godot v1.5.0 // indirect
-	github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3 // indirect
+	github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67 // indirect
 	github.com/timonwong/loggercheck v0.10.1 // indirect
 	github.com/tomarrell/wrapcheck/v2 v2.10.0 // indirect
 	github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect
@@ -177,7 +186,8 @@ require (
 	github.com/ultraware/whitespace v0.2.0 // indirect
 	github.com/uudashr/gocognit v1.2.0 // indirect
 	github.com/uudashr/iface v1.3.1 // indirect
-	github.com/xen0n/gosmopolitan v1.2.2 // indirect
+	github.com/xen0n/gosmopolitan v1.3.0 // indirect
+	github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
 	github.com/yagipy/maintidx v1.0.0 // indirect
 	github.com/yeya24/promlinter v0.3.0 // indirect
 	github.com/ykadowak/zerologlint v0.1.5 // indirect
@@ -194,12 +204,12 @@ require (
 	golang.org/x/sync v0.12.0 // indirect
 	golang.org/x/sys v0.31.0 // indirect
 	golang.org/x/term v0.29.0 // indirect
-	golang.org/x/text v0.22.0 // indirect
+	golang.org/x/text v0.23.0 // indirect
 	golang.org/x/tools v0.31.0 // indirect
 	google.golang.org/protobuf v1.36.5 // indirect
 	gopkg.in/ini.v1 v1.67.0 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	honnef.co/go/tools v0.6.1 // indirect
-	mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f // indirect
+	mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4 // indirect
 )
diff --git a/internal/tools/go.sum b/internal/tools/go.sum
index c21d7e3e..4147ce09 100644
--- a/internal/tools/go.sum
+++ b/internal/tools/go.sum
@@ -39,15 +39,15 @@ github.com/4meepo/tagalign v1.4.2 h1:0hcLHPGMjDyM1gHG58cS73aQF8J4TdVR96TZViorO9E
 github.com/4meepo/tagalign v1.4.2/go.mod h1:+p4aMyFM+ra7nb41CnFG6aSDXqRxU/w1VQqScKqDARI=
 github.com/Abirdcfly/dupword v0.1.3 h1:9Pa1NuAsZvpFPi9Pqkd93I7LIYRURj+A//dFd5tgBeE=
 github.com/Abirdcfly/dupword v0.1.3/go.mod h1:8VbB2t7e10KRNdwTVoxdBaxla6avbhGzb8sCTygUMhw=
-github.com/Antonboom/errname v1.0.0 h1:oJOOWR07vS1kRusl6YRSlat7HFnb3mSfMl6sDMRoTBA=
-github.com/Antonboom/errname v1.0.0/go.mod h1:gMOBFzK/vrTiXN9Oh+HFs+e6Ndl0eTFbtsRTSRdXyGI=
-github.com/Antonboom/nilnil v1.0.1 h1:C3Tkm0KUxgfO4Duk3PM+ztPncTFlOf0b2qadmS0s4xs=
-github.com/Antonboom/nilnil v1.0.1/go.mod h1:CH7pW2JsRNFgEh8B2UaPZTEPhCMuFowP/e8Udp9Nnb0=
-github.com/Antonboom/testifylint v1.5.2 h1:4s3Xhuv5AvdIgbd8wOOEeo0uZG7PbDKQyKY5lGoQazk=
-github.com/Antonboom/testifylint v1.5.2/go.mod h1:vxy8VJ0bc6NavlYqjZfmp6EfqXMtBgQ4+mhCojwC1P8=
+github.com/Antonboom/errname v1.1.0 h1:A+ucvdpMwlo/myWrkHEUEBWc/xuXdud23S8tmTb/oAE=
+github.com/Antonboom/errname v1.1.0/go.mod h1:O1NMrzgUcVBGIfi3xlVuvX8Q/VP/73sseCaAppfjqZw=
+github.com/Antonboom/nilnil v1.1.0 h1:jGxJxjgYS3VUUtOTNk8Z1icwT5ESpLH/426fjmQG+ng=
+github.com/Antonboom/nilnil v1.1.0/go.mod h1:b7sAlogQjFa1wV8jUW3o4PMzDVFLbTux+xnQdvzdcIE=
+github.com/Antonboom/testifylint v1.6.0 h1:6rdILVPt4+rqcvhid8w9wJNynKLUgqHNpFyM67UeXyc=
+github.com/Antonboom/testifylint v1.6.0/go.mod h1:k+nEkathI2NFjKO6HvwmSrbzUcQ6FAnbZV+ZRrnXPLI=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs=
-github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
+github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
+github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/Crocmagnon/fatcontext v0.7.1 h1:SC/VIbRRZQeQWj/TcQBS6JmrXcfA+BU4OGSVUt54PjM=
 github.com/Crocmagnon/fatcontext v0.7.1/go.mod h1:1wMvv3NXEBJucFGfwOJBxSVWcoIO6emV215SMkW9MFU=
@@ -55,8 +55,8 @@ github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rW
 github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs=
 github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1 h1:Sz1JIXEcSfhz7fUi7xHnhpIE0thVASYjvosApmHuD2k=
 github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1/go.mod h1:n/LSCXNuIYqVfBlVXyHfMQkZDdp1/mmxfSjADd3z1Zg=
-github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0=
-github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
+github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4=
+github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/OpenPeeDeeP/depguard/v2 v2.2.1 h1:vckeWVESWp6Qog7UZSARNqfu/cZqvki8zsuj3piCMx4=
 github.com/OpenPeeDeeP/depguard/v2 v2.2.1/go.mod h1:q4DKzC4UcVaAvcfd41CZh0PWpGgzrVxUYBlgKNGquUo=
 github.com/akavel/rsrc v0.10.2 h1:Zxm8V5eI1hW4gGaYsJQUhxpjkENuG91ki8B4zCrvEsw=
@@ -84,6 +84,8 @@ github.com/ashanbrown/forbidigo v1.6.0 h1:D3aewfM37Yb3pxHujIPSpTf6oQk9sc9WZi8ger
 github.com/ashanbrown/forbidigo v1.6.0/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU=
 github.com/ashanbrown/makezero v1.2.0 h1:/2Lp1bypdmK9wDIq7uWBlDF1iMUpIIS4A+pF6C9IEUU=
 github.com/ashanbrown/makezero v1.2.0/go.mod h1:dxlPhHbDMC6N6xICzFBSK+4njQDdK8euNO0qjQMtGY4=
+github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
+github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
 github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
 github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
@@ -94,18 +96,18 @@ github.com/bkielbasa/cyclop v1.2.3 h1:faIVMIGDIANuGPWH031CZJTi2ymOQBULs9H21HSMa5
 github.com/bkielbasa/cyclop v1.2.3/go.mod h1:kHTwA9Q0uZqOADdupvcFJQtp/ksSnytRMe8ztxG8Fuo=
 github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M=
 github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k=
-github.com/bombsimon/wsl/v4 v4.5.0 h1:iZRsEvDdyhd2La0FVi5k6tYehpOR/R7qIUjmKk7N74A=
-github.com/bombsimon/wsl/v4 v4.5.0/go.mod h1:NOQ3aLF4nD7N5YPXMruR6ZXDOAqLoM0GEpLwTdvmOSc=
-github.com/breml/bidichk v0.3.2 h1:xV4flJ9V5xWTqxL+/PMFF6dtJPvZLPsyixAoPe8BGJs=
-github.com/breml/bidichk v0.3.2/go.mod h1:VzFLBxuYtT23z5+iVkamXO386OB+/sVwZOpIj6zXGos=
-github.com/breml/errchkjson v0.4.0 h1:gftf6uWZMtIa/Is3XJgibewBm2ksAQSY/kABDNFTAdk=
-github.com/breml/errchkjson v0.4.0/go.mod h1:AuBOSTHyLSaaAFlWsRSuRBIroCh3eh7ZHh5YeelDIk8=
+github.com/bombsimon/wsl/v4 v4.6.0 h1:ew2R/N42su553DKTYqt3HSxaQN+uHQPv4xZ2MBmwaW4=
+github.com/bombsimon/wsl/v4 v4.6.0/go.mod h1:uV/+6BkffuzSAVYD+yGyld1AChO7/EuLrCF/8xTiapg=
+github.com/breml/bidichk v0.3.3 h1:WSM67ztRusf1sMoqH6/c4OBCUlRVTKq+CbSeo0R17sE=
+github.com/breml/bidichk v0.3.3/go.mod h1:ISbsut8OnjB367j5NseXEGGgO/th206dVa427kR8YTE=
+github.com/breml/errchkjson v0.4.1 h1:keFSS8D7A2T0haP9kzZTi7o26r7kE3vymjZNeNDRDwg=
+github.com/breml/errchkjson v0.4.1/go.mod h1:a23OvR6Qvcl7DG/Z4o0el6BRAjKnaReoPQFciAl9U3s=
 github.com/butuzov/ireturn v0.3.1 h1:mFgbEI6m+9W8oP/oDdfA34dLisRFCj2G6o/yiI1yZrY=
 github.com/butuzov/ireturn v0.3.1/go.mod h1:ZfRp+E7eJLC0NQmk1Nrm1LOrn/gQlOykv+cVPdiXH5M=
 github.com/butuzov/mirror v1.3.0 h1:HdWCXzmwlQHdVhwvsfBb2Au0r3HyINry3bDWLYXiKoc=
 github.com/butuzov/mirror v1.3.0/go.mod h1:AEij0Z8YMALaq4yQj9CPPVYOyJQyiexpQEQgihajRfI=
-github.com/catenacyber/perfsprint v0.8.2 h1:+o9zVmCSVa7M4MvabsWvESEhpsMkhfE7k0sHNGL95yw=
-github.com/catenacyber/perfsprint v0.8.2/go.mod h1:q//VWC2fWbcdSLEY1R3l8n0zQCDPdE4IjZwyY1HMunM=
+github.com/catenacyber/perfsprint v0.9.1 h1:5LlTp4RwTooQjJCvGEFV6XksZvWE7wCOUvjD2z0vls0=
+github.com/catenacyber/perfsprint v0.9.1/go.mod h1:q//VWC2fWbcdSLEY1R3l8n0zQCDPdE4IjZwyY1HMunM=
 github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg=
 github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -115,6 +117,16 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/charithe/durationcheck v0.0.10 h1:wgw73BiocdBDQPik+zcEoBG/ob8uyBHf2iyoHGPf5w4=
 github.com/charithe/durationcheck v0.0.10/go.mod h1:bCWXb7gYRysD1CU3C+u4ceO49LoGOY1C1L6uouGNreQ=
+github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs=
+github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk=
+github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
+github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
+github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
+github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
+github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8=
+github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
+github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
+github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
 github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc=
 github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww=
 github.com/chigopher/pathlib v0.19.1 h1:RoLlUJc0CqBGwq239cilyhxPNLXTK+HXoASGyGznx5A=
@@ -122,16 +134,20 @@ github.com/chigopher/pathlib v0.19.1/go.mod h1:tzC1dZLW8o33UQpWkNkhvPwL5n4yyFRFm
 github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/ckaznocha/intrange v0.3.0 h1:VqnxtK32pxgkhJgYQEeOArVidIPg+ahLP7WBOXZd5ZY=
-github.com/ckaznocha/intrange v0.3.0/go.mod h1:+I/o2d2A1FBHgGELbGxzIcyd3/9l9DuwjM8FsbSS3Lo=
+github.com/ckaznocha/intrange v0.3.1 h1:j1onQyXvHUsPWujDH6WIjhyH26gkRt/txNlV7LspvJs=
+github.com/ckaznocha/intrange v0.3.1/go.mod h1:QVepyz1AkUoFQkpEqksSYpNpUo3c5W7nWh/s6SHIJJk=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/curioswitch/go-reassign v0.3.0 h1:dh3kpQHuADL3cobV/sSGETA8DOv457dwl+fbBAhrQPs=
 github.com/curioswitch/go-reassign v0.3.0/go.mod h1:nApPCCTtqLJN/s8HfItCcKV0jIPwluBOvZP+dsJGA88=
-github.com/daixiang0/gci v0.13.5 h1:kThgmH1yBmZSBCh1EJVxQ7JsHpm5Oms0AMed/0LaH4c=
-github.com/daixiang0/gci v0.13.5/go.mod h1:12etP2OniiIdP4q+kjUGrC/rUagga7ODbqsom5Eo5Yk=
+github.com/daixiang0/gci v0.13.6 h1:RKuEOSkGpSadkGbvZ6hJ4ddItT3cVZ9Vn9Rybk6xjl8=
+github.com/daixiang0/gci v0.13.6/go.mod h1:12etP2OniiIdP4q+kjUGrC/rUagga7ODbqsom5Eo5Yk=
+github.com/dave/dst v0.27.3 h1:P1HPoMza3cMEquVf9kKy8yXsFirry4zEnWOdYPOoIzY=
+github.com/dave/dst v0.27.3/go.mod h1:jHh6EOibnHgcUW3WjKHisiooEkYwqpHLBSX1iOBhEyc=
+github.com/dave/jennifer v1.7.1 h1:B4jJJDHelWcDhlRQxWeo0Npa/pYKBLrirAQoTN45txo=
+github.com/dave/jennifer v1.7.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3RmGZc=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -158,10 +174,10 @@ github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/
 github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo=
 github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA=
-github.com/ghostiam/protogetter v0.3.9 h1:j+zlLLWzqLay22Cz/aYwTHKQ88GE2DQ6GkWSYFOI4lQ=
-github.com/ghostiam/protogetter v0.3.9/go.mod h1:WZ0nw9pfzsgxuRsPOFQomgDVSWtDLJRfQJEhsGbmQMA=
-github.com/go-critic/go-critic v0.12.0 h1:iLosHZuye812wnkEz1Xu3aBwn5ocCPfc9yqmFG9pa6w=
-github.com/go-critic/go-critic v0.12.0/go.mod h1:DpE0P6OVc6JzVYzmM5gq5jMU31zLr4am5mB/VfFK64w=
+github.com/ghostiam/protogetter v0.3.12 h1:xTPjH97iKph27vXRRKV0OCke5sAMoHPbVeVstdzmCLE=
+github.com/ghostiam/protogetter v0.3.12/go.mod h1:WZ0nw9pfzsgxuRsPOFQomgDVSWtDLJRfQJEhsGbmQMA=
+github.com/go-critic/go-critic v0.13.0 h1:kJzM7wzltQasSUXtYyTl6UaPVySO6GkaR1thFnJ6afY=
+github.com/go-critic/go-critic v0.13.0/go.mod h1:M/YeuJ3vOCQDnP2SU+ZhjgRzwzcBW87JqLpMJLrZDLI=
 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
@@ -242,8 +258,10 @@ github.com/golangci/go-printf-func-name v0.1.0 h1:dVokQP+NMTO7jwO4bwsRwLWeudOVUP
 github.com/golangci/go-printf-func-name v0.1.0/go.mod h1:wqhWFH5mUdJQhweRnldEywnR5021wTdZSNgwYceV14s=
 github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d h1:viFft9sS/dxoYY0aiOTsLKO2aZQAPT4nlQCsimGcSGE=
 github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d/go.mod h1:ivJ9QDg0XucIkmwhzCDsqcnxxlDStoTl89jDMIoNxKY=
-github.com/golangci/golangci-lint v1.64.8 h1:y5TdeVidMtBGG32zgSC7ZXTFNHrsJkDnpO4ItB3Am+I=
-github.com/golangci/golangci-lint v1.64.8/go.mod h1:5cEsUQBSr6zi8XI8OjmcY2Xmliqc4iYL7YoPrL+zLJ4=
+github.com/golangci/golangci-lint/v2 v2.0.2 h1:dMCC8ikPiLDvHMFy3+XypSAuGDBOLzwWqqamer+bWsY=
+github.com/golangci/golangci-lint/v2 v2.0.2/go.mod h1:ptNNMeGBQrbves0Qq38xvfdJg18PzxmT+7KRCOpm6i8=
+github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95 h1:AkK+w9FZBXlU/xUmBtSJN1+tAI4FIvy5WtnUnY8e4p8=
+github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95/go.mod h1:k9mmcyWKSTMcPPvQUCfRWWQ9VHJ1U9Dc0R7kaXAgtnQ=
 github.com/golangci/misspell v0.6.0 h1:JCle2HUTNWirNlDIAUO44hUsKhOFqGPoC4LZxlaSXDs=
 github.com/golangci/misspell v0.6.0/go.mod h1:keMNyY6R9isGaSAu+4Q8NMBwMPkh15Gtc8UCVoDtAWo=
 github.com/golangci/plugin-module-register v0.1.1 h1:TCmesur25LnyJkpsVrupv1Cdzo+2f7zX0H6Jkw1Ol6c=
@@ -376,8 +394,10 @@ github.com/ldez/usetesting v0.4.2 h1:J2WwbrFGk3wx4cZwSMiCQQ00kjGR0+tuuyW0Lqm4lwA
 github.com/ldez/usetesting v0.4.2/go.mod h1:eEs46T3PpQ+9RgN9VjpY6qWdiw2/QmfiDeWmdZdrjIQ=
 github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY=
 github.com/leonklingele/grouper v1.1.2/go.mod h1:6D0M/HVkhs2yRKRFZUoGjeDy7EZTfFBE9gl4kjmIGkA=
-github.com/macabu/inamedparam v0.1.3 h1:2tk/phHkMlEL/1GNe/Yf6kkR/hkcUdAEY3L0hjYV1Mk=
-github.com/macabu/inamedparam v0.1.3/go.mod h1:93FLICAIk/quk7eaPPQvbzihUdn/QkGDwIZEoLtpH6I=
+github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
+github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
+github.com/macabu/inamedparam v0.2.0 h1:VyPYpOc10nkhI2qeNUdh3Zket4fcZjEWe35poddBCpE=
+github.com/macabu/inamedparam v0.2.0/go.mod h1:+Pee9/YfGe5LJ62pYXqB89lJ+0k5bsR8Wgz/C0Zlq3U=
 github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
 github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
 github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI=
@@ -413,6 +433,8 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
 github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/moricho/tparallel v0.3.2 h1:odr8aZVFA3NZrNybggMkYO3rgPRcqjeQUlBBFVxKHTI=
 github.com/moricho/tparallel v0.3.2/go.mod h1:OQ+K3b4Ln3l2TZveGCywybl68glfLEwFGqvnjok8b+U=
+github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
+github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U=
@@ -471,8 +493,8 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O
 github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
 github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1 h1:+Wl/0aFp0hpuHM3H//KMft64WQ1yX9LdJY64Qm/gFCo=
-github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1/go.mod h1:GJLgqsLeo4qgavUoL8JeGFNS7qcisx3awV/w9eWTmNI=
+github.com/quasilyte/go-ruleguard v0.4.4 h1:53DncefIeLX3qEpjzlS1lyUmQoUEeOWPFWqaTJq9eAQ=
+github.com/quasilyte/go-ruleguard v0.4.4/go.mod h1:Vl05zJ538vcEEwu16V/Hdu7IYZWyKSwIy4c88Ro1kRE=
 github.com/quasilyte/go-ruleguard/dsl v0.3.22 h1:wd8zkOhSNr+I+8Qeciml08ivDt1pSXe60+5DqOpCjPE=
 github.com/quasilyte/go-ruleguard/dsl v0.3.22/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU=
 github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo=
@@ -493,8 +515,8 @@ github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
 github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=
 github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/ryancurrah/gomodguard v1.3.5 h1:cShyguSwUEeC0jS7ylOiG/idnd1TpJ1LfHGpV3oJmPU=
-github.com/ryancurrah/gomodguard v1.3.5/go.mod h1:MXlEPQRxgfPQa62O8wzK3Ozbkv9Rkqr+wKjSxTdsNJE=
+github.com/ryancurrah/gomodguard v1.4.1 h1:eWC8eUMNZ/wM/PWuZBv7JxxqT5fiIKSIyTvjb7Elr+g=
+github.com/ryancurrah/gomodguard v1.4.1/go.mod h1:qnMJwV1hX9m+YJseXEBhd2s90+1Xn6x9dLz11ualI1I=
 github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9fJfSfdyCU=
 github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ=
 github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo=
@@ -511,6 +533,8 @@ github.com/sashamelentyev/usestdlibvars v1.28.0 h1:jZnudE2zKCtYlGzLVreNp5pmCdOxX
 github.com/sashamelentyev/usestdlibvars v1.28.0/go.mod h1:9nl0jgOfHKWNFS43Ojw0i7aRoS4j6EBye3YBhmAIRF8=
 github.com/securego/gosec/v2 v2.22.2 h1:IXbuI7cJninj0nRpZSLCUlotsj8jGusohfONMrHoF6g=
 github.com/securego/gosec/v2 v2.22.2/go.mod h1:UEBGA+dSKb+VqM6TdehR7lnQtIIMorYJ4/9CW1KVQBE=
+github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
+github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
 github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
 github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
@@ -520,8 +544,6 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ
 github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
 github.com/sivchari/containedctx v1.0.3 h1:x+etemjbsh2fB5ewm5FeLNi5bUjK0V8n0RB+Wwfd0XE=
 github.com/sivchari/containedctx v1.0.3/go.mod h1:c1RDvCbnJLtH4lLcYD/GqwiBSSf4F5Qk0xld2rBqzJ4=
-github.com/sivchari/tenv v1.12.1 h1:+E0QzjktdnExv/wwsnnyk4oqZBUfuh89YMQT1cyuvSY=
-github.com/sivchari/tenv v1.12.1/go.mod h1:1LjSOUCc25snIr5n3DtGGrENhX3LuWefcplwVGC24mw=
 github.com/sonatard/noctx v0.1.0 h1:JjqOc2WN16ISWAjAk8M5ej0RfExEXtkEyExl2hLW+OM=
 github.com/sonatard/noctx v0.1.0/go.mod h1:0RvBxqY8D4j9cTTTWE8ylt2vqj2EPI8fHmrxHdsaZ2c=
 github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
@@ -570,8 +592,8 @@ github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpR
 github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY=
 github.com/tetafro/godot v1.5.0 h1:aNwfVI4I3+gdxjMgYPus9eHmoBeJIbnajOyqZYStzuw=
 github.com/tetafro/godot v1.5.0/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio=
-github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3 h1:y4mJRFlM6fUyPhoXuFg/Yu02fg/nIPFMOY8tOqppoFg=
-github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3/go.mod h1:mkjARE7Yr8qU23YcGMSALbIxTQ9r9QBVahQOBRfU460=
+github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67 h1:9LPGD+jzxMlnk5r6+hJnar67cgpDIz/iyD+rfl5r2Vk=
+github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67/go.mod h1:mkjARE7Yr8qU23YcGMSALbIxTQ9r9QBVahQOBRfU460=
 github.com/timonwong/loggercheck v0.10.1 h1:uVZYClxQFpw55eh+PIoqM7uAOHMrhVcDoWDery9R8Lg=
 github.com/timonwong/loggercheck v0.10.1/go.mod h1:HEAWU8djynujaAVX7QI65Myb8qgfcZ1uKbdpg3ZzKl8=
 github.com/tomarrell/wrapcheck/v2 v2.10.0 h1:SzRCryzy4IrAH7bVGG4cK40tNUhmVmMDuJujy4XwYDg=
@@ -588,8 +610,10 @@ github.com/uudashr/iface v1.3.1 h1:bA51vmVx1UIhiIsQFSNq6GZ6VPTk3WNMZgRiCe9R29U=
 github.com/uudashr/iface v1.3.1/go.mod h1:4QvspiRd3JLPAEXBQ9AiZpLbJlrWWgRChOKDJEuQTdg=
 github.com/vektra/mockery/v2 v2.53.1 h1:nXP4LsUbuzpR1zA1JWN4E4bGiyPBBCZkICkU4DT2BEg=
 github.com/vektra/mockery/v2 v2.53.1/go.mod h1:UJT+mgXhCcOCHXTnM5cJHCZL+d76BYB+EbY1sFztEB8=
-github.com/xen0n/gosmopolitan v1.2.2 h1:/p2KTnMzwRexIW8GlKawsTWOxn7UHA+jCMF/V8HHtvU=
-github.com/xen0n/gosmopolitan v1.2.2/go.mod h1:7XX7Mj61uLYrj0qmeN0zi7XDon9JRAEhYQqAPLVNTeg=
+github.com/xen0n/gosmopolitan v1.3.0 h1:zAZI1zefvo7gcpbCOrPSHJZJYA9ZgLfJqtKzZ5pHqQM=
+github.com/xen0n/gosmopolitan v1.3.0/go.mod h1:rckfr5T6o4lBtM1ga7mLGKZmLxswUoH1zxHgNXOsEt4=
+github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
+github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
 github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM=
 github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk=
 github.com/yeya24/promlinter v0.3.0 h1:JVDbMp08lVCP7Y6NP3qHroGAO6z2yGKQtS5JsjqtoFs=
@@ -823,8 +847,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
-golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
+golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
+golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -997,8 +1021,8 @@ honnef.co/go/tools v0.6.1 h1:R094WgE8K4JirYjBaOpz/AvTyUu/3wbmAoskKN/pxTI=
 honnef.co/go/tools v0.6.1/go.mod h1:3puzxxljPCe8RGJX7BIy1plGbxEOZni5mR2aXe3/uk4=
 mvdan.cc/gofumpt v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU=
 mvdan.cc/gofumpt v0.7.0/go.mod h1:txVFJy/Sc/mvaycET54pV8SW8gWxTlUuGHVEcncmNUo=
-mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f h1:lMpcwN6GxNbWtbpI1+xzFLSW8XzX0u72NttUGVFjO3U=
-mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f/go.mod h1:RSLa7mKKCNeTTMHBw5Hsy2rfJmd6O2ivt9Dw9ZqCQpQ=
+mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4 h1:WjUu4yQoT5BHT1w8Zu56SP8367OuBV5jvo+4Ulppyf8=
+mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4/go.mod h1:rthT7OuvRbaGcd5ginj6dA2oLE7YNlta9qhBNNdCaLE=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
 rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
diff --git a/internal/tools/tools.go b/internal/tools/tools.go
index ef75b9a4..268c1657 100644
--- a/internal/tools/tools.go
+++ b/internal/tools/tools.go
@@ -13,7 +13,7 @@ package tools
 import (
 	_ "mvdan.cc/gofumpt"
 
-	_ "github.com/golangci/golangci-lint/cmd/golangci-lint"
+	_ "github.com/golangci/golangci-lint/v2/cmd/golangci-lint"
 	_ "github.com/josephspurrier/goversioninfo/cmd/goversioninfo"
 	_ "github.com/vektra/mockery/v2"
 )



Test patch:
diff --git a/cmd/all-in-one/all_in_one_test.go b/cmd/all-in-one/all_in_one_test.go
index 2f6dfbb0..508bdb09 100644
--- a/cmd/all-in-one/all_in_one_test.go
+++ b/cmd/all-in-one/all_in_one_test.go
@@ -174,7 +174,7 @@ func getSamplingStrategy(t *testing.T) {
 
 	r, body := httpGet(t, samplingAddr+getSamplingStrategyURL)
 	t.Logf("Sampling strategy response: %s", string(body))
-	require.EqualValues(t, http.StatusOK, r.StatusCode)
+	require.Equal(t, http.StatusOK, r.StatusCode)
 
 	var queryResponse api_v2.SamplingStrategyResponse
 	require.NoError(t, jsonpb.Unmarshal(bytes.NewReader(body), &queryResponse))
diff --git a/cmd/anonymizer/app/query/query_test.go b/cmd/anonymizer/app/query/query_test.go
index dd21fddd..ea90f665 100644
--- a/cmd/anonymizer/app/query/query_test.go
+++ b/cmd/anonymizer/app/query/query_test.go
@@ -118,7 +118,7 @@ func TestQueryTrace(t *testing.T) {
 
 		spans, err := q.QueryTrace(mockTraceID.String(), startTime, endTime)
 		require.NoError(t, err)
-		assert.Equal(t, len(spans), len(mockTraceGRPC.Spans))
+		assert.Len(t, spans, len(mockTraceGRPC.Spans))
 	})
 
 	t.Run("Invalid TraceID", func(t *testing.T) {
diff --git a/cmd/collector/app/handler/grpc_handler_test.go b/cmd/collector/app/handler/grpc_handler_test.go
index f6d83f77..3ee90705 100644
--- a/cmd/collector/app/handler/grpc_handler_test.go
+++ b/cmd/collector/app/handler/grpc_handler_test.go
@@ -145,7 +145,6 @@ func TestPostSpans(t *testing.T) {
 		})
 		require.NoError(t, err)
 		got := proc.getSpans()
-		require.Equal(t, len(test.batch.GetSpans()), len(got))
 		assert.Equal(t, test.expected, got)
 		proc.reset()
 	}
diff --git a/cmd/collector/app/handler/http_thrift_handler_test.go b/cmd/collector/app/handler/http_thrift_handler_test.go
index b0e72fc4..c13f1ce2 100644
--- a/cmd/collector/app/handler/http_thrift_handler_test.go
+++ b/cmd/collector/app/handler/http_thrift_handler_test.go
@@ -74,19 +74,19 @@ func TestThriftFormat(t *testing.T) {
 
 	statusCode, resBodyStr, err := postBytes("application/x-thrift", server.URL+`/api/traces`, someBytes)
 	require.NoError(t, err)
-	assert.EqualValues(t, http.StatusAccepted, statusCode)
-	assert.EqualValues(t, "", resBodyStr)
+	assert.Equal(t, http.StatusAccepted, statusCode)
+	assert.Empty(t, resBodyStr)
 
 	statusCode, resBodyStr, err = postBytes("application/x-thrift; charset=utf-8", server.URL+`/api/traces`, someBytes)
 	require.NoError(t, err)
-	assert.EqualValues(t, http.StatusAccepted, statusCode)
-	assert.EqualValues(t, "", resBodyStr)
+	assert.Equal(t, http.StatusAccepted, statusCode)
+	assert.Empty(t, resBodyStr)
 
 	handler.jaegerBatchesHandler.(*mockJaegerHandler).err = errors.New("Bad times ahead")
 	statusCode, resBodyStr, err = postBytes("application/vnd.apache.thrift.binary", server.URL+`/api/traces`, someBytes)
 	require.NoError(t, err)
-	assert.EqualValues(t, http.StatusInternalServerError, statusCode)
-	assert.EqualValues(t, "Cannot submit Jaeger batch: Bad times ahead\n", resBodyStr)
+	assert.Equal(t, http.StatusInternalServerError, statusCode)
+	assert.Equal(t, "Cannot submit Jaeger batch: Bad times ahead\n", resBodyStr)
 }
 
 func TestViaClient(t *testing.T) {
@@ -129,8 +129,8 @@ func TestBadBody(t *testing.T) {
 	bodyBytes := []byte("not good")
 	statusCode, resBodyStr, err := postBytes("application/x-thrift", server.URL+`/api/traces`, bodyBytes)
 	require.NoError(t, err)
-	assert.EqualValues(t, http.StatusBadRequest, statusCode)
-	assert.EqualValues(t, "Unable to process request body: Unknown data type 110\n", resBodyStr)
+	assert.Equal(t, http.StatusBadRequest, statusCode)
+	assert.Equal(t, "Unable to process request body: Unknown data type 110\n", resBodyStr)
 }
 
 func TestWrongFormat(t *testing.T) {
@@ -138,8 +138,8 @@ func TestWrongFormat(t *testing.T) {
 	defer server.Close()
 	statusCode, resBodyStr, err := postBytes("nosoupforyou", server.URL+`/api/traces`, []byte{})
 	require.NoError(t, err)
-	assert.EqualValues(t, http.StatusBadRequest, statusCode)
-	assert.EqualValues(t, "Unsupported content type: nosoupforyou\n", resBodyStr)
+	assert.Equal(t, http.StatusBadRequest, statusCode)
+	assert.Equal(t, "Unsupported content type: nosoupforyou\n", resBodyStr)
 }
 
 func TestMalformedFormat(t *testing.T) {
@@ -147,8 +147,8 @@ func TestMalformedFormat(t *testing.T) {
 	defer server.Close()
 	statusCode, resBodyStr, err := postBytes("application/json; =iammalformed", server.URL+`/api/traces`, []byte{})
 	require.NoError(t, err)
-	assert.EqualValues(t, http.StatusBadRequest, statusCode)
-	assert.EqualValues(t, "Cannot parse content type: mime: invalid media parameter\n", resBodyStr)
+	assert.Equal(t, http.StatusBadRequest, statusCode)
+	assert.Equal(t, "Cannot parse content type: mime: invalid media parameter\n", resBodyStr)
 }
 
 func TestCannotReadBodyFromRequest(t *testing.T) {
@@ -157,8 +157,8 @@ func TestCannotReadBodyFromRequest(t *testing.T) {
 	require.NoError(t, err)
 	rw := dummyResponseWriter{}
 	handler.SaveSpan(&rw, req)
-	assert.EqualValues(t, http.StatusInternalServerError, rw.myStatusCode)
-	assert.EqualValues(t, "Unable to process request body: Simulated error reading body\n", rw.myBody)
+	assert.Equal(t, http.StatusInternalServerError, rw.myStatusCode)
+	assert.Equal(t, "Unable to process request body: Simulated error reading body\n", rw.myBody)
 }
 
 type errReader struct{}
diff --git a/cmd/collector/app/options_test.go b/cmd/collector/app/options_test.go
index e1495c77..c0394364 100644
--- a/cmd/collector/app/options_test.go
+++ b/cmd/collector/app/options_test.go
@@ -37,9 +37,9 @@ func TestAllOptionSet(t *testing.T) {
 		Options.SpanSizeMetricsEnabled(true),
 		Options.OnDroppedSpan(func(_ *model.Span) {}),
 	)
-	assert.EqualValues(t, 5, opts.numWorkers)
-	assert.EqualValues(t, 10, opts.queueSize)
-	assert.EqualValues(t, map[string]string{"extra": "tags"}, opts.collectorTags)
+	assert.Equal(t, 5, opts.numWorkers)
+	assert.Equal(t, 10, opts.queueSize)
+	assert.Equal(t, map[string]string{"extra": "tags"}, opts.collectorTags)
 	assert.EqualValues(t, 1000, opts.dynQueueSizeWarmup)
 	assert.EqualValues(t, 1024, opts.dynQueueSizeMemory)
 	assert.True(t, opts.spanSizeMetricsEnabled)
@@ -48,8 +48,8 @@ func TestAllOptionSet(t *testing.T) {
 
 func TestNoOptionsSet(t *testing.T) {
 	opts := Options.apply()
-	assert.EqualValues(t, flags.DefaultNumWorkers, opts.numWorkers)
-	assert.EqualValues(t, 0, opts.queueSize)
+	assert.Equal(t, flags.DefaultNumWorkers, opts.numWorkers)
+	assert.Equal(t, 0, opts.queueSize)
 	assert.Nil(t, opts.collectorTags)
 	assert.False(t, opts.reportBusy)
 	assert.False(t, opts.blockingSubmit)
@@ -57,7 +57,7 @@ func TestNoOptionsSet(t *testing.T) {
 	assert.NotPanics(t, func() { opts.preSave(nil, "") })
 	assert.True(t, opts.spanFilter(nil))
 	span := model.Span{}
-	assert.EqualValues(t, &span, opts.sanitizer(&span))
+	assert.Equal(t, &span, opts.sanitizer(&span))
 	assert.EqualValues(t, 0, opts.dynQueueSizeWarmup)
 	assert.False(t, opts.spanSizeMetricsEnabled)
 	assert.Nil(t, opts.onDroppedSpan)
diff --git a/cmd/collector/app/queue/bounded_queue_test.go b/cmd/collector/app/queue/bounded_queue_test.go
index 6aa7fe3a..dd90a19c 100644
--- a/cmd/collector/app/queue/bounded_queue_test.go
+++ b/cmd/collector/app/queue/bounded_queue_test.go
@@ -192,8 +192,8 @@ func TestResizeUp(t *testing.T) {
 	assert.True(t, q.Produce("b"))  // in queue
 	assert.True(t, q.Produce("c"))  // in queue
 	assert.False(t, q.Produce("d")) // dropped
-	assert.EqualValues(t, 2, q.Capacity())
-	assert.EqualValues(t, q.Capacity(), q.Size())
+	assert.Equal(t, 2, q.Capacity())
+	assert.Equal(t, q.Capacity(), q.Size())
 	assert.Len(t, *q.items.Load(), q.Capacity())
 
 	resized = true
@@ -205,9 +205,9 @@ func TestResizeUp(t *testing.T) {
 	assert.True(t, q.Produce("g"))  // in the new queue
 	assert.False(t, q.Produce("h")) // the new queue has the capacity, but the sum of queues doesn't
 
-	assert.EqualValues(t, 4, q.Capacity())
-	assert.EqualValues(t, q.Capacity(), q.Size()) // the combined queues are at the capacity right now
-	assert.Len(t, *q.items.Load(), 2)             // the new internal queue should have two items only
+	assert.Equal(t, 4, q.Capacity())
+	assert.Equal(t, q.Capacity(), q.Size()) // the combined queues are at the capacity right now
+	assert.Len(t, *q.items.Load(), 2)       // the new internal queue should have two items only
 
 	released = true
 	releaseConsumers.Done()
@@ -242,16 +242,16 @@ func TestResizeDown(t *testing.T) {
 	assert.True(t, q.Produce("c")) // in queue
 	assert.True(t, q.Produce("d")) // in queue
 	assert.True(t, q.Produce("e")) // dropped
-	assert.EqualValues(t, 4, q.Capacity())
-	assert.EqualValues(t, q.Capacity(), q.Size())
+	assert.Equal(t, 4, q.Capacity())
+	assert.Equal(t, q.Capacity(), q.Size())
 	assert.Len(t, *q.items.Load(), q.Capacity())
 
 	assert.True(t, q.Resize(2))
 	assert.False(t, q.Produce("f")) // dropped
 
-	assert.EqualValues(t, 2, q.Capacity())
-	assert.EqualValues(t, 4, q.Size()) // the queue will eventually drain, but it will live for a while over capacity
-	assert.Empty(t, *q.items.Load())   // the new queue is empty, as the old queue is still full and over capacity
+	assert.Equal(t, 2, q.Capacity())
+	assert.Equal(t, 4, q.Size())     // the queue will eventually drain, but it will live for a while over capacity
+	assert.Empty(t, *q.items.Load()) // the new queue is empty, as the old queue is still full and over capacity
 
 	released = true
 	releaseConsumers.Done()
diff --git a/cmd/collector/app/span_processor_test.go b/cmd/collector/app/span_processor_test.go
index c9ab7c75..96e079ec 100644
--- a/cmd/collector/app/span_processor_test.go
+++ b/cmd/collector/app/span_processor_test.go
@@ -547,7 +547,7 @@ func TestSpanProcessorCountSpan(t *testing.T) {
 					time.Second,
 					time.Millisecond,
 				)
-				assert.Positive(t, p.spansProcessed.Load())
+				assert.NotZero(t, p.spansProcessed.Load())
 			}
 
 			for i := 0; i < 10000; i++ {
@@ -649,13 +649,13 @@ func TestUpdateDynQueueSize(t *testing.T) {
 			w := &fakeSpanWriter{}
 			p, err := newSpanProcessor(v1adapter.NewTraceWriter(w), nil, Options.QueueSize(tt.initialCapacity), Options.DynQueueSizeWarmup(tt.warmup), Options.DynQueueSizeMemory(tt.sizeInBytes))
 			require.NoError(t, err)
-			assert.EqualValues(t, tt.initialCapacity, p.queue.Capacity())
+			assert.Equal(t, tt.initialCapacity, p.queue.Capacity())
 
 			p.spansProcessed.Store(tt.spansProcessed)
 			p.bytesProcessed.Store(tt.bytesProcessed)
 
 			p.updateQueueSize()
-			assert.EqualValues(t, tt.expectedCapacity, p.queue.Capacity())
+			assert.Equal(t, tt.expectedCapacity, p.queue.Capacity())
 		})
 	}
 }
@@ -673,7 +673,7 @@ func TestStartDynQueueSizeUpdater(t *testing.T) {
 
 	p, err := newSpanProcessor(v1adapter.NewTraceWriter(w), nil, Options.QueueSize(100), Options.DynQueueSizeWarmup(1000), Options.DynQueueSizeMemory(oneGiB))
 	require.NoError(t, err)
-	assert.EqualValues(t, 100, p.queue.Capacity())
+	assert.Equal(t, 100, p.queue.Capacity())
 
 	p.spansProcessed.Store(1000)
 	p.bytesProcessed.Store(10 * 1024 * p.spansProcessed.Load()) // 10KiB per span
@@ -690,7 +690,7 @@ func TestStartDynQueueSizeUpdater(t *testing.T) {
 		time.Sleep(10 * time.Millisecond)
 	}
 
-	assert.EqualValues(t, 104857, p.queue.Capacity())
+	assert.Equal(t, 104857, p.queue.Capacity())
 	require.NoError(t, p.Close())
 }
 
diff --git a/cmd/es-rollover/app/index_options_test.go b/cmd/es-rollover/app/index_options_test.go
index 0d8c9caf..8dd6c374 100644
--- a/cmd/es-rollover/app/index_options_test.go
+++ b/cmd/es-rollover/app/index_options_test.go
@@ -172,7 +172,7 @@ func TestRolloverIndices(t *testing.T) {
 				test.prefix += "-"
 			}
 			result := RolloverIndices(test.archive, test.skipDependencies, test.adaptiveSampling, test.prefix)
-			assert.Equal(t, len(test.expected), len(result))
+			assert.Len(t, result, len(test.expected))
 			for i, r := range result {
 				assert.Equal(t, test.expected[i].templateName, r.TemplateName())
 				assert.Equal(t, test.expected[i].mapping, r.Mapping)
diff --git a/cmd/jaeger/internal/sanitizer/utf8_test.go b/cmd/jaeger/internal/sanitizer/utf8_test.go
index 29c65faf..b6482a1a 100644
--- a/cmd/jaeger/internal/sanitizer/utf8_test.go
+++ b/cmd/jaeger/internal/sanitizer/utf8_test.go
@@ -264,7 +264,7 @@ func TestUTF8Sanitizer_SanitizesNonStringAttributeValueWithInvalidKey(t *testing
 		Attributes().
 		Get("invalid-tag-key-1")
 	require.True(t, ok)
-	require.EqualValues(t, getBytesValueFromString(invalidUTF8()+":99"), value)
+	require.Equal(t, getBytesValueFromString(invalidUTF8()+":99"), value)
 }
 
 func TestUTF8Sanitizer_SanitizesMultipleAttributesWithInvalidKeys(t *testing.T) {
diff --git a/cmd/query/app/apiv3/gateway_test.go b/cmd/query/app/apiv3/gateway_test.go
index 5ca6736a..f5f3a599 100644
--- a/cmd/query/app/apiv3/gateway_test.go
+++ b/cmd/query/app/apiv3/gateway_test.go
@@ -169,7 +169,7 @@ func (gw *testGateway) getTracesAndVerify(t *testing.T, url string, expectedTrac
 	var response api_v3.GRPCGatewayWrapper
 	parseResponse(t, body, &response)
 	td := response.Result.ToTraces()
-	assert.EqualValues(t, 1, td.SpanCount())
+	assert.Equal(t, 1, td.SpanCount())
 	traceID := td.ResourceSpans().At(0).ScopeSpans().At(0).Spans().At(0).TraceID()
 	assert.Equal(t, expectedTraceID.String(), traceID.String())
 }
diff --git a/cmd/query/app/apiv3/grpc_handler_test.go b/cmd/query/app/apiv3/grpc_handler_test.go
index 59ada7d5..ef9e1467 100644
--- a/cmd/query/app/apiv3/grpc_handler_test.go
+++ b/cmd/query/app/apiv3/grpc_handler_test.go
@@ -118,7 +118,7 @@ func TestGetTrace(t *testing.T) {
 			recv, err := getTraceStream.Recv()
 			require.NoError(t, err)
 			td := recv.ToTraces()
-			require.EqualValues(t, 1, td.SpanCount())
+			require.Equal(t, 1, td.SpanCount())
 			assert.Equal(t, "foobar",
 				td.ResourceSpans().At(0).ScopeSpans().At(0).Spans().At(0).Name())
 		})
@@ -182,7 +182,7 @@ func TestFindTraces(t *testing.T) {
 	recv, err := responseStream.Recv()
 	require.NoError(t, err)
 	td := recv.ToTraces()
-	require.EqualValues(t, 1, td.SpanCount())
+	require.Equal(t, 1, td.SpanCount())
 }
 
 func TestFindTracesSendError(t *testing.T) {
diff --git a/cmd/query/app/grpc_handler_test.go b/cmd/query/app/grpc_handler_test.go
index b711dc40..23676225 100644
--- a/cmd/query/app/grpc_handler_test.go
+++ b/cmd/query/app/grpc_handler_test.go
@@ -498,7 +498,7 @@ func TestGetOperationsSuccessGRPC(t *testing.T) {
 			Service: "abc/trifle",
 		})
 		require.NoError(t, err)
-		assert.Equal(t, len(expectedOperations), len(res.Operations))
+		assert.Len(t, res.Operations, len(expectedOperations))
 		for i, actualOp := range res.Operations {
 			assert.Equal(t, expectedOperations[i].Name, actualOp.Name)
 			assert.Equal(t, expectedOperations[i].SpanKind, actualOp.SpanKind)
@@ -693,7 +693,7 @@ func TestSearchTenancyGRPC(t *testing.T) {
 		require.NoError(t, err, "expecting gRPC to succeed with any tenancy header")
 		require.NotNil(t, spanResChunk)
 		require.NotNil(t, spanResChunk.Spans)
-		require.Equal(t, len(mockTrace.Spans), len(spanResChunk.Spans))
+		require.Len(t, spanResChunk.Spans, len(mockTrace.Spans))
 		assert.Equal(t, mockTraceID, spanResChunk.Spans[0].TraceID)
 	})
 }
@@ -791,7 +791,7 @@ func TestSearchTenancyGRPCExplicitList(t *testing.T) {
 					require.NoError(t, err, "expecting gRPC to succeed")
 					require.NotNil(t, spanResChunk)
 					require.NotNil(t, spanResChunk.Spans)
-					require.Equal(t, len(mockTrace.Spans), len(spanResChunk.Spans))
+					require.Len(t, spanResChunk.Spans, len(mockTrace.Spans))
 					assert.Equal(t, mockTraceID, spanResChunk.Spans[0].TraceID)
 				}
 			})
diff --git a/cmd/query/app/http_handler_test.go b/cmd/query/app/http_handler_test.go
index 37f64958..2b93e3a5 100644
--- a/cmd/query/app/http_handler_test.go
+++ b/cmd/query/app/http_handler_test.go
@@ -666,7 +666,7 @@ func TestGetOperationsSuccess(t *testing.T) {
 
 	err := getJSON(ts.server.URL+"/api/operations?service=abc%2Ftrifle&spanKind=server", &response)
 	require.NoError(t, err)
-	assert.Equal(t, len(expectedOperations), len(response.Operations))
+	assert.Len(t, response.Operations, len(expectedOperations))
 	for i, op := range response.Operations {
 		assert.Equal(t, expectedOperations[i].Name, op.Name)
 		assert.Equal(t, expectedOperations[i].SpanKind, op.SpanKind)
diff --git a/cmd/query/app/querysvc/v2/adjuster/ipattribute_test.go b/cmd/query/app/querysvc/v2/adjuster/ipattribute_test.go
index 4e5d0917..28a1be3c 100644
--- a/cmd/query/app/querysvc/v2/adjuster/ipattribute_test.go
+++ b/cmd/query/app/querysvc/v2/adjuster/ipattribute_test.go
@@ -54,7 +54,7 @@ func TestIPAttributeAdjuster(t *testing.T) {
 		case int:
 			require.EqualValues(t, v, val.Int())
 		case string:
-			require.EqualValues(t, v, val.Str())
+			require.Equal(t, v, val.Str())
 		}
 	}
 
diff --git a/cmd/query/app/querysvc/v2/adjuster/spaniduniquifier_test.go b/cmd/query/app/querysvc/v2/adjuster/spaniduniquifier_test.go
index 282e0dcd..3c426b20 100644
--- a/cmd/query/app/querysvc/v2/adjuster/spaniduniquifier_test.go
+++ b/cmd/query/app/querysvc/v2/adjuster/spaniduniquifier_test.go
@@ -56,7 +56,7 @@ func TestSpanIDUniquifierTriggered(t *testing.T) {
 
 	serverSpan := spans.At(1)
 	assert.EqualValues(t, []byte{0, 0, 0, 0, 0, 0, 0, 2}, serverSpan.SpanID(), "server span ID should be reassigned")
-	assert.EqualValues(t, clientSpanID, serverSpan.ParentSpanID(), "next server span should be this server span's parent")
+	assert.Equal(t, clientSpanID, serverSpan.ParentSpanID(), "next server span should be this server span's parent")
 
 	thirdSpan := spans.At(2)
 	assert.Equal(t, anotherSpanID, thirdSpan.SpanID(), "3rd span ID should not change")
diff --git a/cmd/query/app/static_handler_test.go b/cmd/query/app/static_handler_test.go
index e67c6428..b30c0a18 100644
--- a/cmd/query/app/static_handler_test.go
+++ b/cmd/query/app/static_handler_test.go
@@ -233,7 +233,7 @@ func TestLoadUIConfig(t *testing.T) {
 			} else {
 				require.NoError(t, err)
 			}
-			assert.EqualValues(t, testCase.expected, config)
+			assert.Equal(t, testCase.expected, config)
 		})
 	}
 
diff --git a/examples/hotrod/pkg/tracing/rpcmetrics/endpoints_test.go b/examples/hotrod/pkg/tracing/rpcmetrics/endpoints_test.go
index 5d67c946..c959c857 100644
--- a/examples/hotrod/pkg/tracing/rpcmetrics/endpoints_test.go
+++ b/examples/hotrod/pkg/tracing/rpcmetrics/endpoints_test.go
@@ -22,12 +22,12 @@ func TestNormalizedEndpoints(t *testing.T) {
 	assert.Equal(t, "ab_cd", n.normalize("ab^cd"), "one translation")
 	assert.Equal(t, "ab_cd", n.normalize("ab^cd"), "cache hit")
 	assertLen(1)
-	assert.Equal(t, "", n.normalize("xys"), "cache overflow")
+	assert.Empty(t, n.normalize("xys"), "cache overflow")
 	assertLen(1)
 }
 
 func TestNormalizedEndpointsDoubleLocking(t *testing.T) {
 	n := newNormalizedEndpoints(1, DefaultNameNormalizer)
 	assert.Equal(t, "ab_cd", n.normalize("ab^cd"), "fill out the cache")
-	assert.Equal(t, "", n.normalizeWithLock("xys"), "cache overflow")
+	assert.Empty(t, n.normalizeWithLock("xys"), "cache overflow")
 }
diff --git a/internal/converter/json/from_domain_test.go b/internal/converter/json/from_domain_test.go
index f0d1a6a8..489b37a5 100644
--- a/internal/converter/json/from_domain_test.go
+++ b/internal/converter/json/from_domain_test.go
@@ -166,5 +166,5 @@ func TestDependenciesFromDomain(t *testing.T) {
 		},
 	}
 	actual := DependenciesFromDomain(input)
-	assert.EqualValues(t, expected, actual)
+	assert.Equal(t, expected, actual)
 }
diff --git a/internal/converter/json/json_span_compare_test.go b/internal/converter/json/json_span_compare_test.go
index f23943ed..1f7220af 100644
--- a/internal/converter/json/json_span_compare_test.go
+++ b/internal/converter/json/json_span_compare_test.go
@@ -20,7 +20,7 @@ func CompareJSONSpans(t *testing.T, expected *esJson.Span, actual *esJson.Span)
 	sortJSONSpan(expected)
 	sortJSONSpan(actual)
 
-	if !assert.EqualValues(t, expected, actual) {
+	if !assert.Equal(t, expected, actual) {
 		for _, err := range pretty.Diff(expected, actual) {
 			t.Log(err)
 		}
diff --git a/internal/converter/json/sampling_test.go b/internal/converter/json/sampling_test.go
index 9f6e27aa..9bbf3250 100644
--- a/internal/converter/json/sampling_test.go
+++ b/internal/converter/json/sampling_test.go
@@ -97,5 +97,5 @@ func TestSamplingStrategyResponseFromJSON(t *testing.T) {
 	s2, err := SamplingStrategyResponseFromJSON([]byte(jsonData))
 	require.NoError(t, err)
 	assert.Equal(t, s1.GetStrategyType(), s2.GetStrategyType())
-	assert.EqualValues(t, s1.GetProbabilisticSampling(), s2.GetProbabilisticSampling())
+	assert.Equal(t, s1.GetProbabilisticSampling(), s2.GetProbabilisticSampling())
 }
diff --git a/internal/converter/thrift/jaeger/to_domain_test.go b/internal/converter/thrift/jaeger/to_domain_test.go
index 12a833b7..7ce5e7ba 100644
--- a/internal/converter/thrift/jaeger/to_domain_test.go
+++ b/internal/converter/thrift/jaeger/to_domain_test.go
@@ -39,7 +39,7 @@ func TestToDomain(t *testing.T) {
 			for _, s := range actualSpans {
 				s.NormalizeTimestamps()
 			}
-			if !assert.EqualValues(t, mSpans, actualSpans) {
+			if !assert.Equal(t, mSpans, actualSpans) {
 				for _, err := range pretty.Diff(mSpans, actualSpans) {
 					t.Log(err)
 				}
diff --git a/internal/healthcheck/internal_test.go b/internal/healthcheck/internal_test.go
index 09978671..6e4a26b7 100644
--- a/internal/healthcheck/internal_test.go
+++ b/internal/healthcheck/internal_test.go
@@ -36,7 +36,7 @@ func TestHttpCall(t *testing.T) {
 	if want, have := hc.getState().upSince, hr.UpSince; !assert.True(t, want.Equal(have)) {
 		t.Logf("want='%v', have='%v'", want, have)
 	}
-	assert.NotZero(t, hr.Uptime)
+	assert.NotEmpty(t, hr.Uptime)
 	t.Logf("uptime=%v", hr.Uptime)
 
 	time.Sleep(time.Millisecond)
@@ -47,7 +47,7 @@ func TestHttpCall(t *testing.T) {
 	assert.Equal(t, http.StatusServiceUnavailable, resp.StatusCode)
 
 	hrNew := parseHealthCheckResponse(t, resp)
-	assert.Zero(t, hrNew.Uptime)
+	assert.Empty(t, hrNew.Uptime)
 	assert.Zero(t, hrNew.UpSince)
 }
 
diff --git a/internal/metrics/prometheus/factory_test.go b/internal/metrics/prometheus/factory_test.go
index 6f8b93a0..1f3e8dae 100644
--- a/internal/metrics/prometheus/factory_test.go
+++ b/internal/metrics/prometheus/factory_test.go
@@ -72,7 +72,7 @@ func TestCounter(t *testing.T) {
 	snapshot, err := registry.Gather()
 	require.NoError(t, err)
 
-	assert.EqualValues(t, "Help message", snapshot[0].GetHelp())
+	assert.Equal(t, "Help message", snapshot[0].GetHelp())
 
 	m1 := findMetric(t, snapshot, "bender_rodriguez_total", map[string]string{"a": "b", "x": "y"})
 	assert.InDelta(t, 3.0, m1.GetCounter().GetValue(), 0.01, "%+v", m1)
@@ -93,7 +93,7 @@ func TestCounterDefaultHelp(t *testing.T) {
 	snapshot, err := registry.Gather()
 	require.NoError(t, err)
 
-	assert.EqualValues(t, "rodriguez", snapshot[0].GetHelp())
+	assert.Equal(t, "rodriguez", snapshot[0].GetHelp())
 }
 
 func TestGauge(t *testing.T) {
@@ -129,7 +129,7 @@ func TestGauge(t *testing.T) {
 	snapshot, err := registry.Gather()
 	require.NoError(t, err)
 
-	assert.EqualValues(t, "Help message", snapshot[0].GetHelp())
+	assert.Equal(t, "Help message", snapshot[0].GetHelp())
 
 	m1 := findMetric(t, snapshot, "bender_rodriguez", map[string]string{"a": "b", "x": "y"})
 	assert.InDelta(t, 2.0, m1.GetGauge().GetValue(), 0.01, "%+v", m1)
@@ -150,7 +150,7 @@ func TestGaugeDefaultHelp(t *testing.T) {
 	snapshot, err := registry.Gather()
 	require.NoError(t, err)
 
-	assert.EqualValues(t, "rodriguez", snapshot[0].GetHelp())
+	assert.Equal(t, "rodriguez", snapshot[0].GetHelp())
 }
 
 func TestTimer(t *testing.T) {
@@ -186,7 +186,7 @@ func TestTimer(t *testing.T) {
 	snapshot, err := registry.Gather()
 	require.NoError(t, err)
 
-	assert.EqualValues(t, "Help message", snapshot[0].GetHelp())
+	assert.Equal(t, "Help message", snapshot[0].GetHelp())
 
 	m1 := findMetric(t, snapshot, "bender_rodriguez", map[string]string{"a": "b", "x": "y"})
 	assert.EqualValues(t, 2, m1.GetHistogram().GetSampleCount(), "%+v", m1)
@@ -229,7 +229,7 @@ func TestTimerDefaultHelp(t *testing.T) {
 	snapshot, err := registry.Gather()
 	require.NoError(t, err)
 
-	assert.EqualValues(t, "rodriguez", snapshot[0].GetHelp())
+	assert.Equal(t, "rodriguez", snapshot[0].GetHelp())
 }
 
 func TestTimerCustomBuckets(t *testing.T) {
@@ -307,7 +307,7 @@ func TestHistogram(t *testing.T) {
 	snapshot, err := registry.Gather()
 	require.NoError(t, err)
 
-	assert.EqualValues(t, "Help message", snapshot[0].GetHelp())
+	assert.Equal(t, "Help message", snapshot[0].GetHelp())
 
 	m1 := findMetric(t, snapshot, "bender_rodriguez", map[string]string{"a": "b", "x": "y"})
 	assert.EqualValues(t, 2, m1.GetHistogram().GetSampleCount(), "%+v", m1)
@@ -350,7 +350,7 @@ func TestHistogramDefaultHelp(t *testing.T) {
 	snapshot, err := registry.Gather()
 	require.NoError(t, err)
 
-	assert.EqualValues(t, "rodriguez", snapshot[0].GetHelp())
+	assert.Equal(t, "rodriguez", snapshot[0].GetHelp())
 }
 
 func TestHistogramCustomBuckets(t *testing.T) {
diff --git a/internal/sampling/http/handler_test.go b/internal/sampling/http/handler_test.go
index c2e4662d..95478887 100644
--- a/internal/sampling/http/handler_test.go
+++ b/internal/sampling/http/handler_test.go
@@ -115,7 +115,7 @@ func testGorillaHTTPHandler(t *testing.T, basePath string) {
 				} else {
 					objResp, err := p2json.SamplingStrategyResponseFromJSON(body)
 					require.NoError(t, err)
-					assert.EqualValues(t, ts.samplingProvider.samplingResponse, objResp)
+					assert.Equal(t, ts.samplingProvider.samplingResponse, objResp)
 				}
 			})
 		}
@@ -160,7 +160,7 @@ func testHTTPHandler(t *testing.T, basePath string) {
 				} else {
 					objResp, err := p2json.SamplingStrategyResponseFromJSON(body)
 					require.NoError(t, err)
-					assert.EqualValues(t, ts.samplingProvider.samplingResponse, objResp)
+					assert.Equal(t, ts.samplingProvider.samplingResponse, objResp)
 				}
 			})
 		}
diff --git a/internal/sampling/samplingstrategy/file/provider_test.go b/internal/sampling/samplingstrategy/file/provider_test.go
index cc86de85..23a8fc85 100644
--- a/internal/sampling/samplingstrategy/file/provider_test.go
+++ b/internal/sampling/samplingstrategy/file/provider_test.go
@@ -108,22 +108,22 @@ func TestStrategyStoreWithFile(t *testing.T) {
 	assert.Contains(t, buf.String(), "No sampling strategies source provided, using defaults")
 	s, err := provider.GetSamplingStrategy(context.Background(), "foo")
 	require.NoError(t, err)
-	assert.EqualValues(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.001), *s)
+	assert.Equal(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.001), *s)
 
 	// Test reading strategies from a file
 	provider, err = NewProvider(Options{StrategiesFile: "fixtures/strategies.json"}, logger)
 	require.NoError(t, err)
 	s, err = provider.GetSamplingStrategy(context.Background(), "foo")
 	require.NoError(t, err)
-	assert.EqualValues(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.8), *s)
+	assert.Equal(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.8), *s)
 
 	s, err = provider.GetSamplingStrategy(context.Background(), "bar")
 	require.NoError(t, err)
-	assert.EqualValues(t, makeResponse(api_v2.SamplingStrategyType_RATE_LIMITING, 5), *s)
+	assert.Equal(t, makeResponse(api_v2.SamplingStrategyType_RATE_LIMITING, 5), *s)
 
 	s, err = provider.GetSamplingStrategy(context.Background(), "default")
 	require.NoError(t, err)
-	assert.EqualValues(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.5), *s)
+	assert.Equal(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.5), *s)
 }
 
 func TestStrategyStoreWithURL(t *testing.T) {
@@ -135,7 +135,7 @@ func TestStrategyStoreWithURL(t *testing.T) {
 	assert.Contains(t, buf.String(), "No sampling strategies found or URL is unavailable, using defaults")
 	s, err := provider.GetSamplingStrategy(context.Background(), "foo")
 	require.NoError(t, err)
-	assert.EqualValues(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.001), *s)
+	assert.Equal(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.001), *s)
 
 	// Test downloading strategies from a URL.
 	provider, err = NewProvider(Options{StrategiesFile: mockServer.URL}, logger)
@@ -143,11 +143,11 @@ func TestStrategyStoreWithURL(t *testing.T) {
 
 	s, err = provider.GetSamplingStrategy(context.Background(), "foo")
 	require.NoError(t, err)
-	assert.EqualValues(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.8), *s)
+	assert.Equal(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.8), *s)
 
 	s, err = provider.GetSamplingStrategy(context.Background(), "bar")
 	require.NoError(t, err)
-	assert.EqualValues(t, makeResponse(api_v2.SamplingStrategyType_RATE_LIMITING, 5), *s)
+	assert.Equal(t, makeResponse(api_v2.SamplingStrategyType_RATE_LIMITING, 5), *s)
 }
 
 func TestPerOperationSamplingStrategies(t *testing.T) {
@@ -238,7 +238,7 @@ func TestPerOperationSamplingStrategies(t *testing.T) {
 				},
 			},
 		}
-		assert.EqualValues(t, expectedRsp, *s)
+		assert.Equal(t, expectedRsp, *s)
 	}
 }
 
@@ -280,7 +280,7 @@ func TestMissingServiceSamplingStrategyTypes(t *testing.T) {
 
 	s, err = provider.GetSamplingStrategy(context.Background(), "default")
 	require.NoError(t, err)
-	assert.EqualValues(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.5), *s)
+	assert.Equal(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.5), *s)
 }
 
 func TestParseStrategy(t *testing.T) {
@@ -308,7 +308,7 @@ func TestParseStrategy(t *testing.T) {
 	for _, test := range tests {
 		tt := test
 		t.Run("", func(t *testing.T) {
-			assert.EqualValues(t, tt.expected, *provider.parseStrategy(&tt.strategy.strategy))
+			assert.Equal(t, tt.expected, *provider.parseStrategy(&tt.strategy.strategy))
 		})
 	}
 	assert.Empty(t, buf.String())
@@ -316,7 +316,7 @@ func TestParseStrategy(t *testing.T) {
 	// Test nonexistent strategy type
 	actual := *provider.parseStrategy(&strategy{Type: "blah", Param: 3.5})
 	expected := makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, provider.options.DefaultSamplingProbability)
-	assert.EqualValues(t, expected, actual)
+	assert.Equal(t, expected, actual)
 	assert.Contains(t, buf.String(), "Failed to parse sampling strategy")
 }
 
@@ -343,7 +343,7 @@ func TestDeepCopy(t *testing.T) {
 	}
 	cp := deepCopy(s)
 	assert.NotSame(t, cp, s)
-	assert.EqualValues(t, cp, s)
+	assert.Equal(t, cp, s)
 }
 
 func TestAutoUpdateStrategyWithFile(t *testing.T) {
@@ -370,7 +370,7 @@ func TestAutoUpdateStrategyWithFile(t *testing.T) {
 	// confirm baseline value
 	s, err := provider.GetSamplingStrategy(context.Background(), "foo")
 	require.NoError(t, err)
-	assert.EqualValues(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.8), *s)
+	assert.Equal(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.8), *s)
 
 	// verify that reloading is a no-op
 	value := provider.reloadSamplingStrategy(provider.samplingStrategyLoader(dstFile), string(srcBytes))
@@ -389,7 +389,7 @@ func TestAutoUpdateStrategyWithFile(t *testing.T) {
 		}
 		time.Sleep(1 * time.Millisecond)
 	}
-	assert.EqualValues(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.9), *s)
+	assert.Equal(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.9), *s)
 }
 
 func TestAutoUpdateStrategyWithURL(t *testing.T) {
@@ -406,7 +406,7 @@ func TestAutoUpdateStrategyWithURL(t *testing.T) {
 	// confirm baseline value
 	s, err := provider.GetSamplingStrategy(context.Background(), "foo")
 	require.NoError(t, err)
-	assert.EqualValues(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.8), *s)
+	assert.Equal(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.8), *s)
 
 	// verify that reloading in no-op
 	value := provider.reloadSamplingStrategy(
@@ -430,7 +430,7 @@ func TestAutoUpdateStrategyWithURL(t *testing.T) {
 		}
 		time.Sleep(1 * time.Millisecond)
 	}
-	assert.EqualValues(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.9), *s)
+	assert.Equal(t, makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.9), *s)
 }
 
 func TestAutoUpdateStrategyErrors(t *testing.T) {
diff --git a/internal/storage/metricstore/prometheus/metricstore/reader_test.go b/internal/storage/metricstore/prometheus/metricstore/reader_test.go
index 62cc45fa..d1d7c4ca 100644
--- a/internal/storage/metricstore/prometheus/metricstore/reader_test.go
+++ b/internal/storage/metricstore/prometheus/metricstore/reader_test.go
@@ -970,7 +970,7 @@ func assertMetrics(t *testing.T, gotMetrics *metrics.MetricFamily, wantLabels ma
 
 	// There is no guaranteed order of labels, so we need to take the approach of using a map of expected values.
 	labels := gotMetrics.Metrics[0].Labels
-	assert.Equal(t, len(wantLabels), len(labels))
+	assert.Len(t, labels, len(wantLabels))
 	for _, l := range labels {
 		assert.Contains(t, wantLabels, l.Name)
 		assert.Equal(t, wantLabels[l.Name], l.Value)
diff --git a/internal/storage/v1/api/metricstore/metricstoremetrics/decorator_test.go b/internal/storage/v1/api/metricstore/metricstoremetrics/decorator_test.go
index 9374db29..607a82ff 100644
--- a/internal/storage/v1/api/metricstore/metricstoremetrics/decorator_test.go
+++ b/internal/storage/v1/api/metricstore/metricstoremetrics/decorator_test.go
@@ -78,7 +78,7 @@ func checkExpectedExistingAndNonExistentCounters(t *testing.T,
 	nonExistentKeys []string,
 ) {
 	for k, v := range expectedCounters {
-		assert.EqualValues(t, v, actualCounters[k], k)
+		assert.Equal(t, v, actualCounters[k], k)
 	}
 
 	for _, k := range existingKeys {
diff --git a/internal/storage/v1/api/spanstore/spanstoremetrics/read_metrics_test.go b/internal/storage/v1/api/spanstore/spanstoremetrics/read_metrics_test.go
index 28dc86af..78cb52a1 100644
--- a/internal/storage/v1/api/spanstore/spanstoremetrics/read_metrics_test.go
+++ b/internal/storage/v1/api/spanstore/spanstoremetrics/read_metrics_test.go
@@ -71,7 +71,7 @@ func checkExpectedExistingAndNonExistentCounters(t *testing.T,
 	nonExistentKeys []string,
 ) {
 	for k, v := range expectedCounters {
-		assert.EqualValues(t, v, actualCounters[k], k)
+		assert.Equal(t, v, actualCounters[k], k)
 	}
 
 	for _, k := range existingKeys {
diff --git a/internal/storage/v1/badger/factory_test.go b/internal/storage/v1/badger/factory_test.go
index 32a82eb4..8c59be97 100644
--- a/internal/storage/v1/badger/factory_test.go
+++ b/internal/storage/v1/badger/factory_test.go
@@ -173,7 +173,7 @@ func TestBadgerMetrics(t *testing.T) {
 	vlogSize := waiter(0)
 	_, gs := mFactory.Snapshot()
 	assert.EqualValues(t, 0, vlogSize)
-	assert.EqualValues(t, int64(0), gs["badger_get_num_memtable"]) // IntVal metric
+	assert.Equal(t, int64(0), gs["badger_get_num_memtable"]) // IntVal metric
 
 	_, found = gs["badger_size_bytes_lsm"] // Map metric
 	assert.True(t, found)
diff --git a/internal/storage/v1/cassandra/dependencystore/storage_test.go b/internal/storage/v1/cassandra/dependencystore/storage_test.go
index cbe96b02..3b51bc41 100644
--- a/internal/storage/v1/cassandra/dependencystore/storage_test.go
+++ b/internal/storage/v1/cassandra/dependencystore/storage_test.go
@@ -235,7 +235,7 @@ func TestDependencyStoreGetDependencies(t *testing.T) {
 					assert.Contains(t, s.logBuffer.String(), expectedLog, "Log must contain %s, but was %s", expectedLog, s.logBuffer.String())
 				}
 				if len(testCase.expectedLogs) == 0 {
-					assert.Equal(t, "", s.logBuffer.String())
+					assert.Empty(t, s.logBuffer.String())
 				}
 			})
 		})
diff --git a/internal/storage/v1/cassandra/samplingstore/storage_test.go b/internal/storage/v1/cassandra/samplingstore/storage_test.go
index 35703c86..d9f5bb5c 100644
--- a/internal/storage/v1/cassandra/samplingstore/storage_test.go
+++ b/internal/storage/v1/cassandra/samplingstore/storage_test.go
@@ -379,7 +379,7 @@ func TestStringToProbabilities(t *testing.T) {
 func TestProbabilitiesSetToString(t *testing.T) {
 	s := probabilitiesSetToString(map[string]struct{}{"0.000001": {}, "0.000002": {}})
 	assert.True(t, s == "0.000001,0.000002" || s == "0.000002,0.000001")
-	assert.Equal(t, "", probabilitiesSetToString(nil))
+	assert.Empty(t, probabilitiesSetToString(nil))
 }
 
 func TestMain(m *testing.M) {
diff --git a/internal/storage/v1/cassandra/schema/schema_test.go b/internal/storage/v1/cassandra/schema/schema_test.go
index 39e69b89..501165db 100644
--- a/internal/storage/v1/cassandra/schema/schema_test.go
+++ b/internal/storage/v1/cassandra/schema/schema_test.go
@@ -35,7 +35,7 @@ query1-finished;
 	queries, err := sc.getQueriesFromBytes(queriesAsBytes)
 	require.NoError(t, err)
 
-	require.Equal(t, len(expGeneratedQueries), len(queries))
+	require.Len(t, queries, len(expGeneratedQueries))
 
 	for i := range len(expGeneratedQueries) {
 		require.Equal(t, expGeneratedQueries[i], queries[i])
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/converter_test.go b/internal/storage/v1/cassandra/spanstore/dbmodel/converter_test.go
index c74fbcd9..bf6fe987 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/converter_test.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/converter_test.go
@@ -176,7 +176,7 @@ func getTestUniqueTags() []TagInsertion {
 func TestToSpan(t *testing.T) {
 	expectedSpan := getTestSpan()
 	actualDBSpan := FromDomain(getTestJaegerSpan())
-	if !assert.EqualValues(t, expectedSpan, actualDBSpan) {
+	if !assert.Equal(t, expectedSpan, actualDBSpan) {
 		for _, diff := range pretty.Diff(expectedSpan, actualDBSpan) {
 			t.Log(diff)
 		}
@@ -193,7 +193,7 @@ func TestFromSpan(t *testing.T) {
 		expectedSpan := getTestJaegerSpan()
 		actualJSpan, err := ToDomain(testDBSpan)
 		require.NoError(t, err)
-		if !assert.EqualValues(t, expectedSpan, actualJSpan) {
+		if !assert.Equal(t, expectedSpan, actualJSpan) {
 			for _, diff := range pretty.Diff(expectedSpan, actualJSpan) {
 				t.Log(diff)
 			}
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_drop_all_test.go b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_drop_all_test.go
index 6bd52e9c..19f3df4c 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_drop_all_test.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_drop_all_test.go
@@ -68,12 +68,12 @@ func TestDropAll(t *testing.T) {
 
 	for _, test := range tt {
 		actualTags := test.filter.FilterTags(nil, sampleTags)
-		assert.EqualValues(t, test.expectedTags, actualTags)
+		assert.Equal(t, test.expectedTags, actualTags)
 
 		actualProcessTags := test.filter.FilterProcessTags(nil, sampleTags)
-		assert.EqualValues(t, test.expectedProcessTags, actualProcessTags)
+		assert.Equal(t, test.expectedProcessTags, actualProcessTags)
 
 		actualLogs := test.filter.FilterLogFields(nil, sampleTags)
-		assert.EqualValues(t, test.expectedLogs, actualLogs)
+		assert.Equal(t, test.expectedLogs, actualLogs)
 	}
 }
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_test.go b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_test.go
index 27e91b64..807f79dc 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_test.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_test.go
@@ -60,7 +60,7 @@ func TestChainedTagFilter(t *testing.T) {
 }
 
 func compareTags(t *testing.T, expected, actual model.KeyValues) {
-	if !assert.EqualValues(t, expected, actual) {
+	if !assert.Equal(t, expected, actual) {
 		for _, diff := range pretty.Diff(expected, actual) {
 			t.Log(diff)
 		}
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/unique_ids_test.go b/internal/storage/v1/cassandra/spanstore/dbmodel/unique_ids_test.go
index 5ff9f275..b8e9bbcf 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/unique_ids_test.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/unique_ids_test.go
@@ -32,7 +32,7 @@ func TestGetIntersectedTraceIDs(t *testing.T) {
 		firstTraceID: struct{}{},
 	}
 	actual := IntersectTraceIDs(listOfUniqueTraceIDs)
-	assert.EqualValues(t, expected, actual)
+	assert.Equal(t, expected, actual)
 }
 
 func TestAdd(t *testing.T) {
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/unique_tags_test.go b/internal/storage/v1/cassandra/spanstore/dbmodel/unique_tags_test.go
index bdd6e7e0..ac3ec860 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/unique_tags_test.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/unique_tags_test.go
@@ -14,7 +14,7 @@ import (
 func TestGetUniqueTags(t *testing.T) {
 	expectedTags := getTestUniqueTags()
 	uniqueTags := GetAllUniqueTags(getTestJaegerSpan(), DefaultTagFilter)
-	if !assert.EqualValues(t, expectedTags, uniqueTags) {
+	if !assert.Equal(t, expectedTags, uniqueTags) {
 		for _, diff := range pretty.Diff(expectedTags, uniqueTags) {
 			t.Log(diff)
 		}
diff --git a/internal/storage/v1/cassandra/spanstore/reader_test.go b/internal/storage/v1/cassandra/spanstore/reader_test.go
index c386b724..4900e5f3 100644
--- a/internal/storage/v1/cassandra/spanstore/reader_test.go
+++ b/internal/storage/v1/cassandra/spanstore/reader_test.go
@@ -433,7 +433,7 @@ func TestSpanReaderFindTraces(t *testing.T) {
 					assert.Contains(t, r.logBuffer.String(), expectedLog)
 				}
 				if len(testCase.expectedLogs) == 0 {
-					assert.Equal(t, "", r.logBuffer.String())
+					assert.Empty(t, r.logBuffer.String())
 				}
 			})
 		})
diff --git a/internal/storage/v1/cassandra/spanstore/writer_test.go b/internal/storage/v1/cassandra/spanstore/writer_test.go
index 02526d53..7488fc3c 100644
--- a/internal/storage/v1/cassandra/spanstore/writer_test.go
+++ b/internal/storage/v1/cassandra/spanstore/writer_test.go
@@ -239,7 +239,7 @@ func TestSpanWriter(t *testing.T) {
 					assert.Contains(t, w.logBuffer.String(), expectedLog)
 				}
 				if len(testCase.expectedLogs) == 0 {
-					assert.Equal(t, "", w.logBuffer.String())
+					assert.Empty(t, w.logBuffer.String())
 				}
 			})
 		})
diff --git a/internal/storage/v1/elasticsearch/dependencystore/storage_test.go b/internal/storage/v1/elasticsearch/dependencystore/storage_test.go
index 7d633aee..52470a4e 100644
--- a/internal/storage/v1/elasticsearch/dependencystore/storage_test.go
+++ b/internal/storage/v1/elasticsearch/dependencystore/storage_test.go
@@ -185,7 +185,7 @@ func TestGetDependencies(t *testing.T) {
 				assert.Nil(t, actual)
 			} else {
 				require.NoError(t, err)
-				assert.EqualValues(t, testCase.expectedOutput, actual)
+				assert.Equal(t, testCase.expectedOutput, actual)
 			}
 		})
 	}
@@ -248,7 +248,7 @@ func TestGetReadIndices(t *testing.T) {
 	}
 	for _, testCase := range testCases {
 		s := NewDependencyStore(testCase.params)
-		assert.EqualValues(t, testCase.indices, s.getReadIndices(fixedTime, testCase.lookback))
+		assert.Equal(t, testCase.indices, s.getReadIndices(fixedTime, testCase.lookback))
 	}
 }
 
@@ -270,7 +270,7 @@ func TestGetWriteIndex(t *testing.T) {
 	}
 	for _, testCase := range testCases {
 		s := NewDependencyStore(testCase.params)
-		assert.EqualValues(t, testCase.writeIndex, s.getWriteIndex(fixedTime))
+		assert.Equal(t, testCase.writeIndex, s.getWriteIndex(fixedTime))
 	}
 }
 
diff --git a/internal/storage/v1/elasticsearch/factory_test.go b/internal/storage/v1/elasticsearch/factory_test.go
index 06784a85..a80c61ef 100644
--- a/internal/storage/v1/elasticsearch/factory_test.go
+++ b/internal/storage/v1/elasticsearch/factory_test.go
@@ -320,7 +320,7 @@ func TestPasswordFromFile(t *testing.T) {
 		file := filepath.Join(t.TempDir(), "does not exist")
 		token, err := loadTokenFromFile(file)
 		require.Error(t, err)
-		assert.Equal(t, "", token)
+		assert.Empty(t, token)
 	})
 }
 
diff --git a/internal/storage/v1/elasticsearch/mappings/flags_test.go b/internal/storage/v1/elasticsearch/mappings/flags_test.go
index efb303c3..ebc957d3 100644
--- a/internal/storage/v1/elasticsearch/mappings/flags_test.go
+++ b/internal/storage/v1/elasticsearch/mappings/flags_test.go
@@ -16,12 +16,12 @@ func TestOptionsWithDefaultFlags(t *testing.T) {
 	c := cobra.Command{}
 	o.AddFlags(&c)
 
-	assert.Equal(t, "", o.Mapping)
+	assert.Empty(t, o.Mapping)
 	assert.Equal(t, uint(7), o.EsVersion)
 	assert.EqualValues(t, 5, o.Shards)
 	assert.EqualValues(t, 1, o.Replicas)
 
-	assert.Equal(t, "", o.IndexPrefix)
+	assert.Empty(t, o.IndexPrefix)
 	assert.Equal(t, "false", o.UseILM)
 	assert.Equal(t, "jaeger-ilm-policy", o.ILMPolicyName)
 }
diff --git a/internal/storage/v1/elasticsearch/samplingstore/storage_test.go b/internal/storage/v1/elasticsearch/samplingstore/storage_test.go
index fbdc8096..c10b4d41 100644
--- a/internal/storage/v1/elasticsearch/samplingstore/storage_test.go
+++ b/internal/storage/v1/elasticsearch/samplingstore/storage_test.go
@@ -320,7 +320,7 @@ func TestGetThroughput(t *testing.T) {
 					assert.Nil(t, actual)
 				} else {
 					require.NoError(t, err)
-					assert.EqualValues(t, test.expectedOutput, actual)
+					assert.Equal(t, test.expectedOutput, actual)
 				}
 			})
 		})
@@ -419,7 +419,7 @@ func TestGetLatestProbabilities(t *testing.T) {
 					assert.Nil(t, actual)
 				} else {
 					require.NoError(t, err)
-					assert.EqualValues(t, test.expectedOutput, actual)
+					assert.Equal(t, test.expectedOutput, actual)
 				}
 			})
 		})
diff --git a/internal/storage/v1/elasticsearch/spanstore/json_span_compare_test.go b/internal/storage/v1/elasticsearch/spanstore/json_span_compare_test.go
index 8001ebcf..6f393bdf 100644
--- a/internal/storage/v1/elasticsearch/spanstore/json_span_compare_test.go
+++ b/internal/storage/v1/elasticsearch/spanstore/json_span_compare_test.go
@@ -20,7 +20,7 @@ func CompareJSONSpans(t *testing.T, expected *dbmodel.Span, actual *dbmodel.Span
 	sortJSONSpan(expected)
 	sortJSONSpan(actual)
 
-	if !assert.EqualValues(t, expected, actual) {
+	if !assert.Equal(t, expected, actual) {
 		for _, err := range pretty.Diff(expected, actual) {
 			t.Log(err)
 		}
diff --git a/internal/storage/v1/elasticsearch/spanstore/reader_test.go b/internal/storage/v1/elasticsearch/spanstore/reader_test.go
index 15fd05f5..75fd75ef 100644
--- a/internal/storage/v1/elasticsearch/spanstore/reader_test.go
+++ b/internal/storage/v1/elasticsearch/spanstore/reader_test.go
@@ -323,7 +323,7 @@ func TestSpanReader_GetTrace(t *testing.T) {
 		require.NoError(t, err)
 
 		require.Len(t, trace[0].Spans, 1)
-		assert.EqualValues(t, trace[0].Spans[0], expectedSpans[0])
+		assert.Equal(t, trace[0].Spans[0], expectedSpans[0])
 	})
 }
 
@@ -430,7 +430,7 @@ func TestSpanReader_SearchAfter(t *testing.T) {
 		expectedSpans, err := r.reader.collectSpans(hits)
 		require.NoError(t, err)
 
-		assert.EqualValues(t, trace[0].Spans[0], expectedSpans[0])
+		assert.Equal(t, trace[0].Spans[0], expectedSpans[0])
 	})
 }
 
@@ -509,7 +509,7 @@ func TestSpanReader_esJSONtoJSONSpanModel(t *testing.T) {
 
 		var expectedSpan dbmodel.Span
 		require.NoError(t, json.Unmarshal(exampleESSpan, &expectedSpan))
-		assert.EqualValues(t, expectedSpan, span)
+		assert.Equal(t, expectedSpan, span)
 	})
 }
 
@@ -566,7 +566,7 @@ func TestSpanReaderFindIndices(t *testing.T) {
 	withSpanReader(t, func(r *spanReaderTest) {
 		for _, testCase := range testCases {
 			actual := r.reader.timeRangeIndices(spanIndexBaseName, dateLayout, testCase.startTime, testCase.endTime, -24*time.Hour)
-			assert.EqualValues(t, testCase.expected, actual)
+			assert.Equal(t, testCase.expected, actual)
 		}
 	})
 }
@@ -635,9 +635,9 @@ func testGet(typ string, t *testing.T) {
 					require.EqualError(t, err, testCase.expectedError())
 					assert.Nil(t, actual)
 				} else if expectedOutput, ok := testCase.expectedOutput[typ]; ok {
-					assert.EqualValues(t, expectedOutput, actual)
+					assert.Equal(t, expectedOutput, actual)
 				} else {
-					assert.EqualValues(t, testCase.expectedOutput["default"], actual)
+					assert.Equal(t, testCase.expectedOutput["default"], actual)
 				}
 			})
 		})
@@ -669,7 +669,7 @@ func TestSpanReader_bucketToStringArray(t *testing.T) {
 		actual, err := bucketToStringArray[string](buckets)
 		require.NoError(t, err)
 
-		assert.EqualValues(t, []string{"hello", "world", "2"}, actual)
+		assert.Equal(t, []string{"hello", "world", "2"}, actual)
 	})
 }
 
@@ -729,7 +729,7 @@ func TestSpanReader_FindTraces(t *testing.T) {
 		require.NoError(t, err)
 
 		require.Len(t, trace.Spans, 2)
-		assert.EqualValues(t, trace.Spans[0], expectedSpans[0])
+		assert.Equal(t, trace.Spans[0], expectedSpans[0])
 	})
 }
 
diff --git a/internal/storage/v1/elasticsearch/spanstore/service_operation_test.go b/internal/storage/v1/elasticsearch/spanstore/service_operation_test.go
index bf789158..017707c1 100644
--- a/internal/storage/v1/elasticsearch/spanstore/service_operation_test.go
+++ b/internal/storage/v1/elasticsearch/spanstore/service_operation_test.go
@@ -44,7 +44,7 @@ func TestWriteService(t *testing.T) {
 		w.writer.writeService(indexName, jsonSpan)
 
 		indexService.AssertNumberOfCalls(t, "Add", 1)
-		assert.Equal(t, "", w.logBuffer.String())
+		assert.Empty(t, w.logBuffer.String())
 
 		// test that cache works, will call the index service only once.
 		w.writer.writeService(indexName, jsonSpan)
diff --git a/internal/storage/v1/elasticsearch/spanstore/to_domain_test.go b/internal/storage/v1/elasticsearch/spanstore/to_domain_test.go
index cfba0601..c920ad6e 100644
--- a/internal/storage/v1/elasticsearch/spanstore/to_domain_test.go
+++ b/internal/storage/v1/elasticsearch/spanstore/to_domain_test.go
@@ -290,7 +290,7 @@ func CompareModelSpans(t *testing.T, expected *model.Span, actual *model.Span) {
 	model.SortSpan(expected)
 	model.SortSpan(actual)
 
-	if !assert.EqualValues(t, expected, actual) {
+	if !assert.Equal(t, expected, actual) {
 		for _, err := range pretty.Diff(expected, actual) {
 			t.Log(err)
 		}
diff --git a/internal/storage/v1/elasticsearch/spanstore/writer_test.go b/internal/storage/v1/elasticsearch/spanstore/writer_test.go
index 0a32f1ba..e8f23b01 100644
--- a/internal/storage/v1/elasticsearch/spanstore/writer_test.go
+++ b/internal/storage/v1/elasticsearch/spanstore/writer_test.go
@@ -207,7 +207,7 @@ func TestSpanWriter_WriteSpan(t *testing.T) {
 					assert.Contains(t, w.logBuffer.String(), expectedLog, "Log must contain %s, but was %s", expectedLog, w.logBuffer.String())
 				}
 				if len(testCase.expectedLogs) == 0 {
-					assert.Equal(t, "", w.logBuffer.String())
+					assert.Empty(t, w.logBuffer.String())
 				}
 			})
 		})
@@ -324,7 +324,7 @@ func TestWriteSpanInternal(t *testing.T) {
 
 		w.writer.writeSpan(indexName, jsonSpan)
 		indexService.AssertNumberOfCalls(t, "Add", 1)
-		assert.Equal(t, "", w.logBuffer.String())
+		assert.Empty(t, w.logBuffer.String())
 	})
 }
 
diff --git a/internal/storage/v1/grpc/shared/grpc_handler_test.go b/internal/storage/v1/grpc/shared/grpc_handler_test.go
index 95db22e3..5bd4d3db 100644
--- a/internal/storage/v1/grpc/shared/grpc_handler_test.go
+++ b/internal/storage/v1/grpc/shared/grpc_handler_test.go
@@ -118,7 +118,7 @@ func TestGRPCServerGetOperations(t *testing.T) {
 			Service: "service-a",
 		})
 		require.NoError(t, err)
-		assert.Equal(t, len(expOperations), len(resp.Operations))
+		assert.Len(t, resp.Operations, len(expOperations))
 		for i, operation := range resp.Operations {
 			assert.Equal(t, expOperations[i].Name, operation.Name)
 			assert.Equal(t, expOperations[i].SpanKind, operation.SpanKind)
diff --git a/internal/storage/v1/memory/memory_test.go b/internal/storage/v1/memory/memory_test.go
index a5dbc852..3a779033 100644
--- a/internal/storage/v1/memory/memory_test.go
+++ b/internal/storage/v1/memory/memory_test.go
@@ -239,7 +239,7 @@ func TestStoreGetServices(t *testing.T) {
 		serviceNames, err := store.GetServices(context.Background())
 		require.NoError(t, err)
 		assert.Len(t, serviceNames, 1)
-		assert.EqualValues(t, testingSpan.Process.ServiceName, serviceNames[0])
+		assert.Equal(t, testingSpan.Process.ServiceName, serviceNames[0])
 	})
 }
 
@@ -255,7 +255,7 @@ func TestStoreGetAllOperationsFound(t *testing.T) {
 		)
 		require.NoError(t, err)
 		assert.Len(t, operations, 3)
-		assert.EqualValues(t, childSpan1.OperationName, operations[0].Name)
+		assert.Equal(t, childSpan1.OperationName, operations[0].Name)
 	})
 }
 
@@ -351,7 +351,7 @@ func TestStoreFindTracesLimitGetsMostRecent(t *testing.T) {
 	require.NoError(t, err)
 	if assert.Len(t, gotTraces, len(expectedTraces)) {
 		for i := range gotTraces {
-			assert.EqualValues(t, expectedTraces[i].Spans[0].StartTime.Unix(), gotTraces[i].Spans[0].StartTime.Unix())
+			assert.Equal(t, expectedTraces[i].Spans[0].StartTime.Unix(), gotTraces[i].Spans[0].StartTime.Unix())
 		}
 	}
 }
diff --git a/internal/storage/v2/elasticsearch/tracestore/from_dbmodel_test.go b/internal/storage/v2/elasticsearch/tracestore/from_dbmodel_test.go
index 6d313989..eb3022b7 100644
--- a/internal/storage/v2/elasticsearch/tracestore/from_dbmodel_test.go
+++ b/internal/storage/v2/elasticsearch/tracestore/from_dbmodel_test.go
@@ -410,7 +410,7 @@ func TestFromDBModel(t *testing.T) {
 		t.Run(test.name, func(t *testing.T) {
 			td, err := FromDBModel(test.jb)
 			require.NoError(t, err)
-			assert.EqualValues(t, test.td, td)
+			assert.Equal(t, test.td, td)
 		})
 	}
 }
@@ -519,11 +519,11 @@ func TestFromDBModelForTracesWithTwoLibraries(t *testing.T) {
 	ils0 := actual.ResourceSpans().At(0).ScopeSpans().At(0)
 	ils1 := actual.ResourceSpans().At(1).ScopeSpans().At(0)
 	if ils0.Scope().Name() == "library1" {
-		assert.EqualValues(t, library1Span, ils0)
-		assert.EqualValues(t, library2Span, ils1)
+		assert.Equal(t, library1Span, ils0)
+		assert.Equal(t, library2Span, ils1)
 	} else {
-		assert.EqualValues(t, library1Span, ils1)
-		assert.EqualValues(t, library2Span, ils0)
+		assert.Equal(t, library1Span, ils1)
+		assert.Equal(t, library2Span, ils0)
 	}
 }
 
@@ -622,7 +622,7 @@ func TestSetInternalSpanStatus(t *testing.T) {
 			attrs := pcommon.NewMap()
 			require.NoError(t, attrs.FromRaw(test.attrs))
 			setSpanStatus(attrs, span)
-			assert.EqualValues(t, test.status, status)
+			assert.Equal(t, test.status, status)
 			assert.Equal(t, test.attrsModifiedLen, attrs.Len())
 		})
 	}
diff --git a/internal/storage/v2/elasticsearch/tracestore/to_dbmodel_test.go b/internal/storage/v2/elasticsearch/tracestore/to_dbmodel_test.go
index 84482f10..8b230856 100644
--- a/internal/storage/v2/elasticsearch/tracestore/to_dbmodel_test.go
+++ b/internal/storage/v2/elasticsearch/tracestore/to_dbmodel_test.go
@@ -50,7 +50,7 @@ func TestGetTagFromStatusCode(t *testing.T) {
 		t.Run(test.name, func(t *testing.T) {
 			got, ok := getTagFromStatusCode(test.code)
 			assert.True(t, ok)
-			assert.EqualValues(t, test.tag, got)
+			assert.Equal(t, test.tag, got)
 		})
 	}
 }
@@ -84,7 +84,7 @@ func TestGetTagFromStatusMsg(t *testing.T) {
 
 	got, ok := getTagFromStatusMsg("test-error")
 	assert.True(t, ok)
-	assert.EqualValues(t, dbmodel.KeyValue{
+	assert.Equal(t, dbmodel.KeyValue{
 		Key:   conventions.OtelStatusDescription,
 		Value: "test-error",
 		Type:  dbmodel.StringType,
@@ -198,7 +198,7 @@ func TestGetTagFromSpanKind(t *testing.T) {
 		t.Run(test.name, func(t *testing.T) {
 			got, ok := getTagFromSpanKind(test.kind)
 			assert.Equal(t, test.ok, ok)
-			assert.EqualValues(t, test.tag, got)
+			assert.Equal(t, test.tag, got)
 		})
 	}
 }
@@ -246,7 +246,7 @@ func TestAttributesToDbSpanTags(t *testing.T) {
 	}
 
 	got := appendTagsFromAttributes(make([]dbmodel.KeyValue, 0, len(expected)), attributes)
-	require.EqualValues(t, expected, got)
+	require.Equal(t, expected, got)
 }
 
 func TestAttributesToDbSpanTags_MapType(t *testing.T) {
@@ -260,7 +260,7 @@ func TestAttributesToDbSpanTags_MapType(t *testing.T) {
 			Value: "{}",
 		},
 	}
-	require.EqualValues(t, expected, got)
+	require.Equal(t, expected, got)
 }
 
 func TestToDBModel(t *testing.T) {
@@ -330,7 +330,7 @@ func TestToDBModel(t *testing.T) {
 				assert.Empty(t, jbs)
 			} else {
 				require.Len(t, jbs, len(test.db))
-				assert.EqualValues(t, test.db, jbs)
+				assert.Equal(t, test.db, jbs)
 			}
 		})
 	}
diff --git a/internal/storage/v2/v1adapter/translator_test.go b/internal/storage/v2/v1adapter/translator_test.go
index 2f9c354c..f9665401 100644
--- a/internal/storage/v2/v1adapter/translator_test.go
+++ b/internal/storage/v2/v1adapter/translator_test.go
@@ -237,14 +237,14 @@ func TestV1TracesFromSeq2(t *testing.T) {
 		t.Run(tc.name, func(t *testing.T) {
 			actualTraces, err := V1TracesFromSeq2(tc.seqTrace)
 			require.Equal(t, tc.expectedErr, err)
-			require.Equal(t, len(tc.expectedModelTraces), len(actualTraces))
+			require.Len(t, actualTraces, len(tc.expectedModelTraces))
 			if len(tc.expectedModelTraces) < 1 {
 				return
 			}
 			for i, etrace := range tc.expectedModelTraces {
 				eSpans := etrace.Spans
 				aSpans := actualTraces[i].Spans
-				require.Equal(t, len(eSpans), len(aSpans))
+				require.Len(t, aSpans, len(eSpans))
 				for j, espan := range eSpans {
 					assert.Equal(t, espan.TraceID, aSpans[j].TraceID)
 					assert.Equal(t, espan.OperationName, aSpans[j].OperationName)
diff --git a/internal/tenancy/context_test.go b/internal/tenancy/context_test.go
index 6708c1fe..fe4bfba1 100644
--- a/internal/tenancy/context_test.go
+++ b/internal/tenancy/context_test.go
@@ -28,11 +28,11 @@ func TestContextPreserved(t *testing.T) {
 
 func TestNoTenant(t *testing.T) {
 	// If no tenant in context, GetTenant should return the empty string
-	assert.Equal(t, "", GetTenant(context.Background()))
+	assert.Empty(t, GetTenant(context.Background()))
 }
 
 func TestImpossibleTenantType(t *testing.T) {
 	// If the tenant is not a string, GetTenant should return the empty string
 	ctxWithIntTenant := context.WithValue(context.Background(), tenantKey, -1)
-	assert.Equal(t, "", GetTenant(ctxWithIntTenant))
+	assert.Empty(t, GetTenant(ctxWithIntTenant))
 }
diff --git a/internal/tenancy/http_test.go b/internal/tenancy/http_test.go
index 54a51a28..ca388162 100644
--- a/internal/tenancy/http_test.go
+++ b/internal/tenancy/http_test.go
@@ -102,7 +102,7 @@ func TestMetadataAnnotator(t *testing.T) {
 			require.NoError(t, err)
 			annotator := test.tenancyMgr.MetadataAnnotator()
 			md := annotator(context.Background(), req)
-			assert.Equal(t, len(test.requestHeaders), len(md))
+			assert.Len(t, md, len(test.requestHeaders))
 		})
 	}
 }
diff --git a/ports/ports_test.go b/ports/ports_test.go
index 0adbd5bb..0c40b8b5 100644
--- a/ports/ports_test.go
+++ b/ports/ports_test.go
@@ -18,7 +18,7 @@ func TestPortToHostPort(t *testing.T) {
 func TestFormatHostPort(t *testing.T) {
 	assert.Equal(t, ":42", FormatHostPort("42"))
 	assert.Equal(t, ":831", FormatHostPort(":831"))
-	assert.Equal(t, "", FormatHostPort(""))
+	assert.Empty(t, FormatHostPort(""))
 	assert.Equal(t, "localhost:42", FormatHostPort("localhost:42"))
 }