diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml
index 85f8eb0484..554f872261 100644
--- a/.github/workflows/presubmit.yml
+++ b/.github/workflows/presubmit.yml
@@ -43,7 +43,7 @@ jobs:
- name: golangci-lint
uses: golangci/golangci-lint-action@v7
with:
- version: v2.0.2
+ version: v2.6.2
skip-cache: true
args: --timeout=5m --verbose
validate:
diff --git a/.golangci.yml b/.golangci.yml
index b63e33e9de..9a7c4d2710 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -44,6 +44,7 @@ linters:
- nilnil
- nlreturn
- noctx
+ - noinlineerr
# TODO(bwplotka): Remove once https://github.com/golangci/golangci-lint/issues/3228 is fixed.
- nolintlint
- nonamedreturns
@@ -61,7 +62,36 @@ linters:
- wastedassign
- wrapcheck
- wsl
+ - wsl_v5
settings:
+ errcheck:
+ # Report about not checking of errors in type assertions: `a := b.(MyStruct)`.
+ # Such cases aren't reported by default.
+ # Default: false
+ check-type-assertions: false
+ # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`.
+ # Such cases aren't reported by default.
+ # Default: false
+ check-blank: false
+ # To disable the errcheck built-in exclude list.
+ # See `-excludeonly` option in https://github.com/kisielk/errcheck#excluding-functions for details.
+ # Default: false
+ disable-default-exclusions: false
+ # List of functions to exclude from checking, where each entry is a single function to exclude.
+ # See https://github.com/kisielk/errcheck#excluding-functions for details.
+ exclude-functions:
+ - fmt.Fprint
+ - fmt.Fprintf
+ - fmt.Fprintln
+ - fmt.Print
+ - fmt.Printf
+ - fmt.Println
+ - io/ioutil.ReadFile
+ - io.Copy(*bytes.Buffer)
+ - io.Copy(os.Stdout)
+ # Display function signature instead of selector.
+ # Default: false
+ verbose: true
importas:
alias:
- pkg: k8s.io/api/apps/v1
@@ -167,11 +197,17 @@ linters:
severity: warning
disabled: true
- name: unhandled-error
- arguments:
- - fmt.Printf
- - myFunction
severity: warning
- disabled: true
+ disabled: false
+ exclude: [""]
+ arguments:
+ - "fmt.Fprint"
+ - "fmt.Fprintf"
+ - "fmt.Fprintln"
+ - "fmt.Print"
+ - "fmt.Printf"
+ - "fmt.Println"
+ - "strings.Builder.WriteByte"
- name: unused-receiver
arguments:
- allowRegex: ^_
diff --git a/cmd/datasource-syncer/main.go b/cmd/datasource-syncer/main.go
index 3cb7ac2803..1f25346e85 100644
--- a/cmd/datasource-syncer/main.go
+++ b/cmd/datasource-syncer/main.go
@@ -135,8 +135,7 @@ func main() {
dsSuccessfullyUpdated := []string{}
dsErrors := []string{}
- datasourceUIDs := strings.Split(*datasourceUIDList, ",")
- for _, datasourceUID := range datasourceUIDs {
+ for datasourceUID := range strings.SplitSeq(*datasourceUIDList, ",") {
datasourceUID = strings.TrimSpace(datasourceUID)
if datasourceUID == "" {
continue
@@ -290,7 +289,7 @@ func buildUpdateDataSourceRequest(dataSource grafana.DataSource, token string) (
}
authHeaderValue := fmt.Sprintf("%s%d", httpHeaderValue, x)
if dataSource.SecureJSONData == nil {
- dataSource.SecureJSONData = map[string]interface{}{}
+ dataSource.SecureJSONData = map[string]any{}
}
// Add token to SecureJSONData e.g. httpHeaderValue1: Bearer 123.
dataSource.SecureJSONData[authHeaderValue] = fmt.Sprintf("Bearer %s", token)
diff --git a/cmd/datasource-syncer/main_test.go b/cmd/datasource-syncer/main_test.go
index e11b55e787..e9d25bbac8 100644
--- a/cmd/datasource-syncer/main_test.go
+++ b/cmd/datasource-syncer/main_test.go
@@ -36,12 +36,12 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
name: "OK",
input: grafana.DataSource{
Type: "prometheus",
- JSONData: map[string]interface{}{},
+ JSONData: map[string]any{},
},
want: grafana.DataSource{
URL: "https://monitoring.googleapis.com/v1/projects/test/location/global/prometheus/",
Type: "prometheus",
- JSONData: map[string]interface{}{
+ JSONData: map[string]any{
"httpHeaderName1": "Authorization",
"httpMethod": "GET",
"prometheusType": "Prometheus",
@@ -49,7 +49,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
"queryTimeout": "2m",
"timeout": "120",
},
- SecureJSONData: map[string]interface{}{
+ SecureJSONData: map[string]any{
"httpHeaderValue1": "Bearer 12345",
},
},
@@ -59,7 +59,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
input: grafana.DataSource{
URL: "http://localhost:9090",
Type: "prometheus",
- JSONData: map[string]interface{}{
+ JSONData: map[string]any{
"httpHeaderName1": "X-Custom-Header",
"httpHeaderName2": "X-Custom-Header2",
},
@@ -67,7 +67,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
want: grafana.DataSource{
URL: "https://monitoring.googleapis.com/v1/projects/test/location/global/prometheus/",
Type: "prometheus",
- JSONData: map[string]interface{}{
+ JSONData: map[string]any{
"httpHeaderName1": "X-Custom-Header",
"httpHeaderName2": "X-Custom-Header2",
"httpHeaderName3": "Authorization",
@@ -77,7 +77,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
"queryTimeout": "2m",
"timeout": "120",
},
- SecureJSONData: map[string]interface{}{
+ SecureJSONData: map[string]any{
"httpHeaderValue3": "Bearer 12345",
},
},
@@ -87,7 +87,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
input: grafana.DataSource{
URL: "http://localhost:9090",
Type: "prometheus",
- JSONData: map[string]interface{}{
+ JSONData: map[string]any{
"httpHeaderName1": "X-Custom-Header",
"httpHeaderName2": "Authorization",
"httpHeaderName3": "X-Custom-Header3",
@@ -99,7 +99,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
want: grafana.DataSource{
URL: "https://monitoring.googleapis.com/v1/projects/test/location/global/prometheus/",
Type: "prometheus",
- JSONData: map[string]interface{}{
+ JSONData: map[string]any{
"httpHeaderName1": "X-Custom-Header",
"httpHeaderName2": "Authorization",
"httpHeaderName3": "X-Custom-Header3",
@@ -109,7 +109,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
"queryTimeout": "2m",
"timeout": "120",
},
- SecureJSONData: map[string]interface{}{
+ SecureJSONData: map[string]any{
"httpHeaderValue2": "Bearer 12345",
},
},
@@ -119,7 +119,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
input: grafana.DataSource{
Type: "prometheus",
URL: "http://localhost:9090",
- JSONData: map[string]interface{}{
+ JSONData: map[string]any{
"httpHeaderName1": "X-Custom-Header",
"httpHeaderName2": "X-Custom-Header2",
"httpHeaderName3": "Authorization",
@@ -131,7 +131,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
want: grafana.DataSource{
URL: "https://monitoring.googleapis.com/v1/projects/test/location/global/prometheus/",
Type: "prometheus",
- JSONData: map[string]interface{}{
+ JSONData: map[string]any{
"httpHeaderName1": "X-Custom-Header",
"httpHeaderName2": "X-Custom-Header2",
"httpHeaderName3": "Authorization",
@@ -141,7 +141,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
"queryTimeout": "2m",
"timeout": "120",
},
- SecureJSONData: map[string]interface{}{
+ SecureJSONData: map[string]any{
"httpHeaderValue3": "Bearer 12345",
},
},
@@ -151,7 +151,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
input: grafana.DataSource{
Type: "prometheus",
URL: "http://localhost:9090",
- JSONData: map[string]interface{}{
+ JSONData: map[string]any{
"prometheusType": "Prometheus",
"prometheusVersion": "2.42.0",
"queryTimeout": "3m",
@@ -161,7 +161,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
want: grafana.DataSource{
URL: "https://monitoring.googleapis.com/v1/projects/test/location/global/prometheus/",
Type: "prometheus",
- JSONData: map[string]interface{}{
+ JSONData: map[string]any{
"httpHeaderName1": "Authorization",
"httpMethod": "GET",
"prometheusType": "Prometheus",
@@ -169,7 +169,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
"queryTimeout": "3m",
"timeout": "160",
},
- SecureJSONData: map[string]interface{}{
+ SecureJSONData: map[string]any{
"httpHeaderValue1": "Bearer 12345",
},
},
@@ -188,7 +188,7 @@ func TestBuildUpdateDataSourceRequest(t *testing.T) {
got, err := buildUpdateDataSourceRequest(tt.input, accessToken)
if tt.fail {
if err == nil {
- t.Fatalf("unexpectedly succeeded")
+ t.Fatal("unexpectedly succeeded")
}
return
}
diff --git a/cmd/frontend/main.go b/cmd/frontend/main.go
index 5ad83d9de2..5dbc53cac1 100644
--- a/cmd/frontend/main.go
+++ b/cmd/frontend/main.go
@@ -69,6 +69,7 @@ var (
targetURLStr = flag.String("query.target-url", fmt.Sprintf("https://monitoring.googleapis.com/v1/projects/%s/location/global/prometheus", projectIDVar),
fmt.Sprintf("The URL to forward authenticated requests to. (%s is replaced with the --query.project-id flag.)", projectIDVar))
+ //nolint:revive // Allow insecure http connection
ruleEndpointURLStrings = flag.String("rules.target-urls", "http://rule-evaluator.gmp-system.svc.cluster.local:19092", "Comma separated lists of URLs that support HTTP Prometheus Alert and Rules APIs (/api/v1/alerts, /api/v1/rules), e.g. GMP rule-evaluator. NOTE: Results are merged as-is, no sorting and deduplication is done.")
logLevel = flag.String("log.level", "info",
@@ -126,7 +127,7 @@ func main() {
}
var ruleEndpointURLs []url.URL
- for _, ruleEndpointURLStr := range strings.Split(*ruleEndpointURLStrings, ",") {
+ for ruleEndpointURLStr := range strings.SplitSeq(*ruleEndpointURLStrings, ",") {
ruleEndpointURL, err := url.Parse(strings.TrimSpace(ruleEndpointURLStr))
if err != nil || ruleEndpointURL == nil {
_ = level.Error(logger).Log("msg", "parsing rule endpoint URL failed", "err", err, "url", strings.TrimSpace(ruleEndpointURLStr))
@@ -187,11 +188,11 @@ func main() {
http.HandleFunc("/-/healthy", func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusOK)
- fmt.Fprintf(w, "Prometheus frontend is Healthy.\n")
+ fmt.Fprint(w, "Prometheus frontend is Healthy.\n")
})
http.HandleFunc("/-/ready", func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusOK)
- fmt.Fprintf(w, "Prometheus frontend is Ready.\n")
+ fmt.Fprint(w, "Prometheus frontend is Ready.\n")
})
http.Handle("/", authenticate(ui.Handler(externalURL)))
diff --git a/cmd/rule-evaluator/internal/api.go b/cmd/rule-evaluator/internal/api.go
index 85dc457d95..3f3a964b16 100644
--- a/cmd/rule-evaluator/internal/api.go
+++ b/cmd/rule-evaluator/internal/api.go
@@ -54,12 +54,12 @@ const (
// https://prometheus.io/docs/prometheus/latest/querying/api/#format-overview
// response is the prometheus-compatible response format.
type response struct {
- Status status `json:"status"`
- Data interface{} `json:"data,omitempty"`
- ErrorType errorType `json:"errorType,omitempty"`
- Error string `json:"error,omitempty"`
- Warnings []string `json:"warnings,omitempty"`
- Infos []string `json:"infos,omitempty"`
+ Status status `json:"status"`
+ Data any `json:"data,omitempty"`
+ ErrorType errorType `json:"errorType,omitempty"`
+ Error string `json:"error,omitempty"`
+ Warnings []string `json:"warnings,omitempty"`
+ Infos []string `json:"infos,omitempty"`
}
// RuleRetriever provides a list of active rules.
@@ -102,7 +102,7 @@ func (api *API) writeResponse(w http.ResponseWriter, httpResponseCode int, endpo
}
}
-func (api *API) writeSuccessResponse(w http.ResponseWriter, httpResponseCode int, endpointURI string, data interface{}) {
+func (api *API) writeSuccessResponse(w http.ResponseWriter, httpResponseCode int, endpointURI string, data any) {
api.writeResponse(w, httpResponseCode, endpointURI, response{
Status: statusSuccess,
Data: data,
diff --git a/cmd/rule-evaluator/internal/rules_test.go b/cmd/rule-evaluator/internal/rules_test.go
index 7cf5170ec2..12e80f389c 100644
--- a/cmd/rule-evaluator/internal/rules_test.go
+++ b/cmd/rule-evaluator/internal/rules_test.go
@@ -87,7 +87,6 @@ func TestAPI_HandleRulesEndpoint(t *testing.T) {
},
}
for _, tt := range tests {
- tt := tt //nolint:copyloopvar // parallel test
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
@@ -480,7 +479,6 @@ func TestAPI_groupToAPIGroup(t *testing.T) {
},
}
for _, tt := range tests {
- tt := tt //nolint:copyloopvar // parallel test
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
api := &API{logger: log.NewNopLogger()}
diff --git a/cmd/rule-evaluator/main.go b/cmd/rule-evaluator/main.go
index 71f0128bc9..a8ea0bc2a3 100644
--- a/cmd/rule-evaluator/main.go
+++ b/cmd/rule-evaluator/main.go
@@ -342,7 +342,7 @@ func main() {
})
http.HandleFunc("/-/ready", func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusOK)
- fmt.Fprintf(w, "rule-evaluator is Ready.\n")
+ fmt.Fprintln(w, "rule-evaluator is Ready.")
})
// https://prometheus.io/docs/prometheus/latest/querying/api/#runtime-information
// Useful for knowing whether a config reload was successful.
@@ -685,7 +685,7 @@ func (m *configMetrics) setFailure() {
// reloadConfig applies the configuration files.
func reloadConfig(filename string, logger log.Logger, metrics *configMetrics, rls ...reloader) (err error) {
start := time.Now()
- timings := []interface{}{}
+ timings := []any{}
_ = level.Info(logger).Log("msg", "Loading configuration file", "filename", filename)
content, err := os.ReadFile(filename)
@@ -713,7 +713,7 @@ func reloadConfig(filename string, logger log.Logger, metrics *configMetrics, rl
}
metrics.setSuccess()
- l := []interface{}{"msg", "Completed loading of configuration file", "filename", filename, "totalDuration", time.Since(start)}
+ l := []any{"msg", "Completed loading of configuration file", "filename", filename, "totalDuration", time.Since(start)}
_ = level.Info(logger).Log(append(l, timings...)...)
return nil
}
@@ -853,6 +853,7 @@ func (s *queryStorage) Querier(mint, maxt int64) (storage.Querier, error) {
type queryAccess struct {
// storage.LabelQuerier satisfies the interface. Calling related methods will result in panic.
storage.LabelQuerier
+
api v1.API
mint int64
maxt int64
diff --git a/doc/api.md b/doc/api.md
index d75d6467db..99710dbd06 100644
--- a/doc/api.md
+++ b/doc/api.md
@@ -449,6 +449,7 @@ Kubernetes meta/v1.ObjectMeta
+(Optional)
Refer to the Kubernetes API documentation for the fields of the
metadata field.
|
@@ -600,6 +601,7 @@ Kubernetes meta/v1.ObjectMeta
+(Optional)
Refer to the Kubernetes API documentation for the fields of the
metadata field.
|
@@ -689,6 +691,7 @@ ClusterTargetLabels
+(Optional)
Labels to add to the Prometheus target for discovered endpoints.
The instance label is always set to <pod_name>:<port> or <node_name>:<port>
if the scraped pod is controlled by a DaemonSet.
@@ -756,6 +759,7 @@ Kubernetes meta/v1.ObjectMeta
|
+(Optional)
Refer to the Kubernetes API documentation for the fields of the
metadata field.
|
@@ -881,6 +885,7 @@ ExportFilters
+(Optional)
Filter limits which metric data is sent to Cloud Monitoring (it doesn’t apply to additional exports).
|
@@ -937,6 +942,7 @@ CompressionType
(Appears in: CollectionSpec, ConfigSpec)
+
CompressionType is the compression type.
@@ -1531,6 +1538,21 @@ int64
+ProxyConfig
+
+
+ProxyConfig
+
+
+ |
+
+
+(Members of ProxyConfig are embedded into this type.)
+
+ |
+
+
+
clientID
string
@@ -1605,21 +1627,6 @@ TLS
TLS configures the token request’s TLS settings.
|
-
-
-ProxyConfig
-
-
-ProxyConfig
-
-
- |
-
-
-(Members of ProxyConfig are embedded into this type.)
-
- |
-
@@ -1647,6 +1654,7 @@ Kubernetes meta/v1.ObjectMeta
+(Optional)
Refer to the Kubernetes API documentation for the fields of the
metadata field.
|
@@ -1661,6 +1669,7 @@ RuleEvaluatorSpec
+(Optional)
Rules specifies how the operator configures and deploys rule-evaluator.
|
@@ -1674,6 +1683,7 @@ CollectionSpec
+(Optional)
Collection specifies how the operator configures collection, including
scraping and an integrated export to Google Cloud Monitoring.
|
@@ -1716,6 +1726,7 @@ OperatorFeatures
+(Optional)
Features holds configuration for optional managed-collection features.
|
@@ -1729,6 +1740,7 @@ ScalingSpec
+(Optional)
Scaling contains configuration options for scaling GMP.
|
@@ -1808,6 +1820,7 @@ TargetStatusSpec
+(Optional)
Configuration of target status reporting.
|
@@ -1821,6 +1834,7 @@ ConfigSpec
+(Optional)
Settings for the collector configuration propagation.
|
@@ -1948,6 +1962,7 @@ TargetLabels
+(Optional)
Labels to add to the Prometheus target for discovered endpoints.
The instance label is always set to <pod_name>:<port> or <node_name>:<port>
if the scraped pod is controlled by a DaemonSet.
@@ -2327,6 +2342,7 @@ AlertingSpec
|
+(Optional)
Alerting contains how the rule-evaluator configures alerting.
|
@@ -2435,6 +2451,7 @@ Kubernetes meta/v1.ObjectMeta
+(Optional)
Refer to the Kubernetes API documentation for the fields of the
metadata field.
|
@@ -2671,6 +2688,7 @@ VPASpec
+(Optional)
|
@@ -2695,6 +2713,22 @@ VPASpec
+HTTPClientConfig
+
+
+HTTPClientConfig
+
+
+ |
+
+
+(Members of HTTPClientConfig are embedded into this type.)
+
+Prometheus HTTP client configuration.
+ |
+
+
+
port
k8s.io/apimachinery/pkg/util/intstr.IntOrString
@@ -2778,22 +2812,6 @@ instance, top_level_controller, top_level_controller_type, or address
|
-
-
-HTTPClientConfig
-
-
-HTTPClientConfig
-
-
- |
-
-
-(Members of HTTPClientConfig are embedded into this type.)
-
-Prometheus HTTP client configuration.
- |
-
diff --git a/e2e/collector_test.go b/e2e/collector_test.go
index 7fb7c54b5a..8e1fda208d 100644
--- a/e2e/collector_test.go
+++ b/e2e/collector_test.go
@@ -329,7 +329,7 @@ func testEnsurePodMonitoringStatus(ctx context.Context, kubeClient client.Client
// Check status reflects discovered endpoints.
if len(pm.Status.EndpointStatuses) < 1 {
- t.Logf("no endpoint statuses yet")
+ t.Log("no endpoint statuses yet")
return false, nil
}
@@ -387,7 +387,7 @@ func testEnsureClusterPodMonitoringStatus(ctx context.Context, kubeClient client
// Check status reflects discovered endpoints.
if len(cpm.Status.EndpointStatuses) < 1 {
- t.Logf("no endpoint statuses yet")
+ t.Log("no endpoint statuses yet")
return false, nil
}
diff --git a/e2e/crd_validation_test.go b/e2e/crd_validation_test.go
index 754b9de988..ef7cd06913 100644
--- a/e2e/crd_validation_test.go
+++ b/e2e/crd_validation_test.go
@@ -118,7 +118,6 @@ func TestCRDDefaulting(t *testing.T) {
client.ObjectKeyFromObject(tc.obj),
tc.obj,
)
-
if err != nil {
t.Errorf("Unexpected error: %v", err)
}
@@ -146,7 +145,6 @@ func TestCRDDefaulting(t *testing.T) {
client.ObjectKeyFromObject(tc.obj),
tc.obj,
)
-
if err != nil {
t.Errorf("Unexpected error: %v", err)
}
@@ -352,10 +350,12 @@ func TestCRDValidation(t *testing.T) {
case err != nil && !tc.wantErr:
t.Errorf("Unexpected error: %v", err)
case err == nil && tc.wantErr:
- t.Errorf("Want error, but got none")
+ t.Error("Want error, but got none")
case err != nil && tc.wantErr:
t.Log(err)
// OK
+ default:
+ // Ok
}
})
}
diff --git a/e2e/deploy/deploy.go b/e2e/deploy/deploy.go
index d060bc7d6d..b6ba77f9e7 100644
--- a/e2e/deploy/deploy.go
+++ b/e2e/deploy/deploy.go
@@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+// Package deploy provides utilities for provisioning and configuring the Prometheus engine components and a synthetic
+// application within a Kubernetes cluster. These deployed resources serve as the test environment for end-to-end
+// tests, enabling validation of the Prometheus engine's functionality by interacting with its operator, collector,
+// and rule-evaluator, and by scraping metrics from the synthetic application.
package deploy
import (
@@ -219,6 +223,8 @@ func normalizeDeployments(opts *deployOptions, obj *appsv1.Deployment) (client.O
container.Args = append(container.Args, "--query.credentials-file="+opts.explicitCredentials)
break
}
+ default:
+ return nil, fmt.Errorf("unhandled deployment: %q", obj.GetName())
}
return obj, nil
}
diff --git a/e2e/kube/deployment.go b/e2e/kube/deployment.go
index 39bba29182..8584db524b 100644
--- a/e2e/kube/deployment.go
+++ b/e2e/kube/deployment.go
@@ -35,9 +35,9 @@ func DeploymentContainer(deployment *appsv1.Deployment, name string) (*corev1.Co
return nil, fmt.Errorf("unable to find container %q", name)
}
-// Copied from https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/deployment/util/deployment_util.go
// DeploymentComplete considers a deployment to be complete once all of its desired replicas
// are updated and available, and no old pods are running.
+// Copied from https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/deployment/util/deployment_util.go
func DeploymentComplete(deployment *appsv1.Deployment, newStatus *appsv1.DeploymentStatus) bool {
return newStatus.UpdatedReplicas == *(deployment.Spec.Replicas) &&
newStatus.Replicas == *(deployment.Spec.Replicas) &&
diff --git a/e2e/kube/network.go b/e2e/kube/network.go
index 6a5bbe8849..082d439763 100644
--- a/e2e/kube/network.go
+++ b/e2e/kube/network.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-// Package e2e contains tests that validate the behavior of gmp-operator against a cluster.
+// Package kube contains tests that validate the behavior of gmp-operator against a cluster.
// To make tests simple and fast, the test suite runs the operator internally. The CRDs
// are expected to be installed out of band (along with the operator deployment itself in
// a real world setup).
@@ -35,6 +35,7 @@ import (
// wrappedConn simply wraps a net.Conn with an additional close function.
type wrappedConn struct {
net.Conn
+
closeFn func()
}
diff --git a/e2e/main_test.go b/e2e/main_test.go
index 0007e709da..a44d582e54 100644
--- a/e2e/main_test.go
+++ b/e2e/main_test.go
@@ -81,7 +81,7 @@ func TestMain(m *testing.M) {
flag.Parse()
- os.Exit(m.Run())
+ m.Run()
}
func setupCluster(ctx context.Context, t testing.TB, dOpts ...deploy.DeployOption) (client.Client, *rest.Config, error) {
diff --git a/e2e/ruler_test.go b/e2e/ruler_test.go
index f72ddcab5e..f8c4e57cc1 100644
--- a/e2e/ruler_test.go
+++ b/e2e/ruler_test.go
@@ -691,7 +691,7 @@ func testValidateRuleEvaluationMetrics(ctx context.Context) func(*testing.T) {
})
series, err := iter.Next()
if errors.Is(err, iterator.Done) {
- t.Logf("no data in GCM, retrying...")
+ t.Log("no data in GCM, retrying...")
return false, nil
} else if err != nil {
return false, fmt.Errorf("querying metrics failed: %w", err)
@@ -839,8 +839,7 @@ func getRules(ctx context.Context, httpClient *http.Client, address string, port
}
func logsError(logs string) (string, error) {
- lines := strings.Split(logs, "\n")
- for _, line := range lines {
+ for line := range strings.SplitSeq(logs, "\n") {
if line == "" {
continue
}
diff --git a/e2e/webhook_test.go b/e2e/webhook_test.go
index c0324b4335..31725ce60a 100644
--- a/e2e/webhook_test.go
+++ b/e2e/webhook_test.go
@@ -70,7 +70,7 @@ func TestWebhooksNoRBAC(t *testing.T) {
return false, nil
}
- t.Logf("waiting for operator logs to contain RBAC message")
+ t.Log("waiting for operator logs to contain RBAC message")
return strings.Contains(logs, "delete legacy ValidatingWebHookConfiguration was not allowed"), nil
}); err != nil {
t.Fatalf("unable to check operator logs: %s", err)
diff --git a/examples/instrumentation/fs.go b/examples/instrumentation/fs.go
index f3612bef6c..96c9a3cb85 100644
--- a/examples/instrumentation/fs.go
+++ b/examples/instrumentation/fs.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-// Package e2e contains tests that validate the behavior of gmp-operator against a cluster.
+// Package instrumentation contains tests that validate the behavior of gmp-operator against a cluster.
// To make tests simple and fast, the test suite runs the operator internally. The CRDs
// are expected to be installed out of band (along with the operator deployment itself in
// a real world setup).
diff --git a/examples/instrumentation/go-synthetic/auth.go b/examples/instrumentation/go-synthetic/auth.go
index e20eb7dfe3..cb9bc68d1b 100644
--- a/examples/instrumentation/go-synthetic/auth.go
+++ b/examples/instrumentation/go-synthetic/auth.go
@@ -337,7 +337,7 @@ func (c *oauth2Config) validate() error {
}
func oauthTokenErrorResponse(code, description string) []byte {
- return []byte(fmt.Sprintf("{\n\t\"error\": %q,\n\t\"error_description\": %q\n}\n", code, description))
+ return fmt.Appendf(nil, "{\n\t\"error\": %q,\n\t\"error_description\": %q\n}", code, description)
}
func (c *oauth2Config) tokenHandler() http.Handler {
diff --git a/go.mod b/go.mod
index 80821300ca..aeedbbcb00 100644
--- a/go.mod
+++ b/go.mod
@@ -23,7 +23,7 @@ require (
github.com/prometheus/common v0.65.0
github.com/prometheus/common/assets v0.2.0
github.com/prometheus/prometheus v0.53.5-0.20250630093819-d344ea7bf4cc // v2.53.5.
- github.com/stretchr/testify v1.11.0
+ github.com/stretchr/testify v1.11.1
github.com/thanos-io/thanos v0.36.1
go.uber.org/zap v1.27.0
golang.org/x/mod v0.29.0
@@ -49,32 +49,38 @@ require (
4d63.com/gochecknoglobals v0.2.2 // indirect
cloud.google.com/go/auth v0.16.5 // indirect
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
- github.com/4meepo/tagalign v1.4.2 // indirect
- github.com/Abirdcfly/dupword v0.1.3 // 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
+ codeberg.org/chavacava/garif v0.2.0 // indirect
+ dev.gaijin.team/go/exhaustruct/v4 v4.0.0 // indirect
+ dev.gaijin.team/go/golib v0.6.0 // indirect
+ github.com/4meepo/tagalign v1.4.3 // indirect
+ github.com/Abirdcfly/dupword v0.1.7 // indirect
+ github.com/AdminBenni/iota-mixing v1.0.0 // indirect
+ github.com/AlwxSin/noinlineerr v1.0.5 // indirect
+ github.com/Antonboom/errname v1.1.1 // indirect
+ github.com/Antonboom/nilnil v1.1.1 // indirect
+ github.com/Antonboom/testifylint v1.6.4 // indirect
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.11.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 // 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.1 // indirect
+ github.com/Djarvur/go-err113 v0.1.1 // indirect
+ github.com/Masterminds/semver/v3 v3.4.0 // indirect
+ github.com/MirrexOne/unqueryvet v1.2.1 // indirect
github.com/OpenPeeDeeP/depguard/v2 v2.2.1 // indirect
github.com/a8m/envsubst v1.4.2 // indirect
+ github.com/alecthomas/chroma/v2 v2.20.0 // indirect
github.com/alecthomas/go-check-sumtype v0.3.1 // indirect
github.com/alecthomas/participle/v2 v2.1.1 // indirect
github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b // indirect
- github.com/alexkohler/nakedret/v2 v2.0.5 // indirect
+ github.com/alexkohler/nakedret/v2 v2.0.6 // indirect
github.com/alexkohler/prealloc v1.0.0 // indirect
+ github.com/alfatraining/structtag v1.0.0 // indirect
github.com/alingse/asasalint v0.0.11 // indirect
- github.com/alingse/nilnesserr v0.1.2 // indirect
+ github.com/alingse/nilnesserr v0.2.0 // indirect
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
- github.com/ashanbrown/forbidigo v1.6.0 // indirect
- github.com/ashanbrown/makezero v1.2.0 // indirect
+ github.com/ashanbrown/forbidigo/v2 v2.3.0 // indirect
+ github.com/ashanbrown/makezero/v2 v2.1.0 // indirect
github.com/aws/aws-sdk-go v1.55.8 // indirect
github.com/aws/aws-sdk-go-v2 v1.38.1 // indirect
github.com/aws/aws-sdk-go-v2/config v1.31.2 // indirect
@@ -95,30 +101,31 @@ require (
github.com/bkielbasa/cyclop v1.2.3 // indirect
github.com/blizzy78/varnamelen v0.8.0 // indirect
github.com/bmatcuk/doublestar/v4 v4.0.2 // indirect
- github.com/bombsimon/wsl/v4 v4.6.0 // indirect
+ github.com/bombsimon/wsl/v4 v4.7.0 // indirect
+ github.com/bombsimon/wsl/v5 v5.3.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/ireturn v0.4.0 // indirect
github.com/butuzov/mirror v1.3.0 // indirect
- github.com/catenacyber/perfsprint v0.9.1 // indirect
- github.com/ccojocar/zxcvbn-go v1.0.2 // indirect
+ github.com/catenacyber/perfsprint v0.10.0 // indirect
+ github.com/ccojocar/zxcvbn-go v1.0.4 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
- github.com/charithe/durationcheck v0.0.10 // indirect
+ github.com/charithe/durationcheck v0.0.11 // 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/ckaznocha/intrange v0.3.1 // indirect
github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect
github.com/curioswitch/go-reassign v0.3.0 // indirect
- github.com/daixiang0/gci v0.13.6 // indirect
+ github.com/daixiang0/gci v0.13.7 // 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/dennwc/varint v1.0.0 // indirect
github.com/dimchansky/utfbom v1.1.1 // indirect
+ github.com/dlclark/regexp2 v1.11.5 // indirect
github.com/docker/cli v27.5.0+incompatible // indirect
github.com/docker/distribution v2.8.3+incompatible // indirect
github.com/docker/docker-credential-helpers v0.8.2 // indirect
@@ -132,11 +139,11 @@ require (
github.com/fatih/color v1.18.0 // indirect
github.com/fatih/structtag v1.2.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
- github.com/firefart/nonamedreturns v1.0.5 // indirect
+ github.com/firefart/nonamedreturns v1.0.6 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/fzipp/gocyclo v0.6.0 // indirect
- github.com/ghostiam/protogetter v0.3.12 // indirect
- github.com/go-critic/go-critic v0.13.0 // indirect
+ github.com/ghostiam/protogetter v0.3.17 // indirect
+ github.com/go-critic/go-critic v0.14.2 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-logr/zapr v1.3.0 // indirect
@@ -161,20 +168,23 @@ require (
github.com/gobwas/glob v0.2.3 // indirect
github.com/goccy/go-json v0.10.5 // indirect
github.com/goccy/go-yaml v1.13.3 // indirect
- github.com/gofrs/flock v0.12.1 // indirect
+ github.com/godoc-lint/godoc-lint v0.10.1 // indirect
+ github.com/gofrs/flock v0.13.0 // indirect
github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v1.0.0 // indirect
+ github.com/golangci/asciicheck v0.5.0 // indirect
github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 // indirect
- github.com/golangci/go-printf-func-name v0.1.0 // indirect
+ github.com/golangci/go-printf-func-name v0.1.1 // indirect
github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d // indirect
- github.com/golangci/golangci-lint/v2 v2.0.2 // indirect
+ github.com/golangci/golangci-lint/v2 v2.6.2 // 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/misspell v0.7.0 // indirect
+ github.com/golangci/plugin-module-register v0.1.2 // indirect
github.com/golangci/revgrep v0.8.0 // indirect
- github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed // indirect
+ github.com/golangci/swaggoswag v0.0.0-20250504205917-77f2aca3143e // indirect
+ github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e // indirect
github.com/google/addlicense v1.1.1 // indirect
github.com/google/gnostic-models v0.7.0 // indirect
github.com/google/go-containerregistry v0.20.3 // indirect
@@ -182,12 +192,12 @@ require (
github.com/google/s2a-go v0.1.9 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect
- github.com/gordonklaus/ineffassign v0.1.0 // indirect
+ github.com/gordonklaus/ineffassign v0.2.0 // indirect
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect
github.com/gostaticanalysis/analysisutil v0.7.1 // indirect
github.com/gostaticanalysis/comment v1.5.0 // indirect
github.com/gostaticanalysis/forcetypeassert v0.2.0 // indirect
- github.com/gostaticanalysis/nilerr v0.1.1 // indirect
+ github.com/gostaticanalysis/nilerr v0.1.2 // indirect
github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect
github.com/hashicorp/go-immutable-radix/v2 v2.1.0 // indirect
github.com/hashicorp/go-version v1.7.0 // indirect
@@ -196,42 +206,44 @@ require (
github.com/hexops/gotextdiff v1.0.3 // indirect
github.com/imdario/mergo v0.3.6 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/jgautheron/goconst v1.7.1 // indirect
+ github.com/jgautheron/goconst v1.8.2 // indirect
github.com/jingyugao/rowserrcheck v1.1.1 // indirect
github.com/jinzhu/copier v0.4.0 // indirect
- github.com/jjti/go-spancheck v0.6.4 // indirect
+ github.com/jjti/go-spancheck v0.6.5 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/jpillora/backoff v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/julienschmidt/httprouter v1.3.0 // indirect
github.com/julz/importas v0.2.0 // indirect
- github.com/karamaru-alpha/copyloopvar v1.2.1 // indirect
+ github.com/karamaru-alpha/copyloopvar v1.2.2 // indirect
github.com/kisielk/errcheck v1.9.0 // indirect
github.com/kkHAIKE/contextcheck v1.1.6 // indirect
github.com/klauspost/compress v1.18.0 // indirect
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
- github.com/kulti/thelper v0.6.3 // indirect
- github.com/kunwardeep/paralleltest v1.0.10 // indirect
+ github.com/kulti/thelper v0.7.1 // indirect
+ github.com/kunwardeep/paralleltest v1.0.15 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/lasiar/canonicalheader v1.1.2 // indirect
- github.com/ldez/exptostd v0.4.2 // indirect
- github.com/ldez/gomoddirectives v0.6.1 // indirect
- github.com/ldez/grignotin v0.9.0 // indirect
- github.com/ldez/tagliatelle v0.7.1 // indirect
- github.com/ldez/usetesting v0.4.2 // indirect
+ github.com/ldez/exptostd v0.4.5 // indirect
+ github.com/ldez/gomoddirectives v0.7.1 // indirect
+ github.com/ldez/grignotin v0.10.1 // indirect
+ github.com/ldez/tagliatelle v0.7.2 // indirect
+ github.com/ldez/usetesting v0.5.0 // indirect
github.com/leonklingele/grouper v1.1.2 // 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/mailru/easyjson v0.9.0 // indirect
- github.com/maratori/testableexamples v1.0.0 // indirect
- github.com/maratori/testpackage v1.1.1 // indirect
+ github.com/manuelarte/embeddedstructfieldcheck v0.4.0 // indirect
+ github.com/manuelarte/funcorder v0.5.0 // indirect
+ github.com/maratori/testableexamples v1.0.1 // indirect
+ github.com/maratori/testpackage v1.1.2 // indirect
github.com/matoous/godox v1.1.0 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
- github.com/mgechev/revive v1.7.0 // indirect
+ github.com/mgechev/revive v1.12.0 // indirect
github.com/mikefarah/yq/v4 v4.45.1 // indirect
github.com/minio/sha256-simd v1.0.1 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
@@ -248,21 +260,20 @@ require (
github.com/nakabonne/nestif v0.3.1 // indirect
github.com/nishanths/exhaustive v0.12.0 // indirect
github.com/nishanths/predeclared v0.2.2 // indirect
- github.com/nunnatsa/ginkgolinter v0.19.1 // indirect
- github.com/olekukonko/tablewriter v0.0.5 // indirect
+ github.com/nunnatsa/ginkgolinter v0.21.2 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.0 // indirect
github.com/pelletier/go-toml v1.9.5 // indirect
- github.com/pelletier/go-toml/v2 v2.2.3 // indirect
+ github.com/pelletier/go-toml/v2 v2.2.4 // indirect
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
- github.com/polyfloyd/go-errorlint v1.7.1 // indirect
+ github.com/polyfloyd/go-errorlint v1.8.0 // indirect
github.com/prometheus/common/sigv4 v0.1.0 // indirect
github.com/prometheus/procfs v0.17.0 // indirect
github.com/prometheus/sigv4 v0.2.1 // indirect
- github.com/quasilyte/go-ruleguard v0.4.4 // indirect
- github.com/quasilyte/go-ruleguard/dsl v0.3.22 // indirect
+ github.com/quasilyte/go-ruleguard v0.4.5 // indirect
+ github.com/quasilyte/go-ruleguard/dsl v0.3.23 // indirect
github.com/quasilyte/gogrep v0.5.0 // indirect
github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect
github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect
@@ -272,34 +283,33 @@ require (
github.com/ryancurrah/gomodguard v1.4.1 // indirect
github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect
github.com/sanposhiho/wastedassign/v2 v2.1.0 // indirect
- github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 // indirect
+ github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect
github.com/sashamelentyev/interfacebloat v1.1.0 // indirect
- github.com/sashamelentyev/usestdlibvars v1.28.0 // indirect
- github.com/securego/gosec/v2 v2.22.2 // indirect
+ github.com/sashamelentyev/usestdlibvars v1.29.0 // indirect
+ github.com/securego/gosec/v2 v2.22.10 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/sivchari/containedctx v1.0.3 // indirect
- github.com/sonatard/noctx v0.1.0 // indirect
+ github.com/sonatard/noctx v0.4.0 // indirect
github.com/sourcegraph/go-diff v0.7.0 // indirect
- github.com/spf13/afero v1.12.0 // indirect
+ github.com/spf13/afero v1.14.0 // indirect
github.com/spf13/cast v1.5.0 // indirect
- github.com/spf13/cobra v1.9.1 // indirect
+ github.com/spf13/cobra v1.10.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
- github.com/spf13/pflag v1.0.7 // indirect
+ github.com/spf13/pflag v1.0.10 // indirect
github.com/spf13/viper v1.12.0 // indirect
github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect
github.com/stbenjam/no-sprintf-host-port v0.2.0 // indirect
github.com/stretchr/objx v0.5.2 // indirect
github.com/subosito/gotenv v1.4.1 // indirect
- github.com/tdakkota/asciicheck v0.4.1 // indirect
- github.com/tetafro/godot v1.5.0 // indirect
+ github.com/tetafro/godot v1.5.4 // 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/timonwong/loggercheck v0.11.0 // indirect
+ github.com/tomarrell/wrapcheck/v2 v2.11.0 // indirect
github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect
github.com/ultraware/funlen v0.2.0 // indirect
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/uudashr/iface v1.4.1 // indirect
github.com/vbatts/tar-split v0.11.6 // indirect
github.com/xen0n/gosmopolitan v1.3.0 // indirect
github.com/xhit/go-str2duration/v2 v2.1.0 // indirect
@@ -309,8 +319,10 @@ require (
github.com/ykadowak/zerologlint v0.1.5 // indirect
github.com/yuin/gopher-lua v1.1.1 // indirect
gitlab.com/bosi/decorder v0.4.2 // indirect
- go-simpler.org/musttag v0.13.0 // indirect
- go-simpler.org/sloglint v0.9.0 // indirect
+ go-simpler.org/musttag v0.14.0 // indirect
+ go-simpler.org/sloglint v0.11.1 // indirect
+ go.augendre.info/arangolint v0.3.1 // indirect
+ go.augendre.info/fatcontext v0.9.0 // indirect
go.mongodb.org/mongo-driver v1.17.4 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/collector/featuregate v1.39.0 // indirect
@@ -329,7 +341,7 @@ require (
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/crypto v0.45.0 // indirect
golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b // indirect
- golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac // indirect
+ golang.org/x/exp/typeparams v0.0.0-20251023183803-a4bb9ffd2546 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/sync v0.18.0 // indirect
golang.org/x/sys v0.38.0 // indirect
@@ -347,8 +359,8 @@ require (
k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.0.0-20250701173324-9bd5c66d9911 // indirect
- mvdan.cc/gofumpt v0.7.0 // indirect
- mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4 // indirect
+ mvdan.cc/gofumpt v0.9.2 // indirect
+ mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15 // indirect
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect
diff --git a/go.sum b/go.sum
index 07eb745fa9..09d178e3de 100644
--- a/go.sum
+++ b/go.sum
@@ -11,16 +11,26 @@ cloud.google.com/go/compute/metadata v0.8.0 h1:HxMRIbao8w17ZX6wBnjhcDkW6lTFpgcao
cloud.google.com/go/compute/metadata v0.8.0/go.mod h1:sYOGTp851OV9bOFJ9CH7elVvyzopvWQFNNghtDQ/Biw=
cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM=
cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U=
-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.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=
+codeberg.org/chavacava/garif v0.2.0 h1:F0tVjhYbuOCnvNcU3YSpO6b3Waw6Bimy4K0mM8y6MfY=
+codeberg.org/chavacava/garif v0.2.0/go.mod h1:P2BPbVbT4QcvLZrORc2T29szK3xEOlnl0GiPTJmEqBQ=
+dev.gaijin.team/go/exhaustruct/v4 v4.0.0 h1:873r7aNneqoBB3IaFIzhvt2RFYTuHgmMjoKfwODoI1Y=
+dev.gaijin.team/go/exhaustruct/v4 v4.0.0/go.mod h1:aZ/k2o4Y05aMJtiux15x8iXaumE88YdiB0Ai4fXOzPI=
+dev.gaijin.team/go/golib v0.6.0 h1:v6nnznFTs4bppib/NyU1PQxobwDHwCXXl15P7DV5Zgo=
+dev.gaijin.team/go/golib v0.6.0/go.mod h1:uY1mShx8Z/aNHWDyAkZTkX+uCi5PdX7KsG1eDQa2AVE=
+github.com/4meepo/tagalign v1.4.3 h1:Bnu7jGWwbfpAie2vyl63Zup5KuRv21olsPIha53BJr8=
+github.com/4meepo/tagalign v1.4.3/go.mod h1:00WwRjiuSbrRJnSVeGWPLp2epS5Q/l4UEy0apLLS37c=
+github.com/Abirdcfly/dupword v0.1.7 h1:2j8sInznrje4I0CMisSL6ipEBkeJUJAmK1/lfoNGWrQ=
+github.com/Abirdcfly/dupword v0.1.7/go.mod h1:K0DkBeOebJ4VyOICFdppB23Q0YMOgVafM0zYW0n9lF4=
+github.com/AdminBenni/iota-mixing v1.0.0 h1:Os6lpjG2dp/AE5fYBPAA1zfa2qMdCAWwPMCgpwKq7wo=
+github.com/AdminBenni/iota-mixing v1.0.0/go.mod h1:i4+tpAaB+qMVIV9OK3m4/DAynOd5bQFaOu+2AhtBCNY=
+github.com/AlwxSin/noinlineerr v1.0.5 h1:RUjt63wk1AYWTXtVXbSqemlbVTb23JOSRiNsshj7TbY=
+github.com/AlwxSin/noinlineerr v1.0.5/go.mod h1:+QgkkoYrMH7RHvcdxdlI7vYYEdgeoFOVjU9sUhw/rQc=
+github.com/Antonboom/errname v1.1.1 h1:bllB7mlIbTVzO9jmSWVWLjxTEbGBVQ1Ff/ClQgtPw9Q=
+github.com/Antonboom/errname v1.1.1/go.mod h1:gjhe24xoxXp0ScLtHzjiXp0Exi1RFLKJb0bVBtWKCWQ=
+github.com/Antonboom/nilnil v1.1.1 h1:9Mdr6BYd8WHCDngQnNVV0b554xyisFioEKi30sksufQ=
+github.com/Antonboom/nilnil v1.1.1/go.mod h1:yCyAmSw3doopbOWhJlVci+HuyNRuHJKIv6V2oYQa8II=
+github.com/Antonboom/testifylint v1.6.4 h1:gs9fUEy+egzxkEbq9P4cpcMB6/G0DYdMeiFS87UiqmQ=
+github.com/Antonboom/testifylint v1.6.4/go.mod h1:YO33FROXX2OoUfwjz8g+gUxQXio5i9qpVy7nXGbxDD4=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.0 h1:ci6Yd6nysBRLEodoziB6ah1+YOzZbZk+NYneoA6q+6E=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.0/go.mod h1:QyVsSSN64v5TGltphKLQ2sQxe4OBQg0J1eKRcVBnfgE=
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.11.0 h1:MhRfI58HblXzCtWEZCO0feHs8LweePB3s90r7WaR1KU=
@@ -41,53 +51,55 @@ 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/Code-Hex/go-generics-cache v1.5.1 h1:6vhZGc5M7Y/YD8cIUcY8kcuQLB4cHR7U+0KMqAA0KcU=
github.com/Code-Hex/go-generics-cache v1.5.1/go.mod h1:qxcC9kRVrct9rHeiYpFWSoW1vxyillCVzX13KZG8dl4=
-github.com/Crocmagnon/fatcontext v0.7.1 h1:SC/VIbRRZQeQWj/TcQBS6JmrXcfA+BU4OGSVUt54PjM=
-github.com/Crocmagnon/fatcontext v0.7.1/go.mod h1:1wMvv3NXEBJucFGfwOJBxSVWcoIO6emV215SMkW9MFU=
-github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM=
-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/Djarvur/go-err113 v0.1.1 h1:eHfopDqXRwAi+YmCUas75ZE0+hoBHJ2GQNLYRSxao4g=
+github.com/Djarvur/go-err113 v0.1.1/go.mod h1:IaWJdYFLg76t2ihfflPZnM1LIQszWOsFDh2hhhAVF6k=
github.com/GoogleCloudPlatform/prometheus v0.0.0-20250822124349-98e3120b1750 h1:xuD+UwWYcwPqUvHVoyowUEy49UnW+n+0DCDpwhUL548=
github.com/GoogleCloudPlatform/prometheus v0.0.0-20250822124349-98e3120b1750/go.mod h1:KJY4lbAwOWwFJ9qgAPDYo3KVfXKokl7gU9WsMrNIdNk=
-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/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
+github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
+github.com/MirrexOne/unqueryvet v1.2.1 h1:M+zdXMq84g+E1YOLa7g7ExN3dWfZQrdDSTCM7gC+m/A=
+github.com/MirrexOne/unqueryvet v1.2.1/go.mod h1:IWwCwMQlSWjAIteW0t+28Q5vouyktfujzYznSIWiuOg=
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/a8m/envsubst v1.4.2 h1:4yWIHXOLEJHQEFd4UjrWDrYeYlV7ncFWJOCBRLOZHQg=
github.com/a8m/envsubst v1.4.2/go.mod h1:MVUTQNGQ3tsjOOtKCNd+fl8RzhsXcDvvAEzkhGtlsbY=
github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
+github.com/alecthomas/chroma/v2 v2.20.0 h1:sfIHpxPyR07/Oylvmcai3X/exDlE8+FA820NTz+9sGw=
+github.com/alecthomas/chroma/v2 v2.20.0/go.mod h1:e7tViK0xh/Nf4BYHl00ycY6rV7b8iXBksI9E359yNmA=
github.com/alecthomas/go-check-sumtype v0.3.1 h1:u9aUvbGINJxLVXiFvHUlPEaD7VDULsrxJb4Aq31NLkU=
github.com/alecthomas/go-check-sumtype v0.3.1/go.mod h1:A8TSiN3UPRw3laIgWEUOHHLPa6/r9MtoigdlP5h3K/E=
github.com/alecthomas/kingpin/v2 v2.4.0 h1:f48lwail6p8zpO1bC4TxtqACaGqHYA22qkHjHpqDjYY=
github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE=
github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8=
github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
-github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=
-github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
+github.com/alecthomas/repr v0.5.1 h1:E3G4t2QbHTSNpPKBgMTln5KLkZHLOcU7r37J4pXBuIg=
+github.com/alecthomas/repr v0.5.1/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b h1:mimo19zliBX/vSQ6PWWSL9lK8qwHozUj03+zLoEB8O0=
github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs=
-github.com/alexkohler/nakedret/v2 v2.0.5 h1:fP5qLgtwbx9EJE8dGEERT02YwS8En4r9nnZ71RK+EVU=
-github.com/alexkohler/nakedret/v2 v2.0.5/go.mod h1:bF5i0zF2Wo2o4X4USt9ntUWve6JbFv02Ff4vlkmS/VU=
+github.com/alexkohler/nakedret/v2 v2.0.6 h1:ME3Qef1/KIKr3kWX3nti3hhgNxw6aqN5pZmQiFSsuzQ=
+github.com/alexkohler/nakedret/v2 v2.0.6/go.mod h1:l3RKju/IzOMQHmsEvXwkqMDzHHvurNQfAgE1eVmT40Q=
github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw=
github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE=
+github.com/alfatraining/structtag v1.0.0 h1:2qmcUqNcCoyVJ0up879K614L9PazjBSFruTB0GOFjCc=
+github.com/alfatraining/structtag v1.0.0/go.mod h1:p3Xi5SwzTi+Ryj64DqjLWz7XurHxbGsq6y3ubePJPus=
github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw=
github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I=
-github.com/alingse/nilnesserr v0.1.2 h1:Yf8Iwm3z2hUUrP4muWfW83DF4nE3r1xZ26fGWUKCZlo=
-github.com/alingse/nilnesserr v0.1.2/go.mod h1:1xJPrXonEtX7wyTq8Dytns5P2hNzoWymVUIaKm4HNFg=
+github.com/alingse/nilnesserr v0.2.0 h1:raLem5KG7EFVb4UIDAXgrv3N2JIaffeKNtcEXkEWd/w=
+github.com/alingse/nilnesserr v0.2.0/go.mod h1:1xJPrXonEtX7wyTq8Dytns5P2hNzoWymVUIaKm4HNFg=
github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=
github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
-github.com/ashanbrown/forbidigo v1.6.0 h1:D3aewfM37Yb3pxHujIPSpTf6oQk9sc9WZi8gerOIVIY=
-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/ashanbrown/forbidigo/v2 v2.3.0 h1:OZZDOchCgsX5gvToVtEBoV2UWbFfI6RKQTir2UZzSxo=
+github.com/ashanbrown/forbidigo/v2 v2.3.0/go.mod h1:5p6VmsG5/1xx3E785W9fouMxIOkvY2rRV9nMdWadd6c=
+github.com/ashanbrown/makezero/v2 v2.1.0 h1:snuKYMbqosNokUKm+R6/+vOPs8yVAi46La7Ck6QYSaE=
+github.com/ashanbrown/makezero/v2 v2.1.0/go.mod h1:aEGT/9q3S8DHeE57C88z2a6xydvgx8J5hgXIGWgo0MY=
github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
github.com/aws/aws-sdk-go v1.55.8 h1:JRmEUbU52aJQZ2AjX4q4Wu7t4uZjOu71uyNmaWlUkJQ=
github.com/aws/aws-sdk-go v1.55.8/go.mod h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk=
@@ -129,25 +141,27 @@ github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ
github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k=
github.com/bmatcuk/doublestar/v4 v4.0.2 h1:X0krlUVAVmtr2cRoTqR8aDMrDqnB36ht8wpWTiQ3jsA=
github.com/bmatcuk/doublestar/v4 v4.0.2/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
-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/bombsimon/wsl/v4 v4.7.0 h1:1Ilm9JBPRczjyUs6hvOPKvd7VL1Q++PL8M0SXBDf+jQ=
+github.com/bombsimon/wsl/v4 v4.7.0/go.mod h1:uV/+6BkffuzSAVYD+yGyld1AChO7/EuLrCF/8xTiapg=
+github.com/bombsimon/wsl/v5 v5.3.0 h1:nZWREJFL6U3vgW/B1lfDOigl+tEF6qgs6dGGbFeR0UM=
+github.com/bombsimon/wsl/v5 v5.3.0/go.mod h1:Gp8lD04z27wm3FANIUPZycXp+8huVsn0oxc+n4qfV9I=
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/ireturn v0.4.0 h1:+s76bF/PfeKEdbG8b54aCocxXmi0wvYdOVsWxVO7n8E=
+github.com/butuzov/ireturn v0.4.0/go.mod h1:ghI0FrCmap8pDWZwfPisFD1vEc56VKH4NpQUxDHta70=
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.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/catenacyber/perfsprint v0.10.0 h1:AZj1mYyxbxLRqmnYOeguZXEQwWOgQGm2wzLI5d7Hl/0=
+github.com/catenacyber/perfsprint v0.10.0/go.mod h1:DJTGsi/Zufpuus6XPGJyKOTMELe347o6akPvWG9Zcsc=
+github.com/ccojocar/zxcvbn-go v1.0.4 h1:FWnCIRMXPj43ukfX000kvBZvV6raSxakYr1nzyNrUcc=
+github.com/ccojocar/zxcvbn-go v1.0.4/go.mod h1:3GxGX+rHmueTUMvm5ium7irpyjmm7ikxYFOSJB21Das=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
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/charithe/durationcheck v0.0.11 h1:g1/EX1eIiKS57NTWsYtHDZ/APfeXKhye1DidBcABctk=
+github.com/charithe/durationcheck v0.0.11/go.mod h1:x5iZaixRNl8ctbM+3B2RrPG5t856TxRyVQEnbIEM2X4=
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=
@@ -158,8 +172,6 @@ github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0G
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/ckaznocha/intrange v0.3.1 h1:j1onQyXvHUsPWujDH6WIjhyH26gkRt/txNlV7LspvJs=
github.com/ckaznocha/intrange v0.3.1/go.mod h1:QVepyz1AkUoFQkpEqksSYpNpUo3c5W7nWh/s6SHIJJk=
github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls=
@@ -170,8 +182,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6N
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
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.6 h1:RKuEOSkGpSadkGbvZ6hJ4ddItT3cVZ9Vn9Rybk6xjl8=
-github.com/daixiang0/gci v0.13.6/go.mod h1:12etP2OniiIdP4q+kjUGrC/rUagga7ODbqsom5Eo5Yk=
+github.com/daixiang0/gci v0.13.7 h1:+0bG5eK9vlI08J+J/NWGbWPTNiXPG4WhNLJOkSxWITQ=
+github.com/daixiang0/gci v0.13.7/go.mod h1:812WVN6JLFY9S6Tv76twqmNqevN0pa3SX3nih0brVzQ=
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=
@@ -190,8 +202,8 @@ github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi
github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE=
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
-github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
-github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
+github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
+github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/docker/cli v27.5.0+incompatible h1:aMphQkcGtpHixwwhAXJT1rrK/detk2JIvDaFkLctbGM=
github.com/docker/cli v27.5.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
@@ -231,8 +243,8 @@ github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4
github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-github.com/firefart/nonamedreturns v1.0.5 h1:tM+Me2ZaXs8tfdDw3X6DOX++wMCOqzYUho6tUTYIdRA=
-github.com/firefart/nonamedreturns v1.0.5/go.mod h1:gHJjDqhGM4WyPt639SOZs+G89Ko7QKH5R5BhnO6xJhw=
+github.com/firefart/nonamedreturns v1.0.6 h1:vmiBcKV/3EqKY3ZiPxCINmpS431OcE1S47AQUwhrg8E=
+github.com/firefart/nonamedreturns v1.0.6/go.mod h1:R8NisJnSIpvPWheCq0mNRXJok6D8h7fagJTF8EMEwCo=
github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
@@ -241,10 +253,10 @@ github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo=
github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA=
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
-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/ghostiam/protogetter v0.3.17 h1:sjGPErP9o7i2Ym+z3LsQzBdLCNaqbYy2iJQPxGXg04Q=
+github.com/ghostiam/protogetter v0.3.17/go.mod h1:AivIX1eKA/TcUmzZdzbl+Tb8tjIe8FcyG6JFyemQAH4=
+github.com/go-critic/go-critic v0.14.2 h1:PMvP5f+LdR8p6B29npvChUXbD1vrNlKDf60NJtgMBOo=
+github.com/go-critic/go-critic v0.14.2/go.mod h1:xwntfW6SYAd7h1OqDzmN6hBX/JxsEKl5up/Y2bsxgVQ=
github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
@@ -321,8 +333,10 @@ github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
github.com/goccy/go-yaml v1.13.3 h1:IXRULR8mAa0MXQobzzp0VOfMUJ8EnaQ4x3jhf7S0/nI=
github.com/goccy/go-yaml v1.13.3/go.mod h1:IjYwxUiJDoqpx2RmbdjMUceGHZwYLon3sfOGl5Hi9lc=
-github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
-github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0=
+github.com/godoc-lint/godoc-lint v0.10.1 h1:ZPUVzlDtJfA+P688JfPJPkI/SuzcBr/753yGIk5bOPA=
+github.com/godoc-lint/godoc-lint v0.10.1/go.mod h1:KleLcHu/CGSvkjUH2RvZyoK1MBC7pDQg4NxMYLcBBsw=
+github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw=
+github.com/gofrs/flock v0.13.0/go.mod h1:jxeyy9R1auM5S6JYDBhDt+E2TCo7DkratH4Pgi8P+Z0=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
@@ -341,24 +355,28 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs=
github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golangci/asciicheck v0.5.0 h1:jczN/BorERZwK8oiFBOGvlGPknhvq0bjnysTj4nUfo0=
+github.com/golangci/asciicheck v0.5.0/go.mod h1:5RMNAInbNFw2krqN6ibBxN/zfRFa9S6tA1nPdM0l8qQ=
github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 h1:WUvBfQL6EW/40l6OmeSBYQJNSif4O11+bmWEz+C7FYw=
github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32/go.mod h1:NUw9Zr2Sy7+HxzdjIULge71wI6yEg1lWQr7Evcu8K0E=
-github.com/golangci/go-printf-func-name v0.1.0 h1:dVokQP+NMTO7jwO4bwsRwLWeudOVUPPyAKJuzv8pEJU=
-github.com/golangci/go-printf-func-name v0.1.0/go.mod h1:wqhWFH5mUdJQhweRnldEywnR5021wTdZSNgwYceV14s=
+github.com/golangci/go-printf-func-name v0.1.1 h1:hIYTFJqAGp1iwoIfsNTpoq1xZAarogrvjO9AfiW3B4U=
+github.com/golangci/go-printf-func-name v0.1.1/go.mod h1:Es64MpWEZbh0UBtTAICOZiB+miW53w/K9Or/4QogJss=
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/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/golangci-lint/v2 v2.6.2 h1:jkMSVv36JmyTENcEertckvimvjPcD5qxNM7W7qhECvI=
+github.com/golangci/golangci-lint/v2 v2.6.2/go.mod h1:fSIMDiBt9kzdpnvvV7GO6iWzyv5uaeZ+iPor+2uRczE=
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=
-github.com/golangci/plugin-module-register v0.1.1/go.mod h1:TTpqoB6KkwOJMV8u7+NyXMrkwwESJLOkfl9TxR1DGFc=
+github.com/golangci/misspell v0.7.0 h1:4GOHr/T1lTW0hhR4tgaaV1WS/lJ+ncvYCoFKmqJsj0c=
+github.com/golangci/misspell v0.7.0/go.mod h1:WZyyI2P3hxPY2UVHs3cS8YcllAeyfquQcKfdeE9AFVg=
+github.com/golangci/plugin-module-register v0.1.2 h1:e5WM6PO6NIAEcij3B053CohVp3HIYbzSuP53UAYgOpg=
+github.com/golangci/plugin-module-register v0.1.2/go.mod h1:1+QGTsKBvAIvPvoY/os+G5eoqxWn70HYDm2uvUyGuVw=
github.com/golangci/revgrep v0.8.0 h1:EZBctwbVd0aMeRnNUsFogoyayvKHyxlV3CdUA46FX2s=
github.com/golangci/revgrep v0.8.0/go.mod h1:U4R/s9dlXZsg8uJmaR1GrloUr14D7qDl8gi2iPXJH8k=
-github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed h1:IURFTjxeTfNFP0hTEi1YKjB/ub8zkpaOqFFMApi2EAs=
-github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed/go.mod h1:XLXN8bNw4CGRPaqgl3bv/lhz7bsGPh4/xSaMTbo2vkQ=
+github.com/golangci/swaggoswag v0.0.0-20250504205917-77f2aca3143e h1:ai0EfmVYE2bRA5htgAG9r7s3tHsfjIhN98WshBTJ9jM=
+github.com/golangci/swaggoswag v0.0.0-20250504205917-77f2aca3143e/go.mod h1:Vrn4B5oR9qRwM+f54koyeH3yzphlecwERs0el27Fr/s=
+github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e h1:gD6P7NEo7Eqtt0ssnqSJNNndxe69DOQ24A5h7+i3KpM=
+github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e/go.mod h1:h+wZwLjUTJnm/P2rwlbJdRPZXOzaT36/FwnPnY2inzc=
github.com/google/addlicense v1.1.1 h1:jpVf9qPbU8rz5MxKo7d+RMcNHkqxi4YJi/laauX4aAE=
github.com/google/addlicense v1.1.1/go.mod h1:Sm/DHu7Jk+T5miFHHehdIjbi4M5+dJDRS3Cq0rncIxA=
github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
@@ -366,11 +384,9 @@ github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7O
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
@@ -383,8 +399,8 @@ github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
+github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6 h1:EEHtgt9IwisQ2AZ4pIsMjahcegHh6rmhqxzIRQIyepY=
+github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6/go.mod h1:I6V7YzU0XDpsHqbsyrghnFZLO1gwK6NPTNvmetQIk9U=
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
@@ -397,20 +413,19 @@ github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81
github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
github.com/gophercloud/gophercloud v1.12.0 h1:Jrz16vPAL93l80q16fp8NplrTCp93y7rZh2P3Q4Yq7g=
github.com/gophercloud/gophercloud v1.12.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
-github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s=
-github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0=
+github.com/gordonklaus/ineffassign v0.2.0 h1:Uths4KnmwxNJNzq87fwQQDDnbNb7De00VOk9Nu0TySs=
+github.com/gordonklaus/ineffassign v0.2.0/go.mod h1:TIpymnagPSexySzs7F9FnO1XFTy8IT3a59vmZp5Y9Lw=
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo=
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA=
github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk=
github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc=
-github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado=
github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM=
github.com/gostaticanalysis/comment v1.5.0 h1:X82FLl+TswsUMpMh17srGRuKaaXprTaytmEpgnKIDu8=
github.com/gostaticanalysis/comment v1.5.0/go.mod h1:V6eb3gpCv9GNVqb6amXzEUX3jXLVK/AdA+IrAMSqvEc=
github.com/gostaticanalysis/forcetypeassert v0.2.0 h1:uSnWrrUEYDr86OCxWa4/Tp2jeYDlogZiZHzGkWFefTk=
github.com/gostaticanalysis/forcetypeassert v0.2.0/go.mod h1:M5iPavzE9pPqWyeiVXSFghQjljW1+l/Uke3PXHS6ILY=
-github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk=
-github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A=
+github.com/gostaticanalysis/nilerr v0.1.2 h1:S6nk8a9N8g062nsx63kUkF6AzbHGw7zzyHMcpu52xQU=
+github.com/gostaticanalysis/nilerr v0.1.2/go.mod h1:A19UHhoY3y8ahoL7YKz6sdjDtduwTSI4CsymaC2htPA=
github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M=
github.com/gostaticanalysis/testutil v0.5.0 h1:Dq4wT1DdTwTGCQQv3rl3IvD5Ld0E6HiY+3Zh0sUGqw8=
github.com/gostaticanalysis/testutil v0.5.0/go.mod h1:OLQSbuM6zw2EvCcXTz1lVq5unyoNft372msDY0nY5Hs=
@@ -465,14 +480,14 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/ionos-cloud/sdk-go/v6 v6.1.11 h1:J/uRN4UWO3wCyGOeDdMKv8LWRzKu6UIkLEaes38Kzh8=
github.com/ionos-cloud/sdk-go/v6 v6.1.11/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k=
-github.com/jgautheron/goconst v1.7.1 h1:VpdAG7Ca7yvvJk5n8dMwQhfEZJh95kl/Hl9S1OI5Jkk=
-github.com/jgautheron/goconst v1.7.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4=
+github.com/jgautheron/goconst v1.8.2 h1:y0XF7X8CikZ93fSNT6WBTb/NElBu9IjaY7CCYQrCMX4=
+github.com/jgautheron/goconst v1.8.2/go.mod h1:A0oxgBCHy55NQn6sYpO7UdnA9p+h7cPtoOZUmvNIako=
github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs=
github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c=
github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8=
github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
-github.com/jjti/go-spancheck v0.6.4 h1:Tl7gQpYf4/TMU7AT84MN83/6PutY21Nb9fuQjFTpRRc=
-github.com/jjti/go-spancheck v0.6.4/go.mod h1:yAEYdKJ2lRkDA8g7X+oKUHXOWVAXSBJRv04OhF+QUjk=
+github.com/jjti/go-spancheck v0.6.5 h1:lmi7pKxa37oKYIMScialXUK6hP3iY5F1gu+mLBPgYB8=
+github.com/jjti/go-spancheck v0.6.5/go.mod h1:aEogkeatBrbYsyW6y5TgDfihCulDYciL1B7rG2vSsrU=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
@@ -488,8 +503,8 @@ github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4d
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/julz/importas v0.2.0 h1:y+MJN/UdL63QbFJHws9BVC5RpA2iq0kpjrFajTGivjQ=
github.com/julz/importas v0.2.0/go.mod h1:pThlt589EnCYtMnmhmRYY/qn9lCf/frPOK+WMx3xiJY=
-github.com/karamaru-alpha/copyloopvar v1.2.1 h1:wmZaZYIjnJ0b5UoKDjUHrikcV0zuPyyxI4SVplLd2CI=
-github.com/karamaru-alpha/copyloopvar v1.2.1/go.mod h1:nFmMlFNlClC2BPvNaHMdkirmTJxVCY0lhxBtlfOypMM=
+github.com/karamaru-alpha/copyloopvar v1.2.2 h1:yfNQvP9YaGQR7VaWLYcfZUlRP2eo2vhExWKxD/fP6q0=
+github.com/karamaru-alpha/copyloopvar v1.2.2/go.mod h1:oY4rGZqZ879JkJMtX3RRkcXRkmUvH0x35ykgaKgsgJY=
github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU=
github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -512,24 +527,24 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs=
-github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I=
-github.com/kunwardeep/paralleltest v1.0.10 h1:wrodoaKYzS2mdNVnc4/w31YaXFtsc21PCTdvWJ/lDDs=
-github.com/kunwardeep/paralleltest v1.0.10/go.mod h1:2C7s65hONVqY7Q5Efj5aLzRCNLjw2h4eMc9EcypGjcY=
+github.com/kulti/thelper v0.7.1 h1:fI8QITAoFVLx+y+vSyuLBP+rcVIB8jKooNSCT2EiI98=
+github.com/kulti/thelper v0.7.1/go.mod h1:NsMjfQEy6sd+9Kfw8kCP61W1I0nerGSYSFnGaxQkcbs=
+github.com/kunwardeep/paralleltest v1.0.15 h1:ZMk4Qt306tHIgKISHWFJAO1IDQJLc6uDyJMLyncOb6w=
+github.com/kunwardeep/paralleltest v1.0.15/go.mod h1:di4moFqtfz3ToSKxhNjhOZL+696QtJGCFe132CbBLGk=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/lasiar/canonicalheader v1.1.2 h1:vZ5uqwvDbyJCnMhmFYimgMZnJMjwljN5VGY0VKbMXb4=
github.com/lasiar/canonicalheader v1.1.2/go.mod h1:qJCeLFS0G/QlLQ506T+Fk/fWMa2VmBUiEI2cuMK4djI=
-github.com/ldez/exptostd v0.4.2 h1:l5pOzHBz8mFOlbcifTxzfyYbgEmoUqjxLFHZkjlbHXs=
-github.com/ldez/exptostd v0.4.2/go.mod h1:iZBRYaUmcW5jwCR3KROEZ1KivQQp6PHXbDPk9hqJKCQ=
-github.com/ldez/gomoddirectives v0.6.1 h1:Z+PxGAY+217f/bSGjNZr/b2KTXcyYLgiWI6geMBN2Qc=
-github.com/ldez/gomoddirectives v0.6.1/go.mod h1:cVBiu3AHR9V31em9u2kwfMKD43ayN5/XDgr+cdaFaKs=
-github.com/ldez/grignotin v0.9.0 h1:MgOEmjZIVNn6p5wPaGp/0OKWyvq42KnzAt/DAb8O4Ow=
-github.com/ldez/grignotin v0.9.0/go.mod h1:uaVTr0SoZ1KBii33c47O1M8Jp3OP3YDwhZCmzT9GHEk=
-github.com/ldez/tagliatelle v0.7.1 h1:bTgKjjc2sQcsgPiT902+aadvMjCeMHrY7ly2XKFORIk=
-github.com/ldez/tagliatelle v0.7.1/go.mod h1:3zjxUpsNB2aEZScWiZTHrAXOl1x25t3cRmzfK1mlo2I=
-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/ldez/exptostd v0.4.5 h1:kv2ZGUVI6VwRfp/+bcQ6Nbx0ghFWcGIKInkG/oFn1aQ=
+github.com/ldez/exptostd v0.4.5/go.mod h1:QRjHRMXJrCTIm9WxVNH6VW7oN7KrGSht69bIRwvdFsM=
+github.com/ldez/gomoddirectives v0.7.1 h1:FaULkvUIG36hj6chpwa+FdCNGZBsD7/fO+p7CCsM6pE=
+github.com/ldez/gomoddirectives v0.7.1/go.mod h1:auDNtakWJR1rC+YX7ar+HmveqXATBAyEK1KYpsIRW/8=
+github.com/ldez/grignotin v0.10.1 h1:keYi9rYsgbvqAZGI1liek5c+jv9UUjbvdj3Tbn5fn4o=
+github.com/ldez/grignotin v0.10.1/go.mod h1:UlDbXFCARrXbWGNGP3S5vsysNXAPhnSuBufpTEbwOas=
+github.com/ldez/tagliatelle v0.7.2 h1:KuOlL70/fu9paxuxbeqlicJnCspCRjH0x8FW+NfgYUk=
+github.com/ldez/tagliatelle v0.7.2/go.mod h1:PtGgm163ZplJfZMZ2sf5nhUT170rSuPgBimoyYtdaSI=
+github.com/ldez/usetesting v0.5.0 h1:3/QtzZObBKLy1F4F8jLuKJiKBjjVFi1IavpoWbmqLwc=
+github.com/ldez/usetesting v0.5.0/go.mod h1:Spnb4Qppf8JTuRgblLrEWb7IE6rDmUpGvxY3iRrzvDQ=
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY=
@@ -544,10 +559,14 @@ github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a
github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
-github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI=
-github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE=
-github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1rNTU04=
-github.com/maratori/testpackage v1.1.1/go.mod h1:s4gRK/ym6AMrqpOa/kEbQTV4Q4jb7WeLZzVhVVVOQMc=
+github.com/manuelarte/embeddedstructfieldcheck v0.4.0 h1:3mAIyaGRtjK6EO9E73JlXLtiy7ha80b2ZVGyacxgfww=
+github.com/manuelarte/embeddedstructfieldcheck v0.4.0/go.mod h1:z8dFSyXqp+fC6NLDSljRJeNQJJDWnY7RoWFzV3PC6UM=
+github.com/manuelarte/funcorder v0.5.0 h1:llMuHXXbg7tD0i/LNw8vGnkDTHFpTnWqKPI85Rknc+8=
+github.com/manuelarte/funcorder v0.5.0/go.mod h1:Yt3CiUQthSBMBxjShjdXMexmzpP8YGvGLjrxJNkO2hA=
+github.com/maratori/testableexamples v1.0.1 h1:HfOQXs+XgfeRBJ+Wz0XfH+FHnoY9TVqL6Fcevpzy4q8=
+github.com/maratori/testableexamples v1.0.1/go.mod h1:XE2F/nQs7B9N08JgyRmdGjYVGqxWwClLPCGSQhXQSrQ=
+github.com/maratori/testpackage v1.1.2 h1:ffDSh+AgqluCLMXhM19f/cpvQAKygKAJXFl9aUjmbqs=
+github.com/maratori/testpackage v1.1.2/go.mod h1:8F24GdVDFW5Ew43Et02jamrVMNXLUNaOynhDssITGfc=
github.com/matoous/godox v1.1.0 h1:W5mqwbyWrwZv6OQ5Z1a/DHGMOvXYCBP3+Ht7KMoJhq4=
github.com/matoous/godox v1.1.0/go.mod h1:jgE/3fUXiTurkdHOLT5WEkThTSuE7yxHv5iWPa80afs=
github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE=
@@ -556,11 +575,10 @@ github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHP
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
-github.com/mgechev/revive v1.7.0 h1:JyeQ4yO5K8aZhIKf5rec56u0376h8AlKNQEmjfkjKlY=
-github.com/mgechev/revive v1.7.0/go.mod h1:qZnwcNhoguE58dfi96IJeSTPeZQejNeoMQLUZGi4SW4=
+github.com/mgechev/revive v1.12.0 h1:Q+/kkbbwerrVYPv9d9efaPGmAO/NsxwW/nE6ahpQaCU=
+github.com/mgechev/revive v1.12.0/go.mod h1:VXsY2LsTigk8XU9BpZauVLjVrhICMOV3k1lpB3CXrp8=
github.com/miekg/dns v1.1.59 h1:C9EXc/UToRwKLhK5wKU/I4QVsBUc8kE6MkHBkeypWZs=
github.com/miekg/dns v1.1.59/go.mod h1:nZpewl5p6IvctfgrckopVx2OlSEHPRO/U4SYkRklrEk=
github.com/mikefarah/yq/v4 v4.45.1 h1:EW+HjKEVa55pUYFJseEHEHdQ0+ulunY+q42zF3M7ZaQ=
@@ -600,19 +618,17 @@ github.com/nishanths/exhaustive v0.12.0 h1:vIY9sALmw6T/yxiASewa4TQcFsVYZQQRUQJhK
github.com/nishanths/exhaustive v0.12.0/go.mod h1:mEZ95wPIZW+x8kC4TgC+9YCUgiST7ecevsVDTgc2obs=
github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk=
github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c=
-github.com/nunnatsa/ginkgolinter v0.19.1 h1:mjwbOlDQxZi9Cal+KfbEJTCz327OLNfwNvoZ70NJ+c4=
-github.com/nunnatsa/ginkgolinter v0.19.1/go.mod h1:jkQ3naZDmxaZMXPWaS9rblH+i+GWXQCaS/JFIWcOH2s=
+github.com/nunnatsa/ginkgolinter v0.21.2 h1:khzWfm2/Br8ZemX8QM1pl72LwM+rMeW6VUbQ4rzh0Po=
+github.com/nunnatsa/ginkgolinter v0.21.2/go.mod h1:GItSI5fw7mCGLPmkvGYrr1kEetZe7B593jcyOpyabsY=
github.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E=
github.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk=
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
-github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
+github.com/onsi/ginkgo/v2 v2.26.0 h1:1J4Wut1IlYZNEAWIV3ALrT9NfiaGW2cDCJQSFQMs/gE=
+github.com/onsi/ginkgo/v2 v2.26.0/go.mod h1:qhEywmzWTBUY88kfO0BRvX4py7scov9yR+Az2oavUzw=
+github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A=
+github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
@@ -628,8 +644,8 @@ github.com/ovh/go-ovh v1.5.1 h1:P8O+7H+NQuFK9P/j4sFW5C0fvSS2DnHYGPwdVCp45wI=
github.com/ovh/go-ovh v1.5.1/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c=
github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
-github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
-github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
+github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
+github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A=
@@ -641,8 +657,8 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/polyfloyd/go-errorlint v1.7.1 h1:RyLVXIbosq1gBdk/pChWA8zWYLsq9UEw7a1L5TVMCnA=
-github.com/polyfloyd/go-errorlint v1.7.1/go.mod h1:aXjNb1x2TNhoLsk26iv1yl7a+zTnXPhwEMtEXukiLR8=
+github.com/polyfloyd/go-errorlint v1.8.0 h1:DL4RestQqRLr8U4LygLw8g2DX6RN1eBJOpa2mzsrl1Q=
+github.com/polyfloyd/go-errorlint v1.8.0/go.mod h1:G2W0Q5roxbLCt0ZQbdoxQxXktTjwNyDbEaj3n7jvl4s=
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
github.com/prometheus/alertmanager v0.28.1 h1:BK5pCoAtaKg01BYRUJhEDV1tqJMEtYBGzPw8QdvnnvA=
@@ -667,10 +683,10 @@ github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7D
github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw=
github.com/prometheus/sigv4 v0.2.1 h1:hl8D3+QEzU9rRmbKIRwMKRwaFGyLkbPdH5ZerglRHY0=
github.com/prometheus/sigv4 v0.2.1/go.mod h1:ySk6TahIlsR2sxADuHy4IBFhwEjRGGsfbbLGhFYFj6Q=
-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/go-ruleguard v0.4.5 h1:AGY0tiOT5hJX9BTdx/xBdoCubQUAE2grkqY2lSwvZcA=
+github.com/quasilyte/go-ruleguard v0.4.5/go.mod h1:Vl05zJ538vcEEwu16V/Hdu7IYZWyKSwIy4c88Ro1kRE=
+github.com/quasilyte/go-ruleguard/dsl v0.3.23 h1:lxjt5B6ZCiBeeNO8/oQsegE6fLeCzuMRoVWSkXC4uvY=
+github.com/quasilyte/go-ruleguard/dsl v0.3.23/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU=
github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo=
github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng=
github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl980XxGFEZSS6KlBGIV0diGdySzxATTWoqaU=
@@ -693,16 +709,16 @@ github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9f
github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ=
github.com/sanposhiho/wastedassign/v2 v2.1.0 h1:crurBF7fJKIORrV85u9UUpePDYGWnwvv3+A96WvwXT0=
github.com/sanposhiho/wastedassign/v2 v2.1.0/go.mod h1:+oSmSC+9bQ+VUAxA66nBb0Z7N8CK7mscKTDYC6aIek4=
-github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 h1:PKK9DyHxif4LZo+uQSgXNqs0jj5+xZwwfKHgph2lxBw=
-github.com/santhosh-tekuri/jsonschema/v6 v6.0.1/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU=
+github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ=
+github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU=
github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw=
github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ=
-github.com/sashamelentyev/usestdlibvars v1.28.0 h1:jZnudE2zKCtYlGzLVreNp5pmCdOxXUzwsMDBkR21cyQ=
-github.com/sashamelentyev/usestdlibvars v1.28.0/go.mod h1:9nl0jgOfHKWNFS43Ojw0i7aRoS4j6EBye3YBhmAIRF8=
+github.com/sashamelentyev/usestdlibvars v1.29.0 h1:8J0MoRrw4/NAXtjQqTHrbW9NN+3iMf7Knkq057v4XOQ=
+github.com/sashamelentyev/usestdlibvars v1.29.0/go.mod h1:8PpnjHMk5VdeWlVb4wCdrB8PNbLqZ3wBZTZWkrpZZL8=
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.27 h1:yGAraK1uUjlhSXgNMIy8o/J4LFNcy7yeipBqt9N9mVg=
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.27/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
-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/securego/gosec/v2 v2.22.10 h1:ntbBqdWXnu46DUOXn+R2SvPo3PiJCDugTCgTW2g4tQg=
+github.com/securego/gosec/v2 v2.22.10/go.mod h1:9UNjK3tLpv/w2b0+7r82byV43wCJDNtEDQMeS+H/g2w=
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=
@@ -711,22 +727,22 @@ 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/sonatard/noctx v0.1.0 h1:JjqOc2WN16ISWAjAk8M5ej0RfExEXtkEyExl2hLW+OM=
-github.com/sonatard/noctx v0.1.0/go.mod h1:0RvBxqY8D4j9cTTTWE8ylt2vqj2EPI8fHmrxHdsaZ2c=
+github.com/sonatard/noctx v0.4.0 h1:7MC/5Gg4SQ4lhLYR6mvOP6mQVSxCrdyiExo7atBs27o=
+github.com/sonatard/noctx v0.4.0/go.mod h1:64XdbzFb18XL4LporKXp8poqZtPKbCrqQ402CV+kJas=
github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCpA8G0=
github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs=
-github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs=
-github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4=
+github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA=
+github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo=
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
-github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
-github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
+github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
+github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
-github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
+github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ=
github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI=
github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0=
@@ -741,7 +757,6 @@ github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
@@ -749,26 +764,24 @@ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/stretchr/testify v1.11.0 h1:ib4sjIrwZKxE5u/Japgo/7SJV3PvgjGiRNAvTVGqQl8=
-github.com/stretchr/testify v1.11.0/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
+github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
+github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs=
github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
-github.com/tdakkota/asciicheck v0.4.1 h1:bm0tbcmi0jezRA2b5kg4ozmMuGAFotKI3RZfrhfovg8=
-github.com/tdakkota/asciicheck v0.4.1/go.mod h1:0k7M3rCfRXb0Z6bwgvkEIMleKH3kXNz9UqJ9Xuqopr8=
github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA=
github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0=
github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag=
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/tetafro/godot v1.5.4 h1:u1ww+gqpRLiIA16yF2PV1CV1n/X3zhyezbNXC3E14Sg=
+github.com/tetafro/godot v1.5.4/go.mod h1:eOkMrVQurDui411nBY2FA05EYH01r14LuWY/NrVDVcU=
github.com/thanos-io/thanos v0.36.1 h1:NsUBsWkJcZ6Uo2VuEr06mZZ9YNMLGVA2sIGVu+LsrNU=
github.com/thanos-io/thanos v0.36.1/go.mod h1:f7LiW4+/xvV5+gkseMuVbQnrbFTFnCPv5+X1M6mXkn4=
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=
-github.com/tomarrell/wrapcheck/v2 v2.10.0/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYcGsVMOx/xGkqdMo=
+github.com/timonwong/loggercheck v0.11.0 h1:jdaMpYBl+Uq9mWPXv1r8jc5fC3gyXx4/WGwTnnNKn4M=
+github.com/timonwong/loggercheck v0.11.0/go.mod h1:HEAWU8djynujaAVX7QI65Myb8qgfcZ1uKbdpg3ZzKl8=
+github.com/tomarrell/wrapcheck/v2 v2.11.0 h1:BJSt36snX9+4WTIXeJ7nvHBQBcm1h2SjQMSlmQ6aFSU=
+github.com/tomarrell/wrapcheck/v2 v2.11.0/go.mod h1:wFL9pDWDAbXhhPZZt+nG8Fu+h29TtnZ2MW6Lx4BRXIU=
github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw=
github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw=
github.com/ultraware/funlen v0.2.0 h1:gCHmCn+d2/1SemTdYMiKLAHFYxTYz7z9VIDRaTGyLkI=
@@ -777,8 +790,8 @@ github.com/ultraware/whitespace v0.2.0 h1:TYowo2m9Nfj1baEQBjuHzvMRbp19i+RCcRYrSW
github.com/ultraware/whitespace v0.2.0/go.mod h1:XcP1RLD81eV4BW8UhQlpaR+SDc2givTvyI8a586WjW8=
github.com/uudashr/gocognit v1.2.0 h1:3BU9aMr1xbhPlvJLSydKwdLN3tEUUrzPSSM8S4hDYRA=
github.com/uudashr/gocognit v1.2.0/go.mod h1:k/DdKPI6XBZO1q7HgoV2juESI2/Ofj9AcHPZhBBdrTU=
-github.com/uudashr/iface v1.3.1 h1:bA51vmVx1UIhiIsQFSNq6GZ6VPTk3WNMZgRiCe9R29U=
-github.com/uudashr/iface v1.3.1/go.mod h1:4QvspiRd3JLPAEXBQ9AiZpLbJlrWWgRChOKDJEuQTdg=
+github.com/uudashr/iface v1.4.1 h1:J16Xl1wyNX9ofhpHmQ9h9gk5rnv2A6lX/2+APLTo0zU=
+github.com/uudashr/iface v1.4.1/go.mod h1:pbeBPlbuU2qkNDn0mmfrxP2X+wjPMIQAy+r1MBXSXtg=
github.com/vbatts/tar-split v0.11.6 h1:4SjTW5+PU11n6fZenf2IPoV8/tz3AaYHMWjf23envGs=
github.com/vbatts/tar-split v0.11.6/go.mod h1:dqKNtesIOr2j2Qv3W/cHjnvk9I8+G7oAkFDFN6TCBEI=
github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs=
@@ -808,10 +821,14 @@ gitlab.com/bosi/decorder v0.4.2 h1:qbQaV3zgwnBZ4zPMhGLW4KZe7A7NwxEhJx39R3shffo=
gitlab.com/bosi/decorder v0.4.2/go.mod h1:muuhHoaJkA9QLcYHq4Mj8FJUwDZ+EirSHRiaTcTf6T8=
go-simpler.org/assert v0.9.0 h1:PfpmcSvL7yAnWyChSjOz6Sp6m9j5lyK8Ok9pEL31YkQ=
go-simpler.org/assert v0.9.0/go.mod h1:74Eqh5eI6vCK6Y5l3PI8ZYFXG4Sa+tkr70OIPJAUr28=
-go-simpler.org/musttag v0.13.0 h1:Q/YAW0AHvaoaIbsPj3bvEI5/QFP7w696IMUpnKXQfCE=
-go-simpler.org/musttag v0.13.0/go.mod h1:FTzIGeK6OkKlUDVpj0iQUXZLUO1Js9+mvykDQy9C5yM=
-go-simpler.org/sloglint v0.9.0 h1:/40NQtjRx9txvsB/RN022KsUJU+zaaSb/9q9BSefSrE=
-go-simpler.org/sloglint v0.9.0/go.mod h1:G/OrAF6uxj48sHahCzrbarVMptL2kjWTaUeC8+fOGww=
+go-simpler.org/musttag v0.14.0 h1:XGySZATqQYSEV3/YTy+iX+aofbZZllJaqwFWs+RTtSo=
+go-simpler.org/musttag v0.14.0/go.mod h1:uP8EymctQjJ4Z1kUnjX0u2l60WfUdQxCwSNKzE1JEOE=
+go-simpler.org/sloglint v0.11.1 h1:xRbPepLT/MHPTCA6TS/wNfZrDzkGvCCqUv4Bdwc3H7s=
+go-simpler.org/sloglint v0.11.1/go.mod h1:2PowwiCOK8mjiF+0KGifVOT8ZsCNiFzvfyJeJOIt8MQ=
+go.augendre.info/arangolint v0.3.1 h1:n2E6p8f+zfXSFLa2e2WqFPp4bfvcuRdd50y6cT65pSo=
+go.augendre.info/arangolint v0.3.1/go.mod h1:6ZKzEzIZuBQwoSvlKT+qpUfIbBfFCE5gbAoTg0/117g=
+go.augendre.info/fatcontext v0.9.0 h1:Gt5jGD4Zcj8CDMVzjOJITlSb9cEch54hjRRlN3qDojE=
+go.augendre.info/fatcontext v0.9.0/go.mod h1:L94brOAT1OOUNue6ph/2HnwxoNlds9aXDF2FcUntbNw=
go.mongodb.org/mongo-driver v1.17.4 h1:jUorfmVzljjr0FLzYQsGP8cgN/qzzxlY9Vh0C9KFXVw=
go.mongodb.org/mongo-driver v1.17.4/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
@@ -872,17 +889,15 @@ golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b h1:DXr+pvt3nC887026GRP39Ej11
golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4=
golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
-golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac h1:TSSpLIG4v+p0rPv1pNOQtl1I8knsO4S9trOxNMOLVP4=
-golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
+golang.org/x/exp/typeparams v0.0.0-20251023183803-a4bb9ffd2546 h1:HDjDiATsGqvuqvkDvgJjD1IgPrVekcSXVVE21JwvzGE=
+golang.org/x/exp/typeparams v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:4Mzdyp/6jzw9auFDJ3OMF5qksa7UvPnzKqTVGcb04ms=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
@@ -899,9 +914,7 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
@@ -948,7 +961,6 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -964,9 +976,7 @@ golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
@@ -981,9 +991,7 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
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.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
@@ -996,22 +1004,16 @@ golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU=
golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
@@ -1091,10 +1093,10 @@ k8s.io/kube-openapi v0.0.0-20250701173324-9bd5c66d9911 h1:gAXU86Fmbr/ktY17lkHwSj
k8s.io/kube-openapi v0.0.0-20250701173324-9bd5c66d9911/go.mod h1:GLOk5B+hDbRROvt0X2+hqX64v/zO3vXN7J78OUmBSKw=
k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d h1:wAhiDyZ4Tdtt7e46e9M5ZSAJ/MnPGPs+Ki1gHw4w1R0=
k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-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-20250301125049-0df0534333a4 h1:WjUu4yQoT5BHT1w8Zu56SP8367OuBV5jvo+4Ulppyf8=
-mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4/go.mod h1:rthT7OuvRbaGcd5ginj6dA2oLE7YNlta9qhBNNdCaLE=
+mvdan.cc/gofumpt v0.9.2 h1:zsEMWL8SVKGHNztrx6uZrXdp7AX8r421Vvp23sz7ik4=
+mvdan.cc/gofumpt v0.9.2/go.mod h1:iB7Hn+ai8lPvofHd9ZFGVg2GOr8sBUw1QUWjNbmIL/s=
+mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15 h1:ssMzja7PDPJV8FStj7hq9IKiuiKhgz9ErWw+m68e7DI=
+mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15/go.mod h1:4M5MMXl2kW6fivUT6yRGpLLPNfuGtU2Z0cPvFquGDYU=
sigs.k8s.io/controller-runtime v0.18.7 h1:WDnx8LTRY8Fn1j/7B+S/R9MeDjWNAzpDBoaSvMSrQME=
sigs.k8s.io/controller-runtime v0.18.7/go.mod h1:L9r3fUZhID7Q9eK9mseNskpaTg2n11f/tlb8odyzJ4Y=
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
diff --git a/hack/prepare_rc/cmd.go b/hack/prepare_rc/cmd.go
index 070f154d0e..75d580c615 100644
--- a/hack/prepare_rc/cmd.go
+++ b/hack/prepare_rc/cmd.go
@@ -42,6 +42,16 @@ func (c *Command) String() string {
return fmt.Sprintf("%s %s", c.command, strings.Join(c.args, " "))
}
+func (c *Command) Run() (string, error) {
+ fmt.Printf("::group::Running: %s\n", c)
+ res, err := c.run()
+ fmt.Println("::endgroup::")
+ if err != nil {
+ fmt.Printf("::info::Command '%s' failed: %v\n", c, err)
+ }
+ return res, err
+}
+
func (c *Command) run() (string, error) {
cmd := exec.Command(c.command, c.args...)
@@ -68,13 +78,3 @@ func (c *Command) run() (string, error) {
return result, nil
}
-
-func (c *Command) Run() (string, error) {
- fmt.Printf("::group::Running: %s\n", c)
- res, err := c.run()
- fmt.Println("::endgroup::")
- if err != nil {
- fmt.Printf("::info::Command '%s' failed: %v\n", c, err)
- }
- return res, err
-}
diff --git a/internal/promapi/promapi.go b/internal/promapi/promapi.go
index 986d65e00a..bd6d419a44 100644
--- a/internal/promapi/promapi.go
+++ b/internal/promapi/promapi.go
@@ -26,8 +26,8 @@ import (
// Redundant code for API compliance below can be DRY'ed up if/when this issue is addressed:
// https://github.com/prometheus/prometheus/issues/14962
-// https://prometheus.io/docs/prometheus/latest/querying/api/#format-overview
// Response is the prometheus-compatible Response format.
+// https://prometheus.io/docs/prometheus/latest/querying/api/#format-overview
type Response[T RulesResponseData | AlertsResponseData | GenericResponseData] struct {
Status status `json:"status"`
Data T `json:"data,omitempty"`
@@ -45,7 +45,7 @@ type AlertsResponseData struct {
Alerts []*promapiv1.Alert `json:"alerts"`
}
-type GenericResponseData interface{}
+type GenericResponseData any
type ErrorType string
diff --git a/manifests/fs.go b/manifests/fs.go
index 69b955ae28..4146a0c33d 100644
--- a/manifests/fs.go
+++ b/manifests/fs.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-// Package e2e contains tests that validate the behavior of gmp-operator against a cluster.
+// Package manifests contains tests that validate the behavior of gmp-operator against a cluster.
// To make tests simple and fast, the test suite runs the operator internally. The CRDs
// are expected to be installed out of band (along with the operator deployment itself in
// a real world setup).
diff --git a/pkg/operator/apis/monitoring/register.go b/pkg/operator/apis/monitoring/register.go
index a11930bfad..b81cb73d14 100644
--- a/pkg/operator/apis/monitoring/register.go
+++ b/pkg/operator/apis/monitoring/register.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package operator
+package monitoring
// GroupName is the group name used in this package.
const (
diff --git a/pkg/operator/apis/monitoring/v1/common_types.go b/pkg/operator/apis/monitoring/v1/common_types.go
index 0e2532a739..018d773320 100644
--- a/pkg/operator/apis/monitoring/v1/common_types.go
+++ b/pkg/operator/apis/monitoring/v1/common_types.go
@@ -29,13 +29,13 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
-// Environment variable for the current node that needs to be interpolated in generated
-// scrape configurations for a PodMonitoring resource.
+// EnvVarNodeName is the current node that needs to be interpolated in
+// generated scrape configurations for a PodMonitoring resource.
const EnvVarNodeName = "NODE_NAME"
// relabelingsForSelector generates a sequence of relabeling rules that implement
// the label selector for the meta labels produced by the Kubernetes service discovery.
-func relabelingsForSelector(selector metav1.LabelSelector, crd interface{}) ([]*relabel.Config, error) {
+func relabelingsForSelector(selector metav1.LabelSelector, crd any) ([]*relabel.Config, error) {
// Pick the correct labels based on the CRD type.
var objectLabelPresent, objectLabel prommodel.LabelName
switch crd.(type) {
@@ -104,6 +104,8 @@ func relabelingsForSelector(selector metav1.LabelSelector, crd interface{}) ([]*
SourceLabels: prommodel.LabelNames{objectLabelPresent + sanitizeLabelName(exp.Key)},
Regex: relabel.MustNewRegexp("true"),
})
+ default:
+ return nil, fmt.Errorf("unsupported operator: %q", exp.Operator)
}
}
diff --git a/pkg/operator/apis/monitoring/v1/http_types.go b/pkg/operator/apis/monitoring/v1/http_types.go
index 61d276c65c..3008702d50 100644
--- a/pkg/operator/apis/monitoring/v1/http_types.go
+++ b/pkg/operator/apis/monitoring/v1/http_types.go
@@ -244,6 +244,8 @@ func (c *TLS) ToPrometheusConfig(m PodMonitoringCRD, pool PrometheusSecretConfig
// OAuth2 is the OAuth2 client configuration.
type OAuth2 struct {
+ ProxyConfig `json:",inline"`
+
// ClientID is the public identifier for the client.
// +optional
ClientID string `json:"clientID"`
@@ -261,8 +263,7 @@ type OAuth2 struct {
EndpointParams map[string]string `json:"endpointParams,omitempty"`
// TLS configures the token request's TLS settings.
// +optional
- TLS *TLS `json:"tlsConfig,omitempty"`
- ProxyConfig `json:",inline"`
+ TLS *TLS `json:"tlsConfig,omitempty"`
}
// ToPrometheusConfig converts this object into the respective Prometheus configuration.
@@ -331,6 +332,8 @@ func (c *ProxyConfig) ToPrometheusConfig() (config.URL, error) {
// HTTPClientConfig stores HTTP-client configurations.
// +kubebuilder:validation:XValidation:rule="((has(self.authorization) ? 1 : 0) + (has(self.basicAuth) ? 1 : 0) + (has(self.oauth2) ? 1 : 0)) <= 1"
type HTTPClientConfig struct {
+ ProxyConfig `json:",inline"`
+
// Authorization is the HTTP authorization credentials for the targets.
// +optional
Authorization *Auth `json:"authorization,omitempty"`
@@ -342,8 +345,7 @@ type HTTPClientConfig struct {
TLS *TLS `json:"tls,omitempty"`
// OAuth2 is the OAuth2 client credentials used to fetch a token for the targets.
// +optional
- OAuth2 *OAuth2 `json:"oauth2,omitempty"`
- ProxyConfig `json:",inline"`
+ OAuth2 *OAuth2 `json:"oauth2,omitempty"`
}
// ToPrometheusConfig converts this object into the respective Prometheus configuration.
diff --git a/pkg/operator/apis/monitoring/v1/monitoring_types.go b/pkg/operator/apis/monitoring/v1/monitoring_types.go
index 82e0e7645b..b8baaf6953 100644
--- a/pkg/operator/apis/monitoring/v1/monitoring_types.go
+++ b/pkg/operator/apis/monitoring/v1/monitoring_types.go
@@ -44,10 +44,10 @@ type MonitoringCondition struct {
Status corev1.ConditionStatus `json:"status"`
// The last time this condition was updated.
// +optional
- LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"`
+ LastUpdateTime metav1.Time `json:"lastUpdateTime"`
// Last time the condition transitioned from one status to another.
// +optional
- LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"`
+ LastTransitionTime metav1.Time `json:"lastTransitionTime"`
// The reason for the condition's last transition.
// +optional
Reason string `json:"reason,omitempty"`
diff --git a/pkg/operator/apis/monitoring/v1/node_types.go b/pkg/operator/apis/monitoring/v1/node_types.go
index 8fe5385f29..79f95d14b4 100644
--- a/pkg/operator/apis/monitoring/v1/node_types.go
+++ b/pkg/operator/apis/monitoring/v1/node_types.go
@@ -68,7 +68,8 @@ type ClusterNodeTLS struct {
type ClusterNodeMonitoringSpec struct {
// Label selector that specifies which nodes are selected for this monitoring
// configuration. If left empty all nodes are selected.
- Selector metav1.LabelSelector `json:"selector,omitempty"`
+ // +kubebuilder:validation:Optional
+ Selector metav1.LabelSelector `json:"selector"`
// The endpoints to scrape on the selected nodes.
// +kubebuilder:validation:MinItems=1
// +kubebuilder:validation:MaxItems=10
@@ -81,8 +82,9 @@ type ClusterNodeMonitoringSpec struct {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type ClusterNodeMonitoringList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []ClusterNodeMonitoring `json:"items"`
+ metav1.ListMeta `json:"metadata"`
+
+ Items []ClusterNodeMonitoring `json:"items"`
}
// ClusterNodeMonitoring defines monitoring for a set of nodes.
@@ -93,14 +95,16 @@ type ClusterNodeMonitoringList struct {
// +kubebuilder:subresource:status
// +kubebuilder:storageversion
type ClusterNodeMonitoring struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.TypeMeta `json:",inline"`
+ // +optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Specification of desired node selection for target discovery by
// Prometheus.
Spec ClusterNodeMonitoringSpec `json:"spec"`
// Most recently observed status of the resource.
// +optional
- Status MonitoringStatus `json:"status,omitempty"`
+ Status MonitoringStatus `json:"status"`
}
func (c *ClusterNodeMonitoring) GetKey() string {
@@ -203,10 +207,12 @@ func (c *ClusterNodeMonitoring) endpointScrapeConfig(ep *ScrapeNodeEndpoint, pro
}
return buildPrometheusScrapeConfig(fmt.Sprintf("%s%s", c.GetKey(), metricsPath), discoveryCfgs, httpCfg, relabelCfgs, c.Spec.Limits,
- ScrapeEndpoint{Interval: ep.Interval,
+ ScrapeEndpoint{
+ Interval: ep.Interval,
Timeout: ep.Timeout,
Path: metricsPath,
MetricRelabeling: ep.MetricRelabeling,
Scheme: ep.Scheme,
- Params: ep.Params})
+ Params: ep.Params,
+ })
}
diff --git a/pkg/operator/apis/monitoring/v1/operator_types.go b/pkg/operator/apis/monitoring/v1/operator_types.go
index 76ddbcaedf..f6ab9cc0ed 100644
--- a/pkg/operator/apis/monitoring/v1/operator_types.go
+++ b/pkg/operator/apis/monitoring/v1/operator_types.go
@@ -29,13 +29,17 @@ import (
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:storageversion
type OperatorConfig struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.TypeMeta `json:",inline"`
+ // +optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Rules specifies how the operator configures and deploys rule-evaluator.
- Rules RuleEvaluatorSpec `json:"rules,omitempty"`
+ // +optional
+ Rules RuleEvaluatorSpec `json:"rules"`
// Collection specifies how the operator configures collection, including
// scraping and an integrated export to Google Cloud Monitoring.
- Collection CollectionSpec `json:"collection,omitempty"`
+ // +optional
+ Collection CollectionSpec `json:"collection"`
// Exports is an EXPERIMENTAL feature that specifies additional, optional endpoints to export to,
// on top of Google Cloud Monitoring collection.
// Note: To disable integrated export to Google Cloud Monitoring specify a non-matching filter in the "collection.filter" field.
@@ -44,9 +48,11 @@ type OperatorConfig struct {
// +kubebuilder:default={configSecret: {name: alertmanager, key: alertmanager.yaml}}
ManagedAlertmanager *ManagedAlertmanagerSpec `json:"managedAlertmanager,omitempty"`
// Features holds configuration for optional managed-collection features.
- Features OperatorFeatures `json:"features,omitempty"`
+ // +optional
+ Features OperatorFeatures `json:"features"`
// Scaling contains configuration options for scaling GMP.
- Scaling ScalingSpec `json:"scaling,omitempty"`
+ // +optional
+ Scaling ScalingSpec `json:"scaling"`
}
func (oc *OperatorConfig) Validate() error {
@@ -135,8 +141,10 @@ func validateSecretKeySelector(secretKeySelector *corev1.SecretKeySelector) erro
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type OperatorConfigList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []OperatorConfig `json:"items"`
+ // +optional
+ metav1.ListMeta `json:"metadata"`
+
+ Items []OperatorConfig `json:"items"`
}
// RuleEvaluatorSpec defines configuration for deploying rule-evaluator.
@@ -153,7 +161,8 @@ type RuleEvaluatorSpec struct {
// Should point to an instance of a query frontend that gives access to queryProjectID.
GeneratorURL string `json:"generatorUrl,omitempty"`
// Alerting contains how the rule-evaluator configures alerting.
- Alerting AlertingSpec `json:"alerting,omitempty"`
+ // +optional
+ Alerting AlertingSpec `json:"alerting"`
// A reference to GCP service account credentials with which the rule
// evaluator container is run. It needs to have metric read permissions
// against queryProjectId and metric write permissions against all projects
@@ -170,7 +179,8 @@ type CollectionSpec struct {
// specified in the OperatorConfig. The precedence behavior matches that of Prometheus.
ExternalLabels map[string]string `json:"externalLabels,omitempty"`
// Filter limits which metric data is sent to Cloud Monitoring (it doesn't apply to additional exports).
- Filter ExportFilters `json:"filter,omitempty"`
+ // +optional
+ Filter ExportFilters `json:"filter"`
// A reference to GCP service account credentials with which Prometheus collectors
// are run. It needs to have metric write permissions for all project IDs to which
// data is written.
@@ -191,9 +201,11 @@ type ExportSpec struct {
// OperatorFeatures holds configuration for optional managed-collection features.
type OperatorFeatures struct {
// Configuration of target status reporting.
- TargetStatus TargetStatusSpec `json:"targetStatus,omitempty"`
+ // +optional
+ TargetStatus TargetStatusSpec `json:"targetStatus"`
// Settings for the collector configuration propagation.
- Config ConfigSpec `json:"config,omitempty"`
+ // +optional
+ Config ConfigSpec `json:"config"`
}
// ConfigSpec holds configurations for the Prometheus configuration.
@@ -210,11 +222,14 @@ type TargetStatusSpec struct {
Enabled bool `json:"enabled,omitempty"`
}
+// CompressionType is the compression type.
// +kubebuilder:validation:Enum=none;gzip
type CompressionType string
-const CompressionNone CompressionType = "none"
-const CompressionGzip CompressionType = "gzip"
+const (
+ CompressionNone CompressionType = "none"
+ CompressionGzip CompressionType = "gzip"
+)
// KubeletScraping allows enabling scraping of the Kubelets' metric endpoints.
type KubeletScraping struct {
@@ -323,7 +338,8 @@ type SecretOrConfigMap struct {
// ScalingSpec defines configuration options for scaling GMP.
type ScalingSpec struct {
- VPA VPASpec `json:"vpa,omitempty"`
+ // +optional
+ VPA VPASpec `json:"vpa"`
}
// VPASpec defines configuration options for vertical pod autoscaling.
diff --git a/pkg/operator/apis/monitoring/v1/pod_config_test.go b/pkg/operator/apis/monitoring/v1/pod_config_test.go
index 6fdfdcd8db..191fc7a4be 100644
--- a/pkg/operator/apis/monitoring/v1/pod_config_test.go
+++ b/pkg/operator/apis/monitoring/v1/pod_config_test.go
@@ -251,7 +251,7 @@ func TestLabelMappingRelabelConfigs(t *testing.T) {
t.Errorf("returned unexpected error: %s", err)
}
if err == nil && c.expErr {
- t.Errorf("should have returned an error")
+ t.Error("should have returned an error")
}
if diff := cmp.Diff(c.expected, actual, cmpopts.IgnoreUnexported(relabel.Regexp{}, regexp.Regexp{})); diff != "" {
t.Errorf("returned unexpected config (-want, +got): %s", diff)
diff --git a/pkg/operator/apis/monitoring/v1/pod_types.go b/pkg/operator/apis/monitoring/v1/pod_types.go
index fdd7c033df..fe994226b2 100644
--- a/pkg/operator/apis/monitoring/v1/pod_types.go
+++ b/pkg/operator/apis/monitoring/v1/pod_types.go
@@ -54,8 +54,11 @@ type PodMonitoringCRD interface {
// +kubebuilder:validation:XValidation:rule="self.spec.endpoints.all(e, !has(e.tls) || !has(e.tls.key) || !has(e.tls.key.secret) || !has(e.tls.key.secret.__namespace__))",message="Namespace not allowed on PodMonitoring secret references.",reason="FieldValueForbidden"
// +kubebuilder:validation:XValidation:rule="self.spec.endpoints.all(e, !has(e.oauth2) || !has(e.oauth2.clientSecret) || !has(e.oauth2.clientSecret.secret) || !has(e.oauth2.clientSecret.secret.__namespace__))",message="Namespace not allowed on PodMonitoring secret references.",reason="FieldValueForbidden"
type PodMonitoring struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ // +kubebuilder:validation:Optional
+ metav1.TypeMeta `json:",inline"`
+ // +kubebuilder:validation:Optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Specification of desired Pod selection for target discovery by
// Prometheus.
Spec PodMonitoringSpec `json:"spec"`
@@ -88,8 +91,9 @@ func (p *PodMonitoring) GetMonitoringStatus() *MonitoringStatus {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type PodMonitoringList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []PodMonitoring `json:"items"`
+ metav1.ListMeta `json:"metadata"`
+
+ Items []PodMonitoring `json:"items"`
}
// ClusterPodMonitoring defines monitoring for a set of pods, scoped to all
@@ -101,8 +105,10 @@ type PodMonitoringList struct {
// +kubebuilder:subresource:status
// +kubebuilder:storageversion
type ClusterPodMonitoring struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.TypeMeta `json:",inline"`
+ // +optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Specification of desired Pod selection for target discovery by
// Prometheus.
Spec ClusterPodMonitoringSpec `json:"spec"`
@@ -135,8 +141,9 @@ func (c *ClusterPodMonitoring) GetMonitoringStatus() *MonitoringStatus {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type ClusterPodMonitoringList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []ClusterPodMonitoring `json:"items"`
+ metav1.ListMeta `json:"metadata"`
+
+ Items []ClusterPodMonitoring `json:"items"`
}
// PodMonitoringSpec contains specification parameters for PodMonitoring.
@@ -151,7 +158,8 @@ type PodMonitoringSpec struct {
// Labels to add to the Prometheus target for discovered endpoints.
// The `instance` label is always set to `:` or `:`
// if the scraped pod is controlled by a DaemonSet.
- TargetLabels TargetLabels `json:"targetLabels,omitempty"`
+ // +optional
+ TargetLabels TargetLabels `json:"targetLabels"`
// Limits to apply at scrape time.
Limits *ScrapeLimits `json:"limits,omitempty"`
// FilterRunning will drop any pods that are in the "Failed" or "Succeeded"
@@ -188,7 +196,8 @@ type ClusterPodMonitoringSpec struct {
// Labels to add to the Prometheus target for discovered endpoints.
// The `instance` label is always set to `:` or `:`
// if the scraped pod is controlled by a DaemonSet.
- TargetLabels ClusterTargetLabels `json:"targetLabels,omitempty"`
+ // +optional
+ TargetLabels ClusterTargetLabels `json:"targetLabels"`
// Limits to apply at scrape time.
Limits *ScrapeLimits `json:"limits,omitempty"`
// FilterRunning will drop any pods that are in the "Failed" or "Succeeded"
@@ -205,6 +214,9 @@ type ClusterPodMonitoringSpec struct {
// ScrapeEndpoint specifies a Prometheus metrics endpoint to scrape.
// +kubebuilder:validation:XValidation:rule="!has(self.timeout) || self.timeout <= self.interval",messageExpression="'scrape timeout (%s) must not be greater than scrape interval (%s)'.format([self.timeout, self.interval])"
type ScrapeEndpoint struct {
+ // Prometheus HTTP client configuration.
+ HTTPClientConfig `json:",inline"`
+
// Name or number of the port to scrape.
// The container metadata label is only populated if the port is referenced by name
// because port numbers are not unique across containers.
@@ -214,7 +226,7 @@ type ScrapeEndpoint struct {
// +kubebuilder:validation:Pattern="^[a-z0-9]([a-z0-9-]{0,251}[a-z0-9])?$"
// +kubebuilder:validation:XValidation:rule="self != 0",message="Port is required"
// +required
- Port intstr.IntOrString `json:"port,omitempty"`
+ Port intstr.IntOrString `json:"port"`
// Protocol scheme to use to scrape.
// +kubebuilder:validation:Enum=http;https
Scheme string `json:"scheme,omitempty"`
@@ -236,8 +248,6 @@ type ScrapeEndpoint struct {
// not permitted. The labelmap action is not permitted in general.
// +kubebuilder:validation:MaxItems=250
MetricRelabeling []RelabelingRule `json:"metricRelabeling,omitempty"`
- // Prometheus HTTP client configuration.
- HTTPClientConfig `json:",inline"`
}
// TargetLabels configures labels for the discovered Prometheus targets.
@@ -329,7 +339,8 @@ type ScrapeEndpointStatus struct {
// Total number of active, unhealthy targets.
UnhealthyTargets int64 `json:"unhealthyTargets,omitempty"`
// Last time this status was updated.
- LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"`
+ // +kubebuilder:validation:Optional
+ LastUpdateTime metav1.Time `json:"lastUpdateTime"`
// A fixed sample of targets grouped by error type.
SampleGroups []SampleGroup `json:"sampleGroups,omitempty"`
// Fraction of collectors included in status, bounded [0,1].
@@ -360,6 +371,7 @@ type SampleTarget struct {
// PodMonitoringStatus holds status information of a PodMonitoring resource.
type PodMonitoringStatus struct {
MonitoringStatus `json:",inline"`
+
// Represents the latest available observations of target state for each ScrapeEndpoint.
EndpointStatuses []ScrapeEndpointStatus `json:"endpointStatuses,omitempty"`
}
diff --git a/pkg/operator/apis/monitoring/v1/pod_types_test.go b/pkg/operator/apis/monitoring/v1/pod_types_test.go
index 97d671523d..0698db31aa 100644
--- a/pkg/operator/apis/monitoring/v1/pod_types_test.go
+++ b/pkg/operator/apis/monitoring/v1/pod_types_test.go
@@ -194,7 +194,7 @@ func TestSetMonitoringCondition(t *testing.T) {
// Get resolved podmonitorings.
if change != c.change {
- t.Errorf("unexpected change")
+ t.Error("unexpected change")
} else if diff := cmp.Diff(got, c.want); diff != "" {
t.Errorf("actual status differs from expected. diff: %s", diff)
}
diff --git a/pkg/operator/apis/monitoring/v1/rules_types.go b/pkg/operator/apis/monitoring/v1/rules_types.go
index 2a58401f12..d4c6b4d254 100644
--- a/pkg/operator/apis/monitoring/v1/rules_types.go
+++ b/pkg/operator/apis/monitoring/v1/rules_types.go
@@ -31,8 +31,10 @@ import (
// +kubebuilder:subresource:status
// +kubebuilder:storageversion
type Rules struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.TypeMeta `json:",inline"`
+ // +optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Specification of rules to record and alert on.
Spec RulesSpec `json:"spec"`
// Most recently observed status of the resource.
@@ -63,8 +65,10 @@ func (r *Rules) GetMonitoringStatus() *MonitoringStatus {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type RulesList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []Rules `json:"items"`
+ // +optional
+ metav1.ListMeta `json:"metadata"`
+
+ Items []Rules `json:"items"`
}
// ClusterRules defines Prometheus alerting and recording rules that are scoped
@@ -80,8 +84,10 @@ type RulesList struct {
// +kubebuilder:subresource:status
// +kubebuilder:storageversion
type ClusterRules struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.TypeMeta `json:",inline"`
+ // +optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Specification of rules to record and alert on.
Spec RulesSpec `json:"spec"`
// Most recently observed status of the resource.
@@ -112,8 +118,10 @@ func (r *ClusterRules) GetMonitoringStatus() *MonitoringStatus {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type ClusterRulesList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []ClusterRules `json:"items"`
+ // +optional
+ metav1.ListMeta `json:"metadata"`
+
+ Items []ClusterRules `json:"items"`
}
// GlobalRules defines Prometheus alerting and recording rules that are scoped
@@ -128,8 +136,10 @@ type ClusterRulesList struct {
// +kubebuilder:subresource:status
// +kubebuilder:storageversion
type GlobalRules struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.TypeMeta `json:",inline"`
+ // +optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Specification of rules to record and alert on.
Spec RulesSpec `json:"spec"`
// Most recently observed status of the resource.
@@ -160,8 +170,10 @@ func (r *GlobalRules) GetMonitoringStatus() *MonitoringStatus {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type GlobalRulesList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []GlobalRules `json:"items"`
+ // +optional
+ metav1.ListMeta `json:"metadata"`
+
+ Items []GlobalRules `json:"items"`
}
// RulesSpec contains specification parameters for a Rules resource.
diff --git a/pkg/operator/apis/monitoring/v1alpha1/types.go b/pkg/operator/apis/monitoring/v1alpha1/types.go
index 7fec2a3107..75bb7d0b84 100644
--- a/pkg/operator/apis/monitoring/v1alpha1/types.go
+++ b/pkg/operator/apis/monitoring/v1alpha1/types.go
@@ -25,20 +25,25 @@ import (
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:deprecatedversion
type OperatorConfig struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.TypeMeta `json:",inline"`
+ // +optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Rules specifies how the operator configures and deployes rule-evaluator.
- Rules RuleEvaluatorSpec `json:"rules,omitempty"`
+ // +optional
+ Rules RuleEvaluatorSpec `json:"rules"`
// Collection specifies how the operator configures collection.
- Collection CollectionSpec `json:"collection,omitempty"`
+ // +optional
+ Collection CollectionSpec `json:"collection"`
}
// OperatorConfigList is a list of OperatorConfigs.
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type OperatorConfigList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []OperatorConfig `json:"items"`
+ metav1.ListMeta `json:"metadata"`
+
+ Items []OperatorConfig `json:"items"`
}
// RuleEvaluatorSpec defines configuration for deploying rule-evaluator.
@@ -52,7 +57,8 @@ type RuleEvaluatorSpec struct {
// from the environment.
QueryProjectID string `json:"queryProjectID,omitempty"`
// Alerting contains how the rule-evaluator configures alerting.
- Alerting AlertingSpec `json:"alerting,omitempty"`
+ // +optional
+ Alerting AlertingSpec `json:"alerting"`
// A reference to GCP service account credentials with which the rule
// evaluator container is run. It needs to have metric read permissions
// against queryProjectId and metric write permissions against all projects
@@ -69,7 +75,8 @@ type CollectionSpec struct {
// of Prometheus.
ExternalLabels map[string]string `json:"externalLabels,omitempty"`
// Filter limits which metric data is sent to Cloud Monitoring.
- Filter ExportFilters `json:"filter,omitempty"`
+ // +optional
+ Filter ExportFilters `json:"filter"`
// A reference to GCP service account credentials with which Prometheus collectors
// are run. It needs to have metric write permissions for all project IDs to which
// data is written.
@@ -127,7 +134,7 @@ type Authorization struct {
Credentials *corev1.SecretKeySelector `json:"credentials,omitempty"`
}
-// SafeTLSConfig specifies TLS configuration parameters from Kubernetes resources.
+// TLSConfig specifies TLS configuration parameters from Kubernetes resources.
type TLSConfig struct {
// Struct containing the CA cert to use for the targets.
CA *SecretOrConfigMap `json:"ca,omitempty"`
@@ -156,8 +163,10 @@ type SecretOrConfigMap struct {
// +kubebuilder:subresource:status
// +kubebuilder:deprecatedversion
type PodMonitoring struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.TypeMeta `json:",inline"`
+ // +optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Specification of desired Pod selection for target discovery by
// Prometheus.
Spec PodMonitoringSpec `json:"spec"`
@@ -170,8 +179,9 @@ type PodMonitoring struct {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type PodMonitoringList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []PodMonitoring `json:"items"`
+ metav1.ListMeta `json:"metadata"`
+
+ Items []PodMonitoring `json:"items"`
}
// ClusterPodMonitoring defines monitoring for a set of pods.
@@ -182,8 +192,10 @@ type PodMonitoringList struct {
// +kubebuilder:subresource:status
// +kubebuilder:deprecatedversion
type ClusterPodMonitoring struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.TypeMeta `json:",inline"`
+ // +optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Specification of desired Pod selection for target discovery by
// Prometheus.
Spec ClusterPodMonitoringSpec `json:"spec"`
@@ -196,8 +208,9 @@ type ClusterPodMonitoring struct {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type ClusterPodMonitoringList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []ClusterPodMonitoring `json:"items"`
+ metav1.ListMeta `json:"metadata"`
+
+ Items []ClusterPodMonitoring `json:"items"`
}
// PodMonitoringSpec contains specification parameters for PodMonitoring.
@@ -208,7 +221,8 @@ type PodMonitoringSpec struct {
// The endpoints to scrape on the selected pods.
Endpoints []ScrapeEndpoint `json:"endpoints"`
// Labels to add to the Prometheus target for discovered endpoints.
- TargetLabels TargetLabels `json:"targetLabels,omitempty"`
+ // +optional
+ TargetLabels TargetLabels `json:"targetLabels"`
// Limits to apply at scrape time.
Limits *ScrapeLimits `json:"limits,omitempty"`
}
@@ -237,7 +251,8 @@ type ClusterPodMonitoringSpec struct {
// The endpoints to scrape on the selected pods.
Endpoints []ScrapeEndpoint `json:"endpoints"`
// Labels to add to the Prometheus target for discovered endpoints
- TargetLabels TargetLabels `json:"targetLabels,omitempty"`
+ // +optional
+ TargetLabels TargetLabels `json:"targetLabels"`
// Limits to apply at scrape time.
Limits *ScrapeLimits `json:"limits,omitempty"`
}
@@ -339,10 +354,10 @@ type MonitoringCondition struct {
Status corev1.ConditionStatus `json:"status"`
// The last time this condition was updated.
// +optional
- LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"`
+ LastUpdateTime metav1.Time `json:"lastUpdateTime"`
// Last time the condition transitioned from one status to another.
// +optional
- LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"`
+ LastTransitionTime metav1.Time `json:"lastTransitionTime"`
// The reason for the condition's last transition.
// +optional
Reason string `json:"reason,omitempty"`
@@ -362,8 +377,10 @@ type MonitoringCondition struct {
// +kubebuilder:subresource:status
// +kubebuilder:deprecatedversion
type Rules struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.TypeMeta `json:",inline"`
+ // +optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Specification of rules to record and alert on.
Spec RulesSpec `json:"spec"`
// Most recently observed status of the resource.
@@ -375,8 +392,9 @@ type Rules struct {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type RulesList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []Rules `json:"items"`
+ metav1.ListMeta `json:"metadata"`
+
+ Items []Rules `json:"items"`
}
// ClusterRules defines Prometheus alerting and recording rules that are scoped
@@ -392,8 +410,10 @@ type RulesList struct {
// +kubebuilder:subresource:status
// +kubebuilder:deprecatedversion
type ClusterRules struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.TypeMeta `json:",inline"`
+ // +optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Specification of rules to record and alert on.
Spec RulesSpec `json:"spec"`
// Most recently observed status of the resource.
@@ -405,8 +425,9 @@ type ClusterRules struct {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type ClusterRulesList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []ClusterRules `json:"items"`
+ metav1.ListMeta `json:"metadata"`
+
+ Items []ClusterRules `json:"items"`
}
// GlobalRules defines Prometheus alerting and recording rules that are scoped
@@ -421,8 +442,10 @@ type ClusterRulesList struct {
// +kubebuilder:subresource:status
// +kubebuilder:deprecatedversion
type GlobalRules struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.TypeMeta `json:",inline"`
+ // +optional
+ metav1.ObjectMeta `json:"metadata"`
+
// Specification of rules to record and alert on.
Spec RulesSpec `json:"spec"`
// Most recently observed status of the resource.
@@ -434,8 +457,9 @@ type GlobalRules struct {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type GlobalRulesList struct {
metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []GlobalRules `json:"items"`
+ metav1.ListMeta `json:"metadata"`
+
+ Items []GlobalRules `json:"items"`
}
// RulesSpec contains specification parameters for a Rules resource.
diff --git a/pkg/operator/collection.go b/pkg/operator/collection.go
index 1f7d190e9e..f92bd7acdc 100644
--- a/pkg/operator/collection.go
+++ b/pkg/operator/collection.go
@@ -137,11 +137,11 @@ func newCollectionReconciler(c client.Client, opts Options) *collectionReconcile
func patchMonitoringStatus(ctx context.Context, kubeClient client.Client, obj client.Object, status *monitoringv1.MonitoringStatus) error {
// TODO(TheSpiritXIII): In the future, change this to server side apply as opposed to patch.
- patchStatus := map[string]interface{}{
+ patchStatus := map[string]any{
"conditions": status.Conditions,
"observedGeneration": status.ObservedGeneration,
}
- patchObject := map[string]interface{}{"status": patchStatus}
+ patchObject := map[string]any{"status": patchStatus}
patchBytes, err := json.Marshal(patchObject)
if err != nil {
diff --git a/pkg/operator/collection_test.go b/pkg/operator/collection_test.go
index fc7f331b9f..a3c039eb7f 100644
--- a/pkg/operator/collection_test.go
+++ b/pkg/operator/collection_test.go
@@ -47,9 +47,9 @@ func TestMain(m *testing.M) {
testScheme, err = NewScheme()
if err != nil {
fmt.Fprintf(os.Stderr, "Unable to get scheme: %s", err)
- os.Exit(1)
+ os.Exit(1) //nolint:revive // Handle os.Exit before m.Run()
}
- os.Exit(m.Run())
+ m.Run()
}
func newFakeClientBuilder() *fake.ClientBuilder {
diff --git a/pkg/operator/endpoint_status_builder.go b/pkg/operator/endpoint_status_builder.go
index d769ff1396..4dc87d453f 100644
--- a/pkg/operator/endpoint_status_builder.go
+++ b/pkg/operator/endpoint_status_builder.go
@@ -276,10 +276,7 @@ func (b *scrapeEndpointStatusBuilder) build() monitoringv1.ScrapeEndpointStatus
rhsInstance := sampleGroup.SampleTargets[j].Labels["instance"]
return lhsInstance < rhsInstance
})
- sampleTargetsSize := len(sampleGroup.SampleTargets)
- if sampleTargetsSize > maxSampleTargetSize {
- sampleTargetsSize = maxSampleTargetSize
- }
+ sampleTargetsSize := min(len(sampleGroup.SampleTargets), maxSampleTargetSize)
sampleGroup.SampleTargets = sampleGroup.SampleTargets[0:sampleTargetsSize]
b.status.SampleGroups = append(b.status.SampleGroups, *sampleGroup)
}
diff --git a/pkg/operator/operator.go b/pkg/operator/operator.go
index 9d6d665316..4e308aaf79 100644
--- a/pkg/operator/operator.go
+++ b/pkg/operator/operator.go
@@ -378,6 +378,8 @@ func (o *Operator) cleanupOldResources(ctx context.Context) error {
o.logger.Info("delete legacy ValidatingWebHookConfiguration was not allowed. Please remove it manually")
case !apierrors.IsNotFound(err):
return fmt.Errorf("delete legacy ValidatingWebHookConfiguration failed: %w", err)
+ default:
+ // Noop
}
}
@@ -403,6 +405,8 @@ func (o *Operator) cleanupOldResources(ctx context.Context) error {
o.logger.Info("delete collector was not allowed. Please remove it manually", "err", err)
case !apierrors.IsNotFound(err):
return fmt.Errorf("cleanup collector failed: %w", err)
+ default:
+ // Noop
}
}
}
@@ -423,6 +427,8 @@ func (o *Operator) cleanupOldResources(ctx context.Context) error {
o.logger.Info("delete rule-evaluator was not allowed. Please remove it manually", "err", err)
case !apierrors.IsNotFound(err):
return fmt.Errorf("cleanup rule-evaluator failed: %w", err)
+ default:
+ // Noop
}
}
}
@@ -440,12 +446,15 @@ type namespacedNamePredicate struct {
func (o namespacedNamePredicate) Create(e event.CreateEvent) bool {
return e.Object.GetNamespace() == o.namespace && e.Object.GetName() == o.name
}
+
func (o namespacedNamePredicate) Update(e event.UpdateEvent) bool {
return e.ObjectNew.GetNamespace() == o.namespace && e.ObjectNew.GetName() == o.name
}
+
func (o namespacedNamePredicate) Delete(e event.DeleteEvent) bool {
return e.Object.GetNamespace() == o.namespace && e.Object.GetName() == o.name
}
+
func (o namespacedNamePredicate) Generic(e event.GenericEvent) bool {
return e.Object.GetNamespace() == o.namespace && e.Object.GetName() == o.name
}
diff --git a/pkg/operator/operator_config.go b/pkg/operator/operator_config.go
index ecf309debc..61417e62d8 100644
--- a/pkg/operator/operator_config.go
+++ b/pkg/operator/operator_config.go
@@ -17,6 +17,7 @@ package operator
import (
"context"
"fmt"
+ "maps"
"path"
"strings"
@@ -363,9 +364,7 @@ func (r *operatorConfigReconciler) ensureRuleEvaluatorSecrets(ctx context.Contex
},
Data: make(map[string][]byte),
}
- for f, b := range data {
- secret.Data[f] = b
- }
+ maps.Copy(secret.Data, data)
if err := r.client.Update(ctx, secret); apierrors.IsNotFound(err) {
if err := r.client.Create(ctx, secret); err != nil {
diff --git a/pkg/operator/operator_test.go b/pkg/operator/operator_test.go
index ac2d99ee53..d8e995bec9 100644
--- a/pkg/operator/operator_test.go
+++ b/pkg/operator/operator_test.go
@@ -143,7 +143,7 @@ func TestCleanupOldResources(t *testing.T) {
t.Errorf("collector should be deleted but found: %+v", gotDS)
}
} else if gotDS.Name != ds.Name || gotDS.Namespace != ds.Namespace {
- t.Errorf("collector DaemonSet differs")
+ t.Error("collector DaemonSet differs")
}
// Check if rule-evaluator Deployment was preserved.
@@ -157,7 +157,7 @@ func TestCleanupOldResources(t *testing.T) {
t.Errorf("rule-evaluator should be deleted but found: %+v", gotDeploy)
}
} else if gotDeploy.Name != deploy.Name || gotDeploy.Namespace != deploy.Namespace {
- t.Errorf("rule-evaluator Deployment differs")
+ t.Error("rule-evaluator Deployment differs")
}
})
}
diff --git a/pkg/operator/scaling_test.go b/pkg/operator/scaling_test.go
index d3364c1dcf..58b948d575 100644
--- a/pkg/operator/scaling_test.go
+++ b/pkg/operator/scaling_test.go
@@ -85,7 +85,7 @@ func TestApplyVPA(t *testing.T) {
case err != nil && !tc.wantErr:
t.Errorf("unexpected error: %v", err)
case err == nil && tc.wantErr:
- t.Errorf("expected error, but got no error")
+ t.Error("expected error, but got no error")
case err != nil && tc.wantErr:
// Ok
case err == nil && !tc.wantErr:
@@ -101,6 +101,8 @@ func TestApplyVPA(t *testing.T) {
if err := tc.c.Get(t.Context(), client.ObjectKey{Name: ruleEvaluatorVPAName}, &autoscalingv1.VerticalPodAutoscaler{}); err != nil {
t.Error(err)
}
+ default:
+ // Ok
}
})
}
@@ -169,7 +171,7 @@ func TestDeleteVPA(t *testing.T) {
case err != nil && !tc.wantErr:
t.Errorf("unexpected error: %v", err)
case err == nil && tc.wantErr:
- t.Errorf("expected error, but got no error")
+ t.Error("expected error, but got no error")
case err != nil && tc.wantErr:
// Ok
case err == nil && !tc.wantErr:
@@ -185,6 +187,8 @@ func TestDeleteVPA(t *testing.T) {
if err := tc.c.Get(t.Context(), client.ObjectKey{Name: ruleEvaluatorVPAName}, &autoscalingv1.VerticalPodAutoscaler{}); !apierrors.IsNotFound(err) {
t.Errorf("expected not found, got %s", err)
}
+ default:
+ // Ok
}
})
}
diff --git a/pkg/operator/target_status.go b/pkg/operator/target_status.go
index 5cdca38234..5c338a6ea4 100644
--- a/pkg/operator/target_status.go
+++ b/pkg/operator/target_status.go
@@ -304,10 +304,10 @@ func fetchTargets(ctx context.Context, logger logr.Logger, opts Options, httpCli
}
func patchPodMonitoringStatus(ctx context.Context, kubeClient client.Client, object client.Object, status *monitoringv1.PodMonitoringStatus) error {
- patchStatus := map[string]interface{}{
+ patchStatus := map[string]any{
"endpointStatuses": status.EndpointStatuses,
}
- patchObject := map[string]interface{}{"status": patchStatus}
+ patchObject := map[string]any{"status": patchStatus}
patchBytes, err := json.Marshal(patchObject)
if err != nil {
@@ -390,7 +390,7 @@ func getTarget(ctx context.Context, _ logr.Logger, httpClient *http.Client, port
if pod.Status.PodIP == "" {
return nil, errors.New("pod does not have IP allocated")
}
- podURL := fmt.Sprintf("http://%s:%d", pod.Status.PodIP, port)
+ podURL := fmt.Sprintf("http://%s:%d", pod.Status.PodIP, port) //nolint:revive // Allow insecure http client
client, err := api.NewClient(api.Config{
Address: podURL,
Client: httpClient,
diff --git a/pkg/operator/target_status_test.go b/pkg/operator/target_status_test.go
index 3fa98fb5a0..ace73007c9 100644
--- a/pkg/operator/target_status_test.go
+++ b/pkg/operator/target_status_test.go
@@ -182,7 +182,7 @@ func targetFetchFromMap(m map[string]*prometheusv1.TargetsResult) getTargetFn {
}
func TestUpdateTargetStatus(t *testing.T) {
- var date = metav1.Date(2022, time.January, 4, 0, 0, 0, 0, time.UTC)
+ date := metav1.Date(2022, time.January, 4, 0, 0, 0, 0, time.UTC)
testCases := expand([]updateTargetStatusTestCase{
// All empty -- nothing happens.
@@ -369,7 +369,8 @@ func TestUpdateTargetStatus(t *testing.T) {
},
},
},
- }},
+ },
+ },
},
// Single healthy target with no error, with non-matching PodMonitoring.
{
@@ -467,7 +468,8 @@ func TestUpdateTargetStatus(t *testing.T) {
Port: intstr.FromString("metrics"),
}},
},
- }},
+ },
+ },
},
// Single healthy target with an error, with matching PodMonitoring.
{
@@ -519,7 +521,8 @@ func TestUpdateTargetStatus(t *testing.T) {
},
},
},
- }},
+ },
+ },
},
// Single unhealthy target with an error, with matching PodMonitoring.
{
@@ -571,7 +574,8 @@ func TestUpdateTargetStatus(t *testing.T) {
},
},
},
- }},
+ },
+ },
},
// One healthy and one unhealthy target.
{
@@ -642,7 +646,8 @@ func TestUpdateTargetStatus(t *testing.T) {
},
},
},
- }},
+ },
+ },
},
// Multiple targets with multiple endpoints.
{
@@ -763,7 +768,8 @@ func TestUpdateTargetStatus(t *testing.T) {
},
},
},
- }},
+ },
+ },
},
// Multiple unhealthy target with different errors.
{
@@ -905,7 +911,8 @@ func TestUpdateTargetStatus(t *testing.T) {
},
},
},
- }},
+ },
+ },
},
// Multiple unhealthy targets, one cut-off.
{
@@ -1095,7 +1102,8 @@ func TestUpdateTargetStatus(t *testing.T) {
},
},
},
- }},
+ },
+ },
},
// Multiple healthy targets with one non-matching PodMonitoring.
{
@@ -1352,7 +1360,7 @@ func TestUpdateTargetStatus(t *testing.T) {
if err != nil && (testCase.expErr == nil || !testCase.expErr(err)) {
t.Fatalf("unexpected error updating target status: %s", err)
} else if err == nil && (testCase.expErr != nil) {
- t.Fatalf("expected error missing when updating target status")
+ t.Fatal("expected error missing when updating target status")
}
for _, podMonitoring := range testCase.podMonitorings {
@@ -1858,11 +1866,11 @@ func TestFetchTargets(t *testing.T) {
diff := cmp.Diff(targets, targetsExpected)
if diff != "" {
- t.Errorf("Targets:")
+ t.Error("Targets:")
for i, target := range targets {
t.Errorf("%d: %v", i, target)
}
- t.Errorf("Targets Expected:")
+ t.Error("Targets Expected:")
for i, target := range targetsExpected {
t.Errorf("%d: %v", i, target)
}
diff --git a/pkg/operator/webhook.go b/pkg/operator/webhook.go
index 4944fdc5ac..90048a154e 100644
--- a/pkg/operator/webhook.go
+++ b/pkg/operator/webhook.go
@@ -12,7 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-// Package operator contains the Prometheus
package operator
import (
diff --git a/pkg/operator/webhook_test.go b/pkg/operator/webhook_test.go
index f1ef2398df..f38f126f3e 100644
--- a/pkg/operator/webhook_test.go
+++ b/pkg/operator/webhook_test.go
@@ -12,7 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-// Package operator contains the Prometheus
package operator
import (
@@ -142,10 +141,10 @@ func TestEnsureCertsSelfSigned(t *testing.T) {
// Cert and key will be randomly generated, check if they exisits.
outCert, outKey := readKeyAndCertFiles(dir, t)
if len(outKey) == 0 {
- t.Errorf("expected generated key but was empty")
+ t.Error("expected generated key but was empty")
}
if len(outCert) == 0 {
- t.Errorf("expected generated cert but was empty")
+ t.Error("expected generated cert but was empty")
}
// self-generate case, ca is equal to crt.
if string(outCert) != string(caBundle) {
diff --git a/pkg/ui/assets_embed.go b/pkg/ui/assets_embed.go
index 99a1c9ebce..0e4328c463 100644
--- a/pkg/ui/assets_embed.go
+++ b/pkg/ui/assets_embed.go
@@ -13,7 +13,6 @@
// limitations under the License.
//go:build builtinassets
-// +build builtinassets
package ui
diff --git a/pkg/ui/assets_local.go b/pkg/ui/assets_local.go
index 9ece033688..5b2ec06985 100644
--- a/pkg/ui/assets_local.go
+++ b/pkg/ui/assets_local.go
@@ -18,7 +18,7 @@ package ui
import "net/http"
-// Serve assets from a static directory if they have not been compiled into the binary.
+// Assets serves assets from a static directory if they have not been compiled into the binary.
//
// It always attempts to serve anything "static/" in the current working directory as this is for
// development purposes only.
diff --git a/pkg/ui/ui.go b/pkg/ui/ui.go
index ca9af00b81..be6bcd7d1f 100644
--- a/pkg/ui/ui.go
+++ b/pkg/ui/ui.go
@@ -37,7 +37,7 @@ func Handler(externalURL *url.URL) http.Handler {
})
// Serve UI index.
- var reactRouterPaths = []string{
+ reactRouterPaths := []string{
"/graph",
}
for _, p := range reactRouterPaths {