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.

@@ -1078,6 +1084,7 @@ Kubernetes meta/v1.ObjectMeta @@ -1131,6 +1138,21 @@ RulesStatus + + + + - - - -
+(Optional) Refer to the Kubernetes API documentation for the fields of the metadata field.
+ProxyConfig
+ + +ProxyConfig + + +
+

+(Members of ProxyConfig are embedded into this type.) +

+
authorization
@@ -1185,21 +1207,6 @@ OAuth2

OAuth2 is the OAuth2 client credentials used to fetch a token for the targets.

-ProxyConfig
- - -ProxyConfig - - -
-

-(Members of ProxyConfig are embedded into this 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 {