diff --git a/docs/server/docs.go b/docs/server/docs.go index 5de8c0f5bb..b3dba8f45e 100644 --- a/docs/server/docs.go +++ b/docs/server/docs.go @@ -4861,6 +4861,9 @@ const docTemplate = `{ "type": "array", "uniqueItems": false }, + "provenance": { + "$ref": "#/components/schemas/registry.Provenance" + }, "repository": { "$ref": "#/components/schemas/registry.SkillRepository" }, diff --git a/docs/server/swagger.json b/docs/server/swagger.json index e6a74c4f35..21212d5a0c 100644 --- a/docs/server/swagger.json +++ b/docs/server/swagger.json @@ -4854,6 +4854,9 @@ "type": "array", "uniqueItems": false }, + "provenance": { + "$ref": "#/components/schemas/registry.Provenance" + }, "repository": { "$ref": "#/components/schemas/registry.SkillRepository" }, diff --git a/docs/server/swagger.yaml b/docs/server/swagger.yaml index 1c87a1310f..41f26416d1 100644 --- a/docs/server/swagger.yaml +++ b/docs/server/swagger.yaml @@ -4491,6 +4491,8 @@ components: $ref: '#/components/schemas/registry.SkillPackage' type: array uniqueItems: false + provenance: + $ref: '#/components/schemas/registry.Provenance' repository: $ref: '#/components/schemas/registry.SkillRepository' status: diff --git a/go.mod b/go.mod index ddee3f1fec..6117eb190f 100644 --- a/go.mod +++ b/go.mod @@ -1,122 +1,113 @@ module github.com/stacklok/toolhive -go 1.27 +go 1.27.0 require ( + cel.dev/cel-go v0.32.0 dario.cat/mergo v1.0.2 github.com/1password/onepassword-sdk-go v0.4.1 + github.com/Microsoft/go-winio v0.6.2 + github.com/adrg/xdg v0.5.3 github.com/alicebob/miniredis/v2 v2.39.0 github.com/atotto/clipboard v0.1.4 github.com/aws/aws-sdk-go-v2 v1.47.0 github.com/aws/aws-sdk-go-v2/config v1.33.4 github.com/aws/aws-sdk-go-v2/service/sts v1.50.0 github.com/cedar-policy/cedar-go v1.8.0 + github.com/cenkalti/backoff/v5 v5.0.3 github.com/charmbracelet/bubbles v1.0.0 github.com/charmbracelet/bubbletea v1.3.10 github.com/charmbracelet/lipgloss v1.1.0 github.com/charmbracelet/x/ansi v0.11.8 github.com/containerd/errdefs v1.0.0 github.com/coreos/go-oidc/v3 v3.21.0 - github.com/docker/go-connections v0.8.1 // indirect github.com/evanphx/json-patch/v5 v5.9.11 + github.com/getsentry/sentry-go v0.49.0 + github.com/getsentry/sentry-go/otel v0.44.1 + github.com/github/smimesign v0.2.0 github.com/go-chi/chi/v5 v5.3.2 github.com/go-git/go-billy/v5 v5.9.1 github.com/go-git/go-git/v5 v5.19.2 github.com/go-jose/go-jose/v3 v3.0.5 github.com/go-jose/go-jose/v4 v4.1.5 + github.com/go-logr/logr v1.4.4 github.com/gofrs/flock v0.13.1 + github.com/golang-jwt/jwt/v5 v5.3.1 github.com/google/go-cmp v0.7.0 github.com/google/go-containerregistry v0.22.1 github.com/google/uuid v1.6.0 + github.com/hashicorp/golang-lru/v2 v2.0.7 github.com/lestrrat-go/httprc/v3 v3.0.6 + github.com/lestrrat-go/jwx/v3 v3.3.0 + github.com/moby/moby/api v1.56.0 github.com/moby/moby/client v0.6.0 github.com/modelcontextprotocol/registry v1.8.1 + github.com/muesli/termenv v0.16.0 github.com/oauth2-proxy/mockoidc v0.0.0-20240214162133-caebfff84d25 github.com/olekukonko/tablewriter v1.1.4 github.com/onsi/ginkgo/v2 v2.32.2 github.com/onsi/gomega v1.43.0 + github.com/opencontainers/go-digest v1.0.0 + github.com/opencontainers/image-spec v1.1.1 github.com/ory/fosite v0.49.0 + github.com/ory/x v0.0.729 github.com/pelletier/go-toml/v2 v2.4.3 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c github.com/pressly/goose/v3 v3.28.0 - github.com/prometheus/client_golang v1.24.1 // indirect github.com/prometheus/client_model v0.6.3 github.com/prometheus/common v0.71.0 github.com/redis/go-redis/v9 v9.22.0 github.com/shirou/gopsutil/v4 v4.26.8 + github.com/sigstore/protobuf-specs v0.5.2 + github.com/sigstore/sigstore v1.10.10 + github.com/sigstore/sigstore-go v1.3.0 + github.com/spf13/cobra v1.10.2 + github.com/spf13/pflag v1.0.10 github.com/spf13/viper v1.21.0 github.com/spiffe/go-spiffe/v2 v2.8.1 github.com/stacklok/toolhive-catalog v0.20260908.0 - github.com/stacklok/toolhive-core v0.0.43 + github.com/stacklok/toolhive-core v0.0.47 + github.com/stacklok/toolhive-core/redisconn v0.0.2 github.com/stretchr/testify v1.12.1 github.com/swaggo/swag/v2 v2.0.0-rc5 github.com/tailscale/hujson v0.0.0-20260727124030-b80ff77dac4f github.com/testcontainers/testcontainers-go v0.44.0 github.com/tidwall/gjson v1.19.0 github.com/xeipuuv/gojsonschema v1.2.0 + github.com/yosida95/uritemplate/v3 v3.0.2 github.com/zalando/go-keyring v0.2.8 - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.46.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.46.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.68.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 + go.opentelemetry.io/otel v1.46.0 + go.opentelemetry.io/otel/metric v1.46.0 go.opentelemetry.io/otel/sdk v1.46.0 go.opentelemetry.io/otel/sdk/metric v1.46.0 + go.opentelemetry.io/otel/trace v1.46.0 + go.opentelemetry.io/proto/otlp v1.11.0 + go.starlark.net v0.0.0-20260908191801-89a6a09411d5 go.uber.org/mock v0.6.0 go.uber.org/zap v1.28.0 golang.ngrok.com/ngrok/v2 v2.2.0 + golang.org/x/crypto v0.57.0 golang.org/x/exp/jsonrpc2 v0.0.0-20260908205506-85c1c2202aba golang.org/x/mod v0.41.0 golang.org/x/oauth2 v0.37.0 golang.org/x/sync v0.23.0 + golang.org/x/sys v0.48.0 golang.org/x/term v0.46.0 golang.org/x/time v0.16.0 + google.golang.org/protobuf v1.36.12 gopkg.in/yaml.v3 v3.0.1 k8s.io/api v0.35.3 + k8s.io/apiextensions-apiserver v0.35.0 k8s.io/apimachinery v0.35.3 + k8s.io/client-go v0.35.3 k8s.io/utils v0.0.0-20260319190234-28399d86e0b5 modernc.org/sqlite v1.58.0 + oras.land/oras-go/v2 v2.6.2 sigs.k8s.io/controller-runtime v0.23.3 sigs.k8s.io/yaml v1.6.0 ) -require github.com/getsentry/sentry-go/otel v0.44.1 - -require github.com/hashicorp/golang-lru/v2 v2.0.7 - -require ( - cel.dev/cel-go v0.32.0 - github.com/cenkalti/backoff/v5 v5.0.3 - github.com/github/smimesign v0.2.0 - github.com/lestrrat-go/jwx/v3 v3.3.0 - go.starlark.net v0.0.0-20260908191801-89a6a09411d5 -) - -require ( - cloud.google.com/go/compute/metadata v0.9.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.23.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.14.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.9.0 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.3 // indirect - github.com/go-openapi/runtime/server-middleware v0.33.1 // indirect - github.com/go-openapi/swag/pools v0.28.0 // indirect - github.com/jedisct1/go-minisign v0.0.0-20241212093149-d2f9f49435c7 // indirect - github.com/klauspost/cpuid/v2 v2.3.0 // indirect - github.com/kylelemons/godebug v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect - github.com/modelcontextprotocol/go-sdk v1.7.0 // indirect - github.com/oklog/ulid/v2 v2.1.2 // indirect - github.com/oleiade/reflections v1.1.0 // indirect - github.com/ory/pop/v6 v6.3.0 // indirect - github.com/sassoftware/relic/v8 v8.2.0 // indirect - github.com/segmentio/encoding v0.5.4 // indirect - github.com/theupdateframework/go-tuf v0.7.0 // indirect - github.com/valyala/fastjson v1.6.10 // indirect - github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.22.0 // indirect - go.opentelemetry.io/otel/log v0.22.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.22.0 // indirect -) - require ( cel.dev/expr v0.25.2 // indirect github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect @@ -129,6 +120,7 @@ require ( github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.20.0 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.3 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.3 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.19 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.3 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.10.0 // indirect @@ -154,11 +146,16 @@ require ( github.com/cyberphone/json-canonicalization v0.0.0-20241213102144-19d51d7fe467 // indirect github.com/cyphar/filepath-securejoin v0.6.1 // indirect github.com/danieljoos/wincred v1.2.3 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect github.com/dgraph-io/ristretto v1.0.0 // indirect github.com/digitorus/pkcs7 v0.0.0-20250730155240-ffadbf3f398c // indirect github.com/digitorus/timestamp v0.0.0-20250524132541-c45532741eea // indirect + github.com/distribution/reference v0.6.0 // indirect github.com/docker/cli v29.7.2+incompatible // indirect github.com/docker/docker-credential-helpers v0.9.5 // indirect + github.com/docker/go-connections v0.8.1 // indirect + github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dylibso/observe-sdk/go v0.0.0-20240828172851-9145d8ad07e1 // indirect github.com/ebitengine/purego v0.10.2 // indirect @@ -167,36 +164,41 @@ require ( github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect github.com/extism/go-sdk v1.7.1 // indirect github.com/fatih/color v1.18.0 // indirect + github.com/felixge/httpsnoop v1.1.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.9.0 // indirect - github.com/getsentry/sentry-go v0.49.0 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/go-logr/zapr v1.3.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect - github.com/go-openapi/analysis v0.26.0 // indirect + github.com/go-openapi/analysis v1.0.0 // indirect github.com/go-openapi/errors v0.22.8 // indirect github.com/go-openapi/jsonpointer v1.0.0 // indirect - github.com/go-openapi/jsonreference v1.0.0 // indirect - github.com/go-openapi/loads v0.25.1 // indirect - github.com/go-openapi/runtime v0.33.1 // indirect - github.com/go-openapi/spec v0.22.9 // indirect - github.com/go-openapi/strfmt v0.27.0 // indirect + github.com/go-openapi/jsonreference v1.0.1 // indirect + github.com/go-openapi/loads v0.25.2 // indirect + github.com/go-openapi/runtime v0.33.2 // indirect + github.com/go-openapi/runtime/server-middleware v0.33.2 // indirect + github.com/go-openapi/spec v1.0.0 // indirect + github.com/go-openapi/strfmt v0.27.1 // indirect github.com/go-openapi/swag v0.28.0 // indirect github.com/go-openapi/swag/cmdutils v0.28.0 // indirect - github.com/go-openapi/swag/conv v0.29.1 // indirect - github.com/go-openapi/swag/fileutils v0.28.0 // indirect - github.com/go-openapi/swag/jsonutils v0.28.0 // indirect - github.com/go-openapi/swag/loading v0.28.0 // indirect - github.com/go-openapi/swag/mangling v0.28.0 // indirect + github.com/go-openapi/swag/conv v0.29.2 // indirect + github.com/go-openapi/swag/fileutils v0.29.1 // indirect + github.com/go-openapi/swag/jsonutils v0.29.1 // indirect + github.com/go-openapi/swag/loading v0.29.1 // indirect + github.com/go-openapi/swag/mangling v0.29.1 // indirect github.com/go-openapi/swag/netutils v0.28.0 // indirect - github.com/go-openapi/swag/stringutils v0.28.0 // indirect - github.com/go-openapi/swag/typeutils v0.29.1 // indirect - github.com/go-openapi/swag/yamlutils v0.28.0 // indirect - github.com/go-openapi/validate v0.26.3 // indirect + github.com/go-openapi/swag/pools v0.29.1 // indirect + github.com/go-openapi/swag/stringutils v0.29.1 // indirect + github.com/go-openapi/swag/typeutils v0.29.2 // indirect + github.com/go-openapi/swag/yamlutils v0.29.1 // indirect + github.com/go-openapi/validate v1.0.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/gobwas/glob v0.2.3 // indirect + github.com/goccy/go-json v0.10.6 // indirect github.com/godbus/dbus/v5 v5.2.2 // indirect + github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/mock v1.7.0-rc.1 // indirect github.com/google/btree v1.1.3 // indirect @@ -211,11 +213,16 @@ require ( github.com/ianlancetaylor/demangle v0.0.0-20251118225945-96ee0021ea0f // indirect github.com/in-toto/attestation v1.2.0 // indirect github.com/in-toto/in-toto-golang v0.11.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/jedisct1/go-minisign v0.0.0-20241212093149-d2f9f49435c7 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v1.6.0 // indirect github.com/klauspost/compress v1.19.2 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/lestrrat-go/blackmagic v1.0.4 // indirect + github.com/lestrrat-go/httpcc v1.0.1 // indirect github.com/lestrrat-go/option/v2 v2.0.0 // indirect github.com/lucasb-eyer/go-colorful v1.4.0 // indirect github.com/lufia/plan9stats v0.0.0-20260330125221-c963978e514e // indirect @@ -226,49 +233,55 @@ require ( github.com/mattn/go-runewidth v0.0.24 // indirect github.com/mattn/goveralls v0.0.12 // indirect github.com/mfridman/interpolate v0.0.2 // indirect + github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect + github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/go-archive v0.3.0 // indirect - github.com/moby/moby/api v1.56.0 github.com/moby/patternmatcher v0.6.1 // indirect github.com/moby/spdystream v0.5.1 // indirect github.com/moby/sys/sequential v0.7.0 // indirect github.com/moby/sys/user v0.4.1 // indirect github.com/moby/sys/userns v0.1.0 // indirect github.com/moby/term v0.5.2 // indirect + github.com/modelcontextprotocol/go-sdk v1.7.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect - github.com/muesli/termenv v0.16.0 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect github.com/ncruces/go-strftime v1.0.0 // indirect github.com/nyaruka/phonenumbers v1.6.12 // indirect + github.com/oklog/ulid/v2 v2.1.2 // indirect + github.com/oleiade/reflections v1.1.0 // indirect github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect github.com/olekukonko/errors v1.2.0 // indirect github.com/olekukonko/ll v0.1.6 // indirect github.com/openzipkin/zipkin-go v0.4.3 // indirect github.com/ory/go-acc v0.2.9-0.20230103102148-6b1c9a70dbbe // indirect github.com/ory/go-convenience v0.1.0 // indirect - github.com/ory/x v0.0.729 + github.com/ory/pop/v6 v6.3.0 // indirect github.com/pjbgf/sha1cd v0.6.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect + github.com/prometheus/client_golang v1.24.1 // indirect github.com/prometheus/otlptranslator v1.0.0 // indirect github.com/prometheus/procfs v0.22.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.12.0 // indirect + github.com/sassoftware/relic/v8 v8.2.0 // indirect github.com/seatgeek/logrus-gelf-formatter v0.0.0-20210414080842-5b05eb8ff761 // indirect github.com/secure-systems-lab/go-securesystemslib v0.11.1 // indirect + github.com/segmentio/asm v1.2.1 // indirect + github.com/segmentio/encoding v0.5.4 // indirect github.com/sergi/go-diff v1.4.0 // indirect github.com/sethvargo/go-retry v0.4.0 // indirect github.com/shibumi/go-pathspec v1.3.0 // indirect - github.com/sigstore/protobuf-specs v0.5.2 github.com/sigstore/rekor v1.5.4 // indirect github.com/sigstore/rekor-tiles/v2 v2.3.0 // indirect - github.com/sigstore/sigstore v1.10.9 - github.com/sigstore/sigstore-go v1.3.0 github.com/sigstore/timestamp-authority/v2 v2.1.3 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/skeema/knownhosts v1.3.2 // indirect @@ -279,6 +292,7 @@ require ( github.com/sv-tools/openapi v0.4.0 // indirect github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834 // indirect github.com/tetratelabs/wazero v1.11.0 // indirect + github.com/theupdateframework/go-tuf v0.7.0 // indirect github.com/theupdateframework/go-tuf/v2 v2.4.2 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect @@ -286,29 +300,37 @@ require ( github.com/tklauser/numcpus v0.12.0 // indirect github.com/transparency-dev/formats v0.1.1 // indirect github.com/transparency-dev/merkle v0.0.2 // indirect + github.com/valyala/fastjson v1.6.10 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect - github.com/yosida95/uritemplate/v3 v3.0.2 + github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect github.com/yuin/gopher-lua v1.1.1 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.60.0 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.40.0 // indirect go.opentelemetry.io/contrib/propagators/jaeger v1.40.0 // indirect go.opentelemetry.io/contrib/samplers/jaegerremote v0.29.0 // indirect go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.22.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.46.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.46.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.46.0 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.68.0 // indirect go.opentelemetry.io/otel/exporters/zipkin v1.35.0 // indirect - go.opentelemetry.io/proto/otlp v1.11.0 + go.opentelemetry.io/otel/log v0.22.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.22.0 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v3 v3.0.5 // indirect golang.ngrok.com/muxado/v2 v2.0.1 // indirect + golang.org/x/exp v0.0.0-20260824195058-e88cd73687aa // indirect golang.org/x/exp/event v0.0.0-20260824195058-e88cd73687aa // indirect - golang.org/x/net v0.58.0 // indirect + golang.org/x/net v0.59.0 // indirect golang.org/x/text v0.42.0 // indirect golang.org/x/tools v0.49.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect @@ -316,53 +338,15 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20260819154853-08b0e4226688 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260831171406-18b4a7587f8a // indirect google.golang.org/grpc v1.83.2 // indirect - google.golang.org/protobuf v1.36.12 gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect - k8s.io/apiextensions-apiserver v0.35.0 k8s.io/klog/v2 v2.140.0 // indirect k8s.io/kube-openapi v0.0.0-20251125145642-4e65d59e963e // indirect modernc.org/libc v1.75.6 // indirect modernc.org/mathutil v1.7.1 // indirect modernc.org/memory v1.12.1 // indirect - oras.land/oras-go/v2 v2.6.2 sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect sigs.k8s.io/randfill v1.0.0 // indirect sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 // indirect ) - -require ( - github.com/Microsoft/go-winio v0.6.2 - github.com/adrg/xdg v0.5.3 - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect - github.com/distribution/reference v0.6.0 // indirect - github.com/docker/go-units v0.5.0 // indirect - github.com/felixge/httpsnoop v1.1.0 // indirect - github.com/go-logr/logr v1.4.4 - github.com/go-logr/stdr v1.2.2 // indirect - github.com/goccy/go-json v0.10.6 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v5 v5.3.1 - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/lestrrat-go/blackmagic v1.0.4 // indirect - github.com/lestrrat-go/httpcc v1.0.1 // indirect - github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/opencontainers/go-digest v1.0.0 - github.com/opencontainers/image-spec v1.1.1 - github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/segmentio/asm v1.2.1 // indirect - github.com/spf13/cobra v1.10.2 - github.com/spf13/pflag v1.0.10 - go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 - go.opentelemetry.io/otel v1.46.0 - go.opentelemetry.io/otel/metric v1.46.0 - go.opentelemetry.io/otel/trace v1.46.0 - golang.org/x/crypto v0.57.0 - golang.org/x/exp v0.0.0-20260824195058-e88cd73687aa // indirect - golang.org/x/sys v0.48.0 - k8s.io/client-go v0.35.3 -) diff --git a/go.sum b/go.sum index 9fcbe17433..0ad744ca18 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,6 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.23.1 h1:zvXfGJCWvywnCA814d8ZiVyt github.com/Azure/azure-sdk-for-go/sdk/azcore v1.23.1/go.mod h1:iptorS+VYKFL2N6PnebpS91dubG35eAOEERnT4PJbQU= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.14.1 h1:u93s+zU2JD62im61Bm5CZIc1ZrOJaIAWEg0WOrMVkEo= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.14.1/go.mod h1:oXtinPO4OLj9d1DOTrqrL1oRwGhcqadvAmrl6wTeGlk= -github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.4.0 h1:xFaZZ+IubdftrDHnGGwZ6QvQ3KHTtWl2MCK+GMt2vxs= -github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.4.0/go.mod h1:mCBhUhlMjLLJKr5aqw2TNS/VqJOie8MzWq3DAMJeKso= github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0 h1:fhqpLE3UEXi9lPaBRpQ6XuRW0nU7hgg4zlmZZa+a9q4= github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0/go.mod h1:7dCRMLwisfRH3dBupKeNCioWYUZ4SS09Z14H+7i8ZoY= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.5.0 h1:MaKvxE6D0KkjOg6Wd9M00iqP5PR0kUxCfiezes4JweM= @@ -42,8 +40,6 @@ github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.2.0 h1:nCYfg github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.2.0/go.mod h1:ucUjca2JtSZboY8IoUqyQyuuXvwbMBVwFOm0vdQPNhA= 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/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= -github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= github.com/AzureAD/microsoft-authentication-library-for-go v1.9.0 h1:MDT4FxAPve5FnYn6vOL1r7RCRDG+l9cI7a5LlCuHsqA= github.com/AzureAD/microsoft-authentication-library-for-go v1.9.0/go.mod h1:Y33QHnf0FfdVewFFISOGe20mkZbxX4H839o955/PoeI= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= @@ -258,56 +254,56 @@ github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-openapi/analysis v0.26.0 h1:1xECln1iMMmQnTjgcknC1vi1hA4KISt6IHpSwnqcuwI= -github.com/go-openapi/analysis v0.26.0/go.mod h1:40gERFi/2dyXA1FaqRRLxkv1IlC6X+GPDNd1xrYAjZE= +github.com/go-openapi/analysis v1.0.0 h1:sNvbAGCJqUTqIAodr9IVqJMmuZas3YS9ms1dGK9yiJ4= +github.com/go-openapi/analysis v1.0.0/go.mod h1:NhYjJ57fnE+bcE7UwrJyMkhWA3Dfz7TdiBfTVAnos4Y= github.com/go-openapi/errors v0.22.8 h1:oP7sW7TWc3wFFjrzzj0nI83H2qMBkNjNfSd+XRejk/I= github.com/go-openapi/errors v0.22.8/go.mod h1:BuUoHcYrU6E7V9gfj1I5wLQqgtIHnup/alXZ8KdgQ0w= github.com/go-openapi/jsonpointer v1.0.0 h1:kR9tHqY0CtZaOPVFm622dPVNhrvYpwr4uCxgL3h1H8s= github.com/go-openapi/jsonpointer v1.0.0/go.mod h1:Z3rw7dWu1p9IgitXCFamSlA5lmDiklEB6vkaxcNZW5Y= -github.com/go-openapi/jsonreference v1.0.0 h1:jlmTr6torcd1YgDQvSfNmRtKzYDO4FGBkrAdlAVWnpY= -github.com/go-openapi/jsonreference v1.0.0/go.mod h1:jtwdyGbJk0Xhe5Y+rwtglQP6Sb1WZST4rT32LWB+sv0= -github.com/go-openapi/loads v0.25.1 h1:toKQdIDLxlqfKLLGUUmUsiTd5/X0Chzvde9EGYQP/Ac= -github.com/go-openapi/loads v0.25.1/go.mod h1:33Hen4tsKXHL45TyYojvfD5fZUFN4O1y4r/XhsRW2zc= -github.com/go-openapi/runtime v0.33.1 h1:jCvhI+wAdsn29byy+RgcPcg+j39YT6E304QOE/WqIVk= -github.com/go-openapi/runtime v0.33.1/go.mod h1:Dl5SMVRnJz+d8bX6Y1zxy0QKpqe/ysvVeUEh1nCpEZ4= -github.com/go-openapi/runtime/server-middleware v0.33.1 h1:IAeKbwWnBnpsYTpuPVS8t73ZrPpKvRZnK2iJ2KJGUV0= -github.com/go-openapi/runtime/server-middleware v0.33.1/go.mod h1:2Gej5fDxqeJxY+w38vxXYW0BgFASfgBsJ5rXwN1Fseg= -github.com/go-openapi/spec v0.22.9 h1:/vKIFDcGKp0ktZWGbym/tJEWbk6/XOEmAVU0kqKMH+w= -github.com/go-openapi/spec v0.22.9/go.mod h1:b/mNUYIOQOyIiUzUzXEE8xzyZqf93KvM9hQGP91yfl0= -github.com/go-openapi/strfmt v0.27.0 h1:kbcTeaD9TXuXD0hhMXzuYa1sdTo6+dWGvwjW93E80IM= -github.com/go-openapi/strfmt v0.27.0/go.mod h1:s/qhDqfY72irigXUGJmtgid2Rm+3tnz3k8hZaRmvWYc= +github.com/go-openapi/jsonreference v1.0.1 h1:4zJ7AmYDKNmD3aSpfPnFNCFA5E80/xMHUNKgydaLh38= +github.com/go-openapi/jsonreference v1.0.1/go.mod h1:dYplQXa6p5lXprLcJ8LE2iU7vNpXsAHDQ5ZAgL+Qx3A= +github.com/go-openapi/loads v0.25.2 h1:+uNsDlRQfYtZTrh+3pdwampcAqZVPuBJW0IA82aZHII= +github.com/go-openapi/loads v0.25.2/go.mod h1:RXsfJEQGGNv4uw8u/KdmF8Vh8OR4fTfs9ZO4QrzNohA= +github.com/go-openapi/runtime v0.33.2 h1:HSxskMs0WmpCdQvBWVxHt2t2mXMwn8DDav3VtVidwig= +github.com/go-openapi/runtime v0.33.2/go.mod h1:NQpSLiIsEAIpZDEs6xUrhjm6ZiQh85X8bHKlqLPgNP8= +github.com/go-openapi/runtime/server-middleware v0.33.2 h1:BVFjAaW4Jh/kZ4QSsgDrGzLuSuaKzSiyvappUFKxgUk= +github.com/go-openapi/runtime/server-middleware v0.33.2/go.mod h1:E3mWY61/UgBJ5EUmKh+h6A1oQQdD1U4raowVMmPmQug= +github.com/go-openapi/spec v1.0.0 h1:JtB/GHOj+eetjse6YvxqLze88oEekl/4uPBethvzRrA= +github.com/go-openapi/spec v1.0.0/go.mod h1:boj1PRhqS0x5jylgcNp9BRWxenphrh7vVNYZ90IRCoo= +github.com/go-openapi/strfmt v0.27.1 h1:6yeRws56xbMR8c75R487iLfrREpYnmnBs4g554f5hdk= +github.com/go-openapi/strfmt v0.27.1/go.mod h1:7enjivZtYHpyqjJLetiAOh6McJziVnvIS/e7rX8/798= github.com/go-openapi/swag v0.28.0 h1:xkgbOSKj6DZziNpyqRRAOt3GJGtgjgsd2RoyT30VWuw= github.com/go-openapi/swag v0.28.0/go.mod h1:4qYnT3Cqr1p1VknOdPo70evN4rgQnAg6jwApHyxSGIg= github.com/go-openapi/swag/cmdutils v0.28.0 h1:7TOeNtkYru1SG8Y34tDh9WBbLsMqGnptuxWiHREPZ4Q= github.com/go-openapi/swag/cmdutils v0.28.0/go.mod h1:Sm1MVFMkF6guJJ+pQqHnQA3N0j9qALV3NxzDSv6bETM= -github.com/go-openapi/swag/conv v0.29.1 h1:AC4Eh/5c/eUDOUCzzsRC9ghmFgOSBHeRMGIngY0ZUGA= -github.com/go-openapi/swag/conv v0.29.1/go.mod h1:S1X7/ZrBEZOC0Wc8AGxjbcGS92l3WEjA7aPtpl+RaqM= -github.com/go-openapi/swag/fileutils v0.28.0 h1:Z04XWQD7R8Eq+7GnOrjovBxPPmZzsS4gt2H2GPGIViU= -github.com/go-openapi/swag/fileutils v0.28.0/go.mod h1:VvJFZLTZS0AI854gEQz5tk7dBESdLjiNUMSZ/th2ry8= -github.com/go-openapi/swag/jsonutils v0.28.0 h1:YIch6FwO7RXzeAnbO8Tu7dWBZeUEH+4nA0HXltVTnv4= -github.com/go-openapi/swag/jsonutils v0.28.0/go.mod h1:CYM3WlTUcagR2ZoHdz54di/cbBqt82tuxuXgAjxw+mg= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.28.0 h1:qV+VVUAx5Oro8WjVWpZeql7YReTKhT4smR4zhcOQZr0= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.28.0/go.mod h1:mofwUWx70wvskwESqRJ//k/9kURmCgyJl5m5Ppoh5kY= -github.com/go-openapi/swag/loading v0.28.0 h1:td8QZdZC9MIYGGSnSPKShKiK22I2tU5UQvuUhIBPRLU= -github.com/go-openapi/swag/loading v0.28.0/go.mod h1:rXB0QiQX5mMveXEA7ouM4KiiM9jVJe4K6BVbwhD1M4k= -github.com/go-openapi/swag/mangling v0.28.0 h1:pH8eyeNO9SLYsTMWJrurnNfKmDa28XrlA+HePVD53VM= -github.com/go-openapi/swag/mangling v0.28.0/go.mod h1:jtBE2+V+3pILxOR7Vgce+Cwp6A2PgZbvVqfNntbVs0w= +github.com/go-openapi/swag/conv v0.29.2 h1:8c9shoB8l0QRSR6ymq1llHdBWDqpIgJfjTGHx3Vuhm0= +github.com/go-openapi/swag/conv v0.29.2/go.mod h1:AZS0YigTNf8qNtD6WqJz/N4RUNmpr76SyjFGkq4+p6Q= +github.com/go-openapi/swag/fileutils v0.29.1 h1:ZcPzMceVhU1WPbK6N1G6sNQKdd1CWJlf3cA08UHuoM0= +github.com/go-openapi/swag/fileutils v0.29.1/go.mod h1:/wofKYckbtRl2p3+EwQsosie5CT1B38+dQ+PS579BzI= +github.com/go-openapi/swag/jsonutils v0.29.1 h1:AFCxs0eQZ24/QyfhVHM2t49rMz7Vv3XCsZQI6yrNy+c= +github.com/go-openapi/swag/jsonutils v0.29.1/go.mod h1:u3+sCfJpttDpcmS5kpm0yxL6GK0eWgODsx8Yw8fcqNM= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.29.1 h1:BiiXE31Bx9SfpsMmOQj5KYpUhTZBpLVriVhJDuLuY2o= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.29.1/go.mod h1:julgTUKZ9/D0j6O7GKajmRs+812FWxQg/mMpGunWSjg= +github.com/go-openapi/swag/loading v0.29.1 h1:FCv5fG8UhTdDJa2R7w+5O9Ekpcbw7tt0nFWvmDKGBjc= +github.com/go-openapi/swag/loading v0.29.1/go.mod h1:N0ESuem4p2oedKal8EJhciqnJ9Q9Wmt83L1CRB3Fouw= +github.com/go-openapi/swag/mangling v0.29.1 h1:lHALtvYCdxVnRl4GrHmFPwfBTZYIObqdGNSKyu/8D6I= +github.com/go-openapi/swag/mangling v0.29.1/go.mod h1:SAop9pB7PUjQ/CGCNf/JmCKTRK+GDO+RqE9UHqC/N6s= github.com/go-openapi/swag/netutils v0.28.0 h1:YXN6TALEi2pzts8/8GNm6T61HTAZsieukGZidap989k= github.com/go-openapi/swag/netutils v0.28.0/go.mod h1:J+WYyFMLtvtCGqa6jLv+YNUmIKI3ZRQRrvfNDMoQoEQ= -github.com/go-openapi/swag/pools v0.28.0 h1:HPMZWSAfce3rdVTFcjFiCIBtDg9h4x2QlRrHipwhxeU= -github.com/go-openapi/swag/pools v0.28.0/go.mod h1:kVQefhSK5RWuRe7BXsL8htgBPAMpN7HDGpGEknqugeE= -github.com/go-openapi/swag/stringutils v0.28.0 h1:ixsc9iYgDPubHL/8nSkbnryEHpD2VRlBMLKpQyPXcDU= -github.com/go-openapi/swag/stringutils v0.28.0/go.mod h1:lzRN95CxXmA03XcDWHLOb6nOMcxCqR5rGY0lOgsfRoM= -github.com/go-openapi/swag/typeutils v0.29.1 h1:Nzv9nhnlLCRBPQqfOX+7lB6Guju370or8StT+lIOf6M= -github.com/go-openapi/swag/typeutils v0.29.1/go.mod h1:hxpgDZJVBkBsi/d3MIUosafoFdE5exaQRmVp0zwu3YE= -github.com/go-openapi/swag/yamlutils v0.28.0 h1:TV3JXH6DS46KUroDtMLAYHGkdWf5VDq3wVWFirmzROY= -github.com/go-openapi/swag/yamlutils v0.28.0/go.mod h1:x0q/yndZHEgk9Rx3DyDqzFUmHy55KTvIZldvF2dTJXs= -github.com/go-openapi/testify/enable/yaml/v2 v2.6.1 h1:Jm+/ze2rMtbD98yen92AhATGLGREDYXG56Xr4gMjEtE= -github.com/go-openapi/testify/enable/yaml/v2 v2.6.1/go.mod h1:YDPnwCRDu38/oJBVMBVXOUDiJ9cIeBHWvfImHaXqnv4= -github.com/go-openapi/testify/v2 v2.6.1 h1:6CNJhTjMzgaeaH8WhshcsZNPIvRemiOcFpU7seO/y7Q= -github.com/go-openapi/testify/v2 v2.6.1/go.mod h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw= -github.com/go-openapi/validate v0.26.3 h1:OkfZgLvLDnGP2hrRGD+42WBiPWWkoHomTJ+IVI+KaDc= -github.com/go-openapi/validate v0.26.3/go.mod h1:7DOOa4raU6NRe7A8VQSKbm3VcuUIioREYHFt+er9Sk8= +github.com/go-openapi/swag/pools v0.29.1 h1:NRogYxdEW9SjRM4mkAOji9iefO4MRXq3p/ZJcoQbUKg= +github.com/go-openapi/swag/pools v0.29.1/go.mod h1:leDcaghjkRAhCuCRv9NfJU5f0mjoU3cT/XZObhMk3pc= +github.com/go-openapi/swag/stringutils v0.29.1 h1:1ykunK7iJQk1uOO7+oUH1ukbsK85fFCOiCFMOVSY+F0= +github.com/go-openapi/swag/stringutils v0.29.1/go.mod h1:7fSqZ+z8Qc0tOfAAK0jVa5qFGrnIlRi6n7NeGGrr1vc= +github.com/go-openapi/swag/typeutils v0.29.2 h1:O7aVvkTs3pXwikgtrPLenigEMdQFgONKRooQA9pgf2I= +github.com/go-openapi/swag/typeutils v0.29.2/go.mod h1:7+GDG+uz9Ke+eVt4rClZg7wklSDp8hT/mKNh/pC26TE= +github.com/go-openapi/swag/yamlutils v0.29.1 h1:69w3tsBajm7MR/fejLy7HD/3J68Ys1SeeZMEzZ3w2sk= +github.com/go-openapi/swag/yamlutils v0.29.1/go.mod h1:rgsp3vT/QdWzKwn43CigDwjOGIenPyTZMKnxEM8jZOA= +github.com/go-openapi/testify/enable/yaml/v2 v2.7.0 h1:wPW6YRgx3+SID1yUy/Xwa17L8kFEaEKod2VRbJDZNUs= +github.com/go-openapi/testify/enable/yaml/v2 v2.7.0/go.mod h1:mI1M88etYbc3PhgHsWQK2kwvNwW5aGFqMPbmib+SGIs= +github.com/go-openapi/testify/v2 v2.7.0 h1:bycOreEj6wfBvijg3YFogZ/sFjTCDmQnwSodSzHa3X8= +github.com/go-openapi/testify/v2 v2.7.0/go.mod h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw= +github.com/go-openapi/validate v1.0.0 h1:dFsYCLVUQUL6Vi2lQSexgwmCXDuHe7eWRDhQxkE+xYA= +github.com/go-openapi/validate v1.0.0/go.mod h1:wwXGRqMQzOZ7PCqBcgNk+DD9+Cacnxv7we5T0M/eA3Y= github.com/go-rod/rod v0.116.2 h1:A5t2Ky2A+5eD/ZJQr1EfsQSe5rms5Xof/qj296e+ZqA= github.com/go-rod/rod v0.116.2/go.mod h1:H+CMO9SCNc2TJ2WfrG+pKhITz57uGNYU43qYHh438Mg= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= @@ -421,8 +417,6 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kevinburke/ssh_config v1.6.0 h1:J1FBfmuVosPHf5GRdltRLhPJtJpTlMdKTBjRgTaQBFY= github.com/kevinburke/ssh_config v1.6.0/go.mod h1:q2RIzfka+BXARoNexmF9gkxEX7DmvbW9P4hIVx2Kg4M= -github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU= -github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.19.2 h1:hMRETovs/pu/dVWN7zIT1PGG8t509MwT6bO7XSi26R8= @@ -644,8 +638,8 @@ github.com/sigstore/rekor v1.5.4 h1:A9zITTrkRwO+8lfq7L/gBR7rDHHcBQJRI+a0JQo4xDM= github.com/sigstore/rekor v1.5.4/go.mod h1:0bcUHhZPlG+RVW1dI/7sdBp0MiVWVzk9h0tgOH/o0Yc= github.com/sigstore/rekor-tiles/v2 v2.3.0 h1:HhMgH61UP0t899V8Fjt7pz1YdgOBptbaQdnCF+79cdc= github.com/sigstore/rekor-tiles/v2 v2.3.0/go.mod h1:DEFiKSyQ4nF75QRVNdOPaIH3cmvMkO2B6xDZjNYngPc= -github.com/sigstore/sigstore v1.10.9 h1:7Dcpt+ibnltHQZ8XhaU0dFmhHaf/T491eJfA9WDex4Y= -github.com/sigstore/sigstore v1.10.9/go.mod h1:LYW9+qH7bK8wZmLm6lPxIC5lkHtkJDCgkqjChzTAIBs= +github.com/sigstore/sigstore v1.10.10 h1:0hfpqcl1+UnzxuVT4//PzL3LQ8uOCzoF90Ofs5zzBwM= +github.com/sigstore/sigstore v1.10.10/go.mod h1:Q8tpy2X80KVswawYR0eTjWl3gM3AU+ak+h/NtPzRfWs= github.com/sigstore/sigstore-go v1.3.0 h1:hnIMHREyCNTYFtOE1o7ae3Axa9B5W5EjUSBJICP2NBE= github.com/sigstore/sigstore-go v1.3.0/go.mod h1:AyRQXfpH89py1twjE3kEZxlRersng90GSYqQV9zGJE8= github.com/sigstore/sigstore/pkg/signature/kms/aws v1.10.9 h1:2NWAU/utJRwzy1OrQurlY3wlDSynyH1rNJS5GgFchrg= @@ -678,8 +672,10 @@ github.com/spiffe/go-spiffe/v2 v2.8.1 h1:eXZMLsu+3MLEPJyGJkolqtVrteZfQdUpOWj6LTi github.com/spiffe/go-spiffe/v2 v2.8.1/go.mod h1:47Q0Q9/AqGha8QLHp+kxpH4Wca7X7EnOtlIJy3mxZ3U= github.com/stacklok/toolhive-catalog v0.20260908.0 h1:WRC+cV63KCEaMu8qTiTeCAPNCd1138TWERYZ3Zwgcd4= github.com/stacklok/toolhive-catalog v0.20260908.0/go.mod h1:4n/zNE768KzRjQA0jhkj5b+b4b1TXjHBhRptk87qRS8= -github.com/stacklok/toolhive-core v0.0.43 h1:bSW+0pJI/zUD6GOfkABQwAvaTb1HPuFCFTNB+PegTYA= -github.com/stacklok/toolhive-core v0.0.43/go.mod h1:ryBVr4cNPT4dTngVidWpfFCBIAjP8cZzekzabcqmeVk= +github.com/stacklok/toolhive-core v0.0.47 h1:b2c32sFB28T6UnQ4MdXlMC4fOOluXTr1yP/JX/lRBqA= +github.com/stacklok/toolhive-core v0.0.47/go.mod h1:KtjAC32my8OJZa7dpMfM/VOOgQ8wgQfGpKyijcOBFE8= +github.com/stacklok/toolhive-core/redisconn v0.0.2 h1:Ju7+LrajHdpCpBe5xmGdle1z0F/F2qByUdzZi6YSgJ4= +github.com/stacklok/toolhive-core/redisconn v0.0.2/go.mod h1:YaR5xDqbFc+eoP7sDPi6rHyh6Vh90HQciGpCQtD5VeY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4= github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0= @@ -722,8 +718,8 @@ github.com/tink-crypto/tink-go-gcpkms/v2 v2.4.0 h1:xpI5pnEQ0erFCS3JmcEl7Blluo8Zi github.com/tink-crypto/tink-go-gcpkms/v2 v2.4.0/go.mod h1:wDDAhjfd1t4TjeJCSsmFK7CARPUs/ITi16ZZ8kmAaFQ= github.com/tink-crypto/tink-go-hcvault/v2 v2.5.0 h1:eXuNqgrcYelxU1MVikOJDP3wTS5lvihM4ntoAbAMfvs= github.com/tink-crypto/tink-go-hcvault/v2 v2.5.0/go.mod h1:3RhcxAqek6xUlRFmJifvU4CYLZN60KMQdIKqpZAZJG0= -github.com/tink-crypto/tink-go/v2 v2.7.0 h1:k7QnUXJ1cRDpvoy/5l1FimZqMAArRff8vjUqzi5N04o= -github.com/tink-crypto/tink-go/v2 v2.7.0/go.mod h1:cWNpQ/yAT/QHzAV0kBGMOSJzzYTKofDZdJaUqOPPWCI= +github.com/tink-crypto/tink-go/v2 v2.8.0 h1:1zODq1bZDqOQdNPjhvwGYLDw9On7mDWPnQf+4xXlpAc= +github.com/tink-crypto/tink-go/v2 v2.8.0/go.mod h1:aNXZeyxjQU9iqAeARRNmbESXUW6Mao1HRCCTY8B1TFM= github.com/tklauser/go-sysconf v0.4.0 h1:7H0uAN+7RkwWRaxhYXDLqa5V3LPrJeV8wmD9dRUgPQU= github.com/tklauser/go-sysconf v0.4.0/go.mod h1:8mTNWyog7H+MpKijp4VmKJAd2bbYQ2zuUwkYRbUArPI= github.com/tklauser/numcpus v0.12.0 h1:NR85qdvHA9pFse3x3weVZ0r0ST8R6l5RHbZrlRaqob4= @@ -880,8 +876,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= -golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= +golang.org/x/net v0.59.0 h1:5zfYln+w5XCxwrnMMJPufRgNoXEaGxl0wo5GqPXyues= +golang.org/x/net v0.59.0/go.mod h1:2DA/G1UfVbCpQPeWTmMPGY7Cs2PkBkwu743bVX5PIVg= golang.org/x/oauth2 v0.37.0 h1:JUlcxA8oAtauLfiH8FX2/FkAWHAdi0QtGCGc+hofE98= golang.org/x/oauth2 v0.37.0/go.mod h1:IxwZNxUULJmpBFf9K/9NTMSIfZZuvuTy1gGxhigP/58= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/pkg/authserver/runner/embeddedauthserver.go b/pkg/authserver/runner/embeddedauthserver.go index 9fedd40a56..f167814c3f 100644 --- a/pkg/authserver/runner/embeddedauthserver.go +++ b/pkg/authserver/runner/embeddedauthserver.go @@ -16,7 +16,7 @@ import ( "sync" "time" - tcredis "github.com/stacklok/toolhive-core/redis" + "github.com/stacklok/toolhive-core/redisconn" "github.com/stacklok/toolhive/pkg/auth/dcr" "github.com/stacklok/toolhive/pkg/authserver" servercrypto "github.com/stacklok/toolhive/pkg/authserver/server/crypto" @@ -972,17 +972,17 @@ func createStorage(ctx context.Context, cfg *storage.RunConfig) (storage.Storage } // convertRedisRunConfig converts a serializable RedisRunConfig to a runtime -// tcredis.Config. It resolves ACL credentials from environment variables and +// redisconn.Config. It resolves ACL credentials from environment variables and // parses duration strings. Connection-mode topology and defaulting are handled -// by the shared toolhive-core redis package when the client is constructed. +// by the shared toolhive-core redisconn package when the client is constructed. // // An ACL config is not required: a nil rc.ACLUserConfig produces a no-auth // connection (for a Redis/Valkey instance running without authentication) and // emits one startup WARN naming the store. A populated ACL config whose // password resolves to empty is still rejected — see convertRedisACLConfig. -func convertRedisRunConfig(rc *storage.RedisRunConfig) (tcredis.Config, error) { +func convertRedisRunConfig(rc *storage.RedisRunConfig) (redisconn.Config, error) { if rc == nil { - return tcredis.Config{}, fmt.Errorf("redis config is required when storage type is redis") + return redisconn.Config{}, fmt.Errorf("redis config is required when storage type is redis") } // AuthType declares authenticated intent. If it selects ACL-user auth, a @@ -990,17 +990,17 @@ func convertRedisRunConfig(rc *storage.RedisRunConfig) (tcredis.Config, error) { // loudly rather than silently downgrading to an unauthenticated connection. // An empty AuthType with a nil ACLUserConfig remains a valid no-auth config. if rc.AuthType == storage.AuthTypeACLUser && rc.ACLUserConfig == nil { - return tcredis.Config{}, fmt.Errorf( + return redisconn.Config{}, fmt.Errorf( "auth_type %q requires acl_user_config; omit auth_type for a no-auth connection", rc.AuthType) } - cfg := tcredis.Config{ + cfg := redisconn.Config{ Addr: rc.Addr, ClusterMode: rc.ClusterMode, } if rc.SentinelConfig != nil { - cfg.SentinelConfig = &tcredis.SentinelConfig{ + cfg.SentinelConfig = &redisconn.SentinelConfig{ MasterName: rc.SentinelConfig.MasterName, SentinelAddrs: rc.SentinelConfig.SentinelAddrs, } @@ -1009,18 +1009,18 @@ func convertRedisRunConfig(rc *storage.RedisRunConfig) (tcredis.Config, error) { acl, err := convertRedisACLConfig(rc.ACLUserConfig) if err != nil { - return tcredis.Config{}, fmt.Errorf("failed to convert ACL config: %w", err) + return redisconn.Config{}, fmt.Errorf("failed to convert ACL config: %w", err) } cfg.Username = acl.username cfg.Password = acl.password if err := applyRedisTimeouts(rc, &cfg); err != nil { - return tcredis.Config{}, fmt.Errorf("failed to apply redis timeouts: %w", err) + return redisconn.Config{}, fmt.Errorf("failed to apply redis timeouts: %w", err) } tlsCfg, err := convertRedisTLSRunConfig(rc.TLS) if err != nil { - return tcredis.Config{}, fmt.Errorf("master TLS config: %w", err) + return redisconn.Config{}, fmt.Errorf("master TLS config: %w", err) } cfg.TLS = tlsCfg @@ -1028,7 +1028,7 @@ func convertRedisRunConfig(rc *storage.RedisRunConfig) (tcredis.Config, error) { if rc.SentinelConfig != nil { sentinelTLSCfg, err := convertRedisTLSRunConfig(rc.SentinelTLS) if err != nil { - return tcredis.Config{}, fmt.Errorf("sentinel TLS config: %w", err) + return redisconn.Config{}, fmt.Errorf("sentinel TLS config: %w", err) } cfg.SentinelTLS = sentinelTLSCfg } @@ -1121,7 +1121,7 @@ func redisStoreName(rc *storage.RedisRunConfig) string { } // applyRedisTimeouts parses and applies optional timeout duration strings to cfg. -func applyRedisTimeouts(rc *storage.RedisRunConfig, cfg *tcredis.Config) error { +func applyRedisTimeouts(rc *storage.RedisRunConfig, cfg *redisconn.Config) error { if rc.DialTimeout != "" { d, err := time.ParseDuration(rc.DialTimeout) if err != nil { @@ -1147,15 +1147,15 @@ func applyRedisTimeouts(rc *storage.RedisRunConfig, cfg *tcredis.Config) error { } // convertRedisTLSRunConfig converts a RedisTLSRunConfig to a runtime -// tcredis.TLSConfig. Returns an error if a CA cert file is configured but +// redisconn.TLSConfig. Returns an error if a CA cert file is configured but // cannot be read — this is treated as a hard error because silently falling // back to system CAs could mask a misconfiguration and cause confusing TLS // failures downstream. -func convertRedisTLSRunConfig(rc *storage.RedisTLSRunConfig) (*tcredis.TLSConfig, error) { +func convertRedisTLSRunConfig(rc *storage.RedisTLSRunConfig) (*redisconn.TLSConfig, error) { if rc == nil { return nil, nil } - cfg := &tcredis.TLSConfig{ + cfg := &redisconn.TLSConfig{ InsecureSkipVerify: rc.InsecureSkipVerify, } if rc.CACertFile != "" { diff --git a/pkg/authserver/storage/redis.go b/pkg/authserver/storage/redis.go index 9dceb35494..57f781ffae 100644 --- a/pkg/authserver/storage/redis.go +++ b/pkg/authserver/storage/redis.go @@ -18,7 +18,7 @@ import ( "github.com/ory/fosite" "github.com/redis/go-redis/v9" - tcredis "github.com/stacklok/toolhive-core/redis" + "github.com/stacklok/toolhive-core/redisconn" "github.com/stacklok/toolhive/pkg/authserver/server" "github.com/stacklok/toolhive/pkg/authserver/server/registration" "github.com/stacklok/toolhive/pkg/authserver/server/session" @@ -127,15 +127,15 @@ type storedSession struct { // // Connection-mode validation, timeout defaults, client construction (standalone, // cluster, or sentinel), TLS plumbing, and connectivity verification are -// delegated to the shared toolhive-core redis package. cfg.Password may be +// delegated to the shared toolhive-core redisconn package. cfg.Password may be // empty when the Redis server does not require authentication (the auth server // does not mandate ACL auth); the keyPrefix is storage-specific and required. -func NewRedisStorage(ctx context.Context, cfg tcredis.Config, keyPrefix string) (*RedisStorage, error) { +func NewRedisStorage(ctx context.Context, cfg redisconn.Config, keyPrefix string) (*RedisStorage, error) { if keyPrefix == "" { return nil, errors.New("invalid redis configuration: key prefix is required") } - client, err := tcredis.NewClient(ctx, &cfg) + client, err := redisconn.NewClient(ctx, &cfg) if err != nil { return nil, err } diff --git a/pkg/authserver/storage/redis_test.go b/pkg/authserver/storage/redis_test.go index 6339bbe8fc..925e08722c 100644 --- a/pkg/authserver/storage/redis_test.go +++ b/pkg/authserver/storage/redis_test.go @@ -30,7 +30,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - tcredis "github.com/stacklok/toolhive-core/redis" + "github.com/stacklok/toolhive-core/redisconn" "github.com/stacklok/toolhive/pkg/authserver/server/registration" "github.com/stacklok/toolhive/pkg/authserver/server/session" "github.com/stacklok/toolhive/pkg/oauthproto" @@ -124,18 +124,18 @@ func newDCRClient(t *testing.T, id, method, secret string) fosite.Client { // TestNewRedisStorage_Validation covers the auth-server-specific invariants // enforced by NewRedisStorage. Connection-mode topology (Addr XOR Sentinel, // cluster requires Addr, sentinel master name and addresses) and credentials -// are validated by the shared toolhive-core redis package and exercised in its +// are validated by the shared toolhive-core redisconn package and exercised in its // own tests; NewRedisStorage does not mandate a password. func TestNewRedisStorage_Validation(t *testing.T) { t.Parallel() - validCfg := func() tcredis.Config { - return tcredis.Config{Addr: "localhost:6379", Username: "user", Password: "pass"} + validCfg := func() redisconn.Config { + return redisconn.Config{Addr: "localhost:6379", Username: "user", Password: "pass"} } tests := []struct { name string - cfg tcredis.Config + cfg redisconn.Config keyPrefix string wantErr string }{ @@ -163,12 +163,12 @@ func TestNewRedisStorage_ConnectionFailure(t *testing.T) { tests := []struct { name string - cfg tcredis.Config + cfg redisconn.Config }{ { name: "sentinel mode", - cfg: tcredis.Config{ - SentinelConfig: &tcredis.SentinelConfig{ + cfg: redisconn.Config{ + SentinelConfig: &redisconn.SentinelConfig{ MasterName: "mymaster", SentinelAddrs: []string{"localhost:99999"}, // Invalid port }, @@ -179,7 +179,7 @@ func TestNewRedisStorage_ConnectionFailure(t *testing.T) { }, { name: "standalone mode", - cfg: tcredis.Config{ + cfg: redisconn.Config{ Addr: "localhost:19999", Username: "user", Password: "pass", @@ -188,7 +188,7 @@ func TestNewRedisStorage_ConnectionFailure(t *testing.T) { }, { name: "cluster mode", - cfg: tcredis.Config{ + cfg: redisconn.Config{ Addr: "localhost:19998", ClusterMode: true, Username: "user", @@ -219,7 +219,7 @@ func TestNewRedisStorage_Standalone_WithMiniredis(t *testing.T) { // supplied, so we use RequireUserAuth to match the configured username/password. mr.RequireUserAuth("testuser", "testpass") - cfg := tcredis.Config{ + cfg := redisconn.Config{ Addr: mr.Addr(), Username: "testuser", Password: "testpass", @@ -241,7 +241,7 @@ func TestNewRedisStorage_Standalone_Passwordless(t *testing.T) { mr := miniredis.RunT(t) // no RequireUserAuth → auth disabled - cfg := tcredis.Config{Addr: mr.Addr()} + cfg := redisconn.Config{Addr: mr.Addr()} ctx := context.Background() s, err := NewRedisStorage(ctx, cfg, "test:") diff --git a/pkg/runner/runner.go b/pkg/runner/runner.go index 7d4b08f1d2..b4ed508eec 100644 --- a/pkg/runner/runner.go +++ b/pkg/runner/runner.go @@ -17,7 +17,7 @@ import ( "golang.org/x/oauth2" - tcredis "github.com/stacklok/toolhive-core/redis" + "github.com/stacklok/toolhive-core/redisconn" "github.com/stacklok/toolhive/pkg/auth" "github.com/stacklok/toolhive/pkg/auth/remote" authsecrets "github.com/stacklok/toolhive/pkg/auth/secrets" @@ -514,7 +514,7 @@ func (r *Runner) Run(ctx context.Context) error { if keyPrefix == "" { keyPrefix = "thv:proxy:session:" } - storage, err := session.NewRedisStorage(ctx, tcredis.Config{ + storage, err := session.NewRedisStorage(ctx, redisconn.Config{ Addr: redisCfg.Address, Password: os.Getenv(session.RedisPasswordEnvVar), DB: int(redisCfg.DB), diff --git a/pkg/transport/session/manager.go b/pkg/transport/session/manager.go index 28e4ae1dde..5a906a4849 100644 --- a/pkg/transport/session/manager.go +++ b/pkg/transport/session/manager.go @@ -12,7 +12,7 @@ import ( "github.com/google/uuid" - tcredis "github.com/stacklok/toolhive-core/redis" + "github.com/stacklok/toolhive-core/redisconn" ) const ( @@ -130,7 +130,7 @@ func NewManagerWithRedis( ctx context.Context, ttl time.Duration, factory Factory, - cfg tcredis.Config, + cfg redisconn.Config, keyPrefix string, ) (*Manager, error) { storage, err := NewRedisStorage(ctx, cfg, keyPrefix, ttl) diff --git a/pkg/transport/session/manager_redis_test.go b/pkg/transport/session/manager_redis_test.go index d2c203019f..499f553a59 100644 --- a/pkg/transport/session/manager_redis_test.go +++ b/pkg/transport/session/manager_redis_test.go @@ -12,7 +12,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - tcredis "github.com/stacklok/toolhive-core/redis" + "github.com/stacklok/toolhive-core/redisconn" ) func proxyFactory(id string) Session { return NewProxySession(id) } @@ -29,7 +29,7 @@ func TestNewManagerWithRedis(t *testing.T) { context.Background(), time.Hour, proxyFactory, - tcredis.Config{Addr: mr.Addr()}, + redisconn.Config{Addr: mr.Addr()}, "test:mgr:", ) require.NoError(t, err) @@ -47,7 +47,7 @@ func TestNewManagerWithRedis(t *testing.T) { context.Background(), time.Hour, proxyFactory, - tcredis.Config{Addr: "localhost:6379"}, + redisconn.Config{Addr: "localhost:6379"}, "", ) require.Error(t, err) @@ -63,7 +63,7 @@ func TestNewManagerWithRedis(t *testing.T) { context.Background(), time.Hour, proxyFactory, - tcredis.Config{Addr: mr.Addr()}, + redisconn.Config{Addr: mr.Addr()}, "test:mgr:", ) require.NoError(t, err) @@ -86,7 +86,7 @@ func TestNewManagerWithRedis(t *testing.T) { context.Background(), time.Hour, proxyFactory, - tcredis.Config{Addr: mr.Addr()}, + redisconn.Config{Addr: mr.Addr()}, "test:mgr:", ) require.NoError(t, err) diff --git a/pkg/transport/session/session_data_storage_redis.go b/pkg/transport/session/session_data_storage_redis.go index c8b7f47c70..bfa1069bfb 100644 --- a/pkg/transport/session/session_data_storage_redis.go +++ b/pkg/transport/session/session_data_storage_redis.go @@ -12,7 +12,7 @@ import ( "github.com/redis/go-redis/v9" - tcredis "github.com/stacklok/toolhive-core/redis" + "github.com/stacklok/toolhive-core/redisconn" ) // RedisSessionDataStorage implements DataStorage backed by Redis/Valkey. @@ -40,14 +40,14 @@ type RedisSessionDataStorage struct { // delegated to the shared toolhive-core redis package. func NewRedisSessionDataStorage( ctx context.Context, - cfg tcredis.Config, + cfg redisconn.Config, keyPrefix string, ttl time.Duration, ) (*RedisSessionDataStorage, error) { if err := validateSessionInvariants(keyPrefix, ttl); err != nil { return nil, err } - client, err := tcredis.NewClient(ctx, &cfg) + client, err := redisconn.NewClient(ctx, &cfg) if err != nil { return nil, err } diff --git a/pkg/transport/session/storage_redis.go b/pkg/transport/session/storage_redis.go index 3b046d7df7..61fa9d1930 100644 --- a/pkg/transport/session/storage_redis.go +++ b/pkg/transport/session/storage_redis.go @@ -11,7 +11,7 @@ import ( "github.com/redis/go-redis/v9" - tcredis "github.com/stacklok/toolhive-core/redis" + "github.com/stacklok/toolhive-core/redisconn" ) // RedisStorage implements the Storage interface backed by Redis. @@ -30,12 +30,12 @@ type RedisStorage struct { // // Connection-mode validation, timeout defaults, client construction (standalone, // cluster, or sentinel), TLS plumbing, and connectivity verification are -// delegated to the shared toolhive-core redis package. -func NewRedisStorage(ctx context.Context, cfg tcredis.Config, keyPrefix string, ttl time.Duration) (*RedisStorage, error) { +// delegated to the shared toolhive-core redisconn package. +func NewRedisStorage(ctx context.Context, cfg redisconn.Config, keyPrefix string, ttl time.Duration) (*RedisStorage, error) { if err := validateSessionInvariants(keyPrefix, ttl); err != nil { return nil, err } - client, err := tcredis.NewClient(ctx, &cfg) + client, err := redisconn.NewClient(ctx, &cfg) if err != nil { return nil, err } diff --git a/pkg/transport/session/storage_redis_test.go b/pkg/transport/session/storage_redis_test.go index 8804f65a11..5a7a1529fd 100644 --- a/pkg/transport/session/storage_redis_test.go +++ b/pkg/transport/session/storage_redis_test.go @@ -17,7 +17,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - tcredis "github.com/stacklok/toolhive-core/redis" + "github.com/stacklok/toolhive-core/redisconn" ) // --- Test Helpers --- @@ -94,7 +94,7 @@ func TestNewRedisStorageInvariants(t *testing.T) { t.Parallel() _, err := NewRedisStorage( context.Background(), - tcredis.Config{Addr: "localhost:0"}, + redisconn.Config{Addr: "localhost:0"}, tc.keyPrefix, tc.ttl, ) @@ -113,7 +113,7 @@ func TestNewRedisStorageACLAuth(t *testing.T) { defer mr.Close() mr.RequireUserAuth("alice", "secret") - storage, err := NewRedisStorage(context.Background(), tcredis.Config{ + storage, err := NewRedisStorage(context.Background(), redisconn.Config{ Addr: mr.Addr(), Username: "alice", Password: "secret", @@ -135,7 +135,7 @@ func TestNewRedisStorageACLAuth(t *testing.T) { defer mr.Close() mr.RequireUserAuth("alice", "secret") - _, err := NewRedisStorage(context.Background(), tcredis.Config{ + _, err := NewRedisStorage(context.Background(), redisconn.Config{ Addr: mr.Addr(), Username: "alice", Password: "wrong", diff --git a/pkg/vmcp/server/serve_session_termination_test.go b/pkg/vmcp/server/serve_session_termination_test.go index 1819ab1361..015202896a 100644 --- a/pkg/vmcp/server/serve_session_termination_test.go +++ b/pkg/vmcp/server/serve_session_termination_test.go @@ -15,7 +15,7 @@ import ( "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" - tcredis "github.com/stacklok/toolhive-core/redis" + "github.com/stacklok/toolhive-core/redisconn" transportsession "github.com/stacklok/toolhive/pkg/transport/session" "github.com/stacklok/toolhive/pkg/vmcp" vmcpconfig "github.com/stacklok/toolhive/pkg/vmcp/config" @@ -111,7 +111,7 @@ func TestRegression_OriginPod_RejectsRequestAfterCrossPodTermination(t *testing. terminatorFactory := sessionfactorymocks.NewMockMultiSessionFactory(ctrl) terminatorStorage, err := transportsession.NewRedisSessionDataStorage( context.Background(), - tcredis.Config{Addr: mr.Addr()}, + redisconn.Config{Addr: mr.Addr()}, sharedRedisSessionKeyPrefix, time.Hour, ) diff --git a/pkg/vmcp/server/server.go b/pkg/vmcp/server/server.go index c6deb3c6f9..fb757f3e55 100644 --- a/pkg/vmcp/server/server.go +++ b/pkg/vmcp/server/server.go @@ -22,7 +22,7 @@ import ( "time" "github.com/stacklok/toolhive-core/mcpcompat/server" - tcredis "github.com/stacklok/toolhive-core/redis" + "github.com/stacklok/toolhive-core/redisconn" "github.com/stacklok/toolhive/pkg/audit" "github.com/stacklok/toolhive/pkg/auth" asrunner "github.com/stacklok/toolhive/pkg/authserver/runner" @@ -397,7 +397,7 @@ func buildSessionDataStorage(ctx context.Context, cfg *Config) (transportsession "%s is set but empty; unset it for a no-auth connection or fix the referenced secret", vmcpconfig.RedisPasswordEnvVar) } - redisCfg := tcredis.Config{ + redisCfg := redisconn.Config{ Addr: cfg.SessionStorage.Address, Password: password, DB: int(cfg.SessionStorage.DB), diff --git a/pkg/vmcp/server/sessionmanager/horizontal_scaling_integration_test.go b/pkg/vmcp/server/sessionmanager/horizontal_scaling_integration_test.go index 23fc831a67..4f66675b46 100644 --- a/pkg/vmcp/server/sessionmanager/horizontal_scaling_integration_test.go +++ b/pkg/vmcp/server/sessionmanager/horizontal_scaling_integration_test.go @@ -17,7 +17,7 @@ import ( mcpmcp "github.com/stacklok/toolhive-core/mcpcompat/mcp" mcpserver "github.com/stacklok/toolhive-core/mcpcompat/server" - tcredis "github.com/stacklok/toolhive-core/redis" + "github.com/stacklok/toolhive-core/redisconn" "github.com/stacklok/toolhive/pkg/auth" transportsession "github.com/stacklok/toolhive/pkg/transport/session" "github.com/stacklok/toolhive/pkg/vmcp" @@ -58,7 +58,7 @@ func newSharedRedisStorageWithTTL(t *testing.T, mr *miniredis.Miniredis, ttl tim t.Helper() storage, err := transportsession.NewRedisSessionDataStorage( context.Background(), - tcredis.Config{ + redisconn.Config{ Addr: mr.Addr(), }, "test:vmcp:session:", diff --git a/sdk/go/client/oas_json_gen.go b/sdk/go/client/oas_json_gen.go index 6849c277f3..fc6ea05aeb 100644 --- a/sdk/go/client/oas_json_gen.go +++ b/sdk/go/client/oas_json_gen.go @@ -26911,6 +26911,12 @@ func (s *RegistryPlugin) encodeFields(e *jx.Encoder) { e.ArrEnd() } } + { + if s.Provenance.Set { + e.FieldStart("provenance") + s.Provenance.Encode(e) + } + } { if s.Repository.Set { e.FieldStart("repository") @@ -26937,7 +26943,7 @@ func (s *RegistryPlugin) encodeFields(e *jx.Encoder) { } } -var jsonFieldsNameOfRegistryPlugin = [12]string{ +var jsonFieldsNameOfRegistryPlugin = [13]string{ 0: "_meta", 1: "description", 2: "icons", @@ -26946,10 +26952,11 @@ var jsonFieldsNameOfRegistryPlugin = [12]string{ 5: "name", 6: "namespace", 7: "packages", - 8: "repository", - 9: "status", - 10: "title", - 11: "version", + 8: "provenance", + 9: "repository", + 10: "status", + 11: "title", + 12: "version", } // Decode decodes RegistryPlugin from json. @@ -27054,6 +27061,16 @@ func (s *RegistryPlugin) Decode(d *jx.Decoder) error { }(); err != nil { return errors.Wrap(err, "decode field \"packages\"") } + case "provenance": + if err := func() error { + s.Provenance.Reset() + if err := s.Provenance.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"provenance\"") + } case "repository": if err := func() error { s.Repository.Reset() diff --git a/sdk/go/client/oas_schemas_gen.go b/sdk/go/client/oas_schemas_gen.go index 6b78b51934..be7f60f1dc 100644 --- a/sdk/go/client/oas_schemas_gen.go +++ b/sdk/go/client/oas_schemas_gen.go @@ -15313,6 +15313,7 @@ type RegistryPlugin struct { Namespace OptString `json:"namespace"` // Packages is the list of packages for the plugin. Packages []RegistrySkillPackage `json:"packages"` + Provenance OptRegistryProvenance `json:"provenance"` Repository OptRegistrySkillRepository `json:"repository"` // Status is the status of the plugin. // Can be one of "active", "deprecated", or "archived". @@ -15366,6 +15367,11 @@ func (s *RegistryPlugin) GetPackages() []RegistrySkillPackage { return s.Packages } +// GetProvenance returns the value of Provenance. +func (s *RegistryPlugin) GetProvenance() OptRegistryProvenance { + return s.Provenance +} + // GetRepository returns the value of Repository. func (s *RegistryPlugin) GetRepository() OptRegistrySkillRepository { return s.Repository @@ -15426,6 +15432,11 @@ func (s *RegistryPlugin) SetPackages(val []RegistrySkillPackage) { s.Packages = val } +// SetProvenance sets the value of Provenance. +func (s *RegistryPlugin) SetProvenance(val OptRegistryProvenance) { + s.Provenance = val +} + // SetRepository sets the value of Repository. func (s *RegistryPlugin) SetRepository(val OptRegistrySkillRepository) { s.Repository = val diff --git a/sdk/go/openapi.json b/sdk/go/openapi.json index 5978e66fe0..05c926e564 100644 --- a/sdk/go/openapi.json +++ b/sdk/go/openapi.json @@ -3233,6 +3233,9 @@ "type": "array", "uniqueItems": false }, + "provenance": { + "$ref": "#/components/schemas/RegistryProvenance" + }, "repository": { "$ref": "#/components/schemas/RegistrySkillRepository" }, diff --git a/sdk/go/openapi.yaml b/sdk/go/openapi.yaml index 95499ddcee..91527e97e6 100644 --- a/sdk/go/openapi.yaml +++ b/sdk/go/openapi.yaml @@ -2980,6 +2980,8 @@ components: $ref: '#/components/schemas/RegistrySkillPackage' type: array uniqueItems: false + provenance: + $ref: '#/components/schemas/RegistryProvenance' repository: $ref: '#/components/schemas/RegistrySkillRepository' status: