From 99a846cc1a47ea14e237562a3f05638867b6c524 Mon Sep 17 00:00:00 2001 From: Maria Ines Parnisari Date: Tue, 23 Jun 2026 10:09:51 -0700 Subject: [PATCH] chore: bump dependencies and run linting --- CHANGELOG.md | 1 + Dockerfile | 2 +- Dockerfile.release | 2 +- .../restgateway_integration_test.go | 3 +- .../schemawatch_integration_test.go | 4 +- .../integration/serve_integration_test.go | 7 +- .../servetesting_integration_test.go | 3 +- .../integration/servetesting_race_test.go | 3 +- .../memory_protection_integration_test.go | 3 +- e2e/cockroach/cockroach.go | 12 +- e2e/go.mod | 80 ++- e2e/go.sum | 270 ++++--- e2e/newenemy/newenemy_test.go | 15 +- e2e/spice/spicedb.go | 3 +- go.mod | 153 ++-- go.sum | 306 ++++---- internal/datasets/basesubjectset.go | 70 +- internal/datasets/subjectset_test.go | 123 ++-- internal/datasets/subjectsetbytype_test.go | 3 +- internal/datastore/common/sql.go | 3 +- internal/datastore/crdb/crdb_test.go | 4 +- .../crdb/partitioner_integration_test.go | 27 +- internal/datastore/crdb/partitioner_test.go | 35 +- internal/datastore/memdb/readonly.go | 2 +- internal/datastore/mysql/datastore_test.go | 3 +- internal/datastore/mysql/locks.go | 3 +- internal/datastore/mysql/migrations/driver.go | 3 +- .../datastore/mysql/migrations/manager.go | 3 +- .../zz_migration.0001_initial_schema.go | 15 +- ..._migration.0002_add_unique_datastore_id.go | 6 +- .../zz_migration.0003_add_ns_config_id.go | 3 +- .../zz_migration.0004_add_caveat.go | 9 +- .../zz_migration.0005_extend_object_id.go | 3 +- ...on.0006_convert_definitions_to_longblob.go | 9 +- ...igration.0007_watch_api_rel_tuple_index.go | 6 +- ...on.0008_add_relationship_counters_table.go | 6 +- ....0009_add_metadata_to_transaction_table.go | 6 +- .../zz_migration.0010_add_expiration.go | 9 +- .../zz_migration.0011_add_schema_tables.go | 9 +- ...gration.0013_identifiers_case_sensitive.go | 6 +- internal/datastore/mysql/readwrite.go | 3 +- internal/datastore/postgres/log_tracer.go | 2 +- .../zz_migration.0006_add_gc_index.go | 3 +- .../zz_migration.0008_add_ns_config_id.go | 3 +- ...migration.0011_backfill_xid_add_indices.go | 3 +- ...ation.0023_add_index_for_transaction_gc.go | 3 +- .../postgres/postgres_shared_test.go | 39 +- internal/datastore/postgres/reader.go | 3 +- internal/datastore/postgres/readwrite.go | 6 +- internal/datastore/postgres/xid8.go | 8 +- internal/datastore/proxy/observable.go | 3 +- .../proxy/relationshipintegrity_test.go | 16 +- .../proxy/schemacaching/intervaltracker.go | 3 +- .../proxy/schemacaching/standardcache.go | 6 +- .../proxy/schemacaching/standardcache_test.go | 12 +- internal/datastore/spanner/caveat_test.go | 3 +- internal/datastore/spanner/reader.go | 6 +- internal/datastore/spanner/readwrite.go | 3 +- internal/datastore/spanner/spanner.go | 20 +- internal/datastore/spanner/spanner_test.go | 3 +- internal/datastore/spanner/watch.go | 3 +- .../foundsubject_test.go | 6 +- .../developmentmembership/membership_test.go | 346 +++++---- .../trackingsubjectset_test.go | 61 +- internal/dispatch/dispatch_optimizer_test.go | 6 +- internal/dispatch/graph/expand_test.go | 78 ++- internal/dispatch/graph/graph.go | 3 +- internal/dispatch/keys/computed.go | 21 +- internal/dispatch/keys/computed_test.go | 2 +- internal/dispatch/remote/cluster.go | 6 +- internal/dispatch/remote/cluster_test.go | 3 +- internal/fdw/explain/explain.go | 3 +- internal/fdw/pgserver_e2e_test.go | 13 +- internal/fdw/tables/relationships_test.go | 3 +- internal/graph/check.go | 6 +- internal/graph/computed/computecheck_test.go | 9 +- internal/graph/cursors_test.go | 21 +- internal/graph/lookupresources2.go | 6 +- internal/graph/lookupresources3.go | 9 +- internal/graph/lookupsubjects.go | 3 +- internal/graph/lr2streams.go | 3 +- internal/graph/membershipset_test.go | 3 +- .../perfinsights/perfinsights_test.go | 3 +- internal/relationships/validation.go | 6 +- .../benchmark_dispatchqueryplan_test.go | 6 +- .../benchmark_executors_test.go | 9 +- .../integrationtesting/benchmark_test.go | 6 +- .../integrationtesting/consistency_test.go | 48 +- .../consistencytestutil/accessibilityset.go | 3 +- .../dockertests/perf_test.go | 2 +- .../query_plan_consistency_test.go | 6 +- .../queryconsistency/query_plan_grpc_test.go | 6 +- internal/services/v1/errors.go | 3 +- internal/services/v1/experimental_test.go | 16 +- internal/services/v1/permissions.go | 12 +- internal/services/v1/permissions_test.go | 96 +-- internal/services/v1/relationships_test.go | 3 +- internal/services/v1/schema_test.go | 3 +- internal/testfixtures/datastore.go | 42 +- internal/testserver/cluster.go | 3 +- .../testserver/datastore/config/config.go | 3 +- internal/testutil/subjects.go | 9 +- magefiles/go.mod | 289 ++++---- magefiles/go.sum | 661 +++++++++--------- magefiles/lint.go | 5 +- pkg/benchmarks/check_wide_direct.go | 3 +- pkg/benchmarks/check_wide_groups.go | 6 +- pkg/benchmarks/deep_arrow.go | 3 +- pkg/benchmarks/double_wide_arrow.go | 9 +- pkg/benchmarks/lookup_intersection.go | 3 +- pkg/benchmarks/wide_arrow.go | 6 +- pkg/benchmarks/wide_groups.go | 15 +- pkg/caveats/replacer/inlining.go | 6 +- pkg/caveats/types/basic.go | 6 +- pkg/caveats/types/ipaddress.go | 6 +- pkg/cmd/server/defaults.go | 20 +- pkg/cmd/server/middleware_test.go | 9 +- pkg/cmd/server/otel.go | 5 +- pkg/cmd/server/server.go | 12 +- pkg/cmd/server/server_test.go | 12 +- pkg/cmd/termination/termination.go | 3 +- pkg/cmd/testserver/testserver.go | 6 +- pkg/cmd/util/util.go | 3 +- pkg/datalayer/datalayer_test.go | 3 +- pkg/datalayer/schema_adapter_test.go | 3 +- pkg/datalayer/schemamode.go | 3 +- pkg/datastore/gc_test.go | 2 +- pkg/datastore/test/namespace.go | 6 +- pkg/datastore/test/storedschema.go | 21 +- pkg/datastore/test/watch.go | 107 +-- pkg/development/check.go | 3 +- pkg/development/schema_test.go | 6 +- pkg/development/validation.go | 18 +- pkg/development/warnings.go | 2 +- pkg/diff/namespace/diff_test.go | 3 +- pkg/promutil/promutil.go | 2 +- pkg/query/arrow_reversal_test.go | 3 +- pkg/query/build_tree_test.go | 120 ++-- pkg/query/datastore.go | 27 +- .../queryopt/alias_chain_collapse_test.go | 15 +- pkg/query/reader.go | 12 +- pkg/query/trace.go | 3 +- pkg/query/tracing_test.go | 3 +- pkg/query/wildcard_arrow_test.go | 24 +- pkg/query/wildcard_datastore_test.go | 30 +- pkg/query/wildcard_multirelation_test.go | 3 +- pkg/query/wildcard_propagation_test.go | 27 +- pkg/query/wildcard_subjects_test.go | 6 +- pkg/schema/definition_test.go | 30 +- pkg/schema/typesystem_test.go | 48 +- pkg/schema/typesystem_validation.go | 9 +- pkg/schema/v2/walk.go | 9 +- pkg/schema/v2/walk_arrow_test.go | 33 +- pkg/schemadsl/compiler/compiler_test.go | 306 +++++--- pkg/schemadsl/generator/generator_test.go | 30 +- pkg/schemadsl/parser/parser_impl.go | 4 +- pkg/schemadsl/parser/parser_test.go | 2 +- pkg/testutil/proto.go | 3 +- pkg/testutil/require.go | 7 +- pkg/tuple/structs_test.go | 4 +- pkg/zedtoken/zedtoken_test.go | 12 +- tools/analyzers/go.work.sum | 3 + 162 files changed, 2483 insertions(+), 1837 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e943e06286..67c99d04d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - Schema: reads inside write transactions now use a cheap hash-only lookup (`schema_revision`) to check the cache before loading the full schema blob, reducing DB round-trips on cache hits (https://github.com/authzed/spicedb/pull/3160) - Updated the Prometheus buckets for `grpc_server_handling_seconds` and `spicedb_datastore_query_latency` to be able to correlate them (https://github.com/authzed/spicedb/pull/3188) +- Bumped dependencies (https://github.com/authzed/spicedb/pull/3192) ### Fixed - When SpiceDB loses a connection to a CockroachDB node, every read happening in the server blocks for a short period of time (https://github.com/authzed/spicedb/pull/3181) diff --git a/Dockerfile b/Dockerfile index 90991f9b68..6168e14523 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # use `docker buildx imagetools inspect ` to get the multi-platform sha256 -FROM golang:1.26.4-alpine@sha256:f23e8b227fb4493eabe03bede4d5a32d04092da71962f1fb79b5f7d1e6c2a17f AS spicedb-builder +FROM golang:1.26.4-alpine@sha256:3ad57304ad93bbec8548a0437ad9e06a455660655d9af011d58b993f6f615648 AS spicedb-builder WORKDIR /go/src/app RUN apk update && apk add --no-cache git COPY . . diff --git a/Dockerfile.release b/Dockerfile.release index 7c4d9c231a..df83b96c1e 100644 --- a/Dockerfile.release +++ b/Dockerfile.release @@ -1,6 +1,6 @@ # vim: syntax=dockerfile # use `docker buildx imagetools inspect ` to get the multi-platform sha256 -ARG BASE=cgr.dev/chainguard/static@sha256:99a5f826e71115aef9f63368120a6aa518323e052297718e9bf084fb84def93c +ARG BASE=cgr.dev/chainguard/static@sha256:77d8b8925dc27970ec2f48243f44c7a260d52c49cd778288e4ee97566e0cb75b FROM $BASE ARG TARGETOS diff --git a/cmd/spicedb/integration/restgateway_integration_test.go b/cmd/spicedb/integration/restgateway_integration_test.go index eb87943866..0a69428f60 100644 --- a/cmd/spicedb/integration/restgateway_integration_test.go +++ b/cmd/spicedb/integration/restgateway_integration_test.go @@ -15,7 +15,8 @@ import ( func TestRESTGateway(t *testing.T) { require := require.New(t) - tester, err := newTester(t, + tester, err := newTester( + t, &dockertest.RunOptions{ Repository: "authzed/spicedb", Tag: "ci", diff --git a/cmd/spicedb/integration/schemawatch_integration_test.go b/cmd/spicedb/integration/schemawatch_integration_test.go index 83938fa3c5..d3c74f0fee 100644 --- a/cmd/spicedb/integration/schemawatch_integration_test.go +++ b/cmd/spicedb/integration/schemawatch_integration_test.go @@ -109,10 +109,10 @@ func TestSchemaWatch(t *testing.T) { OutputStream: ww, } - go (func() { + go func() { err = pool.Client.Logs(opts) assert.NoError(t, err) - })() + }() select { case <-ww.c: diff --git a/cmd/spicedb/integration/serve_integration_test.go b/cmd/spicedb/integration/serve_integration_test.go index 4e05fdcfb3..f0c8941b09 100644 --- a/cmd/spicedb/integration/serve_integration_test.go +++ b/cmd/spicedb/integration/serve_integration_test.go @@ -30,7 +30,8 @@ import ( func TestServe(t *testing.T) { requireParent := require.New(t) - tester, err := newTester(t, + tester, err := newTester( + t, &dockertest.RunOptions{ Repository: "authzed/spicedb", Tag: "ci", @@ -238,10 +239,10 @@ func TestGracefulShutdown(t *testing.T) { OutputStream: ww, } - go (func() { + go func() { err = pool.Client.Logs(opts) assert.NoError(t, err) - })() + }() select { case <-ww.c: diff --git a/cmd/spicedb/integration/servetesting_integration_test.go b/cmd/spicedb/integration/servetesting_integration_test.go index 5029af6938..45722fe551 100644 --- a/cmd/spicedb/integration/servetesting_integration_test.go +++ b/cmd/spicedb/integration/servetesting_integration_test.go @@ -29,7 +29,8 @@ import ( func TestTestServer(t *testing.T) { require := require.New(t) key := uuid.NewString() - tester, err := newTester(t, + tester, err := newTester( + t, &dockertest.RunOptions{ Repository: "authzed/spicedb", Tag: "ci", diff --git a/cmd/spicedb/integration/servetesting_race_test.go b/cmd/spicedb/integration/servetesting_race_test.go index 85fd8e1923..b8e27bb3e2 100644 --- a/cmd/spicedb/integration/servetesting_race_test.go +++ b/cmd/spicedb/integration/servetesting_race_test.go @@ -24,7 +24,8 @@ import ( func TestCheckPermissionOnTesterNoFlakes(t *testing.T) { _, b, _, _ := runtime.Caller(0) basepath := filepath.Dir(b) - tester, err := newTester(t, + tester, err := newTester( + t, &dockertest.RunOptions{ Repository: "authzed/spicedb", Tag: "ci", diff --git a/cmd/spicedb/memoryprotection/memory_protection_integration_test.go b/cmd/spicedb/memoryprotection/memory_protection_integration_test.go index 0dc1230b77..233a8abe16 100644 --- a/cmd/spicedb/memoryprotection/memory_protection_integration_test.go +++ b/cmd/spicedb/memoryprotection/memory_protection_integration_test.go @@ -49,7 +49,8 @@ func TestServeWithMemoryProtectionMiddleware(t *testing.T) { }) serverPort := serveResource.GetPort("50051/tcp") - conn, err := grpc.NewClient(fmt.Sprintf("localhost:%s", serverPort), + conn, err := grpc.NewClient( + fmt.Sprintf("localhost:%s", serverPort), grpc.WithTransportCredentials(insecure.NewCredentials()), grpcutil.WithInsecureBearerToken(serverToken), ) diff --git a/e2e/cockroach/cockroach.go b/e2e/cockroach/cockroach.go index df9c3584ec..58740328d1 100644 --- a/e2e/cockroach/cockroach.go +++ b/e2e/cockroach/cockroach.go @@ -153,7 +153,8 @@ func (cs Cluster) Stop(out io.Writer) error { // Init runs the cockroach init command against the cluster func (cs Cluster) Init(ctx context.Context, out, errOut io.Writer) { // this retries until it succeeds, it won't return unless it does - if err := e2e.Run(ctx, out, errOut, "./cockroach", + if err := e2e.Run( + ctx, out, errOut, "./cockroach", "init", "--insecure", "--host="+cs[0].Addr, @@ -165,7 +166,8 @@ func (cs Cluster) Init(ctx context.Context, out, errOut io.Writer) { // SQL runs the set of SQL commands against the cluster func (cs Cluster) SQL(ctx context.Context, out, errOut io.Writer, sql ...string) error { for _, s := range sql { - if err := e2e.Run(ctx, out, errOut, + if err := e2e.Run( + ctx, out, errOut, "./cockroach", "sql", "--insecure", "--host="+cs[0].Addr, "-e", s, ); err != nil { @@ -181,7 +183,8 @@ func (cs Cluster) NetworkDelay(ctx context.Context, out io.Writer, node int, dur if err != nil { return err } - return e2e.Run(ctx, out, out, + return e2e.Run( + ctx, out, out, "sudo", "./chaosd", "attack", @@ -196,7 +199,8 @@ func (cs Cluster) NetworkDelay(ctx context.Context, out io.Writer, node int, dur // TimeDelay adds a skew to the clock of the given node func (cs Cluster) TimeDelay(ctx context.Context, out io.Writer, node int, duration time.Duration) error { - return e2e.Run(ctx, out, out, + return e2e.Run( + ctx, out, out, "sudo", "./chaosd", "attack", diff --git a/e2e/go.mod b/e2e/go.mod index 6c2c3baab3..f3fd22527d 100644 --- a/e2e/go.mod +++ b/e2e/go.mod @@ -5,43 +5,43 @@ go 1.26.4 replace github.com/authzed/spicedb => ../ require ( - github.com/authzed/authzed-go v1.9.0 - github.com/authzed/grpcutil v0.0.0-20240123194739-2ea1e3d2d98b - github.com/authzed/spicedb v1.29.5 + github.com/authzed/authzed-go v1.10.0 + github.com/authzed/grpcutil v0.0.0-20260105210157-e237581949c2 + github.com/authzed/spicedb v1.54.0 github.com/brianvoe/gofakeit/v6 v6.28.0 github.com/ecordell/optgen v0.2.6 - github.com/jackc/pgx/v5 v5.9.2 + github.com/jackc/pgx/v5 v5.10.0 github.com/stretchr/testify v1.11.1 - golang.org/x/tools v0.44.0 - google.golang.org/grpc v1.80.0 - mvdan.cc/gofumpt v0.9.2 + golang.org/x/tools v0.46.0 + google.golang.org/grpc v1.81.1 + mvdan.cc/gofumpt v0.10.0 ) require ( buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1 // indirect - buf.build/go/protovalidate v1.1.3 // indirect + buf.build/go/protovalidate v1.2.0 // indirect cel.dev/expr v0.25.1 // indirect github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/authzed/cel-go v0.20.2 // indirect - github.com/authzed/ctxkey v0.0.0-20250226155515-d49f99185584 // indirect - github.com/aws/aws-sdk-go-v2 v1.40.1 // indirect - github.com/aws/aws-sdk-go-v2/config v1.32.3 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.3 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15 // indirect - github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.3 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.6 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.41.3 // indirect - github.com/aws/smithy-go v1.24.0 // indirect + github.com/authzed/ctxkey v0.0.0-20260210154927-ca132876f62c // indirect + github.com/aws/aws-sdk-go-v2 v1.42.0 // indirect + github.com/aws/aws-sdk-go-v2/config v1.32.25 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.24 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 // indirect + github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.2.0 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 // indirect + github.com/aws/smithy-go v1.27.1 // indirect github.com/benbjohnson/clock v1.3.5 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/ccoveille/go-safecast/v2 v2.0.0 // indirect + github.com/ccoveille/go-safecast/v2 v2.0.1 // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect @@ -54,8 +54,7 @@ require ( github.com/go-errors/errors v1.5.1 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/google/cel-go v0.27.0 // indirect - github.com/google/go-cmp v0.7.0 // indirect + github.com/google/cel-go v0.28.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 // indirect @@ -69,24 +68,23 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.67.5 // indirect + github.com/prometheus/common v0.69.0 // indirect github.com/prometheus/procfs v0.20.1 // indirect - github.com/rs/zerolog v1.34.0 // indirect + github.com/rs/zerolog v1.35.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/stoewer/go-strcase v1.3.1 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/otel v1.43.0 // indirect - go.opentelemetry.io/otel/metric v1.43.0 // indirect - go.opentelemetry.io/otel/trace v1.43.0 // indirect - go.yaml.in/yaml/v2 v2.4.4 // indirect - golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect - golang.org/x/mod v0.35.0 // indirect - golang.org/x/net v0.55.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/text v0.37.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect + go.opentelemetry.io/otel v1.44.0 // indirect + go.opentelemetry.io/otel/metric v1.44.0 // indirect + go.opentelemetry.io/otel/trace v1.44.0 // indirect + golang.org/x/exp v0.0.0-20260611194520-c48552f49976 // indirect + golang.org/x/mod v0.37.0 // indirect + golang.org/x/net v0.56.0 // indirect + golang.org/x/sync v0.21.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/text v0.38.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect resenje.org/singleflight v0.4.3 // indirect diff --git a/e2e/go.sum b/e2e/go.sum index 38a0f7a9de..e9835dbbe7 100644 --- a/e2e/go.sum +++ b/e2e/go.sum @@ -1,7 +1,7 @@ buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1 h1:s6hzCXtND/ICdGPTMGk7C+/BFlr2Jg5GyH0NKf4XGXg= buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1/go.mod h1:tvtbpgaVXZX4g6Pn+AnzFycuRK3MOz5HJfEGeEllXYM= -buf.build/go/protovalidate v1.1.3 h1:m2GVEgQWd7rk+vIoAZ+f0ygGjvQTuqPQapBBdcpWVPE= -buf.build/go/protovalidate v1.1.3/go.mod h1:9XIuohWz+kj+9JVn3WQneHA5LZP50mjvneZMnbLkiIE= +buf.build/go/protovalidate v1.2.0 h1:DQVrUWkmGTBij+kOYv/x2LLxwcLaGKMdzShj1/6/3H0= +buf.build/go/protovalidate v1.2.0/go.mod h1:7rYiQEhqvAipoazpVNBBH2S2f8bjG4huMVy1V2Yofn4= cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -13,23 +13,23 @@ cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIi cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/iam v1.7.0 h1:JD3zh0C6LHl16aCn5Akff0+GELdp1+4hmh6ndoFLl8U= -cloud.google.com/go/iam v1.7.0/go.mod h1:tetWZW1PD/m6vcuY2Zj/aU0eCHNPuxedbnbRTyKXvdY= -cloud.google.com/go/longrunning v0.9.0 h1:0EzbDEGsAvOZNbqXopgniY0w0a1phvu5IdUFq8grmqY= -cloud.google.com/go/longrunning v0.9.0/go.mod h1:pkTz846W7bF4o2SzdWJ40Hu0Re+UoNT6Q5t+igIcb8E= -cloud.google.com/go/monitoring v1.26.0 h1:858kWP5akszJFeiWBSmQJIfS8vsCqkX9hjc7HPsv/tk= -cloud.google.com/go/monitoring v1.26.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= +cloud.google.com/go/iam v1.11.0 h1:KieQ9Pb+LLPak1O3Rv3GgCxhnmkYf7Xyh0P5HfF1jFM= +cloud.google.com/go/iam v1.11.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= +cloud.google.com/go/longrunning v1.0.0 h1:lwzWEYD8+NkYV7dhexOz6kmlvajZA70+bW/xMhRVVdY= +cloud.google.com/go/longrunning v1.0.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= +cloud.google.com/go/monitoring v1.29.0 h1:AHhDsFaSax1/4k+qlIDX/SDGe6hggnfXJ9dkgD9qBPY= +cloud.google.com/go/monitoring v1.29.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= cloud.google.com/go/spanner v1.89.0 h1:r3h5Z5RA8JRPf3HCvA6ujNhREIMhPY+MrDL9mkY8jS0= cloud.google.com/go/spanner v1.89.0/go.mod h1:okNuxnp1wdPaVoM5M28Al2irKZLkHhZ2Z+DW6/ZJWGw= -filippo.io/edwards25519 v1.1.1 h1:YpjwWWlNmGIDyXOn8zLzqiD+9TyIlPhGFG96P39uBpw= -filippo.io/edwards25519 v1.1.1/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.6.0 h1:BzsL0qE7LvtTEtXG7Dt5NS1EP0CQwI21HZfj9aGghhw= github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.6.0/go.mod h1:I7kE2kM3qCr9QPT4cU4cCFYkEpVyVr16YOGUHzy+nR0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 h1:rIkQfkCOVKc1OiRCNcSDD8ml5RJlZbH/Xsq7lbpynwc= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0/go.mod h1:RD2SsorTmYhF6HkTmDw7KmPYQk8OBYwTkuasChwv7R4= -github.com/IBM/pgxpoolprometheus v1.1.2 h1:sHJwxoL5Lw4R79Zt+H4Uj1zZ4iqXJLdk7XDE7TPs97U= -github.com/IBM/pgxpoolprometheus v1.1.2/go.mod h1:+vWzISN6S9ssgurhUNmm6AlXL9XLah3TdWJktquKTR8= +github.com/IBM/pgxpoolprometheus v1.1.3 h1:LYDekhCpo0I6qBrnfZlCSDqdr8UX/ZJ2C3GwhrTSVcw= +github.com/IBM/pgxpoolprometheus v1.1.3/go.mod h1:Q/NZpDapcg7VJQSfUfhH+KaGV7wZQk0/bFRoyinkjr8= github.com/KimMachineGun/automemlimit v0.7.5 h1:RkbaC0MwhjL1ZuBKunGDjE/ggwAX43DwZrJqVwyveTk= github.com/KimMachineGun/automemlimit v0.7.5/go.mod h1:QZxpHaGOQoYvFhv/r4u3U0JTC2ZcOwbSr11UZF46UBM= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= @@ -38,46 +38,46 @@ github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8 github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= -github.com/authzed/authzed-go v1.9.0 h1:wscQbRD+OLW+Jg2wfZgmPeEKkaXFyVb3+nbtjUS++JA= -github.com/authzed/authzed-go v1.9.0/go.mod h1:2DL7pg4iqMltwWOSw+wvbEzAK7uRt3545+bkcGYD8D8= +github.com/authzed/authzed-go v1.10.0 h1:GUPzYFnStk1PIBZOkQzqcYA3iHaOlVYVl1UnHIRofKU= +github.com/authzed/authzed-go v1.10.0/go.mod h1:2DL7pg4iqMltwWOSw+wvbEzAK7uRt3545+bkcGYD8D8= github.com/authzed/cel-go v0.20.2 h1:GlmLecGry7Z8HU0k+hmaHHUV05ZHrsFxduXHtIePvck= github.com/authzed/cel-go v0.20.2/go.mod h1:pJHVFWbqUHV1J+klQoZubdKswlbxcsbojda3mye9kiU= -github.com/authzed/ctxkey v0.0.0-20250226155515-d49f99185584 h1:mP7EpcUL90EKcf/F+gYiU2pz3cGFEuKPHPfe7MntEXk= -github.com/authzed/ctxkey v0.0.0-20250226155515-d49f99185584/go.mod h1:wnimjr5RPPouIhZQ3ztDBLMUKKuUroj3U9Jy0PxeaEE= -github.com/authzed/grpcutil v0.0.0-20240123194739-2ea1e3d2d98b h1:wbh8IK+aMLTCey9sZasO7b6BWLAJnHHvb79fvWCXwxw= -github.com/authzed/grpcutil v0.0.0-20240123194739-2ea1e3d2d98b/go.mod h1:s3qC7V7XIbiNWERv7Lfljy/Lx25/V1Qlexb0WJuA8uQ= +github.com/authzed/ctxkey v0.0.0-20260210154927-ca132876f62c h1:kcjpI9wcj5yFYWJ7bEeiY6hqH2I6Es3lVz6PB7RKblQ= +github.com/authzed/ctxkey v0.0.0-20260210154927-ca132876f62c/go.mod h1:ve6DXRv9l2HcM2lxSUmZKWXl7Iq/00xYixBuHOtST+4= +github.com/authzed/grpcutil v0.0.0-20260105210157-e237581949c2 h1:ymPD1ugBsXVUpLIG/lnRn1ndgOrsrki/0ZX7uP/S1GI= +github.com/authzed/grpcutil v0.0.0-20260105210157-e237581949c2/go.mod h1:FLssYBs1DrwuItfI411kzqcV8QSqGb/B7PC6snNhjvU= github.com/authzed/jitterbug v0.0.0-20260128162915-e97d76daaa24 h1:BXaWSanmHFu3P0xWfTDPpwcJIQ/oSol29+CWe4lSGSU= github.com/authzed/jitterbug v0.0.0-20260128162915-e97d76daaa24/go.mod h1:WvEk4YHnUsmbUaWA/VseQty3X91f6/jEHek5mjYDZUg= -github.com/aws/aws-sdk-go-v2 v1.40.1 h1:difXb4maDZkRH0x//Qkwcfpdg1XQVXEAEs2DdXldFFc= -github.com/aws/aws-sdk-go-v2 v1.40.1/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0= -github.com/aws/aws-sdk-go-v2/config v1.32.3 h1:cpz7H2uMNTDa0h/5CYL5dLUEzPSLo2g0NkbxTRJtSSU= -github.com/aws/aws-sdk-go-v2/config v1.32.3/go.mod h1:srtPKaJJe3McW6T/+GMBZyIPc+SeqJsNPJsd4mOYZ6s= -github.com/aws/aws-sdk-go-v2/credentials v1.19.3 h1:01Ym72hK43hjwDeJUfi1l2oYLXBAOR8gNSZNmXmvuas= -github.com/aws/aws-sdk-go-v2/credentials v1.19.3/go.mod h1:55nWF/Sr9Zvls0bGnWkRxUdhzKqj9uRNlPvgV1vgxKc= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15 h1:utxLraaifrSBkeyII9mIbVwXXWrZdlPO7FIKmyLCEcY= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15/go.mod h1:hW6zjYUDQwfz3icf4g2O41PHi77u10oAzJ84iSzR/lo= -github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.15 h1:0Gyp+cSI/dFNdf8IbOLHvqXlKDlcwyXYMF3Wswe2brc= -github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.15/go.mod h1:oE+iv8mvfL1hd1KOqWD0Wu0qwFjf/SnSEt1WV2q55AA= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15 h1:Y5YXgygXwDI5P4RkteB5yF7v35neH7LfJKBG+hzIons= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15/go.mod h1:K+/1EpG42dFSY7CBj+Fruzm8PsCGWTXJ3jdeJ659oGQ= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15 h1:AvltKnW9ewxX2hFmQS0FyJH93aSvJVUEFvXfU+HWtSE= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15/go.mod h1:3I4oCdZdmgrREhU74qS1dK9yZ62yumob+58AbFR4cQA= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 h1:0ryTNEdJbzUCEWkVXEXoqlXV72J5keC1GvILMOuD00E= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4/go.mod h1:HQ4qwNZh32C3CBeO6iJLQlgtMzqeG17ziAA/3KDJFow= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15 h1:3/u/4yZOffg5jdNk1sDpOQ4Y+R6Xbh+GzpDrSZjuy3U= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15/go.mod h1:4Zkjq0FKjE78NKjabuM4tRXKFzUJWXgP0ItEZK8l7JU= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.3 h1:d/6xOGIllc/XW1lzG9a4AUBMmpLA9PXcQnVPTuHHcik= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.3/go.mod h1:fQ7E7Qj9GiW8y0ClD7cUJk3Bz5Iw8wZkWDHsTe8vDKs= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.6 h1:8sTTiw+9yuNXcfWeqKF2x01GqCF49CpP4Z9nKrrk/ts= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.6/go.mod h1:8WYg+Y40Sn3X2hioaaWAAIngndR8n1XFdRPPX+7QBaM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11 h1:E+KqWoVsSrj1tJ6I/fjDIu5xoS2Zacuu1zT+H7KtiIk= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11/go.mod h1:qyWHz+4lvkXcr3+PoGlGHEI+3DLLiU6/GdrFfMaAhB0= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.3 h1:tzMkjh0yTChUqJDgGkcDdxvZDSrJ/WB6R6ymI5ehqJI= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.3/go.mod h1:T270C0R5sZNLbWUe8ueiAF42XSZxxPocTaGSgs5c/60= -github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk= -github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= +github.com/aws/aws-sdk-go-v2 v1.42.0 h1:XvXMJTkFQtpBKIWZnmr9ZEOc2InWM2yldjXEJ/bymhA= +github.com/aws/aws-sdk-go-v2 v1.42.0/go.mod h1:27+ACypSLljLAEKsCYOmrjKh83vuTRkuAe9Uv/3A4bg= +github.com/aws/aws-sdk-go-v2/config v1.32.25 h1:ACCejvStYoilgwrfegSt5ZntCbPrk52qfwyNcnl3omM= +github.com/aws/aws-sdk-go-v2/config v1.32.25/go.mod h1:LJyU8sDRbXUxFn8xMJIGP+v9QYYwveNLI8a/giAOiAs= +github.com/aws/aws-sdk-go-v2/credentials v1.19.24 h1:2hQqYCV9yqyePQ9o6dCrZc/zO8U3TwPr9mIKlZnPu/I= +github.com/aws/aws-sdk-go-v2/credentials v1.19.24/go.mod h1:IDwpACtwqHLISdzfwUUNq4P9DsB/h5BLg4FwJPNfqFY= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 h1:r6qZHbT+wxgWO/e9vYNUEtg7lv5+UN3pRqKhLXvnArg= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29/go.mod h1:QRnaRcTVGKPGRy8w78HMQtKUGRYcnMZAANATkeVA6Mo= +github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.29 h1:1Hbcvm9a/7hBCAM5y5SAvSKyFUsULrMgmS+XBx32u68= +github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.29/go.mod h1:qIWWBwh4Wp7HU4E8AkMtu9pqHJ6DxmqLFX7zV8ZX4lM= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29 h1:f3vKqSo13fhTYb+JEcXwXefZQE26I1FB5eTSniU67ko= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29/go.mod h1:MzoLFUArKGpGD+ukmPiTPG1X5x4o6M2kq4v2dr1FiEc= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29 h1:RdwIf/CuUsvJX3RgJagbOyotl/cxoLY4xviKuE7p2GY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29/go.mod h1:71wt8W2EgswdZy9Mf9KNnzxZ3TiZlv4caKghPktDOkA= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 h1:VTGy885W5DKBxWRUJbym9hytNaYzsyaPkCHGRRMAOhU= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30/go.mod h1:AS0HycUvJRFvTt613AYDOgO2jzw+00cVSMny8XB3yMY= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 h1:ZD2+BSw9vFsNlKYIasSNt3uDbjqqXIBcM13UJv/Lx2k= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12/go.mod h1:Ms4zlcVBbXbiP7EVLhl+lgjvA/a7YphqQ3Ih3174EmI= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 h1:DRebniUGZ2MqiiIVmQJ04vIXr918hubdHMnarSLEWyU= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29/go.mod h1:LfRkPCD8YHDM2E5eTkos2UpwYeZnBcVarTa8L59bJHA= +github.com/aws/aws-sdk-go-v2/service/signin v1.2.0 h1:3nXpRcFwRCW8n7HgO2QGy0Dc20eQNfBuUemGQhpF8m8= +github.com/aws/aws-sdk-go-v2/service/signin v1.2.0/go.mod h1:LxYujSTLPRlp2vTtcUO/+1ilrew8ytt6SvQyOgejzFQ= +github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 h1:ey1XLTYXb9PcLt4535632o5kCGXNXEhNb620Dqwuylo= +github.com/aws/aws-sdk-go-v2/service/sso v1.31.3/go.mod h1:Lk7PlmoTYryQmyBG0EXqj5BcUbj3whXdU2s3yGI3EAc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 h1:yLr03zQE/5Eu5l3QU0Si+xMbLMbSDF2YXsigqXngs6g= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6/go.mod h1:Q5N6icH+KJZDLh+ESNwzdv6cZ6vLFF/egy3IOxWhmz4= +github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 h1:VrIhKRCSK1umelSgB9RghvA9RTUYeQffyAS5ApXehNI= +github.com/aws/aws-sdk-go-v2/service/sts v1.43.3/go.mod h1:r8wkDOuLaaMFqFiYAb8dGY2A3gJCOujMc6CFOVC4Zhc= +github.com/aws/smithy-go v1.27.1 h1:4T340VFndXtADGF52gYa1POyL7s9E4Z1OeZ1hCscIw8= +github.com/aws/smithy-go v1.27.1/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -85,8 +85,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/brianvoe/gofakeit/v6 v6.28.0 h1:Xib46XXuQfmlLS2EXRuJpqcw8St6qSZz75OUo0tgAW4= github.com/brianvoe/gofakeit/v6 v6.28.0/go.mod h1:Xj58BMSnFqcn/fAQeSK+/PLtC5kSb7FJIq4JyGa8vEs= -github.com/ccoveille/go-safecast/v2 v2.0.0 h1:+5eyITXAUj3wMjad6cRVJKGnC7vDS55zk0INzJagub0= -github.com/ccoveille/go-safecast/v2 v2.0.0/go.mod h1:JIYA4CAR33blIDuE6fSwCp2sz1oOBahXnvmdBhOAABs= +github.com/ccoveille/go-safecast/v2 v2.0.1 h1:2+mIu3gXtwmWelBia2kkxfB8eP4orTHDH7ClSlWkd6I= +github.com/ccoveille/go-safecast/v2 v2.0.1/go.mod h1:JIYA4CAR33blIDuE6fSwCp2sz1oOBahXnvmdBhOAABs= github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -100,7 +100,6 @@ github.com/cloudspannerecosystem/spanner-change-streams-tail v0.3.1/go.mod h1:Fb github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= -github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/creasty/defaults v1.8.0 h1:z27FJxCAa0JKt3utc0sCImAEb+spPucmKoOdLHvHYKk= github.com/creasty/defaults v1.8.0/go.mod h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM= github.com/dave/jennifer v1.7.1 h1:B4jJJDHelWcDhlRQxWeo0Npa/pYKBLrirAQoTN45txo= @@ -124,14 +123,14 @@ github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds= github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= -github.com/exaring/otelpgx v0.9.3 h1:4yO02tXC7ZJZ+hcqcUkfxblYNCIFGVhpUWI0iw1TzPU= -github.com/exaring/otelpgx v0.9.3/go.mod h1:R5/M5LWsPPBZc1SrRE5e0DiU48bI78C1/GPTWs6I66U= +github.com/exaring/otelpgx v0.11.1 h1:pE79fIg/qh/Lpu00kvswFC5dKfqyJJhMJ4Y4N3w5Lj4= +github.com/exaring/otelpgx v0.11.1/go.mod h1:3OojrUKhhy3lTbYIMBijP3YjMey/jo14eHAW5cXcUdk= 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/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= -github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= +github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= @@ -143,14 +142,13 @@ github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= -github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= -github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= -github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= +github.com/go-quicktest/qt v1.102.0 h1:HSQxCeh5YZH3EL3W39ixjtyaEhcWSXQHtHnMBzSs474= +github.com/go-quicktest/qt v1.102.0/go.mod h1:p4lGIVX+8Wa6ZPNDvqcxq36XpUDLh42FLetFU7odllI= +github.com/go-sql-driver/mysql v1.10.0 h1:Q+1LV8DkHJvSYAdR83XzuhDaTykuDx0l6fkXxoWCWfw= +github.com/go-sql-driver/mysql v1.10.0/go.mod h1:M+cqaI7+xxXGG9swrdeUIoPG3Y3KCkF0pZej+SK+nWk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= @@ -159,8 +157,8 @@ github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/cel-go v0.27.0 h1:e7ih85+4qVrBuqQWTW4FKSqZYokVuc3HnhH5keboFTo= -github.com/google/cel-go v0.27.0/go.mod h1:tTJ11FWqnhw5KKpnWpvW9CJC3Y9GK4EIS0WXnBbebzw= +github.com/google/cel-go v0.28.0 h1:KjSWstCpz/MN5t4a8gnGJNIYUsJRpdi/r97xWDphIQc= +github.com/google/cel-go v0.28.0/go.mod h1:X0bD6iVNR8pkROSOoHVdgTkzmRcosof7WQqCD6wcMc8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= @@ -168,10 +166,10 @@ 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/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= -github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.21.0 h1:h45NjjzEO3faG9Lg/cFrBh2PgegVVgzqKzuZl/wMbiI= -github.com/googleapis/gax-go/v2 v2.21.0/go.mod h1:But/NJU6TnZsrLai/xBAQLLz+Hc7fHZJt/hsCz3Fih4= +github.com/googleapis/enterprise-certificate-proxy v0.3.16 h1:F/VPrx0YPBdksZJQdCAp0WUsqnNmZpUZszzfYt0M5Dw= +github.com/googleapis/enterprise-certificate-proxy v0.3.16/go.mod h1:9Yb0eAkH/Xqhvv3zbeKf/+wMJqCeocWc6KIhDvEAuYE= +github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= +github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 h1:B+8ClL/kCQkRiU82d9xajRPKYMrB7E0MbtzWVi1K4ns= @@ -182,8 +180,8 @@ github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJ github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-memdb v1.3.5 h1:b3taDMxCBCBVgyRrS1AZVHO14ubMYZB++QpNhBg+Nyo= github.com/hashicorp/go-memdb v1.3.5/go.mod h1:8IVKKBkVe+fxFgdFOYxzQQNjz+sWCyHCdIC/+5+Vy1Y= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= @@ -194,14 +192,14 @@ github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7Ulw github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= github.com/jackc/pgx-zerolog v0.0.0-20230315001418-f978528409eb h1:pSv+zRVeAYjbXRFjyytFIMRBSKWVowCi7KbXSMR/+ug= github.com/jackc/pgx-zerolog v0.0.0-20230315001418-f978528409eb/go.mod h1:CRUuPsmIajLt3dZIlJ5+O8IDSib6y8yrst8DkCthTa4= -github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= +github.com/jackc/pgx/v5 v5.10.0 h1:VhSvgU2jSli8o3AqIEOTJr7rZwAEUVo4E4XhR94Zfr0= +github.com/jackc/pgx/v5 v5.10.0/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/jzelinskie/cobrautil/v2 v2.0.0-20240819150235-f7fe73942d0f h1:+WgAZQQXj+X8lcJdwcrQpD89Zd9ekdauOK3hWl3FkPU= -github.com/jzelinskie/cobrautil/v2 v2.0.0-20240819150235-f7fe73942d0f/go.mod h1:jsl6cEF6BT3UeQoSLreA7G0sZXemoI5XNqyxzWCohbE= +github.com/jzelinskie/cobrautil/v2 v2.0.0-20260331224425-513c88b62ffe h1:SA9iBugzqlof0pGKCn1f1zg7JWwkJuyPRu2fO86Gd3M= +github.com/jzelinskie/cobrautil/v2 v2.0.0-20260331224425-513c88b62ffe/go.mod h1:YAKfloXwyXXcSiYqlyFFki9xnOsFC40+HONA3FnXEBA= github.com/jzelinskie/stringz v0.0.3 h1:0GhG3lVMYrYtIvRbxvQI6zqRTT1P1xyQlpa0FhfUXas= github.com/jzelinskie/stringz v0.0.3/go.mod h1:hHYbgxJuNLRw91CmpuFsYEOyQqpDVFg8pvEh23vy4P0= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -218,11 +216,8 @@ github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= @@ -237,7 +232,6 @@ github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhM github.com/pelletier/go-toml/v2 v2.3.0 h1:k59bC/lIZREW0/iVaQR8nDHxVq8OVlIzYCOJf421CaM= github.com/pelletier/go-toml/v2 v2.3.0/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/planetscale/vtprotobuf v0.6.1-0.20240917153116-6f2963f01587 h1:xzZOeCMQLA/W198ZkdVdt4EKFKJtS26B773zNU377ZY= github.com/planetscale/vtprotobuf v0.6.1-0.20240917153116-6f2963f01587/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -248,33 +242,32 @@ github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UH github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= -github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= +github.com/prometheus/common v0.69.0 h1:OA85nJQS/T/MaYh/Q2CcgDKSGWqNIgrBDvDH85CuiNk= +github.com/prometheus/common v0.69.0/go.mod h1:ZzL3f6u94qUxh9p+tJTrF+FvBS1XXbbRAZCQkytAL0Y= github.com/prometheus/otlptranslator v1.0.0 h1:s0LJW/iN9dkIH+EnhiD3BlkkP5QVIUVEoIwkU+A6qos= github.com/prometheus/otlptranslator v1.0.0/go.mod h1:vRYWnXvI6aWGpsdY/mOT/cbeVRBlPWtBNDb7kGR3uKM= github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= -github.com/puzpuzpuz/xsync/v4 v4.2.0 h1:dlxm77dZj2c3rxq0/XNvvUKISAmovoXF4a4qM6Wvkr0= -github.com/puzpuzpuz/xsync/v4 v4.2.0/go.mod h1:VJDmTCJMBt8igNxnkQd86r+8KUeN1quSfNKu5bLYFQo= +github.com/puzpuzpuz/xsync/v4 v4.5.0 h1:vOSWu6b57/emh+L/Cw0BeQfvxa/cogFywXHeGUxQxAg= +github.com/puzpuzpuz/xsync/v4 v4.5.0/go.mod h1:VJDmTCJMBt8igNxnkQd86r+8KUeN1quSfNKu5bLYFQo= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rodaine/protogofakeit v0.1.1 h1:ZKouljuRM3A+TArppfBqnH8tGZHOwM/pjvtXe9DaXH8= github.com/rodaine/protogofakeit v0.1.1/go.mod h1:pXn/AstBYMaSfc1/RqH3N82pBuxtWgejz1AlYpY1mI0= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= -github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= -github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= +github.com/rs/zerolog v1.35.1 h1:m7xQeoiLIiV0BCEY4Hs+j2NG4Gp2o2KPKmhnnLiazKI= +github.com/rs/zerolog v1.35.1/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw= github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4= github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI= -github.com/samber/lo v1.52.0 h1:Rvi+3BFHES3A8meP33VPAxiBZX/Aws5RxrschYGjomw= -github.com/samber/lo v1.52.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= -github.com/samber/slog-common v0.19.0 h1:fNcZb8B2uOLooeYwFpAlKjkQTUafdjfqKcwcC89G9YI= -github.com/samber/slog-common v0.19.0/go.mod h1:dTz+YOU76aH007YUU0DffsXNsGFQRQllPQh9XyNoA3M= -github.com/samber/slog-zerolog/v2 v2.9.0 h1:6LkOabJmZdNLaUWkTC3IVVA+dq7b/V0FM6lz6/7+THI= -github.com/samber/slog-zerolog/v2 v2.9.0/go.mod h1:gnQW9VnCfM34v2pRMUIGMsZOVbYLqY/v0Wxu6atSVGc= -github.com/schollz/progressbar/v3 v3.18.0 h1:uXdoHABRFmNIjUfte/Ex7WtuyVslrw2wVPQmCN62HpA= -github.com/schollz/progressbar/v3 v3.18.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec= +github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM= +github.com/samber/lo v1.53.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= +github.com/samber/slog-common v0.21.0 h1:Wo2hTly1Br5RjYqX/BTWJJeDnTE85oWk/7vqlpZuAUc= +github.com/samber/slog-common v0.21.0/go.mod h1:d/6OaSlzdkl9PFpfRLgn8FwY1OW6EFmPtBpsHX4MrU0= +github.com/samber/slog-zerolog/v2 v2.9.2 h1:DIFzfzDTxHeRyGlfg/D7b2by7VVzcsBTybRPrzjWF4c= +github.com/samber/slog-zerolog/v2 v2.9.2/go.mod h1:2q6cYK2OcN6YfQE/WyCnUtigc+yYf3ozqGsGmRwZR6I= +github.com/schollz/progressbar/v3 v3.19.0 h1:Ea18xuIRQXLAUidVDox3AbwfUhD0/1IvohyTutOIFoc= +github.com/schollz/progressbar/v3 v3.19.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -317,22 +310,22 @@ go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/detectors/gcp v1.43.0 h1:62yY3dT7/ShwOxzA0RsKRgshBmfElKI4d/Myu2OxDFU= go.opentelemetry.io/contrib/detectors/gcp v1.43.0/go.mod h1:RyaZMFY7yi1kAs45S6mbFGz8O8rqB0dTY14uzvG4LCs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo= -go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= -go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -go.opentelemetry.io/otel/exporters/prometheus v0.62.0 h1:krvC4JMfIOVdEuNPTtQ0ZjCiXrybhv+uOHMfHRmnvVo= -go.opentelemetry.io/otel/exporters/prometheus v0.62.0/go.mod h1:fgOE6FM/swEnsVQCqCnbOfRV4tOnWPg7bVeo4izBuhQ= -go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= -go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= -go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= -go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= -go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= -go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= -go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= -go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 h1:2yEATaop1/a1I4psnSLgWVPLWwCzkqWakgJy7xTDVy0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0/go.mod h1:D7J12YRapIekYyPWgGPlA/23pRmpSEZC5xJC/TTLI9U= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI= +go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= +go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= +go.opentelemetry.io/otel/exporters/prometheus v0.66.0 h1:vkrK8PAznv2NKt2r+kdu252ccGzkEqLc2aSXbQIALYQ= +go.opentelemetry.io/otel/exporters/prometheus v0.66.0/go.mod h1:V/UB6D3vMF/UBOL5igAsAYnk1nG/bzYYTzvsB16cy7o= +go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= +go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= +go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58= +go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0= +go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI= +go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA= +go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk= +go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -348,19 +341,19 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= -golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM= -golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80= +golang.org/x/exp v0.0.0-20260611194520-c48552f49976 h1:X8Hz2ImujgbmetVuW+w2YkyZChE3cBpZi2P158rTG9M= +golang.org/x/exp v0.0.0-20260611194520-c48552f49976/go.mod h1:vnf4pv9iKZXY58sQE1L86zmNWJ4159e1RkcWiLCkeEY= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 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.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -369,8 +362,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= -golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= +golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= +golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= @@ -379,25 +372,22 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= -golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= +golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -409,16 +399,16 @@ golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= -golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= +golang.org/x/tools v0.46.0 h1:7jTurBkPZu4moS/Uy4OQT1M+QBlsj3wejyZwsT8Z7rk= +golang.org/x/tools v0.46.0/go.mod h1:FrD85F8l+NWL+9XWBSyVSHO6Ne4jutsfIFba7AWQ5Ys= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.275.0 h1:vfY5d9vFVJeWEZT65QDd9hbndr7FyZ2+6mIzGAh71NI= -google.golang.org/api v0.275.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= +google.golang.org/api v0.286.0 h1:TdTXMvzYKnWV1/lPbCdbXRqBrkDqjPto22H2xeZZ8LI= +google.golang.org/api v0.286.0/go.mod h1:NlOlUIr8MPoIhT9Bb/oUnRuHbJOLwxb6JSYJM8Yz+jQ= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -426,17 +416,17 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d h1:N1Ec54vZnIPd7MnxRiYLW+oY4fDR4BOS/LrssdD9+ek= google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:c2hJ1grtnH0xUiEKGDGkjGNTJ1Hy2LrblyKOHF0sqRM= -google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec= -google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d h1:xr2lwHI91bn3UiXcnyzRMQjp2LRiM8wEHzwUaE0YhTs= +google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d/go.mod h1:O0ZOWSrfWfJ+Z5HbwZ+wNtHsg/vk1k2C/w67eww8PfQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d h1:mpAgMyM9vQHxycBlDq50y1VHpfSfVwzXvrQKtYbXuUY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= -google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= +google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= +google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -451,9 +441,9 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y= -k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -mvdan.cc/gofumpt v0.9.2 h1:zsEMWL8SVKGHNztrx6uZrXdp7AX8r421Vvp23sz7ik4= -mvdan.cc/gofumpt v0.9.2/go.mod h1:iB7Hn+ai8lPvofHd9ZFGVg2GOr8sBUw1QUWjNbmIL/s= +k8s.io/utils v0.0.0-20260617174310-a95e086a2553 h1:hmGqDecjc8d7HVzWzRFl0QD9bYuYKbBEG7t8xwnVxfI= +k8s.io/utils v0.0.0-20260617174310-a95e086a2553/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= +mvdan.cc/gofumpt v0.10.0 h1:yGGpRS2pBN2OQIi7b21IXknJna7faPkFaVfHLrN6Euo= +mvdan.cc/gofumpt v0.10.0/go.mod h1:sU2ElXHzOEmvoPqfutYG7uunlueR4K2T1JFml40SzP4= resenje.org/singleflight v0.4.3 h1:l7foFYg8X/VEHPxWs1K/Pw77807RMVzvXgWGb0J1sdM= resenje.org/singleflight v0.4.3/go.mod h1:lAgQK7VfjG6/pgredbQfmV0RvG/uVhKo6vSuZ0vCWfk= diff --git a/e2e/newenemy/newenemy_test.go b/e2e/newenemy/newenemy_test.go index 7708d317ba..2b0ff4c027 100644 --- a/e2e/newenemy/newenemy_test.go +++ b/e2e/newenemy/newenemy_test.go @@ -106,10 +106,12 @@ func initializeTestCRDBCluster(ctx context.Context, t testing.TB) cockroach.Clus t.Log("initializing crdb...") crdbCluster.Init(ctx, tlog, tlog) - require.NoError(crdbCluster.SQL(ctx, tlog, tlog, + require.NoError(crdbCluster.SQL( + ctx, tlog, tlog, "SET CLUSTER SETTING kv.range.backpressure_range_size_multiplier=0;", )) - require.NoError(crdbCluster.SQL(ctx, tlog, tlog, + require.NoError(crdbCluster.SQL( + ctx, tlog, tlog, fmt.Sprintf(createDB, dbName), )) @@ -182,7 +184,8 @@ func TestNoNewEnemy(t *testing.T) { }) t.Log("configure small ranges, single replicas, short ttl") - require.NoError(t, crdb.SQL(ctx, tlog, tlog, + require.NoError(t, crdb.SQL( + ctx, tlog, tlog, fmt.Sprintf(setSmallRanges, dbName), )) @@ -617,7 +620,8 @@ func generateTuples(names NamespaceNames, n int, objIDGenerator *generator.Uniqu // getLeaderNode returns the node with the lease leader for the range containing the tuple func getLeaderNode(ctx context.Context, conn *pgx.Conn, tuple *v1.Relationship) int { t := tuple - row := conn.QueryRow(ctx, "SHOW RANGE FROM TABLE relation_tuple FOR ROW ($1::text,$2::text,$3::text,$4::text,$5::text,$6::text)", + row := conn.QueryRow( + ctx, "SHOW RANGE FROM TABLE relation_tuple FOR ROW ($1::text,$2::text,$3::text,$4::text,$5::text,$6::text)", t.Resource.ObjectType, t.Resource.ObjectId, t.Relation, @@ -631,7 +635,8 @@ func getLeaderNode(ctx context.Context, conn *pgx.Conn, tuple *v1.Relationship) // getLeaderNodeForNamespace returns the node with the lease leader for the range containing the namespace func getLeaderNodeForNamespace(ctx context.Context, conn *pgx.Conn, namespace string) int { - rows := conn.QueryRow(ctx, "SHOW RANGE FROM TABLE namespace_config FOR ROW ($1::text)", + rows := conn.QueryRow( + ctx, "SHOW RANGE FROM TABLE namespace_config FOR ROW ($1::text)", namespace, ) return leaderFromRangeRow(rows) diff --git a/e2e/spice/spicedb.go b/e2e/spice/spicedb.go index 5d922fa0e5..3faa95ad02 100644 --- a/e2e/spice/spicedb.go +++ b/e2e/spice/spicedb.go @@ -192,7 +192,8 @@ func (c *Cluster) Connect(ctx context.Context, out io.Writer) error { // MigrateHead migrates a Datastore to the latest revision defined in spicedb func MigrateHead(ctx context.Context, out io.Writer, datastore, uri string) error { - return e2e.Run(ctx, out, out, + return e2e.Run( + ctx, out, out, "./spicedb", "datastore", "migrate", "head", "--datastore-engine="+datastore, diff --git a/go.mod b/go.mod index f66745bf26..ffdea07171 100644 --- a/go.mod +++ b/go.mod @@ -7,34 +7,28 @@ go 1.26.4 // upgrade Kubernetes to a version that uses a newer version of `cel-go`. require github.com/authzed/cel-go v0.20.2 -// Bring https://github.com/fsnotify/fsnotify/pull/650 -replace github.com/fsnotify/fsnotify => github.com/fsnotify/fsnotify v1.9.0 - -// See https://github.com/ory/dockertest/issues/614 and https://pkg.go.dev/vuln/GO-2025-3829 -replace github.com/docker/docker => github.com/docker/docker v28.0.0+incompatible - require ( buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1 - buf.build/gen/go/prometheus/prometheus/protocolbuffers/go v1.36.10-20251118093737-4105057cc7d4.1 - buf.build/go/protovalidate v1.1.3 + buf.build/gen/go/prometheus/prometheus/protocolbuffers/go v1.36.11-20260331160422-eae785f0a21d.1 + buf.build/go/protovalidate v1.2.0 cloud.google.com/go/spanner v1.89.0 - github.com/IBM/pgxpoolprometheus v1.1.2 + github.com/IBM/pgxpoolprometheus v1.1.3 github.com/KimMachineGun/automemlimit v0.7.5 github.com/Masterminds/semver v1.5.0 github.com/Masterminds/squirrel v1.5.4 - github.com/authzed/authzed-go v1.9.0 + github.com/authzed/authzed-go v1.10.0 github.com/authzed/consistent v0.2.0 - github.com/authzed/ctxkey v0.0.0-20250226155515-d49f99185584 - github.com/authzed/grpcutil v0.0.0-20240123194739-2ea1e3d2d98b + github.com/authzed/ctxkey v0.0.0-20260210154927-ca132876f62c + github.com/authzed/grpcutil v0.0.0-20260105210157-e237581949c2 github.com/authzed/jitterbug v0.0.0-20260128162915-e97d76daaa24 - github.com/aws/aws-sdk-go-v2 v1.40.1 - github.com/aws/aws-sdk-go-v2/config v1.32.3 - github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.15 + github.com/aws/aws-sdk-go-v2 v1.42.0 + github.com/aws/aws-sdk-go-v2/config v1.32.25 + github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.29 github.com/benbjohnson/clock v1.3.5 github.com/bits-and-blooms/bloom/v3 v3.7.1 github.com/bmizerany/perks v0.0.0-20230307044200-03f9df79da1e github.com/caio/go-tdigest/v4 v4.1.0 - github.com/ccoveille/go-safecast/v2 v2.0.0 + github.com/ccoveille/go-safecast/v2 v2.0.1 github.com/cenkalti/backoff/v5 v5.0.3 github.com/cespare/xxhash/v2 v2.3.0 github.com/cloudspannerecosystem/spanner-change-streams-tail v0.3.1 @@ -43,13 +37,13 @@ require ( github.com/dustin/go-humanize v1.0.1 github.com/emirpasic/gods v1.18.1 github.com/ettle/strcase v0.2.0 - github.com/exaring/otelpgx v0.9.3 + github.com/exaring/otelpgx v0.11.1 github.com/fatih/color v1.19.0 github.com/felixge/fgprof v0.9.5 - github.com/fsnotify/fsnotify v1.9.0 + github.com/fsnotify/fsnotify v1.10.1 github.com/go-errors/errors v1.5.1 github.com/go-logr/zerologr v1.2.3 - github.com/go-sql-driver/mysql v1.9.3 + github.com/go-sql-driver/mysql v1.10.0 github.com/golang/snappy v1.0.0 github.com/google/go-cmp v0.7.0 github.com/google/uuid v1.6.0 @@ -60,9 +54,9 @@ require ( github.com/hashicorp/go-memdb v1.3.5 github.com/jackc/pgio v1.0.0 github.com/jackc/pgx-zerolog v0.0.0-20230315001418-f978528409eb - github.com/jackc/pgx/v5 v5.9.2 - github.com/jeroenrinzema/psql-wire v0.17.0 - github.com/jzelinskie/cobrautil/v2 v2.0.0-20240819150235-f7fe73942d0f + github.com/jackc/pgx/v5 v5.10.0 + github.com/jeroenrinzema/psql-wire v0.19.0 + github.com/jzelinskie/cobrautil/v2 v2.0.0-20260331224425-513c88b62ffe github.com/jzelinskie/persistent v0.0.0-20230816160542-1205ef8f0e15 github.com/jzelinskie/stringz v0.0.3 github.com/lib/pq v1.12.3 @@ -75,16 +69,16 @@ require ( github.com/ngrok/sqlmw v0.0.0-20220520173518-97c9c04efc79 github.com/odigos-io/go-rtml v0.0.1 github.com/ory/dockertest/v3 v3.12.0 - github.com/pganalyze/pg_query_go/v6 v6.1.0 + github.com/pganalyze/pg_query_go/v6 v6.2.2 github.com/planetscale/vtprotobuf v0.6.1-0.20240917153116-6f2963f01587 github.com/prometheus/client_golang v1.23.2 github.com/prometheus/client_model v0.6.2 - github.com/prometheus/common v0.67.5 - github.com/puzpuzpuz/xsync/v4 v4.2.0 + github.com/prometheus/common v0.69.0 + github.com/puzpuzpuz/xsync/v4 v4.5.0 github.com/rs/cors v1.11.1 github.com/rs/xid v1.6.0 - github.com/rs/zerolog v1.34.0 - github.com/samber/slog-zerolog/v2 v2.9.0 + github.com/rs/zerolog v1.35.1 + github.com/samber/slog-zerolog/v2 v2.9.2 github.com/schollz/progressbar/v3 v3.19.0 github.com/sean-/sysexits v1.0.0 github.com/sercand/kuberesolver/v5 v5.1.1 @@ -94,33 +88,32 @@ require ( github.com/spf13/cobra v1.10.2 github.com/spf13/pflag v1.0.10 github.com/stretchr/testify v1.11.1 - github.com/wasilibs/go-pgquery v0.0.0-20250409022910-10ac41983c07 - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 - go.opentelemetry.io/contrib/propagators/b3 v1.20.0 - go.opentelemetry.io/contrib/propagators/ot v1.20.0 - go.opentelemetry.io/otel v1.43.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 - go.opentelemetry.io/otel/exporters/prometheus v0.62.0 - go.opentelemetry.io/otel/sdk v1.43.0 - go.opentelemetry.io/otel/sdk/metric v1.43.0 - go.opentelemetry.io/otel/trace v1.43.0 + github.com/wasilibs/go-pgquery v0.0.0-20260623022807-b68b28131ed3 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 + go.opentelemetry.io/contrib/propagators/b3 v1.44.0 + go.opentelemetry.io/contrib/propagators/ot v1.44.0 + go.opentelemetry.io/otel v1.44.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.44.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.44.0 + go.opentelemetry.io/otel/exporters/prometheus v0.66.0 + go.opentelemetry.io/otel/sdk v1.44.0 + go.opentelemetry.io/otel/sdk/metric v1.44.0 + go.opentelemetry.io/otel/trace v1.44.0 go.uber.org/atomic v1.11.0 go.uber.org/goleak v1.3.0 go.uber.org/mock v0.6.0 go.yaml.in/yaml/v3 v3.0.4 - golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f - golang.org/x/mod v0.35.0 - golang.org/x/sync v0.20.0 + golang.org/x/mod v0.37.0 + golang.org/x/sync v0.21.0 golang.org/x/time v0.15.0 - google.golang.org/api v0.275.0 - google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 - google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 - google.golang.org/grpc v1.80.0 + google.golang.org/api v0.286.0 + google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d + google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d + google.golang.org/grpc v1.81.1 google.golang.org/protobuf v1.36.11 - k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 - pgregory.net/rapid v1.2.0 + k8s.io/utils v0.0.0-20260617174310-a95e086a2553 + pgregory.net/rapid v1.3.0 resenje.org/singleflight v0.4.3 ) @@ -136,35 +129,35 @@ tool ( ) require ( - buf.build/gen/go/gogo/protobuf/protocolbuffers/go v1.36.10-20240617172848-e1dbca2775a7.1 // indirect + buf.build/gen/go/gogo/protobuf/protocolbuffers/go v1.36.11-20240617172848-e1dbca2775a7.1 // indirect cel.dev/expr v0.25.1 // indirect cloud.google.com/go v0.123.0 // indirect cloud.google.com/go/auth v0.20.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/iam v1.7.0 // indirect - cloud.google.com/go/longrunning v0.9.0 // indirect - cloud.google.com/go/monitoring v1.26.0 // indirect + cloud.google.com/go/iam v1.11.0 // indirect + cloud.google.com/go/longrunning v1.0.0 // indirect + cloud.google.com/go/monitoring v1.29.0 // indirect dario.cat/mergo v1.0.0 // indirect - filippo.io/edwards25519 v1.1.1 // indirect + filippo.io/edwards25519 v1.2.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.6.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/antlr4-go/antlr/v4 v4.13.1 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.3 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.3 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.6 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.41.3 // indirect - github.com/aws/smithy-go v1.24.0 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.24 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.2.0 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 // indirect + github.com/aws/smithy-go v1.27.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.24.4 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect @@ -190,12 +183,12 @@ require ( github.com/go-logr/stdr v1.2.2 // indirect github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect - github.com/google/cel-go v0.27.0 // indirect + github.com/google/cel-go v0.28.0 // indirect github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect - github.com/googleapis/gax-go/v2 v2.21.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.16 // indirect + github.com/googleapis/gax-go/v2 v2.22.0 // indirect github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect github.com/gosimple/unidecode v1.0.1 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect @@ -234,7 +227,7 @@ require ( github.com/rivo/uniseg v0.4.7 // indirect github.com/sagikazarmark/locafero v0.12.0 // indirect github.com/samber/lo v1.53.0 // indirect - github.com/samber/slog-common v0.19.0 // indirect + github.com/samber/slog-common v0.21.0 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/spf13/afero v1.15.0 // indirect github.com/spf13/cast v1.10.0 // indirect @@ -243,27 +236,27 @@ require ( github.com/stoewer/go-strcase v1.3.1 // indirect github.com/stretchr/objx v0.5.3 // indirect github.com/subosito/gotenv v1.6.0 // indirect - github.com/tetratelabs/wazero v1.9.0 // indirect - github.com/wasilibs/wazero-helpers v0.0.0-20240620070341-3dff1577cd52 // indirect + github.com/tetratelabs/wazero v1.12.0 // indirect + github.com/wasilibs/wazero-helpers v0.0.0-20250123031827-cd30c44769bb // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/detectors/gcp v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect - go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0 // indirect + go.opentelemetry.io/otel/metric v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect - go.yaml.in/yaml/v2 v2.4.4 // indirect - golang.org/x/crypto v0.52.0 // indirect - golang.org/x/net v0.55.0 // indirect + golang.org/x/crypto v0.53.0 // indirect + golang.org/x/exp v0.0.0-20260611194520-c48552f49976 // indirect + golang.org/x/net v0.56.0 // indirect golang.org/x/oauth2 v0.36.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/term v0.43.0 // indirect - golang.org/x/text v0.37.0 // indirect - golang.org/x/tools v0.44.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/term v0.44.0 // indirect + golang.org/x/text v0.38.0 // indirect + golang.org/x/tools v0.46.0 // indirect google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 777f8e0590..c2af263e34 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,11 @@ buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1 h1:s6hzCXtND/ICdGPTMGk7C+/BFlr2Jg5GyH0NKf4XGXg= buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1/go.mod h1:tvtbpgaVXZX4g6Pn+AnzFycuRK3MOz5HJfEGeEllXYM= -buf.build/gen/go/gogo/protobuf/protocolbuffers/go v1.36.10-20240617172848-e1dbca2775a7.1 h1:A0G7t6KDoDJ7GuAU+ALdp8fCfTlx87ImTx69fXYN3X8= -buf.build/gen/go/gogo/protobuf/protocolbuffers/go v1.36.10-20240617172848-e1dbca2775a7.1/go.mod h1:3ddKE6u98YQFS1jpuYmVEmU1fdAiHqB5Re6S3E16/mI= -buf.build/gen/go/prometheus/prometheus/protocolbuffers/go v1.36.10-20251118093737-4105057cc7d4.1 h1:aKwzrmsRDQkiEzGmjiMVjyYfwHHsFFm7tmQgVA2vyOM= -buf.build/gen/go/prometheus/prometheus/protocolbuffers/go v1.36.10-20251118093737-4105057cc7d4.1/go.mod h1:BdURQlk1lXab5ov60A7yLZZONSP0Cho+RkOntf+FZF8= -buf.build/go/protovalidate v1.1.3 h1:m2GVEgQWd7rk+vIoAZ+f0ygGjvQTuqPQapBBdcpWVPE= -buf.build/go/protovalidate v1.1.3/go.mod h1:9XIuohWz+kj+9JVn3WQneHA5LZP50mjvneZMnbLkiIE= +buf.build/gen/go/gogo/protobuf/protocolbuffers/go v1.36.11-20240617172848-e1dbca2775a7.1 h1:FlXwksX9wjddXoyW88Jw3tz1DEGbXBSGZW6fg0frZ0M= +buf.build/gen/go/gogo/protobuf/protocolbuffers/go v1.36.11-20240617172848-e1dbca2775a7.1/go.mod h1:mwDA6SccUlW4ebUkJTpKoHZzCrLFh/WI48oQRvUTGAA= +buf.build/gen/go/prometheus/prometheus/protocolbuffers/go v1.36.11-20260331160422-eae785f0a21d.1 h1:OyFGRpH4F78kDv9OdkRyzfrBnnJO97nYCP5dIfkOzDk= +buf.build/gen/go/prometheus/prometheus/protocolbuffers/go v1.36.11-20260331160422-eae785f0a21d.1/go.mod h1:6rM4oiNLtvSABJBFC+GReCtGUaWLYwhsadnb9FgJ/2k= +buf.build/go/protovalidate v1.2.0 h1:DQVrUWkmGTBij+kOYv/x2LLxwcLaGKMdzShj1/6/3H0= +buf.build/go/protovalidate v1.2.0/go.mod h1:7rYiQEhqvAipoazpVNBBH2S2f8bjG4huMVy1V2Yofn4= cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -17,18 +17,18 @@ cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIi cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/iam v1.7.0 h1:JD3zh0C6LHl16aCn5Akff0+GELdp1+4hmh6ndoFLl8U= -cloud.google.com/go/iam v1.7.0/go.mod h1:tetWZW1PD/m6vcuY2Zj/aU0eCHNPuxedbnbRTyKXvdY= -cloud.google.com/go/longrunning v0.9.0 h1:0EzbDEGsAvOZNbqXopgniY0w0a1phvu5IdUFq8grmqY= -cloud.google.com/go/longrunning v0.9.0/go.mod h1:pkTz846W7bF4o2SzdWJ40Hu0Re+UoNT6Q5t+igIcb8E= -cloud.google.com/go/monitoring v1.26.0 h1:858kWP5akszJFeiWBSmQJIfS8vsCqkX9hjc7HPsv/tk= -cloud.google.com/go/monitoring v1.26.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= +cloud.google.com/go/iam v1.11.0 h1:KieQ9Pb+LLPak1O3Rv3GgCxhnmkYf7Xyh0P5HfF1jFM= +cloud.google.com/go/iam v1.11.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= +cloud.google.com/go/longrunning v1.0.0 h1:lwzWEYD8+NkYV7dhexOz6kmlvajZA70+bW/xMhRVVdY= +cloud.google.com/go/longrunning v1.0.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= +cloud.google.com/go/monitoring v1.29.0 h1:AHhDsFaSax1/4k+qlIDX/SDGe6hggnfXJ9dkgD9qBPY= +cloud.google.com/go/monitoring v1.29.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= cloud.google.com/go/spanner v1.89.0 h1:r3h5Z5RA8JRPf3HCvA6ujNhREIMhPY+MrDL9mkY8jS0= cloud.google.com/go/spanner v1.89.0/go.mod h1:okNuxnp1wdPaVoM5M28Al2irKZLkHhZ2Z+DW6/ZJWGw= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -filippo.io/edwards25519 v1.1.1 h1:YpjwWWlNmGIDyXOn8zLzqiD+9TyIlPhGFG96P39uBpw= -filippo.io/edwards25519 v1.1.1/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -36,8 +36,8 @@ github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.6.0 h1:BzsL0qE7LvtTEtXG7Dt github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.6.0/go.mod h1:I7kE2kM3qCr9QPT4cU4cCFYkEpVyVr16YOGUHzy+nR0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 h1:rIkQfkCOVKc1OiRCNcSDD8ml5RJlZbH/Xsq7lbpynwc= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0/go.mod h1:RD2SsorTmYhF6HkTmDw7KmPYQk8OBYwTkuasChwv7R4= -github.com/IBM/pgxpoolprometheus v1.1.2 h1:sHJwxoL5Lw4R79Zt+H4Uj1zZ4iqXJLdk7XDE7TPs97U= -github.com/IBM/pgxpoolprometheus v1.1.2/go.mod h1:+vWzISN6S9ssgurhUNmm6AlXL9XLah3TdWJktquKTR8= +github.com/IBM/pgxpoolprometheus v1.1.3 h1:LYDekhCpo0I6qBrnfZlCSDqdr8UX/ZJ2C3GwhrTSVcw= +github.com/IBM/pgxpoolprometheus v1.1.3/go.mod h1:Q/NZpDapcg7VJQSfUfhH+KaGV7wZQk0/bFRoyinkjr8= github.com/KimMachineGun/automemlimit v0.7.5 h1:RkbaC0MwhjL1ZuBKunGDjE/ggwAX43DwZrJqVwyveTk= github.com/KimMachineGun/automemlimit v0.7.5/go.mod h1:QZxpHaGOQoYvFhv/r4u3U0JTC2ZcOwbSr11UZF46UBM= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= @@ -50,48 +50,48 @@ github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEV github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= -github.com/authzed/authzed-go v1.9.0 h1:wscQbRD+OLW+Jg2wfZgmPeEKkaXFyVb3+nbtjUS++JA= -github.com/authzed/authzed-go v1.9.0/go.mod h1:2DL7pg4iqMltwWOSw+wvbEzAK7uRt3545+bkcGYD8D8= +github.com/authzed/authzed-go v1.10.0 h1:GUPzYFnStk1PIBZOkQzqcYA3iHaOlVYVl1UnHIRofKU= +github.com/authzed/authzed-go v1.10.0/go.mod h1:2DL7pg4iqMltwWOSw+wvbEzAK7uRt3545+bkcGYD8D8= github.com/authzed/cel-go v0.20.2 h1:GlmLecGry7Z8HU0k+hmaHHUV05ZHrsFxduXHtIePvck= github.com/authzed/cel-go v0.20.2/go.mod h1:pJHVFWbqUHV1J+klQoZubdKswlbxcsbojda3mye9kiU= github.com/authzed/consistent v0.2.0 h1:qBUkRycc89rcTu4uX4WrHcLV7OMZunYpChKmLwo++Hc= github.com/authzed/consistent v0.2.0/go.mod h1:8F1E3S1tFaxNa1fynw56DW+ZIxdDPjGFok/uKTJuByw= -github.com/authzed/ctxkey v0.0.0-20250226155515-d49f99185584 h1:mP7EpcUL90EKcf/F+gYiU2pz3cGFEuKPHPfe7MntEXk= -github.com/authzed/ctxkey v0.0.0-20250226155515-d49f99185584/go.mod h1:wnimjr5RPPouIhZQ3ztDBLMUKKuUroj3U9Jy0PxeaEE= -github.com/authzed/grpcutil v0.0.0-20240123194739-2ea1e3d2d98b h1:wbh8IK+aMLTCey9sZasO7b6BWLAJnHHvb79fvWCXwxw= -github.com/authzed/grpcutil v0.0.0-20240123194739-2ea1e3d2d98b/go.mod h1:s3qC7V7XIbiNWERv7Lfljy/Lx25/V1Qlexb0WJuA8uQ= +github.com/authzed/ctxkey v0.0.0-20260210154927-ca132876f62c h1:kcjpI9wcj5yFYWJ7bEeiY6hqH2I6Es3lVz6PB7RKblQ= +github.com/authzed/ctxkey v0.0.0-20260210154927-ca132876f62c/go.mod h1:ve6DXRv9l2HcM2lxSUmZKWXl7Iq/00xYixBuHOtST+4= +github.com/authzed/grpcutil v0.0.0-20260105210157-e237581949c2 h1:ymPD1ugBsXVUpLIG/lnRn1ndgOrsrki/0ZX7uP/S1GI= +github.com/authzed/grpcutil v0.0.0-20260105210157-e237581949c2/go.mod h1:FLssYBs1DrwuItfI411kzqcV8QSqGb/B7PC6snNhjvU= github.com/authzed/jitterbug v0.0.0-20260128162915-e97d76daaa24 h1:BXaWSanmHFu3P0xWfTDPpwcJIQ/oSol29+CWe4lSGSU= github.com/authzed/jitterbug v0.0.0-20260128162915-e97d76daaa24/go.mod h1:WvEk4YHnUsmbUaWA/VseQty3X91f6/jEHek5mjYDZUg= -github.com/aws/aws-sdk-go-v2 v1.40.1 h1:difXb4maDZkRH0x//Qkwcfpdg1XQVXEAEs2DdXldFFc= -github.com/aws/aws-sdk-go-v2 v1.40.1/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0= -github.com/aws/aws-sdk-go-v2/config v1.32.3 h1:cpz7H2uMNTDa0h/5CYL5dLUEzPSLo2g0NkbxTRJtSSU= -github.com/aws/aws-sdk-go-v2/config v1.32.3/go.mod h1:srtPKaJJe3McW6T/+GMBZyIPc+SeqJsNPJsd4mOYZ6s= -github.com/aws/aws-sdk-go-v2/credentials v1.19.3 h1:01Ym72hK43hjwDeJUfi1l2oYLXBAOR8gNSZNmXmvuas= -github.com/aws/aws-sdk-go-v2/credentials v1.19.3/go.mod h1:55nWF/Sr9Zvls0bGnWkRxUdhzKqj9uRNlPvgV1vgxKc= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15 h1:utxLraaifrSBkeyII9mIbVwXXWrZdlPO7FIKmyLCEcY= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15/go.mod h1:hW6zjYUDQwfz3icf4g2O41PHi77u10oAzJ84iSzR/lo= -github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.15 h1:0Gyp+cSI/dFNdf8IbOLHvqXlKDlcwyXYMF3Wswe2brc= -github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.15/go.mod h1:oE+iv8mvfL1hd1KOqWD0Wu0qwFjf/SnSEt1WV2q55AA= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15 h1:Y5YXgygXwDI5P4RkteB5yF7v35neH7LfJKBG+hzIons= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15/go.mod h1:K+/1EpG42dFSY7CBj+Fruzm8PsCGWTXJ3jdeJ659oGQ= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15 h1:AvltKnW9ewxX2hFmQS0FyJH93aSvJVUEFvXfU+HWtSE= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15/go.mod h1:3I4oCdZdmgrREhU74qS1dK9yZ62yumob+58AbFR4cQA= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 h1:0ryTNEdJbzUCEWkVXEXoqlXV72J5keC1GvILMOuD00E= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4/go.mod h1:HQ4qwNZh32C3CBeO6iJLQlgtMzqeG17ziAA/3KDJFow= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15 h1:3/u/4yZOffg5jdNk1sDpOQ4Y+R6Xbh+GzpDrSZjuy3U= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15/go.mod h1:4Zkjq0FKjE78NKjabuM4tRXKFzUJWXgP0ItEZK8l7JU= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.3 h1:d/6xOGIllc/XW1lzG9a4AUBMmpLA9PXcQnVPTuHHcik= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.3/go.mod h1:fQ7E7Qj9GiW8y0ClD7cUJk3Bz5Iw8wZkWDHsTe8vDKs= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.6 h1:8sTTiw+9yuNXcfWeqKF2x01GqCF49CpP4Z9nKrrk/ts= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.6/go.mod h1:8WYg+Y40Sn3X2hioaaWAAIngndR8n1XFdRPPX+7QBaM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11 h1:E+KqWoVsSrj1tJ6I/fjDIu5xoS2Zacuu1zT+H7KtiIk= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11/go.mod h1:qyWHz+4lvkXcr3+PoGlGHEI+3DLLiU6/GdrFfMaAhB0= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.3 h1:tzMkjh0yTChUqJDgGkcDdxvZDSrJ/WB6R6ymI5ehqJI= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.3/go.mod h1:T270C0R5sZNLbWUe8ueiAF42XSZxxPocTaGSgs5c/60= -github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk= -github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= +github.com/aws/aws-sdk-go-v2 v1.42.0 h1:XvXMJTkFQtpBKIWZnmr9ZEOc2InWM2yldjXEJ/bymhA= +github.com/aws/aws-sdk-go-v2 v1.42.0/go.mod h1:27+ACypSLljLAEKsCYOmrjKh83vuTRkuAe9Uv/3A4bg= +github.com/aws/aws-sdk-go-v2/config v1.32.25 h1:ACCejvStYoilgwrfegSt5ZntCbPrk52qfwyNcnl3omM= +github.com/aws/aws-sdk-go-v2/config v1.32.25/go.mod h1:LJyU8sDRbXUxFn8xMJIGP+v9QYYwveNLI8a/giAOiAs= +github.com/aws/aws-sdk-go-v2/credentials v1.19.24 h1:2hQqYCV9yqyePQ9o6dCrZc/zO8U3TwPr9mIKlZnPu/I= +github.com/aws/aws-sdk-go-v2/credentials v1.19.24/go.mod h1:IDwpACtwqHLISdzfwUUNq4P9DsB/h5BLg4FwJPNfqFY= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 h1:r6qZHbT+wxgWO/e9vYNUEtg7lv5+UN3pRqKhLXvnArg= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29/go.mod h1:QRnaRcTVGKPGRy8w78HMQtKUGRYcnMZAANATkeVA6Mo= +github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.29 h1:1Hbcvm9a/7hBCAM5y5SAvSKyFUsULrMgmS+XBx32u68= +github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.29/go.mod h1:qIWWBwh4Wp7HU4E8AkMtu9pqHJ6DxmqLFX7zV8ZX4lM= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29 h1:f3vKqSo13fhTYb+JEcXwXefZQE26I1FB5eTSniU67ko= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29/go.mod h1:MzoLFUArKGpGD+ukmPiTPG1X5x4o6M2kq4v2dr1FiEc= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29 h1:RdwIf/CuUsvJX3RgJagbOyotl/cxoLY4xviKuE7p2GY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29/go.mod h1:71wt8W2EgswdZy9Mf9KNnzxZ3TiZlv4caKghPktDOkA= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 h1:VTGy885W5DKBxWRUJbym9hytNaYzsyaPkCHGRRMAOhU= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30/go.mod h1:AS0HycUvJRFvTt613AYDOgO2jzw+00cVSMny8XB3yMY= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 h1:ZD2+BSw9vFsNlKYIasSNt3uDbjqqXIBcM13UJv/Lx2k= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12/go.mod h1:Ms4zlcVBbXbiP7EVLhl+lgjvA/a7YphqQ3Ih3174EmI= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 h1:DRebniUGZ2MqiiIVmQJ04vIXr918hubdHMnarSLEWyU= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29/go.mod h1:LfRkPCD8YHDM2E5eTkos2UpwYeZnBcVarTa8L59bJHA= +github.com/aws/aws-sdk-go-v2/service/signin v1.2.0 h1:3nXpRcFwRCW8n7HgO2QGy0Dc20eQNfBuUemGQhpF8m8= +github.com/aws/aws-sdk-go-v2/service/signin v1.2.0/go.mod h1:LxYujSTLPRlp2vTtcUO/+1ilrew8ytt6SvQyOgejzFQ= +github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 h1:ey1XLTYXb9PcLt4535632o5kCGXNXEhNb620Dqwuylo= +github.com/aws/aws-sdk-go-v2/service/sso v1.31.3/go.mod h1:Lk7PlmoTYryQmyBG0EXqj5BcUbj3whXdU2s3yGI3EAc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 h1:yLr03zQE/5Eu5l3QU0Si+xMbLMbSDF2YXsigqXngs6g= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6/go.mod h1:Q5N6icH+KJZDLh+ESNwzdv6cZ6vLFF/egy3IOxWhmz4= +github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 h1:VrIhKRCSK1umelSgB9RghvA9RTUYeQffyAS5ApXehNI= +github.com/aws/aws-sdk-go-v2/service/sts v1.43.3/go.mod h1:r8wkDOuLaaMFqFiYAb8dGY2A3gJCOujMc6CFOVC4Zhc= +github.com/aws/smithy-go v1.27.1 h1:4T340VFndXtADGF52gYa1POyL7s9E4Z1OeZ1hCscIw8= +github.com/aws/smithy-go v1.27.1/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -108,8 +108,8 @@ github.com/brianvoe/gofakeit/v6 v6.28.0 h1:Xib46XXuQfmlLS2EXRuJpqcw8St6qSZz75OUo github.com/brianvoe/gofakeit/v6 v6.28.0/go.mod h1:Xj58BMSnFqcn/fAQeSK+/PLtC5kSb7FJIq4JyGa8vEs= github.com/caio/go-tdigest/v4 v4.1.0 h1:T0ADU/ZVBdP69plvliZ526x/m/3wg/OxMogzp3416XM= github.com/caio/go-tdigest/v4 v4.1.0/go.mod h1:Wsa+f0EZnV2gShdj1adgl0tQSoXRxtM0QioTgukFw8U= -github.com/ccoveille/go-safecast/v2 v2.0.0 h1:+5eyITXAUj3wMjad6cRVJKGnC7vDS55zk0INzJagub0= -github.com/ccoveille/go-safecast/v2 v2.0.0/go.mod h1:JIYA4CAR33blIDuE6fSwCp2sz1oOBahXnvmdBhOAABs= +github.com/ccoveille/go-safecast/v2 v2.0.1 h1:2+mIu3gXtwmWelBia2kkxfB8eP4orTHDH7ClSlWkd6I= +github.com/ccoveille/go-safecast/v2 v2.0.1/go.mod h1:JIYA4CAR33blIDuE6fSwCp2sz1oOBahXnvmdBhOAABs= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= @@ -141,7 +141,6 @@ github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= -github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= @@ -183,8 +182,8 @@ github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMD github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q= github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A= -github.com/exaring/otelpgx v0.9.3 h1:4yO02tXC7ZJZ+hcqcUkfxblYNCIFGVhpUWI0iw1TzPU= -github.com/exaring/otelpgx v0.9.3/go.mod h1:R5/M5LWsPPBZc1SrRE5e0DiU48bI78C1/GPTWs6I66U= +github.com/exaring/otelpgx v0.11.1 h1:pE79fIg/qh/Lpu00kvswFC5dKfqyJJhMJ4Y4N3w5Lj4= +github.com/exaring/otelpgx v0.11.1/go.mod h1:3OojrUKhhy3lTbYIMBijP3YjMey/jo14eHAW5cXcUdk= github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= @@ -195,8 +194,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= -github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= +github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= @@ -210,15 +209,14 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zerologr v1.2.3 h1:up5N9vcH9Xck3jJkXzgyOxozT14R47IyDODz8LM1KSs= github.com/go-logr/zerologr v1.2.3/go.mod h1:BxwGo7y5zgSHYR1BjbnHPyF/5ZjVKfKxAZANVu6E8Ho= -github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= -github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= +github.com/go-sql-driver/mysql v1.10.0 h1:Q+1LV8DkHJvSYAdR83XzuhDaTykuDx0l6fkXxoWCWfw= +github.com/go-sql-driver/mysql v1.10.0/go.mod h1:M+cqaI7+xxXGG9swrdeUIoPG3Y3KCkF0pZej+SK+nWk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -237,20 +235,18 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= 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/google/cel-go v0.27.0 h1:e7ih85+4qVrBuqQWTW4FKSqZYokVuc3HnhH5keboFTo= -github.com/google/cel-go v0.27.0/go.mod h1:tTJ11FWqnhw5KKpnWpvW9CJC3Y9GK4EIS0WXnBbebzw= +github.com/google/cel-go v0.28.0 h1:KjSWstCpz/MN5t4a8gnGJNIYUsJRpdi/r97xWDphIQc= +github.com/google/cel-go v0.28.0/go.mod h1:X0bD6iVNR8pkROSOoHVdgTkzmRcosof7WQqCD6wcMc8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= 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.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/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.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= @@ -263,10 +259,10 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= -github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.21.0 h1:h45NjjzEO3faG9Lg/cFrBh2PgegVVgzqKzuZl/wMbiI= -github.com/googleapis/gax-go/v2 v2.21.0/go.mod h1:But/NJU6TnZsrLai/xBAQLLz+Hc7fHZJt/hsCz3Fih4= +github.com/googleapis/enterprise-certificate-proxy v0.3.16 h1:F/VPrx0YPBdksZJQdCAp0WUsqnNmZpUZszzfYt0M5Dw= +github.com/googleapis/enterprise-certificate-proxy v0.3.16/go.mod h1:9Yb0eAkH/Xqhvv3zbeKf/+wMJqCeocWc6KIhDvEAuYE= +github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= +github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= 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= @@ -304,17 +300,17 @@ github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7Ulw github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= github.com/jackc/pgx-zerolog v0.0.0-20230315001418-f978528409eb h1:pSv+zRVeAYjbXRFjyytFIMRBSKWVowCi7KbXSMR/+ug= github.com/jackc/pgx-zerolog v0.0.0-20230315001418-f978528409eb/go.mod h1:CRUuPsmIajLt3dZIlJ5+O8IDSib6y8yrst8DkCthTa4= -github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= +github.com/jackc/pgx/v5 v5.10.0 h1:VhSvgU2jSli8o3AqIEOTJr7rZwAEUVo4E4XhR94Zfr0= +github.com/jackc/pgx/v5 v5.10.0/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= -github.com/jeroenrinzema/psql-wire v0.17.0 h1:2U5ElqxglXbStaoh6liohLjxkWIjvUamgVwcr8a90Mk= -github.com/jeroenrinzema/psql-wire v0.17.0/go.mod h1:i7+aXJyIrgcXmbTkij68LdFs03w2f9kt18HIUo+eXmY= +github.com/jeroenrinzema/psql-wire v0.19.0 h1:kxngnLEIyJuhDuPdbSm95MOpx5dkvWUUNQZ+Ezvijo8= +github.com/jeroenrinzema/psql-wire v0.19.0/go.mod h1:i7+aXJyIrgcXmbTkij68LdFs03w2f9kt18HIUo+eXmY= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jzelinskie/cobrautil/v2 v2.0.0-20240819150235-f7fe73942d0f h1:+WgAZQQXj+X8lcJdwcrQpD89Zd9ekdauOK3hWl3FkPU= -github.com/jzelinskie/cobrautil/v2 v2.0.0-20240819150235-f7fe73942d0f/go.mod h1:jsl6cEF6BT3UeQoSLreA7G0sZXemoI5XNqyxzWCohbE= +github.com/jzelinskie/cobrautil/v2 v2.0.0-20260331224425-513c88b62ffe h1:SA9iBugzqlof0pGKCn1f1zg7JWwkJuyPRu2fO86Gd3M= +github.com/jzelinskie/cobrautil/v2 v2.0.0-20260331224425-513c88b62ffe/go.mod h1:YAKfloXwyXXcSiYqlyFFki9xnOsFC40+HONA3FnXEBA= github.com/jzelinskie/persistent v0.0.0-20230816160542-1205ef8f0e15 h1:lFr5Krrc4LESaXK9yW15IQMZ4p2bZGw/+71Z1dV6tuk= github.com/jzelinskie/persistent v0.0.0-20230816160542-1205ef8f0e15/go.mod h1:gGiXKQUcSfUdRciTcDSuLGLZLLFSIjt1xNTE90WHDSI= github.com/jzelinskie/stringz v0.0.3 h1:0GhG3lVMYrYtIvRbxvQI6zqRTT1P1xyQlpa0FhfUXas= @@ -347,11 +343,8 @@ github.com/lithammer/fuzzysearch v1.1.8/go.mod h1:IdqeyBClc3FFqSzYq/MXESsS4S0FsZ github.com/magefile/mage v1.17.2 h1:fyXVu1eadI8Ap1HCCNgEhJ5McIWiYhLR8uol64ZZc40= github.com/magefile/mage v1.17.2/go.mod h1:Yj51kqllmsgFpvvSzgrZPK9WtluG3kUhFaBUVLo4feA= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw= @@ -402,10 +395,9 @@ github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2D github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pelletier/go-toml/v2 v2.3.0 h1:k59bC/lIZREW0/iVaQR8nDHxVq8OVlIzYCOJf421CaM= github.com/pelletier/go-toml/v2 v2.3.0/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= -github.com/pganalyze/pg_query_go/v6 v6.1.0 h1:jG5ZLhcVgL1FAw4C/0VNQaVmX1SUJx71wBGdtTtBvls= -github.com/pganalyze/pg_query_go/v6 v6.1.0/go.mod h1:nvTHIuoud6e1SfrUaFwHqT0i4b5Nr+1rPWVds3B5+50= +github.com/pganalyze/pg_query_go/v6 v6.2.2 h1:O0L6zMC226R82RF3X5n0Ki6HjytDsoAzuzp4ATVAHNo= +github.com/pganalyze/pg_query_go/v6 v6.2.2/go.mod h1:Cn6+j4870kJz3iYNsb0VsNG04vpSWgEvBwc590J4qD0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/planetscale/vtprotobuf v0.6.1-0.20240917153116-6f2963f01587 h1:xzZOeCMQLA/W198ZkdVdt4EKFKJtS26B773zNU377ZY= github.com/planetscale/vtprotobuf v0.6.1-0.20240917153116-6f2963f01587/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -418,14 +410,14 @@ github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UH github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= -github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= +github.com/prometheus/common v0.69.0 h1:OA85nJQS/T/MaYh/Q2CcgDKSGWqNIgrBDvDH85CuiNk= +github.com/prometheus/common v0.69.0/go.mod h1:ZzL3f6u94qUxh9p+tJTrF+FvBS1XXbbRAZCQkytAL0Y= github.com/prometheus/otlptranslator v1.0.0 h1:s0LJW/iN9dkIH+EnhiD3BlkkP5QVIUVEoIwkU+A6qos= github.com/prometheus/otlptranslator v1.0.0/go.mod h1:vRYWnXvI6aWGpsdY/mOT/cbeVRBlPWtBNDb7kGR3uKM= github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= -github.com/puzpuzpuz/xsync/v4 v4.2.0 h1:dlxm77dZj2c3rxq0/XNvvUKISAmovoXF4a4qM6Wvkr0= -github.com/puzpuzpuz/xsync/v4 v4.2.0/go.mod h1:VJDmTCJMBt8igNxnkQd86r+8KUeN1quSfNKu5bLYFQo= +github.com/puzpuzpuz/xsync/v4 v4.5.0 h1:vOSWu6b57/emh+L/Cw0BeQfvxa/cogFywXHeGUxQxAg= +github.com/puzpuzpuz/xsync/v4 v4.5.0/go.mod h1:VJDmTCJMBt8igNxnkQd86r+8KUeN1quSfNKu5bLYFQo= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rodaine/protogofakeit v0.1.1 h1:ZKouljuRM3A+TArppfBqnH8tGZHOwM/pjvtXe9DaXH8= @@ -436,17 +428,17 @@ github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU= github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= -github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= -github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= +github.com/rs/zerolog v1.35.1 h1:m7xQeoiLIiV0BCEY4Hs+j2NG4Gp2o2KPKmhnnLiazKI= +github.com/rs/zerolog v1.35.1/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4= github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI= github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM= github.com/samber/lo v1.53.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= -github.com/samber/slog-common v0.19.0 h1:fNcZb8B2uOLooeYwFpAlKjkQTUafdjfqKcwcC89G9YI= -github.com/samber/slog-common v0.19.0/go.mod h1:dTz+YOU76aH007YUU0DffsXNsGFQRQllPQh9XyNoA3M= -github.com/samber/slog-zerolog/v2 v2.9.0 h1:6LkOabJmZdNLaUWkTC3IVVA+dq7b/V0FM6lz6/7+THI= -github.com/samber/slog-zerolog/v2 v2.9.0/go.mod h1:gnQW9VnCfM34v2pRMUIGMsZOVbYLqY/v0Wxu6atSVGc= +github.com/samber/slog-common v0.21.0 h1:Wo2hTly1Br5RjYqX/BTWJJeDnTE85oWk/7vqlpZuAUc= +github.com/samber/slog-common v0.21.0/go.mod h1:d/6OaSlzdkl9PFpfRLgn8FwY1OW6EFmPtBpsHX4MrU0= +github.com/samber/slog-zerolog/v2 v2.9.2 h1:DIFzfzDTxHeRyGlfg/D7b2by7VVzcsBTybRPrzjWF4c= +github.com/samber/slog-zerolog/v2 v2.9.2/go.mod h1:2q6cYK2OcN6YfQE/WyCnUtigc+yYf3ozqGsGmRwZR6I= github.com/schollz/progressbar/v3 v3.19.0 h1:Ea18xuIRQXLAUidVDox3AbwfUhD0/1IvohyTutOIFoc= github.com/schollz/progressbar/v3 v3.19.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec= github.com/sean-/sysexits v1.0.0 h1:FLf1xcUTBzTqUI1Nc77UwYPcoWgDM09lyMTt8+QCpbE= @@ -494,14 +486,14 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZBf/I= -github.com/tetratelabs/wazero v1.9.0/go.mod h1:TSbcXCfFP0L2FGkRPxHphadXPjo1T6W+CseNNY7EkjM= +github.com/tetratelabs/wazero v1.12.0 h1:DuWcpNu/FzgEXgGBDp8J1Spc+CWOvvtvVyjKlaZopYU= +github.com/tetratelabs/wazero v1.12.0/go.mod h1:LvKtzl2RqO4gyF27BiXU+nKAjcV8f38U+kP/q2vgxh0= github.com/twmb/murmur3 v1.1.8 h1:8Yt9taO/WN3l08xErzjeschgZU2QSrwm1kclYq+0aRg= github.com/twmb/murmur3 v1.1.8/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= -github.com/wasilibs/go-pgquery v0.0.0-20250409022910-10ac41983c07 h1:mJdDDPblDfPe7z7go8Dvv1AJQDI3eQ/5xith3q2mFlo= -github.com/wasilibs/go-pgquery v0.0.0-20250409022910-10ac41983c07/go.mod h1:Ak17IJ037caFp4jpCw/iQQ7/W74Sqpb1YuKJU6HTKfM= -github.com/wasilibs/wazero-helpers v0.0.0-20240620070341-3dff1577cd52 h1:OvLBa8SqJnZ6P+mjlzc2K7PM22rRUPE1x32G9DTPrC4= -github.com/wasilibs/wazero-helpers v0.0.0-20240620070341-3dff1577cd52/go.mod h1:jMeV4Vpbi8osrE/pKUxRZkVaA0EX7NZN0A9/oRzgpgY= +github.com/wasilibs/go-pgquery v0.0.0-20260623022807-b68b28131ed3 h1:XRtDsFHBMM6PNAh4EW7ChRjuZ2C9Vo19/1Gdp6G1NR0= +github.com/wasilibs/go-pgquery v0.0.0-20260623022807-b68b28131ed3/go.mod h1:ZSyYLCRbk2xPqu7lgfrDSSHm+g/7Rxk6JK4KE2cxJ3s= +github.com/wasilibs/wazero-helpers v0.0.0-20250123031827-cd30c44769bb h1:gQ+ZV4wJke/EBKYciZ2MshEouEHFuinB85dY3f5s1q8= +github.com/wasilibs/wazero-helpers v0.0.0-20250123031827-cd30c44769bb/go.mod h1:jMeV4Vpbi8osrE/pKUxRZkVaA0EX7NZN0A9/oRzgpgY= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -518,32 +510,34 @@ go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/detectors/gcp v1.43.0 h1:62yY3dT7/ShwOxzA0RsKRgshBmfElKI4d/Myu2OxDFU= go.opentelemetry.io/contrib/detectors/gcp v1.43.0/go.mod h1:RyaZMFY7yi1kAs45S6mbFGz8O8rqB0dTY14uzvG4LCs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo= -go.opentelemetry.io/contrib/propagators/b3 v1.20.0 h1:Yty9Vs4F3D6/liF1o6FNt0PvN85h/BJJ6DQKJ3nrcM0= -go.opentelemetry.io/contrib/propagators/b3 v1.20.0/go.mod h1:On4VgbkqYL18kbJlWsa18+cMNe6rYpBnPi1ARI/BrsU= -go.opentelemetry.io/contrib/propagators/ot v1.20.0 h1:duH7mgL6VGQH7e7QEAVOFkCQXWpCb4PjTtrhdrYrJRQ= -go.opentelemetry.io/contrib/propagators/ot v1.20.0/go.mod h1:gijQzxOq0JLj9lyZhTvqjDddGV/zaNagpPIn+2r8CEI= -go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= -go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 h1:3iZJKlCZufyRzPzlQhUIWVmfltrXuGyfjREgGP3UUjc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0/go.mod h1:/G+nUPfhq2e+qiXMGxMwumDrP5jtzU+mWN7/sjT2rak= -go.opentelemetry.io/otel/exporters/prometheus v0.62.0 h1:krvC4JMfIOVdEuNPTtQ0ZjCiXrybhv+uOHMfHRmnvVo= -go.opentelemetry.io/otel/exporters/prometheus v0.62.0/go.mod h1:fgOE6FM/swEnsVQCqCnbOfRV4tOnWPg7bVeo4izBuhQ= -go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= -go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= -go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= -go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= -go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= -go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= -go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= -go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 h1:2yEATaop1/a1I4psnSLgWVPLWwCzkqWakgJy7xTDVy0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0/go.mod h1:D7J12YRapIekYyPWgGPlA/23pRmpSEZC5xJC/TTLI9U= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI= +go.opentelemetry.io/contrib/propagators/b3 v1.44.0 h1:1IFH4oFKK8KupzIelCl3u+bkxpGRps1oWRjQI2+TTWs= +go.opentelemetry.io/contrib/propagators/b3 v1.44.0/go.mod h1:JqWFXsc7VDaqIyubFhEd2cPHqsrzqP0Lvn783SUwyro= +go.opentelemetry.io/contrib/propagators/ot v1.44.0 h1:JLTPenzmPtLp5ODPntAA5JhxVu1i3pAFUvXcAORMZAk= +go.opentelemetry.io/contrib/propagators/ot v1.44.0/go.mod h1:8zr0bHgwkoQXucBK39/H4QphmLf1lSen1Z7FPDZD5Uc= +go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= +go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0 h1:4YsVu3B8+3qtWYYrsUYgn0OG78pN0rnNPRGX4SbokQI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0/go.mod h1:+wnlSn0mD1ADVMe3v9Z/WIaiz6q6gL2J/ejaAmdmv80= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.44.0 h1:qazEJlUOQzhCpzQpFETGby7EdqjI1wsd0W+6Gg1SCTU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.44.0/go.mod h1:fOD2Yefuxixkx3ahVNf0O/PERb6r4OlbxfATVnYvzCo= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.44.0 h1:lgh3PiVrRUWMLOVSkQicxzZll5NjF1r+AtsX1XRIHw0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.44.0/go.mod h1:5Cnhth3m/AgOeTgE3ex12pPmiu/gGtZit03kSzx9X7s= +go.opentelemetry.io/otel/exporters/prometheus v0.66.0 h1:vkrK8PAznv2NKt2r+kdu252ccGzkEqLc2aSXbQIALYQ= +go.opentelemetry.io/otel/exporters/prometheus v0.66.0/go.mod h1:V/UB6D3vMF/UBOL5igAsAYnk1nG/bzYYTzvsB16cy7o= +go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= +go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= +go.opentelemetry.io/otel/metric/x v0.66.0 h1:YkCrx1zLOChi9ZcZ6euupOcsgzbVlec7D/xoEU1+cTA= +go.opentelemetry.io/otel/metric/x v0.66.0/go.mod h1:d1+BDj9t96do0/1LoU1ayfCv79ZgNE41qbhBvnMOBZk= +go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58= +go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0= +go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI= +go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA= +go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk= +go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE= go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -568,11 +562,11 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= -golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM= -golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80= +golang.org/x/exp v0.0.0-20260611194520-c48552f49976 h1:X8Hz2ImujgbmetVuW+w2YkyZChE3cBpZi2P158rTG9M= +golang.org/x/exp v0.0.0-20260611194520-c48552f49976/go.mod h1:vnf4pv9iKZXY58sQE1L86zmNWJ4159e1RkcWiLCkeEY= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -581,8 +575,8 @@ 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.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -595,8 +589,8 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= -golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= +golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= +golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= @@ -607,8 +601,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -621,24 +615,22 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/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.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= 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.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= -golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= +golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= +golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -652,16 +644,16 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= -golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= +golang.org/x/tools v0.46.0 h1:7jTurBkPZu4moS/Uy4OQT1M+QBlsj3wejyZwsT8Z7rk= +golang.org/x/tools v0.46.0/go.mod h1:FrD85F8l+NWL+9XWBSyVSHO6Ne4jutsfIFba7AWQ5Ys= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.275.0 h1:vfY5d9vFVJeWEZT65QDd9hbndr7FyZ2+6mIzGAh71NI= -google.golang.org/api v0.275.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= +google.golang.org/api v0.286.0 h1:TdTXMvzYKnWV1/lPbCdbXRqBrkDqjPto22H2xeZZ8LI= +google.golang.org/api v0.286.0/go.mod h1:NlOlUIr8MPoIhT9Bb/oUnRuHbJOLwxb6JSYJM8Yz+jQ= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -670,18 +662,18 @@ google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d h1:N1Ec54vZnIPd7MnxRiYLW+oY4fDR4BOS/LrssdD9+ek= google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:c2hJ1grtnH0xUiEKGDGkjGNTJ1Hy2LrblyKOHF0sqRM= -google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec= -google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d h1:xr2lwHI91bn3UiXcnyzRMQjp2LRiM8wEHzwUaE0YhTs= +google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d/go.mod h1:O0ZOWSrfWfJ+Z5HbwZ+wNtHsg/vk1k2C/w67eww8PfQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d h1:mpAgMyM9vQHxycBlDq50y1VHpfSfVwzXvrQKtYbXuUY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= -google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= +google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= +google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -691,8 +683,6 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -709,9 +699,9 @@ gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y= -k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= -pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +k8s.io/utils v0.0.0-20260617174310-a95e086a2553 h1:hmGqDecjc8d7HVzWzRFl0QD9bYuYKbBEG7t8xwnVxfI= +k8s.io/utils v0.0.0-20260617174310-a95e086a2553/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= +pgregory.net/rapid v1.3.0 h1:vBvO0VSqti75J1jjYqpgPNBLKMd1+gxa9fYo7vk/Exc= +pgregory.net/rapid v1.3.0/go.mod h1:dPlE4OBBxgXPqkP79flB6sJL1dx5azpI7HQ9MY9Z7uk= resenje.org/singleflight v0.4.3 h1:l7foFYg8X/VEHPxWs1K/Pw77807RMVzvXgWGb0J1sdM= resenje.org/singleflight v0.4.3/go.mod h1:lAgQK7VfjG6/pgredbQfmV0RvG/uVhKo6vSuZ0vCWfk= diff --git a/internal/datasets/basesubjectset.go b/internal/datasets/basesubjectset.go index 4719fa3071..122433134c 100644 --- a/internal/datasets/basesubjectset.go +++ b/internal/datasets/basesubjectset.go @@ -374,7 +374,8 @@ func unionWildcardWithWildcard[T Subject[T]](existing *T, adding T, constructor expression, exisingConcreteExclusions.AsSlice(), *existing, - adding) + adding, + ) return &constructed, nil } @@ -411,12 +412,14 @@ func unionWildcardWithConcrete[T Subject[T]](existing *T, adding T, constructor caveatInvert(adding.GetCaveatExpression()), ) - updatedExclusions = append(updatedExclusions, constructor( - adding.GetSubjectId(), - exclusionConditionalExpression, - nil, - existingExclusion, - adding), + updatedExclusions = append( + updatedExclusions, constructor( + adding.GetSubjectId(), + exclusionConditionalExpression, + nil, + existingExclusion, + adding, + ), ) } else { updatedExclusions = append(updatedExclusions, existingExclusion) @@ -427,7 +430,8 @@ func unionWildcardWithConcrete[T Subject[T]](existing *T, adding T, constructor tuple.PublicWildcard, existingWildcard.GetCaveatExpression(), updatedExclusions, - existingWildcard) + existingWildcard, + ) return &constructed } @@ -454,7 +458,8 @@ func unionConcreteWithConcrete[T Subject[T]](existing *T, adding *T, constructor addingConcrete.GetCaveatExpression(), ), nil, - existingConcrete, addingConcrete) + existingConcrete, addingConcrete, + ) return &constructed } @@ -535,7 +540,8 @@ func subtractWildcardFromWildcard[T Subject[T]](existing *T, toRemove T, constru resultingConcreteSubjects = append(resultingConcreteSubjects, constructor( excludedSubject.GetSubjectId(), exclusionConditionalExpression, - nil, excludedSubject)) + nil, excludedSubject, + )) } } @@ -547,7 +553,8 @@ func subtractWildcardFromWildcard[T Subject[T]](existing *T, toRemove T, constru combinedConditionalExpression, existingWildcard.GetExcludedSubjects(), existingWildcard, - toRemove) + toRemove, + ) return &constructed, resultingConcreteSubjects } @@ -583,7 +590,8 @@ func subtractWildcardFromConcrete[T Subject[T]](existingConcrete T, wildcardToRe existingConcrete.GetSubjectId(), caveatAnd(existingConcrete.GetCaveatExpression(), caveatInvert(wildcardToRemove.GetCaveatExpression())), nil, - existingConcrete) + existingConcrete, + ) return &constructed } @@ -600,7 +608,8 @@ func subtractWildcardFromConcrete[T Subject[T]](existingConcrete T, wildcardToRe existingConcrete.GetSubjectId(), caveatAnd(existingConcrete.GetCaveatExpression(), exclusionConditional), nil, - existingConcrete) + existingConcrete, + ) return &constructed } @@ -632,7 +641,8 @@ func subtractConcreteFromConcrete[T Subject[T]](existingConcrete T, toRemove T, existingConcrete.GetSubjectId(), expression, nil, - existingConcrete, toRemove) + existingConcrete, toRemove, + ) return &constructed } @@ -656,12 +666,14 @@ func subtractConcreteFromWildcard[T Subject[T]](wildcard T, concreteToRemove T, concreteToRemove.GetCaveatExpression(), ) - updatedExclusions = append(updatedExclusions, constructor( - concreteToRemove.GetSubjectId(), - exclusionConditionalExpression, - nil, - existingExclusion, - concreteToRemove), + updatedExclusions = append( + updatedExclusions, constructor( + concreteToRemove.GetSubjectId(), + exclusionConditionalExpression, + nil, + existingExclusion, + concreteToRemove, + ), ) wasFound = true } else { @@ -677,7 +689,8 @@ func subtractConcreteFromWildcard[T Subject[T]](wildcard T, concreteToRemove T, tuple.PublicWildcard, wildcard.GetCaveatExpression(), updatedExclusions, - wildcard) + wildcard, + ) return &constructed } @@ -697,7 +710,8 @@ func intersectConcreteWithConcrete[T Subject[T]](first T, second *T, constructor caveatAnd(first.GetCaveatExpression(), secondConcrete.GetCaveatExpression()), nil, first, - secondConcrete) + secondConcrete, + ) return &constructed } @@ -743,7 +757,8 @@ func intersectWildcardWithWildcard[T Subject[T]](first *T, second *T, constructo caveatAnd(firstWildcard.GetCaveatExpression(), secondWildcard.GetCaveatExpression()), concreteExclusions.AsSlice(), firstWildcard, - secondWildcard) + secondWildcard, + ) return &constructed, nil } @@ -780,7 +795,8 @@ func intersectConcreteWithWildcard[T Subject[T]](concrete T, wildcard *T, constr caveatAnd(concrete.GetCaveatExpression(), wildcardToIntersect.GetCaveatExpression()), nil, concrete, - wildcardToIntersect) + wildcardToIntersect, + ) return &constructed, nil case isExcluded && exclusion.GetCaveatExpression() == nil: @@ -800,11 +816,13 @@ func intersectConcreteWithWildcard[T Subject[T]](concrete T, wildcard *T, constr caveatAnd( wildcardToIntersect.GetCaveatExpression(), caveatInvert(exclusion.GetCaveatExpression()), - )), + ), + ), nil, concrete, wildcardToIntersect, - exclusion) + exclusion, + ) return &constructed, nil default: diff --git a/internal/datasets/subjectset_test.go b/internal/datasets/subjectset_test.go index fd3ab25097..a9367cedfa 100644 --- a/internal/datasets/subjectset_test.go +++ b/internal/datasets/subjectset_test.go @@ -197,7 +197,8 @@ func TestSubjectSetAdd(t *testing.T) { // The caveat of the exclusion is now the combination of the caveats from the original // wildcard and the concrete which was added, as the exclusion applies when the exclusion // caveat is true and the concrete's caveat is false. - cwc(nil, csub("foo", + cwc(nil, csub( + "foo", caveatAnd( caveatexpr("testcaveat"), caveatInvert(caveatexpr("anothercaveat")), @@ -216,7 +217,8 @@ func TestSubjectSetAdd(t *testing.T) { // The caveat of the exclusion is now the combination of the caveats from the original // wildcard and the concrete which was added, as the exclusion applies when the exclusion // caveat is true and the concrete's caveat is false. - cwc(caveatexpr("wildcardcaveat"), csub("foo", + cwc(caveatexpr("wildcardcaveat"), csub( + "foo", caveatAnd( caveatexpr("testcaveat"), caveatInvert(caveatexpr("anothercaveat")), @@ -521,7 +523,8 @@ func TestSubjectSetSubtract(t *testing.T) { // // thus causing the expression to become `{*} - {* - {foo}}`, and therefore producing // `foo` as a concrete. - csub("foo", + csub( + "foo", caveatAnd( caveatAnd( caveatAnd( @@ -555,7 +558,8 @@ func TestSubjectSetSubtract(t *testing.T) { // and its own exclusion is true. // Therefore, bar must be *concretely* in the set if: // wildcard1 && wildcard2 && exclusion2 - csub("bar", + csub( + "bar", caveatAnd( caveatAnd( caveatexpr("wildcardcaveat1"), @@ -814,7 +818,8 @@ func TestSubjectSetIntersection(t *testing.T) { []*v1.FoundSubject{ // The concrete is included if its own caveat is true, the wildcard's caveat is true // and the exclusion's caveat is false. - csub("1", + csub( + "1", caveatAnd( caveatexpr("caveat1"), caveatAnd( @@ -832,7 +837,8 @@ func TestSubjectSetIntersection(t *testing.T) { []*v1.FoundSubject{wc()}, []*v1.FoundSubject{ - csub("1", + csub( + "1", caveatexpr("first"), ), }, @@ -854,7 +860,8 @@ func TestSubjectSetIntersection(t *testing.T) { // - If first is false and second is true, we get {*} ∩ {*, 1} => {*, 1} // - If both are true, then the subject appears, but that is just a remnant of the join // on the concrete subject itself (since the set does not simplify expressions) - csub("1", + csub( + "1", caveatOr( caveatOr( caveatAnd( @@ -869,7 +876,8 @@ func TestSubjectSetIntersection(t *testing.T) { }, []*v1.FoundSubject{ wc(), - csub("1", + csub( + "1", caveatOr( caveatOr( caveatAnd( @@ -891,7 +899,8 @@ func TestSubjectSetIntersection(t *testing.T) { csub("1", caveatexpr("second")), }, []*v1.FoundSubject{ - csub("1", + csub( + "1", caveatOr( caveatAnd( caveatexpr("first"), @@ -905,7 +914,8 @@ func TestSubjectSetIntersection(t *testing.T) { ), }, []*v1.FoundSubject{ - csub("1", + csub( + "1", caveatOr( caveatAnd( caveatexpr("second"), @@ -1046,7 +1056,8 @@ func TestMultipleOperations(t *testing.T) { set.Subtract(csub("1", caveatexpr("third"))) }, []*v1.FoundSubject{ - csub("1", + csub( + "1", caveatAnd( caveatOr(caveatexpr("first"), caveatexpr("second")), caveatInvert(caveatexpr("third")), @@ -1063,7 +1074,8 @@ func TestMultipleOperations(t *testing.T) { set.MustAdd(csub("1", caveatexpr("fourth"))) }, []*v1.FoundSubject{ - csub("1", + csub( + "1", caveatOr( caveatAnd( caveatOr(caveatexpr("first"), caveatexpr("second")), @@ -1247,7 +1259,8 @@ func TestMultipleOperations(t *testing.T) { // // NOTE: the remaining expressions are cruft generated to cover other cases, but because // there is no expression simplification, it is not collapsing due to just `!banned` - csub("3", + csub( + "3", caveatOr( caveatOr( caveatAnd( @@ -1285,7 +1298,8 @@ func TestMultipleOperations(t *testing.T) { // ({*, 3} - {3[banned]}) ∩ ({3[second]}) // therefore: // `3` is included if banned is false and second is true. - csub("3", + csub( + "3", caveatOr( caveatAnd( caveatInvert(caveatexpr("banned")), @@ -1689,16 +1703,20 @@ func TestUnionWildcardWithWildcard(t *testing.T) { // Expected // The subject is excluded if both its caveats are true - cwc(nil, - csub("1", + cwc( + nil, + csub( + "1", caveatAnd( caveatexpr("second"), caveatexpr("first"), ), ), ), - cwc(nil, - csub("1", + cwc( + nil, + csub( + "1", caveatAnd( caveatexpr("first"), caveatexpr("second"), @@ -1772,7 +1790,8 @@ func TestUnionWildcardWithConcrete(t *testing.T) { cwc(nil, csub("2", caveatexpr("first"))), }, { - cwc(nil, + cwc( + nil, csub("1", caveatexpr("first")), csub("2", caveatexpr("second")), ), @@ -1782,15 +1801,18 @@ func TestUnionWildcardWithConcrete(t *testing.T) { cwc(nil, csub("2", caveatexpr("second"))), }, { - cwc(nil, + cwc( + nil, csub("1", caveatexpr("first")), csub("2", caveatexpr("second")), ), csub("1", caveatexpr("third")), // {* - {1[first], 2[second]}} U {1[third]} => {* - {1[first && !third], 2[second]}} - cwc(nil, - csub("1", + cwc( + nil, + csub( + "1", caveatAnd( caveatexpr("first"), caveatInvert(caveatexpr("third")), @@ -1807,15 +1829,18 @@ func TestUnionWildcardWithConcrete(t *testing.T) { cwc(caveatexpr("first")), }, { - cwc(caveatexpr("wcaveat"), + cwc( + caveatexpr("wcaveat"), csub("1", caveatexpr("first")), csub("2", caveatexpr("second")), ), csub("1", caveatexpr("third")), // {* - {1[first], 2[second]}}[wcaveat] U {1[third]} => {* - {1[first && !third], 2[second]}}[wcaveat] - cwc(caveatexpr("wcaveat"), - csub("1", + cwc( + caveatexpr("wcaveat"), + csub( + "1", caveatAnd( caveatexpr("first"), caveatInvert(caveatexpr("third")), @@ -1976,7 +2001,8 @@ func TestSubtractWildcardFromWildcard(t *testing.T) { // {* - {1}[first]} - {* - {1}[second]} => {1}[!first && second] nil, []*v1.FoundSubject{ - csub("1", + csub( + "1", caveatAnd( caveatInvert(caveatexpr("first")), caveatexpr("second"), @@ -2009,7 +2035,8 @@ func TestSubtractWildcardFromWildcard(t *testing.T) { csub("1", caveatexpr("first")), ), []*v1.FoundSubject{ - csub("1", + csub( + "1", caveatAnd( caveatAnd( caveatAnd( @@ -2075,7 +2102,8 @@ func TestSubtractWildcardFromConcrete(t *testing.T) { cwc(caveatexpr("second")), // {1}[first] - {*}[second] => {1[first && !second]} - csub("1", + csub( + "1", caveatAnd( caveatexpr("first"), caveatInvert(caveatexpr("second")), @@ -2087,7 +2115,8 @@ func TestSubtractWildcardFromConcrete(t *testing.T) { cwc(nil, csub("1", caveatexpr("first"))), // {1} - {* - {1[first]}} => {1}[first] - csub("1", + csub( + "1", caveatexpr("first"), ), }, @@ -2096,7 +2125,8 @@ func TestSubtractWildcardFromConcrete(t *testing.T) { cwc(nil, csub("1", caveatexpr("exclusion"))), // {1}[previous] - {* - {1[exclusion]}} => {1}[previous && exclusion] - csub("1", + csub( + "1", caveatAnd( caveatexpr("previous"), caveatexpr("exclusion"), @@ -2108,7 +2138,8 @@ func TestSubtractWildcardFromConcrete(t *testing.T) { cwc(caveatexpr("wcaveat"), csub("1", caveatexpr("exclusion"))), // {1}[previous] - {* - {1[exclusion]}}[wcaveat] => {1}[previous && (!wcaveat || exclusion)]] - csub("1", + csub( + "1", caveatAnd( caveatexpr("previous"), caveatOr( @@ -2123,7 +2154,8 @@ func TestSubtractWildcardFromConcrete(t *testing.T) { cwc(caveatexpr("wcaveat"), csub("2", caveatexpr("exclusion"))), // {1}[previous] - {* - {2[exclusion]}}[wcaveat] => {1}[previous && !wcaveat)]] - csub("1", + csub( + "1", caveatAnd( caveatexpr("previous"), caveatInvert(caveatexpr("wcaveat")), @@ -2172,7 +2204,8 @@ func TestSubtractConcreteFromConcrete(t *testing.T) { csub("1", caveatexpr("second")), // {1[first]} - {1[second]} => {1[first && !second]} - csub("1", + csub( + "1", caveatAnd( caveatexpr("first"), caveatInvert(caveatexpr("second")), @@ -2244,13 +2277,15 @@ func TestSubtractConcreteFromWildcard(t *testing.T) { // {* - {1[first], 2}}[wcaveat] - {1}[second] => {* - {1[first || second], 2}}[wcaveat] cwc( caveatexpr("wcaveat"), - csub("1", + csub( + "1", caveatOr( caveatexpr("first"), caveatexpr("second"), ), ), - sub("2")), + sub("2"), + ), }, } @@ -2301,7 +2336,8 @@ func TestIntersectConcreteWithConcrete(t *testing.T) { csub("1", caveatexpr("second")), // {1[first]} ∩ {1[second]} => {1[first && second]} - csub("1", + csub( + "1", caveatAnd( caveatexpr("first"), caveatexpr("second"), @@ -2483,7 +2519,8 @@ func TestIntersectConcreteWithWildcard(t *testing.T) { cwc(nil, csub("42", caveatexpr("first"))), // 42 ∩ {* - 42[first]} => {42}[!first] - csub("42", + csub( + "42", caveatInvert(caveatexpr("first")), ), }, @@ -2492,7 +2529,8 @@ func TestIntersectConcreteWithWildcard(t *testing.T) { cwc(caveatexpr("wcaveat"), csub("1", caveatexpr("first"))), // 1 ∩ {* - 1[first]}[wcaveat] => {1}[wcaveat && !first] - csub("1", + csub( + "1", caveatAnd( caveatexpr("wcaveat"), caveatInvert(caveatexpr("first")), @@ -2504,7 +2542,8 @@ func TestIntersectConcreteWithWildcard(t *testing.T) { cwc(nil, csub("1", caveatexpr("second"))), // 1[first] ∩ {* - 1[second]} => {1}[first && !second] - csub("1", + csub( + "1", caveatAnd( caveatexpr("first"), caveatInvert(caveatexpr("second")), @@ -2516,7 +2555,8 @@ func TestIntersectConcreteWithWildcard(t *testing.T) { cwc(caveatexpr("wcaveat"), csub("1", caveatexpr("second"))), // 1[first] ∩ {* - 1[second]}[wcaveat] => {1}[first && !second && wcaveat] - csub("1", + csub( + "1", caveatAnd( caveatexpr("first"), caveatAnd( @@ -2535,7 +2575,8 @@ func TestIntersectConcreteWithWildcard(t *testing.T) { ), // 1[first] ∩ {* - {1[second], 2[third]}}[wcaveat] => {1}[first && !second && wcaveat] - csub("1", + csub( + "1", caveatAnd( caveatexpr("first"), caveatAnd( diff --git a/internal/datasets/subjectsetbytype_test.go b/internal/datasets/subjectsetbytype_test.go index a6ccc499c3..7cd3acedde 100644 --- a/internal/datasets/subjectsetbytype_test.go +++ b/internal/datasets/subjectsetbytype_test.go @@ -100,7 +100,8 @@ func TestSubjectSetByTypeWithCaveats(t *testing.T) { tom, ok := ss.Get("tom") require.True(t, ok) - require.Equal(t, + require.Equal( + t, caveatexpr("first"), tom.GetCaveatExpression(), ) diff --git a/internal/datastore/common/sql.go b/internal/datastore/common/sql.go index 0449e86edb..256155107d 100644 --- a/internal/datastore/common/sql.go +++ b/internal/datastore/common/sql.go @@ -748,7 +748,8 @@ func (sqf SchemaQueryFilterer) FilterWithNoCaveat() SchemaQueryFilterer { sq.Or{ sq.Eq{sqf.schema.ColCaveatName: nil}, sq.Eq{sqf.schema.ColCaveatName: ""}, - }) + }, + ) sqf.recordVaryingColumnValue(sqf.schema.ColCaveatName) return sqf } diff --git a/internal/datastore/crdb/crdb_test.go b/internal/datastore/crdb/crdb_test.go index 69a2f9f4c7..b1d278fe67 100644 --- a/internal/datastore/crdb/crdb_test.go +++ b/internal/datastore/crdb/crdb_test.go @@ -182,13 +182,13 @@ func TestCRDBDatastoreWithFollowerReads(t *testing.T) { var defaultKeyForTesting = proxy.KeyConfig{ ID: "defaultfortest", - Bytes: (func() []byte { + Bytes: func() []byte { b, err := hex.DecodeString("000102030405060708090A0B0C0D0E0FF0E0D0C0B0A090807060504030201000") if err != nil { panic(err) } return b - })(), + }(), ExpiredAt: nil, } diff --git a/internal/datastore/crdb/partitioner_integration_test.go b/internal/datastore/crdb/partitioner_integration_test.go index 6b92564e15..c47f5f449f 100644 --- a/internal/datastore/crdb/partitioner_integration_test.go +++ b/internal/datastore/crdb/partitioner_integration_test.go @@ -27,7 +27,8 @@ func TestPartitionedExportEndToEnd(t *testing.T) { var connectStr string ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore { connectStr = uri - ds, err := NewCRDBDatastore(ctx, uri, + ds, err := NewCRDBDatastore( + ctx, uri, GCWindow(veryLargeGCWindow), RevisionQuantization(0), WithAcquireTimeout(30*time.Second), @@ -95,7 +96,8 @@ func TestStreamPartitionedExportBoundCombinations(t *testing.T) { var connectStr string ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore { connectStr = uri - ds, err := NewCRDBDatastore(ctx, uri, + ds, err := NewCRDBDatastore( + ctx, uri, GCWindow(veryLargeGCWindow), RevisionQuantization(0), WithAcquireTimeout(30*time.Second), @@ -214,7 +216,8 @@ func TestCRDBSpecialCharEncodingInRangeKeys(t *testing.T) { var connectStr string ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore { connectStr = uri - ds, err := NewCRDBDatastore(ctx, uri, + ds, err := NewCRDBDatastore( + ctx, uri, GCWindow(veryLargeGCWindow), RevisionQuantization(0), WithAcquireTimeout(30*time.Second), @@ -267,13 +270,15 @@ func TestCRDBSpecialCharEncodingInRangeKeys(t *testing.T) { // and return the raw start_key string. getStartKeyForObjectID := func(t *testing.T, namespace, objectID string) string { t.Helper() - _, err := conn.Exec(ctx, + _, err := conn.Exec( + ctx, `INSERT INTO relation_tuple (namespace, object_id, relation, userset_namespace, userset_object_id, userset_relation) VALUES ($1, $2, 'viewer', 'user', 'alice', '...')`, namespace, objectID, ) require.NoError(t, err) - _, err = conn.Exec(ctx, + _, err = conn.Exec( + ctx, `ALTER TABLE relation_tuple SPLIT AT VALUES ($1, $2, 'viewer', 'user', 'alice', '...')`, namespace, objectID, ) @@ -354,7 +359,8 @@ func TestCRDBExhaustiveEscapeScan(t *testing.T) { var connStr string ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore { connStr = uri - ds, err := NewCRDBDatastore(ctx, uri, + ds, err := NewCRDBDatastore( + ctx, uri, GCWindow(veryLargeGCWindow), RevisionQuantization(0), WithAcquireTimeout(30*time.Second), @@ -392,13 +398,15 @@ func TestCRDBExhaustiveEscapeScan(t *testing.T) { ns := fmt.Sprintf("scan_%03d", i) oid := fmt.Sprintf("x%cy", char) - _, err := conn.Exec(ctx, + _, err := conn.Exec( + ctx, `INSERT INTO relation_tuple (namespace, object_id, relation, userset_namespace, userset_object_id, userset_relation) VALUES ($1, $2, 'viewer', 'user', 'alice', '...')`, ns, oid, ) require.NoError(t, err, "INSERT failed for byte 0x%02x", char) - _, err = conn.Exec(ctx, + _, err = conn.Exec( + ctx, `ALTER TABLE relation_tuple SPLIT AT VALUES ($1, $2, 'viewer', 'user', 'alice', '...')`, ns, oid, ) @@ -447,7 +455,8 @@ func TestExplainPartitionedQuery(t *testing.T) { ctx := t.Context() ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore { - ds, err := NewCRDBDatastore(ctx, uri, + ds, err := NewCRDBDatastore( + ctx, uri, GCWindow(veryLargeGCWindow), RevisionQuantization(0), WithAcquireTimeout(30*time.Second), diff --git a/internal/datastore/crdb/partitioner_test.go b/internal/datastore/crdb/partitioner_test.go index 436a536b7f..abadeb4c95 100644 --- a/internal/datastore/crdb/partitioner_test.go +++ b/internal/datastore/crdb/partitioner_test.go @@ -27,7 +27,8 @@ func TestPlanPartitionedExport(t *testing.T) { var connectStr string ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore { connectStr = uri - ds, err := NewCRDBDatastore(ctx, uri, + ds, err := NewCRDBDatastore( + ctx, uri, GCWindow(veryLargeGCWindow), RevisionQuantization(0), WithAcquireTimeout(30*time.Second), @@ -177,20 +178,22 @@ func TestPlanPartitionedExport(t *testing.T) { func TestUnwrapAsBulkExportPartitioner(t *testing.T) { b := testdatastore.RunCRDBForTesting(t, "", crdbTestVersion()) - t.Run("bare datastore can be unwrapped", createDatastoreTest(b, func(t *testing.T, ds datastore.Datastore) { - partitioner := datastore.UnwrapAs[datastore.BulkExportPartitioner](ds) - require.NotNil(t, partitioner, "expected datastore to be unwrappable as BulkExportPartitioner") - }, + t.Run("bare datastore can be unwrapped", createDatastoreTest( + b, func(t *testing.T, ds datastore.Datastore) { + partitioner := datastore.UnwrapAs[datastore.BulkExportPartitioner](ds) + require.NotNil(t, partitioner, "expected datastore to be unwrappable as BulkExportPartitioner") + }, GCWindow(veryLargeGCWindow), RevisionQuantization(0), WithAcquireTimeout(30*time.Second), )) - t.Run("readonly-wrapped datastore can be unwrapped", createDatastoreTest(b, func(t *testing.T, ds datastore.Datastore) { - roDS := proxy.NewReadonlyDatastore(ds) - partitioner := datastore.UnwrapAs[datastore.BulkExportPartitioner](roDS) - require.NotNil(t, partitioner, "expected readonly-wrapped datastore to be unwrappable as BulkExportPartitioner") - }, + t.Run("readonly-wrapped datastore can be unwrapped", createDatastoreTest( + b, func(t *testing.T, ds datastore.Datastore) { + roDS := proxy.NewReadonlyDatastore(ds) + partitioner := datastore.UnwrapAs[datastore.BulkExportPartitioner](roDS) + require.NotNil(t, partitioner, "expected readonly-wrapped datastore to be unwrappable as BulkExportPartitioner") + }, GCWindow(veryLargeGCWindow), RevisionQuantization(0), WithAcquireTimeout(30*time.Second), @@ -215,7 +218,8 @@ func TestPlanPartitionsOnlyUsesPrimaryIndex(t *testing.T) { var connectStr string ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore { connectStr = uri - ds, err := NewCRDBDatastore(ctx, uri, + ds, err := NewCRDBDatastore( + ctx, uri, GCWindow(veryLargeGCWindow), RevisionQuantization(0), WithAcquireTimeout(30*time.Second), @@ -506,7 +510,8 @@ func TestPlanPartitionsLogic(t *testing.T) { require.Nil(t, partitions[1].UpperBound) // Shared boundary. - require.Equal(t, + require.Equal( + t, *dsoptions.ToRelationship(partitions[0].UpperBound), *dsoptions.ToRelationship(partitions[1].LowerBound), ) @@ -526,7 +531,8 @@ func TestPlanPartitionsLogic(t *testing.T) { // All adjacent boundaries match. for i := 1; i < len(partitions); i++ { - require.Equal(t, + require.Equal( + t, *dsoptions.ToRelationship(partitions[i-1].UpperBound), *dsoptions.ToRelationship(partitions[i].LowerBound), ) @@ -555,7 +561,8 @@ func TestPlanPartitionsLogic(t *testing.T) { require.Nil(t, partitions[3].UpperBound) for i := 1; i < len(partitions); i++ { - require.Equal(t, + require.Equal( + t, *dsoptions.ToRelationship(partitions[i-1].UpperBound), *dsoptions.ToRelationship(partitions[i].LowerBound), ) diff --git a/internal/datastore/memdb/readonly.go b/internal/datastore/memdb/readonly.go index 991c40dcad..55fab3b34d 100644 --- a/internal/datastore/memdb/readonly.go +++ b/internal/datastore/memdb/readonly.go @@ -518,7 +518,7 @@ func newSubjectSortedIterator(now time.Time, it memdb.ResultIterator, limit *uin rhsSub := results[j].Subject return less(lhsSub.ObjectType, lhsSub.ObjectID, lhsSub.Relation, rhsSub) || (eq(lhsSub.ObjectType, lhsSub.ObjectID, lhsSub.Relation, rhsSub) && - (less(lhsRes.ObjectType, lhsRes.ObjectID, lhsRes.Relation, rhsRes))) + less(lhsRes.ObjectType, lhsRes.ObjectID, lhsRes.Relation, rhsRes)) }) // Limit them if requested diff --git a/internal/datastore/mysql/datastore_test.go b/internal/datastore/mysql/datastore_test.go index 97b0d41b46..3d7392e20b 100644 --- a/internal/datastore/mysql/datastore_test.go +++ b/internal/datastore/mysql/datastore_test.go @@ -42,7 +42,8 @@ type datastoreTester struct { func (dst *datastoreTester) createDatastore(tb testing.TB, revisionQuantization, gcInterval, gcWindow time.Duration, _ uint16) (datastore.Datastore, error) { ctx := tb.Context() ds := dst.b.NewDatastore(tb, func(engine, uri string) datastore.Datastore { - ds, err := newMySQLDatastore(ctx, uri, primaryInstanceID, + ds, err := newMySQLDatastore( + ctx, uri, primaryInstanceID, RevisionQuantization(revisionQuantization), GCWindow(gcWindow), GCInterval(gcInterval), diff --git a/internal/datastore/mysql/locks.go b/internal/datastore/mysql/locks.go index 7a1e8363ce..4cfddee4a3 100644 --- a/internal/datastore/mysql/locks.go +++ b/internal/datastore/mysql/locks.go @@ -31,7 +31,8 @@ func (mds *mysqlDatastore) tryAcquireLock(ctx context.Context, lockName lockName func (mds *mysqlDatastore) releaseLock(ctx context.Context, lockName lockName) error { // See: https://dev.mysql.com/doc/refman/8.4/en/locking-functions.html#function_release-lock - _, err := mds.db.ExecContext(ctx, ` + _, err := mds.db.ExecContext( + ctx, ` SELECT RELEASE_LOCK(?) `, lockName, diff --git a/internal/datastore/mysql/migrations/driver.go b/internal/datastore/mysql/migrations/driver.go index 39f8dea43d..8c1a480f5a 100644 --- a/internal/datastore/mysql/migrations/driver.go +++ b/internal/datastore/mysql/migrations/driver.go @@ -145,7 +145,8 @@ func BeginTxFunc(ctx context.Context, db *sql.DB, txOptions *sql.TxOptions, f fu // WriteVersion overwrites the _meta_version_ column name which encodes the version // of the database schema. func (driver *MySQLDriver) WriteVersion(ctx context.Context, txWrapper TxWrapper, version, replaced string) error { - stmt := fmt.Sprintf("ALTER TABLE %s CHANGE %s %s VARCHAR(255) NOT NULL", + stmt := fmt.Sprintf( + "ALTER TABLE %s CHANGE %s %s VARCHAR(255) NOT NULL", driver.migrationVersion(), revisionToColumnName(replaced), revisionToColumnName(version), diff --git a/internal/datastore/mysql/migrations/manager.go b/internal/datastore/mysql/migrations/manager.go index 1d3d824cc2..13562166f7 100644 --- a/internal/datastore/mysql/migrations/manager.go +++ b/internal/datastore/mysql/migrations/manager.go @@ -42,7 +42,8 @@ func registerMigration(version, replaces string, up migrate.MigrationFunc[Wrappe // validate migration names to ensure they are compatible with mysql column names for _, v := range []string{version, replaces} { if match := migrationNameRe.MatchString(v); !match { - return fmt.Errorf("migration from '%s' to '%s': '%s' is an invalid mysql migration version, expected to match pattern '%s'", + return fmt.Errorf( + "migration from '%s' to '%s': '%s' is an invalid mysql migration version, expected to match pattern '%s'", replaces, version, v, migrationNamePattern, ) } diff --git a/internal/datastore/mysql/migrations/zz_migration.0001_initial_schema.go b/internal/datastore/mysql/migrations/zz_migration.0001_initial_schema.go index 7dc266d232..3ffc562d58 100644 --- a/internal/datastore/mysql/migrations/zz_migration.0001_initial_schema.go +++ b/internal/datastore/mysql/migrations/zz_migration.0001_initial_schema.go @@ -6,7 +6,8 @@ func createMigrationVersion(t *tables) string { // we need the additional primary key column because github.com/github/gh-ost requires a shared, not-null // key between the _to_ and _from_ table schemas to perform a schema migration. // -- https://github.com/github/gh-ost/blob/master/doc/shared-key.md - return fmt.Sprintf(`CREATE TABLE %s ( + return fmt.Sprintf( + `CREATE TABLE %s ( id int(11) NOT NULL PRIMARY KEY, _meta_version_ VARCHAR(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;`, t.migrationVersion(), @@ -15,7 +16,8 @@ func createMigrationVersion(t *tables) string { // namespace max size: https://buf.build/authzed/api/file/main/authzed/api/v0/core.proto#L29 func createNamespaceConfig(t *tables) string { - return fmt.Sprintf(`CREATE TABLE %s ( + return fmt.Sprintf( + `CREATE TABLE %s ( namespace VARCHAR(128) NOT NULL, serialized_config BLOB NOT NULL, created_transaction BIGINT NOT NULL, @@ -29,7 +31,8 @@ func createNamespaceConfig(t *tables) string { // relationship max size: https://buf.build/authzed/api/file/main:authzed/api/v1/core.proto#L33 // object id max size: https://buf.build/authzed/api/file/main:authzed/api/v1/core.proto#L45 func createRelationTuple(t *tables) string { - return fmt.Sprintf(`CREATE TABLE %s ( + return fmt.Sprintf( + `CREATE TABLE %s ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, namespace VARCHAR(128) NOT NULL, object_id VARCHAR(128) NOT NULL, @@ -50,7 +53,8 @@ func createRelationTuple(t *tables) string { } func createRelationTupleTransaction(t *tables) string { - return fmt.Sprintf(`CREATE TABLE %s ( + return fmt.Sprintf( + `CREATE TABLE %s ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, timestamp DATETIME(6) DEFAULT NOW(6) NOT NULL, PRIMARY KEY (id), @@ -60,7 +64,8 @@ func createRelationTupleTransaction(t *tables) string { } func init() { - mustRegisterMigration("initial", "", noNonatomicMigration, + mustRegisterMigration( + "initial", "", noNonatomicMigration, newStatementBatch( createMigrationVersion, createNamespaceConfig, diff --git a/internal/datastore/mysql/migrations/zz_migration.0002_add_unique_datastore_id.go b/internal/datastore/mysql/migrations/zz_migration.0002_add_unique_datastore_id.go index 86ce7c7c51..b5903afcb3 100644 --- a/internal/datastore/mysql/migrations/zz_migration.0002_add_unique_datastore_id.go +++ b/internal/datastore/mysql/migrations/zz_migration.0002_add_unique_datastore_id.go @@ -5,7 +5,8 @@ import ( ) func createMetadataTable(t *tables) string { - return fmt.Sprintf(`CREATE TABLE %s ( + return fmt.Sprintf( + `CREATE TABLE %s ( id BIGINT UNSIGNED NOT NULL PRIMARY KEY, unique_id VARCHAR(36));`, t.Metadata(), @@ -13,7 +14,8 @@ func createMetadataTable(t *tables) string { } func init() { - mustRegisterMigration("add_unique_datastore_id", "initial", noNonatomicMigration, + mustRegisterMigration( + "add_unique_datastore_id", "initial", noNonatomicMigration, newStatementBatch( createMetadataTable, ).execute, diff --git a/internal/datastore/mysql/migrations/zz_migration.0003_add_ns_config_id.go b/internal/datastore/mysql/migrations/zz_migration.0003_add_ns_config_id.go index 6b103b5945..e25eb1f390 100644 --- a/internal/datastore/mysql/migrations/zz_migration.0003_add_ns_config_id.go +++ b/internal/datastore/mysql/migrations/zz_migration.0003_add_ns_config_id.go @@ -17,7 +17,8 @@ func createNSConfigID(t *tables) string { } func init() { - mustRegisterMigration("add_ns_config_id", "add_unique_datastore_id", noNonatomicMigration, + mustRegisterMigration( + "add_ns_config_id", "add_unique_datastore_id", noNonatomicMigration, newStatementBatch( dropNSConfigPK, createNSConfigID, diff --git a/internal/datastore/mysql/migrations/zz_migration.0004_add_caveat.go b/internal/datastore/mysql/migrations/zz_migration.0004_add_caveat.go index 7e8b27cae0..f0d9d86e2b 100644 --- a/internal/datastore/mysql/migrations/zz_migration.0004_add_caveat.go +++ b/internal/datastore/mysql/migrations/zz_migration.0004_add_caveat.go @@ -6,7 +6,8 @@ import "fmt" // 3072 / 4 bytes per character = 768 - 2 bigints (4 bytes) = 764 bytes. // we choose 700 to leave headroom for potential future new columns in the PK func createCaveatTable(t *tables) string { - return fmt.Sprintf(`CREATE TABLE %s ( + return fmt.Sprintf( + `CREATE TABLE %s ( name VARCHAR(700) NOT NULL, definition BLOB NOT NULL, created_transaction BIGINT NOT NULL, @@ -21,7 +22,8 @@ func createCaveatTable(t *tables) string { // for caveat name. This gives larger headroom for JSON column size. // See https://dev.mysql.com/doc/refman/5.7/en/char.html func addCaveatToRelationTuplesTable(t *tables) string { - return fmt.Sprintf(`ALTER TABLE %s + return fmt.Sprintf( + `ALTER TABLE %s ADD COLUMN caveat_name VARCHAR(700), ADD COLUMN caveat_context JSON;`, t.RelationTuple(), @@ -29,7 +31,8 @@ func addCaveatToRelationTuplesTable(t *tables) string { } func init() { - mustRegisterMigration("add_caveat", "add_ns_config_id", noNonatomicMigration, + mustRegisterMigration( + "add_caveat", "add_ns_config_id", noNonatomicMigration, newStatementBatch( createCaveatTable, addCaveatToRelationTuplesTable, diff --git a/internal/datastore/mysql/migrations/zz_migration.0005_extend_object_id.go b/internal/datastore/mysql/migrations/zz_migration.0005_extend_object_id.go index 679f80e40b..f25fe95ee7 100644 --- a/internal/datastore/mysql/migrations/zz_migration.0005_extend_object_id.go +++ b/internal/datastore/mysql/migrations/zz_migration.0005_extend_object_id.go @@ -14,7 +14,8 @@ func adjustObjectIDLength(t *tables) string { } func init() { - mustRegisterMigration("extend_object_id", "add_caveat", noNonatomicMigration, + mustRegisterMigration( + "extend_object_id", "add_caveat", noNonatomicMigration, newStatementBatch( adjustObjectIDLength, ).execute, diff --git a/internal/datastore/mysql/migrations/zz_migration.0006_convert_definitions_to_longblob.go b/internal/datastore/mysql/migrations/zz_migration.0006_convert_definitions_to_longblob.go index 1f44f95936..65cab05d93 100644 --- a/internal/datastore/mysql/migrations/zz_migration.0006_convert_definitions_to_longblob.go +++ b/internal/datastore/mysql/migrations/zz_migration.0006_convert_definitions_to_longblob.go @@ -3,21 +3,24 @@ package migrations import "fmt" func convertNamespaceDefinitionToLongBlob(t *tables) string { - return fmt.Sprintf(`ALTER TABLE %s + return fmt.Sprintf( + `ALTER TABLE %s MODIFY serialized_config LONGBLOB NOT NULL;`, t.Namespace(), ) } func convertCaveatDefinitionToLongBlob(t *tables) string { - return fmt.Sprintf(`ALTER TABLE %s + return fmt.Sprintf( + `ALTER TABLE %s MODIFY definition LONGBLOB NOT NULL;`, t.Caveat(), ) } func init() { - mustRegisterMigration("longblob_definitions", "extend_object_id", noNonatomicMigration, + mustRegisterMigration( + "longblob_definitions", "extend_object_id", noNonatomicMigration, newStatementBatch( convertNamespaceDefinitionToLongBlob, convertCaveatDefinitionToLongBlob, diff --git a/internal/datastore/mysql/migrations/zz_migration.0007_watch_api_rel_tuple_index.go b/internal/datastore/mysql/migrations/zz_migration.0007_watch_api_rel_tuple_index.go index b2d9b55cdb..f4418fa99c 100644 --- a/internal/datastore/mysql/migrations/zz_migration.0007_watch_api_rel_tuple_index.go +++ b/internal/datastore/mysql/migrations/zz_migration.0007_watch_api_rel_tuple_index.go @@ -3,13 +3,15 @@ package migrations import "fmt" func addWatchAPIIndex(t *tables) string { - return fmt.Sprintf(`CREATE INDEX ix_relation_tuple_watch + return fmt.Sprintf( + `CREATE INDEX ix_relation_tuple_watch ON %s (created_transaction, deleted_transaction DESC);`, t.RelationTuple(), ) } func init() { - mustRegisterMigration("watch_api_relation_tuple_index", "longblob_definitions", noNonatomicMigration, + mustRegisterMigration( + "watch_api_relation_tuple_index", "longblob_definitions", noNonatomicMigration, newStatementBatch( addWatchAPIIndex, ).execute, diff --git a/internal/datastore/mysql/migrations/zz_migration.0008_add_relationship_counters_table.go b/internal/datastore/mysql/migrations/zz_migration.0008_add_relationship_counters_table.go index 1290e4f144..42c8d739d7 100644 --- a/internal/datastore/mysql/migrations/zz_migration.0008_add_relationship_counters_table.go +++ b/internal/datastore/mysql/migrations/zz_migration.0008_add_relationship_counters_table.go @@ -3,7 +3,8 @@ package migrations import "fmt" func addRelationshipCountersTable(t *tables) string { - return fmt.Sprintf(`CREATE TABLE %s ( + return fmt.Sprintf( + `CREATE TABLE %s ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(128) NOT NULL, serialized_filter BLOB NOT NULL, @@ -17,7 +18,8 @@ func addRelationshipCountersTable(t *tables) string { } func init() { - mustRegisterMigration("add_relationship_counters_table", "watch_api_relation_tuple_index", noNonatomicMigration, + mustRegisterMigration( + "add_relationship_counters_table", "watch_api_relation_tuple_index", noNonatomicMigration, newStatementBatch( addRelationshipCountersTable, ).execute, diff --git a/internal/datastore/mysql/migrations/zz_migration.0009_add_metadata_to_transaction_table.go b/internal/datastore/mysql/migrations/zz_migration.0009_add_metadata_to_transaction_table.go index 64e66a83e8..4b14495b70 100644 --- a/internal/datastore/mysql/migrations/zz_migration.0009_add_metadata_to_transaction_table.go +++ b/internal/datastore/mysql/migrations/zz_migration.0009_add_metadata_to_transaction_table.go @@ -3,14 +3,16 @@ package migrations import "fmt" func addMetadataToTransactionTable(t *tables) string { - return fmt.Sprintf(`ALTER TABLE %s + return fmt.Sprintf( + `ALTER TABLE %s ADD COLUMN metadata BLOB NULL DEFAULT NULL;`, t.RelationTupleTransaction(), ) } func init() { - mustRegisterMigration("add_metadata_to_transaction_table", "add_relationship_counters_table", noNonatomicMigration, + mustRegisterMigration( + "add_metadata_to_transaction_table", "add_relationship_counters_table", noNonatomicMigration, newStatementBatch( addMetadataToTransactionTable, ).execute, diff --git a/internal/datastore/mysql/migrations/zz_migration.0010_add_expiration.go b/internal/datastore/mysql/migrations/zz_migration.0010_add_expiration.go index 32f30583ba..795373b22b 100644 --- a/internal/datastore/mysql/migrations/zz_migration.0010_add_expiration.go +++ b/internal/datastore/mysql/migrations/zz_migration.0010_add_expiration.go @@ -3,7 +3,8 @@ package migrations import "fmt" func addExpirationToRelationTupleTable(t *tables) string { - return fmt.Sprintf(`ALTER TABLE %s + return fmt.Sprintf( + `ALTER TABLE %s ADD COLUMN expiration DATETIME NULL DEFAULT NULL;`, t.RelationTuple(), ) @@ -11,14 +12,16 @@ func addExpirationToRelationTupleTable(t *tables) string { // Used for cleaning up expired relationships. func addExpiredRelationshipsIndex(t *tables) string { - return fmt.Sprintf(`CREATE INDEX ix_%s_expired ON %s (expiration);`, + return fmt.Sprintf( + `CREATE INDEX ix_%s_expired ON %s (expiration);`, t.RelationTuple(), t.RelationTuple(), ) } func init() { - mustRegisterMigration("add_expiration_to_relation_tuple", "add_metadata_to_transaction_table", noNonatomicMigration, + mustRegisterMigration( + "add_expiration_to_relation_tuple", "add_metadata_to_transaction_table", noNonatomicMigration, newStatementBatch( addExpirationToRelationTupleTable, addExpiredRelationshipsIndex, diff --git a/internal/datastore/mysql/migrations/zz_migration.0011_add_schema_tables.go b/internal/datastore/mysql/migrations/zz_migration.0011_add_schema_tables.go index 9e5f44628d..306ddd3afe 100644 --- a/internal/datastore/mysql/migrations/zz_migration.0011_add_schema_tables.go +++ b/internal/datastore/mysql/migrations/zz_migration.0011_add_schema_tables.go @@ -3,7 +3,8 @@ package migrations import "fmt" func createSchemaTable(t *tables) string { - return fmt.Sprintf(`CREATE TABLE %s ( + return fmt.Sprintf( + `CREATE TABLE %s ( name VARCHAR(700) NOT NULL, chunk_index INT NOT NULL, chunk_data LONGBLOB NOT NULL, @@ -15,7 +16,8 @@ func createSchemaTable(t *tables) string { } func createSchemaRevisionTable(t *tables) string { - return fmt.Sprintf(`CREATE TABLE %s ( + return fmt.Sprintf( + `CREATE TABLE %s ( name VARCHAR(700) NOT NULL DEFAULT 'current', hash BLOB NOT NULL, created_transaction BIGINT NOT NULL, @@ -26,7 +28,8 @@ func createSchemaRevisionTable(t *tables) string { } func init() { - mustRegisterMigration("add_schema_tables", "add_expiration_to_relation_tuple", noNonatomicMigration, + mustRegisterMigration( + "add_schema_tables", "add_expiration_to_relation_tuple", noNonatomicMigration, newStatementBatch( createSchemaTable, createSchemaRevisionTable, diff --git a/internal/datastore/mysql/migrations/zz_migration.0013_identifiers_case_sensitive.go b/internal/datastore/mysql/migrations/zz_migration.0013_identifiers_case_sensitive.go index 692cc18497..9eaed7f019 100644 --- a/internal/datastore/mysql/migrations/zz_migration.0013_identifiers_case_sensitive.go +++ b/internal/datastore/mysql/migrations/zz_migration.0013_identifiers_case_sensitive.go @@ -29,7 +29,8 @@ import "fmt" // uniqueness (more distinct values), so it cannot violate any existing unique constraint. func makeRelationTupleCaseSensitive(t *tables) string { - return fmt.Sprintf(`ALTER TABLE %s CONVERT TO CHARACTER SET latin1 COLLATE latin1_bin;`, + return fmt.Sprintf( + `ALTER TABLE %s CONVERT TO CHARACTER SET latin1 COLLATE latin1_bin;`, t.RelationTuple(), ) } @@ -81,7 +82,8 @@ func makeMetadataUniqueIDCaseSensitive(t *tables) string { } func init() { - mustRegisterMigration("identifiers_case_sensitive", "populate_schema_tables", noNonatomicMigration, + mustRegisterMigration( + "identifiers_case_sensitive", "populate_schema_tables", noNonatomicMigration, newStatementBatch( makeRelationTupleCaseSensitive, makeNamespaceConfigCaseSensitive, diff --git a/internal/datastore/mysql/readwrite.go b/internal/datastore/mysql/readwrite.go index 9eafbdf9cf..f1e8b77ab8 100644 --- a/internal/datastore/mysql/readwrite.go +++ b/internal/datastore/mysql/readwrite.go @@ -545,7 +545,8 @@ func (rwt *mysqlReadWriteTXN) BulkLoad(ctx context.Context, iter datastore.BulkW caveatName = rel.OptionalCaveat.CaveatName caveatContext = rel.OptionalCaveat.Context.AsMap() } - args = append(args, + args = append( + args, rel.Resource.ObjectType, rel.Resource.ObjectID, rel.Resource.Relation, diff --git a/internal/datastore/postgres/log_tracer.go b/internal/datastore/postgres/log_tracer.go index 049a576ff9..89d0946ff9 100644 --- a/internal/datastore/postgres/log_tracer.go +++ b/internal/datastore/postgres/log_tracer.go @@ -5,7 +5,7 @@ import ( "github.com/jackc/pgx/v5/tracelog" "go.opentelemetry.io/otel/attribute" - semconv "go.opentelemetry.io/otel/semconv/v1.32.0" + semconv "go.opentelemetry.io/otel/semconv/v1.41.0" "go.opentelemetry.io/otel/trace" "github.com/authzed/spicedb/internal/telemetry/otelconv" diff --git a/internal/datastore/postgres/migrations/zz_migration.0006_add_gc_index.go b/internal/datastore/postgres/migrations/zz_migration.0006_add_gc_index.go index 3b698f1065..d069d6be4a 100644 --- a/internal/datastore/postgres/migrations/zz_migration.0006_add_gc_index.go +++ b/internal/datastore/postgres/migrations/zz_migration.0006_add_gc_index.go @@ -11,7 +11,8 @@ const ( ) func init() { - if err := DatabaseMigrations.Register("add-gc-index", "change-transaction-timestamp-default", + if err := DatabaseMigrations.Register( + "add-gc-index", "change-transaction-timestamp-default", func(ctx context.Context, conn *pgx.Conn) error { // CREATE INDEX CONCURRENTLY cannot run inside a transaction block (SQLSTATE 25001) _, err := conn.Exec(ctx, createDeletedTransactionIndex) diff --git a/internal/datastore/postgres/migrations/zz_migration.0008_add_ns_config_id.go b/internal/datastore/postgres/migrations/zz_migration.0008_add_ns_config_id.go index 754af646cd..18d29d7b8a 100644 --- a/internal/datastore/postgres/migrations/zz_migration.0008_add_ns_config_id.go +++ b/internal/datastore/postgres/migrations/zz_migration.0008_add_ns_config_id.go @@ -26,7 +26,8 @@ func init() { } return nil - }); err != nil { + }, + ); err != nil { panic("failed to register migration: " + err.Error()) } } diff --git a/internal/datastore/postgres/migrations/zz_migration.0011_backfill_xid_add_indices.go b/internal/datastore/postgres/migrations/zz_migration.0011_backfill_xid_add_indices.go index 4d2052ba93..3a900a543e 100644 --- a/internal/datastore/postgres/migrations/zz_migration.0011_backfill_xid_add_indices.go +++ b/internal/datastore/postgres/migrations/zz_migration.0011_backfill_xid_add_indices.go @@ -117,7 +117,8 @@ var dropBackfillIndices = []string{ } func init() { - if err := DatabaseMigrations.Register("backfill-xid-add-indices", "add-xid-columns", + if err := DatabaseMigrations.Register( + "backfill-xid-add-indices", "add-xid-columns", func(ctx context.Context, conn *pgx.Conn) error { for _, stmt := range addBackfillIndices { if _, err := conn.Exec(ctx, stmt); err != nil { diff --git a/internal/datastore/postgres/migrations/zz_migration.0023_add_index_for_transaction_gc.go b/internal/datastore/postgres/migrations/zz_migration.0023_add_index_for_transaction_gc.go index 840c768347..2a0de6afc8 100644 --- a/internal/datastore/postgres/migrations/zz_migration.0023_add_index_for_transaction_gc.go +++ b/internal/datastore/postgres/migrations/zz_migration.0023_add_index_for_transaction_gc.go @@ -3,7 +3,8 @@ package migrations import "github.com/authzed/spicedb/internal/datastore/postgres/schema" func init() { - registerIndexMigration(schema.IndexSortedRelationTupleTransaction, + registerIndexMigration( + schema.IndexSortedRelationTupleTransaction, "add-index-for-transaction-gc", "add-expiration-cleanup-index", ) diff --git a/internal/datastore/postgres/postgres_shared_test.go b/internal/datastore/postgres/postgres_shared_test.go index 8e82ab22af..ba0e598c0c 100644 --- a/internal/datastore/postgres/postgres_shared_test.go +++ b/internal/datastore/postgres/postgres_shared_test.go @@ -77,7 +77,8 @@ func testPostgresDatastore(t *testing.T, config postgresTestConfig) { // NOTE: gc tests take exclusive locks, so they are run under non-parallel. test.OnlyGCTests(t, test.DatastoreTesterFunc(func(_ testing.TB, revisionQuantization, gcInterval, gcWindow time.Duration, watchBufferLength uint16) (datastore.Datastore, error) { ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore { - ds, err := newPostgresDatastore(ctx, uri, primaryInstanceID, + ds, err := newPostgresDatastore( + ctx, uri, primaryInstanceID, RevisionQuantization(revisionQuantization), GCWindow(gcWindow), GCInterval(gcInterval), @@ -113,7 +114,8 @@ func testPostgresDatastore(t *testing.T, config postgresTestConfig) { test.AllWithExceptions(t, pgFactory.NewTester(test.DatastoreTesterFunc(func(_ testing.TB, revisionQuantization, _, gcWindow time.Duration, watchBufferLength uint16) (datastore.Datastore, error) { ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore { - ds, err := newPostgresDatastore(ctx, uri, primaryInstanceID, + ds, err := newPostgresDatastore( + ctx, uri, primaryInstanceID, RevisionQuantization(revisionQuantization), GCWindow(gcWindow), GCInterval(veryLargeGCInterval), @@ -321,7 +323,8 @@ func testPostgresDatastoreWithoutCommitTimestamps(t *testing.T, config postgresT // NOTE: gc tests take exclusive locks, so they are run under non-parallel. test.AllWithExceptions(t, pgFactory.NewTester(test.DatastoreTesterFunc(func(_ testing.TB, revisionQuantization, _, gcWindow time.Duration, watchBufferLength uint16) (datastore.Datastore, error) { ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore { - ds, err := newPostgresDatastore(ctx, uri, primaryInstanceID, + ds, err := newPostgresDatastore( + ctx, uri, primaryInstanceID, RevisionQuantization(revisionQuantization), GCWindow(gcWindow), GCInterval(veryLargeGCInterval), @@ -341,7 +344,8 @@ func testPostgresDatastoreWithoutCommitTimestamps(t *testing.T, config postgresT b := testdatastore.RunPostgresForTestingWithCommitTimestamps(t, "", "head", false, pgVersion, enablePgbouncer) test.OnlyGCTests(t, test.DatastoreTesterFunc(func(_ testing.TB, revisionQuantization, gcInterval, gcWindow time.Duration, watchBufferLength uint16) (datastore.Datastore, error) { ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore { - ds, err := newPostgresDatastore(ctx, uri, primaryInstanceID, + ds, err := newPostgresDatastore( + ctx, uri, primaryInstanceID, RevisionQuantization(revisionQuantization), GCWindow(gcWindow), GCInterval(gcInterval), @@ -1474,7 +1478,8 @@ func WatchNotEnabledTest(t *testing.T, _ testdatastore.RunningEngineForTest, pgV ds := testdatastore.RunPostgresForTestingWithCommitTimestamps(t, "", migrate.Head, false, pgVersion, false).NewDatastore(t, func(engine, uri string) datastore.Datastore { ctx := t.Context() - ds, err := newPostgresDatastore(ctx, uri, + ds, err := newPostgresDatastore( + ctx, uri, primaryInstanceID, RevisionQuantization(0), GCWindow(time.Millisecond*1), @@ -1502,7 +1507,8 @@ func datastoreWithInterceptorAndTestData(t *testing.T, interceptor pgcommon.Quer ds := testdatastore.RunPostgresForTestingWithCommitTimestamps(t, "", migrate.Head, false, pgVersion, false).NewDatastore(t, func(engine, uri string) datastore.Datastore { ctx := t.Context() - ds, err := newPostgresDatastore(ctx, uri, + ds, err := newPostgresDatastore( + ctx, uri, primaryInstanceID, RevisionQuantization(0), GCWindow(time.Millisecond*1), @@ -1525,7 +1531,8 @@ func datastoreWithInterceptorAndTestData(t *testing.T, interceptor pgcommon.Quer _, err := ds.ReadWriteTx(ctx, func(ctx context.Context, rwt datastore.ReadWriteTransaction) error { err := rwt.LegacyWriteNamespaces(ctx, namespace.Namespace( fmt.Sprintf("resource%d", i), - namespace.MustRelation("reader", nil))) + namespace.MustRelation("reader", nil), + )) if err != nil { return err } @@ -1931,11 +1938,12 @@ func NullCaveatWatchTest(t *testing.T, ds datastore.Datastore) { require.NoError(err) // Verify the relationship create was tracked by the watch. - test.VerifyUpdates(t, require, [][]tuple.RelationshipUpdate{ - { - tuple.Touch(tuple.MustParse("resource:someresourceid#somerelation@subject:somesubject")), + test.VerifyUpdates( + t, require, [][]tuple.RelationshipUpdate{ + { + tuple.Touch(tuple.MustParse("resource:someresourceid#somerelation@subject:somesubject")), + }, }, - }, changes, errchan, false, @@ -1947,11 +1955,12 @@ func NullCaveatWatchTest(t *testing.T, ds datastore.Datastore) { require.NoError(err) // Verify the delete. - test.VerifyUpdates(t, require, [][]tuple.RelationshipUpdate{ - { - tuple.Delete(tuple.MustParse("resource:someresourceid#somerelation@subject:somesubject")), + test.VerifyUpdates( + t, require, [][]tuple.RelationshipUpdate{ + { + tuple.Delete(tuple.MustParse("resource:someresourceid#somerelation@subject:somesubject")), + }, }, - }, changes, errchan, false, diff --git a/internal/datastore/postgres/reader.go b/internal/datastore/postgres/reader.go index d84243d092..2c6dbd43b1 100644 --- a/internal/datastore/postgres/reader.go +++ b/internal/datastore/postgres/reader.go @@ -187,7 +187,8 @@ func (r *pgReader) ReverseQueryRelationships( indexingHint := schema.IndexingHintForQueryShape(r.schema, queryOpts.QueryShapeForReverse) qBuilder = qBuilder.WithIndexingHint(indexingHint) - return r.executor.ExecuteQuery(ctx, + return r.executor.ExecuteQuery( + ctx, qBuilder, options.WithLimit(queryOpts.LimitForReverse), options.WithAfter(queryOpts.AfterForReverse), diff --git a/internal/datastore/postgres/readwrite.go b/internal/datastore/postgres/readwrite.go index 4d665a5500..f25a6bcd07 100644 --- a/internal/datastore/postgres/readwrite.go +++ b/internal/datastore/postgres/readwrite.go @@ -225,7 +225,8 @@ func (rwt *pgReadWriteTXN) WriteRelationships(ctx context.Context, mutations []t // For each of the TOUCH operations, invoke the INSERTs, but with `ON CONFLICT DO NOTHING` to ensure // that the operations over existing relationships no-op. if len(touchMutationsByNonCaveat) > 0 { - touchInserts = touchInserts.Suffix(fmt.Sprintf("ON CONFLICT DO NOTHING RETURNING %s, %s, %s, %s, %s, %s", + touchInserts = touchInserts.Suffix(fmt.Sprintf( + "ON CONFLICT DO NOTHING RETURNING %s, %s, %s, %s, %s, %s", schema.ColNamespace, schema.ColObjectID, schema.ColRelation, @@ -322,7 +323,8 @@ func (rwt *pgReadWriteTXN) WriteRelationships(ctx context.Context, mutations []t builder := deleteTuple. Where(deleteClauses). - Suffix(fmt.Sprintf("RETURNING %s, %s, %s, %s, %s, %s", + Suffix(fmt.Sprintf( + "RETURNING %s, %s, %s, %s, %s, %s", schema.ColNamespace, schema.ColObjectID, schema.ColRelation, diff --git a/internal/datastore/postgres/xid8.go b/internal/datastore/postgres/xid8.go index 594387ba16..43a8cff47c 100644 --- a/internal/datastore/postgres/xid8.go +++ b/internal/datastore/postgres/xid8.go @@ -166,7 +166,7 @@ func (scanPlanBinaryUint64ToUint64) Scan(src []byte, dst any) error { return fmt.Errorf("invalid length for uint64: %v", len(src)) } - p := (dst).(*uint64) + p := dst.(*uint64) *p = binary.BigEndian.Uint64(src) return nil @@ -175,7 +175,7 @@ func (scanPlanBinaryUint64ToUint64) Scan(src []byte, dst any) error { type scanPlanBinaryUint64ToUint64Scanner struct{} func (scanPlanBinaryUint64ToUint64Scanner) Scan(src []byte, dst any) error { - s, ok := (dst).(Uint64Scanner) + s, ok := dst.(Uint64Scanner) if !ok { return pgtype.ErrScanTargetTypeChanged } @@ -196,7 +196,7 @@ func (scanPlanBinaryUint64ToUint64Scanner) Scan(src []byte, dst any) error { type scanPlanTextAnyToUint64Scanner struct{} func (scanPlanTextAnyToUint64Scanner) Scan(src []byte, dst any) error { - s, ok := (dst).(Uint64Scanner) + s, ok := dst.(Uint64Scanner) if !ok { return pgtype.ErrScanTargetTypeChanged } @@ -228,7 +228,7 @@ func (scanPlanTextAnyToUint64) Scan(src []byte, dst any) error { return fmt.Errorf("cannot scan NULL into %T", dst) } - p, ok := (dst).(*uint64) + p, ok := dst.(*uint64) if !ok { return pgtype.ErrScanTargetTypeChanged } diff --git a/internal/datastore/proxy/observable.go b/internal/datastore/proxy/observable.go index e819f7d45a..0ea9aa942f 100644 --- a/internal/datastore/proxy/observable.go +++ b/internal/datastore/proxy/observable.go @@ -260,7 +260,8 @@ func (r *observableReader) ReverseQueryRelationships(ctx context.Context, subjec queryOpts := options.NewReverseQueryOptionsWithOptions(opts...) ctx, closer := observe(ctx, "ReverseQueryRelationships", string(queryOpts.QueryShapeForReverse), trace.WithAttributes( attribute.String(otelconv.AttrDatastoreSubjectType, subjectsFilter.SubjectType), - attribute.String(otelconv.AttrDatastoreQueryShape, string(queryOpts.QueryShapeForReverse)))) + attribute.String(otelconv.AttrDatastoreQueryShape, string(queryOpts.QueryShapeForReverse)), + )) iterator, err := r.delegate.ReverseQueryRelationships(ctx, subjectsFilter, opts...) if err != nil { diff --git a/internal/datastore/proxy/relationshipintegrity_test.go b/internal/datastore/proxy/relationshipintegrity_test.go index f09527e25a..ed40845e34 100644 --- a/internal/datastore/proxy/relationshipintegrity_test.go +++ b/internal/datastore/proxy/relationshipintegrity_test.go @@ -18,43 +18,43 @@ import ( var DefaultKeyForTesting = KeyConfig{ ID: "defaultfortest", - Bytes: (func() []byte { + Bytes: func() []byte { b, err := hex.DecodeString("000102030405060708090A0B0C0D0E0FF0E0D0C0B0A090807060504030201000") if err != nil { panic(err) } return b - })(), + }(), ExpiredAt: nil, } var toBeExpiredKeyForTesting = KeyConfig{ ID: "expiredkeyfortest", - Bytes: (func() []byte { + Bytes: func() []byte { b, err := hex.DecodeString("000102030405060708090A0B0C0D0E0FF0E0D0C0B0A090807060504030201222") if err != nil { panic(err) } return b - })(), + }(), } var expiredKeyForTesting = KeyConfig{ ID: "expiredkeyfortest", - Bytes: (func() []byte { + Bytes: func() []byte { b, err := hex.DecodeString("000102030405060708090A0B0C0D0E0FF0E0D0C0B0A090807060504030201222") if err != nil { panic(err) } return b - })(), - ExpiredAt: (func() *time.Time { + }(), + ExpiredAt: func() *time.Time { t, err := time.Parse("2006-01-02", "2021-01-01") if err != nil { panic(err) } return &t - })(), + }(), } func TestWriteWithPredefinedIntegrity(t *testing.T) { diff --git a/internal/datastore/proxy/schemacaching/intervaltracker.go b/internal/datastore/proxy/schemacaching/intervaltracker.go index ce157695ac..7a9ad1c827 100644 --- a/internal/datastore/proxy/schemacaching/intervaltracker.go +++ b/internal/datastore/proxy/schemacaching/intervaltracker.go @@ -116,7 +116,8 @@ func (it *intervalTracker[T]) lookup(revision datastore.Revision, lastCheckpoint } return 1 - }) + }, + ) if !ok { return *new(T), false } diff --git a/internal/datastore/proxy/schemacaching/standardcache.go b/internal/datastore/proxy/schemacaching/standardcache.go index 9b8b488438..f37697ab09 100644 --- a/internal/datastore/proxy/schemacaching/standardcache.go +++ b/internal/datastore/proxy/schemacaching/standardcache.go @@ -234,7 +234,8 @@ func (rwt *definitionCachingRWT) LegacyReadNamespaceByName( return readAndCacheInTransaction( ctx, rwt, "namespace", nsName, func(ctx context.Context, name string) (*core.NamespaceDefinition, datastore.Revision, error) { return rwt.ReadWriteTransaction.LegacyReadNamespaceByName(ctx, name) - }) + }, + ) } func (rwt *definitionCachingRWT) LegacyReadCaveatByName( @@ -244,7 +245,8 @@ func (rwt *definitionCachingRWT) LegacyReadCaveatByName( return readAndCacheInTransaction( ctx, rwt, "caveat", nsName, func(ctx context.Context, name string) (*core.CaveatDefinition, datastore.Revision, error) { return rwt.ReadWriteTransaction.LegacyReadCaveatByName(ctx, name) - }) + }, + ) } func readAndCacheInTransaction[T schemaDefinition]( diff --git a/internal/datastore/proxy/schemacaching/standardcache_test.go b/internal/datastore/proxy/schemacaching/standardcache_test.go index ac19d42a48..e313f4c749 100644 --- a/internal/datastore/proxy/schemacaching/standardcache_test.go +++ b/internal/datastore/proxy/schemacaching/standardcache_test.go @@ -583,11 +583,13 @@ func TestOldSnapshotCachingRealDatastore(t *testing.T) { "defined", ns.Namespace( "document", - ns.MustRelation("owner", + ns.MustRelation( + "owner", nil, ns.AllowedRelation("user", "..."), ), - ns.MustRelation("editor", + ns.MustRelation( + "editor", nil, ns.AllowedRelation("user", "..."), ), @@ -661,11 +663,13 @@ func TestSnapshotCachingRealDatastore(t *testing.T) { "defined", ns.Namespace( "document", - ns.MustRelation("owner", + ns.MustRelation( + "owner", nil, ns.AllowedRelation("user", "..."), ), - ns.MustRelation("editor", + ns.MustRelation( + "editor", nil, ns.AllowedRelation("user", "..."), ), diff --git a/internal/datastore/spanner/caveat_test.go b/internal/datastore/spanner/caveat_test.go index fca755f333..e32c25c697 100644 --- a/internal/datastore/spanner/caveat_test.go +++ b/internal/datastore/spanner/caveat_test.go @@ -29,7 +29,8 @@ func TestContextualizedCaveatFrom(t *testing.T) { res, err = ContextualizedCaveatFrom( spanner.NullString{StringVal: "test", Valid: true}, - spanner.NullJSON{Value: map[string]any{"key": "val"}, Valid: true}) + spanner.NullJSON{Value: map[string]any{"key": "val"}, Valid: true}, + ) require.NoError(t, err) require.NotNil(t, res) require.Equal(t, "test", res.CaveatName) diff --git a/internal/datastore/spanner/reader.go b/internal/datastore/spanner/reader.go index b2230f716c..6c1bda48a1 100644 --- a/internal/datastore/spanner/reader.go +++ b/internal/datastore/spanner/reader.go @@ -170,7 +170,8 @@ func (sr spannerReader) ReverseQueryRelationships( indexingHint := IndexingHintForQueryShape(sr.schema, queryOpts.QueryShapeForReverse) qBuilder = qBuilder.WithIndexingHint(indexingHint) - return sr.executor.ExecuteQuery(ctx, + return sr.executor.ExecuteQuery( + ctx, qBuilder, options.WithLimit(queryOpts.LimitForReverse), options.WithAfter(queryOpts.AfterForReverse), @@ -217,7 +218,8 @@ func queryExecutor(txSource txFactory) common.ExecuteReadRelsQueryFunc { var integrityHash []byte var timestamp time.Time - colsToSelect, err := common.ColumnsToSelect(builder, + colsToSelect, err := common.ColumnsToSelect( + builder, &resourceObjectType, &resourceObjectID, &relation, diff --git a/internal/datastore/spanner/readwrite.go b/internal/datastore/spanner/readwrite.go index 8773dd7fed..b18c2133e4 100644 --- a/internal/datastore/spanner/readwrite.go +++ b/internal/datastore/spanner/readwrite.go @@ -95,7 +95,8 @@ func (rwt spannerReadWriteTXN) StoreCounterValue(ctx context.Context, name strin // Update the counter's count and revision in the table. updatedTimestampTime := computedAtRevision.(revisions.TimestampRevision).Time() - mutation := spanner.Update(tableRelationshipCounter, + mutation := spanner.Update( + tableRelationshipCounter, []string{colCounterName, colCounterCurrentCount, colCounterUpdatedAtTimestamp}, []any{name, value, updatedTimestampTime}, ) diff --git a/internal/datastore/spanner/spanner.go b/internal/datastore/spanner/spanner.go index ca2594f513..b2e7e2cb47 100644 --- a/internal/datastore/spanner/spanner.go +++ b/internal/datastore/spanner/spanner.go @@ -20,7 +20,7 @@ import ( otelprom "go.opentelemetry.io/otel/exporters/prometheus" "go.opentelemetry.io/otel/sdk/metric" otelres "go.opentelemetry.io/otel/sdk/resource" - semconv "go.opentelemetry.io/otel/semconv/v1.40.0" + semconv "go.opentelemetry.io/otel/semconv/v1.41.0" "go.opentelemetry.io/otel/trace" "google.golang.org/api/option" "google.golang.org/grpc" @@ -131,7 +131,8 @@ func NewSpannerDatastore(ctx context.Context, database string, opts ...Option) ( spanner.EnableOpenTelemetryMetrics() res, err := otelres.Merge(otelres.Default(), - otelres.NewWithAttributes(semconv.SchemaURL, + otelres.NewWithAttributes( + semconv.SchemaURL, semconv.ServiceName("spicedb"), )) if err != nil { @@ -150,7 +151,8 @@ func NewSpannerDatastore(ctx context.Context, database string, opts ...Option) ( } slogger := slog.New(slogzerolog.Option{Level: slog.LevelDebug, Logger: &log.Logger}.NewZerologHandler()) - spannerOpts = append(spannerOpts, + spannerOpts = append( + spannerOpts, option.WithCredentialsFile(config.credentialsFilePath), //nolint:staticcheck // The preferred approach is using Application Default Credentials option.WithGRPCConnectionPool(max(config.readMaxOpen, config.writeMaxOpen)), option.WithGRPCDialOption( @@ -264,7 +266,8 @@ func (t *traceableRTX) ReadRow(ctx context.Context, table string, key spanner.Ke attribute.String(otelconv.AttrDatastoreSpannerAPI, "ReadOnlyTransaction.ReadRow"), attribute.String(otelconv.AttrDatastoreSpannerTable, table), attribute.String(otelconv.AttrDatastoreSpannerKey, key.String()), - attribute.StringSlice(otelconv.AttrDatastoreSpannerColumns, columns)) + attribute.StringSlice(otelconv.AttrDatastoreSpannerColumns, columns), + ) return t.delegate.ReadRow(ctx, table, key, columns) } @@ -273,7 +276,8 @@ func (t *traceableRTX) Read(ctx context.Context, table string, keys spanner.KeyS trace.SpanFromContext(ctx).SetAttributes( attribute.String(otelconv.AttrDatastoreSpannerAPI, "ReadOnlyTransaction.Read"), attribute.String(otelconv.AttrDatastoreSpannerTable, table), - attribute.StringSlice(otelconv.AttrDatastoreSpannerColumns, columns)) + attribute.StringSlice(otelconv.AttrDatastoreSpannerColumns, columns), + ) return t.delegate.Read(ctx, table, keys, columns) } @@ -281,7 +285,8 @@ func (t *traceableRTX) Read(ctx context.Context, table string, keys spanner.KeyS func (t *traceableRTX) Query(ctx context.Context, statement spanner.Statement) *spanner.RowIterator { trace.SpanFromContext(ctx).SetAttributes( attribute.String(otelconv.AttrDatastoreSpannerAPI, "ReadOnlyTransaction.Query"), - attribute.String(otelconv.AttrDatastoreSpannerStatement, statement.SQL)) + attribute.String(otelconv.AttrDatastoreSpannerStatement, statement.SQL), + ) return t.delegate.Query(ctx, statement) } @@ -343,7 +348,8 @@ func (sd *spannerDatastore) ReadWriteTx(ctx context.Context, fn datastore.TxUser if config.Metadata != nil && len(config.Metadata.GetFields()) > 0 { // Insert the metadata into the transaction metadata table. - mutation := spanner.Insert(tableTransactionMetadata, + mutation := spanner.Insert( + tableTransactionMetadata, []string{colTransactionTag, colMetadata}, []any{transactionTag, spanner.NullJSON{ Value: config.Metadata.AsMap(), diff --git a/internal/datastore/spanner/spanner_test.go b/internal/datastore/spanner/spanner_test.go index f52657d61f..a2feb82019 100644 --- a/internal/datastore/spanner/spanner_test.go +++ b/internal/datastore/spanner/spanner_test.go @@ -31,7 +31,8 @@ func TestSpannerDatastore(t *testing.T) { // Transaction tests are excluded because, for reasons unknown, one cannot read its own write in one transaction in the Spanner emulator. test.AllWithExceptions(t, spannerFactory.NewTester(test.DatastoreTesterFunc(func(_ testing.TB, revisionQuantization, _, _ time.Duration, watchBufferLength uint16) (datastore.Datastore, error) { ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore { - ds, err := NewSpannerDatastore(ctx, uri, + ds, err := NewSpannerDatastore( + ctx, uri, RevisionQuantization(revisionQuantization), WatchBufferLength(watchBufferLength), WithDatastoreMetricsOption(DatastoreMetricsOptionOpenTelemetry), diff --git a/internal/datastore/spanner/watch.go b/internal/datastore/spanner/watch.go index 46cb71c6e3..01d82b44ee 100644 --- a/internal/datastore/spanner/watch.go +++ b/internal/datastore/spanner/watch.go @@ -151,7 +151,8 @@ func (sd *spannerDatastore) watch( spanner.Priority(sppb.RequestOptions_PRIORITY_LOW), }, }, - }) + }, + ) if err != nil { sendError(err) return diff --git a/internal/developmentmembership/foundsubject_test.go b/internal/developmentmembership/foundsubject_test.go index 5102efb2ea..29de934e6c 100644 --- a/internal/developmentmembership/foundsubject_test.go +++ b/internal/developmentmembership/foundsubject_test.go @@ -43,14 +43,16 @@ func TestToValidationString(t *testing.T) { }, { "with some exclusion", - fs("user", "*", "...", + fs( + "user", "*", "...", "user1", "user2", "user3", "user4", "user5", ), "user:* - {user:user1, user:user2, user:user3, user:user4, user:user5}", }, { "with many exclusion", - fs("user", "*", "...", + fs( + "user", "*", "...", "user1", "user2", "user3", "user4", "user5", "user6", ), "user:* - {user:user1, user:user2, user:user3, user:user4, user:user5, user:user6}", diff --git a/internal/developmentmembership/membership_test.go b/internal/developmentmembership/membership_test.go index ab084ac1c8..7138192c25 100644 --- a/internal/developmentmembership/membership_test.go +++ b/internal/developmentmembership/membership_test.go @@ -35,36 +35,44 @@ var ( _this *tuple.ObjectAndRelation ownerONR = tuple.ONR("folder", "company", "owner") - companyOwner = graph.Leaf(&ownerONR, - (DS("user", "owner", Ellipsis)), + companyOwner = graph.Leaf( + &ownerONR, + DS("user", "owner", Ellipsis), ) - companyEditor = graph.Union(tuple.ONRRef("folder", "company", "editor"), - graph.Leaf(_this, (DS("user", "writer", Ellipsis))), + companyEditor = graph.Union( + tuple.ONRRef("folder", "company", "editor"), + graph.Leaf(_this, DS("user", "writer", Ellipsis)), companyOwner, ) auditorONR = tuple.ONR("folder", "auditors", "owner") auditorsOwner = graph.Leaf(&auditorONR) - auditorsEditor = graph.Union(tuple.ONRRef("folder", "auditors", "editor"), + auditorsEditor = graph.Union( + tuple.ONRRef("folder", "auditors", "editor"), graph.Leaf(_this), auditorsOwner, ) - auditorsViewerRecursive = graph.Union(tuple.ONRRef("folder", "auditors", "viewer"), - graph.Leaf(_this, - (DS("user", "auditor", "...")), + auditorsViewerRecursive = graph.Union( + tuple.ONRRef("folder", "auditors", "viewer"), + graph.Leaf( + _this, + DS("user", "auditor", "..."), ), auditorsEditor, graph.Union(tuple.ONRRef("folder", "auditors", "viewer")), ) - companyViewerRecursive = graph.Union(tuple.ONRRef("folder", "company", "viewer"), - graph.Union(tuple.ONRRef("folder", "company", "viewer"), + companyViewerRecursive = graph.Union( + tuple.ONRRef("folder", "company", "viewer"), + graph.Union( + tuple.ONRRef("folder", "company", "viewer"), auditorsViewerRecursive, - graph.Leaf(_this, - (DS("user", "legal", "...")), - (DS("folder", "auditors", "viewer")), + graph.Leaf( + _this, + DS("user", "legal", "..."), + DS("folder", "auditors", "viewer"), ), ), companyEditor, @@ -97,13 +105,16 @@ func TestMembershipSetIntersectionBasic(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - intersection := graph.Intersection(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "legal", "...")), + intersection := graph.Intersection( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "legal", "..."), ), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), ), ) @@ -117,14 +128,17 @@ func TestMembershipSetIntersectionWithDifferentTypesOneMissingLeft(t *testing.T) require := require.New(t) ms := NewMembershipSet() - intersection := graph.Intersection(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "legal", "...")), - (DS("folder", "foobar", "...")), + intersection := graph.Intersection( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "legal", "..."), + DS("folder", "foobar", "..."), ), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), ), ) @@ -138,14 +152,17 @@ func TestMembershipSetIntersectionWithDifferentTypesOneMissingRight(t *testing.T require := require.New(t) ms := NewMembershipSet() - intersection := graph.Intersection(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "legal", "...")), + intersection := graph.Intersection( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "legal", "..."), ), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), - (DS("folder", "foobar", "...")), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), + DS("folder", "foobar", "..."), ), ) @@ -159,16 +176,19 @@ func TestMembershipSetIntersectionWithDifferentTypes(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - intersection := graph.Intersection(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "legal", "...")), - (DS("folder", "foobar", "...")), - (DS("folder", "barbaz", "...")), + intersection := graph.Intersection( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "legal", "..."), + DS("folder", "foobar", "..."), + DS("folder", "barbaz", "..."), ), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), - (DS("folder", "barbaz", "...")), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), + DS("folder", "barbaz", "..."), ), ) @@ -182,13 +202,16 @@ func TestMembershipSetExclusion(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - exclusion := graph.Exclusion(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), + exclusion := graph.Exclusion( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), ), - graph.Leaf(_this, - (DS("user", "legal", "...")), + graph.Leaf( + _this, + DS("user", "legal", "..."), ), ) @@ -202,17 +225,21 @@ func TestMembershipSetExclusionMultiple(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - exclusion := graph.Exclusion(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), - (DS("user", "third", "...")), + exclusion := graph.Exclusion( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), + DS("user", "third", "..."), ), - graph.Leaf(_this, - (DS("user", "legal", "...")), + graph.Leaf( + _this, + DS("user", "legal", "..."), ), - graph.Leaf(_this, - (DS("user", "owner", "...")), + graph.Leaf( + _this, + DS("user", "owner", "..."), ), ) @@ -226,16 +253,20 @@ func TestMembershipSetExclusionMultipleWithWildcard(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - exclusion := graph.Exclusion(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), + exclusion := graph.Exclusion( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), ), - graph.Leaf(_this, - (DS("user", "legal", "...")), + graph.Leaf( + _this, + DS("user", "legal", "..."), ), - graph.Leaf(_this, - (DS("user", "*", "...")), + graph.Leaf( + _this, + DS("user", "*", "..."), ), ) @@ -249,17 +280,21 @@ func TestMembershipSetExclusionMultipleMiddle(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - exclusion := graph.Exclusion(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), - (DS("user", "third", "...")), + exclusion := graph.Exclusion( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), + DS("user", "third", "..."), ), - graph.Leaf(_this, - (DS("user", "another", "...")), + graph.Leaf( + _this, + DS("user", "another", "..."), ), - graph.Leaf(_this, - (DS("user", "owner", "...")), + graph.Leaf( + _this, + DS("user", "owner", "..."), ), ) @@ -273,13 +308,16 @@ func TestMembershipSetIntersectionWithOneWildcard(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - intersection := graph.Intersection(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "*", "...")), + intersection := graph.Intersection( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "*", "..."), ), - graph.Leaf(_this, - (DS("user", "legal", "...")), + graph.Leaf( + _this, + DS("user", "legal", "..."), ), ) @@ -293,13 +331,16 @@ func TestMembershipSetIntersectionWithAllWildcardLeft(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - intersection := graph.Intersection(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "*", "...")), + intersection := graph.Intersection( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "*", "..."), ), - graph.Leaf(_this, - (DS("user", "*", "...")), + graph.Leaf( + _this, + DS("user", "*", "..."), ), ) @@ -313,13 +354,16 @@ func TestMembershipSetIntersectionWithAllWildcardRight(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - intersection := graph.Intersection(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "*", "...")), + intersection := graph.Intersection( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "*", "..."), ), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "*", "...")), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "*", "..."), ), ) @@ -333,13 +377,16 @@ func TestMembershipSetExclusionWithLeftWildcard(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - exclusion := graph.Exclusion(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "*", "...")), + exclusion := graph.Exclusion( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "*", "..."), ), - graph.Leaf(_this, - (DS("user", "legal", "...")), + graph.Leaf( + _this, + DS("user", "legal", "..."), ), ) @@ -353,13 +400,16 @@ func TestMembershipSetExclusionWithRightWildcard(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - exclusion := graph.Exclusion(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), + exclusion := graph.Exclusion( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), ), - graph.Leaf(_this, - (DS("user", "*", "...")), + graph.Leaf( + _this, + DS("user", "*", "..."), ), ) @@ -373,16 +423,20 @@ func TestMembershipSetIntersectionWithThreeWildcards(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - intersection := graph.Intersection(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), + intersection := graph.Intersection( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), ), - graph.Leaf(_this, - (DS("user", "*", "...")), + graph.Leaf( + _this, + DS("user", "*", "..."), ), - graph.Leaf(_this, - (DS("user", "*", "...")), + graph.Leaf( + _this, + DS("user", "*", "..."), ), ) @@ -396,17 +450,21 @@ func TestMembershipSetIntersectionWithOneBranchMissingWildcards(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - intersection := graph.Intersection(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), - (DS("user", "*", "...")), + intersection := graph.Intersection( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), + DS("user", "*", "..."), ), - graph.Leaf(_this, - (DS("user", "owner", "...")), + graph.Leaf( + _this, + DS("user", "owner", "..."), ), - graph.Leaf(_this, - (DS("user", "*", "...")), + graph.Leaf( + _this, + DS("user", "*", "..."), ), ) @@ -420,16 +478,20 @@ func TestMembershipSetIntersectionWithTwoBranchesMissingWildcards(t *testing.T) require := require.New(t) ms := NewMembershipSet() - intersection := graph.Intersection(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), + intersection := graph.Intersection( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), ), - graph.Leaf(_this, - (DS("user", "another", "...")), + graph.Leaf( + _this, + DS("user", "another", "..."), ), - graph.Leaf(_this, - (DS("user", "*", "...")), + graph.Leaf( + _this, + DS("user", "*", "..."), ), ) @@ -443,17 +505,21 @@ func TestMembershipSetWithCaveats(t *testing.T) { require := require.New(t) ms := NewMembershipSet() - intersection := graph.Intersection(tuple.ONRRef("folder", "company", "viewer"), - graph.Leaf(_this, - (DS("user", "owner", "...")), - (DS("user", "legal", "...")), - (DS("user", "*", "...")), - ), - graph.Leaf(_this, - (CaveatedDS("user", "owner", "...", "somecaveat")), - ), - graph.Leaf(_this, - (DS("user", "*", "...")), + intersection := graph.Intersection( + tuple.ONRRef("folder", "company", "viewer"), + graph.Leaf( + _this, + DS("user", "owner", "..."), + DS("user", "legal", "..."), + DS("user", "*", "..."), + ), + graph.Leaf( + _this, + CaveatedDS("user", "owner", "...", "somecaveat"), + ), + graph.Leaf( + _this, + DS("user", "*", "..."), ), ) intersection.CaveatExpression = caveats.CaveatExprForTesting("anothercaveat") diff --git a/internal/developmentmembership/trackingsubjectset_test.go b/internal/developmentmembership/trackingsubjectset_test.go index 3b15792e93..42513315fc 100644 --- a/internal/developmentmembership/trackingsubjectset_test.go +++ b/internal/developmentmembership/trackingsubjectset_test.go @@ -84,16 +84,16 @@ func TestTrackingSubjectSet(t *testing.T) { "simple intersection", intersect( set( - (DS("user", "user1", "...")), - (DS("user", "user2", "...")), + DS("user", "user1", "..."), + DS("user", "user2", "..."), ), set( - (DS("user", "user2", "...")), - (DS("user", "user3", "...")), + DS("user", "user2", "..."), + DS("user", "user3", "..."), ), set( - (DS("user", "user2", "...")), - (DS("user", "user4", "...")), + DS("user", "user2", "..."), + DS("user", "user4", "..."), ), ), []FoundSubject{fs("user", "user2", "...")}, @@ -102,12 +102,12 @@ func TestTrackingSubjectSet(t *testing.T) { "empty intersection", intersect( set( - (DS("user", "user1", "...")), - (DS("user", "user2", "...")), + DS("user", "user1", "..."), + DS("user", "user2", "..."), ), set( - (DS("user", "user3", "...")), - (DS("user", "user4", "...")), + DS("user", "user3", "..."), + DS("user", "user4", "..."), ), ), []FoundSubject{}, @@ -116,8 +116,8 @@ func TestTrackingSubjectSet(t *testing.T) { "simple exclusion", subtract( set( - (DS("user", "user1", "...")), - (DS("user", "user2", "...")), + DS("user", "user1", "..."), + DS("user", "user2", "..."), ), set(DS("user", "user2", "...")), set(DS("user", "user3", "...")), @@ -128,8 +128,8 @@ func TestTrackingSubjectSet(t *testing.T) { "empty exclusion", subtract( set( - (DS("user", "user1", "...")), - (DS("user", "user2", "...")), + DS("user", "user1", "..."), + DS("user", "user2", "..."), ), set(DS("user", "user1", "...")), set(DS("user", "user2", "...")), @@ -140,7 +140,7 @@ func TestTrackingSubjectSet(t *testing.T) { "wildcard left side union", union( set( - (DS("user", "*", "...")), + DS("user", "*", "..."), ), set(DS("user", "user1", "...")), ), @@ -154,7 +154,7 @@ func TestTrackingSubjectSet(t *testing.T) { union( set(DS("user", "user1", "...")), set( - (DS("user", "*", "...")), + DS("user", "*", "..."), ), ), []FoundSubject{ @@ -166,8 +166,8 @@ func TestTrackingSubjectSet(t *testing.T) { "wildcard left side exclusion", subtract( set( - (DS("user", "*", "...")), - (DS("user", "user2", "...")), + DS("user", "*", "..."), + DS("user", "user2", "..."), ), set(DS("user", "user1", "...")), ), @@ -180,7 +180,7 @@ func TestTrackingSubjectSet(t *testing.T) { "wildcard right side exclusion", subtract( set( - (DS("user", "user2", "...")), + DS("user", "user2", "..."), ), set(DS("user", "*", "...")), ), @@ -190,7 +190,7 @@ func TestTrackingSubjectSet(t *testing.T) { "wildcard right side concrete exclusion", subtract( set( - (DS("user", "*", "...")), + DS("user", "*", "..."), ), set(DS("user", "user1", "...")), ), @@ -202,8 +202,8 @@ func TestTrackingSubjectSet(t *testing.T) { "wildcard both sides exclusion", subtract( set( - (DS("user", "user2", "...")), - (DS("user", "*", "...")), + DS("user", "user2", "..."), + DS("user", "*", "..."), ), set(DS("user", "*", "...")), ), @@ -213,8 +213,8 @@ func TestTrackingSubjectSet(t *testing.T) { "wildcard left side intersection", intersect( set( - (DS("user", "*", "...")), - (DS("user", "user2", "...")), + DS("user", "*", "..."), + DS("user", "user2", "..."), ), set(DS("user", "user1", "...")), ), @@ -227,8 +227,8 @@ func TestTrackingSubjectSet(t *testing.T) { intersect( set(DS("user", "user1", "...")), set( - (DS("user", "*", "...")), - (DS("user", "user2", "...")), + DS("user", "*", "..."), + DS("user", "user2", "..."), ), ), []FoundSubject{ @@ -239,11 +239,12 @@ func TestTrackingSubjectSet(t *testing.T) { "wildcard both sides intersection", intersect( set( - (DS("user", "*", "...")), - (DS("user", "user1", "..."))), + DS("user", "*", "..."), + DS("user", "user1", "..."), + ), set( - (DS("user", "*", "...")), - (DS("user", "user2", "...")), + DS("user", "*", "..."), + DS("user", "user2", "..."), ), ), []FoundSubject{ diff --git a/internal/dispatch/dispatch_optimizer_test.go b/internal/dispatch/dispatch_optimizer_test.go index 01c5e9fbe2..f1261525eb 100644 --- a/internal/dispatch/dispatch_optimizer_test.go +++ b/internal/dispatch/dispatch_optimizer_test.go @@ -111,7 +111,8 @@ func TestDispatchWrapOptimizer(t *testing.T) { // Alias("view")(Recursive("folder","viewer")(Sentinel("folder","viewer"))) // The recursive iterator inside the alias matches the sentinel's key, so // the dispatch boundary is safe. - input := aliasOutline("document", "view", + input := aliasOutline( + "document", "view", recursiveOutline("folder", "viewer", sentinelOutline("folder", "viewer")), ) got := runDispatchWrap(t, input) @@ -123,7 +124,8 @@ func TestDispatchWrapOptimizer(t *testing.T) { // No RecursiveIterator with key folder#viewer exists in the alias's // subtree, so dispatching the alias would sever the sentinel from its // collection context. - input := aliasOutline("document", "view", + input := aliasOutline( + "document", "view", query.Outline{ Type: query.UnionIteratorType, SubOutlines: []query.Outline{ diff --git a/internal/dispatch/graph/expand_test.go b/internal/dispatch/graph/expand_test.go index 8a3aa97908..7bfa3c19db 100644 --- a/internal/dispatch/graph/expand_test.go +++ b/internal/dispatch/graph/expand_test.go @@ -35,22 +35,26 @@ func DS(objectType string, objectID string, objectRelation string) *core.DirectS var ONRRef = tuple.ONRRef var ( - companyOwner = graph.Leaf(ONRRef("folder", "company", "owner"), - (DS("user", "owner", expand.Ellipsis)), + companyOwner = graph.Leaf( + ONRRef("folder", "company", "owner"), + DS("user", "owner", expand.Ellipsis), ) companyEditor = graph.Leaf(ONRRef("folder", "company", "editor")) - companyEdit = graph.Union(ONRRef("folder", "company", "edit"), + companyEdit = graph.Union( + ONRRef("folder", "company", "edit"), companyEditor, companyOwner, ) - companyViewer = graph.Leaf(ONRRef("folder", "company", "viewer"), - (DS("user", "legal", "...")), - (DS("folder", "auditors", "viewer")), + companyViewer = graph.Leaf( + ONRRef("folder", "company", "viewer"), + DS("user", "legal", "..."), + DS("folder", "auditors", "viewer"), ) - companyView = graph.Union(ONRRef("folder", "company", "view"), + companyView = graph.Union( + ONRRef("folder", "company", "view"), companyViewer, companyEdit, graph.Union(ONRRef("folder", "company", "view")), @@ -60,16 +64,19 @@ var ( auditorsEditor = graph.Leaf(ONRRef("folder", "auditors", "editor")) - auditorsEdit = graph.Union(ONRRef("folder", "auditors", "edit"), + auditorsEdit = graph.Union( + ONRRef("folder", "auditors", "edit"), auditorsEditor, auditorsOwner, ) - auditorsViewer = graph.Leaf(ONRRef("folder", "auditors", "viewer"), - (DS("user", "auditor", "...")), + auditorsViewer = graph.Leaf( + ONRRef("folder", "auditors", "viewer"), + DS("user", "auditor", "..."), ) - auditorsViewRecursive = graph.Union(ONRRef("folder", "auditors", "view"), + auditorsViewRecursive = graph.Union( + ONRRef("folder", "auditors", "view"), auditorsViewer, auditorsEdit, graph.Union(ONRRef("folder", "auditors", "view")), @@ -78,57 +85,66 @@ var ( companyViewRecursive = graph.Union(ONRRef("folder", "company", "view"), graph.Union(ONRRef("folder", "company", "viewer"), graph.Leaf(ONRRef("folder", "auditors", "viewer"), - (DS("user", "auditor", "..."))), + DS("user", "auditor", "...")), graph.Leaf(ONRRef("folder", "company", "viewer"), - (DS("user", "legal", "...")), - (DS("folder", "auditors", "viewer")))), + DS("user", "legal", "..."), + DS("folder", "auditors", "viewer"))), graph.Union(ONRRef("folder", "company", "edit"), graph.Leaf(ONRRef("folder", "company", "editor")), graph.Leaf(ONRRef("folder", "company", "owner"), - (DS("user", "owner", "...")))), + DS("user", "owner", "..."))), graph.Union(ONRRef("folder", "company", "view"))) - docOwner = graph.Leaf(ONRRef("document", "masterplan", "owner"), - (DS("user", "product_manager", "...")), + docOwner = graph.Leaf( + ONRRef("document", "masterplan", "owner"), + DS("user", "product_manager", "..."), ) docEditor = graph.Leaf(ONRRef("document", "masterplan", "editor")) - docEdit = graph.Union(ONRRef("document", "masterplan", "edit"), + docEdit = graph.Union( + ONRRef("document", "masterplan", "edit"), docOwner, docEditor, ) - docViewer = graph.Leaf(ONRRef("document", "masterplan", "viewer"), - (DS("user", "eng_lead", "...")), + docViewer = graph.Leaf( + ONRRef("document", "masterplan", "viewer"), + DS("user", "eng_lead", "..."), ) - docView = graph.Union(ONRRef("document", "masterplan", "view"), + docView = graph.Union( + ONRRef("document", "masterplan", "view"), docViewer, docEdit, - graph.Union(ONRRef("document", "masterplan", "view"), + graph.Union( + ONRRef("document", "masterplan", "view"), graph.Union(ONRRef("folder", "plans", "view"), - graph.Leaf(ONRRef("folder", "plans", "viewer"), - (DS("user", "chief_financial_officer", "...")), + graph.Leaf( + ONRRef("folder", "plans", "viewer"), + DS("user", "chief_financial_officer", "..."), ), graph.Union(ONRRef("folder", "plans", "edit"), graph.Leaf(ONRRef("folder", "plans", "editor")), graph.Leaf(ONRRef("folder", "plans", "owner"))), graph.Union(ONRRef("folder", "plans", "view"))), - graph.Union(ONRRef("folder", "strategy", "view"), + graph.Union( + ONRRef("folder", "strategy", "view"), graph.Leaf(ONRRef("folder", "strategy", "viewer")), graph.Union(ONRRef("folder", "strategy", "edit"), graph.Leaf(ONRRef("folder", "strategy", "editor")), graph.Leaf(ONRRef("folder", "strategy", "owner"), - (DS("user", "vp_product", "...")))), - graph.Union(ONRRef("folder", "strategy", "view"), - graph.Union(ONRRef("folder", "company", "view"), + DS("user", "vp_product", "..."))), + graph.Union( + ONRRef("folder", "strategy", "view"), + graph.Union( + ONRRef("folder", "company", "view"), graph.Leaf(ONRRef("folder", "company", "viewer"), - (DS("user", "legal", "...")), - (DS("folder", "auditors", "viewer"))), + DS("user", "legal", "..."), + DS("folder", "auditors", "viewer")), graph.Union(ONRRef("folder", "company", "edit"), graph.Leaf(ONRRef("folder", "company", "editor")), graph.Leaf(ONRRef("folder", "company", "owner"), - (DS("user", "owner", "...")))), + DS("user", "owner", "..."))), graph.Union(ONRRef("folder", "company", "view")), ), ), diff --git a/internal/dispatch/graph/graph.go b/internal/dispatch/graph/graph.go index 7e4ad34ce7..654f67cdfa 100644 --- a/internal/dispatch/graph/graph.go +++ b/internal/dispatch/graph/graph.go @@ -543,7 +543,8 @@ func (ld *localDispatcher) DispatchQueryPlan( // pass picks up data-driven hints (e.g. arrow direction reversal) for // nodes only this hop has visibility into. countObserver := query.NewCountObserver() - qctx := query.NewQueryContext(ctx, executor, + qctx := query.NewQueryContext( + ctx, executor, query.WithReader(query.NewQueryDatastoreReader(dl.SnapshotReader(revision, schemaHash))), query.WithCaveatRunner(caveats.NewCaveatRunner(caveattypes.Default.TypeSet)), query.WithCaveatContext(dispatch.CaveatContextFromPlanContext(planCtx)), diff --git a/internal/dispatch/keys/computed.go b/internal/dispatch/keys/computed.go index 18d8353a26..2d979d20dd 100644 --- a/internal/dispatch/keys/computed.go +++ b/internal/dispatch/keys/computed.go @@ -80,7 +80,8 @@ func checkRequestToKeyWithCanonical(req *v1.DispatchCheckRequest, canonicalKey s // expandRequestToKey converts an expand request into a cache key func expandRequestToKey(req *v1.DispatchExpandRequest) DispatchCacheKey { - return dispatchCacheKeyHash(expandPrefix, req.Metadata.AtRevision, + return dispatchCacheKeyHash( + expandPrefix, req.Metadata.AtRevision, hashableOnr{req.ResourceAndRelation}, ) } @@ -91,7 +92,8 @@ func lookupResourcesRequest2ToKey(req *v1.DispatchLookupResources2Request) (Disp if err != nil { return emptyDispatchCacheKey, err } - return dispatchCacheKeyHash(lookupPrefix, req.Metadata.AtRevision, + return dispatchCacheKeyHash( + lookupPrefix, req.Metadata.AtRevision, hashableRelationReference{req.ResourceRelation}, hashableRelationReference{req.SubjectRelation}, hashableIds(req.SubjectIds), @@ -108,7 +110,8 @@ func lookupResourcesRequest3ToKey(req *v1.DispatchLookupResources3Request) (Disp if err != nil { return emptyDispatchCacheKey, err } - return dispatchCacheKeyHash(lookupPrefix, req.Metadata.AtRevision, + return dispatchCacheKeyHash( + lookupPrefix, req.Metadata.AtRevision, hashableRelationReference{req.ResourceRelation}, hashableRelationReference{req.SubjectRelation}, hashableIds(req.SubjectIds), @@ -121,7 +124,8 @@ func lookupResourcesRequest3ToKey(req *v1.DispatchLookupResources3Request) (Disp // lookupSubjectsRequestToKey converts a lookup subjects request into a cache key func lookupSubjectsRequestToKey(req *v1.DispatchLookupSubjectsRequest) DispatchCacheKey { - return dispatchCacheKeyHash(lookupSubjectsPrefix, req.Metadata.AtRevision, + return dispatchCacheKeyHash( + lookupSubjectsPrefix, req.Metadata.AtRevision, hashableRelationReference{req.ResourceRelation}, hashableRelationReference{req.SubjectRelation}, hashableIds(req.ResourceIds), @@ -160,7 +164,8 @@ func currentDispatchKey(pc *v1.PlanContext) string { // to planCheckRequestToKey or the cache-hit fast path and the DispatchQueryPlan // slow path will end up on different cache entries. func PlanCheckLookupKey(revision string, canonicalKey string, resource, subject *core.ObjectAndRelation, caveatContext *structpb.Struct) DispatchCacheKey { - return dispatchCacheKeyHash(planCheckPrefix, revision, + return dispatchCacheKeyHash( + planCheckPrefix, revision, hashableString(canonicalKey), hashableOnr{resource}, hashableOnr{subject}, @@ -170,7 +175,8 @@ func PlanCheckLookupKey(revision string, canonicalKey string, resource, subject // planLookupResourcesRequestToKey converts a plan lookup resources request into a cache key func planLookupResourcesRequestToKey(req *v1.DispatchQueryPlanRequest) DispatchCacheKey { - return dispatchCacheKeyHash(planLookupResourcesPrefix, req.PlanContext.Revision, + return dispatchCacheKeyHash( + planLookupResourcesPrefix, req.PlanContext.Revision, hashableString(currentDispatchKey(req.PlanContext)), hashableOnr{req.Subject}, hashableContext{Struct: req.PlanContext.CaveatContext}, @@ -179,7 +185,8 @@ func planLookupResourcesRequestToKey(req *v1.DispatchQueryPlanRequest) DispatchC // planLookupSubjectsRequestToKey converts a plan lookup subjects request into a cache key func planLookupSubjectsRequestToKey(req *v1.DispatchQueryPlanRequest) DispatchCacheKey { - return dispatchCacheKeyHash(planLookupSubjectsPrefix, req.PlanContext.Revision, + return dispatchCacheKeyHash( + planLookupSubjectsPrefix, req.PlanContext.Revision, hashableString(currentDispatchKey(req.PlanContext)), hashableOnr{req.Resource}, hashableContext{Struct: req.PlanContext.CaveatContext}, diff --git a/internal/dispatch/keys/computed_test.go b/internal/dispatch/keys/computed_test.go index aa420c5aad..d57b9a6fd9 100644 --- a/internal/dispatch/keys/computed_test.go +++ b/internal/dispatch/keys/computed_test.go @@ -691,7 +691,7 @@ func TestCacheKeyNoOverlap(t *testing.T) { generated, usedData := f(resourceIds, subjectIds, resourceRelation, subjectRelation, metadata) usedDataString := fmt.Sprintf("%s:%s", prefix, strings.Join(usedData, ",")) if dataCombinationSeen.Add(usedDataString) { - require.True(t, stableCacheKeysSeen.Add(hex.EncodeToString((generated.StableSumAsBytes())))) + require.True(t, stableCacheKeysSeen.Add(hex.EncodeToString(generated.StableSumAsBytes()))) } }) } diff --git a/internal/dispatch/remote/cluster.go b/internal/dispatch/remote/cluster.go index eefddba17a..0ad40ac8c4 100644 --- a/internal/dispatch/remote/cluster.go +++ b/internal/dispatch/remote/cluster.go @@ -230,7 +230,8 @@ func (cr *clusterDispatcher) DispatchCheck(ctx context.Context, req *v1.Dispatch err = adjustMetadataForDispatch(resp.Metadata) return resp, err - }) + }, + ) if err != nil { return &v1.DispatchCheckResponse{Metadata: requestFailureMetadata}, err } @@ -573,7 +574,8 @@ func dispatchStreamingRequest[Q streamingRequestMessage, R any]( returnedResultsDispatcherName := atomic.NewString(noDispatcherResults) - primarySleeper := cr.newPrimarySleeper(reqKey, + primarySleeper := cr.newPrimarySleeper( + reqKey, tuple.FromCoreRelationReference(req.GetResourceRelation()), tuple.FromCoreRelationReference(req.GetSubjectRelation()), maximumHedgingDelay, diff --git a/internal/dispatch/remote/cluster_test.go b/internal/dispatch/remote/cluster_test.go index 05b33d50e0..14a585aa4d 100644 --- a/internal/dispatch/remote/cluster_test.go +++ b/internal/dispatch/remote/cluster_test.go @@ -1292,7 +1292,8 @@ func TestReadyStateConnecting(t *testing.T) { // localhost:0 is a target address that will never successfully connect — port 0 means "no // specific port." The connection will stay stuck in Connecting state because there's nothing // listening there - conn, err := grpc.NewClient("localhost:0", + conn, err := grpc.NewClient( + "localhost:0", grpc.WithTransportCredentials(insecure.NewCredentials()), ) require.NoError(t, err) diff --git a/internal/fdw/explain/explain.go b/internal/fdw/explain/explain.go index fc7184e489..d90220d18a 100644 --- a/internal/fdw/explain/explain.go +++ b/internal/fdw/explain/explain.go @@ -14,7 +14,8 @@ type Explain struct { // String formats the explain plan in Postgres EXPLAIN output format. func (e Explain) String() string { - return fmt.Sprintf("%s on %s (cost=%.2f..%.2f rows=%d width=%d)", + return fmt.Sprintf( + "%s on %s (cost=%.2f..%.2f rows=%d width=%d)", e.Operation, e.TableName, e.StartupCost, diff --git a/internal/fdw/pgserver_e2e_test.go b/internal/fdw/pgserver_e2e_test.go index bd3ba9f720..7b297d05ab 100644 --- a/internal/fdw/pgserver_e2e_test.go +++ b/internal/fdw/pgserver_e2e_test.go @@ -614,7 +614,8 @@ definition document { _, err = pgconn.Exec(t.Context(), "BEGIN") require.NoError(t, err) - _, err = pgconn.Exec(t.Context(), + _, err = pgconn.Exec( + t.Context(), "DECLARE lr_cursor CURSOR FOR SELECT resource_id FROM permissions WHERE resource_type = $1 AND permission = $2 AND subject_type = $3 AND subject_id = $4", "document", "view", "user", "testuser", ) @@ -703,7 +704,8 @@ definition document { _, err = pgconn.Exec(t.Context(), "BEGIN") require.NoError(t, err) - _, err = pgconn.Exec(t.Context(), + _, err = pgconn.Exec( + t.Context(), "DECLARE rel_cursor CURSOR FOR SELECT resource_id FROM relationships WHERE resource_type = $1", "document", ) @@ -792,7 +794,8 @@ definition document { _, err = pgconn.Exec(t.Context(), "BEGIN") require.NoError(t, err) - _, err = pgconn.Exec(t.Context(), + _, err = pgconn.Exec( + t.Context(), "DECLARE ls_cursor CURSOR FOR SELECT subject_id FROM permissions WHERE resource_type = $1 AND resource_id = $2 AND permission = $3 AND subject_type = $4", "document", "testdoc", "view", "user", ) @@ -1028,10 +1031,10 @@ func runSpiceDB(t *testing.T) *authzed.Client { require.NoError(t, err) serverReady := make(chan bool) - go (func() { + go func() { serverReady <- true _ = runnableServer.Run(ctx) - })() + }() // Wait for server goroutine to start <-serverReady diff --git a/internal/fdw/tables/relationships_test.go b/internal/fdw/tables/relationships_test.go index 1bbbf6bf6a..8a71e0fbbc 100644 --- a/internal/fdw/tables/relationships_test.go +++ b/internal/fdw/tables/relationships_test.go @@ -219,7 +219,8 @@ func TestFilterFromFields(t *testing.T) { require.Nil(t, filter.OptionalSubjectFilter.OptionalRelation) } else { require.NotNil(t, filter.OptionalSubjectFilter.OptionalRelation) - require.Equal(t, + require.Equal( + t, tc.expectedFilter.OptionalSubjectFilter.OptionalRelation.Relation, filter.OptionalSubjectFilter.OptionalRelation.Relation, ) diff --git a/internal/graph/check.go b/internal/graph/check.go index 6d9a9938e1..08b792284d 100644 --- a/internal/graph/check.go +++ b/internal/graph/check.go @@ -410,7 +410,8 @@ func (cc *ConcurrentChecker) checkDirect(ctx context.Context, crc currentRequest OptionalSubjectsSelectors: subjectSelectors, } - it, err := dl.QueryRelationships(ctx, filter, + it, err := dl.QueryRelationships( + ctx, filter, options.WithSkipCaveats(!directSubjectOrWildcardCanHaveCaveats), options.WithSkipExpiration(!directSubjectOrWildcardCanHaveExpiration), options.WithQueryShape(queryshape.CheckPermissionSelectDirectSubjects), @@ -461,7 +462,8 @@ func (cc *ConcurrentChecker) checkDirect(ctx context.Context, crc currentRequest }, } - it, err := dl.QueryRelationships(ctx, filter, + it, err := dl.QueryRelationships( + ctx, filter, options.WithSkipCaveats(!nonTerminalsCanHaveCaveats), options.WithSkipExpiration(!nonTerminalsCanHaveExpiration), options.WithQueryShape(queryshape.CheckPermissionSelectIndirectSubjects), diff --git a/internal/graph/computed/computecheck_test.go b/internal/graph/computed/computecheck_test.go index ed0faa8861..e1f5f1c8a7 100644 --- a/internal/graph/computed/computecheck_test.go +++ b/internal/graph/computed/computecheck_test.go @@ -819,7 +819,8 @@ func TestComputeCheckWithCaveats(t *testing.T) { t.Run(fmt.Sprintf("%s::%v", r.check, r.context), func(t *testing.T) { rel := tuple.MustParse(r.check) - result, _, err := computed.ComputeCheck(ctx, dispatch, + result, _, err := computed.ComputeCheck( + ctx, dispatch, caveattypes.Default.TypeSet, computed.CheckParameters{ ResourceType: rel.Resource.RelationReference(), @@ -864,7 +865,8 @@ func TestComputeCheckError(t *testing.T) { ctx := log.Logger.WithContext(datalayer.ContextWithHandle(t.Context())) require.NoError(t, datalayer.SetInContext(ctx, datalayer.NewDataLayer(ds))) - _, _, err = computed.ComputeCheck(ctx, dispatch, + _, _, err = computed.ComputeCheck( + ctx, dispatch, caveattypes.Default.TypeSet, computed.CheckParameters{ ResourceType: tuple.RR("a", "b"), @@ -913,7 +915,8 @@ func TestComputeBulkCheck(t *testing.T) { }) require.NoError(t, err) - resp, _, _, err := computed.ComputeBulkCheck(ctx, dispatch, + resp, _, _, err := computed.ComputeBulkCheck( + ctx, dispatch, caveattypes.Default.TypeSet, computed.CheckParameters{ ResourceType: tuple.RR("document", "view"), diff --git a/internal/graph/cursors_test.go b/internal/graph/cursors_test.go index 25c32f1258..2678f2b08e 100644 --- a/internal/graph/cursors_test.go +++ b/internal/graph/cursors_test.go @@ -196,7 +196,8 @@ func TestWithParallelizedStreamingIterableInCursor(t *testing.T) { } return stream.Publish((item * 10) + 1) - }) + }, + ) require.NoError(t, err) require.Equal(t, []int{100, 101, 200, 201, 300, 301, 400, 401, 500, 501}, parentStream.Results()) @@ -226,7 +227,8 @@ func TestWithParallelizedStreamingIterableInCursorWithExistingCursor(t *testing. } return stream.Publish((item * 10) + 1) - }) + }, + ) require.NoError(t, err) require.Equal(t, []int{300, 301, 400, 401, 500, 501}, parentStream.Results()) @@ -256,7 +258,8 @@ func TestWithParallelizedStreamingIterableInCursorWithLimit(t *testing.T) { } return stream.Publish((item * 10) + 1) - }) + }, + ) require.NoError(t, err) require.Equal(t, []int{100, 101, 200, 201, 300}, parentStream.Results()) @@ -294,7 +297,8 @@ func TestWithParallelizedStreamingIterableInCursorEnsureParallelism(t *testing.T lock.Unlock() return stream.Publish(item * 10) - }) + }, + ) require.Len(t, encountered, len(expected)) require.NotEqual(t, expected, encountered) @@ -334,7 +338,8 @@ func TestWithDatastoreCursorInCursor(t *testing.T) { lock.Unlock() return stream.Publish(item * 10) - }) + }, + ) expected := []int{10, 20, 30} @@ -378,7 +383,8 @@ func TestWithDatastoreCursorInCursorWithMalformedCursor(t *testing.T) { lock.Unlock() return stream.Publish(item * 10) - }) + }, + ) require.ErrorContains(t, err, "could not parse") } @@ -420,7 +426,8 @@ func TestWithDatastoreCursorInCursorWithStartingCursor(t *testing.T) { } return stream.Publish(item * 10) - }) + }, + ) require.NoError(t, err) diff --git a/internal/graph/lookupresources2.go b/internal/graph/lookupresources2.go index 3f5f93bbe6..a371a1dbb2 100644 --- a/internal/graph/lookupresources2.go +++ b/internal/graph/lookupresources2.go @@ -337,7 +337,8 @@ func (crr *CursoredLookupResources2) redispatchOrReportOverDatabaseQuery( skipCaveats := !possibleTraits.AllowsCaveats skipExpiration := !possibleTraits.AllowsExpiration - return withDatastoreCursorInCursor(ctx, config.ci, config.parentStream, config.concurrencyLimit, + return withDatastoreCursorInCursor( + ctx, config.ci, config.parentStream, config.concurrencyLimit, // Find the target resources for the subject. func(queryCursor options.Cursor) ([]itemAndPostCursor[dispatchableResourcesSubjectMap2], error) { it, err := config.reader.ReverseQueryRelationships( @@ -590,7 +591,8 @@ func (crr *CursoredLookupResources2) redispatchOrReport( tuple.FromCoreObjectAndRelation(parentRequest.TerminalSubject), &v1.ResourceCheckResult{ Membership: v1.ResourceCheckResult_MEMBER, - }) + }, + ) if err != nil { return err } diff --git a/internal/graph/lookupresources3.go b/internal/graph/lookupresources3.go index 5e6a2c87e8..87e54329cd 100644 --- a/internal/graph/lookupresources3.go +++ b/internal/graph/lookupresources3.go @@ -383,7 +383,8 @@ func (crr *CursoredLookupResources3) unlimitedLookupResourcesIter( // Portion #1: If the requested resource type+relation matches the subject type+relation, then we've immediately // found matching resources, as a permission always matches itself. - return cter.CursoredWithIntegerHeader(ctx, cursor, + return cter.CursoredWithIntegerHeader( + ctx, cursor, func(ctx context.Context, startIndex int) iter.Seq2[possibleResource, error] { // If the subject relation does not match the resource relation, we cannot yield any results for this // portion. @@ -725,7 +726,8 @@ func (crr *CursoredLookupResources3) relationshipsIter( // The producer will yield chunks of relationships, maximum of the dispatchChunkSize, to be // dispatched by the mapper in parallel. return estimatedConcurrencyLimit(crr, refs, keyedEntrypoint(config.entrypoint), func(computedConcurrencyLimit uint16) iter.Seq2[result, error] { - return cter.CursoredProducerMapperIterator(ctx, currentCursor, + return cter.CursoredProducerMapperIterator( + ctx, currentCursor, computedConcurrencyLimit, datastoreIndexFromString, mustDatastoreIndexToString, @@ -1009,7 +1011,8 @@ func (crr *CursoredLookupResources3) filterSubjectsByCheck( tuple.FromCoreObjectAndRelation(refs.req.TerminalSubject), &v1.ResourceCheckResult{ Membership: v1.ResourceCheckResult_MEMBER, - }) + }, + ) if err != nil { return nil, err } diff --git a/internal/graph/lookupsubjects.go b/internal/graph/lookupsubjects.go index 8fdfe992a2..f83a41ffc3 100644 --- a/internal/graph/lookupsubjects.go +++ b/internal/graph/lookupsubjects.go @@ -77,7 +77,8 @@ func (cl *ConcurrentLookupSubjects) LookupSubjects( ctx, req.ResourceRelation.Namespace, req.ResourceRelation.Relation, - sr) + sr, + ) if err != nil { return err } diff --git a/internal/graph/lr2streams.go b/internal/graph/lr2streams.go index 610409fe52..a49c526282 100644 --- a/internal/graph/lr2streams.go +++ b/internal/graph/lr2streams.go @@ -124,7 +124,8 @@ func (rdc *checkAndDispatchRunner) runChecker(ctx context.Context, startingIndex tuple.FromCoreObjectAndRelation(rdc.parentRequest.TerminalSubject), &v1.ResourceCheckResult{ Membership: v1.ResourceCheckResult_MEMBER, - }) + }, + ) if err != nil { return err } diff --git a/internal/graph/membershipset_test.go b/internal/graph/membershipset_test.go index ba19e0e62c..43a07f5337 100644 --- a/internal/graph/membershipset_test.go +++ b/internal/graph/membershipset_test.go @@ -23,7 +23,8 @@ func caveat(name string, context map[string]any) *core.CaveatExpression { &core.ContextualizedCaveat{ CaveatName: name, Context: s, - }) + }, + ) } func TestMembershipSetAddDirectMember(t *testing.T) { diff --git a/internal/middleware/perfinsights/perfinsights_test.go b/internal/middleware/perfinsights/perfinsights_test.go index 530434d300..f687c4b4ec 100644 --- a/internal/middleware/perfinsights/perfinsights_test.go +++ b/internal/middleware/perfinsights/perfinsights_test.go @@ -433,7 +433,8 @@ func TestPerfInsightsMiddlewareWithBuffcon(t *testing.T) { }() // Create client connection using buffcon - conn, err := grpc.NewClient("localhost:fake", + conn, err := grpc.NewClient( + "localhost:fake", grpc.WithContextDialer(func(context.Context, string) (net.Conn, error) { return lis.Dial() }), diff --git a/internal/relationships/validation.go b/internal/relationships/validation.go index b3e90c2341..6e84baa71c 100644 --- a/internal/relationships/validation.go +++ b/internal/relationships/validation.go @@ -198,7 +198,8 @@ func ValidateOneRelationship( relationToCheck = ns.AllowedRelationWithCaveat( rel.Subject.ObjectType, rel.Subject.Relation, - caveat) + caveat, + ) } if rel.OptionalExpiration != nil { @@ -210,7 +211,8 @@ func ValidateOneRelationship( // For writing or when the caveat was specified, the caveat must be a direct match. isAllowed, err := resourceTS.HasAllowedRelation( rel.Resource.Relation, - relationToCheck) + relationToCheck, + ) if err != nil { return err } diff --git a/internal/services/integrationtesting/benchmark_dispatchqueryplan_test.go b/internal/services/integrationtesting/benchmark_dispatchqueryplan_test.go index 1d70d08a35..59b04ac50a 100644 --- a/internal/services/integrationtesting/benchmark_dispatchqueryplan_test.go +++ b/internal/services/integrationtesting/benchmark_dispatchqueryplan_test.go @@ -92,7 +92,8 @@ func (h *dispatchQueryPlanHandle) compileIterator(b *testing.B, operation query. require.NoError(b, err) obs := query.NewCountObserver() - warmCtx := query.NewLocalContext(b.Context(), + warmCtx := query.NewLocalContext( + b.Context(), query.WithReader(query.NewQueryDatastoreReader( datalayer.NewDataLayer(h.ds).SnapshotReader(h.revision, h.schemaHash), )), @@ -132,7 +133,8 @@ func (h *dispatchQueryPlanHandle) compileIterator(b *testing.B, operation query. // newLocalContext creates a query context using LocalExecutor for baseline comparison. func (h *dispatchQueryPlanHandle) newLocalContext(ctx context.Context) *query.Context { - return query.NewLocalContext(ctx, + return query.NewLocalContext( + ctx, query.WithRevisionedReader(datalayer.NewDataLayer(h.ds).SnapshotReader(h.revision, h.schemaHash)), query.WithCaveatRunner(caveats.NewCaveatRunner(caveattypes.Default.TypeSet)), ) diff --git a/internal/services/integrationtesting/benchmark_executors_test.go b/internal/services/integrationtesting/benchmark_executors_test.go index 1a6738c20d..5a33e40d54 100644 --- a/internal/services/integrationtesting/benchmark_executors_test.go +++ b/internal/services/integrationtesting/benchmark_executors_test.go @@ -92,7 +92,8 @@ func newExecutorHandle(b *testing.B, engineID, scenarioName string) *executorHan b.StopTimer() rde := testdatastore.RunDatastoreEngine(b, engineID) - ds := rde.NewDatastore(b, config.DatastoreConfigInitFunc(b, + ds := rde.NewDatastore(b, config.DatastoreConfigInitFunc( + b, dsconfig.WithWatchBufferLength(0), dsconfig.WithGCWindow(time.Duration(90_000_000_000_000)), dsconfig.WithRevisionQuantization(10), @@ -183,7 +184,8 @@ func compileAdvisedCheckIterator( reader := query.NewQueryDatastoreReader(datalayer.NewDataLayer(ds).SnapshotReader(revision, schemaHash)) obs := query.NewCountObserver() - warmCtx := query.NewLocalContext(b.Context(), + warmCtx := query.NewLocalContext( + b.Context(), query.WithReader(reader), query.WithObserver(obs), query.WithCaveatRunner(caveats.NewCaveatRunner(caveattypes.Default.TypeSet)), @@ -293,7 +295,8 @@ func runExecutorCheck(b *testing.B, h *executorHandle) { func newLocalQueryContext(b *testing.B, h *executorHandle) *query.Context { b.Helper() - return query.NewLocalContext(b.Context(), + return query.NewLocalContext( + b.Context(), query.WithReader(query.NewQueryDatastoreReader( datalayer.NewDataLayer(h.ds).SnapshotReader(h.revision, h.schemaHash), )), diff --git a/internal/services/integrationtesting/benchmark_test.go b/internal/services/integrationtesting/benchmark_test.go index 2ff1277619..04939ec9d5 100644 --- a/internal/services/integrationtesting/benchmark_test.go +++ b/internal/services/integrationtesting/benchmark_test.go @@ -310,7 +310,8 @@ func BenchmarkServices(b *testing.B) { b.StopTimer() rde := testdatastore.RunDatastoreEngine(b, engineID) - ds := rde.NewDatastore(b, config.DatastoreConfigInitFunc(b, + ds := rde.NewDatastore(b, config.DatastoreConfigInitFunc( + b, dsconfig.WithWatchBufferLength(0), dsconfig.WithGCWindow(time.Duration(90_000_000_000_000)), dsconfig.WithRevisionQuantization(10), @@ -348,7 +349,8 @@ func BenchmarkServices(b *testing.B) { dispatchTester := consistencytestutil.NewServiceTester(dispatchConn[0]) // Set up query plan server. - qpConn := testserver.TestClusterWithDispatch(b, 1, ds, + qpConn := testserver.TestClusterWithDispatch( + b, 1, ds, server.WithExperimentalQueryPlan("check"), server.WithExperimentalQueryPlan("lr"), server.WithExperimentalQueryPlan("ls"), diff --git a/internal/services/integrationtesting/consistency_test.go b/internal/services/integrationtesting/consistency_test.go index 25a9448964..6a4e881dcb 100644 --- a/internal/services/integrationtesting/consistency_test.go +++ b/internal/services/integrationtesting/consistency_test.go @@ -417,7 +417,8 @@ func ensureRelationshipWrites(t *testing.T, vctx validationContext) { // validateRelationshipReads ensures that all defined relationships are returned by the Read API. func validateRelationshipReads(t *testing.T, vctx validationContext) { testForEachRelationship(t, vctx, "read", func(t *testing.T, relationship tuple.Relationship) { - foundRelationships, err := vctx.serviceTester.Read(t.Context(), + foundRelationships, err := vctx.serviceTester.Read( + t.Context(), relationship.Resource.ObjectType, vctx.revision, ) @@ -440,7 +441,8 @@ func validateRelationshipReads(t *testing.T, vctx validationContext) { func ensureNoExpansionErrors(t *testing.T, vctx validationContext) { testForEachResource(t, vctx, "run_expand", func(t *testing.T, resource tuple.ObjectAndRelation) { - _, err := vctx.serviceTester.Expand(t.Context(), + _, err := vctx.serviceTester.Expand( + t.Context(), resource, vctx.revision, ) @@ -464,7 +466,8 @@ func validateExpansionSubjects(t *testing.T, vctx validationContext) { SchemaHash: []byte(datalayer.NoSchemaHashForTesting), }, ExpansionMode: dispatchv1.DispatchExpandRequest_RECURSIVE, - }) + }, + ) require.NoError(t, err) // Build an accessible subject set from the expansion tree. @@ -479,7 +482,8 @@ func validateExpansionSubjects(t *testing.T, vctx validationContext) { // NOTE: an expanded subject must either be accessible directly (e.g. not via a wildcard) // OR must be removed due to a static caveat context removing it from the set. - require.True(t, + require.True( + t, accessiblity == consistencytestutil.AccessibleDirectly || accessiblity == consistencytestutil.NotAccessibleDueToPrespecifiedCaveat, "mismatch between expand and accessibility for resource %s and subject %s. accessibility: %v, permissionship: %v", @@ -546,7 +550,8 @@ func validateLookupResources(t *testing.T, vctx validationContext) { } } - require.ElementsMatch(t, + require.ElementsMatch( + t, slices.Collect(maps.Keys(accessibleResources)), slices.Collect(maps.Keys(resolvedResources)), "expected accessibleResources in list A don't match actual resolvedResources in list B", @@ -557,7 +562,8 @@ func validateLookupResources(t *testing.T, vctx validationContext) { expectedBulkPermissions := map[string]v1.CheckPermissionResponse_Permissionship{} for _, resolvedResource := range resolvedResources { - permissionship, err := vctx.serviceTester.Check(t.Context(), + permissionship, err := vctx.serviceTester.Check( + t.Context(), tuple.ObjectAndRelation{ ObjectType: resourceRelation.ObjectType, ObjectID: resolvedResource.ResourceObjectId, @@ -576,7 +582,8 @@ func validateLookupResources(t *testing.T, vctx validationContext) { expectedBulkPermissions[resolvedResource.ResourceObjectId] = expectedPermissionship require.NoError(t, err) - require.Equal(t, + require.Equal( + t, expectedPermissionship, permissionship, "Found Check failure for relation %s:%s#%s and subject %s in lookup resources; LR permission %v, Check Permission %v", @@ -605,7 +612,8 @@ func validateLookupResources(t *testing.T, vctx validationContext) { } // Ensure they are all found via bulk check as well. - results, err := vctx.serviceTester.CheckBulk(t.Context(), + results, err := vctx.serviceTester.CheckBulk( + t.Context(), checkBulkItems, vctx.revision, ) @@ -635,7 +643,8 @@ func validateLookupSubjects(t *testing.T, vctx validationContext) { // permissions as their subject relation, or wildcards), this should be a // subset. expectedDefinedSubjects := vctx.accessibilitySet.DirectlyAccessibleDefinedSubjectsOfType(resource, subjectType) - requireSubsetOf(t, + requireSubsetOf( + t, slices.Collect(maps.Keys(resolvedSubjects)), slices.Collect(maps.Keys(expectedDefinedSubjects)), ) @@ -714,7 +723,8 @@ func validateLookupSubjects(t *testing.T, vctx validationContext) { } for _, excludedSubject := range resolvedSubject.ExcludedSubjects { - permissionship, err := vctx.serviceTester.Check(t.Context(), + permissionship, err := vctx.serviceTester.Check( + t.Context(), resource, tuple.ObjectAndRelation{ ObjectType: subjectType.ObjectType, @@ -734,7 +744,8 @@ func validateLookupSubjects(t *testing.T, vctx validationContext) { expectedPermissionship = v1.CheckPermissionResponse_PERMISSIONSHIP_CONDITIONAL_PERMISSION } - require.Equal(t, + require.Equal( + t, expectedPermissionship, permissionship, "Found Check failure for resource %s and excluded subject %s in lookup subjects", @@ -756,7 +767,8 @@ func validateLookupSubjects(t *testing.T, vctx validationContext) { Relation: subjectType.Relation, } - permissionship, err := vctx.serviceTester.Check(t.Context(), + permissionship, err := vctx.serviceTester.Check( + t.Context(), resource, subject, vctx.revision, @@ -769,7 +781,8 @@ func validateLookupSubjects(t *testing.T, vctx validationContext) { expectedPermissionship = v1.CheckPermissionResponse_PERMISSIONSHIP_CONDITIONAL_PERMISSION } - require.Equal(t, + require.Equal( + t, expectedPermissionship, permissionship, "Found Check failure for resource %s and subject %s in lookup subjects", @@ -866,7 +879,8 @@ func runAssertions(t *testing.T, vctx validationContext) { case v1.CheckPermissionResponse_PERMISSIONSHIP_CONDITIONAL_PERMISSION: require.Contains(t, resolvedDirectResourceIds, rel.Resource.ObjectID, "Missing object %s in lookup for assertion %s", rel.Resource, rel) - require.Equal(t, v1.LookupPermissionship_LOOKUP_PERMISSIONSHIP_CONDITIONAL_PERMISSION, resolvedDirectResourcesMap[rel.Resource.ObjectID].Permissionship, + require.Equal( + t, v1.LookupPermissionship_LOOKUP_PERMISSIONSHIP_CONDITIONAL_PERMISSION, resolvedDirectResourcesMap[rel.Resource.ObjectID].Permissionship, "Expected caveated permission in direct lookup for assertion %s", rel, ) } @@ -888,7 +902,8 @@ func runAssertions(t *testing.T, vctx validationContext) { case accessibility != consistencytestutil.NotAccessibleDueToPrespecifiedCaveat: found, ok := resolvedIndirectResourcesMap[rel.Resource.ObjectID] require.True(t, ok, "Missing expected object %s in indirect lookup for assertion %s", rel.Resource, rel) - require.Equal(t, v1.LookupPermissionship_LOOKUP_PERMISSIONSHIP_CONDITIONAL_PERMISSION, found.Permissionship, + require.Equal( + t, v1.LookupPermissionship_LOOKUP_PERMISSIONSHIP_CONDITIONAL_PERMISSION, found.Permissionship, "Expected caveated permission in indirect lookup for assertion %s", rel, ) } @@ -1104,7 +1119,8 @@ func validateReachableSubjectTypes(t *testing.T, vctx validationContext) { subjectTypeRef = subjectTypeRef + "#" + member.Relation } - require.True(t, reachableSubjectTypesSet.Has(subjectTypeRef), + require.True( + t, reachableSubjectTypesSet.Has(subjectTypeRef), "Found unexpected subject type %s#%s in lookup subjects for resource %s; expected one of %s", member.ObjectType, member.Relation, diff --git a/internal/services/integrationtesting/consistencytestutil/accessibilityset.go b/internal/services/integrationtesting/consistencytestutil/accessibilityset.go index 62a18c8b39..4b5e812437 100644 --- a/internal/services/integrationtesting/consistencytestutil/accessibilityset.go +++ b/internal/services/integrationtesting/consistencytestutil/accessibilityset.go @@ -168,7 +168,8 @@ func BuildAccessibilitySet(t *testing.T, ctx context.Context, populated *validat // statically has permission (or not). This can happen if the caveat context // is fully specified on the relationship. if membership == dispatchv1.ResourceCheckResult_CAVEATED_MEMBER { - cr, _, err := computed.ComputeCheck(ctx, dispatcher, + cr, _, err := computed.ComputeCheck( + ctx, dispatcher, caveattypes.Default.TypeSet, computed.CheckParameters{ ResourceType: resourceRelation, diff --git a/internal/services/integrationtesting/dockertests/perf_test.go b/internal/services/integrationtesting/dockertests/perf_test.go index 4c8f31c572..cdcdb1cc82 100644 --- a/internal/services/integrationtesting/dockertests/perf_test.go +++ b/internal/services/integrationtesting/dockertests/perf_test.go @@ -48,7 +48,7 @@ func TestBurst(t *testing.T) { client := v1.NewPermissionsServiceClient(conns[0]) var wg sync.WaitGroup for i := 0; i < 100; i++ { - rel := tuple.ToV1Relationship(tuple.MustParse(tf.StandardRelationships[i%(len(tf.StandardRelationships))])) + rel := tuple.ToV1Relationship(tuple.MustParse(tf.StandardRelationships[i%len(tf.StandardRelationships)])) run := make(chan struct{}) wg.Add(1) go func() { diff --git a/internal/services/integrationtesting/queryconsistency/query_plan_consistency_test.go b/internal/services/integrationtesting/queryconsistency/query_plan_consistency_test.go index 24b11b6273..eb9408b43c 100644 --- a/internal/services/integrationtesting/queryconsistency/query_plan_consistency_test.go +++ b/internal/services/integrationtesting/queryconsistency/query_plan_consistency_test.go @@ -237,7 +237,8 @@ func runQueryPlanLookupResources(t *testing.T, handle *queryPlanConsistencyHandl }() } - require.ElementsMatch(t, + require.ElementsMatch( + t, slices.Collect(maps.Keys(accessibleResources)), slices.Collect(maps.Keys(resolvedResources)), "expected accessibleResources in list A don't match actual resolvedResources in list B", @@ -297,7 +298,8 @@ func runQueryPlanLookupSubjects(t *testing.T, handle *queryPlanConsistencyHandle }() } - require.ElementsMatch(t, + require.ElementsMatch( + t, slices.Collect(maps.Keys(accessibleSubjects)), slices.Collect(maps.Keys(resolvedSubjects)), "expected accessibleSubjects in list A don't match actual resolvedSubjects in list B", diff --git a/internal/services/integrationtesting/queryconsistency/query_plan_grpc_test.go b/internal/services/integrationtesting/queryconsistency/query_plan_grpc_test.go index a49d9bb4e4..2da1d6f3de 100644 --- a/internal/services/integrationtesting/queryconsistency/query_plan_grpc_test.go +++ b/internal/services/integrationtesting/queryconsistency/query_plan_grpc_test.go @@ -152,7 +152,8 @@ func validateQueryPlanLookupResources( resolvedIDs = append(resolvedIDs, r.ResourceObjectId) } - require.ElementsMatch(t, + require.ElementsMatch( + t, slices.Collect(maps.Keys(accessibleResources)), resolvedIDs, "query plan LookupResources mismatch for %s#%s / subject %s", @@ -193,7 +194,8 @@ func validateQueryPlanLookupSubjects( // The accessibility set only covers directly-accessible defined subjects; // it does not include inferred subjects or wildcards, so we check subset. expectedDefinedSubjects := accessibilitySet.DirectlyAccessibleDefinedSubjectsOfType(resource, subjectType) - requireSubsetOf(t, + requireSubsetOf( + t, slices.Collect(maps.Keys(resolvedSubjects)), slices.Collect(maps.Keys(expectedDefinedSubjects)), ) diff --git a/internal/services/v1/errors.go b/internal/services/v1/errors.go index ced2f8d2fe..8cd76e7c6d 100644 --- a/internal/services/v1/errors.go +++ b/internal/services/v1/errors.go @@ -157,7 +157,8 @@ func NewExceedsMaximumPreconditionsErr(preconditionCount uint64, maxCountAllowed error: fmt.Errorf( "precondition count of %d is greater than maximum allowed of %d", preconditionCount, - maxCountAllowed), + maxCountAllowed, + ), preconditionCount: preconditionCount, maxCountAllowed: maxCountAllowed, } diff --git a/internal/services/v1/experimental_test.go b/internal/services/v1/experimental_test.go index 8939d1b5ef..d831268c80 100644 --- a/internal/services/v1/experimental_test.go +++ b/internal/services/v1/experimental_test.go @@ -536,15 +536,15 @@ func TestBulkCheckPermission(t *testing.T) { }, { name: "chunking test", - requests: (func() []string { + requests: func() []string { toReturn := make([]string, 0, defaultFilterMaximumIDCountForTest+5) for i := range int(defaultFilterMaximumIDCountForTest + 5) { toReturn = append(toReturn, fmt.Sprintf(`document:masterplan-%d#view@user:eng_lead`, i)) } return toReturn - })(), - response: (func() []bulkCheckTest { + }(), + response: func() []bulkCheckTest { toReturn := make([]bulkCheckTest, 0, defaultFilterMaximumIDCountForTest+5) for i := range int(defaultFilterMaximumIDCountForTest + 5) { toReturn = append(toReturn, bulkCheckTest{ @@ -554,11 +554,11 @@ func TestBulkCheckPermission(t *testing.T) { } return toReturn - })(), + }(), }, { name: "chunking test with errors", - requests: (func() []string { + requests: func() []string { toReturn := make([]string, 0, defaultFilterMaximumIDCountForTest+6) toReturn = append(toReturn, `nondoc:masterplan#view@user:eng_lead`) @@ -567,8 +567,8 @@ func TestBulkCheckPermission(t *testing.T) { } return toReturn - })(), - response: (func() []bulkCheckTest { + }(), + response: func() []bulkCheckTest { toReturn := make([]bulkCheckTest, 0, defaultFilterMaximumIDCountForTest+6) toReturn = append(toReturn, bulkCheckTest{ req: `nondoc:masterplan#view@user:eng_lead`, @@ -583,7 +583,7 @@ func TestBulkCheckPermission(t *testing.T) { } return toReturn - })(), + }(), }, { name: "same resource and permission with same subject, repeated", diff --git a/internal/services/v1/permissions.go b/internal/services/v1/permissions.go index c11f930b01..a5b0fa2299 100644 --- a/internal/services/v1/permissions.go +++ b/internal/services/v1/permissions.go @@ -121,7 +121,8 @@ func (ps *permissionServer) CheckPermission(ctx context.Context, req *v1.CheckPe debugOption = computed.BasicDebuggingEnabled } - cr, metadata, err := computed.ComputeCheck(ctx, ps.dispatch, + cr, metadata, err := computed.ComputeCheck( + ctx, ps.dispatch, ps.config.CaveatTypeSet, computed.CheckParameters{ ResourceType: tuple.RR(req.Resource.ObjectType, req.Permission), @@ -634,7 +635,8 @@ func (ps *permissionServer) lookupResources3(req *v1.LookupResourcesRequest, res OptionalLimit: req.OptionalLimit, EnableDebugTrace: req.WithDebug, }, - stream) + stream, + ) if err != nil { if req.WithDebug && dispatchpkg.IsMaxDepthExceeded(err) { if debugInfo := dispatchpkg.ExtractTraversalTrace(err); debugInfo != nil { @@ -793,7 +795,8 @@ func (ps *permissionServer) lookupResources2(req *v1.LookupResourcesRequest, res OptionalLimit: req.OptionalLimit, EnableDebugTrace: req.WithDebug, }, - stream) + stream, + ) if err != nil { if req.WithDebug && dispatchpkg.IsMaxDepthExceeded(err) { if debugInfo := dispatchpkg.ExtractTraversalTrace(err); debugInfo != nil { @@ -953,7 +956,8 @@ func (ps *permissionServer) LookupSubjects(req *v1.LookupSubjectsRequest, resp v Relation: cmp.Or(req.OptionalSubjectRelation, tuple.Ellipsis), }, }, - stream) + stream, + ) if err != nil { return ps.rewriteError(ctx, err) } diff --git a/internal/services/v1/permissions_test.go b/internal/services/v1/permissions_test.go index e0ab0c7579..9838f9edbd 100644 --- a/internal/services/v1/permissions_test.go +++ b/internal/services/v1/permissions_test.go @@ -1082,65 +1082,77 @@ func TestTranslateExpansionTree(t *testing.T) { name string input *core.RelationTupleTreeNode }{ - {"simple leaf", pgraph.Leaf(nil, (DS("user", "user1", "...")))}, + {"simple leaf", pgraph.Leaf(nil, DS("user", "user1", "..."))}, { "simple union", - pgraph.Union(nil, - pgraph.Leaf(nil, (DS("user", "user1", "..."))), - pgraph.Leaf(nil, (DS("user", "user2", "..."))), - pgraph.Leaf(nil, (DS("user", "user3", "..."))), + pgraph.Union( + nil, + pgraph.Leaf(nil, DS("user", "user1", "...")), + pgraph.Leaf(nil, DS("user", "user2", "...")), + pgraph.Leaf(nil, DS("user", "user3", "...")), ), }, { "simple intersection", - pgraph.Intersection(nil, - pgraph.Leaf(nil, - (DS("user", "user1", "...")), - (DS("user", "user2", "...")), + pgraph.Intersection( + nil, + pgraph.Leaf( + nil, + DS("user", "user1", "..."), + DS("user", "user2", "..."), ), - pgraph.Leaf(nil, - (DS("user", "user2", "...")), - (DS("user", "user3", "...")), + pgraph.Leaf( + nil, + DS("user", "user2", "..."), + DS("user", "user3", "..."), ), - pgraph.Leaf(nil, - (DS("user", "user2", "...")), - (DS("user", "user4", "...")), + pgraph.Leaf( + nil, + DS("user", "user2", "..."), + DS("user", "user4", "..."), ), ), }, { "empty intersection", - pgraph.Intersection(nil, - pgraph.Leaf(nil, - (DS("user", "user1", "...")), - (DS("user", "user2", "...")), + pgraph.Intersection( + nil, + pgraph.Leaf( + nil, + DS("user", "user1", "..."), + DS("user", "user2", "..."), ), - pgraph.Leaf(nil, - (DS("user", "user3", "...")), - (DS("user", "user4", "...")), + pgraph.Leaf( + nil, + DS("user", "user3", "..."), + DS("user", "user4", "..."), ), ), }, { "simple exclusion", - pgraph.Exclusion(nil, - pgraph.Leaf(nil, - (DS("user", "user1", "...")), - (DS("user", "user2", "...")), + pgraph.Exclusion( + nil, + pgraph.Leaf( + nil, + DS("user", "user1", "..."), + DS("user", "user2", "..."), ), - pgraph.Leaf(nil, (DS("user", "user2", "..."))), - pgraph.Leaf(nil, (DS("user", "user3", "..."))), + pgraph.Leaf(nil, DS("user", "user2", "...")), + pgraph.Leaf(nil, DS("user", "user3", "...")), ), }, { "empty exclusion", - pgraph.Exclusion(nil, - pgraph.Leaf(nil, - (DS("user", "user1", "...")), - (DS("user", "user2", "...")), + pgraph.Exclusion( + nil, + pgraph.Leaf( + nil, + DS("user", "user1", "..."), + DS("user", "user2", "..."), ), - pgraph.Leaf(nil, (DS("user", "user1", "..."))), - pgraph.Leaf(nil, (DS("user", "user2", "..."))), + pgraph.Leaf(nil, DS("user", "user1", "...")), + pgraph.Leaf(nil, DS("user", "user2", "...")), ), }, } @@ -2242,15 +2254,15 @@ func TestCheckBulkPermissions(t *testing.T) { }, { name: "chunking test", - requests: (func() []string { + requests: func() []string { toReturn := make([]string, 0, defaultFilterMaximumIDCountForTest+5) for i := range int(defaultFilterMaximumIDCountForTest + 5) { toReturn = append(toReturn, fmt.Sprintf(`document:masterplan-%d#view@user:eng_lead`, i)) } return toReturn - })(), - response: (func() []bulkCheckTest { + }(), + response: func() []bulkCheckTest { toReturn := make([]bulkCheckTest, 0, defaultFilterMaximumIDCountForTest+5) for i := range int(defaultFilterMaximumIDCountForTest + 5) { toReturn = append(toReturn, bulkCheckTest{ @@ -2260,11 +2272,11 @@ func TestCheckBulkPermissions(t *testing.T) { } return toReturn - })(), + }(), }, { name: "chunking test with errors", - requests: (func() []string { + requests: func() []string { toReturn := make([]string, 0, defaultFilterMaximumIDCountForTest+6) toReturn = append(toReturn, `nondoc:masterplan#view@user:eng_lead`) @@ -2273,8 +2285,8 @@ func TestCheckBulkPermissions(t *testing.T) { } return toReturn - })(), - response: (func() []bulkCheckTest { + }(), + response: func() []bulkCheckTest { toReturn := make([]bulkCheckTest, 0, defaultFilterMaximumIDCountForTest+6) toReturn = append(toReturn, bulkCheckTest{ req: `nondoc:masterplan#view@user:eng_lead`, @@ -2289,7 +2301,7 @@ func TestCheckBulkPermissions(t *testing.T) { } return toReturn - })(), + }(), }, { name: "same resource and permission with same subject, repeated", diff --git a/internal/services/v1/relationships_test.go b/internal/services/v1/relationships_test.go index 3e1e31d189..7eff46708c 100644 --- a/internal/services/v1/relationships_test.go +++ b/internal/services/v1/relationships_test.go @@ -397,7 +397,8 @@ func TestWriteRelationships(t *testing.T) { }) require.Nil(resp) grpcutil.RequireStatus(t, codes.FailedPrecondition, err) - spiceerrors.RequireReason(t, v1.ErrorReason_ERROR_REASON_WRITE_OR_DELETE_PRECONDITION_FAILURE, err, + spiceerrors.RequireReason( + t, v1.ErrorReason_ERROR_REASON_WRITE_OR_DELETE_PRECONDITION_FAILURE, err, "precondition_operation", "precondition_relation", "precondition_resource_id", diff --git a/internal/services/v1/schema_test.go b/internal/services/v1/schema_test.go index 64cade70e3..4c523d208a 100644 --- a/internal/services/v1/schema_test.go +++ b/internal/services/v1/schema_test.go @@ -537,7 +537,8 @@ func TestSchemaTypeRedefined(t *testing.T) { definition example/user {}`, }) grpcutil.RequireStatus(t, codes.InvalidArgument, err) - spiceerrors.RequireReason(t, v1.ErrorReason_ERROR_REASON_SCHEMA_PARSE_ERROR, err, + spiceerrors.RequireReason( + t, v1.ErrorReason_ERROR_REASON_SCHEMA_PARSE_ERROR, err, "source_code", "start_line_number", "start_column_position", diff --git a/internal/testfixtures/datastore.go b/internal/testfixtures/datastore.go index 0683bb9a1c..47f1b72885 100644 --- a/internal/testfixtures/datastore.go +++ b/internal/testfixtures/datastore.go @@ -35,47 +35,56 @@ var CaveatDef = ns.MustCaveatDefinition( var DocumentNS = ns.Namespace( "document", - ns.MustRelation("owner", + ns.MustRelation( + "owner", nil, ns.AllowedRelation("user", "..."), ns.AllowedRelationWithCaveat("user", "...", ns.AllowedCaveat("test")), ), - ns.MustRelation("editor", + ns.MustRelation( + "editor", nil, ns.AllowedRelation("user", "..."), ), - ns.MustRelation("viewer", + ns.MustRelation( + "viewer", nil, ns.AllowedRelation("user", "..."), ns.AllowedRelationWithCaveat("user", "...", ns.AllowedCaveat("test")), ), - ns.MustRelation("viewer_and_editor", + ns.MustRelation( + "viewer_and_editor", nil, ns.AllowedRelation("user", "..."), ), - ns.MustRelation("caveated_viewer", + ns.MustRelation( + "caveated_viewer", nil, ns.AllowedRelationWithCaveat("user", "...", ns.AllowedCaveat("test")), ), - ns.MustRelation("expiring_viewer", + ns.MustRelation( + "expiring_viewer", nil, ns.AllowedRelationWithExpiration("user", "..."), ), ns.MustRelation("parent", nil, ns.AllowedRelation("folder", "...")), - ns.MustRelation("edit", + ns.MustRelation( + "edit", ns.Union( ns.ComputedUserset("owner"), ns.ComputedUserset("editor"), ), ), - ns.MustRelation("view", + ns.MustRelation( + "view", ns.Union( ns.ComputedUserset("viewer"), ns.ComputedUserset("edit"), ns.TupleToUserset("parent", "view"), ), ), - ns.MustRelation("view_and_edit", + ns.MustRelation( + "view_and_edit", ns.Intersection( ns.ComputedUserset("viewer_and_editor"), ns.ComputedUserset("edit"), @@ -85,29 +94,34 @@ var DocumentNS = ns.Namespace( var FolderNS = ns.Namespace( "folder", - ns.MustRelation("owner", + ns.MustRelation( + "owner", nil, ns.AllowedRelation("user", "..."), ns.AllowedRelationWithCaveat("user", "...", ns.AllowedCaveat("test")), ), - ns.MustRelation("editor", + ns.MustRelation( + "editor", nil, ns.AllowedRelation("user", "..."), ), - ns.MustRelation("viewer", + ns.MustRelation( + "viewer", nil, ns.AllowedRelation("user", "..."), ns.AllowedRelation("folder", "viewer"), ns.AllowedRelationWithCaveat("folder", "viewer", ns.AllowedCaveat("test")), ), ns.MustRelation("parent", nil, ns.AllowedRelation("folder", "...")), - ns.MustRelation("edit", + ns.MustRelation( + "edit", ns.Union( ns.ComputedUserset("editor"), ns.ComputedUserset("owner"), ), ), - ns.MustRelation("view", + ns.MustRelation( + "view", ns.Union( ns.ComputedUserset("viewer"), ns.ComputedUserset("edit"), diff --git a/internal/testserver/cluster.go b/internal/testserver/cluster.go index 8f1e2b4d96..49952dd494 100644 --- a/internal/testserver/cluster.go +++ b/internal/testserver/cluster.go @@ -182,7 +182,8 @@ func TestClusterWithDispatch(t testing.TB, size uint, ds datastore.Datastore, ad (&consistent.BalancerConfig{ ReplicationFactor: 1500, Spread: 1, - }).MustServiceConfigJSON()), + }).MustServiceConfigJSON(), + ), grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { // it's possible grpc tries to dial before we have set the // buffconn dialers, we have to return a "TempError" so that diff --git a/internal/testserver/datastore/config/config.go b/internal/testserver/datastore/config/config.go index 84d4c1ab1e..0ac381bdae 100644 --- a/internal/testserver/datastore/config/config.go +++ b/internal/testserver/datastore/config/config.go @@ -17,7 +17,8 @@ import ( func DatastoreConfigInitFunc(t testing.TB, options ...dsconfig.ConfigOption) testdatastore.InitFunc { return func(engine, uri string) datastore.Datastore { ds, err := dsconfig.NewDatastore(t.Context(), - append(options, + append( + options, dsconfig.WithEngine(engine), dsconfig.WithEnableDatastoreMetrics(false), dsconfig.WithURI(uri), diff --git a/internal/testutil/subjects.go b/internal/testutil/subjects.go index be6b51a00f..b96a0abbb0 100644 --- a/internal/testutil/subjects.go +++ b/internal/testutil/subjects.go @@ -172,19 +172,22 @@ func formatCaveatExpr(expr *core.CaveatExpression) string { switch expr.GetOperation().Op { case core.CaveatOperation_AND: - return fmt.Sprintf("(%s) && (%s)", + return fmt.Sprintf( + "(%s) && (%s)", formatCaveatExpr(expr.GetOperation().GetChildren()[0]), formatCaveatExpr(expr.GetOperation().GetChildren()[1]), ) case core.CaveatOperation_OR: - return fmt.Sprintf("(%s) || (%s)", + return fmt.Sprintf( + "(%s) || (%s)", formatCaveatExpr(expr.GetOperation().GetChildren()[0]), formatCaveatExpr(expr.GetOperation().GetChildren()[1]), ) case core.CaveatOperation_NOT: - return fmt.Sprintf("!(%s)", + return fmt.Sprintf( + "!(%s)", formatCaveatExpr(expr.GetOperation().GetChildren()[0]), ) diff --git a/magefiles/go.mod b/magefiles/go.mod index bb46dc0b18..eb2f799b9e 100644 --- a/magefiles/go.mod +++ b/magefiles/go.mod @@ -18,106 +18,116 @@ tool ( ) require ( - github.com/magefile/mage v1.17.0 - golang.org/x/sync v0.20.0 + github.com/magefile/mage v1.17.2 + golang.org/x/sync v0.21.0 ) require ( 4d63.com/gocheckcompilerdirectives v1.3.0 // indirect 4d63.com/gochecknoglobals v0.2.2 // indirect buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.36.11-20250718181942-e35f9b667443.1 // indirect - buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1 // indirect - buf.build/gen/go/bufbuild/registry/connectrpc/go v1.19.1-20260126144947-819582968857.2 // indirect - buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.11-20260126144947-819582968857.1 // indirect + buf.build/gen/go/bufbuild/protodescriptor/protocolbuffers/go v1.36.11-20250109164928-1da0de137947.1 // indirect + buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1 // indirect + buf.build/gen/go/bufbuild/registry/connectrpc/go v1.20.0-20260610134905-7e419c5bd258.1 // indirect + buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.11-20260610134905-7e419c5bd258.1 // indirect buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.11-20241007202033-cf42259fcbfc.1 // indirect - buf.build/go/app v0.2.0 // indirect - buf.build/go/bufplugin v0.9.0 // indirect + buf.build/go/app v0.2.1-0.20260407195847-833f8f978cda // indirect + buf.build/go/bufplugin v0.10.0 // indirect buf.build/go/bufprivateusage v0.1.0 // indirect buf.build/go/interrupt v1.1.0 // indirect - buf.build/go/protovalidate v1.1.3 // indirect - buf.build/go/protoyaml v0.6.0 // indirect + buf.build/go/protovalidate v1.2.0 // indirect + buf.build/go/protoyaml v0.7.0 // indirect buf.build/go/spdx v0.2.0 // indirect buf.build/go/standard v0.1.1-0.20260325175353-2b287e071df5 // indirect - cel.dev/expr v0.25.1 // indirect - connectrpc.com/connect v1.19.1 // indirect + cel.dev/expr v0.25.2 // indirect + charm.land/lipgloss/v2 v2.0.3 // indirect + codeberg.org/chavacava/garif v0.2.0 // indirect + codeberg.org/polyfloyd/go-errorlint v1.9.0 // indirect + connectrpc.com/connect v1.20.0 // indirect connectrpc.com/otelconnect v0.9.0 // 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.1 // indirect - github.com/BurntSushi/toml v1.5.0 // 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 + 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/BurntSushi/toml v1.6.0 // indirect + github.com/ClickHouse/clickhouse-go-linter v1.2.0 // indirect + github.com/Djarvur/go-err113 v0.1.1 // indirect + github.com/Masterminds/semver/v3 v3.5.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/MirrexOne/unqueryvet v1.5.4 // indirect github.com/OpenPeeDeeP/depguard/v2 v2.2.1 // indirect github.com/agnivade/wasmbrowsertest v0.11.0 // indirect - github.com/alecthomas/chroma/v2 v2.17.2 // indirect + github.com/alecthomas/chroma/v2 v2.24.1 // indirect github.com/alecthomas/go-check-sumtype v0.3.1 // indirect github.com/alexkohler/nakedret/v2 v2.0.6 // indirect - github.com/alexkohler/prealloc v1.0.0 // indirect + github.com/alexkohler/prealloc v1.1.0 // indirect + github.com/alfatraining/structtag v1.0.0 // indirect github.com/alingse/asasalint v0.0.11 // indirect github.com/alingse/nilnesserr v0.2.0 // indirect github.com/antlr4-go/antlr/v4 v4.13.1 // indirect - github.com/ashanbrown/forbidigo v1.6.0 // indirect - github.com/ashanbrown/makezero v1.2.0 // indirect - github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/ashanbrown/forbidigo/v2 v2.3.1 // indirect + github.com/ashanbrown/makezero/v2 v2.2.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bkielbasa/cyclop v1.2.3 // indirect github.com/blizzy78/varnamelen v0.8.0 // indirect github.com/bombsimon/wsl/v4 v4.7.0 // indirect + github.com/bombsimon/wsl/v5 v5.8.0 // indirect github.com/breml/bidichk v0.3.3 // indirect github.com/breml/errchkjson v0.4.1 // indirect - github.com/bufbuild/buf v1.67.0 // indirect - github.com/bufbuild/protocompile v0.14.2-0.20260319203231-019757e4c592 // indirect - github.com/bufbuild/protoplugin v0.0.0-20250218205857-750e09ce93e1 // indirect - github.com/butuzov/ireturn v0.4.0 // indirect + github.com/bufbuild/buf v1.71.0 // indirect + github.com/bufbuild/protocompile v0.14.2-0.20260605203730-cd7c3c124e10 // indirect + github.com/bufbuild/protoplugin v0.0.0-20260414125817-25d1d281b46b // indirect + github.com/butuzov/ireturn v0.4.1 // 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.1 // 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/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/charithe/durationcheck v0.0.11 // indirect + github.com/charmbracelet/colorprofile v0.4.3 // indirect + github.com/charmbracelet/ultraviolet v0.0.0-20251205161215-1948445e3318 // indirect + github.com/charmbracelet/x/ansi v0.11.7 // indirect + github.com/charmbracelet/x/term v0.2.2 // indirect + github.com/charmbracelet/x/termios v0.1.1 // indirect + github.com/charmbracelet/x/windows v0.2.2 // indirect github.com/chromedp/cdproto v0.0.0-20240801214329-3f85d328b335 // indirect github.com/chromedp/chromedp v0.10.0 // indirect github.com/chromedp/sysutil v1.0.0 // indirect github.com/ckaznocha/intrange v0.3.1 // indirect github.com/cli/browser v1.3.0 // indirect + github.com/clipperhouse/displaywidth v0.11.0 // indirect + github.com/clipperhouse/uax29/v2 v2.7.0 // indirect github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect - github.com/containerd/stargz-snapshotter/estargz v0.18.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect github.com/creasty/defaults v1.8.0 // 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/dave/jennifer v1.7.1 // 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/distribution/reference v0.6.0 // indirect - github.com/dlclark/regexp2 v1.11.5 // indirect - github.com/docker/cli v29.3.0+incompatible // indirect - github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker-credential-helpers v0.9.5 // indirect - github.com/docker/go-connections v0.6.0 // indirect + github.com/dlclark/regexp2 v1.12.0 // indirect + github.com/docker/cli v29.5.3+incompatible // indirect + github.com/docker/docker-credential-helpers v0.9.8 // indirect + github.com/docker/go-connections v0.7.0 // indirect github.com/docker/go-units v0.5.0 // indirect - github.com/ecordell/optgen v0.2.3 // indirect - github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect + github.com/ecordell/optgen v0.2.6 // indirect + github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect github.com/ettle/strcase v0.2.0 // indirect - github.com/fatih/color v1.18.0 // indirect + github.com/fatih/color v1.19.0 // indirect github.com/fatih/structtag v1.2.0 // indirect - github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/felixge/httpsnoop v1.1.0 // indirect github.com/firefart/nonamedreturns v1.0.6 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/fzipp/gocyclo v0.6.0 // indirect - github.com/ghostiam/protogetter v0.3.15 // indirect - github.com/go-critic/go-critic v0.13.0 // indirect + github.com/ghostiam/protogetter v0.3.20 // indirect + github.com/go-critic/go-critic v0.14.3 // indirect github.com/go-interpreter/wagon v0.6.0 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -134,186 +144,187 @@ require ( github.com/gobwas/httphead v0.1.0 // indirect github.com/gobwas/pool v0.2.1 // indirect github.com/gobwas/ws v1.4.0 // indirect + github.com/godoc-lint/godoc-lint v0.11.2 // indirect github.com/gofrs/flock v0.13.0 // indirect github.com/golang/protobuf v1.5.4 // 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/asciicheck v0.5.0 // indirect + github.com/golangci/dupl v0.0.0-20260401084720-c99c5cf5c202 // 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.1.6 // 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/golangci-lint/v2 v2.12.2 // indirect + github.com/golangci/golines v0.15.0 // indirect + github.com/golangci/misspell v0.8.0 // indirect + github.com/golangci/plugin-module-register v0.1.2 // indirect github.com/golangci/revgrep v0.8.0 // indirect + github.com/golangci/rowserrcheck v0.0.0-20260419091836-c5f79b8a11ba // indirect + github.com/golangci/swaggoswag v0.0.0-20250504205917-77f2aca3143e // indirect github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e // indirect - github.com/google/cel-go v0.27.0 // indirect + github.com/google/cel-go v0.28.1 // indirect github.com/google/go-cmp v0.7.0 // indirect - github.com/google/go-containerregistry v0.21.3 // indirect - github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a // indirect + github.com/google/go-containerregistry v0.21.6 // indirect + github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/gordonklaus/ineffassign v0.1.0 // indirect + github.com/gordonklaus/ineffassign v0.2.0 // 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/hashicorp/go-immutable-radix/v2 v2.1.0 // indirect - github.com/hashicorp/go-version v1.7.0 // indirect + github.com/hashicorp/go-version v1.9.0 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hexops/gotextdiff v1.0.3 // indirect github.com/iancoleman/strcase v0.3.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jdx/go-netrc v1.0.0 // indirect - github.com/jgautheron/goconst v1.8.1 // indirect - github.com/jingyugao/rowserrcheck v1.1.1 // indirect - github.com/jjti/go-spancheck v0.6.4 // indirect + github.com/jgautheron/goconst v1.10.0 // indirect + github.com/jjti/go-spancheck v0.6.5 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/julz/importas v0.2.0 // indirect - github.com/karamaru-alpha/copyloopvar v1.2.1 // indirect - github.com/kisielk/errcheck v1.9.0 // indirect + github.com/karamaru-alpha/copyloopvar v1.2.2 // indirect + github.com/kisielk/errcheck v1.10.0 // indirect github.com/kkHAIKE/contextcheck v1.1.6 // indirect - github.com/klauspost/compress v1.18.5 // indirect + github.com/klauspost/compress v1.18.6 // indirect github.com/klauspost/pgzip v1.2.6 // indirect - github.com/kulti/thelper v0.6.3 // indirect - github.com/kunwardeep/paralleltest v1.0.14 // indirect + github.com/kulti/thelper v0.7.1 // indirect + github.com/kunwardeep/paralleltest v1.0.15 // indirect github.com/lasiar/canonicalheader v1.1.2 // indirect - github.com/ldez/exptostd v0.4.3 // 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.3 // indirect + github.com/ldez/exptostd v0.4.5 // indirect + github.com/ldez/gomoddirectives v0.8.0 // indirect + github.com/ldez/grignotin v0.10.1 // indirect + github.com/ldez/structtags v0.6.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/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4 // indirect + github.com/lucasb-eyer/go-colorful v1.4.0 // indirect + github.com/lyft/protoc-gen-star/v2 v2.0.4 // indirect github.com/macabu/inamedparam v0.2.0 // indirect github.com/magiconair/properties v1.8.6 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/manuelarte/funcorder v0.2.1 // 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.6.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/mattn/go-colorable v0.1.15 // indirect + github.com/mattn/go-isatty v0.0.22 // indirect + github.com/mattn/go-runewidth v0.0.23 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect - github.com/mgechev/revive v1.9.0 // indirect + github.com/mgechev/revive v1.15.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/moby/api v1.54.0 // indirect - github.com/moby/moby/client v0.3.0 // indirect + github.com/moby/moby/api v1.54.2 // indirect + github.com/moby/moby/client v0.4.1 // indirect github.com/moricho/tparallel v0.3.2 // indirect - github.com/muesli/termenv v0.16.0 // indirect + github.com/muesli/cancelreader v0.2.2 // indirect github.com/nakabonne/nestif v0.3.1 // indirect github.com/nishanths/exhaustive v0.12.0 // indirect github.com/nishanths/predeclared v0.2.2 // indirect - github.com/nunnatsa/ginkgolinter v0.19.1 // indirect - github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/nunnatsa/ginkgolinter v0.23.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.2.4 // indirect - github.com/petermattis/goid v0.0.0-20260226131333-17d1149c6ac6 // indirect + github.com/pelletier/go-toml/v2 v2.3.1 // indirect + github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240917153116-6f2963f01587 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/polyfloyd/go-errorlint v1.8.0 // indirect github.com/prometheus/client_golang v1.12.1 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect - github.com/quasilyte/go-ruleguard v0.4.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 github.com/quic-go/qpack v0.6.0 // indirect - github.com/quic-go/quic-go v0.59.1 // indirect + github.com/quic-go/quic-go v0.60.0 // indirect github.com/raeperd/recvcheck v0.2.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/rs/cors v1.11.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/ryancurrah/gomodguard v1.4.1 // indirect - github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect + github.com/ryancurrah/gomodguard/v2 v2.1.3 // indirect + github.com/ryanrolds/sqlclosecheck v0.6.0 // 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.3 // indirect + github.com/sashamelentyev/usestdlibvars v1.29.0 // indirect + github.com/securego/gosec/v2 v2.26.1 // indirect github.com/segmentio/asm v1.2.1 // indirect github.com/segmentio/encoding v0.5.4 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/sivchari/containedctx v1.0.3 // indirect - github.com/sonatard/noctx v0.1.0 // indirect - github.com/sourcegraph/go-diff v0.7.0 // indirect - github.com/spf13/afero v1.14.0 // indirect + github.com/sonatard/noctx v0.5.1 // indirect + github.com/sourcegraph/go-diff v0.8.0 // indirect + github.com/spf13/afero v1.15.0 // indirect github.com/spf13/cast v1.5.0 // indirect github.com/spf13/cobra v1.10.2 // indirect github.com/spf13/jwalterweatherman v1.1.0 // 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/stbenjam/no-sprintf-host-port v0.3.1 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/stretchr/testify v1.11.1 // indirect github.com/subosito/gotenv v1.4.1 // indirect - github.com/tdakkota/asciicheck v0.4.1 // indirect - github.com/tetafro/godot v1.5.1 // indirect - github.com/tetratelabs/wazero v1.11.0 // indirect + github.com/tetafro/godot v1.5.6 // indirect + github.com/tetratelabs/wazero v1.12.0 // indirect github.com/tidwall/btree v1.8.1 // indirect - github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67 // indirect + github.com/timakin/bodyclose v0.0.0-20260129054331-73d1f95b84b4 // indirect github.com/timonwong/loggercheck v0.11.0 // indirect - github.com/tomarrell/wrapcheck/v2 v2.11.0 // indirect + github.com/tomarrell/wrapcheck/v2 v2.12.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/vbatts/tar-split v0.12.2 // indirect + github.com/uudashr/gocognit v1.2.1 // indirect + github.com/uudashr/iface v1.4.2 // indirect github.com/xen0n/gosmopolitan v1.3.0 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect github.com/yagipy/maintidx v1.0.0 // indirect github.com/yeya24/promlinter v0.3.0 // indirect github.com/ykadowak/zerologlint v0.1.5 // indirect gitlab.com/bosi/decorder v0.4.2 // indirect - go-simpler.org/musttag v0.13.1 // indirect - go-simpler.org/sloglint v0.11.0 // indirect - go.augendre.info/fatcontext v0.8.0 // indirect + go-simpler.org/musttag v0.14.0 // indirect + go-simpler.org/sloglint v0.12.0 // indirect + go.augendre.info/arangolint v0.4.0 // indirect + go.augendre.info/fatcontext v0.9.0 // indirect go.lsp.dev/jsonrpc2 v0.10.0 // indirect go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 // indirect go.lsp.dev/protocol v0.12.0 // indirect go.lsp.dev/uri v0.3.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect - go.opentelemetry.io/otel v1.42.0 // indirect - go.opentelemetry.io/otel/metric v1.42.0 // indirect - go.opentelemetry.io/otel/trace v1.42.0 // indirect - go.uber.org/automaxprocs v1.6.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect + go.opentelemetry.io/otel v1.44.0 // indirect + go.opentelemetry.io/otel/metric v1.44.0 // indirect + go.opentelemetry.io/otel/trace v1.44.0 // indirect go.uber.org/mock v0.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.27.1 // indirect + go.uber.org/zap v1.28.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.52.0 // indirect - golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect - golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac // indirect - golang.org/x/mod v0.35.0 // indirect - golang.org/x/net v0.54.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect - golang.org/x/term v0.43.0 // indirect - golang.org/x/text v0.37.0 // indirect - golang.org/x/tools v0.44.0 // indirect - golang.org/x/vuln v1.1.4 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260319201613-d00831a3d3e7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7 // indirect - google.golang.org/grpc v1.79.3 // indirect - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 // indirect + golang.org/x/crypto v0.53.0 // indirect + golang.org/x/exp v0.0.0-20260611194520-c48552f49976 // indirect + golang.org/x/exp/typeparams v0.0.0-20260209203927-2842357ff358 // indirect + golang.org/x/mod v0.37.0 // indirect + golang.org/x/net v0.56.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/telemetry v0.0.0-20260611141451-d61e87d5f4a3 // indirect + golang.org/x/term v0.44.0 // indirect + golang.org/x/text v0.38.0 // indirect + golang.org/x/tools v0.46.0 // indirect + golang.org/x/vuln v1.4.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260610212136-7ab31c22f7ad // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260610212136-7ab31c22f7ad // indirect + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.2 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - honnef.co/go/tools v0.6.1 // indirect - mvdan.cc/gofumpt v0.9.2 // indirect - mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4 // indirect + honnef.co/go/tools v0.7.0 // indirect + mvdan.cc/gofumpt v0.10.0 // indirect + mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15 // indirect mvdan.cc/xurls/v2 v2.6.0 // indirect pluginrpc.com/pluginrpc v0.5.0 // indirect ) diff --git a/magefiles/go.sum b/magefiles/go.sum index 1e3557113a..2032117e0f 100644 --- a/magefiles/go.sum +++ b/magefiles/go.sum @@ -6,32 +6,34 @@ buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.36.11-20250718181942-e buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.36.11-20250718181942-e35f9b667443.1/go.mod h1:1Znr6gmYBhbxWUPRrrVnSLXQsz8bvFVw1HHJq2bI3VQ= buf.build/gen/go/bufbuild/protodescriptor/protocolbuffers/go v1.36.11-20250109164928-1da0de137947.1 h1:HwzzCRS4ZrEm1++rzSDxHnO0DOjiT1b8I/24e8a4exY= buf.build/gen/go/bufbuild/protodescriptor/protocolbuffers/go v1.36.11-20250109164928-1da0de137947.1/go.mod h1:8PRKXhgNes29Tjrnv8KdZzg3I1QceOkzibW1QK7EXv0= -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1 h1:PMmTMyvHScV9Mn8wc6ASge9uRcHy0jtqPd+fM35LmsQ= -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1/go.mod h1:tvtbpgaVXZX4g6Pn+AnzFycuRK3MOz5HJfEGeEllXYM= -buf.build/gen/go/bufbuild/registry/connectrpc/go v1.19.1-20260126144947-819582968857.2 h1:XPrWCd9ydEo5Ofv1aNJVJaxndMXLQjRO9vVzsJG3jL8= -buf.build/gen/go/bufbuild/registry/connectrpc/go v1.19.1-20260126144947-819582968857.2/go.mod h1:mpsjeEaxOYPIJV2cz4IagLghZufRvx+NPVtInjEeoQ8= -buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.11-20260126144947-819582968857.1 h1:Yreby6Ypa58wdQUEm9Fnc5g8n/jP487Dq3aK5yBYwfk= -buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.11-20260126144947-819582968857.1/go.mod h1:1JJi9jvOqRxSMa+JxiZSm57doB+db/1WYCIa2lHfc40= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1 h1:s6hzCXtND/ICdGPTMGk7C+/BFlr2Jg5GyH0NKf4XGXg= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1/go.mod h1:tvtbpgaVXZX4g6Pn+AnzFycuRK3MOz5HJfEGeEllXYM= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.20.0-20260610134905-7e419c5bd258.1 h1:yEdEDjTFwxgYv/3nmKxQFQBOUVzh8VUbuWu9g6yaYz8= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.20.0-20260610134905-7e419c5bd258.1/go.mod h1:rK7cTwmzl4ZDFpNxed/Hpc2Z/8ojsaq+XoYWDehuruc= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.11-20260610134905-7e419c5bd258.1 h1:kDM6h0UY+keayVHlk6QjTzjw22JH4ung9tuL6H4vppE= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.11-20260610134905-7e419c5bd258.1/go.mod h1:1JJi9jvOqRxSMa+JxiZSm57doB+db/1WYCIa2lHfc40= buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.11-20241007202033-cf42259fcbfc.1 h1:iGPvEJltOXUMANWf0zajcRcbiOXLD90ZwPUFvbcuv6Q= buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.11-20241007202033-cf42259fcbfc.1/go.mod h1:nWVKKRA29zdt4uvkjka3i/y4mkrswyWwiu0TbdX0zts= -buf.build/go/app v0.2.0 h1:NYaH13A+RzPb7M5vO8uZYZ2maBZI5+MS9A9tQm66fy8= -buf.build/go/app v0.2.0/go.mod h1:0XVOYemubVbxNXVY0DnsVgWeGkcbbAvjDa1fmhBC+Wo= -buf.build/go/bufplugin v0.9.0 h1:ktZJNP3If7ldcWVqh46XKeiYJVPxHQxCfjzVQDzZ/lo= -buf.build/go/bufplugin v0.9.0/go.mod h1:Z0CxA3sKQ6EPz/Os4kJJneeRO6CjPeidtP1ABh5jPPY= +buf.build/go/app v0.2.1-0.20260407195847-833f8f978cda h1:eysSyjrJtkxU1A/9+Kv+1Mwq9K6BYBw+STIOVsZ256Y= +buf.build/go/app v0.2.1-0.20260407195847-833f8f978cda/go.mod h1:V32mBaPWsfq6REAeZvvs/rQl7ZCl9Dn7eW1BBrmH0GQ= +buf.build/go/bufplugin v0.10.0 h1:vZBX0mq9as5UIBug8U+/DkGRaHNlM/HVOw59O8fvOIU= +buf.build/go/bufplugin v0.10.0/go.mod h1:ax7obVurKDH1I2nR4pFTS+TE6K3kZhTmwDCN2YgdV8I= buf.build/go/bufprivateusage v0.1.0 h1:SzCoCcmzS3zyXHEXHeSQhGI7OTkgtljoknLzsUz9Gg4= buf.build/go/bufprivateusage v0.1.0/go.mod h1:GlCCJ3VVF7EqqU0CoRmo1FzAwwaKymEWSr+ty69xU5w= buf.build/go/interrupt v1.1.0 h1:olBuhgv9Sav4/9pkSLoxgiOsZDgM5VhRhvRpn3DL0lE= buf.build/go/interrupt v1.1.0/go.mod h1:ql56nXPG1oHlvZa6efNC7SKAQ/tUjS6z0mhJl0gyeRM= -buf.build/go/protovalidate v1.1.3 h1:m2GVEgQWd7rk+vIoAZ+f0ygGjvQTuqPQapBBdcpWVPE= -buf.build/go/protovalidate v1.1.3/go.mod h1:9XIuohWz+kj+9JVn3WQneHA5LZP50mjvneZMnbLkiIE= -buf.build/go/protoyaml v0.6.0 h1:Nzz1lvcXF8YgNZXk+voPPwdU8FjDPTUV4ndNTXN0n2w= -buf.build/go/protoyaml v0.6.0/go.mod h1:RgUOsBu/GYKLDSIRgQXniXbNgFlGEZnQpRAUdLAFV2Q= +buf.build/go/protovalidate v1.2.0 h1:DQVrUWkmGTBij+kOYv/x2LLxwcLaGKMdzShj1/6/3H0= +buf.build/go/protovalidate v1.2.0/go.mod h1:7rYiQEhqvAipoazpVNBBH2S2f8bjG4huMVy1V2Yofn4= +buf.build/go/protoyaml v0.7.0 h1:z4oVoFicbpPefhT7WAykxUdfp0yEQlhMQ2mCZOY5V38= +buf.build/go/protoyaml v0.7.0/go.mod h1:+a0cavd0uMvirb87xdu2ZMMmjlIQoiH/N2Ich5MGSQ0= buf.build/go/spdx v0.2.0 h1:IItqM0/cMxvFJJumcBuP8NrsIzMs/UYjp/6WSpq8LTw= buf.build/go/spdx v0.2.0/go.mod h1:bXdwQFem9Si3nsbNy8aJKGPoaPi5DKwdeEp5/ArZ6w8= buf.build/go/standard v0.1.1-0.20260325175353-2b287e071df5 h1:njYKSWoLiq2i5O7y2bPPU2Yzp7iAU0Wk9KJ2OoAhNiU= buf.build/go/standard v0.1.1-0.20260325175353-2b287e071df5/go.mod h1:DQmodNT9EHX94WzUaWiZK+/4EaFa/xZTc1gzfCxZVXU= -cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= -cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= +cel.dev/expr v0.25.2 h1:K6j46C81hXtZQfuX60cVWQFBJahKSE2gfRbNuvr5bFs= +cel.dev/expr v0.25.2/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= +charm.land/lipgloss/v2 v2.0.3 h1:yM2zJ4Cf5Y51b7RHIwioil4ApI/aypFXXVHSwlM6RzU= +charm.land/lipgloss/v2 v2.0.3/go.mod h1:7myLU9iG/3xluAWzpY/fSxYYHCgoKTie7laxk6ATwXA= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -64,45 +66,61 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -connectrpc.com/connect v1.19.1 h1:R5M57z05+90EfEvCY1b7hBxDVOUl45PrtXtAV2fOC14= -connectrpc.com/connect v1.19.1/go.mod h1:tN20fjdGlewnSFeZxLKb0xwIZ6ozc3OQs2hTXy4du9w= +codeberg.org/chavacava/garif v0.2.0 h1:F0tVjhYbuOCnvNcU3YSpO6b3Waw6Bimy4K0mM8y6MfY= +codeberg.org/chavacava/garif v0.2.0/go.mod h1:P2BPbVbT4QcvLZrORc2T29szK3xEOlnl0GiPTJmEqBQ= +codeberg.org/polyfloyd/go-errorlint v1.9.0 h1:VkdEEmA1VBpH6ecQoMR4LdphVI3fA4RrCh2an7YmodI= +codeberg.org/polyfloyd/go-errorlint v1.9.0/go.mod h1:GPRRu2LzVijNn4YkrZYJfatQIdS+TrcK8rL5Xs24qw8= +connectrpc.com/connect v1.20.0 h1:6TNDAB+WeNd2uolWNlYczB5E0KNNaVMNUEx8JEUsPmQ= +connectrpc.com/connect v1.20.0/go.mod h1:A2ygJrukXwWy32vkCAAHNVguZrqZ+jeZ9rGRnGR4dN4= +connectrpc.com/grpcreflect v1.3.0 h1:Y4V+ACf8/vOb1XOc251Qun7jMB75gCUNw6llvB9csXc= +connectrpc.com/grpcreflect v1.3.0/go.mod h1:nfloOtCS8VUQOQ1+GTdFzVg2CJo4ZGaat8JIovCtDYs= connectrpc.com/otelconnect v0.9.0 h1:NggB3pzRC3pukQWaYbRHJulxuXvmCKCKkQ9hbrHAWoA= connectrpc.com/otelconnect v0.9.0/go.mod h1:AEkVLjCPXra+ObGFCOClcJkNjS7zPaQSqvO0lCyjfZc= +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= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -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.1 h1:6ZSytkFWatT8mwZlmRCHkWz1gPi+q6UBSbieji2Gj/o= -github.com/Antonboom/testifylint v1.6.1/go.mod h1:k+nEkathI2NFjKO6HvwmSrbzUcQ6FAnbZV+ZRrnXPLI= +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/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= -github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= +github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -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/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/ClickHouse/clickhouse-go-linter v1.2.0 h1:zbm174up3hTKjp0wKZVnTzRiG7tSF5XZF0FJG/MuCBI= +github.com/ClickHouse/clickhouse-go-linter v1.2.0/go.mod h1:pLorS7ffPTfuUV9M0SJgfHA/h/WQPQUk2FWG9x74cQ4= +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/Masterminds/semver/v3 v3.5.0 h1:kQceYJfbupGfZOKZQg0kou0DgAKhzDg2NZPAwZ/2OOE= +github.com/Masterminds/semver/v3 v3.5.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.5.4 h1:38QOxShO7JmMWT+eCdDMbcUgGCOeJphVkzzRgyLJgsQ= +github.com/MirrexOne/unqueryvet v1.5.4/go.mod h1:fs9Zq6eh1LRIhsDIsxf9PONVUjYdFHdtkHIgZdJnyPU= 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/agnivade/wasmbrowsertest v0.11.0 h1:Feg5lmJzfC3j9nMgOxRZdYqzYtt93MvcFG29KeRt2VI= github.com/agnivade/wasmbrowsertest v0.11.0/go.mod h1:kgT4RR8m3auEg0UdL0uOj/0hCjRt5yQQNb4kjUY5GgU= 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.17.2 h1:Rm81SCZ2mPoH+Q8ZCc/9YvzPUN/E7HgPiPJD8SLV6GI= -github.com/alecthomas/chroma/v2 v2.17.2/go.mod h1:RVX6AvYm4VfYe/zsk7mjHueLDZor3aWCNE14TFlepBk= +github.com/alecthomas/chroma/v2 v2.24.1 h1:m5ffpfZbIb++k8AqFEKy9uVgY12xIQtBsQlc6DfZJQM= +github.com/alecthomas/chroma/v2 v2.24.1/go.mod h1:l+ohZ9xRXIbGe7cIW+YZgOGbvuVLjMps/FYN/CwuabI= 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/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.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs= +github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -110,20 +128,20 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= 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/alexkohler/prealloc v1.1.0 h1:cKGRBqlXw5iyQGLYhrXrDlcHxugXpTq4tQ5c91wkf8M= +github.com/alexkohler/prealloc v1.1.0/go.mod h1:fT39Jge3bQrfA7nPMDngUfvUbQGQeJyGQnR+913SCig= +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.2.0 h1:raLem5KG7EFVb4UIDAXgrv3N2JIaffeKNtcEXkEWd/w= github.com/alingse/nilnesserr v0.2.0/go.mod h1:1xJPrXonEtX7wyTq8Dytns5P2hNzoWymVUIaKm4HNFg= github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= -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/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= -github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/ashanbrown/forbidigo/v2 v2.3.1 h1:KAZijvQ7zeIBKbhikT4jCm0TLYXC4u78bTiLh/8JROI= +github.com/ashanbrown/forbidigo/v2 v2.3.1/go.mod h1:2QDkLTzU6TV937eFROamXrW92M3paehdae4HCDCOZCM= +github.com/ashanbrown/makezero/v2 v2.2.1 h1:A7uU8dgB1PA9aelTxHMfHIQ8Qev8AB3JLxJUBUsejqM= +github.com/ashanbrown/makezero/v2 v2.2.1/go.mod h1:aEGT/9q3S8DHeE57C88z2a6xydvgx8J5hgXIGWgo0MY= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -136,45 +154,47 @@ github.com/bmatcuk/doublestar/v4 v4.10.0 h1:zU9WiOla1YA122oLM6i4EXvGW62DvKZVxIe6 github.com/bmatcuk/doublestar/v4 v4.10.0/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= 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.8.0 h1:JTkyfs4yl8SPejrCF2GdABXE+mO1WvM7iUYzRWlsxDs= +github.com/bombsimon/wsl/v5 v5.8.0/go.mod h1:AbOLsulgkqP4ZnitHf9gwPtCOGlrzkk0jb0uNxRSY0o= 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/brianvoe/gofakeit/v6 v6.28.0 h1:Xib46XXuQfmlLS2EXRuJpqcw8St6qSZz75OUo0tgAW4= github.com/brianvoe/gofakeit/v6 v6.28.0/go.mod h1:Xj58BMSnFqcn/fAQeSK+/PLtC5kSb7FJIq4JyGa8vEs= -github.com/bufbuild/buf v1.67.0 h1:gUr7fW9Vi87ir18qhF6E6fLX8nlLBi48TMIW88uv/lw= -github.com/bufbuild/buf v1.67.0/go.mod h1:HWkydCafFyJQZuxuRg6KpyvTxgNMghuMlwkxbSeJ+kQ= -github.com/bufbuild/protocompile v0.14.2-0.20260319203231-019757e4c592 h1:LP+okT4NAncx5csNnPka2j8rKcq1ekvrdQfQp3jD0TI= -github.com/bufbuild/protocompile v0.14.2-0.20260319203231-019757e4c592/go.mod h1:o4sxIWZ71DJt7/jan0/vi3XbGCQMTBk5KCo27vgT45Q= -github.com/bufbuild/protoplugin v0.0.0-20250218205857-750e09ce93e1 h1:V1xulAoqLqVg44rY97xOR+mQpD2N+GzhMHVwJ030WEU= -github.com/bufbuild/protoplugin v0.0.0-20250218205857-750e09ce93e1/go.mod h1:c5D8gWRIZ2HLWO3gXYTtUfw/hbJyD8xikv2ooPxnklQ= -github.com/butuzov/ireturn v0.4.0 h1:+s76bF/PfeKEdbG8b54aCocxXmi0wvYdOVsWxVO7n8E= -github.com/butuzov/ireturn v0.4.0/go.mod h1:ghI0FrCmap8pDWZwfPisFD1vEc56VKH4NpQUxDHta70= +github.com/bufbuild/buf v1.71.0 h1:/XLs8mFKjlM/LVbBBBQ3uSNcyEClyAV8lJiO7QR04d8= +github.com/bufbuild/buf v1.71.0/go.mod h1:fbHMfu0nEbIPQT3IG7rAfPZXoFYEfZJuqFbAXu1wnRU= +github.com/bufbuild/protocompile v0.14.2-0.20260605203730-cd7c3c124e10 h1:N0ZOKMwHpKsFhMGSxnB6JiVkM7SbH8IAKlGGO0SpQBA= +github.com/bufbuild/protocompile v0.14.2-0.20260605203730-cd7c3c124e10/go.mod h1:jPUiZUFWc8E3Kc2Y4SRlGAdjde4amGkHY0BUACNS43E= +github.com/bufbuild/protoplugin v0.0.0-20260414125817-25d1d281b46b h1:b7wvo9ZhjLzCp7tGbOUMvgtYTnd33zGSAmMxcdxMnhQ= +github.com/bufbuild/protoplugin v0.0.0-20260414125817-25d1d281b46b/go.mod h1:c5D8gWRIZ2HLWO3gXYTtUfw/hbJyD8xikv2ooPxnklQ= +github.com/butuzov/ireturn v0.4.1 h1:vWb3NO4t77iku/sjCQ/2pHTQeOmxEhjIriJqRLg1Y+I= +github.com/butuzov/ireturn v0.4.1/go.mod h1:q+DXKzTDV5guNuXLnIab9fKXizTn2miZHLhxH7V/GB4= 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.1 h1:u7Riei30bk46XsG8nknMhKLXG9BcXz3+3tl/WpKm0PQ= +github.com/catenacyber/perfsprint v0.10.1/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/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2/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/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs= -github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk= -github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= -github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= -github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE= -github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q= -github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8= -github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= -github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= -github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= -github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc= -github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww= +github.com/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.4.3 h1:QPa1IWkYI+AOB+fE+mg/5/4HRMZcaXex9t5KX76i20Q= +github.com/charmbracelet/colorprofile v0.4.3/go.mod h1:/zT4BhpD5aGFpqQQqw7a+VtHCzu+zrQtt1zhMt9mR4Q= +github.com/charmbracelet/ultraviolet v0.0.0-20251205161215-1948445e3318 h1:OqDqxQZliC7C8adA7KjelW3OjtAxREfeHkNcd66wpeI= +github.com/charmbracelet/ultraviolet v0.0.0-20251205161215-1948445e3318/go.mod h1:Y6kE2GzHfkyQQVCSL9r2hwokSrIlHGzZG+71+wDYSZI= +github.com/charmbracelet/x/ansi v0.11.7 h1:kzv1kJvjg2S3r9KHo8hDdHFQLEqn4RBCb39dAYC84jI= +github.com/charmbracelet/x/ansi v0.11.7/go.mod h1:9qGpnAVYz+8ACONkZBUWPtL7lulP9No6p1epAihUZwQ= +github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk= +github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI= +github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY= +github.com/charmbracelet/x/termios v0.1.1/go.mod h1:rB7fnv1TgOPOyyKRJ9o+AsTU/vK5WHJ2ivHeut/Pcwo= +github.com/charmbracelet/x/windows v0.2.2 h1:IofanmuvaxnKHuV04sC0eBy/smG6kIKrWG2/jYn2GuM= +github.com/charmbracelet/x/windows v0.2.2/go.mod h1:/8XtdKZzedat74NQFn0NGlGL4soHB0YQZrETF96h75k= github.com/chromedp/cdproto v0.0.0-20240801214329-3f85d328b335 h1:bATMoZLH2QGct1kzDxfmeBUQI/QhQvB0mBrOTct+YlQ= github.com/chromedp/cdproto v0.0.0-20240801214329-3f85d328b335/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs= github.com/chromedp/chromedp v0.10.0 h1:bRclRYVpMm/UVD76+1HcRW9eV3l58rFfy7AdBvKab1E= @@ -189,13 +209,15 @@ github.com/ckaznocha/intrange v0.3.1/go.mod h1:QVepyz1AkUoFQkpEqksSYpNpUo3c5W7nW github.com/cli/browser v1.3.0 h1:LejqCrpWr+1pRqmEPDGnTZOjsMe7sehifLynZJuqJpo= github.com/cli/browser v1.3.0/go.mod h1:HH8s+fOAxjhQoBUAsKuPCbqUuxZDhQ2/aD+SzsEfBTk= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8= +github.com/clipperhouse/displaywidth v0.11.0/go.mod h1:bkrFNkf81G8HyVqmKGxsPufD3JhNl3dSqnGhOoSD/o0= +github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk= +github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= -github.com/containerd/stargz-snapshotter/estargz v0.18.2 h1:yXkZFYIzz3eoLwlTUZKz2iQ4MrckBxJjkmD16ynUTrw= -github.com/containerd/stargz-snapshotter/estargz v0.18.2/go.mod h1:XyVU5tcJ3PRpkA9XS2T5us6Eg35yM0214Y+wvrZTBrY= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= @@ -203,8 +225,8 @@ github.com/creasty/defaults v1.8.0 h1:z27FJxCAa0JKt3utc0sCImAEb+spPucmKoOdLHvHYK github.com/creasty/defaults v1.8.0/go.mod h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM= 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= @@ -217,36 +239,34 @@ github.com/denis-tingaikin/go-header v0.5.0 h1:SRdnP5ZKvcO9KKRP1KJrhFR3RrlGuD+42 github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okegmwQ3UgWl4V1D8gjlY= 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.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= -github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/docker/cli v29.3.0+incompatible h1:z3iWveU7h19Pqx7alZES8j+IeFQZ1lhTwb2F+V9SVvk= -github.com/docker/cli v29.3.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= -github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker-credential-helpers v0.9.5 h1:EFNN8DHvaiK8zVqFA2DT6BjXE0GzfLOZ38ggPTKePkY= -github.com/docker/docker-credential-helpers v0.9.5/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c= -github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= -github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= +github.com/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz8= +github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/docker/cli v29.5.3+incompatible h1:nbEFfz774vBwQ5KRYv7c/AghjReqnGISvrRhzjV0evs= +github.com/docker/cli v29.5.3+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/docker-credential-helpers v0.9.8 h1:bIREROb7So6PRlq6KTtdS9MPEjC29OQRkFNlvK2OX8Q= +github.com/docker/docker-credential-helpers v0.9.8/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c= +github.com/docker/go-connections v0.7.0 h1:6SsRfJddP22WMrCkj19x9WKjEDTB+ahsdiGYf0mN39c= +github.com/docker/go-connections v0.7.0/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/ecordell/optgen v0.2.3 h1:DXuT9cYRInIJEh/dIOuLPgi7gYXrlfjzV/KsD80CXLE= -github.com/ecordell/optgen v0.2.3/go.mod h1:pqjipFkG6vAwvKgjPGWaZyqmtWAqdb2w6EcTnP+kgqQ= +github.com/ecordell/optgen v0.2.6 h1:qPglm/JyuW6vL9IYnSwgFMces2dLFCuEd2Yw6B0VRmU= +github.com/ecordell/optgen v0.2.6/go.mod h1:pqjipFkG6vAwvKgjPGWaZyqmtWAqdb2w6EcTnP+kgqQ= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= -github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= +github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds= +github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q= github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A= -github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= -github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= +github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= 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/felixge/httpsnoop v1.1.0 h1:3YtUj32ZZkqZtt3sZZsClsymw/QDuVfpNhoA31zeORc= +github.com/felixge/httpsnoop v1.1.0/go.mod h1:Zqxgdd+1Rkcz8euOqdr7lqgCRJztwr5hp9vDSi5UZCE= 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= @@ -255,10 +275,10 @@ github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwV github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= -github.com/ghostiam/protogetter v0.3.15 h1:1KF5sXel0HE48zh1/vn0Loiw25A9ApyseLzQuif1mLY= -github.com/ghostiam/protogetter v0.3.15/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.20 h1:oW7OPFit2FxZOpmMRPP9FffU4uUpfeE/rEdE1f+MzD0= +github.com/ghostiam/protogetter v0.3.20/go.mod h1:FjIu5Yfs6FT391m+Fjp3fbAYJ6rkL/J6ySpZBfnODuI= +github.com/go-critic/go-critic v0.14.3 h1:5R1qH2iFeo4I/RJU8vTezdqs08Egi4u5p6vOESA0pog= +github.com/go-critic/go-critic v0.14.3/go.mod h1:xwntfW6SYAd7h1OqDzmN6hBX/JxsEKl5up/Y2bsxgVQ= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -275,8 +295,8 @@ github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= -github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= +github.com/go-quicktest/qt v1.102.0 h1:HSQxCeh5YZH3EL3W39ixjtyaEhcWSXQHtHnMBzSs474= +github.com/go-quicktest/qt v1.102.0/go.mod h1:p4lGIVX+8Wa6ZPNDvqcxq36XpUDLh42FLetFU7odllI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= @@ -311,6 +331,8 @@ github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.4.0 h1:CTaoG1tojrh4ucGPcoJFiAQUAsEWekEWvLy7GsVNqGs= github.com/gobwas/ws v1.4.0/go.mod h1:G3gNqMNtPppf5XUz7O4shetPpcZ1VJ7zt18dlUeakrc= +github.com/godoc-lint/godoc-lint v0.11.2 h1:Bp0FkJWoSdNsBikdNgIcgtaoo+xz6I/Y9s5WSBQUeeM= +github.com/godoc-lint/godoc-lint v0.11.2/go.mod h1:iVpGdL1JCikNH2gGeAn3Hh+AgN5Gx/I/cxV+91L41jo= 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.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -343,28 +365,34 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -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/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-20260401084720-c99c5cf5c202 h1:CbTB8KpqnViI6lIXxp03Oclc4VFHi3K4BWC1TacsZ+A= +github.com/golangci/dupl v0.0.0-20260401084720-c99c5cf5c202/go.mod h1:NUw9Zr2Sy7+HxzdjIULge71wI6yEg1lWQr7Evcu8K0E= +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.1.6 h1:LXqShFfAGM5BDzEOWD2SL1IzJAgUOqES/HRBsfKjI+w= -github.com/golangci/golangci-lint/v2 v2.1.6/go.mod h1:EPj+fgv4TeeBq3TcqaKZb3vkiV5dP4hHHKhXhEhzci8= -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/golangci-lint/v2 v2.12.2 h1:7+d1uY0bq1MU2UV3R5pW5Q7QWdcoq4naMRXM+gsJKrs= +github.com/golangci/golangci-lint/v2 v2.12.2/go.mod h1:opqHHuIcTG2R+4akzWMd4o1BnD9/1LcjICWOujr91U8= +github.com/golangci/golines v0.15.0 h1:Qnph25g8Y1c5fdo1X7GaRDGgnMHgnxh4Gk4VfPTtRx0= +github.com/golangci/golines v0.15.0/go.mod h1:AZjXd23tbHMpowhtnGlj9KCNsysj72aeZVVHnVcZx10= +github.com/golangci/misspell v0.8.0 h1:qvxQhiE2/5z+BVRo1kwYA8yGz+lOlu5Jfvtx2b04Jbg= +github.com/golangci/misspell v0.8.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/rowserrcheck v0.0.0-20260419091836-c5f79b8a11ba h1:lqtcnSMDuuJdu/LrKWi5RJzpSNLOJXYe/nzQutTI5kg= +github.com/golangci/rowserrcheck v0.0.0-20260419091836-c5f79b8a11ba/go.mod h1:sCBNcpRmhJCtbFGz49+IM3ETTFf7QdJ30AeYCd43NKk= +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/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/cel-go v0.27.0 h1:e7ih85+4qVrBuqQWTW4FKSqZYokVuc3HnhH5keboFTo= -github.com/google/cel-go v0.27.0/go.mod h1:tTJ11FWqnhw5KKpnWpvW9CJC3Y9GK4EIS0WXnBbebzw= +github.com/google/cel-go v0.28.1 h1:YWIwi77J4xIsYUwAF/iIuS6haffzIHS8yWI8glSbLWM= +github.com/google/cel-go v0.28.1/go.mod h1:X0bD6iVNR8pkROSOoHVdgTkzmRcosof7WQqCD6wcMc8= github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786 h1:rcv+Ippz6RAtvaGgKxc+8FQIpxHgsF+HBzPyYL2cyVU= github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786/go.mod h1:apVn/GCasLZUVpAJ6oWAuyP7Ne7CEsQbTnc0plM3m+o= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -377,12 +405,11 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ 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.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/go-containerregistry v0.21.3 h1:Xr+yt3VvwOOn/5nJzd7UoOhwPGiPkYW0zWDLLUXqAi4= -github.com/google/go-containerregistry v0.21.3/go.mod h1:D5ZrJF1e6dMzvInpBPuMCX0FxURz7GLq2rV3Us9aPkc= +github.com/google/go-containerregistry v0.21.6 h1:T+yqQIlJXKrM98Om4DlW3GoWQAmhZuLMwoDOvVrtiUM= +github.com/google/go-containerregistry v0.21.6/go.mod h1:U7MMSBIJynke2MVQrQk19NP9k/uQsGz/h0amIFSHMbo= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -393,26 +420,25 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a h1://KbezygeMJZCSHH+HgUZiTeSoiuFspbMg1ge+eFj18= -github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= +github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 h1:z2ogiKUYzX5Is6zr/vP9vJGqPwcdqsWjOt+V8J7+bTc= +github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83/go.mod h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI= github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -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/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= @@ -421,8 +447,8 @@ github.com/hashicorp/go-immutable-radix/v2 v2.1.0/go.mod h1:hgdqLXA4f6NIjRVisM1T github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= -github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA= +github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= @@ -438,14 +464,12 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jdx/go-netrc v1.0.0 h1:QbLMLyCZGj0NA8glAhxUpf1zDg6cxnWgMBbjq40W0gQ= github.com/jdx/go-netrc v1.0.0/go.mod h1:Gh9eFQJnoTNIRHXl2j5bJXA1u84hQWJWgGh569zF3v8= -github.com/jgautheron/goconst v1.8.1 h1:PPqCYp3K/xlOj5JmIe6O1Mj6r1DbkdbLtR3AJuZo414= -github.com/jgautheron/goconst v1.8.1/go.mod h1:A0oxgBCHy55NQn6sYpO7UdnA9p+h7cPtoOZUmvNIako= +github.com/jgautheron/goconst v1.10.0 h1:Ptt+OoE4NaEWKhLrWrrN3IpZdGLiqaf7WLnEX/iv4Jw= +github.com/jgautheron/goconst v1.10.0/go.mod h1:0p+wv1lFOiUr0IlNNT1nrm6+8DB8u2sU6KHGzFRXHDc= github.com/jhump/protoreflect/v2 v2.0.0-beta.2 h1:qZU+rEZUOYTz1Bnhi3xbwn+VxdXkLVeEpAeZzVXLY88= github.com/jhump/protoreflect/v2 v2.0.0-beta.2/go.mod h1:4tnOYkB/mq7QTyS3YKtVtNrJv4Psqout8HA1U+hZtgM= -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/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/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -459,15 +483,15 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V 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/kisielk/errcheck v1.9.0 h1:9xt1zI9EBfcYBvdU1nVrzMzzUPUtPKs9bVSIM3TAb3M= -github.com/kisielk/errcheck v1.9.0/go.mod h1:kQxWMMVZgIkDq7U8xtG/n2juOjbLgZtedi0D+/VL/i8= +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/kisielk/errcheck v1.10.0 h1:Lvs/YAHP24YKg08LA8oDw2z9fJVme090RAXd90S+rrw= +github.com/kisielk/errcheck v1.10.0/go.mod h1:kQxWMMVZgIkDq7U8xtG/n2juOjbLgZtedi0D+/VL/i8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkHAIKE/contextcheck v1.1.6 h1:7HIyRcnyzxL9Lz06NGhiKvenXq7Zw6Q0UQu/ttjfJCE= github.com/kkHAIKE/contextcheck v1.1.6/go.mod h1:3dDbMRNBFaq8HFXWC1JyvDSPm43CmE6IuHam8Wr0rkg= -github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= -github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= +github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -480,69 +504,72 @@ 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.14 h1:wAkMoMeGX/kGfhQBPODT/BL8XhK23ol/nuQ3SwFaUw8= -github.com/kunwardeep/paralleltest v1.0.14/go.mod h1:di4moFqtfz3ToSKxhNjhOZL+696QtJGCFe132CbBLGk= +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/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.3 h1:Ag1aGiq2epGePuRJhez2mzOpZ8sI9Gimcb4Sb3+pk9Y= -github.com/ldez/exptostd v0.4.3/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.3 h1:pJpN0x3fMupdTf/IapYjnkhiY1nSTN+pox1/GyBRw3k= -github.com/ldez/usetesting v0.4.3/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.8.0 h1:JqIuTtgvFC2RdH1s357vrE23WJF2cpDCPFgA/TWDGpk= +github.com/ldez/gomoddirectives v0.8.0/go.mod h1:jutzamvZR4XYJLr0d5Honycp4Gy6GEg2mS9+2YX3F1Q= +github.com/ldez/grignotin v0.10.1 h1:keYi9rYsgbvqAZGI1liek5c+jv9UUjbvdj3Tbn5fn4o= +github.com/ldez/grignotin v0.10.1/go.mod h1:UlDbXFCARrXbWGNGP3S5vsysNXAPhnSuBufpTEbwOas= +github.com/ldez/structtags v0.6.1 h1:bUooFLbXx41tW8SvkfwfFkkjPYvFFs59AAMgVg6DUBk= +github.com/ldez/structtags v0.6.1/go.mod h1:YDxVSgDy/MON6ariaxLF2X09bh19qL7MtGBN5MrvbdY= +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/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80 h1:6Yzfa6GP0rIo/kULo2bwGEkFvCePZ3qHDDTC3/J9Swo= github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs= github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY= github.com/leonklingele/grouper v1.1.2/go.mod h1:6D0M/HVkhs2yRKRFZUoGjeDy7EZTfFBE9gl4kjmIGkA= -github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= -github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4 h1:sIXJOMrYnQZJu7OB7ANSF4MYri2fTEGIsRLz6LwI4xE= -github.com/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= +github.com/lucasb-eyer/go-colorful v1.4.0 h1:UtrWVfLdarDgc44HcS7pYloGHJUjHV/4FwW4TvVgFr4= +github.com/lucasb-eyer/go-colorful v1.4.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lyft/protoc-gen-star/v2 v2.0.4 h1:JDlNKttNIRd68AAIychs0AqEpO8/I/WYi01OQ7Raw6Q= +github.com/lyft/protoc-gen-star/v2 v2.0.4/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= github.com/macabu/inamedparam v0.2.0 h1:VyPYpOc10nkhI2qeNUdh3Zket4fcZjEWe35poddBCpE= github.com/macabu/inamedparam v0.2.0/go.mod h1:+Pee9/YfGe5LJ62pYXqB89lJ+0k5bsR8Wgz/C0Zlq3U= -github.com/magefile/mage v1.17.0 h1:dS4tkq997Ism03akafC8509iqDjeE7TNTexI25Y7sXM= -github.com/magefile/mage v1.17.0/go.mod h1:Yj51kqllmsgFpvvSzgrZPK9WtluG3kUhFaBUVLo4feA= +github.com/magefile/mage v1.17.2 h1:fyXVu1eadI8Ap1HCCNgEhJ5McIWiYhLR8uol64ZZc40= +github.com/magefile/mage v1.17.2/go.mod h1:Yj51kqllmsgFpvvSzgrZPK9WtluG3kUhFaBUVLo4feA= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/manuelarte/funcorder v0.2.1 h1:7QJsw3qhljoZ5rH0xapIvjw31EcQeFbF31/7kQ/xS34= -github.com/manuelarte/funcorder v0.2.1/go.mod h1:BQQ0yW57+PF9ZpjpeJDKOffEsQbxDFKW8F8zSMe/Zd0= -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.6.0 h1:0hBngc4fa1IgNiI65A7sFGkMvoMCc878RjqB5V7rWP0= +github.com/manuelarte/funcorder v0.6.0/go.mod h1:id3NDhXdQBmeqXH7eVC6Z89xS6JxvZ8kF9xUxpArU/g= +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= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= -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/mattn/go-colorable v0.1.15 h1:+u9SLTRGnXv73cEsnsmoZBom+dMU88B2M0aDcWy0/jY= +github.com/mattn/go-colorable v0.1.15/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= +github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= +github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw= +github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgechev/revive v1.9.0 h1:8LaA62XIKrb8lM6VsBSQ92slt/o92z5+hTw3CmrvSrM= -github.com/mgechev/revive v1.9.0/go.mod h1:LAPq3+MgOf7GcL5PlWIkHb0PT7XH4NuC2LdWymhb9Mo= +github.com/mgechev/revive v1.15.0 h1:vJ0HzSBzfNyPbHKolgiFjHxLek9KUijhqh42yGoqZ8Q= +github.com/mgechev/revive v1.15.0/go.mod h1:LlAKO3QQe9OJ0pVZzI2GPa8CbXGZ/9lNpCGvK4T/a8A= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/moby/api v1.54.0 h1:7kbUgyiKcoBhm0UrWbdrMs7RX8dnwzURKVbZGy2GnL0= -github.com/moby/moby/api v1.54.0/go.mod h1:8mb+ReTlisw4pS6BRzCMts5M49W5M7bKt1cJy/YbAqc= -github.com/moby/moby/client v0.3.0 h1:UUGL5okry+Aomj3WhGt9Aigl3ZOxZGqR7XPo+RLPlKs= -github.com/moby/moby/client v0.3.0/go.mod h1:HJgFbJRvogDQjbM8fqc1MCEm4mIAGMLjXbgwoZp6jCQ= +github.com/moby/moby/api v1.54.2 h1:wiat9QAhnDQjA7wk1kh/TqHz2I1uUA7M7t9SAl/JNXg= +github.com/moby/moby/api v1.54.2/go.mod h1:+RQ6wluLwtYaTd1WnPLykIDPekkuyD/ROWQClE83pzs= +github.com/moby/moby/client v0.4.1 h1:DMQgisVoMkmMs7fp3ROSdiBnoAu8+vo3GggFl06M/wY= +github.com/moby/moby/client v0.4.1/go.mod h1:z52C9O2POPOsnxZAy//WtKcQ32P+jT/NGeXu/7nfjGQ= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= @@ -550,8 +577,8 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/moricho/tparallel v0.3.2 h1:odr8aZVFA3NZrNybggMkYO3rgPRcqjeQUlBBFVxKHTI= github.com/moricho/tparallel v0.3.2/go.mod h1:OQ+K3b4Ln3l2TZveGCywybl68glfLEwFGqvnjok8b+U= -github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= -github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= @@ -560,14 +587,12 @@ 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/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/v2 v2.23.3 h1:edHxnszytJ4lD9D5Jjc4tiDkPBZ3siDeJJkUZJJVkp0= -github.com/onsi/ginkgo/v2 v2.23.3/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= -github.com/onsi/gomega v1.36.3 h1:hID7cr8t3Wp26+cYnfcjR6HpJ00fdogN6dqZ1t6IylU= -github.com/onsi/gomega v1.36.3/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= +github.com/nunnatsa/ginkgolinter v0.23.0 h1:x3o4DGYOWbBMP/VdNQKgSj+25aJKx2Pe6lHr8gBcgf8= +github.com/nunnatsa/ginkgolinter v0.23.0/go.mod h1:9qN1+0akwXEccwV1CAcCDfcoBlWXHB+ML9884pL4SZ4= +github.com/onsi/ginkgo/v2 v2.28.2 h1:DTrMfpqxiNUyQ3Y0zhn1n3cOO2euFgQPYIpkWwxVFps= +github.com/onsi/ginkgo/v2 v2.28.2/go.mod h1:CLtbVInNckU3/+gC8LzkGUb9oF+e8W8TdUsxPwvdOgE= +github.com/onsi/gomega v1.39.1 h1:1IJLAad4zjPn2PsnhH70V4DKRFlrCzGBNrNaru+Vf28= +github.com/onsi/gomega v1.39.1/go.mod h1:hL6yVALoTOxeWudERyfppUcZXjMwIMLnuSfruD2lcfg= 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.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= @@ -583,10 +608,10 @@ github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT9 github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= 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.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= -github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= -github.com/petermattis/goid v0.0.0-20260226131333-17d1149c6ac6 h1:rh2lKw/P/EqHa724vYH2+VVQ1YnW4u6EOXl0PMAovZE= -github.com/petermattis/goid v0.0.0-20260226131333-17d1149c6ac6/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/pelletier/go-toml/v2 v2.3.1 h1:MYEvvGnQjeNkRF1qUuGolNtNExTDwct51yp7olPtrEc= +github.com/pelletier/go-toml/v2 v2.3.1/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81 h1:WDsQxOJDy0N1VRAjXLpi8sCEZRSGarLWQevDxpTBRrM= +github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -595,10 +620,6 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240917153116-6f2963f01587/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.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/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= @@ -623,23 +644,24 @@ github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9 h1:arwj11zP0yJIxIRiDn22E0H8PxfF7TsTrc2wIPFIsf4= github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9/go.mod h1:SKZx6stCn03JN3BOWTwvVIO2ajMkb/zQdTceXYhKw/4= -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= github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= +github.com/quic-go/go-ossfuzz-seeds v0.1.0 h1:APacT+iIaNF6fd8AGEiN3bT/Jtkd2jz4v4TzM7MFjy0= +github.com/quic-go/go-ossfuzz-seeds v0.1.0/go.mod h1:3IOHRbJIc+L6YKMwfDtJAM9Vj9k0YY4muhuyUYk5tbk= github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= -github.com/quic-go/quic-go v0.59.1 h1:0Gmua0HW1Tv7ANR7hUYwRyD0MG5OJfgvYSZasGZzBic= -github.com/quic-go/quic-go v0.59.1/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU= +github.com/quic-go/quic-go v0.60.0 h1:xcQioE8OM66UQLeUMHltK1CCcOu3JbVB4JAQdDQSB+0= +github.com/quic-go/quic-go v0.60.0/go.mod h1:wpKpjmPpftl30sL6pFh7REVpjbcCVy4zt2vDyK1TuJk= github.com/raeperd/recvcheck v0.2.0 h1:GnU+NsbiCqdC2XX5+vMZzP+jAJC5fht7rcVTAhX74UI= github.com/raeperd/recvcheck v0.2.0/go.mod h1:n04eYkwIR0JbgD73wT8wL4JjPC3wm0nFtzBnWNocnYU= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rodaine/protogofakeit v0.1.1 h1:ZKouljuRM3A+TArppfBqnH8tGZHOwM/pjvtXe9DaXH8= @@ -653,26 +675,26 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryancurrah/gomodguard v1.4.1 h1:eWC8eUMNZ/wM/PWuZBv7JxxqT5fiIKSIyTvjb7Elr+g= github.com/ryancurrah/gomodguard v1.4.1/go.mod h1:qnMJwV1hX9m+YJseXEBhd2s90+1Xn6x9dLz11ualI1I= -github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9fJfSfdyCU= -github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ= +github.com/ryancurrah/gomodguard/v2 v2.1.3 h1:E7sz3PJwE9Ba1reVxSpF6XLCPJZ74Kfw/LabTNM4GIA= +github.com/ryancurrah/gomodguard/v2 v2.1.3/go.mod h1:CQicdLGatWMxLX53JzoBjYlsNZhHbmLv2AVa0s2aivU= +github.com/ryanrolds/sqlclosecheck v0.6.0 h1:pEyL9okISdg1F1SEpJNlrEotkTGerv5BMk7U4AG0eVg= +github.com/ryanrolds/sqlclosecheck v0.6.0/go.mod h1:xyX16hsDaCMXHrMJ3JMzGf5OpDfHTOTTQrT7HOFUmeU= 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/securego/gosec/v2 v2.22.3 h1:mRrCNmRF2NgZp4RJ8oJ6yPJ7G4x6OCiAXHd8x4trLRc= -github.com/securego/gosec/v2 v2.22.3/go.mod h1:42M9Xs0v1WseinaB/BmNGO8AVqG8vRfhC2686ACY48k= +github.com/sashamelentyev/usestdlibvars v1.29.0 h1:8J0MoRrw4/NAXtjQqTHrbW9NN+3iMf7Knkq057v4XOQ= +github.com/sashamelentyev/usestdlibvars v1.29.0/go.mod h1:8PpnjHMk5VdeWlVb4wCdrB8PNbLqZ3wBZTZWkrpZZL8= +github.com/securego/gosec/v2 v2.26.1 h1:gdkttGhQFVehqRJ8grKH4DrpqM/QlPKNHBnl8QgcEC4= +github.com/securego/gosec/v2 v2.26.1/go.mod h1:57UW4p0uoP3kxoTkhoo3axLdVAi+OWrLg/Ax/kdqtPE= github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0= github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/segmentio/encoding v0.5.4 h1:OW1VRern8Nw6ITAtwSZ7Idrl3MXCFwXHPgqESYfvNt0= github.com/segmentio/encoding v0.5.4/go.mod h1:HS1ZKa3kSN32ZHVZ7ZLPLXWvOVIiZtyJnO1gPH1sKt0= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= @@ -680,12 +702,12 @@ github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= 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/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.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= -github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= +github.com/sonatard/noctx v0.5.1 h1:wklWg9c9ZYugOAk7qG4yP4PBrlQsmSLPTvW1K4PRQMs= +github.com/sonatard/noctx v0.5.1/go.mod h1:64XdbzFb18XL4LporKXp8poqZtPKbCrqQ402CV+kJas= +github.com/sourcegraph/go-diff v0.8.0 h1:ipIyu4cTsLbIrln4l0qtHA3r0a7gyK4ntKjtQytHhvY= +github.com/sourcegraph/go-diff v0.8.0/go.mod h1:hWlcO7Al+UZStZAP8rBumHpCK5ZHQ5BXsMls8p4+F5E= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= 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.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= @@ -700,43 +722,35 @@ 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= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= -github.com/stbenjam/no-sprintf-host-port v0.2.0 h1:i8pxvGrt1+4G0czLr/WnmyH7zbZ8Bg8etvARQ1rpyl4= -github.com/stbenjam/no-sprintf-host-port v0.2.0/go.mod h1:eL0bQ9PasS0hsyTyfTjjG+E80QIyPnBVQbYZyv20Jfk= +github.com/stbenjam/no-sprintf-host-port v0.3.1 h1:AyX7+dxI4IdLBPtDbsGAyqiTSLpCP9hWRrXQDU4Cm/g= +github.com/stbenjam/no-sprintf-host-port v0.3.1/go.mod h1:ODbZesTCHMVKthBHskvUUexdcNHAQRXk9NpSsL8p/HQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 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.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= 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.1 h1:PZnjCol4+FqaEzvZg5+O8IY2P3hfY9JzRBNPv1pEDS4= -github.com/tetafro/godot v1.5.1/go.mod h1:cCdPtEndkmqqrhiCfkmxDodMQJ/f3L1BCNskCUZdTwk= -github.com/tetratelabs/wazero v1.11.0 h1:+gKemEuKCTevU4d7ZTzlsvgd1uaToIDtlQlmNbwqYhA= -github.com/tetratelabs/wazero v1.11.0/go.mod h1:eV28rsN8Q+xwjogd7f4/Pp4xFxO7uOGbLcD/LzB1wiU= +github.com/tetafro/godot v1.5.6 h1:IEkrFCwXaYHlOn4mGzGS3F3dkP6m9t0jpwqBFPIkKiA= +github.com/tetafro/godot v1.5.6/go.mod h1:eOkMrVQurDui411nBY2FA05EYH01r14LuWY/NrVDVcU= +github.com/tetratelabs/wazero v1.12.0 h1:DuWcpNu/FzgEXgGBDp8J1Spc+CWOvvtvVyjKlaZopYU= +github.com/tetratelabs/wazero v1.12.0/go.mod h1:LvKtzl2RqO4gyF27BiXU+nKAjcV8f38U+kP/q2vgxh0= github.com/tidwall/btree v1.8.1 h1:27ehoXvm5AG/g+1VxLS1SD3vRhp/H7LuEfwNvddEdmA= github.com/tidwall/btree v1.8.1/go.mod h1:jBbTdUWhSZClZWoDg54VnvV7/54modSOzDN7VXftj1A= -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/timakin/bodyclose v0.0.0-20260129054331-73d1f95b84b4 h1:SiHe5XLTn9sFWJ5pBwJ5FN/4j34q9ZlOAD//kMoMYp0= +github.com/timakin/bodyclose v0.0.0-20260129054331-73d1f95b84b4/go.mod h1:sDHLK7rb/59v/ZxZ7KtymgcoxuUMxjXq8gtu9VMOK8M= 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/tomarrell/wrapcheck/v2 v2.12.0 h1:H/qQ1aNWz/eeIhxKAFvkfIA+N7YDvq6TWVFL27Of9is= +github.com/tomarrell/wrapcheck/v2 v2.12.0/go.mod h1:AQhQuZd0p7b6rfW+vUwHm5OMCGgp63moQ9Qr/0BpIWo= 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/twitchyliquid64/golang-asm v0.0.0-20190126203739-365674df15fc h1:RTUQlKzoZZVG3umWNzOYeFecQLIh+dbxXvJp1zPQJTI= @@ -745,12 +759,10 @@ github.com/ultraware/funlen v0.2.0 h1:gCHmCn+d2/1SemTdYMiKLAHFYxTYz7z9VIDRaTGyLk github.com/ultraware/funlen v0.2.0/go.mod h1:ZE0q4TsJ8T1SQcjmkhN/w+MceuatI6pBFSxxyteHIJA= github.com/ultraware/whitespace v0.2.0 h1:TYowo2m9Nfj1baEQBjuHzvMRbp19i+RCcRYrSWoFa+g= 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/vbatts/tar-split v0.12.2 h1:w/Y6tjxpeiFMR47yzZPlPj/FcPLpXbTUi/9H7d3CPa4= -github.com/vbatts/tar-split v0.12.2/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= +github.com/uudashr/gocognit v1.2.1 h1:CSJynt5txTnORn/DkhiB4mZjwPuifyASC8/6Q0I/QS4= +github.com/uudashr/gocognit v1.2.1/go.mod h1:acaubQc6xYlXFEMb9nWX2dYBzJ/bIjEkc1zzvyIZg5Q= +github.com/uudashr/iface v1.4.2 h1:06Vq5RKVYThBsj0Bnw4oasMjD1r+7CE/bcKOA8dVSvg= +github.com/uudashr/iface v1.4.2/go.mod h1:pbeBPlbuU2qkNDn0mmfrxP2X+wjPMIQAy+r1MBXSXtg= github.com/xen0n/gosmopolitan v1.3.0 h1:zAZI1zefvo7gcpbCOrPSHJZJYA9ZgLfJqtKzZ5pHqQM= github.com/xen0n/gosmopolitan v1.3.0/go.mod h1:rckfr5T6o4lBtM1ga7mLGKZmLxswUoH1zxHgNXOsEt4= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= @@ -765,19 +777,20 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 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.1 h1:lw2sJyu7S1X8lc8zWUAdH42y+afdcCnHhWpnkWvd6vU= -go-simpler.org/musttag v0.13.1/go.mod h1:8r450ehpMLQgvpb6sg+hV5Ur47eH6olp/3yEanfG97k= -go-simpler.org/sloglint v0.11.0 h1:JlR1X4jkbeaffiyjLtymeqmGDKBDO1ikC6rjiuFAOco= -go-simpler.org/sloglint v0.11.0/go.mod h1:CFDO8R1i77dlciGfPEPvYke2ZMx4eyGiEIWkyeW2Pvw= -go.augendre.info/fatcontext v0.8.0 h1:2dfk6CQbDGeu1YocF59Za5Pia7ULeAM6friJ3LP7lmk= -go.augendre.info/fatcontext v0.8.0/go.mod h1:oVJfMgwngMsHO+KB2MdgzcO+RvtNdiCEOlWvSFtax/s= +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.12.0 h1:UzWDlLWNE5FLqsvyq3tWYHuQMbqrervOhT8qPl4Mmw4= +go-simpler.org/sloglint v0.12.0/go.mod h1:jBjjC2bm8rYrs88oTRlFX497kWjJsyZWYoNaXkGRI6I= +go.augendre.info/arangolint v0.4.0 h1:xSCZjRoS93nXazBSg5d0OGCi9APPLNMmmLrC995tR50= +go.augendre.info/arangolint v0.4.0/go.mod h1:l+f/b4plABuFISuKnTGD4RioXiCCgghv2xqst/xOvAA= +go.augendre.info/fatcontext v0.9.0 h1:Gt5jGD4Zcj8CDMVzjOJITlSb9cEch54hjRRlN3qDojE= +go.augendre.info/fatcontext v0.9.0/go.mod h1:L94brOAT1OOUNue6ph/2HnwxoNlds9aXDF2FcUntbNw= go.lsp.dev/jsonrpc2 v0.10.0 h1:Pr/YcXJoEOTMc/b6OTmcR1DPJ3mSWl/SWiU1Cct6VmI= go.lsp.dev/jsonrpc2 v0.10.0/go.mod h1:fmEzIdXPi/rf6d4uFcayi8HpFP1nBF99ERP1htC72Ac= go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 h1:hCzQgh6UcwbKgNSRurYWSqh8MufqRRPODRBblutn4TE= @@ -793,28 +806,26 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= -go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= -go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= -go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= -go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= -go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo= -go.opentelemetry.io/otel/sdk v1.42.0/go.mod h1:rGHCAxd9DAph0joO4W6OPwxjNTYWghRWmkHuGbayMts= -go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9RKCAZ3YGuA= -go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc= -go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= -go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= -go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= -go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI= +go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= +go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= +go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= +go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= +go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58= +go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0= +go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI= +go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA= +go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk= +go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= -go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.uber.org/zap v1.28.0 h1:IZzaP1Fv73/T/pBMLk4VutPl36uNC+OSUh3JLG3FIjo= +go.uber.org/zap v1.28.0/go.mod h1:rDLpOi171uODNm/mxFcuYWxDsqWSAVkFdX4XojSKg/Q= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -824,10 +835,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= -golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -838,12 +847,12 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= +golang.org/x/exp v0.0.0-20260611194520-c48552f49976 h1:X8Hz2ImujgbmetVuW+w2YkyZChE3cBpZi2P158rTG9M= +golang.org/x/exp v0.0.0-20260611194520-c48552f49976/go.mod h1:vnf4pv9iKZXY58sQE1L86zmNWJ4159e1RkcWiLCkeEY= 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-20260209203927-2842357ff358 h1:qWFG1Dj7TBjOjOvhEOkmyGPVoquqUKnIU0lEVLp8xyk= +golang.org/x/exp/typeparams v0.0.0-20260209203927-2842357ff358/go.mod h1:4Mzdyp/6jzw9auFDJ3OMF5qksa7UvPnzKqTVGcb04ms= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -865,16 +874,11 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB 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.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -905,18 +909,12 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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= -golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= -golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= +golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= +golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -936,10 +934,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -975,9 +971,7 @@ golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -986,27 +980,18 @@ golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/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= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa h1:efT73AJZfAAUV7SOip6pWGkwJDzIGiKBZGVzHYa+ve4= -golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa/go.mod h1:kHjTxDEnAu6/Nl9lDkzjWpR+bmKfxeiRuSDlsMb70gE= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/telemetry v0.0.0-20260611141451-d61e87d5f4a3 h1:npLQMrOn2MsmuA1yJESQ+woxUfrPCRTSjODXQu2ltow= +golang.org/x/telemetry v0.0.0-20260611141451-d61e87d5f4a3/go.mod h1:3AWMyWHS+caVoiEXpiq6+tzKA40J4vQT3MYr80ZtQpc= 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= -golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= -golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= +golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= +golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1014,13 +999,9 @@ 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.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1056,7 +1037,6 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -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-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -1066,28 +1046,20 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/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.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= -golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= +golang.org/x/tools v0.46.0 h1:7jTurBkPZu4moS/Uy4OQT1M+QBlsj3wejyZwsT8Z7rk= +golang.org/x/tools v0.46.0/go.mod h1:FrD85F8l+NWL+9XWBSyVSHO6Ne4jutsfIFba7AWQ5Ys= golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM= golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8= -golang.org/x/vuln v1.1.4 h1:Ju8QsuyhX3Hk8ma3CesTbO8vfJD9EvUBgHvkxHBzj0I= -golang.org/x/vuln v1.1.4/go.mod h1:F+45wmU18ym/ca5PLTPLsSzr2KppzswxPP603ldA67s= +golang.org/x/vuln v1.4.0 h1:FpmTZiV4PyqY3lFfuCkz1JftEXb/+8M2NEkjJM5TF4g= +golang.org/x/vuln v1.4.0/go.mod h1:FJ7XyKs83nAdxQ7PMsia2PoynwZMJ/QajXVMBBIgFe8= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1143,10 +1115,10 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto/googleapis/api v0.0.0-20260319201613-d00831a3d3e7 h1:41r6JMbpzBMen0R/4TZeeAmGXSJC7DftGINUodzTkPI= -google.golang.org/genproto/googleapis/api v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:EIQZ5bFCfRQDV4MhRle7+OgjNtZ6P1PiZBgAKuxXu/Y= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7 h1:ndE4FoJqsIceKP2oYSnUZqhTdYufCYYkqwtFzfrhI7w= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto/googleapis/api v0.0.0-20260610212136-7ab31c22f7ad h1:3iLyITS/sySRwbUKoC7ogfj2Yr1Cjs0pfaRKj5U5HEw= +google.golang.org/genproto/googleapis/api v0.0.0-20260610212136-7ab31c22f7ad/go.mod h1:KdNqO+rCIWgFumrNBSEDlDNrkrQnpkax7Tv1WxNY8V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260610212136-7ab31c22f7ad h1:45WmJvIV6C2+O/jjLkPUH+F3aOj/1miDoU2DD0+NWbg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260610212136-7ab31c22f7ad/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1159,10 +1131,10 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= +google.golang.org/grpc v1.81.0 h1:W3G9N3KQf3BU+YuCtGKJk0CmxQNbAISICD/9AORxLIw= +google.golang.org/grpc v1.81.0/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.2 h1:rgSNvqscFZ1JgV/4wH5GOsZFSFkR2Eua9As3KIr2LlM= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.2/go.mod h1:iMEtFwDlAhjDU9L5mY6U1XLwlIId/G3h+QcBHDIvrJ8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1193,7 +1165,6 @@ gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= @@ -1205,12 +1176,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.6.1 h1:R094WgE8K4JirYjBaOpz/AvTyUu/3wbmAoskKN/pxTI= -honnef.co/go/tools v0.6.1/go.mod h1:3puzxxljPCe8RGJX7BIy1plGbxEOZni5mR2aXe3/uk4= -mvdan.cc/gofumpt v0.9.2 h1:zsEMWL8SVKGHNztrx6uZrXdp7AX8r421Vvp23sz7ik4= -mvdan.cc/gofumpt v0.9.2/go.mod h1:iB7Hn+ai8lPvofHd9ZFGVg2GOr8sBUw1QUWjNbmIL/s= -mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4 h1:WjUu4yQoT5BHT1w8Zu56SP8367OuBV5jvo+4Ulppyf8= -mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4/go.mod h1:rthT7OuvRbaGcd5ginj6dA2oLE7YNlta9qhBNNdCaLE= +honnef.co/go/tools v0.7.0 h1:w6WUp1VbkqPEgLz4rkBzH/CSU6HkoqNLp6GstyTx3lU= +honnef.co/go/tools v0.7.0/go.mod h1:pm29oPxeP3P82ISxZDgIYeOaf9ta6Pi0EWvCFoLG2vc= +mvdan.cc/gofumpt v0.10.0 h1:yGGpRS2pBN2OQIi7b21IXknJna7faPkFaVfHLrN6Euo= +mvdan.cc/gofumpt v0.10.0/go.mod h1:sU2ElXHzOEmvoPqfutYG7uunlueR4K2T1JFml40SzP4= +mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15 h1:ssMzja7PDPJV8FStj7hq9IKiuiKhgz9ErWw+m68e7DI= +mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15/go.mod h1:4M5MMXl2kW6fivUT6yRGpLLPNfuGtU2Z0cPvFquGDYU= mvdan.cc/xurls/v2 v2.6.0 h1:3NTZpeTxYVWNSokW3MKeyVkz/j7uYXYiMtXRUfmjbgI= mvdan.cc/xurls/v2 v2.6.0/go.mod h1:bCvEZ1XvdA6wDnxY7jPPjEmigDtvtvPXAD/Exa9IMSk= pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= diff --git a/magefiles/lint.go b/magefiles/lint.go index a15692ab23..4fa282699e 100644 --- a/magefiles/lint.go +++ b/magefiles/lint.go @@ -85,7 +85,8 @@ func (Lint) Golangcilint() error { // Analyzers Run all analyzers func (Lint) Analyzers() error { fmt.Println("running analyzers") - return RunSh("go", WithDir("tools/analyzers"), WithV())("run", "./cmd/analyzers/main.go", + return RunSh("go", WithDir("tools/analyzers"), WithV())( + "run", "./cmd/analyzers/main.go", "-nilvaluecheck.skip-pkg=github.com/authzed/spicedb/pkg/proto/dispatch/v1", "-nilvaluecheck.disallowed-nil-return-type-paths=*github.com/authzed/spicedb/pkg/proto/dispatch/v1.DispatchCheckResponse,*github.com/authzed/spicedb/pkg/proto/dispatch/v1.DispatchExpandResponse,*github.com/authzed/spicedb/pkg/proto/dispatch/v1.DispatchLookupResponse", "-exprstatementcheck.disallowed-expr-statement-types=*github.com/rs/zerolog.Event:MarshalZerologObject:missing Send or Msg on zerolog log Event", @@ -106,7 +107,7 @@ func (Lint) Analyzers() error { // Vulncheck Run vulncheck func (Lint) Vulncheck() error { fmt.Println("running vulncheck") - return buildAndRunTool("magefiles", "golang.org/x/vuln/cmd/govulncheck", "-show", "verbose", "./...") + return buildAndRunTool("magefiles", "golang.org/x/vuln/cmd/govulncheck", "./...") } // BufFormat runs buf format command diff --git a/pkg/benchmarks/check_wide_direct.go b/pkg/benchmarks/check_wide_direct.go index 3518454cea..820493e583 100644 --- a/pkg/benchmarks/check_wide_direct.go +++ b/pkg/benchmarks/check_wide_direct.go @@ -44,7 +44,8 @@ func setupCheckWideDirect(ctx context.Context, ds datastore.Datastore) (*QuerySe relationships := make([]tuple.Relationship, 0, numUsers+1) for i := 0; i < numUsers; i++ { relationships = append(relationships, tuple.MustParse( - fmt.Sprintf("resource:someresource#viewer@user:user-%d", i))) + fmt.Sprintf("resource:someresource#viewer@user:user-%d", i), + )) } relationships = append(relationships, tuple.MustParse("resource:someresource#viewer@user:tom")) diff --git a/pkg/benchmarks/check_wide_groups.go b/pkg/benchmarks/check_wide_groups.go index b247eb7fb9..8a3452c89c 100644 --- a/pkg/benchmarks/check_wide_groups.go +++ b/pkg/benchmarks/check_wide_groups.go @@ -62,14 +62,16 @@ func setupCheckWideGroups(ctx context.Context, ds datastore.Datastore) (*QuerySe for y := 1; y <= 9; y++ { subgroup := fmt.Sprintf("eng-%d%d", x, y) relationships = append(relationships, tuple.MustParse( - fmt.Sprintf("group:eng#member@group:%s#member", subgroup))) + fmt.Sprintf("group:eng#member@group:%s#member", subgroup), + )) } } // Each eng-N has one child eng-N-1 for i := 1; i <= 99; i++ { relationships = append(relationships, tuple.MustParse( - fmt.Sprintf("group:eng-%d#member@group:eng-%d-1#member", i, i))) + fmt.Sprintf("group:eng-%d#member@group:eng-%d-1#member", i, i), + )) } // user:tom is at the deepest leaf diff --git a/pkg/benchmarks/deep_arrow.go b/pkg/benchmarks/deep_arrow.go index 397192b893..d2b417bd0e 100644 --- a/pkg/benchmarks/deep_arrow.go +++ b/pkg/benchmarks/deep_arrow.go @@ -46,7 +46,8 @@ func setupDeepArrow(ctx context.Context, ds datastore.Datastore) (*QuerySets, er relationships = append(relationships, tuple.MustParse("document:target#parent@document:1")) for i := 1; i <= 30; i++ { relationships = append(relationships, tuple.MustParse( - fmt.Sprintf("document:%d#parent@document:%d", i, i+1))) + fmt.Sprintf("document:%d#parent@document:%d", i, i+1), + )) } relationships = append(relationships, tuple.MustParse("document:29#view@user:slow")) diff --git a/pkg/benchmarks/double_wide_arrow.go b/pkg/benchmarks/double_wide_arrow.go index 2eaf898965..8d603b39e6 100644 --- a/pkg/benchmarks/double_wide_arrow.go +++ b/pkg/benchmarks/double_wide_arrow.go @@ -76,7 +76,8 @@ func setupDoubleWideArrow(ctx context.Context, ds datastore.Datastore) (*QuerySe for i := 0; i < orgsPerFile; i++ { orgID := (i * step) % numOrgs relationships = append(relationships, tuple.MustParse( - fmt.Sprintf("file:file%d#org@org:org%d", fileID, orgID))) + fmt.Sprintf("file:file%d#org@org:org%d", fileID, orgID), + )) } } @@ -85,7 +86,8 @@ func setupDoubleWideArrow(ctx context.Context, ds datastore.Datastore) (*QuerySe for i := 0; i < groupsPerOrg; i++ { groupID := (i * step) % numGroups relationships = append(relationships, tuple.MustParse( - fmt.Sprintf("org:org%d#group@group:group%d", orgID, groupID))) + fmt.Sprintf("org:org%d#group@group:group%d", orgID, groupID), + )) } } @@ -94,7 +96,8 @@ func setupDoubleWideArrow(ctx context.Context, ds datastore.Datastore) (*QuerySe for i := 0; i < usersPerGroup; i++ { userID := (i * step) % numUsers relationships = append(relationships, tuple.MustParse( - fmt.Sprintf("group:group%d#member@user:user%d", groupID, userID))) + fmt.Sprintf("group:group%d#member@user:user%d", groupID, userID), + )) } } diff --git a/pkg/benchmarks/lookup_intersection.go b/pkg/benchmarks/lookup_intersection.go index 4cdcd5b9f8..ffb8f52275 100644 --- a/pkg/benchmarks/lookup_intersection.go +++ b/pkg/benchmarks/lookup_intersection.go @@ -65,7 +65,8 @@ func setupLookupIntersection(ctx context.Context, ds datastore.Datastore) (*Quer relationships = append(relationships, tuple.MustParse("organization:org1#reader@user:tom")) for i := 1; i <= numResources; i++ { - relationships = append(relationships, + relationships = append( + relationships, tuple.MustParse(fmt.Sprintf("resource:resource%d#viewer@user:tom", i)), tuple.MustParse(fmt.Sprintf("resource:resource%d#organization@organization:org1", i)), ) diff --git a/pkg/benchmarks/wide_arrow.go b/pkg/benchmarks/wide_arrow.go index 958dbbc4f7..dcb48f120a 100644 --- a/pkg/benchmarks/wide_arrow.go +++ b/pkg/benchmarks/wide_arrow.go @@ -62,7 +62,8 @@ func setupWideArrow(ctx context.Context, ds datastore.Datastore) (*QuerySets, er for i := 0; i < groupsPerFile; i++ { groupID := (i * step) % numGroups relationships = append(relationships, tuple.MustParse( - fmt.Sprintf("file:file%d#group@group:group%d", fileID, groupID))) + fmt.Sprintf("file:file%d#group@group:group%d", fileID, groupID), + )) } } @@ -71,7 +72,8 @@ func setupWideArrow(ctx context.Context, ds datastore.Datastore) (*QuerySets, er for i := 0; i < usersPerGroup; i++ { userID := (i * step) % numUsers relationships = append(relationships, tuple.MustParse( - fmt.Sprintf("group:group%d#member@user:user%d", groupID, userID))) + fmt.Sprintf("group:group%d#member@user:user%d", groupID, userID), + )) } } diff --git a/pkg/benchmarks/wide_groups.go b/pkg/benchmarks/wide_groups.go index 905887a35d..ee564b6abf 100644 --- a/pkg/benchmarks/wide_groups.go +++ b/pkg/benchmarks/wide_groups.go @@ -58,7 +58,8 @@ func setupWideGroups(ctx context.Context, ds datastore.Datastore) (*QuerySets, e var relationships []tuple.Relationship // Core chain: first -> second -> third -> resource - relationships = append(relationships, + relationships = append( + relationships, tuple.MustParse("group:first#member@user:tom"), tuple.MustParse("group:second#member@group:first#member"), tuple.MustParse("group:third#member@group:second#member"), @@ -68,23 +69,27 @@ func setupWideGroups(ctx context.Context, ds datastore.Datastore) (*QuerySets, e // 100 wide groups at level 1, all containing group:first#member for i := 0; i < numWideGroups; i++ { relationships = append(relationships, tuple.MustParse( - fmt.Sprintf("group:widegroup1-%d#member@group:first#member", i))) + fmt.Sprintf("group:widegroup1-%d#member@group:first#member", i), + )) } // 100 wide groups at level 2, each containing the corresponding level 1 group for i := 0; i < numWideGroups; i++ { relationships = append(relationships, tuple.MustParse( - fmt.Sprintf("group:widegroup2-%d#member@group:widegroup1-%d#member", i, i))) + fmt.Sprintf("group:widegroup2-%d#member@group:widegroup1-%d#member", i, i), + )) } // 100 wide groups at level 3, each containing the corresponding level 2 group for i := 0; i < numWideGroups; i++ { relationships = append(relationships, tuple.MustParse( - fmt.Sprintf("group:widegroup3-%d#member@group:widegroup2-%d#member", i, i))) + fmt.Sprintf("group:widegroup3-%d#member@group:widegroup2-%d#member", i, i), + )) } // Additional resources - relationships = append(relationships, + relationships = append( + relationships, tuple.MustParse("resource:anotherresource#viewer@group:widegroup3-99#member"), tuple.MustParse("resource:thirdresource#viewer@user:sarah"), ) diff --git a/pkg/caveats/replacer/inlining.go b/pkg/caveats/replacer/inlining.go index 33d8b77529..111e66bb60 100644 --- a/pkg/caveats/replacer/inlining.go +++ b/pkg/caveats/replacer/inlining.go @@ -131,7 +131,8 @@ func (opt *inliningOptimizer) rewritePresenceExpr(ctx *cel.OptimizerContext, pre ctx.ClearMacroCall(prev.ID()) if inlinedType.IsAssignableType(cel.NullType) { ctx.UpdateExpr(prev, - ctx.NewCall(operators.NotEquals, + ctx.NewCall( + operators.NotEquals, inlined, ctx.NewLiteral(types.NullValue), )) @@ -139,7 +140,8 @@ func (opt *inliningOptimizer) rewritePresenceExpr(ctx *cel.OptimizerContext, pre } if inlinedType.HasTrait(traits.SizerType) { ctx.UpdateExpr(prev, - ctx.NewCall(operators.NotEquals, + ctx.NewCall( + operators.NotEquals, ctx.NewMemberCall(overloads.Size, inlined), ctx.NewLiteral(types.IntZero), )) diff --git a/pkg/caveats/types/basic.go b/pkg/caveats/types/basic.go index 688fc34f23..630a545ddb 100644 --- a/pkg/caveats/types/basic.go +++ b/pkg/caveats/types/basic.go @@ -146,7 +146,8 @@ func RegisterBasicTypes(sts *StandardTypeSet) error { } sts.listTypeBuilder = listTypeBuilder - mapTypeBuilder, err := RegisterGenericType(ts, "map", 1, + mapTypeBuilder, err := RegisterGenericType( + ts, "map", 1, func(childTypes []VariableType) VariableType { return VariableType{ localName: "map", @@ -178,7 +179,8 @@ func RegisterBasicTypes(sts *StandardTypeSet) error { } sts.mapTypeBuilder = mapTypeBuilder - if err := RegisterMethodOnDefinedType(ts, cel.MapType(cel.StringType, cel.DynType), + if err := RegisterMethodOnDefinedType( + ts, cel.MapType(cel.StringType, cel.DynType), "isSubtreeOf", []*cel.Type{cel.MapType(cel.StringType, cel.DynType)}, cel.BoolType, diff --git a/pkg/caveats/types/ipaddress.go b/pkg/caveats/types/ipaddress.go index 014ed45d75..4e72b05011 100644 --- a/pkg/caveats/types/ipaddress.go +++ b/pkg/caveats/types/ipaddress.go @@ -91,8 +91,10 @@ func RegisterIPAddressType(ts *TypeSet) (VariableType, error) { return d, nil }, - cel.Function("in_cidr", - cel.MemberOverload("ipaddress_in_cidr_string", + cel.Function( + "in_cidr", + cel.MemberOverload( + "ipaddress_in_cidr_string", []*cel.Type{cel.ObjectType("IPAddress"), cel.StringType}, cel.BoolType, cel.BinaryBinding(func(lhs, rhs ref.Val) ref.Val { diff --git a/pkg/cmd/server/defaults.go b/pkg/cmd/server/defaults.go index 191dffe7ec..4ffc9542b9 100644 --- a/pkg/cmd/server/defaults.go +++ b/pkg/cmd/server/defaults.go @@ -49,7 +49,8 @@ var DisableTelemetryHandler *prometheus.Registry // ServeExample creates an example usage string with the provided program name. func ServeExample(programName string) string { - return fmt.Sprintf(` %[1]s: + return fmt.Sprintf( + ` %[1]s: %[3]s serve --grpc-preshared-key "somerandomkeyhere" %[2]s: @@ -298,14 +299,16 @@ func DefaultUnaryMiddleware(opts MiddlewareOption) (*MiddlewareChain[grpc.UnaryS WithName(DefaultMiddlewareGRPCLog + "-debug"). WithInterceptor(selector.UnaryServerInterceptor( grpclog.UnaryServerInterceptor(InterceptorLogger(opts.Logger), determineEventsToLog(opts), alwaysDebugOption, durationFieldOption, timestampFormatOption, traceIDFieldOption), - selector.MatchFunc(matchesRoute(healthCheckRoute)))). + selector.MatchFunc(matchesRoute(healthCheckRoute)), + )). Done(), NewUnaryMiddleware(). WithName(DefaultMiddlewareGRPCLog). WithInterceptor(selector.UnaryServerInterceptor( grpclog.UnaryServerInterceptor(InterceptorLogger(opts.Logger), determineEventsToLog(opts), defaultCodeToLevel, durationFieldOption, timestampFormatOption, traceIDFieldOption), - selector.MatchFunc(doesNotMatchRoute(healthCheckRoute)))). + selector.MatchFunc(doesNotMatchRoute(healthCheckRoute)), + )). Done(), NewUnaryMiddleware(). @@ -316,8 +319,9 @@ func DefaultUnaryMiddleware(opts MiddlewareOption) (*MiddlewareChain[grpc.UnaryS NewUnaryMiddleware(). WithName(DefaultMiddlewareMemoryProtection). WithInterceptor(selector.UnaryServerInterceptor( - memoryProtectionUnaryInterceptor.UnaryServerInterceptor(), - selector.MatchFunc(doesNotMatchRoute(healthCheckRoute)))). + memoryProtectionUnaryInterceptor.UnaryServerInterceptor(), + selector.MatchFunc(doesNotMatchRoute(healthCheckRoute)), + )). EnsureAlreadyExecuted(DefaultMiddlewareGRPCProm). // so that prom middleware reports OOM status Done(), @@ -373,14 +377,16 @@ func DefaultStreamingMiddleware(opts MiddlewareOption) (*MiddlewareChain[grpc.St WithName(DefaultMiddlewareGRPCLog + "-debug"). WithInterceptor(selector.StreamServerInterceptor( grpclog.StreamServerInterceptor(InterceptorLogger(opts.Logger), determineEventsToLog(opts), alwaysDebugOption, durationFieldOption, timestampFormatOption, traceIDFieldOption), - selector.MatchFunc(matchesRoute(healthCheckRoute)))). + selector.MatchFunc(matchesRoute(healthCheckRoute)), + )). Done(), NewStreamMiddleware(). WithName(DefaultMiddlewareGRPCLog). WithInterceptor(selector.StreamServerInterceptor( grpclog.StreamServerInterceptor(InterceptorLogger(opts.Logger), determineEventsToLog(opts), defaultCodeToLevel, durationFieldOption, timestampFormatOption, traceIDFieldOption), - selector.MatchFunc(doesNotMatchRoute(healthCheckRoute)))). + selector.MatchFunc(doesNotMatchRoute(healthCheckRoute)), + )). Done(), NewStreamMiddleware(). diff --git a/pkg/cmd/server/middleware_test.go b/pkg/cmd/server/middleware_test.go index 098a74dcf4..71d34ef958 100644 --- a/pkg/cmd/server/middleware_test.go +++ b/pkg/cmd/server/middleware_test.go @@ -228,7 +228,8 @@ func TestPrependMiddleware(t *testing.T) { ReferenceableMiddleware[grpc.UnaryServerInterceptor]{ Name: "foobar", Middleware: replaceUnary, - }) + }, + ) require.NoError(t, err) mod := MiddlewareModification[grpc.UnaryServerInterceptor]{ @@ -359,7 +360,8 @@ func TestMiddlewareOrdering(t *testing.T) { ctx, cancel := context.WithCancel(t.Context()) defer cancel() - ds, err := datastore.NewDatastore(ctx, + ds, err := datastore.NewDatastore( + ctx, datastore.DefaultDatastoreConfig().ToOption(), datastore.WithBootstrapFiles("testdata/test_schema.yaml"), ) @@ -439,7 +441,8 @@ func TestIncorrectOrderAssertionFails(t *testing.T) { ctx, cancel := context.WithCancel(t.Context()) defer cancel() - ds, err := datastore.NewDatastore(ctx, + ds, err := datastore.NewDatastore( + ctx, datastore.DefaultDatastoreConfig().ToOption(), datastore.WithBootstrapFiles("testdata/test_schema.yaml"), ) diff --git a/pkg/cmd/server/otel.go b/pkg/cmd/server/otel.go index 72248e9d5c..f77c06a624 100644 --- a/pkg/cmd/server/otel.go +++ b/pkg/cmd/server/otel.go @@ -16,7 +16,7 @@ import ( "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" - semconv "go.opentelemetry.io/otel/semconv/v1.7.0" + semconv "go.opentelemetry.io/otel/semconv/v1.41.0" log "github.com/authzed/spicedb/internal/logging" ) @@ -65,7 +65,8 @@ func InitOTelProvider(ctx context.Context, cfg OTelConfig) (func() error, error) return func() error { return nil }, nil } - res, err := resource.New(ctx, + res, err := resource.New( + ctx, resource.WithAttributes(semconv.ServiceNameKey.String(cfg.ServiceName)), resource.WithProcess(), resource.WithOS(), diff --git a/pkg/cmd/server/server.go b/pkg/cmd/server/server.go index 8529f0dde1..5df541741e 100644 --- a/pkg/cmd/server/server.go +++ b/pkg/cmd/server/server.go @@ -237,7 +237,8 @@ func (c *Config) complete(ctx context.Context) (*completedServerConfig, error) { if ds == nil { var err error c.supportOldAndNewReadReplicaConnectionPoolFlags() - ds, err = datastorecfg.NewDatastore(ctx, c.DatastoreConfig.ToOption(), + ds, err = datastorecfg.NewDatastore( + ctx, c.DatastoreConfig.ToOption(), // Datastore's filter maximum ID count is set to the max size, since the number of elements to be dispatched // are at most the number of elements returned from a datastore query datastorecfg.WithFilterMaximumIDCount(c.DispatchChunkSize), @@ -474,7 +475,8 @@ func (c *Config) complete(ctx context.Context) (*completedServerConfig, error) { sameMiddlewares := defaultUnaryMiddlewareChain.Names().Equal(defaultStreamingMiddlewareChain.Names()) if !sameMiddlewares { - return nil, fmt.Errorf("unary and streaming middlewares differ: %v / %v", + return nil, fmt.Errorf( + "unary and streaming middlewares differ: %v / %v", defaultUnaryMiddlewareChain.Names().AsSlice(), defaultStreamingMiddlewareChain.Names().AsSlice(), ) @@ -523,7 +525,8 @@ func (c *Config) complete(ctx context.Context) (*completedServerConfig, error) { } healthManager := health.NewHealthManager(dispatcher, ds) - grpcServer, err := c.GRPCServer.Complete(zerolog.InfoLevel, + grpcServer, err := c.GRPCServer.Complete( + zerolog.InfoLevel, func(server *grpc.Server) { services.RegisterGrpcServices( server, @@ -675,7 +678,8 @@ func (c *Config) buildDispatchServer(memoryUsageProvider memoryprotection.Memory } } - dispatchGrpcServer, err := c.DispatchServer.Complete(zerolog.InfoLevel, + dispatchGrpcServer, err := c.DispatchServer.Complete( + zerolog.InfoLevel, func(server *grpc.Server) { dispatchSvc.RegisterGrpcServices(server, cachingClusterDispatch) }, diff --git a/pkg/cmd/server/server_test.go b/pkg/cmd/server/server_test.go index ee6c333d34..2576ea5bd5 100644 --- a/pkg/cmd/server/server_test.go +++ b/pkg/cmd/server/server_test.go @@ -265,7 +265,8 @@ func TestOTelReporting(t *testing.T) { ctx, cancel := context.WithTimeout(t.Context(), 10*time.Second) defer cancel() - ds, err := datastore.NewDatastore(ctx, + ds, err := datastore.NewDatastore( + ctx, datastore.DefaultDatastoreConfig().ToOption(), ) require.NoError(t, err, "unable to start memdb datastore") @@ -338,7 +339,8 @@ func TestDisableHealthCheckTracing(t *testing.T) { ctx, cancel := context.WithTimeout(t.Context(), 10*time.Second) defer cancel() - ds, err := datastore.NewDatastore(ctx, + ds, err := datastore.NewDatastore( + ctx, datastore.DefaultDatastoreConfig().ToOption(), ) require.NoError(t, err, "unable to start memdb datastore") @@ -460,7 +462,8 @@ func TestRetryPolicy(t *testing.T) { ctx, cancel := context.WithCancel(t.Context()) t.Cleanup(cancel) - ds, err := datastore.NewDatastore(ctx, + ds, err := datastore.NewDatastore( + ctx, datastore.DefaultDatastoreConfig().ToOption(), ) require.NoError(t, err, "unable to start memdb datastore") @@ -841,7 +844,8 @@ func TestHandleGRPCAuthn(t *testing.T) { require.NoError(t, config.handleGrpcAuthn(t.Context())) // Assert that the function objects are the same. this hackaround is necessary // because of the way that golang treats function values. - require.Equal(t, + require.Equal( + t, reflect.ValueOf(authFn).Pointer(), reflect.ValueOf(config.GRPCAuthFunc).Pointer(), ) diff --git a/pkg/cmd/termination/termination.go b/pkg/cmd/termination/termination.go index 736d1e2e1f..e248bb7442 100644 --- a/pkg/cmd/termination/termination.go +++ b/pkg/cmd/termination/termination.go @@ -68,7 +68,8 @@ func PublishError(runFunc cobrautil.CobraRunFunc) cobrautil.CobraRunFunc { // RegisterFlags registers the termination log flag func RegisterFlags(flagset *flag.FlagSet) { - flagset.String(terminationLogFlagName, + flagset.String( + terminationLogFlagName, "", "local file path for Kubernetes terminationMessagePath; written with a JSON exit reason on TerminationError; disabled when empty", ) diff --git a/pkg/cmd/testserver/testserver.go b/pkg/cmd/testserver/testserver.go index 32cfd14d32..7eec4846ba 100644 --- a/pkg/cmd/testserver/testserver.go +++ b/pkg/cmd/testserver/testserver.go @@ -140,7 +140,8 @@ func (c *Config) complete(ctx context.Context) (*completedTestServer, error) { otelgrpc.WithFilter(filters.Not(filters.HealthCheck())), } - gRPCSrv, err := c.GRPCServer.Complete(zerolog.InfoLevel, registerServices, + gRPCSrv, err := c.GRPCServer.Complete( + zerolog.InfoLevel, registerServices, grpc.ChainUnaryInterceptor(unaryMiddleware.ToGRPCInterceptors()...), grpc.ChainStreamInterceptor(streamMiddleware.ToGRPCInterceptors()...), grpc.StatsHandler(otelgrpc.NewServerHandler(statsHandlerOpts...)), @@ -150,7 +151,8 @@ func (c *Config) complete(ctx context.Context) (*completedTestServer, error) { } closeables.AddCloserWithGracePeriod("grpc", c.ShutdownGracePeriod, gRPCSrv.GracefulStop, gRPCSrv.ForceStop) - readOnlyGRPCSrv, err := c.ReadOnlyGRPCServer.Complete(zerolog.InfoLevel, registerServices, + readOnlyGRPCSrv, err := c.ReadOnlyGRPCServer.Complete( + zerolog.InfoLevel, registerServices, grpc.ChainUnaryInterceptor( append(unaryMiddleware.ToGRPCInterceptors(), readonly.UnaryServerInterceptor())..., ), diff --git a/pkg/cmd/util/util.go b/pkg/cmd/util/util.go index 197dc9a635..78fdc02d8c 100644 --- a/pkg/cmd/util/util.go +++ b/pkg/cmd/util/util.go @@ -307,7 +307,8 @@ func (c *HTTPServerConfig) Complete(level zerolog.Level, handler http.Handler) ( return srv.Serve(listener) } default: - return nil, fmt.Errorf("failed to start http server: must provide both --%s-tls-cert-path and --%s-tls-key-path", + return nil, fmt.Errorf( + "failed to start http server: must provide both --%s-tls-cert-path and --%s-tls-key-path", c.flagPrefix, c.flagPrefix, ) diff --git a/pkg/datalayer/datalayer_test.go b/pkg/datalayer/datalayer_test.go index c86edcc619..bdd5e07f35 100644 --- a/pkg/datalayer/datalayer_test.go +++ b/pkg/datalayer/datalayer_test.go @@ -26,7 +26,8 @@ import ( var testDefinitions = []compiler.SchemaDefinition{ ns.Namespace("user"), - ns.Namespace("document", + ns.Namespace( + "document", ns.MustRelation("viewer", nil, ns.AllowedRelation("user", "...")), ), } diff --git a/pkg/datalayer/schema_adapter_test.go b/pkg/datalayer/schema_adapter_test.go index 2afd0ff2d8..c3431b0e0a 100644 --- a/pkg/datalayer/schema_adapter_test.go +++ b/pkg/datalayer/schema_adapter_test.go @@ -522,7 +522,8 @@ func TestStoredAdapter_ListAllTypeDefinitions(t *testing.T) { map[string]*core.NamespaceDefinition{ "user": {Name: "user"}, "doc": {Name: "doc"}, - }, nil, "") + }, nil, "", + ) result, err := adapter.ListAllTypeDefinitions(t.Context()) require.NoError(t, err) diff --git a/pkg/datalayer/schemamode.go b/pkg/datalayer/schemamode.go index 453081eedd..a41097d7d6 100644 --- a/pkg/datalayer/schemamode.go +++ b/pkg/datalayer/schemamode.go @@ -44,7 +44,8 @@ func ParseSchemaMode(s string) (SchemaMode, error) { mode, ok := schemaModeNames[s] if !ok { return SchemaModeReadLegacyWriteLegacy, fmt.Errorf( - "invalid schema mode %q, must be one of: read-legacy-write-legacy, read-legacy-write-both, read-new-write-both, read-new-write-new", s) + "invalid schema mode %q, must be one of: read-legacy-write-legacy, read-legacy-write-both, read-new-write-both, read-new-write-new", s, + ) } return mode, nil } diff --git a/pkg/datastore/gc_test.go b/pkg/datastore/gc_test.go index 3f23885a70..2ec3097810 100644 --- a/pkg/datastore/gc_test.go +++ b/pkg/datastore/gc_test.go @@ -202,7 +202,7 @@ func TestGCFailureBackoff(t *testing.T) { // we should see failures at 100s, 200s, 400s, 800s // but depending on jitter this could end up being squished down such that we get 5 failures. // Experimentally, we see 5 most often and 4 sometimes, so asserting greater than 3 works here. - require.Greater(t, *(mf.GetMetric()[0].Counter.Value), 3.0, "did not see expected number of backoffs") + require.Greater(t, *mf.GetMetric()[0].Counter.Value, 3.0, "did not see expected number of backoffs") } // Ensure the garbage collector interval is reset after recovering from an diff --git a/pkg/datastore/test/namespace.go b/pkg/datastore/test/namespace.go index 0599dfe6ee..7ee10e33b0 100644 --- a/pkg/datastore/test/namespace.go +++ b/pkg/datastore/test/namespace.go @@ -21,11 +21,13 @@ import ( ) var ( - testNamespace = ns.Namespace("foo/bar", + testNamespace = ns.Namespace( + "foo/bar", ns.MustRelation("editor", nil, ns.AllowedRelation(testUserNS.Name, "...")), ) - updatedNamespace = ns.Namespace(testNamespace.Name, + updatedNamespace = ns.Namespace( + testNamespace.Name, ns.MustRelation("reader", nil, ns.AllowedRelation(testUserNS.Name, "...")), ns.MustRelation("editor", nil, ns.AllowedRelation(testUserNS.Name, "...")), ) diff --git a/pkg/datastore/test/storedschema.go b/pkg/datastore/test/storedschema.go index 1ef2451e86..1dbff9e86b 100644 --- a/pkg/datastore/test/storedschema.go +++ b/pkg/datastore/test/storedschema.go @@ -149,7 +149,8 @@ func StoredSchemaRevisionTest(t *testing.T, tester DatastoreTester) { // Write second schema: "user" + "document" with viewer. secondDefs := []compiler.SchemaDefinition{ ns.Namespace("user"), - ns.Namespace("document", + ns.Namespace( + "document", ns.MustRelation("viewer", nil, ns.AllowedRelation("user", "...")), ), } @@ -161,7 +162,8 @@ func StoredSchemaRevisionTest(t *testing.T, tester DatastoreTester) { // Write third schema: "user" + "document" with viewer+editor. thirdDefs := []compiler.SchemaDefinition{ ns.Namespace("user"), - ns.Namespace("document", + ns.Namespace( + "document", ns.MustRelation("viewer", nil, ns.AllowedRelation("user", "...")), ns.MustRelation("editor", nil, ns.AllowedRelation("user", "...")), ), @@ -212,7 +214,8 @@ func StoredSchemaUpdateTest(t *testing.T, tester DatastoreTester) { // Write initial schema with 2 relations. initialDefs := []compiler.SchemaDefinition{ ns.Namespace("user"), - ns.Namespace("document", + ns.Namespace( + "document", ns.MustRelation("viewer", nil, ns.AllowedRelation("user", "...")), ns.MustRelation("editor", nil, ns.AllowedRelation("user", "...")), ), @@ -224,7 +227,8 @@ func StoredSchemaUpdateTest(t *testing.T, tester DatastoreTester) { // Update schema: add an "owner" relation. updatedDefs := []compiler.SchemaDefinition{ ns.Namespace("user"), - ns.Namespace("document", + ns.Namespace( + "document", ns.MustRelation("viewer", nil, ns.AllowedRelation("user", "...")), ns.MustRelation("editor", nil, ns.AllowedRelation("user", "...")), ns.MustRelation("owner", nil, ns.AllowedRelation("user", "...")), @@ -279,7 +283,8 @@ func StoredSchemaMultipleRevisionsTest(t *testing.T, tester DatastoreTester) { for i := range numVersions { defs := []compiler.SchemaDefinition{ ns.Namespace("user"), - ns.Namespace(fmt.Sprintf("resource_%d", i), + ns.Namespace( + fmt.Sprintf("resource_%d", i), ns.MustRelation("viewer", nil, ns.AllowedRelation("user", "...")), ), } @@ -687,7 +692,8 @@ func HeadRevisionSchemaHashTest(t *testing.T, tester DatastoreTester) { // Write a schema. firstDefs := []compiler.SchemaDefinition{ ns.Namespace("user"), - ns.Namespace("document", + ns.Namespace( + "document", ns.MustRelation("viewer", nil, ns.AllowedRelation("user", "...")), ), } @@ -745,7 +751,8 @@ func OptimizedRevisionSchemaHashTest(t *testing.T, tester DatastoreTester) { // Write a schema. firstDefs := []compiler.SchemaDefinition{ ns.Namespace("user"), - ns.Namespace("document", + ns.Namespace( + "document", ns.MustRelation("viewer", nil, ns.AllowedRelation("user", "...")), ), } diff --git a/pkg/datastore/test/watch.go b/pkg/datastore/test/watch.go index 2ae7c6cf7b..2783e7ceaa 100644 --- a/pkg/datastore/test/watch.go +++ b/pkg/datastore/test/watch.go @@ -302,26 +302,29 @@ func WatchWithTouchTest(t *testing.T, tester DatastoreTester) { changes, errchan := ds.Watch(ctx, lowestRevision, datastore.WatchJustRelationships()) require.Empty(errchan) - afterTouchRevision, err := common.WriteRelationships(ctx, ds, tuple.UpdateOperationTouch, + afterTouchRevision, err := common.WriteRelationships( + ctx, ds, tuple.UpdateOperationTouch, tuple.MustParse("document:firstdoc#viewer@user:tom"), tuple.MustParse("document:firstdoc#viewer@user:sarah"), tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]"), ) require.NoError(err) - ensureRelationships(ctx, require, ds, + ensureRelationships( + ctx, require, ds, tuple.MustParse("document:firstdoc#viewer@user:tom"), tuple.MustParse("document:firstdoc#viewer@user:sarah"), tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]"), ) - VerifyUpdates(t, require, [][]tuple.RelationshipUpdate{ - { - tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:tom")), - tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:sarah")), - tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]")), + VerifyUpdates( + t, require, [][]tuple.RelationshipUpdate{ + { + tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:tom")), + tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:sarah")), + tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]")), + }, }, - }, changes, errchan, false, @@ -334,13 +337,15 @@ func WatchWithTouchTest(t *testing.T, tester DatastoreTester) { _, err = common.WriteRelationships(ctx, ds, tuple.UpdateOperationTouch, tuple.MustParse("document:firstdoc#viewer@user:tom")) require.NoError(err) - ensureRelationships(ctx, require, ds, + ensureRelationships( + ctx, require, ds, tuple.MustParse("document:firstdoc#viewer@user:tom"), tuple.MustParse("document:firstdoc#viewer@user:sarah"), tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]"), ) - verifyNoUpdates(require, + verifyNoUpdates( + require, changes, errchan, false, @@ -353,15 +358,17 @@ func WatchWithTouchTest(t *testing.T, tester DatastoreTester) { afterNameChange, err := common.WriteRelationships(ctx, ds, tuple.UpdateOperationTouch, tuple.MustParse("document:firstdoc#viewer@user:tom[somecaveat]")) require.NoError(err) - ensureRelationships(ctx, require, ds, + ensureRelationships( + ctx, require, ds, tuple.MustParse("document:firstdoc#viewer@user:tom[somecaveat]"), tuple.MustParse("document:firstdoc#viewer@user:sarah"), tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]"), ) - VerifyUpdates(t, require, [][]tuple.RelationshipUpdate{ - {tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:tom[somecaveat]"))}, - }, + VerifyUpdates( + t, require, [][]tuple.RelationshipUpdate{ + {tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:tom[somecaveat]"))}, + }, changes, errchan, false, @@ -374,15 +381,17 @@ func WatchWithTouchTest(t *testing.T, tester DatastoreTester) { _, err = common.WriteRelationships(ctx, ds, tuple.UpdateOperationTouch, tuple.MustParse("document:firstdoc#viewer@user:tom[somecaveat:{\"somecondition\": 42}]")) require.NoError(err) - ensureRelationships(ctx, require, ds, + ensureRelationships( + ctx, require, ds, tuple.MustParse("document:firstdoc#viewer@user:tom[somecaveat:{\"somecondition\": 42}]"), tuple.MustParse("document:firstdoc#viewer@user:sarah"), tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]"), ) - VerifyUpdates(t, require, [][]tuple.RelationshipUpdate{ - {tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:tom[somecaveat:{\"somecondition\": 42}]"))}, - }, + VerifyUpdates( + t, require, [][]tuple.RelationshipUpdate{ + {tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:tom[somecaveat:{\"somecondition\": 42}]"))}, + }, changes, errchan, false, @@ -417,9 +426,10 @@ func WatchWithExpirationTest(t *testing.T, tester DatastoreTester) { }, options.WithMetadata(metadata)) require.NoError(err) - VerifyUpdates(t, require, [][]tuple.RelationshipUpdate{ - {tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:tom[expiration:2321-01-01T00:00:00Z]"))}, - }, + VerifyUpdates( + t, require, [][]tuple.RelationshipUpdate{ + {tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:tom[expiration:2321-01-01T00:00:00Z]"))}, + }, changes, errchan, false, @@ -463,12 +473,13 @@ func WatchWithMetadataTest(t *testing.T, tester DatastoreTester) { }, options.WithMetadata(metadata)) require.NoError(err) - VerifyUpdatesWithMetadata(t, require, []updateWithMetadata{ - { - updates: []tuple.RelationshipUpdate{tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:tom"))}, - metadata: map[string]any{"somekey": "somevalue"}, + VerifyUpdatesWithMetadata( + t, require, []updateWithMetadata{ + { + updates: []tuple.RelationshipUpdate{tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:tom"))}, + metadata: map[string]any{"somekey": "somevalue"}, + }, }, - }, changes, errchan, false, @@ -494,26 +505,29 @@ func WatchWithDeleteTest(t *testing.T, tester DatastoreTester) { changes, errchan := ds.Watch(ctx, lowestRevision, datastore.WatchJustRelationships()) require.Empty(errchan) - afterTouchRevision, err := common.WriteRelationships(ctx, ds, tuple.UpdateOperationTouch, + afterTouchRevision, err := common.WriteRelationships( + ctx, ds, tuple.UpdateOperationTouch, tuple.MustParse("document:firstdoc#viewer@user:tom"), tuple.MustParse("document:firstdoc#viewer@user:sarah"), tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]"), ) require.NoError(err) - ensureRelationships(ctx, require, ds, + ensureRelationships( + ctx, require, ds, tuple.MustParse("document:firstdoc#viewer@user:tom"), tuple.MustParse("document:firstdoc#viewer@user:sarah"), tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]"), ) - VerifyUpdates(t, require, [][]tuple.RelationshipUpdate{ - { - tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:tom")), - tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:sarah")), - tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]")), + VerifyUpdates( + t, require, [][]tuple.RelationshipUpdate{ + { + tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:tom")), + tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:sarah")), + tuple.Touch(tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]")), + }, }, - }, changes, errchan, false, @@ -526,14 +540,16 @@ func WatchWithDeleteTest(t *testing.T, tester DatastoreTester) { _, err = common.WriteRelationships(ctx, ds, tuple.UpdateOperationDelete, tuple.MustParse("document:firstdoc#viewer@user:tom")) require.NoError(err) - ensureRelationships(ctx, require, ds, + ensureRelationships( + ctx, require, ds, tuple.MustParse("document:firstdoc#viewer@user:sarah"), tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]"), ) - VerifyUpdates(t, require, [][]tuple.RelationshipUpdate{ - {tuple.Delete(tuple.MustParse("document:firstdoc#viewer@user:tom"))}, - }, + VerifyUpdates( + t, require, [][]tuple.RelationshipUpdate{ + {tuple.Delete(tuple.MustParse("document:firstdoc#viewer@user:tom"))}, + }, changes, errchan, false, @@ -706,7 +722,8 @@ func WatchRelationshipsAndSchemaChangesTest(t *testing.T, tester DatastoreTester }, changes, errchan, false) // Write some relationships. - _, err = common.WriteRelationships(ctx, ds, tuple.UpdateOperationTouch, + _, err = common.WriteRelationships( + ctx, ds, tuple.UpdateOperationTouch, tuple.MustParse("document:firstdoc#viewer@user:tom"), tuple.MustParse("document:firstdoc#viewer@user:sarah"), tuple.MustParse("document:firstdoc#viewer@user:fred[thirdcaveat]"), @@ -815,7 +832,8 @@ func WatchRelationshipsAndSchemaAndCheckpointsTest(t *testing.T, tester Datastor }) require.Empty(errchan) - afterTouchRevision, err := common.WriteRelationships(ctx, ds, tuple.UpdateOperationTouch, + afterTouchRevision, err := common.WriteRelationships( + ctx, ds, tuple.UpdateOperationTouch, tuple.MustParse("document:firstdoc#viewer@user:tom"), ) require.NoError(err) @@ -932,7 +950,8 @@ func WatchObservesEveryReturnedRevisionTest(t *testing.T, tester DatastoreTester setupDatastore(t, ds) // First TOUCH creates the relationship. - afterCreateRevision, err := common.WriteRelationships(t.Context(), ds, tuple.UpdateOperationTouch, + afterCreateRevision, err := common.WriteRelationships( + t.Context(), ds, tuple.UpdateOperationTouch, tuple.MustParse("document:firstdoc#viewer@user:tom"), ) require.NoError(t, err) @@ -945,7 +964,8 @@ func WatchObservesEveryReturnedRevisionTest(t *testing.T, tester DatastoreTester require.Empty(t, errchan) // Second TOUCH of the same relationship is a no-op (no actual changes), - secondRevision, err := common.WriteRelationships(t.Context(), ds, tuple.UpdateOperationTouch, + secondRevision, err := common.WriteRelationships( + t.Context(), ds, tuple.UpdateOperationTouch, tuple.MustParse("document:firstdoc#viewer@user:tom"), ) require.NoError(t, err) @@ -995,7 +1015,8 @@ func WatchEmitsCheckpointAfterWriteWithChangesTest(t *testing.T, tester Datastor require.Empty(t, errchan) // A TOUCH that produces a real change. - afterWriteRevision, err := common.WriteRelationships(t.Context(), ds, tuple.UpdateOperationTouch, + afterWriteRevision, err := common.WriteRelationships( + t.Context(), ds, tuple.UpdateOperationTouch, tuple.MustParse("document:firstdoc#viewer@user:tom"), ) require.NoError(t, err) diff --git a/pkg/development/check.go b/pkg/development/check.go index 5791029c92..8ac859e34c 100644 --- a/pkg/development/check.go +++ b/pkg/development/check.go @@ -27,7 +27,8 @@ type CheckResult struct { // if they want to distinguish between user errors and internal errors. func RunCheck(devContext *DevContext, resource tuple.ObjectAndRelation, subject tuple.ObjectAndRelation, caveatContext map[string]any) (CheckResult, error) { ctx := devContext.Ctx - cr, meta, err := computed.ComputeCheck(ctx, devContext.Dispatcher, + cr, meta, err := computed.ComputeCheck( + ctx, devContext.Dispatcher, caveattypes.Default.TypeSet, computed.CheckParameters{ ResourceType: resource.RelationReference(), diff --git a/pkg/development/schema_test.go b/pkg/development/schema_test.go index f3c96b9fce..53d69d2b2d 100644 --- a/pkg/development/schema_test.go +++ b/pkg/development/schema_test.go @@ -122,7 +122,8 @@ import "doesnotexist.zed" ` sourceFS := fstest.MapFS{} // empty FS, so the import will fail - compiled, devErr, err := CompileSchema(rootSchema, + compiled, devErr, err := CompileSchema( + rootSchema, WithSourceFS(sourceFS), WithRootFileName("myroot.zed"), ) @@ -144,7 +145,8 @@ import "imported.zed" "imported.zed": &fstest.MapFile{Data: []byte("definition document {\n\tinvalid syntax here\n}")}, } - compiled, devErr, err := CompileSchema(rootSchema, + compiled, devErr, err := CompileSchema( + rootSchema, WithSourceFS(sourceFS), WithRootFileName("myroot.zed"), ) diff --git a/pkg/development/validation.go b/pkg/development/validation.go index 747c8ecedc..1851fd201c 100644 --- a/pkg/development/validation.go +++ b/pkg/development/validation.go @@ -132,7 +132,8 @@ func validateSubjects(onrKey blocks.ObjectRelation, fs developmentmembership.Fou foundONRStrings := tuple.StringsONRs(foundParentResources) if !cmp.Equal(expectedONRStrings, foundONRStrings) { failures = append(failures, &devinterface.DeveloperError{ - Message: fmt.Sprintf("For object and permission/relation `%s`, found different relationships for subject `%s`: Specified: `%s`, Computed: `%s`", + Message: fmt.Sprintf( + "For object and permission/relation `%s`, found different relationships for subject `%s`: Specified: `%s`, Computed: `%s`", tuple.StringONR(onr), tuple.StringONR(subjectWithExceptions.Subject.Subject), strings.Join(wrapResources(expectedONRStrings), "/"), @@ -158,7 +159,8 @@ func validateSubjects(onrKey blocks.ObjectRelation, fs developmentmembership.Fou if !cmp.Equal(expectedExcludedStrings, foundExcludedONRStrings) { failures = append(failures, &devinterface.DeveloperError{ - Message: fmt.Sprintf("For object and permission/relation `%s`, found different excluded subjects for subject `%s`: Specified: `%s`, Computed: `%s`", + Message: fmt.Sprintf( + "For object and permission/relation `%s`, found different excluded subjects for subject `%s`: Specified: `%s`, Computed: `%s`", tuple.StringONR(onr), tuple.StringONR(subjectWithExceptions.Subject.Subject), strings.Join(wrapResources(expectedExcludedStrings), ", "), @@ -173,7 +175,8 @@ func validateSubjects(onrKey blocks.ObjectRelation, fs developmentmembership.Fou } } else if len(expectedExcludedSubjects) > 0 { failures = append(failures, &devinterface.DeveloperError{ - Message: fmt.Sprintf("For object and permission/relation `%s`, found unexpected excluded subjects", + Message: fmt.Sprintf( + "For object and permission/relation `%s`, found unexpected excluded subjects", tuple.StringONR(onr), ), Source: devinterface.DeveloperError_VALIDATION_YAML, @@ -187,7 +190,8 @@ func validateSubjects(onrKey blocks.ObjectRelation, fs developmentmembership.Fou // Verify caveats. if (subject.GetCaveatExpression() != nil) != subjectWithExceptions.Subject.IsCaveated { failures = append(failures, &devinterface.DeveloperError{ - Message: fmt.Sprintf("For object and permission/relation `%s`, found caveat mismatch", + Message: fmt.Sprintf( + "For object and permission/relation `%s`, found caveat mismatch", tuple.StringONR(onr), ), Source: devinterface.DeveloperError_VALIDATION_YAML, @@ -212,7 +216,8 @@ func validateSubjects(onrKey blocks.ObjectRelation, fs developmentmembership.Fou log.Err(err).Msg("could not cast columnPosition to uint32") } failures = append(failures, &devinterface.DeveloperError{ - Message: fmt.Sprintf("For object and permission/relation `%s`, subject `%s` found but not listed in expected subjects", + Message: fmt.Sprintf( + "For object and permission/relation `%s`, subject `%s` found but not listed in expected subjects", tuple.StringONR(onr), tuple.StringONR(foundSubject.Subject()), ), @@ -247,7 +252,8 @@ func GenerateValidation(membershipSet *developmentmembership.Set) (string, error strs := make([]string, 0, len(subjectList)) for _, fs := range subjectList { strs = append(strs, - fmt.Sprintf("[%s] is %s", + fmt.Sprintf( + "[%s] is %s", fs.ToValidationString(), strings.Join(wrapResources(tuple.StringsONRs(fs.ParentResources())), "/"), )) diff --git a/pkg/development/warnings.go b/pkg/development/warnings.go index 274d8f581a..00194db613 100644 --- a/pkg/development/warnings.go +++ b/pkg/development/warnings.go @@ -173,7 +173,7 @@ func walkUsersetRewrite(ctx context.Context, rewrite *corev1.UsersetRewrite, rel return nil, nil } - switch t := (rewrite.RewriteOperation).(type) { + switch t := rewrite.RewriteOperation.(type) { case *corev1.UsersetRewrite_Union: return walkUsersetOperations(ctx, t.Union.Child, relation, checks, def, ts) diff --git a/pkg/diff/namespace/diff_test.go b/pkg/diff/namespace/diff_test.go index 2e8b68dbf3..aafe41116c 100644 --- a/pkg/diff/namespace/diff_test.go +++ b/pkg/diff/namespace/diff_test.go @@ -169,7 +169,8 @@ func TestNamespaceDiff(t *testing.T) { ), ns.Namespace( "document", - ns.MustRelation("somerel", + ns.MustRelation( + "somerel", ns.Union( ns.ComputedUserset("owner"), ), diff --git a/pkg/promutil/promutil.go b/pkg/promutil/promutil.go index 261cdf3453..2a704ed6d1 100644 --- a/pkg/promutil/promutil.go +++ b/pkg/promutil/promutil.go @@ -5,7 +5,7 @@ import ( dto "github.com/prometheus/client_model/go" ) -var _ prometheus.Collector = (CollectorFunc)(nil) +var _ prometheus.Collector = CollectorFunc(nil) // CollectorFunc is a convenient way to implement a Prometheus Collector // without interface boilerplate. diff --git a/pkg/query/arrow_reversal_test.go b/pkg/query/arrow_reversal_test.go index b559c55e27..2a56ac842d 100644 --- a/pkg/query/arrow_reversal_test.go +++ b/pkg/query/arrow_reversal_test.go @@ -142,7 +142,8 @@ func TestDoubleWideArrowAdvisedMatchesPlain(t *testing.T) { t.Logf("advised explain:\n%s\nadvised trace:\n%s", advisedIt.Explain(), advisedTrace.DumpTrace()) // Both plans must agree: either both find a path or neither does - require.Equal(t, plainPath == nil, advisedPath == nil, + require.Equal( + t, plainPath == nil, advisedPath == nil, "advised plan must agree with plain on whether a path exists", ) } diff --git a/pkg/query/build_tree_test.go b/pkg/query/build_tree_test.go index 6ff0a9cd4c..565d88f372 100644 --- a/pkg/query/build_tree_test.go +++ b/pkg/query/build_tree_test.go @@ -129,11 +129,14 @@ func TestBuildTreeRecursion(t *testing.T) { // } // This creates recursion: computing member arrows through parent groups, // which recursively compute their own member permission - groupDef := namespace.Namespace("group", - namespace.MustRelation("parent", nil, + groupDef := namespace.Namespace( + "group", + namespace.MustRelation( + "parent", nil, namespace.AllowedRelation("group", "..."), ), - namespace.MustRelation("member", + namespace.MustRelation( + "member", namespace.Union( namespace.TupleToUserset("parent", "member"), ), @@ -216,8 +219,10 @@ func TestBuildTreeExclusionOperation(t *testing.T) { userDef := testfixtures.UserNS.CloneVT() // Create a document with an exclusion operation - docDef := namespace.Namespace("document", - namespace.MustRelation("excluded_perm", + docDef := namespace.Namespace( + "document", + namespace.MustRelation( + "excluded_perm", namespace.Exclusion( namespace.Nil(), namespace.Nil(), @@ -263,10 +268,12 @@ func TestBuildTreeExclusionEdgeCases(t *testing.T) { ctx := NewLocalContext(t.Context(), WithRevisionedReader(datalayer.NewDataLayer(ds).SnapshotReader(revision, datalayer.NoSchemaHashForTesting))) // Create schema with exclusion using relation references - docDef := namespace.Namespace("document", + docDef := namespace.Namespace( + "document", namespace.MustRelation("owner", nil, namespace.AllowedRelation("user", "...")), namespace.MustRelation("viewer", nil, namespace.AllowedRelation("user", "...")), - namespace.MustRelation("can_view", + namespace.MustRelation( + "can_view", namespace.Exclusion( namespace.ComputedUserset("viewer"), namespace.ComputedUserset("owner"), @@ -293,11 +300,13 @@ func TestBuildTreeExclusionEdgeCases(t *testing.T) { t.Run("Exclusion with Union Operations", func(t *testing.T) { // Create schema with exclusion containing union operations - docDef := namespace.Namespace("document", + docDef := namespace.Namespace( + "document", namespace.MustRelation("owner", nil, namespace.AllowedRelation("user", "...")), namespace.MustRelation("editor", nil, namespace.AllowedRelation("user", "...")), namespace.MustRelation("viewer", nil, namespace.AllowedRelation("user", "...")), - namespace.MustRelation("restricted_viewers", + namespace.MustRelation( + "restricted_viewers", namespace.Exclusion( namespace.Rewrite( namespace.Union( @@ -334,10 +343,12 @@ func TestBuildTreeExclusionEdgeCases(t *testing.T) { t.Run("Exclusion with Intersection Operations", func(t *testing.T) { // Create schema with exclusion containing intersection operations - docDef := namespace.Namespace("document", + docDef := namespace.Namespace( + "document", namespace.MustRelation("owner", nil, namespace.AllowedRelation("user", "...")), namespace.MustRelation("editor", nil, namespace.AllowedRelation("user", "...")), - namespace.MustRelation("restricted_view", + namespace.MustRelation( + "restricted_view", namespace.Exclusion( namespace.Rewrite( namespace.Intersection( @@ -374,11 +385,13 @@ func TestBuildTreeExclusionEdgeCases(t *testing.T) { t.Run("Nested Exclusion Operations", func(t *testing.T) { // Create schema with nested exclusions - docDef := namespace.Namespace("document", + docDef := namespace.Namespace( + "document", namespace.MustRelation("all_users", nil, namespace.AllowedRelation("user", "...")), namespace.MustRelation("banned_users", nil, namespace.AllowedRelation("user", "...")), namespace.MustRelation("restricted_users", nil, namespace.AllowedRelation("user", "...")), - namespace.MustRelation("allowed_users", + namespace.MustRelation( + "allowed_users", namespace.Exclusion( namespace.Rewrite( namespace.Exclusion( @@ -417,9 +430,11 @@ func TestBuildTreeExclusionEdgeCases(t *testing.T) { t.Run("Exclusion with Error in Left Operation", func(t *testing.T) { // Create schema with exclusion where left operation references non-existent relation - docDef := namespace.Namespace("document", + docDef := namespace.Namespace( + "document", namespace.MustRelation("viewer", nil, namespace.AllowedRelation("user", "...")), - namespace.MustRelation("bad_exclusion", + namespace.MustRelation( + "bad_exclusion", namespace.Exclusion( namespace.ComputedUserset("nonexistent_relation"), namespace.ComputedUserset("viewer"), @@ -439,9 +454,11 @@ func TestBuildTreeExclusionEdgeCases(t *testing.T) { t.Run("Exclusion with Error in Right Operation", func(t *testing.T) { // Create schema with exclusion where right operation references non-existent relation - docDef := namespace.Namespace("document", + docDef := namespace.Namespace( + "document", namespace.MustRelation("viewer", nil, namespace.AllowedRelation("user", "...")), - namespace.MustRelation("bad_exclusion", + namespace.MustRelation( + "bad_exclusion", namespace.Exclusion( namespace.ComputedUserset("viewer"), namespace.ComputedUserset("nonexistent_relation"), @@ -466,8 +483,10 @@ func TestBuildTreeArrowMissingLeftRelation(t *testing.T) { // Create a schema with an arrow that references a non-existent left relation userDef := testfixtures.UserNS.CloneVT() - docDef := namespace.Namespace("document", - namespace.MustRelation("bad_arrow", + docDef := namespace.Namespace( + "document", + namespace.MustRelation( + "bad_arrow", namespace.Union( namespace.TupleToUserset("nonexistent", "view"), ), @@ -525,13 +544,16 @@ func TestBuildTreeSubrelationHandling(t *testing.T) { ctx := NewLocalContext(t.Context(), WithRevisionedReader(datalayer.NewDataLayer(ds).SnapshotReader(revision, datalayer.NoSchemaHashForTesting))) // Test that base relations with ellipsis (group:...) work correctly with arrows - groupDef := namespace.Namespace("group", + groupDef := namespace.Namespace( + "group", namespace.MustRelation("member", nil, namespace.AllowedRelation("user", "...")), ) - docDef := namespace.Namespace("document", + docDef := namespace.Namespace( + "document", namespace.MustRelation("parent", nil, namespace.AllowedRelation("group", "...")), // Ellipsis on group - namespace.MustRelation("viewer", + namespace.MustRelation( + "viewer", namespace.Union( namespace.TupleToUserset("parent", "member"), // Arrow to group's member relation ), @@ -561,14 +583,17 @@ func TestBuildTreeSubrelationHandling(t *testing.T) { ctx := NewLocalContext(t.Context(), WithRevisionedReader(datalayer.NewDataLayer(ds).SnapshotReader(revision, datalayer.NoSchemaHashForTesting))) // Create schema with specific subrelation that should create union with arrow - groupDef := namespace.Namespace("group", + groupDef := namespace.Namespace( + "group", namespace.MustRelation("member", nil, namespace.AllowedRelation("user", "...")), namespace.MustRelation("admin", nil, namespace.AllowedRelation("user", "...")), ) - docDef := namespace.Namespace("document", + docDef := namespace.Namespace( + "document", namespace.MustRelation("parent", nil, namespace.AllowedRelation("group", "...")), - namespace.MustRelation("viewer", + namespace.MustRelation( + "viewer", namespace.Union( namespace.TupleToUserset("parent", "admin"), // This should create arrow from parent to admin ), @@ -594,9 +619,11 @@ func TestBuildTreeSubrelationHandling(t *testing.T) { t.Run("Base Relation Without Subrelations Disabled", func(t *testing.T) { // Test base relation iterator with withSubRelations = false // This hits the buildBaseDatastoreIterator path where subrelations are disabled - docDef := namespace.Namespace("document", + docDef := namespace.Namespace( + "document", namespace.MustRelation("parent", nil, namespace.AllowedRelation("document", "...")), - namespace.MustRelation("viewer", + namespace.MustRelation( + "viewer", namespace.Union( namespace.TupleToUserset("parent", "viewer"), // Arrow operation disables subrelations ), @@ -619,14 +646,17 @@ func TestBuildTreeSubrelationHandling(t *testing.T) { t.Run("Base Relation with Missing Subrelation Definition", func(t *testing.T) { // Create schema where base relation references a subrelation that doesn't exist in target - groupDef := namespace.Namespace("group", + groupDef := namespace.Namespace( + "group", namespace.MustRelation("member", nil, namespace.AllowedRelation("user", "...")), // Missing "nonexistent" relation ) - docDef := namespace.Namespace("document", + docDef := namespace.Namespace( + "document", namespace.MustRelation("parent", nil, namespace.AllowedRelation("group", "...")), - namespace.MustRelation("viewer", + namespace.MustRelation( + "viewer", namespace.Union( namespace.TupleToUserset("parent", "nonexistent"), // References non-existent relation ), @@ -647,15 +677,18 @@ func TestBuildTreeSubrelationHandling(t *testing.T) { ctx := NewLocalContext(t.Context(), WithRevisionedReader(datalayer.NewDataLayer(ds).SnapshotReader(revision, datalayer.NoSchemaHashForTesting))) // Test relation with multiple base relations, some with subrelations, some without - groupDef := namespace.Namespace("group", + groupDef := namespace.Namespace( + "group", namespace.MustRelation("member", nil, namespace.AllowedRelation("user", "...")), namespace.MustRelation("admin", nil, namespace.AllowedRelation("user", "...")), ) - docDef := namespace.Namespace("document", + docDef := namespace.Namespace( + "document", namespace.MustRelation("owner", nil, namespace.AllowedRelation("user", "...")), // Simple relation without subrelations namespace.MustRelation("parent", nil, namespace.AllowedRelation("group", "...")), - namespace.MustRelation("viewer", + namespace.MustRelation( + "viewer", namespace.Union( namespace.ComputedUserset("owner"), // Direct relation namespace.TupleToUserset("parent", "admin"), // Arrow with subrelation @@ -744,7 +777,8 @@ func TestBuildTreeWildcardIterator(t *testing.T) { // Create a schema with both wildcard and regular relations mixedDocDef := namespace.Namespace( "document", - namespace.MustRelation("viewer", nil, + namespace.MustRelation( + "viewer", nil, namespace.AllowedRelation("user", ""), // Regular relation namespace.AllowedPublicNamespace("user"), // Wildcard relation ), @@ -779,24 +813,30 @@ func TestBuildTreeMutualRecursionSentinelFiltering(t *testing.T) { // This is the exact scenario from walkbackandforth.yaml userDef := testfixtures.UserNS.CloneVT() - otherdocumentDef := namespace.Namespace("otherdocument", - namespace.MustRelation("viewer", nil, + otherdocumentDef := namespace.Namespace( + "otherdocument", + namespace.MustRelation( + "viewer", nil, namespace.AllowedRelation("user", "..."), namespace.AllowedRelation("document", "viewer"), ), - namespace.MustRelation("view", + namespace.MustRelation( + "view", namespace.Union( namespace.ComputedUserset("viewer"), ), ), ) - documentDef := namespace.Namespace("document", - namespace.MustRelation("viewer", nil, + documentDef := namespace.Namespace( + "document", + namespace.MustRelation( + "viewer", nil, namespace.AllowedRelation("user", "..."), namespace.AllowedRelation("otherdocument", "viewer"), ), - namespace.MustRelation("view", + namespace.MustRelation( + "view", namespace.Union( namespace.ComputedUserset("viewer"), ), diff --git a/pkg/query/datastore.go b/pkg/query/datastore.go index edca44b449..6d7fdd4d0f 100644 --- a/pkg/query/datastore.go +++ b/pkg/query/datastore.go @@ -77,7 +77,8 @@ func (r *DatastoreIterator) checkNormalImpl(ctx *Context, resource Object, subje } resourceType := ObjectType{Type: r.base.DefinitionName()} - pathSeq, err := ctx.Reader.CheckRelationships(ctx, + pathSeq, err := ctx.Reader.CheckRelationships( + ctx, resourceType, resource.ObjectID, r.base.RelationName(), @@ -117,7 +118,8 @@ func (r *DatastoreIterator) checkWildcardImpl(ctx *Context, resource Object, sub } resourceType := ObjectType{Type: r.base.DefinitionName()} - pathSeq, err := ctx.Reader.CheckRelationships(ctx, + pathSeq, err := ctx.Reader.CheckRelationships( + ctx, resourceType, resource.ObjectID, r.base.RelationName(), @@ -155,7 +157,8 @@ func (r *DatastoreIterator) iterSubjectsNormalImpl(ctx *Context, resource Object // If pagination is not configured, do the simple eager collection if ctx.PaginationLimit == nil { - pathSeq, err := ctx.Reader.QuerySubjects(ctx, + pathSeq, err := ctx.Reader.QuerySubjects( + ctx, resource, r.base.RelationName(), subjectType, @@ -180,7 +183,8 @@ func (r *DatastoreIterator) iterSubjectsNormalImpl(ctx *Context, resource Object cursor := ctx.GetPaginationCursor(iteratorID) for { - pathSeq, err := ctx.Reader.QuerySubjects(ctx, + pathSeq, err := ctx.Reader.QuerySubjects( + ctx, resource, r.base.RelationName(), subjectType, @@ -238,7 +242,8 @@ func (r *DatastoreIterator) iterSubjectsWildcardImpl(ctx *Context, resource Obje } resourceType := ObjectType{Type: r.base.DefinitionName()} - return ctx.Reader.CheckRelationships(ctx, + return ctx.Reader.CheckRelationships( + ctx, resourceType, resource.ObjectID, r.base.RelationName(), @@ -272,7 +277,8 @@ func (r *DatastoreIterator) IterResourcesImpl(ctx *Context, subject ObjectAndRel } if ctx.PaginationLimit == nil { - pathSeq, err := ctx.Reader.QueryResources(ctx, + pathSeq, err := ctx.Reader.QueryResources( + ctx, r.base.DefinitionName(), r.base.RelationName(), subject, @@ -295,7 +301,8 @@ func (r *DatastoreIterator) IterResourcesImpl(ctx *Context, subject ObjectAndRel cursor := ctx.GetPaginationCursor(iteratorID) for { - pathSeq, err := ctx.Reader.QueryResources(ctx, + pathSeq, err := ctx.Reader.QueryResources( + ctx, r.base.DefinitionName(), r.base.RelationName(), subject, @@ -352,7 +359,8 @@ func (r *DatastoreIterator) iterResourcesWildcardImpl(ctx *Context, subject Obje } if ctx.PaginationLimit == nil { - pathSeq, err := ctx.Reader.QueryResources(ctx, + pathSeq, err := ctx.Reader.QueryResources( + ctx, r.base.DefinitionName(), r.base.RelationName(), wildcardSubject, @@ -376,7 +384,8 @@ func (r *DatastoreIterator) iterResourcesWildcardImpl(ctx *Context, subject Obje cursor := ctx.GetPaginationCursor(iteratorID) for { - pathSeq, err := ctx.Reader.QueryResources(ctx, + pathSeq, err := ctx.Reader.QueryResources( + ctx, r.base.DefinitionName(), r.base.RelationName(), wildcardSubject, diff --git a/pkg/query/queryopt/alias_chain_collapse_test.go b/pkg/query/queryopt/alias_chain_collapse_test.go index fe4ef20e61..0b851dca0a 100644 --- a/pkg/query/queryopt/alias_chain_collapse_test.go +++ b/pkg/query/queryopt/alias_chain_collapse_test.go @@ -35,7 +35,8 @@ func applyCollapse(outline query.Outline) query.Outline { func TestAliasChainCollapse(t *testing.T) { t.Run("collapses two-level alias chain", func(t *testing.T) { // Alias("viewer")(Alias("owner")(DS)) - input := aliasOutline("viewer", + input := aliasOutline( + "viewer", aliasOutline("owner", dsOutlineNoCaveat()), ) @@ -53,8 +54,10 @@ func TestAliasChainCollapse(t *testing.T) { t.Run("collapses three-level alias chain", func(t *testing.T) { // Alias("perm")(Alias("viewer")(Alias("owner")(DS))) - input := aliasOutline("perm", - aliasOutline("viewer", + input := aliasOutline( + "perm", + aliasOutline( + "viewer", aliasOutline("owner", dsOutlineNoCaveat()), ), ) @@ -136,7 +139,8 @@ func TestAliasChainCollapse(t *testing.T) { }) t.Run("clears outer node ID so canonical key gets recomputed", func(t *testing.T) { - outer := aliasOutline("viewer", + outer := aliasOutline( + "viewer", aliasOutline("owner", dsOutlineNoCaveat()), ) outer.ID = 100 @@ -177,7 +181,8 @@ func TestAliasChainCollapseViaRegister(t *testing.T) { transform := opt.NewTransform(RequestParams{}) - input := aliasOutline("outer", + input := aliasOutline( + "outer", aliasOutline("inner", dsOutlineNoCaveat()), ) diff --git a/pkg/query/reader.go b/pkg/query/reader.go index 1d59d4099b..cad526dcfd 100644 --- a/pkg/query/reader.go +++ b/pkg/query/reader.go @@ -136,7 +136,8 @@ func (r *datalayerQueryDatastoreReader) CheckRelationships( }, } - relIter, err := r.inner.QueryRelationships(ctx, filter, + relIter, err := r.inner.QueryRelationships( + ctx, filter, options.WithSkipCaveats(!withCaveats), options.WithSkipExpiration(!withExpiration), options.WithQueryShape(queryshape.CheckPermissionSelectDirectSubjects), @@ -191,7 +192,8 @@ func (r *datalayerQueryDatastoreReader) QuerySubjects( options.WithQueryShape(shape), } if page.Limit != nil { - queryOpts = append(queryOpts, + queryOpts = append( + queryOpts, options.WithLimit(page.Limit), options.WithSort(options.ChooseEfficient), ) @@ -233,7 +235,8 @@ func (r *datalayerQueryDatastoreReader) QueryResources( options.WithQueryShape(queryshape.MatchingResourcesForSubject), } if page.Limit != nil { - queryOpts = append(queryOpts, + queryOpts = append( + queryOpts, options.WithLimit(page.Limit), options.WithSort(options.ChooseEfficient), ) @@ -265,7 +268,8 @@ func (r *datalayerQueryDatastoreReader) SubjectExistsAsRelationship( OptionalExpirationOption: datastore.ExpirationFilterOptionNone, } - relIter, err := r.inner.QueryRelationships(ctx, filter, + relIter, err := r.inner.QueryRelationships( + ctx, filter, options.WithLimit(&limitOne), options.WithSkipExpiration(true), ) diff --git a/pkg/query/trace.go b/pkg/query/trace.go index 00e87c9a47..ce52149ff3 100644 --- a/pkg/query/trace.go +++ b/pkg/query/trace.go @@ -59,7 +59,8 @@ func (t *TraceLogger) EnterIterator(it Iterator, traceString string) { indent := strings.Repeat(" ", t.depth) idPrefix := iteratorIDPrefix(it) - t.appendTrace(fmt.Sprintf("%s-> %s: %s", + t.appendTrace(fmt.Sprintf( + "%s-> %s: %s", indent, idPrefix, traceString, diff --git a/pkg/query/tracing_test.go b/pkg/query/tracing_test.go index 4ab861bdce..405e7c8c12 100644 --- a/pkg/query/tracing_test.go +++ b/pkg/query/tracing_test.go @@ -10,7 +10,8 @@ func TestIteratorTracing(t *testing.T) { // Create a test context with TraceLogger traceLogger := NewTraceLogger() - ctx := NewLocalContext(t.Context(), + ctx := NewLocalContext( + t.Context(), WithTraceLogger(traceLogger), ) diff --git a/pkg/query/wildcard_arrow_test.go b/pkg/query/wildcard_arrow_test.go index 8458fa517e..4f54f77aa3 100644 --- a/pkg/query/wildcard_arrow_test.go +++ b/pkg/query/wildcard_arrow_test.go @@ -32,7 +32,8 @@ const arrowWildcardSchema = ` // calls IterResources on the right side to find any intermediate of the // matching type that satisfies the target subject. func TestArrowIterator_WildcardInversion_Check(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, arrowWildcardSchema, + ds, rev, dsSchema := setupTestDB( + t, arrowWildcardSchema, // doc1 grants parent via wildcard — any folder matches. "document:doc1#parent@folder:*", // A concrete folder where alice is a viewer. @@ -52,7 +53,8 @@ func TestArrowIterator_WildcardInversion_Check(t *testing.T) { right := NewDatastoreIterator(viewerRel.BaseRelations()[0]) arrow := NewArrowIterator(left, right) - ctx := NewLocalContext(t.Context(), + ctx := NewLocalContext( + t.Context(), WithRevisionedReader(datalayer.NewDataLayer(ds).SnapshotReader(rev, datalayer.NoSchemaHashForTesting)), WithTraceLogger(NewTraceLogger()), ) @@ -70,7 +72,8 @@ func TestArrowIterator_WildcardInversion_Check(t *testing.T) { // TestArrowIterator_WildcardInversion_Check_NoConcreteMatch verifies the negative // case: wildcard on the left, but no concrete intermediate has the target subject. func TestArrowIterator_WildcardInversion_Check_NoConcreteMatch(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, arrowWildcardSchema, + ds, rev, dsSchema := setupTestDB( + t, arrowWildcardSchema, "document:doc1#parent@folder:*", "folder:shared#viewer@user:alice", ) @@ -87,7 +90,8 @@ func TestArrowIterator_WildcardInversion_Check_NoConcreteMatch(t *testing.T) { right := NewDatastoreIterator(viewerRel.BaseRelations()[0]) arrow := NewArrowIterator(left, right) - ctx := NewLocalContext(t.Context(), + ctx := NewLocalContext( + t.Context(), WithRevisionedReader(datalayer.NewDataLayer(ds).SnapshotReader(rev, datalayer.NoSchemaHashForTesting)), ) @@ -102,7 +106,8 @@ func TestArrowIterator_WildcardInversion_Check_NoConcreteMatch(t *testing.T) { // to expand. This mirrors the traditional dispatch path's behavior — wildcard // tupleset entries are not followed through arrows during subject enumeration. func TestArrowIterator_WildcardSkip_IterSubjects(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, arrowWildcardSchema, + ds, rev, dsSchema := setupTestDB( + t, arrowWildcardSchema, "document:doc1#parent@folder:*", "document:doc1#parent@folder:concrete", "folder:concrete#viewer@user:alice", @@ -131,7 +136,8 @@ func TestArrowIterator_WildcardSkip_IterSubjects(t *testing.T) { // the right side; a wildcard on the left uses the same IterResources inversion // strategy as the regular arrow. func TestIntersectionArrowIterator_WildcardInversion_Check(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, arrowWildcardSchema, + ds, rev, dsSchema := setupTestDB( + t, arrowWildcardSchema, // Only the wildcard parent exists — no concrete parents. "document:doc1#parent@folder:*", "folder:shared#viewer@user:alice", @@ -149,7 +155,8 @@ func TestIntersectionArrowIterator_WildcardInversion_Check(t *testing.T) { right := NewDatastoreIterator(viewerRel.BaseRelations()[0]) iarrow := NewIntersectionArrowIterator(left, right) - ctx := NewLocalContext(t.Context(), + ctx := NewLocalContext( + t.Context(), WithRevisionedReader(datalayer.NewDataLayer(ds).SnapshotReader(rev, datalayer.NoSchemaHashForTesting)), ) @@ -161,7 +168,8 @@ func TestIntersectionArrowIterator_WildcardInversion_Check(t *testing.T) { // TestIntersectionArrowIterator_WildcardSkip_IterSubjects verifies the // parallel skip branch in IntersectionArrowIterator.IterSubjectsImpl. func TestIntersectionArrowIterator_WildcardSkip_IterSubjects(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, arrowWildcardSchema, + ds, rev, dsSchema := setupTestDB( + t, arrowWildcardSchema, "document:doc1#parent@folder:*", "document:doc1#parent@folder:concrete", "folder:concrete#viewer@user:alice", diff --git a/pkg/query/wildcard_datastore_test.go b/pkg/query/wildcard_datastore_test.go index 72628a5193..5f82e140a0 100644 --- a/pkg/query/wildcard_datastore_test.go +++ b/pkg/query/wildcard_datastore_test.go @@ -21,7 +21,8 @@ func TestDatastoreIterator_CheckWildcard(t *testing.T) { relation viewer: user | user:* } ` - ds, rev, dsSchema := setupTestDB(t, sc, + ds, rev, dsSchema := setupTestDB( + t, sc, "resource:doc1#viewer@user:*", ) @@ -30,12 +31,14 @@ func TestDatastoreIterator_CheckWildcard(t *testing.T) { // BaseRelations[1] is the user:* wildcard branch (BaseRelations[0] is user). wildcardBase := NewDatastoreIterator(viewerRel.BaseRelations()[1]) - ctx := NewLocalContext(t.Context(), + ctx := NewLocalContext( + t.Context(), WithRevisionedReader(datalayer.NewDataLayer(ds).SnapshotReader(rev, datalayer.NoSchemaHashForTesting)), ) t.Run("ConcreteSubjectMatchesViaWildcard", func(t *testing.T) { - path, err := ctx.Check(wildcardBase, + path, err := ctx.Check( + wildcardBase, NewObject("resource", "doc1"), NewObject("user", "alice").WithEllipses(), ) @@ -46,7 +49,8 @@ func TestDatastoreIterator_CheckWildcard(t *testing.T) { }) t.Run("ConcreteSubjectMissesWhenNoWildcardRow", func(t *testing.T) { - path, err := ctx.Check(wildcardBase, + path, err := ctx.Check( + wildcardBase, NewObject("resource", "nonexistent"), NewObject("user", "alice").WithEllipses(), ) @@ -68,7 +72,8 @@ func TestDatastoreIterator_IterSubjectsWildcard(t *testing.T) { relation viewer: user | user:* } ` - ds, rev, dsSchema := setupTestDB(t, sc, + ds, rev, dsSchema := setupTestDB( + t, sc, "resource:doc1#viewer@user:*", ) @@ -76,7 +81,8 @@ func TestDatastoreIterator_IterSubjectsWildcard(t *testing.T) { viewerRel, _ := resourceDef.GetRelation("viewer") wildcardBase := NewDatastoreIterator(viewerRel.BaseRelations()[1]) - ctx := NewLocalContext(t.Context(), + ctx := NewLocalContext( + t.Context(), WithRevisionedReader(datalayer.NewDataLayer(ds).SnapshotReader(rev, datalayer.NoSchemaHashForTesting)), ) @@ -103,7 +109,8 @@ func TestDatastoreIterator_IterSubjectsWildcard_Empty(t *testing.T) { } ` // Note: no wildcard relationship. - ds, rev, dsSchema := setupTestDB(t, sc, + ds, rev, dsSchema := setupTestDB( + t, sc, "resource:doc1#viewer@user:alice", ) @@ -111,7 +118,8 @@ func TestDatastoreIterator_IterSubjectsWildcard_Empty(t *testing.T) { viewerRel, _ := resourceDef.GetRelation("viewer") wildcardBase := NewDatastoreIterator(viewerRel.BaseRelations()[1]) - ctx := NewLocalContext(t.Context(), + ctx := NewLocalContext( + t.Context(), WithRevisionedReader(datalayer.NewDataLayer(ds).SnapshotReader(rev, datalayer.NoSchemaHashForTesting)), ) tripTopLevel(t, ctx, NewObject("resource", "doc1")) @@ -134,7 +142,8 @@ func TestDatastoreIterator_IterResourcesWildcard(t *testing.T) { relation viewer: user | user:* } ` - ds, rev, dsSchema := setupTestDB(t, sc, + ds, rev, dsSchema := setupTestDB( + t, sc, "resource:doc1#viewer@user:*", "resource:doc2#viewer@user:*", ) @@ -143,7 +152,8 @@ func TestDatastoreIterator_IterResourcesWildcard(t *testing.T) { viewerRel, _ := resourceDef.GetRelation("viewer") wildcardBase := NewDatastoreIterator(viewerRel.BaseRelations()[1]) - ctx := NewLocalContext(t.Context(), + ctx := NewLocalContext( + t.Context(), WithRevisionedReader(datalayer.NewDataLayer(ds).SnapshotReader(rev, datalayer.NoSchemaHashForTesting)), ) diff --git a/pkg/query/wildcard_multirelation_test.go b/pkg/query/wildcard_multirelation_test.go index 942e94817c..3c51361eed 100644 --- a/pkg/query/wildcard_multirelation_test.go +++ b/pkg/query/wildcard_multirelation_test.go @@ -51,7 +51,8 @@ func TestIterSubjectsWildcardWithMultipleRelations(t *testing.T) { // - document:publicdoc#viewer@user:* (wildcard on viewer) // - document:publicdoc#viewer@user:tom (concrete user on viewer) // - document:publicdoc#banned@user:fred (concrete user on banned - should NOT appear in viewer results) - revision, err := common.WriteRelationships(ctx, rawDS, tuple.UpdateOperationCreate, + revision, err := common.WriteRelationships( + ctx, rawDS, tuple.UpdateOperationCreate, tuple.MustParse("document:publicdoc#viewer@user:*"), tuple.MustParse("document:publicdoc#viewer@user:tom"), tuple.MustParse("document:publicdoc#banned@user:fred"), diff --git a/pkg/query/wildcard_propagation_test.go b/pkg/query/wildcard_propagation_test.go index 05a90dd412..bba0ddcf23 100644 --- a/pkg/query/wildcard_propagation_test.go +++ b/pkg/query/wildcard_propagation_test.go @@ -53,7 +53,8 @@ func setupTestDB(t *testing.T, schemaText string, rels ...string) (datastore.Dat // collectSubjectIDs runs IterSubjects on the given iterator and returns the subject IDs. func collectSubjectIDs(t *testing.T, ctx context.Context, ds datastore.Datastore, rev datastore.Revision, it Iterator, resource Object) []string { t.Helper() - qctx := NewLocalContext(ctx, + qctx := NewLocalContext( + ctx, WithRevisionedReader(datalayer.NewDataLayer(ds).SnapshotReader(rev, datalayer.NoSchemaHashForTesting)), WithTraceLogger(NewTraceLogger()), ) @@ -75,7 +76,8 @@ func collectSubjectIDs(t *testing.T, ctx context.Context, ds datastore.Datastore // Schema: permission view = viewer & reader // Where viewer has user:* and reader has concrete users. func TestIntersectionWithWildcard(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, ` + ds, rev, dsSchema := setupTestDB( + t, ` definition user {} definition resource { relation viewer: user | user:* @@ -111,7 +113,8 @@ func TestIntersectionWithWildcard(t *testing.T) { // TestIntersectionBothWildcards tests intersection when both sides have wildcards. func TestIntersectionBothWildcards(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, ` + ds, rev, dsSchema := setupTestDB( + t, ` definition user {} definition resource { relation viewer: user | user:* @@ -153,7 +156,8 @@ func TestIntersectionBothWildcards(t *testing.T) { // TestExclusionWithWildcardExcluded tests that a wildcard in the excluded set // correctly excludes all concrete subjects from the main set. func TestExclusionWithWildcardExcluded(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, ` + ds, rev, dsSchema := setupTestDB( + t, ` definition user {} definition resource { relation viewer: user @@ -190,7 +194,8 @@ func TestExclusionWithWildcardExcluded(t *testing.T) { // passes through when the excluded set only has concrete subjects. // The wildcard is stripped at the top level. func TestExclusionWildcardMinusConcrete(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, ` + ds, rev, dsSchema := setupTestDB( + t, ` definition user {} definition resource { relation viewer: user | user:* @@ -232,7 +237,8 @@ func TestExclusionWildcardMinusConcrete(t *testing.T) { // where viewer=*, maybebanned=*, notreallybanned={sarah} // Expected: sarah escapes the ban → sarah can view. func TestNestedExclusionWithWildcards(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, ` + ds, rev, dsSchema := setupTestDB( + t, ` definition user {} definition resource { relation viewer: user | user:* @@ -284,7 +290,8 @@ func TestNestedExclusionWithWildcards(t *testing.T) { // TestTopLevelFilterStripsWildcards ensures that wildcards propagate internally // but are stripped before reaching the caller. func TestTopLevelFilterStripsWildcards(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, ` + ds, rev, dsSchema := setupTestDB( + t, ` definition user {} definition resource { relation viewer: user | user:* @@ -311,7 +318,8 @@ func TestTopLevelFilterStripsWildcards(t *testing.T) { // TestWildcardInUnionWithConcrete tests that wildcards in a union coexist // with concrete subjects — concrete subjects survive the top-level filter. func TestWildcardInUnionWithConcrete(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, ` + ds, rev, dsSchema := setupTestDB( + t, ` definition user {} definition resource { relation viewer: user | user:* @@ -338,7 +346,8 @@ func TestWildcardInUnionWithConcrete(t *testing.T) { // TestIntersectionWildcardWithExclusion tests the combined scenario: // permission view = (viewer & reader) where viewer=* and reader has concrete + exclusion. func TestIntersectionWildcardWithExclusion(t *testing.T) { - ds, rev, dsSchema := setupTestDB(t, ` + ds, rev, dsSchema := setupTestDB( + t, ` definition user {} definition resource { relation viewer: user | user:* diff --git a/pkg/query/wildcard_subjects_test.go b/pkg/query/wildcard_subjects_test.go index d911caccf7..8f31bc895d 100644 --- a/pkg/query/wildcard_subjects_test.go +++ b/pkg/query/wildcard_subjects_test.go @@ -47,7 +47,8 @@ func TestIterSubjectsWithWildcard(t *testing.T) { // Write test data: // - resource:first#viewer@user:* (wildcard) // - resource:first#viewer@user:concrete (concrete user) - revision, err := common.WriteRelationships(ctx, rawDS, tuple.UpdateOperationCreate, + revision, err := common.WriteRelationships( + ctx, rawDS, tuple.UpdateOperationCreate, tuple.MustParse("resource:first#viewer@user:*"), tuple.MustParse("resource:first#viewer@user:concrete"), ) @@ -148,7 +149,8 @@ func TestIterSubjectsWildcardWithoutWildcardRelationship(t *testing.T) { require.NoError(err) // Write test data with ONLY concrete users, NO wildcard - revision, err := common.WriteRelationships(ctx, rawDS, tuple.UpdateOperationCreate, + revision, err := common.WriteRelationships( + ctx, rawDS, tuple.UpdateOperationCreate, tuple.MustParse("resource:second#viewer@user:alice"), tuple.MustParse("resource:second#viewer@user:bob"), ) diff --git a/pkg/schema/definition_test.go b/pkg/schema/definition_test.go index 68550a2f60..13c678a94e 100644 --- a/pkg/schema/definition_test.go +++ b/pkg/schema/definition_test.go @@ -141,12 +141,14 @@ func TestDefinition(t *testing.T) { ns.Namespace( "document", ns.MustRelation("owner", nil, ns.AllowedRelation("user", "...")), - ns.MustRelation("can_comment", + ns.MustRelation( + "can_comment", nil, ns.AllowedRelation("user", "..."), ns.AllowedRelation("folder", "can_comment"), ), - ns.MustRelation("editor", + ns.MustRelation( + "editor", ns.Union( ns.ComputedUserset("owner"), ), @@ -326,7 +328,8 @@ func TestDefinition(t *testing.T) { "valid all the caveats", ns.Namespace( "document", - ns.MustRelation("viewer", nil, + ns.MustRelation( + "viewer", nil, ns.AllowedRelation("user", "..."), ns.AllowedRelationWithCaveat("user", "...", ns.AllowedCaveat("definedcaveat")), ns.AllowedPublicNamespaceWithCaveat("user", ns.AllowedCaveat("definedcaveat")), @@ -335,7 +338,8 @@ func TestDefinition(t *testing.T) { ), []*core.NamespaceDefinition{ ns.Namespace("user"), - ns.Namespace("team", + ns.Namespace( + "team", ns.MustRelation("member", nil), ), }, @@ -348,14 +352,16 @@ func TestDefinition(t *testing.T) { "valid expiration", ns.Namespace( "document", - ns.MustRelation("viewer", nil, + ns.MustRelation( + "viewer", nil, ns.AllowedRelationWithExpiration("user", "..."), ns.AllowedRelationWithCaveat("user", "...", ns.AllowedCaveat("definedcaveat")), ), ), []*core.NamespaceDefinition{ ns.Namespace("user"), - ns.Namespace("team", + ns.Namespace( + "team", ns.MustRelation("member", nil), ), }, @@ -368,14 +374,16 @@ func TestDefinition(t *testing.T) { "duplicate expiration", ns.Namespace( "document", - ns.MustRelation("viewer", nil, + ns.MustRelation( + "viewer", nil, ns.AllowedRelationWithExpiration("user", "..."), ns.AllowedRelationWithExpiration("user", "..."), ), ), []*core.NamespaceDefinition{ ns.Namespace("user"), - ns.Namespace("team", + ns.Namespace( + "team", ns.MustRelation("member", nil), ), }, @@ -388,14 +396,16 @@ func TestDefinition(t *testing.T) { "non-duplicate expiration", ns.Namespace( "document", - ns.MustRelation("viewer", nil, + ns.MustRelation( + "viewer", nil, ns.AllowedRelationWithExpiration("user", "..."), ns.AllowedRelationWithExpiration("team", "..."), ), ), []*core.NamespaceDefinition{ ns.Namespace("user"), - ns.Namespace("team", + ns.Namespace( + "team", ns.MustRelation("member", nil), ), }, diff --git a/pkg/schema/typesystem_test.go b/pkg/schema/typesystem_test.go index cacc59ec62..446e7d5623 100644 --- a/pkg/schema/typesystem_test.go +++ b/pkg/schema/typesystem_test.go @@ -20,13 +20,15 @@ func TestTypeSystemConcurrency(t *testing.T) { Definitions: []*core.NamespaceDefinition{ ns.Namespace( "document", - ns.MustRelation("viewer", nil, + ns.MustRelation( + "viewer", nil, ns.AllowedRelationWithExpiration("user", "..."), ns.AllowedRelationWithCaveat("user", "...", ns.AllowedCaveat("definedcaveat")), ), ), ns.Namespace("user"), - ns.Namespace("team", + ns.Namespace( + "team", ns.MustRelation("member", nil), ), }, @@ -188,18 +190,23 @@ func TestDirectPossibleTraitsForFilter(t *testing.T) { setup := &PredefinedElements{ Definitions: []*core.NamespaceDefinition{ ns.Namespace("user"), - ns.Namespace("resource", - ns.MustRelation("viewer", nil, + ns.Namespace( + "resource", + ns.MustRelation( + "viewer", nil, ns.AllowedRelation("user", "..."), ), - ns.MustRelation("editor", nil, + ns.MustRelation( + "editor", nil, ns.AllowedRelation("user", "..."), ns.AllowedRelationWithCaveat("user", "...", ns.AllowedCaveat("somecaveat")), ), - ns.MustRelation("admin", nil, + ns.MustRelation( + "admin", nil, ns.AllowedRelationWithExpiration("user", "..."), ), - ns.MustRelation("owner", nil, + ns.MustRelation( + "owner", nil, ns.AllowedRelationWithCaveat("user", "...", ns.AllowedCaveat("somecaveat")), ns.AllowedRelationWithExpiration("user", "..."), ), @@ -403,32 +410,41 @@ func TestPossibleTraitsForFilter(t *testing.T) { setup := &PredefinedElements{ Definitions: []*core.NamespaceDefinition{ ns.Namespace("user"), - ns.Namespace("group", + ns.Namespace( + "group", ns.MustRelation("member", nil, ns.AllowedRelation("user", "...")), ), - ns.Namespace("resource", - ns.MustRelation("viewer", nil, + ns.Namespace( + "resource", + ns.MustRelation( + "viewer", nil, ns.AllowedRelation("user", "..."), ), - ns.MustRelation("editor", nil, + ns.MustRelation( + "editor", nil, ns.AllowedRelation("user", "..."), ns.AllowedRelationWithCaveat("user", "...", ns.AllowedCaveat("somecaveat")), ), - ns.MustRelation("admin", nil, + ns.MustRelation( + "admin", nil, ns.AllowedRelationWithExpiration("user", "..."), ), - ns.MustRelation("owner", nil, + ns.MustRelation( + "owner", nil, ns.AllowedRelationWithCaveat("user", "...", ns.AllowedCaveat("somecaveat")), ns.AllowedRelationWithExpiration("user", "..."), ns.AllowedRelationWithCaveatAndExpiration("user", "...", ns.AllowedCaveat("somecaveat")), ), ), - ns.Namespace("document", - ns.MustRelation("viewer", nil, + ns.Namespace( + "document", + ns.MustRelation( + "viewer", nil, ns.AllowedRelation("user", "..."), ns.AllowedRelation("group", "member"), ), - ns.MustRelation("editor", nil, + ns.MustRelation( + "editor", nil, ns.AllowedRelationWithCaveat("user", "...", ns.AllowedCaveat("somecaveat")), ns.AllowedRelationWithExpiration("group", "member"), ), diff --git a/pkg/schema/typesystem_validation.go b/pkg/schema/typesystem_validation.go index 126fbefc68..fc41695bd3 100644 --- a/pkg/schema/typesystem_validation.go +++ b/pkg/schema/typesystem_validation.go @@ -93,7 +93,8 @@ func (ts *TypeSystem) Validate(ctx context.Context, def *Definition) (*Validated if nspkg.GetRelationKind(found) == iv1.RelationMetadata_PERMISSION { return NewTypeWithSourceError( NewPermissionUsedOnLeftOfArrowErr(def.nsDef.Name, relation.Name, relationName), - childOneof, relationName), nil + childOneof, relationName, + ), nil } // Ensure the tupleset relation doesn't itself import wildcard. @@ -139,7 +140,8 @@ func (ts *TypeSystem) Validate(ctx context.Context, def *Definition) (*Validated if nspkg.GetRelationKind(found) == iv1.RelationMetadata_PERMISSION { return NewTypeWithSourceError( NewPermissionUsedOnLeftOfArrowErr(def.nsDef.Name, relation.Name, relationName), - childOneof, relationName), nil + childOneof, relationName, + ), nil } // Ensure the tupleset relation doesn't itself import wildcard. @@ -197,7 +199,8 @@ func (ts *TypeSystem) Validate(ctx context.Context, def *Definition) (*Validated // NOTE: This is a legacy error and should never really occur with schema. return nil, NewTypeWithSourceError( fmt.Errorf("direct relations are not allowed under relation `%s`", relation.Name), - relation, relation.Name) + relation, relation.Name, + ) } } diff --git a/pkg/schema/v2/walk.go b/pkg/schema/v2/walk.go index c07830bba4..db27a81753 100644 --- a/pkg/schema/v2/walk.go +++ b/pkg/schema/v2/walk.go @@ -630,7 +630,8 @@ func walkOperationPostOrder[T any](op Operation, v Visitor[T], value T, options return currentValue, errors.New( "TraverseArrowTargets requires a resolved schema. " + "Call ResolveSchema() on your schema before walking with arrow traversal enabled. " + - "Unresolved ArrowReference found: " + o.Left() + "->" + o.Right()) + "Unresolved ArrowReference found: " + o.Left() + "->" + o.Right(), + ) } // Terminal node - call visitors @@ -710,7 +711,8 @@ func walkOperationPostOrder[T any](op Operation, v Visitor[T], value T, options if options.schema == nil { return currentValue, errors.New( "TraverseArrowTargets requires a schema for target resolution. " + - "Arrow reference: " + o.Left() + "->" + o.Right()) + "Arrow reference: " + o.Left() + "->" + o.Right(), + ) } // Get the resolved left relation to find allowed subject types @@ -766,7 +768,8 @@ func walkOperationPostOrder[T any](op Operation, v Visitor[T], value T, options if options.schema == nil { return currentValue, errors.New( "TraverseArrowTargets requires a schema for target resolution. " + - "Functioned arrow reference: " + o.Left() + "->" + o.Right()) + "Functioned arrow reference: " + o.Left() + "->" + o.Right(), + ) } // Get the resolved left relation to find allowed subject types diff --git a/pkg/schema/v2/walk_arrow_test.go b/pkg/schema/v2/walk_arrow_test.go index 0507c51195..e176434a3b 100644 --- a/pkg/schema/v2/walk_arrow_test.go +++ b/pkg/schema/v2/walk_arrow_test.go @@ -60,7 +60,8 @@ func TestTraverseArrowTargets_Basic(t *testing.T) { require.NoError(t, err) visitor := &arrowTraversalVisitor{} - _, err = WalkSchemaWithOptions(resolved.Schema(), visitor, struct{}{}, + _, err = WalkSchemaWithOptions( + resolved.Schema(), visitor, struct{}{}, NewWalkOptions(). WithStrategy(WalkPostOrder). WithTraverseArrowTargets(resolved.Schema()).MustBuild(), @@ -107,7 +108,8 @@ func TestTraverseArrowTargets_RequiresPostOrder(t *testing.T) { require.NoError(t, err) visitor := &arrowTraversalVisitor{} - _, err = WalkSchemaWithOptions(resolved.Schema(), visitor, struct{}{}, + _, err = WalkSchemaWithOptions( + resolved.Schema(), visitor, struct{}{}, NewWalkOptions(). WithStrategy(WalkPreOrder). // PreOrder with TraverseArrowTargets should fail WithTraverseArrowTargets(schema).MustBuild(), @@ -150,7 +152,8 @@ func TestTraverseArrowTargets_MultipleTargets(t *testing.T) { require.NoError(t, err) visitor := &arrowTraversalVisitor{} - _, err = WalkSchemaWithOptions(resolved.Schema(), visitor, struct{}{}, + _, err = WalkSchemaWithOptions( + resolved.Schema(), visitor, struct{}{}, NewWalkOptions(). WithStrategy(WalkPostOrder). WithTraverseArrowTargets(resolved.Schema()).MustBuild(), @@ -195,7 +198,8 @@ func TestTraverseArrowTargets_CycleDetection(t *testing.T) { require.NoError(t, err) visitor := &arrowTraversalVisitor{} - _, err = WalkSchemaWithOptions(resolved.Schema(), visitor, struct{}{}, + _, err = WalkSchemaWithOptions( + resolved.Schema(), visitor, struct{}{}, NewWalkOptions(). WithStrategy(WalkPostOrder). WithTraverseArrowTargets(resolved.Schema()).MustBuild(), @@ -251,7 +255,8 @@ func TestTraverseArrowTargets_NestedArrows(t *testing.T) { require.NoError(t, err) visitor := &arrowTraversalVisitor{} - _, err = WalkSchemaWithOptions(resolved.Schema(), visitor, struct{}{}, + _, err = WalkSchemaWithOptions( + resolved.Schema(), visitor, struct{}{}, NewWalkOptions(). WithStrategy(WalkPostOrder). WithTraverseArrowTargets(resolved.Schema()).MustBuild(), @@ -302,7 +307,8 @@ func TestTraverseArrowTargets_DisabledByDefault(t *testing.T) { require.NoError(t, err) visitor := &arrowTraversalVisitor{} - _, err = WalkSchemaWithOptions(resolved.Schema(), visitor, struct{}{}, + _, err = WalkSchemaWithOptions( + resolved.Schema(), visitor, struct{}{}, NewWalkOptions().WithStrategy(WalkPostOrder).MustBuild(), // No WithTraverseArrowTargets - should not traverse arrow targets ) @@ -394,7 +400,8 @@ func TestTraverseArrowTargets_RequiresPostOrder_WalkPermission(t *testing.T) { visitor := &arrowTraversalVisitor{} // Test that WalkPermissionWithOptions also validates (not just WalkSchemaWithOptions) - _, err = WalkPermissionWithOptions(viewPerm, visitor, struct{}{}, + _, err = WalkPermissionWithOptions( + viewPerm, visitor, struct{}{}, NewWalkOptions(). WithStrategy(WalkPreOrder). // PreOrder with TraverseArrowTargets should fail WithTraverseArrowTargets(resolved.Schema()).MustBuild(), @@ -477,7 +484,8 @@ func TestTraverseArrowTargets_RequiresResolvedSchema(t *testing.T) { // DON'T resolve the schema - this should fail visitor := &arrowTraversalVisitor{} - _, err = WalkSchemaWithOptions(schema, visitor, struct{}{}, + _, err = WalkSchemaWithOptions( + schema, visitor, struct{}{}, NewWalkOptions(). WithStrategy(WalkPostOrder). WithTraverseArrowTargets(schema).MustBuild(), // Unresolved schema! @@ -523,7 +531,8 @@ func TestTraverseArrowTargets_IndividualPermissionWalk(t *testing.T) { // Walk ONLY the document#view permission (not the entire schema) with TraverseArrowTargets // This tests that visitedTargets map is properly initialized in WalkPermissionWithOptions - _, err = WalkPermissionWithOptions(viewPerm, visitor, struct{}{}, + _, err = WalkPermissionWithOptions( + viewPerm, visitor, struct{}{}, NewWalkOptions(). WithStrategy(WalkPostOrder). WithTraverseArrowTargets(resolved.Schema()).MustBuild(), @@ -585,7 +594,8 @@ func TestTraverseArrowTargets_IndividualRelationWalk(t *testing.T) { // Walk ONLY the document#parent relation with TraverseArrowTargets // This tests that visitedTargets map is properly initialized in WalkRelationWithOptions - _, err = WalkRelationWithOptions(parentRel, visitor, struct{}{}, + _, err = WalkRelationWithOptions( + parentRel, visitor, struct{}{}, NewWalkOptions(). WithStrategy(WalkPostOrder). WithTraverseArrowTargets(resolved.Schema()).MustBuild(), @@ -631,7 +641,8 @@ func TestTraverseArrowTargets_DirectOperationWalk(t *testing.T) { // Walk ONLY the operation directly (not the permission wrapper) with TraverseArrowTargets // This tests that visitedTargets map is properly initialized in WalkOperationWithOptions - _, err = WalkOperationWithOptions(viewPerm.Operation(), visitor, struct{}{}, + _, err = WalkOperationWithOptions( + viewPerm.Operation(), visitor, struct{}{}, NewWalkOptions(). WithStrategy(WalkPostOrder). WithTraverseArrowTargets(resolved.Schema()).MustBuild(), diff --git a/pkg/schemadsl/compiler/compiler_test.go b/pkg/schemadsl/compiler/compiler_test.go index 92addbb4e3..8091304e1a 100644 --- a/pkg/schemadsl/compiler/compiler_test.go +++ b/pkg/schemadsl/compiler/compiler_test.go @@ -81,8 +81,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foo", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foo", nil, namespace.AllowedRelation("sometenant/bar", "..."), ), ), @@ -103,8 +105,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("user", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "user", nil, namespace.AllowedRelation("sometenant/user", "..."), ), ), @@ -135,19 +139,24 @@ func TestCompile(t *testing.T) { []SchemaDefinition{ namespace.Namespace("sometenant/user"), namespace.Namespace("sometenant/organization"), - namespace.Namespace("sometenant/resource", - namespace.MustRelation("organization", nil, + namespace.Namespace( + "sometenant/resource", + namespace.MustRelation( + "organization", nil, namespace.AllowedRelation("sometenant/organization", "..."), ), - namespace.MustRelation("manage", + namespace.MustRelation( + "manage", namespace.Union( namespace.ComputedUserset("organization"), ), ), - namespace.MustRelation("user", nil, + namespace.MustRelation( + "user", nil, namespace.AllowedRelation("sometenant/user", "..."), ), - namespace.MustRelation("view", + namespace.MustRelation( + "view", namespace.Union( namespace.ComputedUserset("user"), ), @@ -170,8 +179,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("user", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "user", nil, namespace.AllowedRelation("sometenant/user", "..."), ), ), @@ -197,8 +208,10 @@ func TestCompile(t *testing.T) { `, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("user", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "user", nil, namespace.AllowedRelation("sometenant/user", "..."), ), ), @@ -224,8 +237,10 @@ func TestCompile(t *testing.T) { `, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("user", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "user", nil, namespace.AllowedRelation("sometenant/user", "..."), ), ), @@ -251,8 +266,10 @@ func TestCompile(t *testing.T) { `, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("user", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "user", nil, namespace.AllowedRelation("sometenant/user", "..."), ), ), @@ -283,11 +300,14 @@ func TestCompile(t *testing.T) { `, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("user", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "user", nil, namespace.AllowedRelation("sometenant/user", "..."), ), - namespace.MustRelation("group", nil, + namespace.MustRelation( + "group", nil, namespace.AllowedRelation("sometenant/group", "..."), ), ), @@ -384,8 +404,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", nil, namespace.AllowedRelation("sometenant/bars", "mehs"), ), ), @@ -399,8 +421,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", nil, namespace.AllowedPublicNamespace("sometenant/bars"), ), ), @@ -414,8 +438,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", nil, namespace.AllowedRelation("anothertenant/bars", "mehs"), ), ), @@ -430,11 +456,14 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", nil, namespace.AllowedRelation("sometenant/bars", "mehs"), ), - namespace.MustRelation("hello", nil, + namespace.MustRelation( + "hello", nil, namespace.AllowedRelation("sometenant/there", "..."), namespace.AllowedRelation("sometenant/world", "..."), ), @@ -456,8 +485,10 @@ func TestCompile(t *testing.T) { "someparam": caveattypes.Default.IntType, }, ), "sometenant/somecaveat", "someparam == 42"), - namespace.Namespace("sometenant/simple", - namespace.MustRelation("viewer", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "viewer", nil, namespace.AllowedRelationWithCaveat("sometenant/user", "...", namespace.AllowedCaveat("sometenant/somecaveat")), ), @@ -472,8 +503,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("viewer", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "viewer", nil, namespace.AllowedRelationWithCaveat("sometenant/user", "...", namespace.AllowedCaveat("sometenant/somecaveat")), namespace.AllowedRelation("sometenant/user", "..."), @@ -489,8 +522,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("viewer", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "viewer", nil, namespace.AllowedRelationWithCaveat("sometenant/user", "...", namespace.AllowedCaveat("sometenant/somecaveat")), namespace.AllowedRelation("sometenant/user", "..."), @@ -508,8 +543,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Union( namespace.ComputedUserset("bars"), ), @@ -525,8 +562,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Union( namespace.ComputedUserset("bars"), namespace.ComputedUserset("bazs"), @@ -543,8 +582,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Intersection( namespace.ComputedUserset("bars"), namespace.ComputedUserset("bazs"), @@ -561,8 +602,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Exclusion( namespace.ComputedUserset("bars"), namespace.ComputedUserset("bazs"), @@ -579,8 +622,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Union( namespace.ComputedUserset("bars"), namespace.ComputedUserset("bazs"), @@ -598,8 +643,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/complex", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/complex", + namespace.MustRelation( + "foos", namespace.Exclusion( namespace.Rewrite( namespace.Union( @@ -621,8 +668,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/complex", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/complex", + namespace.MustRelation( + "foos", namespace.Union( namespace.ComputedUserset("bars"), namespace.Rewrite( @@ -644,8 +693,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/arrowed", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/arrowed", + namespace.MustRelation( + "foos", namespace.Union( namespace.TupleToUserset("bars", "bazs"), ), @@ -694,8 +745,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/expressioned", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/expressioned", + namespace.MustRelation( + "foos", namespace.Exclusion( namespace.Rewrite( namespace.Union( @@ -720,26 +773,31 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/multiple", - namespace.MustRelation("first", + namespace.Namespace( + "sometenant/multiple", + namespace.MustRelation( + "first", namespace.Union( namespace.ComputedUserset("bars"), namespace.ComputedUserset("bazs"), ), ), - namespace.MustRelation("second", + namespace.MustRelation( + "second", namespace.Exclusion( namespace.ComputedUserset("bars"), namespace.ComputedUserset("bazs"), ), ), - namespace.MustRelation("third", + namespace.MustRelation( + "third", namespace.Intersection( namespace.ComputedUserset("bars"), namespace.ComputedUserset("bazs"), ), ), - namespace.MustRelation("fourth", + namespace.MustRelation( + "fourth", namespace.Union( namespace.TupleToUserset("bars", "bazs"), ), @@ -755,8 +813,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Union( namespace.ComputedUserset("aaaa"), namespace.Nil(), @@ -815,7 +875,8 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("some_tenant/foos", + namespace.Namespace( + "some_tenant/foos", namespace.MustRelation( "somerel", nil, @@ -846,10 +907,12 @@ func TestCompile(t *testing.T) { namespace.WithComment("sometenant/user", `/** * user is a user */`), - namespace.WithComment("sometenant/single", `/** + namespace.WithComment( + "sometenant/single", `/** * single is a thing */`, - namespace.MustRelationWithComment("first", `/** + namespace.MustRelationWithComment( + "first", `/** * some permission */`, namespace.Union( @@ -1038,8 +1101,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Union( namespace.ComputedUserset("first"), namespace.ComputedUserset("second"), @@ -1058,8 +1123,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Union( namespace.ComputedUserset("first"), namespace.ComputedUserset("second"), @@ -1083,8 +1150,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Intersection( namespace.ComputedUserset("first"), namespace.ComputedUserset("second"), @@ -1103,8 +1172,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Exclusion( namespace.Rewrite( namespace.Exclusion( @@ -1131,8 +1202,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("someothertenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "someothertenant/simple", + namespace.MustRelation( + "foos", namespace.Union( namespace.ComputedUserset("first"), namespace.ComputedUserset("second"), @@ -1151,8 +1224,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/some_team/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/some_team/simple", + namespace.MustRelation( + "foos", namespace.Union( namespace.ComputedUserset("first"), namespace.ComputedUserset("second"), @@ -1171,8 +1246,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Union( namespace.ComputedUserset("first"), namespace.ComputedUserset("second"), @@ -1191,8 +1268,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Union( namespace.ComputedUserset("first"), namespace.ComputedUserset("second"), @@ -1217,8 +1296,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foos", namespace.Union( namespace.ComputedUserset("first"), namespace.ComputedUserset("second"), @@ -1248,8 +1329,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foo", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foo", namespace.Union( namespace.MustFunctionedTupleToUserset("bar", "any", "baz"), ), @@ -1265,8 +1348,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("foo", + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "foo", namespace.Union( namespace.MustFunctionedTupleToUserset("bar", "all", "baz"), ), @@ -1282,8 +1367,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("viewer", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "viewer", nil, namespace.AllowedRelationWithCaveat("sometenant/user", "...", namespace.AllowedCaveat("sometenant/expiration")), ), ), @@ -1299,8 +1386,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("viewer", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "viewer", nil, namespace.AllowedRelationWithExpiration("sometenant/user", "..."), ), ), @@ -1316,8 +1405,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("viewer", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "viewer", nil, namespace.WithExpiration( namespace.AllowedPublicNamespace("sometenant/user"), ), @@ -1333,8 +1424,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/expressioned", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/expressioned", + namespace.MustRelation( + "foos", namespace.Union( namespace.TupleToUserset("arel", "self"), namespace.ComputedUserset("brel"), @@ -1351,8 +1444,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/expressioned", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/expressioned", + namespace.MustRelation( + "foos", namespace.Union( namespace.TupleToUserset("arel", "brel"), namespace.ComputedUserset("self"), @@ -1369,8 +1464,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/expressioned", - namespace.MustRelation("self", + namespace.Namespace( + "sometenant/expressioned", + namespace.MustRelation( + "self", namespace.Exclusion( namespace.TupleToUserset("arel", "brel"), namespace.ComputedUserset("drel"), @@ -1388,8 +1485,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/expressioned", - namespace.MustRelation("foos", + namespace.Namespace( + "sometenant/expressioned", + namespace.MustRelation( + "foos", namespace.Union( namespace.Self(), ), @@ -1419,8 +1518,10 @@ func TestCompile(t *testing.T) { }`, "", []SchemaDefinition{ - namespace.Namespace("sometenant/simple", - namespace.MustRelation("viewer", nil, + namespace.Namespace( + "sometenant/simple", + namespace.MustRelation( + "viewer", nil, namespace.AllowedRelationWithCaveatAndExpiration("sometenant/user", "...", namespace.AllowedCaveat("sometenant/somecaveat")), ), ), @@ -1539,7 +1640,8 @@ func TestCompileWithCustomCaveatTypeSet(t *testing.T) { sts, err := caveattypes.NewStandardTypeSet() require.NoError(t, err) - err = caveattypes.RegisterMethodOnDefinedType(sts.TypeSet, cel.IntType, + err = caveattypes.RegisterMethodOnDefinedType( + sts.TypeSet, cel.IntType, "isEven", []*cel.Type{}, cel.BoolType, diff --git a/pkg/schemadsl/generator/generator_test.go b/pkg/schemadsl/generator/generator_test.go index 924fd511da..6cbed3f73a 100644 --- a/pkg/schemadsl/generator/generator_test.go +++ b/pkg/schemadsl/generator/generator_test.go @@ -99,7 +99,8 @@ func TestGenerateNamespace(t *testing.T) { }, { "simple relation", - namespace.Namespace("foos/test", + namespace.Namespace( + "foos/test", namespace.MustRelation("somerel", nil, namespace.AllowedRelation("foos/bars", "hiya")), ), `definition foos/test { @@ -109,7 +110,8 @@ func TestGenerateNamespace(t *testing.T) { }, { "simple permission", - namespace.Namespace("foos/test", + namespace.Namespace( + "foos/test", namespace.MustRelation("someperm", namespace.Union( namespace.ComputedUserset("anotherrel"), )), @@ -121,7 +123,8 @@ func TestGenerateNamespace(t *testing.T) { }, { "complex permission", - namespace.Namespace("foos/test", + namespace.Namespace( + "foos/test", namespace.MustRelation("someperm", namespace.Union( namespace.Rewrite( namespace.Exclusion( @@ -140,7 +143,8 @@ func TestGenerateNamespace(t *testing.T) { }, { "complex permission with self", - namespace.Namespace("foos/test", + namespace.Namespace( + "foos/test", namespace.MustRelation("someperm", namespace.Union( namespace.Rewrite( namespace.Exclusion( @@ -160,7 +164,8 @@ func TestGenerateNamespace(t *testing.T) { }, { "complex permission with nil", - namespace.Namespace("foos/test", + namespace.Namespace( + "foos/test", namespace.MustRelation("someperm", namespace.Union( namespace.Rewrite( namespace.Exclusion( @@ -180,7 +185,8 @@ func TestGenerateNamespace(t *testing.T) { }, { "legacy relation", - namespace.Namespace("foos/test", + namespace.Namespace( + "foos/test", namespace.MustRelation("somerel", namespace.Union( &core.SetOperation_Child{ ChildType: &core.SetOperation_Child_XThis{}, @@ -195,7 +201,8 @@ func TestGenerateNamespace(t *testing.T) { }, { "missing type information", - namespace.Namespace("foos/test", + namespace.Namespace( + "foos/test", namespace.MustRelation("somerel", nil), ), `definition foos/test { @@ -206,13 +213,16 @@ func TestGenerateNamespace(t *testing.T) { { "full example", - namespace.WithComment("foos/document", `/** + namespace.WithComment( + "foos/document", `/** * Some comment goes here */`, - namespace.MustRelation("owner", nil, + namespace.MustRelation( + "owner", nil, namespace.AllowedRelation("foos/user", "..."), ), - namespace.MustRelationWithComment("reader", "//foobar", nil, + namespace.MustRelationWithComment( + "reader", "//foobar", nil, namespace.AllowedRelation("foos/user", "..."), namespace.AllowedPublicNamespace("foos/user"), namespace.AllowedRelation("foos/group", "member"), diff --git a/pkg/schemadsl/parser/parser_impl.go b/pkg/schemadsl/parser/parser_impl.go index e8272d701a..e8ad5a4485 100644 --- a/pkg/schemadsl/parser/parser_impl.go +++ b/pkg/schemadsl/parser/parser_impl.go @@ -381,9 +381,9 @@ func (p *sourceParser) buildBinaryOperatorExpressionFnTree(ops []binaryOpDefinit for i := range ops { // Note: We have to reverse this to ensure we have proper precedence. currentParseFn = func(operatorInfo binaryOpDefinition, currentFn tryParserFn) tryParserFn { - return (func() (AstNode, bool) { + return func() (AstNode, bool) { return p.tryConsumeComputeExpression(currentFn, operatorInfo.BinaryOperatorToken, operatorInfo.BinaryExpressionNodeType) - }) + } }(ops[len(ops)-i-1], currentParseFn) } diff --git a/pkg/schemadsl/parser/parser_test.go b/pkg/schemadsl/parser/parser_test.go index 46c09c8bec..6fab3ef09b 100644 --- a/pkg/schemadsl/parser/parser_test.go +++ b/pkg/schemadsl/parser/parser_test.go @@ -159,7 +159,7 @@ func TestParser(t *testing.T) { for _, test := range parserTests { t.Run(test.name, func(t *testing.T) { root := Parse(createAstNode, input.Source(test.name), test.input()) - parseTree := getParseTree((root).(*testNode), 0) + parseTree := getParseTree(root.(*testNode), 0) assert := assert.New(t) found := strings.TrimSpace(parseTree) diff --git a/pkg/testutil/proto.go b/pkg/testutil/proto.go index f032252ac2..6f2a8fbf8b 100644 --- a/pkg/testutil/proto.go +++ b/pkg/testutil/proto.go @@ -57,7 +57,8 @@ func AreProtoSlicesEqual[T proto.Message](expected, found []T, cmp func(a, b T) formattedMessage := fmt.Sprintf(message, args...) if len(expected) != len(found) { - return fmt.Errorf("%s\n\nFound different number of elements in slices: %d in expected, %d in actual\nExpected: %s\nActual: %s", + return fmt.Errorf( + "%s\n\nFound different number of elements in slices: %d in expected, %d in actual\nExpected: %s\nActual: %s", formattedMessage, len(expected), len(found), diff --git a/pkg/testutil/require.go b/pkg/testutil/require.go index 34a2812419..9ea79559c2 100644 --- a/pkg/testutil/require.go +++ b/pkg/testutil/require.go @@ -31,7 +31,8 @@ func RequireEqualEmptyNil(t *testing.T, expected, actual any, msgAndArgs ...any) core.RelationTupleTreeNode{}, core.RelationTupleTreeNode_LeafNode{}, core.DirectSubjects{}, - core.SetOperationUserset{}), + core.SetOperationUserset{}, + ), cmpopts.EquateEmpty(), } @@ -47,11 +48,11 @@ func RequireWithin(t *testing.T, runner func(t *testing.T), timeout time.Duratio timer := time.NewTimer(timeout) defer timer.Stop() - go (func() { + go func() { t.Helper() runner(t) ch <- true - })() + }() select { case <-timer.C: diff --git a/pkg/tuple/structs_test.go b/pkg/tuple/structs_test.go index cb884becb5..823481aa0b 100644 --- a/pkg/tuple/structs_test.go +++ b/pkg/tuple/structs_test.go @@ -112,10 +112,10 @@ func TestToCoreTuple(t *testing.T) { }, Caveat: &core.ContextualizedCaveat{ CaveatName: "somecaveat", - Context: (func() *structpb.Struct { + Context: func() *structpb.Struct { s, _ := structpb.NewStruct(map[string]any{"foo": 42}) return s - })(), + }(), }, }, }, diff --git a/pkg/zedtoken/zedtoken_test.go b/pkg/zedtoken/zedtoken_test.go index 4d3671ea6b..0232fcd5e6 100644 --- a/pkg/zedtoken/zedtoken_test.go +++ b/pkg/zedtoken/zedtoken_test.go @@ -209,7 +209,7 @@ var hlcDecodeTests = []struct { format: "V1 ZedToken", token: "GiAKHjE2OTM1NDA5NDAzNzMwNDU3MjcuMDAwMDAwMDAwMQ==", expectedStatus: StatusLegacyEmptyDatastoreID, - expectedRevision: (func() datastore.Revision { + expectedRevision: func() datastore.Revision { v, err := decimal.NewFromString("1693540940373045727.0000000001") if err != nil { panic(err) @@ -219,7 +219,7 @@ var hlcDecodeTests = []struct { panic(err) } return r - })(), + }(), expectError: false, }, { //nolint:gosec // this is a test file and test logic @@ -227,7 +227,7 @@ var hlcDecodeTests = []struct { token: "GioKHjE2OTM1NDA5NDAzNzMwNDU3MjcuMDAwMDAwMDAwMRIINjM0OWFhZjI=", datastoreUniqueID: "6349aaf2-37cd-47b9-84e8-fe5fa6e2dead", expectedStatus: StatusValid, - expectedRevision: (func() datastore.Revision { + expectedRevision: func() datastore.Revision { v, err := decimal.NewFromString("1693540940373045727.0000000001") if err != nil { panic(err) @@ -237,7 +237,7 @@ var hlcDecodeTests = []struct { panic(err) } return r - })(), + }(), expectError: false, }, { //nolint:gosec // this is a test file and test logic @@ -245,7 +245,7 @@ var hlcDecodeTests = []struct { token: "GioKHjE2OTM1NDA5NDAzNzMwNDU3MjcuMDAwMDAwMDAwMRIINjM0OWFhZjI=", datastoreUniqueID: "arrrg-6349aaf2-37cd-47b9-84e8-fe5fa6e2dead", expectedStatus: StatusMismatchedDatastoreID, - expectedRevision: (func() datastore.Revision { + expectedRevision: func() datastore.Revision { v, err := decimal.NewFromString("1693540940373045727.0000000001") if err != nil { panic(err) @@ -257,7 +257,7 @@ var hlcDecodeTests = []struct { } return r - })(), + }(), expectError: false, }, } diff --git a/tools/analyzers/go.work.sum b/tools/analyzers/go.work.sum index 78e41d8b95..bc01f3a4b7 100644 --- a/tools/analyzers/go.work.sum +++ b/tools/analyzers/go.work.sum @@ -3320,6 +3320,7 @@ golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= +golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= @@ -3345,6 +3346,7 @@ golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc/go.mod h1:hKdjCMrbv9sk golang.org/x/telemetry v0.0.0-20260209163413-e7419c687ee4/go.mod h1:g5NllXBEermZrmR51cJDQxmJUHUOfRAaNyWBM+R+548= golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c/go.mod h1:TpUTTEp9frx7rTdLpC9gFG9kdI7zVLFTFFlqaH2Cncw= golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa/go.mod h1:kHjTxDEnAu6/Nl9lDkzjWpR+bmKfxeiRuSDlsMb70gE= +golang.org/x/telemetry v0.0.0-20260610154732-fb80ec83bdd9/go.mod h1:3AWMyWHS+caVoiEXpiq6+tzKA40J4vQT3MYr80ZtQpc= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= @@ -3353,6 +3355,7 @@ golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= +golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM= golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=