diff --git a/Makefile b/Makefile index c57718a5c..2ca9833fb 100644 --- a/Makefile +++ b/Makefile @@ -67,17 +67,46 @@ update-all: mod-download update-deps update-code-generator mod-download: go mod download all +.PHONY: install-tools +install-tools: update-deps install-protoc + .PHONY: update-deps update-deps: mkdir -p $(DEPSGOBIN) - go install github.com/solo-io/protoc-gen-ext - go install github.com/solo-io/protoc-gen-openapi@v0.1.1 + go install github.com/solo-io/protoc-gen-ext@v0.0.18 + go install github.com/solo-io/protoc-gen-openapi@v0.2.4 go install golang.org/x/tools/cmd/goimports - go install github.com/golang/protobuf/protoc-gen-go - go install github.com/envoyproxy/protoc-gen-validate + go install github.com/golang/protobuf/protoc-gen-go@v1.5.4 + go install github.com/envoyproxy/protoc-gen-validate@v1.0.4 go install github.com/golang/mock/gomock go install github.com/golang/mock/mockgen +# proto compiler installation +# no explicit arm build, but x86_64 build works on arm macs +PROTOC_VERSION:=3.6.1 +PROTOC_URL:=https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION} +.PHONY: install-protoc +install-protoc: + mkdir -p $(DEPSGOBIN) + if [ $(shell ${DEPSGOBIN}/protoc --version | grep -c ${PROTOC_VERSION}) -ne 0 ]; then \ + echo expected protoc version ${PROTOC_VERSION} already installed ;\ + else \ + if [ "$(shell uname)" = "Darwin" ]; then \ + echo "downloading protoc for osx" ;\ + wget $(PROTOC_URL)-osx-x86_64.zip -O $(DEPSGOBIN)/protoc-${PROTOC_VERSION}.zip ;\ + elif [ "$(shell uname -m)" = "aarch64" ]; then \ + echo "downloading protoc for linux aarch64" ;\ + wget $(PROTOC_URL)-linux-aarch_64.zip -O $(DEPSGOBIN)/protoc-${PROTOC_VERSION}.zip ;\ + else \ + echo "downloading protoc for linux x86-64" ;\ + wget $(PROTOC_URL)-linux-x86_64.zip -O $(DEPSGOBIN)/protoc-${PROTOC_VERSION}.zip ;\ + fi ;\ + unzip $(DEPSGOBIN)/protoc-${PROTOC_VERSION}.zip -d $(DEPSGOBIN)/protoc-${PROTOC_VERSION} ;\ + mv $(DEPSGOBIN)/protoc-${PROTOC_VERSION}/bin/protoc $(DEPSGOBIN)/protoc ;\ + chmod +x $(DEPSGOBIN)/protoc ;\ + rm -rf $(DEPSGOBIN)/protoc-${PROTOC_VERSION} $(DEPSGOBIN)/protoc-${PROTOC_VERSION}.zip ;\ + fi + .PHONY: update-code-generator update-code-generator: chmod +x $(shell go list -f '{{ .Dir }}' -m k8s.io/code-generator)/generate-groups.sh @@ -144,7 +173,7 @@ verify-envoy-protos: # Tests #---------------------------------------------------------------------------------- -GINKGO_VERSION := 2.5.0 +GINKGO_VERSION ?= $(shell echo $(shell go list -m github.com/onsi/ginkgo/v2) | cut -d' ' -f2) GINKGO_ENV ?= GOLANG_PROTOBUF_REGISTRATION_CONFLICT=ignore ACK_GINKGO_DEPRECATIONS=$(GINKGO_VERSION) GINKGO_FLAGS ?= -v -tags=purego -compilers=4 --randomize-all --trace -progress -race GINKGO_REPORT_FLAGS ?= --json-report=test-report.json --junit-report=junit.xml -output-dir=$(OUTPUT_DIR) @@ -157,7 +186,7 @@ GINKGO_USER_FLAGS ?= .PHONY: install-test-tools install-test-tools: - go install github.com/onsi/ginkgo/v2/ginkgo@v$(GINKGO_VERSION) + go install github.com/onsi/ginkgo/v2/ginkgo@$(GINKGO_VERSION) .PHONY: test test: install-test-tools ## Run all tests, or only run the test package at {TEST_PKG} if it is specified diff --git a/api/v1/generate.sh b/api/v1/generate.sh index d541244ba..b5275f05c 100755 --- a/api/v1/generate.sh +++ b/api/v1/generate.sh @@ -16,19 +16,26 @@ SOLO_KIT=${ROOT}/solo-kit IN=${SOLO_KIT}/api/v1/ VENDOR_ROOT=vendor_any/github.com +# Scripts are a legacy component of our CI, and ideally would be converted to go code, +# since the functionality is available in code-generator/collector/compiler.go +# However, since this library is rarely modified, we do not want to make sweeping changes to the code generation step. +# To improve the debuggability of these scripts, we include some identifier so that we can more easily triage issues. +SCRIPT_ID="api/v1/generate.sh" + TEMP_DIR=$(mktemp -d) cleanup() { echo ">> Removing ${TEMP_DIR}" rm -rf ${TEMP_DIR} } -trap "cleanup" EXIT SIGINT +trap "cleanup ${SCRIPT_ID}" EXIT SIGINT -echo ">> Temporary output directory ${TEMP_DIR}" +echo ">> Invoking ${SCRIPT_ID}: temporary output directory ${TEMP_DIR}" IMPORTS="\ -I=${IN} \ -I=${ROOT} \ - -I=${VENDOR_ROOT}/solo-io/protoc-gen-ext" + -I=${VENDOR_ROOT}/solo-io/protoc-gen-ext \ + -I=${VENDOR_ROOT}/solo-io/protoc-gen-ext/external" GO_FLAG="--go_out=${TEMP_DIR}" HASH_FLAG="--ext_out=${TEMP_DIR}" diff --git a/changelog/v0.33.2/no-external-links.yaml b/changelog/v0.33.2/no-external-links.yaml new file mode 100644 index 000000000..984f45e22 --- /dev/null +++ b/changelog/v0.33.2/no-external-links.yaml @@ -0,0 +1,6 @@ +changelog: +- type: FIX + issueLink: https://github.com/solo-io/solo-projects/issues/6768 + resolvesIssue: false + description: >- + Update protobuf processing to no longer render links to locally hosted external API docs, as they are being removed. diff --git a/changelog/v0.34.0/bump-k8s-128.yaml b/changelog/v0.34.0/bump-k8s-128.yaml new file mode 100644 index 000000000..293abfbb3 --- /dev/null +++ b/changelog/v0.34.0/bump-k8s-128.yaml @@ -0,0 +1,50 @@ +changelog: +- type: BREAKING_CHANGE + description: > + Bump dependencies to support Kubernetes 1.28 + issueLink: https://github.com/solo-io/gloo/issues/8515 + resolvesIssue: false +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: api + dependencyTag: v0.28.3 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: apiextensions-apiserver + dependencyTag: v0.28.3 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: apimachinery + dependencyTag: v0.28.3 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: client-go + dependencyTag: v0.28.3 +- type: DEPENDENCY_BUMP + dependencyOwner: sigs.k8s.io + dependencyRepo: code-generator + dependencyTag: v0.28.3 +- type: DEPENDENCY_BUMP + dependencyOwner: envoyproxy + dependencyRepo: go-control-plane + dependencyTag: v0.11.1-0.20230524094728-9239064ad72f +- type: DEPENDENCY_BUMP + dependencyOwner: onsi + dependencyRepo: ginkgo/v2 + dependencyTag: v2.11.0 +- type: DEPENDENCY_BUMP + dependencyOwner: onsi + dependencyRepo: gomega + dependencyTag: v1.27.10 +- type: DEPENDENCY_BUMP + dependencyOwner: solo-io + dependencyRepo: go-utils + dependencyTag: v0.24.8 +- type: DEPENDENCY_BUMP + dependencyOwner: solo-io + dependencyRepo: k8s-utils + dependencyTag: v0.6.0 +- type: DEPENDENCY_BUMP + dependencyOwner: solo-io + dependencyRepo: cloud-builders + dependencyTag: v0.8.0 diff --git a/changelog/v0.34.1/go-1.21.yaml b/changelog/v0.34.1/go-1.21.yaml new file mode 100644 index 000000000..ff6775b7c --- /dev/null +++ b/changelog/v0.34.1/go-1.21.yaml @@ -0,0 +1,5 @@ + changelog: + - type: NON_USER_FACING + issueLink: https://github.com/solo-io/gloo-mesh-enterprise/issues/11090 + description: Bump time before declaring a deadlock when processing proto imports to 15s instead of 5s. + resolvesIssue: false \ No newline at end of file diff --git a/changelog/v0.34.2/consistent-validation-output.yaml b/changelog/v0.34.2/consistent-validation-output.yaml new file mode 100644 index 000000000..946dee5a8 --- /dev/null +++ b/changelog/v0.34.2/consistent-validation-output.yaml @@ -0,0 +1,9 @@ +changelog: + - type: NON_USER_FACING + description: > + Updated reporter validation: + * Added ValidateSeparateWarnings to return warnings separately from errors + * Added ValidateSeparateWarningsAndErrors to provide a single method to validate and return warnings and errors separately to keep a consistent interface even if warnings will always be `nil` + * Updated all Valdiation to return errors and warnings in a consistent order + issueLink: https://github.com/solo-io/gloo/issues/8931 + resolvesIssue: false diff --git a/changelog/v0.34.3/mem-client-expression-selector.yaml b/changelog/v0.34.3/mem-client-expression-selector.yaml new file mode 100644 index 000000000..c36af59f3 --- /dev/null +++ b/changelog/v0.34.3/mem-client-expression-selector.yaml @@ -0,0 +1,5 @@ +changelog: + - type: FIX + issueLink: https://github.com/solo-io/solo-kit/issues/553 + description: >- + Add support for ExpressionSelector in memory ResourceClient. diff --git a/changelog/v0.35.0/bump-k8s-129.yaml b/changelog/v0.35.0/bump-k8s-129.yaml new file mode 100644 index 000000000..557a693f6 --- /dev/null +++ b/changelog/v0.35.0/bump-k8s-129.yaml @@ -0,0 +1,54 @@ +changelog: +- type: BREAKING_CHANGE + description: > + Bump dependencies to support Kubernetes 1.29 + issueLink: https://github.com/solo-io/gloo/issues/8978 + resolvesIssue: false +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: api + dependencyTag: v0.29.2 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: apiextensions-apiserver + dependencyTag: v0.29.2 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: apimachinery + dependencyTag: v0.29.2 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: client-go + dependencyTag: v0.29.2 +- type: DEPENDENCY_BUMP + dependencyOwner: sigs.k8s.io + dependencyRepo: code-generator + dependencyTag: v0.29.2 +- type: DEPENDENCY_BUMP + dependencyOwner: envoyproxy + dependencyRepo: go-control-plane + dependencyTag: v0.11.1 +- type: DEPENDENCY_BUMP + dependencyOwner: envoyproxy + dependencyRepo: protoc-gen-validate + dependencyTag: v1.0.2 +- type: DEPENDENCY_BUMP + dependencyOwner: onsi + dependencyRepo: ginkgo/v2 + dependencyTag: v2.14.0 +- type: DEPENDENCY_BUMP + dependencyOwner: onsi + dependencyRepo: gomega + dependencyTag: v1.30.0 +- type: DEPENDENCY_BUMP + dependencyOwner: go.uber.org + dependencyRepo: zap + dependencyTag: v1.26.0 +- type: DEPENDENCY_BUMP + dependencyOwner: solo-io + dependencyRepo: k8s-utils + dependencyTag: v0.7.2 +- type: DEPENDENCY_BUMP + dependencyOwner: solo-io + dependencyRepo: cloud-builders + dependencyTag: v0.9.1 diff --git a/changelog/v0.35.1/json-apisnapshot.yaml b/changelog/v0.35.1/json-apisnapshot.yaml new file mode 100644 index 000000000..620ad826c --- /dev/null +++ b/changelog/v0.35.1/json-apisnapshot.yaml @@ -0,0 +1,6 @@ +changelog: +- type: NEW_FEATURE + issueLink: https://github.com/solo-io/gloo/issues/6494 + resolvesIssue: false + description: >- + Added code to template for ApiSnapshot that implements JsonMarshaler diff --git a/changelog/v0.35.2/disable-kube-markers.yaml b/changelog/v0.35.2/disable-kube-markers.yaml new file mode 100644 index 000000000..f89f94694 --- /dev/null +++ b/changelog/v0.35.2/disable-kube-markers.yaml @@ -0,0 +1,11 @@ +changelog: + - type: NEW_FEATURE + issueLink: https://github.com/solo-io/gloo-mesh-enterprise/issues/17005 + resolvesIssue: false + description: | + Adds support for disabling kubebuilder markers and validations to omit them from the generated OpenAPI schema. + - type: DEPENDENCY_BUMP + description: Updates protoc-gen-openapi to v0.2.4 + dependencyOwner: solo-io + dependencyRepo: protoc-gen-openapi + dependencyTag: v0.2.4 diff --git a/changelog/v0.35.3/revert-json-apisnapshot.yaml b/changelog/v0.35.3/revert-json-apisnapshot.yaml new file mode 100644 index 000000000..e49243fdf --- /dev/null +++ b/changelog/v0.35.3/revert-json-apisnapshot.yaml @@ -0,0 +1,8 @@ +changelog: +- type: FIX + issueLink: https://github.com/solo-io/gloo-mesh-enterprise/issues/16010 + resolvesIssue: false + description: | + Reverts the change in https://github.com/solo-io/solo-kit/pull/554 (released in v0.35.1) that implemented json.Marshaler in snapshot templates. + That change was unused (the initial issue was resolved without it). + However, when pulled into the https://github.com/solo-io/gloo repo to get the subsequent change, it resulted in test failures; reverting to fix the tests. diff --git a/changelog/v0.36.0/9683-go-k8s-upgrade.yaml b/changelog/v0.36.0/9683-go-k8s-upgrade.yaml new file mode 100644 index 000000000..2855785e3 --- /dev/null +++ b/changelog/v0.36.0/9683-go-k8s-upgrade.yaml @@ -0,0 +1,90 @@ +changelog: +- type: BREAKING_CHANGE + description: > + Bump dependencies to support Kubernetes 1.31 + issueLink: https://github.com/solo-io/gloo/issues/9683 + resolvesIssue: false +- type: DEPENDENCY_BUMP + dependencyOwner: envoyproxy + dependencyRepo: go-control-plane + dependencyTag: v0.12.0 +- type: DEPENDENCY_BUMP + dependencyOwner: envoyproxy + dependencyRepo: protoc-gen-validate + dependencyTag: v1.0.4 +- type: DEPENDENCY_BUMP + dependencyOwner: golang + dependencyRepo: protobuf + dependencyTag: v1.5.4 +- type: DEPENDENCY_BUMP + dependencyOwner: iancoleman + dependencyRepo: strcase + dependencyTag: v0.3.0 +- type: DEPENDENCY_BUMP + dependencyOwner: onsi + dependencyRepo: ginkgo + dependencyTag: v2.19.0 +- type: DEPENDENCY_BUMP + dependencyOwner: onsi + dependencyRepo: gomega + dependencyTag: v1.33.1 +- type: DEPENDENCY_BUMP + dependencyOwner: solo-io + dependencyRepo: go-utils + dependencyTag: v0.26.0 +- type: DEPENDENCY_BUMP + dependencyOwner: solo-io + dependencyRepo: k8s-utils + dependencyTag: v0.8.0 +- type: DEPENDENCY_BUMP + dependencyOwner: golang + dependencyRepo: x/sync + dependencyTag: v0.8.0 +- type: DEPENDENCY_BUMP + dependencyOwner: google + dependencyRepo: genproto/googleapis/apis + dependencyTag: v0.0.0-20240528184218-531527333157 +- type: DEPENDENCY_BUMP + dependencyOwner: google + dependencyRepo: genproto/googleapis/rpc + dependencyTag: v0.0.0-20240701130421-f6361c86f094 +- type: DEPENDENCY_BUMP + dependencyOwner: google + dependencyRepo: genproto/googleapis/rpc + dependencyTag: v0.0.0-20240701130421-f6361c86f094 +- type: DEPENDENCY_BUMP + dependencyOwner: google + dependencyRepo: grpc + dependencyTag: v1.65.0 +- type: DEPENDENCY_BUMP + dependencyOwner: google + dependencyRepo: protobuf + dependencyTag: v1.34.2 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: api + dependencyTag: v0.31.0 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: apiextensions-apiserver + dependencyTag: v0.31.0 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: apimachinery + dependencyTag: v0.31.0 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: client-go + dependencyTag: v0.31.0 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: code-generator + dependencyTag: v0.31.0 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: utils + dependencyTag: v0.0.0-20240711033017-18e509b52bc8 +- type: DEPENDENCY_BUMP + dependencyOwner: solo-io + dependencyRepo: cloud-builders + dependencyTag: v0.10.1 diff --git a/changelog/v0.36.1/add-delete-ns-snapshot.yaml b/changelog/v0.36.1/add-delete-ns-snapshot.yaml new file mode 100644 index 000000000..d8a9be689 --- /dev/null +++ b/changelog/v0.36.1/add-delete-ns-snapshot.yaml @@ -0,0 +1,8 @@ +changelog: +- type: FIX + issueLink: https://github.com/solo-io/gloo/issues/9274 + resolvesIssue: false + description: >- + Adds the `RemoveMatches` method in `snapshot_template.go` that removes all resources that match the given predicate. + Adds the ability for event loops to determine if the Syncer passed is a `SyncDecider` to determine if a sync is necessary. + diff --git a/changelog/v0.36.1/fix-duplicate-predicate.yaml b/changelog/v0.36.1/fix-duplicate-predicate.yaml new file mode 100644 index 000000000..9a0d63f6c --- /dev/null +++ b/changelog/v0.36.1/fix-duplicate-predicate.yaml @@ -0,0 +1,6 @@ +changelog: +- type: FIX + issueLink: https://github.com/solo-io/gloo/issues/9274 + resolvesIssue: false + description: Fixes the issue of multiple declarations of Predicate when multiple snapshots are generated + diff --git a/changelog/v0.36.1/fix-protoc-target.yaml b/changelog/v0.36.1/fix-protoc-target.yaml new file mode 100644 index 000000000..8d07b00fc --- /dev/null +++ b/changelog/v0.36.1/fix-protoc-target.yaml @@ -0,0 +1,4 @@ +changelog: +- type: NON_USER_FACING + description: >- + Fix the "install-protoc" Makefile target. diff --git a/changelog/v0.36.2/no-external-links.yaml b/changelog/v0.36.2/no-external-links.yaml new file mode 100644 index 000000000..984f45e22 --- /dev/null +++ b/changelog/v0.36.2/no-external-links.yaml @@ -0,0 +1,6 @@ +changelog: +- type: FIX + issueLink: https://github.com/solo-io/solo-projects/issues/6768 + resolvesIssue: false + description: >- + Update protobuf processing to no longer render links to locally hosted external API docs, as they are being removed. diff --git a/ci/oss_compliance/osa_provided.md b/ci/oss_compliance/osa_provided.md index b0c9d9db1..2aef078ec 100644 --- a/ci/oss_compliance/osa_provided.md +++ b/ci/oss_compliance/osa_provided.md @@ -3,38 +3,39 @@ Name|Version|License [cuelang.org/go](https://cuelang.org/go)|v0.3.2|Apache License 2.0 [Masterminds/sprig](https://github.com/Masterminds/sprig)|v2.22.0+incompatible|MIT License [bugsnag/bugsnag-go](https://github.com/bugsnag/bugsnag-go)|v1.5.0|MIT License -[envoyproxy/go-control-plane](https://github.com/envoyproxy/go-control-plane)|v0.10.2-0.20220325020618-49ff273808a1|Apache License 2.0 -[envoyproxy/protoc-gen-validate](https://github.com/envoyproxy/protoc-gen-validate)|v0.4.0|Apache License 2.0 +[envoyproxy/go-control-plane](https://github.com/envoyproxy/go-control-plane)|v0.12.0|Apache License 2.0 +[envoyproxy/protoc-gen-validate](https://github.com/envoyproxy/protoc-gen-validate)|v1.0.4|Apache License 2.0 [fgrosse/zaptest](https://github.com/fgrosse/zaptest)|v1.1.0|MIT License [getkin/kin-openapi](https://github.com/getkin/kin-openapi)|v0.80.0|MIT License [ghodss/yaml](https://github.com/ghodss/yaml)|v1.0.1-0.20190212211648-25d852aebe32|MIT License [go-test/deep](https://github.com/go-test/deep)|v1.0.2|MIT License -[golang/protobuf](https://github.com/golang/protobuf)|v1.5.3|BSD 3-clause "New" or "Revised" License +[golang/protobuf](https://github.com/golang/protobuf)|v1.5.4|BSD 3-clause "New" or "Revised" License [grpc-ecosystem/go-grpc-middleware](https://github.com/grpc-ecosystem/go-grpc-middleware)|v1.3.0|Apache License 2.0 [iancoleman/strcase](https://github.com/iancoleman/strcase)|v0.0.0-20191112232945-16388991a334|MIT License [mitchellh/hashstructure](https://github.com/mitchellh/hashstructure)|v1.0.0|MIT License -[ginkgo/v2](https://github.com/onsi/ginkgo)|v2.9.5|MIT License -[onsi/gomega](https://github.com/onsi/gomega)|v1.27.7|MIT License +[ginkgo/v2](https://github.com/onsi/ginkgo)|v2.19.0|MIT License +[onsi/gomega](https://github.com/onsi/gomega)|v1.33.1|MIT License [pkg/errors](https://github.com/pkg/errors)|v0.9.1|BSD 2-clause "Simplified" License [pseudomuto/protoc-gen-doc](https://github.com/pseudomuto/protoc-gen-doc)|v1.5.0|MIT License [pseudomuto/protokit](https://github.com/pseudomuto/protokit)|v0.2.0|MIT License [radovskyb/watcher](https://github.com/radovskyb/watcher)|v1.0.2|BSD 3-clause "New" or "Revised" License [rotisserie/eris](https://github.com/rotisserie/eris)|v0.1.1|MIT License [go.opencensus.io](https://go.opencensus.io)|v0.24.0|Apache License 2.0 -[go.uber.org/zap](https://go.uber.org/zap)|v1.24.0|MIT License -[x/sync](https://golang.org/x/sync)|v0.2.0|BSD 3-clause "New" or "Revised" License -[google.golang.org/genproto](https://google.golang.org/genproto)|v0.0.0-20221201164419-0e50fba7f41c|Apache License 2.0 -[google.golang.org/grpc](https://google.golang.org/grpc)|v1.51.0|Apache License 2.0 -[google.golang.org/protobuf](https://google.golang.org/protobuf)|v1.30.0|BSD 3-clause "New" or "Revised" License +[go.uber.org/zap](https://go.uber.org/zap)|v1.26.0|MIT License +[x/sync](https://golang.org/x/sync)|v0.8.0|BSD 3-clause "New" or "Revised" License +[googleapis/api](https://google.golang.org/genproto/googleapis/api)|v0.0.0-20240528184218-531527333157|Apache License 2.0 +[googleapis/rpc](https://google.golang.org/genproto/googleapis/rpc)|v0.0.0-20240701130421-f6361c86f094|Apache License 2.0 +[google.golang.org/grpc](https://google.golang.org/grpc)|v1.65.0|Apache License 2.0 +[google.golang.org/protobuf](https://google.golang.org/protobuf)|v1.34.2|BSD 3-clause "New" or "Revised" License [gopkg.in/yaml.v2](https://gopkg.in/yaml.v2)|v2.4.0|Apache License 2.0 -[k8s.io/api](https://k8s.io/api)|v0.27.3|Apache License 2.0 -[k8s.io/apiextensions-apiserver](https://k8s.io/apiextensions-apiserver)|v0.27.3|Apache License 2.0 -[k8s.io/apimachinery](https://k8s.io/apimachinery)|v0.27.3|Apache License 2.0 -[k8s.io/client-go](https://k8s.io/client-go)|v0.27.3|Apache License 2.0 -[k8s.io/code-generator](https://k8s.io/code-generator)|v0.27.3|Apache License 2.0 -[k8s.io/utils](https://k8s.io/utils)|v0.0.0-20230209194617-a36077c30491|Apache License 2.0 -[structured-merge-diff/v4](https://sigs.k8s.io/structured-merge-diff/v4)|v4.2.3|Apache License 2.0 -[sigs.k8s.io/yaml](https://sigs.k8s.io/yaml)|v1.3.0|MIT License +[k8s.io/api](https://k8s.io/api)|v0.31.0|Apache License 2.0 +[k8s.io/apiextensions-apiserver](https://k8s.io/apiextensions-apiserver)|v0.31.0|Apache License 2.0 +[k8s.io/apimachinery](https://k8s.io/apimachinery)|v0.31.0|Apache License 2.0 +[k8s.io/client-go](https://k8s.io/client-go)|v0.31.0|Apache License 2.0 +[k8s.io/code-generator](https://k8s.io/code-generator)|v0.31.0|Apache License 2.0 +[k8s.io/utils](https://k8s.io/utils)|v0.0.0-20240711033017-18e509b52bc8|Apache License 2.0 +[structured-merge-diff/v4](https://sigs.k8s.io/structured-merge-diff/v4)|v4.4.1|Apache License 2.0 +[sigs.k8s.io/yaml](https://sigs.k8s.io/yaml)|v1.4.0|MIT License [cmd/goimports](https://golang.org/x/tools/cmd/goimports)|latest|MIT License [gogo/protobuf](https://github.com/gogo/protobuf)|latest|MIT License [envoyproxy/envoy](https://github.com/envoyproxy/envoy)|latest|Apache License 2.0 diff --git a/cloudbuild-cache.yaml b/cloudbuild-cache.yaml index 347d567c3..289987812 100644 --- a/cloudbuild-cache.yaml +++ b/cloudbuild-cache.yaml @@ -10,17 +10,17 @@ steps: path: /root/.ssh id: 'untar-mod-cache' -- name: 'golang:1.20.1' +- name: 'golang:1.23.0' args: ['go', 'mod', 'download', 'all'] volumes: *vol id: 'download' -- name: 'golang:1.20.1' +- name: 'golang:1.23.0' args: ['go', 'mod', 'tidy'] volumes: *vol id: 'tidy' -- name: 'golang:1.20.1' +- name: 'golang:1.23.0' entrypoint: 'bash' volumes: *vol args: ['-c', ' cd /go/pkg && tar -zvcf solo-kit-mod.tar.gz mod'] diff --git a/cloudbuild.yaml b/cloudbuild.yaml index 91c163d1e..993218e12 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -7,7 +7,7 @@ steps: dir: &dir '/workspace/solo-kit' # prepare-workspace to set up the project so it can be built and tested -- name: 'gcr.io/$PROJECT_ID/prepare-go-workspace:0.6.2' +- name: 'gcr.io/$PROJECT_ID/prepare-go-workspace:0.10.1' args: - "--repo-name" - "$REPO_NAME" @@ -20,14 +20,14 @@ steps: id: 'prepare-workspace' # download massive container in parallel -- name: 'gcr.io/$PROJECT_ID/e2e-go-mod-ginkgo:0.6.2' +- name: 'gcr.io/$PROJECT_ID/e2e-go-mod-ginkgo:0.10.1' entrypoint: 'bash' dir: *dir args: ['-c', 'ls'] waitFor: ['-'] # Installs go executables required by codegen tests -- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.6.2' +- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.10.1' args: ['update-all'] waitFor: ['prepare-workspace'] id: 'update-deps' @@ -43,29 +43,31 @@ steps: args: ['container', 'clusters', 'get-credentials', 'solo-kit-test'] id: 'gcloud-solo-kit-test' +# check code gen for kubernetes custom resources +# this step passes if there is no generated diff, fails otherwise +- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.10.1' + entrypoint: 'bash' + args: ['ci/check-code-gen.sh'] + waitFor: ['update-deps'] + dir: *dir + id: 'check-code-and-docs-gen' + # e2e-go-mod-ginkgo is produced from https://github.com/solo-io/cloud-builders/tree/master/e2e-go-mod-ginkgo # sets up redis, consul, kubectl, go with required environment variables # need to use the provided entrypoint -- name: 'gcr.io/$PROJECT_ID/e2e-go-mod-ginkgo:0.6.2' - entrypoint: 'bash' +- name: 'gcr.io/$PROJECT_ID/e2e-go-mod-ginkgo:0.10.1' + dir: *dir + entrypoint: 'make' + args: + - 'test' + waitFor: + - 'check-code-and-docs-gen' env: - 'RUN_KUBE_TESTS=1' - 'RUN_CONSUL_TESTS=1' - 'RUN_VAULT_TESTS=1' - args: ['-c', 'make test'] - waitFor: ['update-deps'] - dir: *dir id: 'test' -# check code gen for kubernetes custom resources -# this step passes if there is no generated diff, fails otherwise -- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.6.2' - entrypoint: 'bash' - args: ['ci/check-code-gen.sh'] - waitFor: ['update-deps'] - dir: *dir - id: 'check-code-and-docs-gen' - timeout: 1500s tags: ['solo-kit'] options: diff --git a/go.mod b/go.mod index eb5cf2e8c..3cae9b650 100644 --- a/go.mod +++ b/go.mod @@ -1,27 +1,27 @@ module github.com/solo-io/solo-kit -go 1.20 +go 1.23.1 require ( cuelang.org/go v0.3.2 github.com/Masterminds/sprig v2.22.0+incompatible github.com/bugsnag/bugsnag-go v1.5.0 - github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1 - github.com/envoyproxy/protoc-gen-validate v0.4.0 + github.com/envoyproxy/go-control-plane v0.12.0 + github.com/envoyproxy/protoc-gen-validate v1.0.4 github.com/fgrosse/zaptest v1.1.0 github.com/getkin/kin-openapi v0.80.0 github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 github.com/go-test/deep v1.0.2 github.com/golang/mock v1.6.0 - github.com/golang/protobuf v1.5.3 + github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 github.com/hashicorp/consul/api v1.3.0 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/vault/api v1.0.5-0.20191108163347-bdd38fca2cff - github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 + github.com/iancoleman/strcase v0.3.0 github.com/mitchellh/hashstructure v1.0.0 - github.com/onsi/ginkgo/v2 v2.9.5 - github.com/onsi/gomega v1.27.7 + github.com/onsi/ginkgo/v2 v2.19.0 + github.com/onsi/gomega v1.33.1 github.com/pkg/errors v0.9.1 github.com/pseudomuto/protoc-gen-doc v1.5.0 github.com/pseudomuto/protokit v0.2.0 @@ -29,53 +29,55 @@ require ( github.com/rotisserie/eris v0.1.1 github.com/solo-io/anyvendor v0.0.1 github.com/solo-io/go-list-licenses v0.1.4 - github.com/solo-io/go-utils v0.24.6 - github.com/solo-io/k8s-utils v0.5.0 + github.com/solo-io/go-utils v0.26.0 + github.com/solo-io/k8s-utils v0.8.0 github.com/solo-io/protoc-gen-ext v0.0.18 - github.com/solo-io/protoc-gen-openapi v0.1.1 + github.com/solo-io/protoc-gen-openapi v0.2.4 go.opencensus.io v0.24.0 - go.uber.org/zap v1.24.0 - golang.org/x/sync v0.2.0 - google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c - google.golang.org/grpc v1.51.0 - google.golang.org/protobuf v1.30.0 + go.uber.org/zap v1.26.0 + golang.org/x/sync v0.8.0 + google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 + google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 + google.golang.org/grpc v1.65.0 + google.golang.org/protobuf v1.34.2 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.27.3 - k8s.io/apiextensions-apiserver v0.27.3 - k8s.io/apimachinery v0.27.3 - k8s.io/client-go v0.27.3 - k8s.io/code-generator v0.27.3 - k8s.io/utils v0.0.0-20230209194617-a36077c30491 - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 - sigs.k8s.io/yaml v1.3.0 + k8s.io/api v0.31.0 + k8s.io/apiextensions-apiserver v0.31.0 + k8s.io/apimachinery v0.31.0 + k8s.io/client-go v0.31.0 + k8s.io/code-generator v0.31.0 + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 + sigs.k8s.io/yaml v1.4.0 ) require ( + cel.dev/expr v0.15.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver v1.4.2 // indirect github.com/armon/go-metrics v0.3.0 // indirect github.com/avast/retry-go v2.2.0+incompatible // indirect - github.com/census-instrumentation/opencensus-proto v0.2.1 // indirect - github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1 // indirect + github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect + github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b // indirect github.com/cockroachdb/apd/v2 v2.0.1 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/emicklei/go-restful/v3 v3.9.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/emicklei/proto v1.6.15 // indirect - github.com/evanphx/json-patch v4.12.0+incompatible // indirect - github.com/go-logr/logr v1.2.4 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect - github.com/go-openapi/jsonreference v0.20.1 // indirect - github.com/go-openapi/swag v0.22.3 // indirect - github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.4 // indirect + github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.1 // indirect - github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/hashicorp/errwrap v1.0.0 // indirect + github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.1 // indirect github.com/hashicorp/go-hclog v0.9.2 // indirect github.com/hashicorp/go-immutable-radix v1.0.0 // indirect @@ -86,20 +88,21 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/serf v0.8.2 // indirect github.com/hashicorp/vault/sdk v0.1.14-0.20191108161836-82f2b5571044 // indirect - github.com/huandu/xstrings v1.3.2 // indirect - github.com/imdario/mergo v0.3.12 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/huandu/xstrings v1.4.0 // indirect + github.com/imdario/mergo v0.3.13 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/k0kubun/pp v2.3.0+incompatible // indirect github.com/lyft/protoc-gen-star v0.6.0 // indirect + github.com/lyft/protoc-gen-star/v2 v2.0.3 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-zglob v0.0.1 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.4.1 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -107,29 +110,29 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pierrec/lz4 v2.0.5+incompatible // indirect github.com/ryanuber/go-glob v1.0.0 // indirect - github.com/spf13/afero v1.6.0 // indirect - github.com/spf13/cobra v1.6.0 // indirect + github.com/spf13/afero v1.10.0 // indirect + github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect - go.uber.org/atomic v1.7.0 // indirect - go.uber.org/multierr v1.6.0 // indirect - golang.org/x/crypto v0.1.0 // indirect - golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect - golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.10.0 // indirect - golang.org/x/oauth2 v0.5.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/term v0.8.0 // indirect - golang.org/x/text v0.9.0 // indirect + github.com/x448/float16 v0.8.4 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/crypto v0.26.0 // indirect + golang.org/x/mod v0.20.0 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/oauth2 v0.21.0 // indirect + golang.org/x/sys v0.24.0 // indirect + golang.org/x/term v0.23.0 // indirect + golang.org/x/text v0.17.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.9.1 // indirect + golang.org/x/tools v0.22.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/appengine v1.6.7 // indirect + gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/square/go-jose.v2 v2.3.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/gengo v0.0.0-20220902162205-c0856e24416d // indirect - k8s.io/klog/v2 v2.90.1 // indirect - k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect + k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect + k8s.io/klog/v2 v2.130.1 // indirect + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect + sigs.k8s.io/controller-tools v0.14.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect ) @@ -140,8 +143,9 @@ replace ( // using the pseudo version of github.com/form3tech-oss/jwt-go@v3.2.3 instead of the version directly, // to avoid error about it being used for two different module paths github.com/dgrijalva/jwt-go => github.com/form3tech-oss/jwt-go v0.0.0-20210511163231-5b2d2b5f6c34 - github.com/docker/docker => github.com/moby/moby v0.7.3-0.20190826074503-38ab9da00309 + github.com/docker/docker => github.com/moby/moby v24.0.7+incompatible // consul github.com/hashicorp/consul/api => github.com/hashicorp/consul/api v1.1.0 + github.com/iancoleman/strcase => github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 ) diff --git a/go.sum b/go.sum index 18a6ade2c..94ecdb46c 100644 --- a/go.sum +++ b/go.sum @@ -1,29 +1,46 @@ +cel.dev/expr v0.15.0 h1:O1jzfJCQBfL5BFoYktaxwIhuttaQPsVWerH9/EEKx0w= +cel.dev/expr v0.15.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= 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= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.107.0 h1:qkj22L7bgkl6vIeZDlOY2po43Mx/TIa2Wsa7VR+PEww= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/compute v1.12.1 h1:gKVJMEyqV5c/UnpzjjQbo3Rjvvqpr9B1DFSbJC4OXr0= -cloud.google.com/go/compute/metadata v0.2.1 h1:efOwf5ymceDhK6PKMnnrTHP4pppY5L22mle96M1yP48= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= +cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= 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= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= contrib.go.opencensus.io/exporter/prometheus v0.1.0/go.mod h1:cGFniUXGZlKRjzOyuZJ6mgB+PgBcCIa79kEKR8YCW+A= cuelang.org/go v0.3.2 h1:/Am5yFDwqnaEi+g942OPM1M4/qtfVSm49wtkQbeh5Z4= cuelang.org/go v0.3.2/go.mod h1:jvMO35Q4D2D3m2ujAmKESICaYkjMbu5+D+2zIGuWTpQ= @@ -50,7 +67,6 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alexedwards/scs v1.4.1/go.mod h1:JRIFiXthhMSivuGbxpzUa0/hT5rz2hpyw61Bmd+S1bg= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= @@ -61,7 +77,6 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj github.com/avast/retry-go v2.2.0+incompatible h1:m+w7mVLWa/oKqX2xYqiEKQQkeGH8DDEXB/XnjS54Wyw= github.com/avast/retry-go v2.2.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= 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/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= @@ -71,8 +86,9 @@ github.com/bluekeyes/hatpear v0.0.0-20180714193905-ffb42d5bb417/go.mod h1:D+WOah github.com/bradleyfalzon/ghinstallation v1.1.1/go.mod h1:vyCmHTciHx/uuyN82Zc3rXN3X2KTK8nUTCrTMwAhcug= github.com/bugsnag/bugsnag-go v1.5.0 h1:tP8hiPv1pGGW3LA6LKy5lW6WG+y9J2xWUdPd3WC452k= github.com/bugsnag/bugsnag-go v1.5.0/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= @@ -82,10 +98,10 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1 h1:zH8ljVhhq7yC0MIeUL/IviMtY8hx2mK8cN9wEYb8ggw= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b h1:ga8SEFjZ60pxLcmhnThWgvH2wg8376yUJmPhEH4H3kw= +github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/apd/v2 v2.0.1 h1:y1Rh3tEU89D+7Tgbw+lp52T6p/GJLpDmNvr10UWqLTE= @@ -98,34 +114,33 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/crewjam/httperr v0.0.0-20190612203328-a946449404da/go.mod h1:+rmNIXRvYMqLQeR4DHyTvs6y0MEMymTz4vyFpFkKTPs= github.com/crewjam/saml v0.3.2-0.20191206212704-861266e3a689/go.mod h1:fxbjgoFRea91JEzfcATb14uB+XPW1H88n0feRzehDeg= github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= -github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/proto v1.6.15 h1:XbpwxmuOPrdES97FrSfpyy67SSCV/wBIKXqgJzh6hNw= github.com/emicklei/proto v1.6.15/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A= github.com/emirpasic/gods v1.9.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= 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/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1 h1:xvqufLtNVwAhN8NMyWklVgxnWohi+wtMGQMhtxexlm0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI= +github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.3.0-java/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.4.0 h1:0Hedkeb8AtERQoi/wLDxdMr6iOU4g6Mw0RfB2IEpEhk= -github.com/envoyproxy/protoc-gen-validate v0.4.0/go.mod h1:amr46FC2KZvleZB2VXz+QeQDF+iIKKjQimiDrtp1rYA= -github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= -github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fgrosse/zaptest v1.1.0 h1:sK9hP0/xBoNX5qfFo3KWFluDXfc809APomI1QXuYELA= @@ -134,7 +149,10 @@ github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI github.com/form3tech-oss/jwt-go v0.0.0-20210511163231-5b2d2b5f6c34/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/getkin/kin-openapi v0.80.0 h1:W/s5/DNnDCR8P+pYyafEWlGk4S7/AfQUWXgrRSSAzf8= github.com/getkin/kin-openapi v0.80.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -150,21 +168,20 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-ldap/ldap/v3 v3.1.3/go.mod h1:3rbOH3jRS2u6jg2rJnKAMLE/xQyCKIveG2Sa/Cohzb8= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= -github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +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= github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw= github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= @@ -184,13 +201,16 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -202,48 +222,60 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw 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.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/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/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 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/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= -github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= -github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= 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.4.1/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.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/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.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github/v29 v29.0.2/go.mod h1:CHKiKKPHJ0REzfwc14QMklvtHwCveD0PxlMjLlzAM5E= github.com/google/go-github/v29 v29.0.3/go.mod h1:CHKiKKPHJ0REzfwc14QMklvtHwCveD0PxlMjLlzAM5E= github.com/google/go-github/v32 v32.0.0/go.mod h1:rIEpZD9CTDQwDK9GDrtMTycQNA4JU3qBsCizh3q2WCI= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/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= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +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-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af h1:kmjWCqn2qkEml422C2Rrd27c3VGxi6a/6HNq8QmHRKM= +github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/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/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/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -254,13 +286,13 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaW github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.1.0 h1:BNQPM9ytxj6jbjjdRPioQ94T6YXriSopn0i8COv6SRA= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/sdk v0.1.1 h1:LnuDWGNsoajlhGyHJvuWW6FVqRl8JOTPqS6CPTsYjhY= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= @@ -314,19 +346,18 @@ github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174/go.mod h1:DqJ97dSdRW github.com/hinshun/vt10x v0.0.0-20180809195222-d55458df857c/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= -github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= -github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= +github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= +github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 h1:VHgatEHNcBFEB7inlalqfNqw65aNkM1lGX2yt3NmbS8= github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -354,9 +385,9 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -365,11 +396,13 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= -github.com/lyft/protoc-gen-star v0.4.10/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lyft/protoc-gen-star v0.4.14/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94= github.com/lyft/protoc-gen-star v0.6.0 h1:xOpFu4vwmIoUeUrRuAtdCrZZymT/6AkW/bsUWA506Fo= github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.3 h1:/3+/2sWyXeMLzKd1bX+ixWKgEMsULrIivpDsuaF441o= +github.com/lyft/protoc-gen-star/v2 v2.0.3/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -377,12 +410,13 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +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-zglob v0.0.1 h1:xsEx/XUoVlI6yXjqBK062zYhRTZltCNmYPx6v+8DNaY= github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -406,8 +440,8 @@ github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1D github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +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/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= @@ -425,7 +459,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= +github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -434,14 +469,15 @@ github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= -github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= +github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= -github.com/onsi/gomega v1.27.7/go.mod h1:1p8OOlwo2iUUDsHnOrjE5UKYJ+e3W8eQ3qSlRahPmr4= +github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= +github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/palantir/go-baseapp v0.2.0/go.mod h1:7rEjgYzWbHLLuY+mV2iJthxTddEc6aO+kFYsjDKNmEs= github.com/palantir/go-githubapp v0.5.0/go.mod h1:/Xm5h66uEBX24An2Ln8H6Rk44z8uwk4E6m4gNrPadjQ= @@ -458,9 +494,11 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= @@ -492,10 +530,10 @@ github.com/radovskyb/watcher v1.0.2/go.mod h1:78okwvY5wPdzcb1UYnip1pvrZNIVEIh/Cm github.com/rcrowley/go-metrics v0.0.0-20180503174638-e2704e165165/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rotisserie/eris v0.1.1 h1:C0wEdnJ6+3jYx2r8RS4xBM+ZW+mVrXGocIaFbTdRYCA= github.com/rotisserie/eris v0.1.1/go.mod h1:2ik3CyJrzlOjGyDGrKfqZivSfmkhCS3ktE+T1mNzzLk= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= @@ -524,25 +562,25 @@ github.com/solo-io/anyvendor v0.0.1/go.mod h1:SLucIeU8qBOYI82BveNVn2LzZFcMWJSCf8 github.com/solo-io/go-list-licenses v0.1.4 h1:u4xh1OUORT4iSWuAp3Q4NsfHcDaeUV8QRDH8ACQqbxw= github.com/solo-io/go-list-licenses v0.1.4/go.mod h1:x6LSp/NrYgVXwNum7ZOiaAYTpg6B3F6TrWYfcdHVroA= github.com/solo-io/go-utils v0.20.2/go.mod h1:6e8K1spnMWwlnJRSNp/J84GEyJbrcK4Gm7i+ehzCi8c= -github.com/solo-io/go-utils v0.24.6 h1:8tfYYCfSyZunFLP+OKVdq467YsGqlH26bXSHcGyQl1k= -github.com/solo-io/go-utils v0.24.6/go.mod h1:SQBQDM/DM4u5435gcAfVr+GF53hW5OR60LaCGCDPkVo= -github.com/solo-io/k8s-utils v0.5.0 h1:+izXpnmPIKzq9w9rsNXSfPlj876gX8J7Bjw+vEk+R1E= -github.com/solo-io/k8s-utils v0.5.0/go.mod h1:jp+stgh/5+NyVsbNqxzxw3xvmH97TYKruit9KtBszBI= +github.com/solo-io/go-utils v0.26.0 h1:IFNqBPzKEMR2XYkKqtBu5RqPz0GrlndIxwrOcWk3cxo= +github.com/solo-io/go-utils v0.26.0/go.mod h1:fdJxjkQFdZ2FsxU+Sk0QDwgFsvYm4axPRfyPVV4oAQM= +github.com/solo-io/k8s-utils v0.8.0 h1:jXd4HFDgbPWxHi04QDFYwA37D1nYr9XJI3MVa75oCD8= +github.com/solo-io/k8s-utils v0.8.0/go.mod h1:fOIFkh4+F45MmrUZEFx0pW75EvFYOR7v5/BIIQiSIwA= github.com/solo-io/protoc-gen-ext v0.0.18 h1:zSAL8NzWpJUGYoA5IyjHiKASNyHjR0uxBQ7eQS94i3A= github.com/solo-io/protoc-gen-ext v0.0.18/go.mod h1:iGyCvmKmhJNXs5MgBcYFBF0om7LDnCVD2WwhOZGnqeA= -github.com/solo-io/protoc-gen-openapi v0.1.1 h1:40gsfvDvz+Sd6HFXBzdkeE5QEuAdZnoy55J5QFzMzl4= -github.com/solo-io/protoc-gen-openapi v0.1.1/go.mod h1:6d6gsEx74pW3UCA3G0al0GdMlYzGe/iCy2mPgGG9wI8= +github.com/solo-io/protoc-gen-openapi v0.2.4 h1:9tqGhCAq83IRSzHhKDzpWnPlbPPORTM2izVxjLk0Ftw= +github.com/solo-io/protoc-gen-openapi v0.2.4/go.mod h1:osEjRl1miHqlq4Wl/8SEqHFoyydptPL1EzEdM9c4vfE= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= +github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.6.0 h1:42a0n6jwCot1pUmomAp4T7DeMD+20LFv4Q54pxLf2LI= -github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -550,7 +588,6 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= 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= @@ -565,17 +602,21 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 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/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= @@ -586,21 +627,20 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +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/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +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.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= goji.io v2.0.0+incompatible/go.mod h1:sbqFwrtqZACxLBTQcdgVjFh54yGVCvwq8+w49MVMMIk= goji.io v2.0.2+incompatible/go.mod h1:sbqFwrtqZACxLBTQcdgVjFh54yGVCvwq8+w49MVMMIk= golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -616,8 +656,10 @@ golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= 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= @@ -641,8 +683,8 @@ golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= @@ -654,9 +696,11 @@ golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hM 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.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.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.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 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-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -674,27 +718,44 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/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-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 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-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +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.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= 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= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= +golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -705,9 +766,10 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180606202747-9527bec2660b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -742,28 +804,44 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/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-20210423185535-09eb48e85fd7/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-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= -golang.org/x/sys v0.8.0/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-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= 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= golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 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.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.3.4/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.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 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= @@ -804,15 +882,30 @@ golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +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-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200612220849-54c614fe050c/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +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-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= -golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= +golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= 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= @@ -828,14 +921,22 @@ google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= 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/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -856,13 +957,30 @@ google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c h1:S34D59DS2GWOEwWNt4fYmTcFrtlOgukG2k9WsomZ7tg= -google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +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 v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -877,11 +995,13 @@ google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= 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.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= 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= @@ -894,9 +1014,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj 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.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/AlecAivazis/survey.v1 v1.8.2/go.mod h1:iBNOmqKz/NUbZx3bA+4hAGLRC7fSK7tgtVDT4tB22XA= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -905,6 +1024,8 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= @@ -921,7 +1042,6 @@ gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRN gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -929,7 +1049,7 @@ 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-20200121175148-a6ecf24a6d71/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/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= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -938,32 +1058,33 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= -k8s.io/api v0.27.3 h1:yR6oQXXnUEBWEWcvPWS0jQL575KoAboQPfJAuKNrw5Y= -k8s.io/api v0.27.3/go.mod h1:C4BNvZnQOF7JA/0Xed2S+aUyJSfTGkGFxLXz9MnpIpg= -k8s.io/apiextensions-apiserver v0.27.3 h1:xAwC1iYabi+TDfpRhxh4Eapl14Hs2OftM2DN5MpgKX4= -k8s.io/apiextensions-apiserver v0.27.3/go.mod h1:BH3wJ5NsB9XE1w+R6SSVpKmYNyIiyIz9xAmBl8Mb+84= -k8s.io/apimachinery v0.27.3 h1:Ubye8oBufD04l9QnNtW05idcOe9Z3GQN8+7PqmuVcUM= -k8s.io/apimachinery v0.27.3/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= -k8s.io/client-go v0.27.3 h1:7dnEGHZEJld3lYwxvLl7WoehK6lAq7GvgjxpA3nv1E8= -k8s.io/client-go v0.27.3/go.mod h1:2MBEKuTo6V1lbKy3z1euEGnhPfGZLKTS9tiJ2xodM48= -k8s.io/code-generator v0.27.3 h1:JRhRQkzKdQhHmv9s5f7vuqveL8qukAQ2IqaHm6MFspM= -k8s.io/code-generator v0.27.3/go.mod h1:DPung1sI5vBgn4AGKtlPRQAyagj/ir/4jI55ipZHVww= -k8s.io/gengo v0.0.0-20220902162205-c0856e24416d h1:U9tB195lKdzwqicbJvyJeOXV7Klv+wNAWENRnXEGi08= -k8s.io/gengo v0.0.0-20220902162205-c0856e24416d/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= -k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= -k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= -k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY= -k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.31.0 h1:b9LiSjR2ym/SzTOlfMHm1tr7/21aD7fSkqgD/CVJBCo= +k8s.io/api v0.31.0/go.mod h1:0YiFF+JfFxMM6+1hQei8FY8M7s1Mth+z/q7eF1aJkTE= +k8s.io/apiextensions-apiserver v0.31.0 h1:fZgCVhGwsclj3qCw1buVXCV6khjRzKC5eCFt24kyLSk= +k8s.io/apiextensions-apiserver v0.31.0/go.mod h1:b9aMDEYaEe5sdK+1T0KU78ApR/5ZVp4i56VacZYEHxk= +k8s.io/apimachinery v0.31.0 h1:m9jOiSr3FoSSL5WO9bjm1n6B9KROYYgNZOb4tyZ1lBc= +k8s.io/apimachinery v0.31.0/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/client-go v0.31.0 h1:QqEJzNjbN2Yv1H79SsS+SWnXkBgVu4Pj3CJQgbx0gI8= +k8s.io/client-go v0.31.0/go.mod h1:Y9wvC76g4fLjmU0BA+rV+h2cncoadjvjjkkIGoTLcGU= +k8s.io/code-generator v0.31.0 h1:w607nrMi1KeDKB3/F/J4lIoOgAwc+gV9ZKew4XRfMp8= +k8s.io/code-generator v0.31.0/go.mod h1:84y4w3es8rOJOUUP1rLsIiGlO1JuEaPFXQPA9e/K6U0= +k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= +k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/controller-tools v0.14.0 h1:rnNoCC5wSXlrNoBKKzL70LNJKIQKEzT6lloG6/LF73A= +sigs.k8s.io/controller-tools v0.14.0/go.mod h1:TV7uOtNNnnR72SpzhStvPkoS/U5ir0nMudrkrC4M9Sc= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/pkg/api/external/envoy/api/v2/core/address.pb.go b/pkg/api/external/envoy/api/v2/core/address.pb.go index 4c2d03f75..b0e1ad18b 100644 --- a/pkg/api/external/envoy/api/v2/core/address.pb.go +++ b/pkg/api/external/envoy/api/v2/core/address.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/api/external/envoy/api/v2/core/address.proto diff --git a/pkg/api/external/envoy/api/v2/core/base.pb.go b/pkg/api/external/envoy/api/v2/core/base.pb.go index cb83ddf2e..04ab6f67f 100644 --- a/pkg/api/external/envoy/api/v2/core/base.pb.go +++ b/pkg/api/external/envoy/api/v2/core/base.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/api/external/envoy/api/v2/core/base.proto diff --git a/pkg/api/external/envoy/api/v2/core/http_uri.pb.go b/pkg/api/external/envoy/api/v2/core/http_uri.pb.go index 739ff1599..b57f92b44 100644 --- a/pkg/api/external/envoy/api/v2/core/http_uri.pb.go +++ b/pkg/api/external/envoy/api/v2/core/http_uri.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/api/external/envoy/api/v2/core/http_uri.proto diff --git a/pkg/api/external/envoy/api/v2/core/socket_option.pb.go b/pkg/api/external/envoy/api/v2/core/socket_option.pb.go index 66b83be73..c4ab0b95d 100644 --- a/pkg/api/external/envoy/api/v2/core/socket_option.pb.go +++ b/pkg/api/external/envoy/api/v2/core/socket_option.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/api/external/envoy/api/v2/core/socket_option.proto diff --git a/pkg/api/external/envoy/api/v2/discovery.pb.go b/pkg/api/external/envoy/api/v2/discovery.pb.go index 06f60a74b..759d0e65a 100644 --- a/pkg/api/external/envoy/api/v2/discovery.pb.go +++ b/pkg/api/external/envoy/api/v2/discovery.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/api/external/envoy/api/v2/discovery.proto diff --git a/pkg/api/external/envoy/type/percent.pb.go b/pkg/api/external/envoy/type/percent.pb.go index f4401d2ed..c504f5ede 100644 --- a/pkg/api/external/envoy/type/percent.pb.go +++ b/pkg/api/external/envoy/type/percent.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/api/external/envoy/type/percent.proto diff --git a/pkg/api/external/envoy/type/semantic_version.pb.go b/pkg/api/external/envoy/type/semantic_version.pb.go index 4b27ec982..a77a21c7c 100644 --- a/pkg/api/external/envoy/type/semantic_version.pb.go +++ b/pkg/api/external/envoy/type/semantic_version.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/api/external/envoy/type/semantic_version.proto diff --git a/pkg/api/v1/apiserver/api_server.pb.go b/pkg/api/v1/apiserver/api_server.pb.go index 5eadf2497..ac487547f 100644 --- a/pkg/api/v1/apiserver/api_server.pb.go +++ b/pkg/api/v1/apiserver/api_server.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: api_server.proto diff --git a/pkg/api/v1/apiserver/generate.sh b/pkg/api/v1/apiserver/generate.sh index 64980e6c6..586e09b6b 100755 --- a/pkg/api/v1/apiserver/generate.sh +++ b/pkg/api/v1/apiserver/generate.sh @@ -16,19 +16,26 @@ SOLO_KIT=${ROOT}/solo-kit IN=${SOLO_KIT}/pkg/api/v1/apiserver VENDOR_ROOT=vendor_any/github.com +# Scripts are a legacy component of our CI, and ideally would be converted to go code, +# since the functionality is available in code-generator/collector/compiler.go +# However, since this library is rarely modified, we do not want to make sweeping changes to the code generation step. +# To improve the debuggability of these scripts, we include some identifier so that we can more easily triage issues. +SCRIPT_ID="v1/apiserver/generate.sh" + TEMP_DIR=$(mktemp -d) cleanup() { echo ">> Removing ${TEMP_DIR}" rm -rf ${TEMP_DIR} } -trap "cleanup" EXIT SIGINT +trap "cleanup ${SCRIPT_ID}" EXIT SIGINT -echo ">> Temporary output directory ${TEMP_DIR}" +echo ">> Invoking ${SCRIPT_ID}: temporary output directory ${TEMP_DIR}" IMPORTS="\ -I=${IN} \ -I=${ROOT} \ - -I=${VENDOR_ROOT}/solo-io/protoc-gen-ext" + -I=${VENDOR_ROOT}/solo-io/protoc-gen-ext \ + -I=${VENDOR_ROOT}/solo-io/protoc-gen-ext/external" GO_FLAG="--go_out=plugins=grpc:${TEMP_DIR}" HASH_FLAG="--ext_out=${TEMP_DIR}" diff --git a/pkg/api/v1/clients/kube/resource_client.go b/pkg/api/v1/clients/kube/resource_client.go index d9845238b..a9816bf1a 100644 --- a/pkg/api/v1/clients/kube/resource_client.go +++ b/pkg/api/v1/clients/kube/resource_client.go @@ -7,11 +7,6 @@ import ( "strings" "time" - "github.com/solo-io/solo-kit/pkg/utils/specutils" - - "github.com/solo-io/solo-kit/pkg/utils/kubeutils" - "k8s.io/apimachinery/pkg/types" - "github.com/solo-io/go-utils/stringutils" "github.com/solo-io/solo-kit/pkg/api/shared" "github.com/solo-io/solo-kit/pkg/api/v1/clients" @@ -20,12 +15,14 @@ import ( v1 "github.com/solo-io/solo-kit/pkg/api/v1/clients/kube/crd/solo.io/v1" "github.com/solo-io/solo-kit/pkg/api/v1/resources" "github.com/solo-io/solo-kit/pkg/errors" + "github.com/solo-io/solo-kit/pkg/utils/kubeutils" + "github.com/solo-io/solo-kit/pkg/utils/specutils" "go.opencensus.io/stats" "go.opencensus.io/stats/view" "go.opencensus.io/tag" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/types" ) var ( @@ -298,7 +295,7 @@ func (rc *ResourceClient) List(namespace string, opts clients.ListOpts) (resourc return nil, err } - labelSelector, err := rc.getLabelSelector(opts) + labelSelector, err := kubeutils.ToLabelSelector(opts) if err != nil { return nil, errors.Wrapf(err, "parsing label selector") } @@ -458,16 +455,6 @@ func (rc *ResourceClient) Watch(namespace string, opts clients.WatchOpts) (<-cha return resourcesChan, errs, nil } -func (rc *ResourceClient) getLabelSelector(listOpts clients.ListOpts) (labels.Selector, error) { - // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#set-based-requirement - if listOpts.ExpressionSelector != "" { - return labels.Parse(listOpts.ExpressionSelector) - } - - // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#equality-based-requirement - return labels.SelectorFromSet(listOpts.Selector), nil -} - // Checks whether the group version kind of the given resource matches that of the client's underlying CRD: func (rc *ResourceClient) matchesClientGVK(resource v1.Resource) bool { return resource.GroupVersionKind().String() == rc.crd.GroupVersionKind().String() diff --git a/pkg/api/v1/clients/memory/resource_client.go b/pkg/api/v1/clients/memory/resource_client.go index 2f2f01861..6c91a3100 100644 --- a/pkg/api/v1/clients/memory/resource_client.go +++ b/pkg/api/v1/clients/memory/resource_client.go @@ -12,6 +12,7 @@ import ( "github.com/solo-io/solo-kit/pkg/api/v1/clients" "github.com/solo-io/solo-kit/pkg/api/v1/resources" "github.com/solo-io/solo-kit/pkg/errors" + "github.com/solo-io/solo-kit/pkg/utils/kubeutils" "k8s.io/apimachinery/pkg/labels" ) @@ -197,9 +198,19 @@ func (rc *ResourceClient) Delete(namespace, name string, opts clients.DeleteOpts func (rc *ResourceClient) List(namespace string, opts clients.ListOpts) (resources.ResourceList, error) { opts = opts.WithDefaults() cachedResources := rc.cache.List(rc.Prefix(namespace)) + + var labelSelector labels.Selector + var err error + if kubeutils.HasSelector(opts) { + labelSelector, err = kubeutils.ToLabelSelector(opts) + if err != nil { + return nil, errors.Wrapf(err, "parsing label selector") + } + } + var resourceList resources.ResourceList for _, resource := range cachedResources { - if labels.SelectorFromSet(opts.Selector).Matches(labels.Set(resource.GetMetadata().Labels)) { + if labelSelector == nil || labelSelector.Matches(labels.Set(resource.GetMetadata().Labels)) { clone := resources.Clone(resource) resourceList = append(resourceList, clone) } @@ -220,8 +231,9 @@ func (rc *ResourceClient) Watch(namespace string, opts clients.WatchOpts) (<-cha errs := make(chan error) updateResourceList := func() { list, err := rc.List(namespace, clients.ListOpts{ - Ctx: opts.Ctx, - Selector: opts.Selector, + Ctx: opts.Ctx, + Selector: opts.Selector, + ExpressionSelector: opts.ExpressionSelector, }) if err != nil { errs <- err diff --git a/pkg/api/v1/clients/memory/resource_client_test.go b/pkg/api/v1/clients/memory/resource_client_test.go index 8c656d92c..ca5bb024f 100644 --- a/pkg/api/v1/clients/memory/resource_client_test.go +++ b/pkg/api/v1/clients/memory/resource_client_test.go @@ -8,6 +8,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + "github.com/onsi/gomega/gmeasure" "github.com/solo-io/solo-kit/pkg/api/v1/clients" . "github.com/solo-io/solo-kit/pkg/api/v1/clients/memory" "github.com/solo-io/solo-kit/pkg/api/v1/resources" @@ -62,33 +63,273 @@ var _ = Describe("Base", func() { Expect(listret[0]).NotTo(BeIdenticalTo(listret2[0])) }) + Context("listing resources", func() { + var ( + obj1 *v1.MockResource + obj2 *v1.MockResource + obj3 *v1.MockResource + obj4 *v1.MockResource + obj5 *v1.MockResource + ) + + BeforeEach(func() { + obj1 = &v1.MockResource{ + Metadata: &core.Metadata{ + Name: "name1", + Namespace: "ns1", + Labels: map[string]string{ + "key": "val1", + }, + }, + } + obj2 = &v1.MockResource{ + Metadata: &core.Metadata{ + Name: "name2", + Namespace: "ns2", + Labels: map[string]string{ + "key": "val2", + }, + }, + } + obj3 = &v1.MockResource{ + Metadata: &core.Metadata{ + Name: "name3", + Namespace: "ns1", + Labels: map[string]string{ + "key": "val2", + }, + }, + } + obj4 = &v1.MockResource{ + Metadata: &core.Metadata{ + Name: "name4", + Namespace: "ns2", + Labels: map[string]string{ + "key": "val3", + }, + }, + } + obj5 = &v1.MockResource{ + Metadata: &core.Metadata{ + Name: "name5", + Namespace: "ns1", + Labels: map[string]string{ + "key": "val3", + }, + }, + } + + _, err := client.Write(obj1, clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + _, err = client.Write(obj2, clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + _, err = client.Write(obj3, clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + _, err = client.Write(obj4, clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + _, err = client.Write(obj5, clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + }) + + It("lists all resources when empty namespace is provided", func() { + resources, err := client.List("", clients.ListOpts{}) + Expect(err).NotTo(HaveOccurred()) + + // resources are sorted by namespace, then name + expectedResourceNames := []string{ + "name1", "name3", "name5", // ns1 + "name2", "name4", // ns2 + } + Expect(resources).To(HaveLen(len(expectedResourceNames))) + for i, r := range resources { + Expect(r.GetMetadata().GetName()).To(Equal(expectedResourceNames[i])) + } + }) + + It("lists resources in a given namespace", func() { + resources, err := client.List("ns2", clients.ListOpts{}) + Expect(err).NotTo(HaveOccurred()) + + expectedResourceNames := []string{ + "name2", "name4", + } + Expect(resources).To(HaveLen(len(expectedResourceNames))) + for i, r := range resources { + Expect(r.GetMetadata().GetName()).To(Equal(expectedResourceNames[i])) + } + }) + + It("returns empty list if namespace is invalid", func() { + resources, err := client.List("invalid-namespace", clients.ListOpts{}) + Expect(err).NotTo(HaveOccurred()) + Expect(resources).To(HaveLen(0)) + }) + + It("returns resources matching the given selector, across all namespaces", func() { + resources, err := client.List("", clients.ListOpts{ + Selector: map[string]string{ + "key": "val2", + }, + }) + Expect(err).NotTo(HaveOccurred()) + + // resources are sorted by namespace, then name + expectedResourceNames := []string{ + "name3", "name2", + } + Expect(resources).To(HaveLen(len(expectedResourceNames))) + for i, r := range resources { + Expect(r.GetMetadata().GetName()).To(Equal(expectedResourceNames[i])) + } + }) + + It("returns resources matching the given selector, in given namespace", func() { + resources, err := client.List("ns2", clients.ListOpts{ + Selector: map[string]string{ + "key": "val2", + }, + }) + Expect(err).NotTo(HaveOccurred()) + + Expect(resources).To(HaveLen(1)) + Expect(resources[0].GetMetadata().GetName()).To(Equal("name2")) + }) + + It("returns resources matching the given expression selector, across all namespaces", func() { + resources, err := client.List("", clients.ListOpts{ + ExpressionSelector: "key in (val1,val3)", + }) + Expect(err).NotTo(HaveOccurred()) + + // resources are sorted by namespace, then name + expectedResourceNames := []string{ + "name1", "name5", "name4", + } + Expect(resources).To(HaveLen(len(expectedResourceNames))) + for i, r := range resources { + Expect(r.GetMetadata().GetName()).To(Equal(expectedResourceNames[i])) + } + }) + + It("returns resources matching the given expression selector, in given namespace", func() { + resources, err := client.List("ns2", clients.ListOpts{ + ExpressionSelector: "key in (val1,val3)", + }) + Expect(err).NotTo(HaveOccurred()) + + Expect(resources).To(HaveLen(1)) + Expect(resources[0].GetMetadata().GetName()).To(Equal("name4")) + }) + + It("when both selector and expression selector are provided, uses expression selector", func() { + resources, err := client.List("ns2", clients.ListOpts{ + Selector: map[string]string{ + "key": "val2", + }, + ExpressionSelector: "key in (val1,val3)", + }) + Expect(err).NotTo(HaveOccurred()) + + Expect(resources).To(HaveLen(1)) + Expect(resources[0].GetMetadata().GetName()).To(Equal("name4")) + }) + }) + Context("Benchmarks", func() { - Measure("it should perform list efficiently", func(b Benchmarker) { - const numobjs = 10000 + const numobjs = 10000 + BeforeEach(func() { for i := 0; i < numobjs; i++ { + isEven := i%2 == 0 obj := &v1.MockResource{ Metadata: &core.Metadata{ Namespace: "ns", Name: fmt.Sprintf("n-%v", numobjs-i), + Labels: map[string]string{ + "even": fmt.Sprintf("%v", isEven), + }, }, Data: strings.Repeat("123", 1000) + fmt.Sprintf("test-%v", i), } client.Write(obj, clients.WriteOpts{}) } + }) + + It("should perform list efficiently", Serial, func() { + experiment := gmeasure.NewExperiment("list resources with no selector") + AddReportEntry(experiment.Name, experiment) + l := clients.ListOpts{} var output resources.ResourceList var err error - runtime := b.Time("runtime", func() { - output, err = client.List("ns", l) - }) - Expect(err).NotTo(HaveOccurred()) - Expect(output).To(HaveLen(numobjs)) - Expect(output[0].GetMetadata().Name).To(Equal("n-1")) - Expect(runtime.Seconds()).Should(BeNumerically("<", 0.5), "List() shouldn't take too long.") - }, 10) + experiment.Sample(func(idx int) { + experiment.MeasureDuration("list-resources", func() { + output, err = client.List("ns", l) + }) + Expect(err).NotTo(HaveOccurred()) + Expect(output).To(HaveLen(numobjs)) + Expect(output[0].GetMetadata().Name).To(Equal("n-1")) + }, gmeasure.SamplingConfig{N: 10, Duration: 10 * time.Second}) + + stats := experiment.GetStats("list-resources") + medianDuration := stats.DurationFor(gmeasure.StatMedian) + + Expect(medianDuration).To(BeNumerically("<", 500*time.Millisecond)) + }) + + It("should perform list efficiently, with equality-based selector", Serial, func() { + experiment := gmeasure.NewExperiment("list resources with equality selector") + AddReportEntry(experiment.Name, experiment) + + l := clients.ListOpts{ + Selector: map[string]string{ + "even": "true", + }, + } + var output resources.ResourceList + var err error + + experiment.Sample(func(idx int) { + experiment.MeasureDuration("list-resources-with-selector", func() { + output, err = client.List("ns", l) + }) + + Expect(err).NotTo(HaveOccurred()) + Expect(output).To(HaveLen(numobjs / 2)) + }, gmeasure.SamplingConfig{N: 10, Duration: 10 * time.Second}) + + stats := experiment.GetStats("list-resources-with-selector") + medianDuration := stats.DurationFor(gmeasure.StatMedian) + + Expect(medianDuration).To(BeNumerically("<", 500*time.Millisecond)) + }) + + It("should perform list efficiently, with set-based selector", Serial, func() { + experiment := gmeasure.NewExperiment("list resources with set selector") + AddReportEntry(experiment.Name, experiment) + + l := clients.ListOpts{ + ExpressionSelector: "even in (true,false)", + } + var output resources.ResourceList + var err error + + experiment.Sample(func(idx int) { + experiment.MeasureDuration("list-resources-with-set-selector", func() { + output, err = client.List("ns", l) + }) + + Expect(err).NotTo(HaveOccurred()) + Expect(output).To(HaveLen(numobjs)) + }, gmeasure.SamplingConfig{N: 10, Duration: 10 * time.Second}) + + stats := experiment.GetStats("list-resources-with-set-selector") + medianDuration := stats.DurationFor(gmeasure.StatMedian) + + Expect(medianDuration).To(BeNumerically("<", 500*time.Millisecond)) + }) }) }) diff --git a/pkg/api/v1/resources/core/metadata.pb.go b/pkg/api/v1/resources/core/metadata.pb.go index 8cdc544a7..a2fd49056 100644 --- a/pkg/api/v1/resources/core/metadata.pb.go +++ b/pkg/api/v1/resources/core/metadata.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: metadata.proto diff --git a/pkg/api/v1/resources/core/metadata_extensions.go b/pkg/api/v1/resources/core/metadata_extensions.go index 0063256c8..a39c791da 100644 --- a/pkg/api/v1/resources/core/metadata_extensions.go +++ b/pkg/api/v1/resources/core/metadata_extensions.go @@ -17,3 +17,5 @@ func (m *Metadata) Ref() *ResourceRef { func (m *Metadata) Match(ref *ResourceRef) bool { return m.GetNamespace() == ref.GetNamespace() && m.GetName() == ref.GetName() } + +type Predicate func(metadata *Metadata) bool diff --git a/pkg/api/v1/resources/core/ref.pb.go b/pkg/api/v1/resources/core/ref.pb.go index 5ed48b92b..e9c068328 100644 --- a/pkg/api/v1/resources/core/ref.pb.go +++ b/pkg/api/v1/resources/core/ref.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: ref.proto diff --git a/pkg/api/v1/resources/core/solo-kit.pb.go b/pkg/api/v1/resources/core/solo-kit.pb.go index d1821d012..2212b7203 100644 --- a/pkg/api/v1/resources/core/solo-kit.pb.go +++ b/pkg/api/v1/resources/core/solo-kit.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: solo-kit.proto diff --git a/pkg/api/v1/resources/core/status.pb.go b/pkg/api/v1/resources/core/status.pb.go index fc6f3e4dd..223b7f74c 100644 --- a/pkg/api/v1/resources/core/status.pb.go +++ b/pkg/api/v1/resources/core/status.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: status.proto diff --git a/pkg/api/v2/reporter/reporter.go b/pkg/api/v2/reporter/reporter.go index 6b6eb7fca..00618b259 100644 --- a/pkg/api/v2/reporter/reporter.go +++ b/pkg/api/v2/reporter/reporter.go @@ -3,6 +3,7 @@ package reporter import ( "context" "os" + "slices" "sort" "strings" @@ -192,34 +193,122 @@ func (e ResourceReports) FilterByKind(kind string) ResourceReports { return reports } -// ignores warnings +// refMapAndSortedKeys returns a map of resource refs to resources and a sorted list of resource refs +// This is used to iterate over the resources in a consistent order. +// The reports are keyed by references to the resources, so are not sortable. +// There is no unique key for a resource, so we use the string representation of the name/namespace as the key, +// and collect all the resources with the same key together. +// The previous implementation did not guarantee a consistent order when iterating over the resources, +// so any order used here will be acceptable for backwards compatibility. +func (e ResourceReports) refMapAndSortedKeys() (map[string][]resources.InputResource, []string) { + // refKeys contains all the unique keys for the resources + var refKeys []string + // refMaps is a map of resource keys to a slice of resources with that key + var refMap = make(map[string][]resources.InputResource) + + // Loop over the resources + for res := range e { + + // Get a string representation of the resource ref. This is not guaranteed to be unique. + resKey := res.GetMetadata().Ref().String() + + // Add the resource to the map of resources with the same key + refMap[resKey] = append(refMap[resKey], res) + } + + // Get the list of name-namespace keys + refKeys = make([]string, len(refMap)) + i := 0 + for k := range refMap { + refKeys[i] = k + i++ + } + + // Sort the name-namespace keys. This will allow the reports to be accssed in a consistent order, + // except in cases where the name/namespace is not unique. In those cases, the individual validaiton + // functions will have to handle consistent ordering. + slices.Sort(refKeys) + return refMap, refKeys +} + +// sortErrors sorts errors based on string representation +// Note: because we are using multierror the string representation starts with "x errors occurred". +// This will be consistent, but possibly counter-intuitive for tests. +func sortErrors(errs []error) { + sort.Slice(errs, func(i, j int) bool { + return errs[i].Error() < errs[j].Error() + }) +} + +// Validate ignores warnings func (e ResourceReports) Validate() error { var errs error - for res, rpt := range e { - if rpt.Errors != nil { + refMap, refKeys := e.refMapAndSortedKeys() + + // the refKeys are sorted/sortable and point to the unsortable resources refs that are the keys to the report map + for _, refKey := range refKeys { + // name/namespace is not unique, so we collect those references together + reses := refMap[refKey] + + var errsForKey []error + for _, res := range reses { + rpt := e[res] + + if rpt.Errors != nil { + errsForKey = append(errsForKey, rpt.Errors) + } + } + + if len(errsForKey) > 0 { if errs == nil { - errs = errors.Errorf("invalid resource %v.%v", res.GetMetadata().Namespace, res.GetMetadata().Name) + // All of the resources in the group have the same metadata, so use the first one + errs = errors.Errorf("invalid resource %v.%v", reses[0].GetMetadata().Namespace, reses[0].GetMetadata().Name) + } + sortErrors(errsForKey) + + for _, err := range errsForKey { + errs = multierror.Append(errs, err) } - errs = multierror.Append(errs, rpt.Errors) } } return errs } -// does not ignore warnings +// ValidateStrict does not ignore warnings. If warnings are present, they will be included in the error. +// If an error is not present but warnings are, an "invalid resource" error will be returned along with each warning. func (e ResourceReports) ValidateStrict() error { errs := e.Validate() - for res, rpt := range e { - if len(rpt.Warnings) > 0 { + refMap, refKeys := e.refMapAndSortedKeys() + + for _, refKey := range refKeys { + var errsForKey []error + reses := refMap[refKey] + + // name/namespace is not unique, so we collect those references together + for _, res := range reses { + rpt := e[res] + if len(rpt.Warnings) > 0 { + errsForKey = append(errsForKey, errors.Errorf("WARN: \n %v", rpt.Warnings)) + + } + } + + if len(errsForKey) > 0 { if errs == nil { + // All of the resources in the group have the same metadata, so use the first one errs = errors.Errorf( "invalid resource %v.%v", - res.GetMetadata().GetNamespace(), - res.GetMetadata().GetName(), + reses[0].GetMetadata().GetNamespace(), + reses[0].GetMetadata().GetName(), ) } - errs = multierror.Append(errs, errors.Errorf("WARN: \n %v", rpt.Warnings)) + sortErrors(errsForKey) + + for _, err := range errsForKey { + errs = multierror.Append(errs, err) + } } + } return errs } diff --git a/pkg/api/v2/reporter/reporter_test.go b/pkg/api/v2/reporter/reporter_test.go index 2f82c05d8..54d81f425 100644 --- a/pkg/api/v2/reporter/reporter_test.go +++ b/pkg/api/v2/reporter/reporter_test.go @@ -5,13 +5,13 @@ import ( "fmt" "strings" + "github.com/hashicorp/go-multierror" "github.com/solo-io/go-utils/contextutils" "github.com/solo-io/solo-kit/test/matchers" "github.com/solo-io/solo-kit/pkg/utils/statusutils" "github.com/golang/mock/gomock" - "github.com/hashicorp/go-multierror" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "github.com/solo-io/solo-kit/pkg/api/v1/clients" @@ -484,4 +484,135 @@ var _ = Describe("Reporter", func() { Expect(err).NotTo(HaveOccurred()) }) }) + +}) + +var _ = Describe("Reporter", func() { + type expectedReports struct { + Validation func() error + StrictValidation func() error + SeparateValidationErr func() error + SeparateValidationWarn func() error + } + + var ( + mockResourceClient, mockResourceClient2, mockResourceClient3 clients.ResourceClient + ) + + BeforeEach(func() { + mockResourceClient = memory.NewResourceClient(memory.NewInMemoryResourceCache(), &v1.MockResource{}) + mockResourceClient2 = memory.NewResourceClient(memory.NewInMemoryResourceCache(), &v1.MockResource{}) + mockResourceClient3 = memory.NewResourceClient(memory.NewInMemoryResourceCache(), &v1.MockResource{}) + // By default, DisableTruncateStatus is false, unless users opt into it + // To mirror that in our tests, we explicitly set it to false unless a test requires it + rep.DisableTruncateStatus = false + }) + + Context("Validation", func() { + var ( + r1, r2, r3, r4, r5 resources.Resource + ) + initResources := func() { + var err error + r1, err = mockResourceClient.Write(v1.NewMockResource("test-ns", "testres1"), clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + r2, err = mockResourceClient.Write(v1.NewMockResource("test-ns", "testres2"), clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + r3, err = mockResourceClient.Write(v1.NewMockResource("test-ns", "testres3"), clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + r4, err = mockResourceClient2.Write(v1.NewMockResource("test-ns", "testres1"), clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + r5, err = mockResourceClient3.Write(v1.NewMockResource("test-ns", "testres1"), clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + Expect(r1).NotTo(BeNil()) + Expect(r2).NotTo(BeNil()) + Expect(r3).NotTo(BeNil()) + Expect(r4).NotTo(BeNil()) + Expect(r5).NotTo(BeNil()) + Expect(r3).NotTo(BeNil()) + } + + // r0, r4, and r1 are all for the same resource key + // though the errors are sorted, the `r1` errors come after the `r4` errors because the errors + // are multierrors and when compared, are sorted by the number of errors contaiend. + // `r1` has 3 errors, so comes after `r0` and `r4`, which have one each. + validateReports := func() rep.ResourceReports { + return rep.ResourceReports{ + r1.(*v1.MockResource): rep.Report{Errors: &multierror.Error{Errors: []error{fmt.Errorf("r1err1"), fmt.Errorf("r1err2"), fmt.Errorf("r1err0")}}, Warnings: []string{"r1warn1", "r1warn2"}}, + r2.(*v1.MockResource): rep.Report{Errors: &multierror.Error{Errors: []error{fmt.Errorf("r2err1")}}}, + r3.(*v1.MockResource): rep.Report{Errors: &multierror.Error{Errors: []error{fmt.Errorf("r3err1")}}, Warnings: []string{"r3warn1", "r3warn0"}}, + r4.(*v1.MockResource): rep.Report{Errors: &multierror.Error{Errors: []error{fmt.Errorf("r4err1")}}, Warnings: []string{"r4warn1", "r4warn0"}}, + r5.(*v1.MockResource): rep.Report{Errors: &multierror.Error{Errors: []error{fmt.Errorf("r0err1")}}, Warnings: []string{"r0warn1"}}, + } + } + + validateReportsReordered := func() rep.ResourceReports { + return rep.ResourceReports{ + r5.(*v1.MockResource): rep.Report{Errors: &multierror.Error{Errors: []error{fmt.Errorf("r0err1")}}, Warnings: []string{"r0warn1"}}, + r4.(*v1.MockResource): rep.Report{Errors: &multierror.Error{Errors: []error{fmt.Errorf("r4err1")}}, Warnings: []string{"r4warn1", "r4warn0"}}, + r3.(*v1.MockResource): rep.Report{Errors: &multierror.Error{Errors: []error{fmt.Errorf("r3err1")}}, Warnings: []string{"r3warn1", "r3warn0"}}, + r2.(*v1.MockResource): rep.Report{Errors: &multierror.Error{Errors: []error{fmt.Errorf("r2err1")}}}, + r1.(*v1.MockResource): rep.Report{Errors: &multierror.Error{Errors: []error{fmt.Errorf("r1err1"), fmt.Errorf("r1err2"), fmt.Errorf("r1err0")}}, Warnings: []string{"r1warn1", "r1warn2"}}, + } + } + + expectedValidateErrors := func() error { + var expectedErr error + expectedErr = multierror.Append(expectedErr, errors.Errorf("invalid resource test-ns.testres1")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r0err1")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r4err1")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r1err1")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r1err2")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r1err0")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r2err1")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r3err1")) + + return expectedErr + } + + expectedValidateStrictErrors := func() error { + var expectedErr error + expectedErr = multierror.Append(expectedErr, errors.Errorf("invalid resource test-ns.testres1")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r0err1")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r4err1")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r1err1")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r1err2")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r1err0")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r2err1")) + expectedErr = multierror.Append(expectedErr, fmt.Errorf("r3err1")) + expectedErr = multierror.Append(expectedErr, errors.Errorf("WARN: \n %v", []string{"r0warn1"})) + expectedErr = multierror.Append(expectedErr, errors.Errorf("WARN: \n %v", []string{"r1warn1", "r1warn2"})) + expectedErr = multierror.Append(expectedErr, errors.Errorf("WARN: \n %v", []string{"r4warn1", "r4warn0"})) + expectedErr = multierror.Append(expectedErr, errors.Errorf("WARN: \n %v", []string{"r3warn1", "r3warn0"})) + + return expectedErr + } + + BeforeEach(func() { + initResources() + }) + + // Run these tests multiple times to ensure that the validation errors are ordered consistently + DescribeTable("Validation functions should return the expected reports for a set of reports", MustPassRepeatedly(5), func(getReports func() rep.ResourceReports, expectedResults expectedReports) { + reports := getReports() + // Validate - Regular validation + err := reports.Validate() + Expect(err.Error()).To(Equal(expectedResults.Validation().Error())) + + // ValidateStrict - Strict validation + err = reports.ValidateStrict() + Expect(err.Error()).To(Equal(expectedResults.StrictValidation().Error())) + + }, + Entry("validate reports", validateReports, expectedReports{ + Validation: expectedValidateErrors, + StrictValidation: expectedValidateStrictErrors, + }), + Entry("validate reordered reports", validateReportsReordered, expectedReports{ + Validation: expectedValidateErrors, + StrictValidation: expectedValidateStrictErrors, + }), + ) + + }) }) diff --git a/pkg/api/xds/solo-discovery-service.pb.go b/pkg/api/xds/solo-discovery-service.pb.go index 7357011ad..6b37769aa 100644 --- a/pkg/api/xds/solo-discovery-service.pb.go +++ b/pkg/api/xds/solo-discovery-service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/api/xds/solo-discovery-service.proto diff --git a/pkg/code-generator/codegen/templates/event_loop_template.go b/pkg/code-generator/codegen/templates/event_loop_template.go index 73f722d9f..4c34d18dc 100644 --- a/pkg/code-generator/codegen/templates/event_loop_template.go +++ b/pkg/code-generator/codegen/templates/event_loop_template.go @@ -92,16 +92,33 @@ func (el *{{ lower_camel .GoName }}EventLoop) Run(namespaces []string, opts clie go errutils.AggregateErrs(opts.Ctx, errs, emitterErrs, "{{ .Project.ProjectConfig.Version }}.emitter errors") go func() { var channelClosed bool + // create a new context for each loop, cancel it before each loop var cancel context.CancelFunc = func() {} + // use closure to allow cancel function to be updated as context changes defer func() { cancel() }() + + // cache the previous snapshot for comparison + var previousSnapshot *{{ .GoName }}Snapshot + for { select { case snapshot, ok := <-watch: if !ok { return } + + if syncDecider, isDecider := el.syncer.({{ .GoName }}SyncDecider); isDecider { + if shouldSync := syncDecider.ShouldSync(previousSnapshot, snapshot); !shouldSync { + continue // skip syncing this syncer + } + } else if syncDeciderWithContext, isDecider := el.syncer.({{ .GoName }}SyncDeciderWithContext); isDecider { + if shouldSync := syncDeciderWithContext.ShouldSync(opts.Ctx, previousSnapshot, snapshot); !shouldSync { + continue // skip syncing this syncer + } + } + // cancel any open watches from previous loop cancel() @@ -129,6 +146,9 @@ func (el *{{ lower_camel .GoName }}EventLoop) Run(namespaces []string, opts clie channelClosed = true close(el.ready) } + + previousSnapshot = snapshot + case <-opts.Ctx.Done(): return } diff --git a/pkg/code-generator/codegen/templates/kube/generate_script.go b/pkg/code-generator/codegen/templates/kube/generate_script.go index abef119d7..4eea2fe8f 100644 --- a/pkg/code-generator/codegen/templates/kube/generate_script.go +++ b/pkg/code-generator/codegen/templates/kube/generate_script.go @@ -19,14 +19,14 @@ ROOT_PKG={{ .ProjectConfig.GoPackage }} CLIENT_PKG=${ROOT_PKG}/kube/client APIS_PKG=${ROOT_PKG}/kube/apis -# Below code is copied from https://github.com/weaveworks/flagger/blob/master/hack/update-codegen.sh +# Grab code-generator version from go.sum. CODEGEN_PKG=$(go list -f {{` + `"'{{ .Dir }}'"` + `}} -m k8s.io/code-generator) - +GENGO_PKG=$(go list -f {{` + `"'{{ .Dir }}'"` + `}} -m k8s.io/gengo/v2) echo ">> Using ${CODEGEN_PKG}" # code-generator does work with go.mod but makes assumptions about -# the project living in ` + "$GOPATH/src" + `. To work around this and support +# the project living in $GOPATH/src. To work around this and support # any location; create a temporary directory, use this as an output # base, and copy everything back once generated. TEMP_DIR=$(mktemp -d) @@ -38,16 +38,23 @@ trap "cleanup" EXIT SIGINT echo ">> Temporary output directory ${TEMP_DIR}" +mkdir -p "${TEMP_DIR}/${ROOT_PKG}/pkg/client/informers" \ + "${TEMP_DIR}/${ROOT_PKG}/pkg/client/listers" \ + "${TEMP_DIR}/${ROOT_PKG}/pkg/client/clientset" + # Ensure we can execute. -chmod +x ${CODEGEN_PKG}/generate-groups.sh +chmod +x ${CODEGEN_PKG}/kube_codegen.sh + +source ${CODEGEN_PKG}/kube_codegen.sh kube::codegen::gen_client \ + --output-dir "${TEMP_DIR}" \ + --output-pkg "${CLIENT_PKG}" \ + --with-watch \ + --boilerplate "${GENGO_PKG}/boilerplate/boilerplate.go.txt" \ + ${APIS_PKG} +ls -lha $TEMP_DIR -${CODEGEN_PKG}/generate-groups.sh all \ - ${CLIENT_PKG} \ - ${APIS_PKG} \ - {{ .ProjectConfig.Name }}:{{ .ProjectConfig.Version }} \ - --output-base "${TEMP_DIR}" --go-header-file "${CODEGEN_PKG}/hack/boilerplate.go.txt" # Copy everything back. -cp -a "${TEMP_DIR}/${ROOT_PKG}/." "${SCRIPT_ROOT}/.." +cp -r "${TEMP_DIR}/${ROOT_PKG}/." "${SCRIPT_ROOT}/" `)) diff --git a/pkg/code-generator/codegen/templates/snapshot_template.go b/pkg/code-generator/codegen/templates/snapshot_template.go index 897473eb8..1d3df9dcc 100644 --- a/pkg/code-generator/codegen/templates/snapshot_template.go +++ b/pkg/code-generator/codegen/templates/snapshot_template.go @@ -22,6 +22,7 @@ import ( "github.com/rotisserie/eris" "github.com/solo-io/go-utils/hashutils" "go.uber.org/zap" + "github.com/solo-io/solo-kit/pkg/api/v1/resources/core" ) type {{ .GoName }}Snapshot struct { @@ -106,15 +107,28 @@ func (s *{{ .GoName }}Snapshot) RemoveFromResourceList(resource resources.Resour break } } - return nil + return nil {{- end }} default: return eris.Errorf("did not remove the resource because its type does not exist [%T]", resource) } } +func (s *{{ .GoName }}Snapshot) RemoveMatches(predicate core.Predicate) { +{{- range .Resources }} + var {{ upper_camel .PluralName }} {{ .ImportPrefix }}{{ .Name }}List + for _, res := range s.{{ upper_camel .PluralName }} { + if matches := predicate(res.GetMetadata()); !matches { + {{ upper_camel .PluralName }} = append({{ upper_camel .PluralName }}, res) + } + } + s.{{ upper_camel .PluralName }} = {{ upper_camel .PluralName }} +{{- end }} +} + + func (s *{{ .GoName }}Snapshot) UpsertToResourceList(resource resources.Resource) error { - refKey := resource.GetMetadata().Ref().Key() + refKey := resource.GetMetadata().Ref().Key() switch typed := resource.(type) { {{- range .Resources }} case *{{ .ImportPrefix }}{{ .Name }}: @@ -129,7 +143,7 @@ func (s *{{ .GoName }}Snapshot) UpsertToResourceList(resource resources.Resource s.{{ upper_camel .PluralName }} = append(s.{{ upper_camel .PluralName }}, typed) } s.{{ upper_camel .PluralName }}.Sort() - return nil + return nil {{- end }} default: return eris.Errorf("did not add/replace the resource type because it does not exist %T", resource) @@ -176,7 +190,7 @@ func (s {{ .GoName }}Snapshot) Stringer() {{ .GoName }}SnapshotStringer { var {{.GoName }}GvkToHashableResource = map[schema.GroupVersionKind]func() resources.HashableResource { {{- range .Resources}} {{ .ImportPrefix }}{{ .Name }}GVK: {{ .ImportPrefix }}New{{ .Name }}HashableResource, -{{- end }} +{{- end }} } `)) diff --git a/pkg/code-generator/collector/executor.go b/pkg/code-generator/collector/executor.go index 6b476cecf..8a4a032e9 100644 --- a/pkg/code-generator/collector/executor.go +++ b/pkg/code-generator/collector/executor.go @@ -79,6 +79,10 @@ type OpenApiProtocExecutor struct { // A list of messages (core.solo.io.Status) whose validation schema should // not be generated MessagesWithEmptySchema []string + + // Whether to exclude kubebuilder markers and validations (such as PreserveUnknownFields, MinItems, default, and all CEL rules) + // Type and Required markers will be included regardless + DisableKubeMarkers bool } func (o *OpenApiProtocExecutor) Execute(protoFile string, toFile string, imports []string) error { @@ -105,10 +109,11 @@ func (o *OpenApiProtocExecutor) Execute(protoFile string, toFile string, imports _ = os.Mkdir(directoryPath, os.ModePerm) cmd.Args = append(cmd.Args, - fmt.Sprintf("--openapi_out=yaml=true,single_file=false,include_description=%v,enum_as_int_or_string=%v,additional_empty_schema=%v:%s", + fmt.Sprintf("--openapi_out=yaml=true,single_file=false,include_description=%v,enum_as_int_or_string=%v,additional_empty_schema=%v,disable_kube_markers=%v:%s", o.IncludeDescriptionsInSchema, o.EnumAsIntOrString, strings.Join(o.MessagesWithEmptySchema, "+"), + o.DisableKubeMarkers, directoryPath), ) diff --git a/pkg/code-generator/collector/extractor.go b/pkg/code-generator/collector/extractor.go index 9117345e2..ea1cb2d43 100644 --- a/pkg/code-generator/collector/extractor.go +++ b/pkg/code-generator/collector/extractor.go @@ -87,9 +87,10 @@ func (i *synchronizedImportsExtractor) FetchImportsForFile(protoFile string, imp i.activeRequestsMu.Unlock() select { - case <-time.After(5 * time.Second): + case <-time.After(15 * time.Second): // We should never reach this. This can only occur if we deadlock on file imports - // which only happens with cyclic dependencies + // which only happens with cyclic dependencies or golang is being very slow. + // The deadlock occurs on file imports with cyclic dependencies. // Perhaps a safer alternative to erroring is just to execute the importsFetcher: // return importsFetcher(protoFile) return nil, FetchImportsTimeout(protoFile) diff --git a/pkg/code-generator/docgen/funcs/template_funcs.go b/pkg/code-generator/docgen/funcs/template_funcs.go index 59d4063eb..847f2cc99 100644 --- a/pkg/code-generator/docgen/funcs/template_funcs.go +++ b/pkg/code-generator/docgen/funcs/template_funcs.go @@ -318,8 +318,15 @@ func linkForField(project *model.Project, docsOptions *options.DocsOptions) func linkedFile = filepath.Base(file.GetName()) //return "", errors.Errorf("failed to get generated file path for proto %v in list %v", file.GetName(), project.Request.FileToGenerate) } - linkedFile = relativeFilename(forFile.GetName(), linkedFile) + // Skip links for packages that are configured to be skipped + for _, pkg := range docsOptions.RenderOptions.GetSkipLinksForPathPrefixes() { + if strings.HasPrefix(linkedFile, pkg) { + return typeName, nil + } + } + + linkedFile = relativeFilename(forFile.GetName(), linkedFile) if docsOptions.Output == options.Restructured { linkText = ":ref:`message." + strings.TrimPrefix(field.GetTypeName(), ".") + "`" } else { diff --git a/pkg/code-generator/docgen/options/options.go b/pkg/code-generator/docgen/options/options.go index 27eda005c..29ef61941 100644 --- a/pkg/code-generator/docgen/options/options.go +++ b/pkg/code-generator/docgen/options/options.go @@ -21,8 +21,23 @@ type HugoOptions struct { } type DocsOptions struct { - Output DocsOutput - HugoOptions *HugoOptions + Output DocsOutput + HugoOptions *HugoOptions + RenderOptions *RenderOptions +} + +// RenderOptions provides options for rendering documentation +type RenderOptions struct { + // SkipLinksForPathPrefixes is a list of file path prefixes of APIs to which we should not be attempting to link + // For example: "github.com/solo-io/gloo/projects/gloo/api/external" + SkipLinksForPathPrefixes []string +} + +func (o *RenderOptions) GetSkipLinksForPathPrefixes() []string { + if o == nil { + return nil + } + return o.SkipLinksForPathPrefixes } const ( diff --git a/pkg/code-generator/schemagen/generator.go b/pkg/code-generator/schemagen/generator.go index 4568ebecf..b11fbcd03 100644 --- a/pkg/code-generator/schemagen/generator.go +++ b/pkg/code-generator/schemagen/generator.go @@ -46,6 +46,11 @@ type ValidationSchemaOptions struct { // A list of messages (core.solo.io.Status) whose validation schema should // not be generated MessagesWithEmptySchema []string + + // Whether to exclude kubebuilder markers and validations (such as PreserveUnknownFields, MinItems, default, and all CEL rules) + // Type and Required markers will be included regardless + // Default: false + DisableKubeMarkers bool } type JsonSchemaGenerator interface { diff --git a/pkg/code-generator/schemagen/protoc.go b/pkg/code-generator/schemagen/protoc.go index 774c48e37..323dafb3f 100644 --- a/pkg/code-generator/schemagen/protoc.go +++ b/pkg/code-generator/schemagen/protoc.go @@ -56,6 +56,7 @@ func (p *protocGenerator) GetJsonSchemaForProject(project *model.Project) (map[s IncludeDescriptionsInSchema: !p.validationSchemaOptions.RemoveDescriptionsFromSchema, EnumAsIntOrString: p.validationSchemaOptions.EnumAsIntOrString, MessagesWithEmptySchema: p.validationSchemaOptions.MessagesWithEmptySchema, + DisableKubeMarkers: p.validationSchemaOptions.DisableKubeMarkers, } // 1. Generate the openApiSchemas for the project, writing them to a temp directory (schemaOutputDir) diff --git a/pkg/utils/kubeutils/metadata.go b/pkg/utils/kubeutils/metadata.go index 11b80f1cf..5ffd30329 100644 --- a/pkg/utils/kubeutils/metadata.go +++ b/pkg/utils/kubeutils/metadata.go @@ -5,9 +5,28 @@ import ( "github.com/solo-io/solo-kit/pkg/api/v1/clients" "github.com/solo-io/solo-kit/pkg/api/v1/resources/core" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" kubetypes "k8s.io/apimachinery/pkg/types" ) +// HasSelector returns true if the ListOpts contains a selector (which may be either an equality-based selector +// or set-based expression selector). +func HasSelector(listOpts clients.ListOpts) bool { + return listOpts.ExpressionSelector != "" || len(listOpts.Selector) > 0 +} + +// ToLabelSelector converts the selector specified by the ListOpts into an apimachinery label selector. +// If both ExpressionSelector and Selector are specified in the opts, only ExpressionSelector is used. +func ToLabelSelector(listOpts clients.ListOpts) (labels.Selector, error) { + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#set-based-requirement + if listOpts.ExpressionSelector != "" { + return labels.Parse(listOpts.ExpressionSelector) + } + + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#equality-based-requirement + return labels.SelectorFromSet(listOpts.Selector), nil +} + func FromKubeMeta(meta metav1.ObjectMeta, copyOwnerReferences bool) *core.Metadata { var metaData = &core.Metadata{} diff --git a/test/mocks/v1/mock_resources.pb.go b/test/mocks/v1/mock_resources.pb.go index e73b27311..44fb9f41f 100644 --- a/test/mocks/v1/mock_resources.pb.go +++ b/test/mocks/v1/mock_resources.pb.go @@ -4,7 +4,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/test/mocks/api/v1/mock_resources.proto diff --git a/test/mocks/v1/more_mock_resources.pb.go b/test/mocks/v1/more_mock_resources.pb.go index 092ac6ba1..5e34c9c86 100644 --- a/test/mocks/v1/more_mock_resources.pb.go +++ b/test/mocks/v1/more_mock_resources.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/test/mocks/api/v1/more_mock_resources.proto diff --git a/test/mocks/v1/simple_mock_resources.pb.go b/test/mocks/v1/simple_mock_resources.pb.go index fc28ebd40..3cd399370 100644 --- a/test/mocks/v1/simple_mock_resources.pb.go +++ b/test/mocks/v1/simple_mock_resources.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/test/mocks/api/v1/simple_mock_resources.proto diff --git a/test/mocks/v1/testing_event_loop.sk.go b/test/mocks/v1/testing_event_loop.sk.go index 544dd1d4c..7190e2140 100644 --- a/test/mocks/v1/testing_event_loop.sk.go +++ b/test/mocks/v1/testing_event_loop.sk.go @@ -87,16 +87,33 @@ func (el *testingEventLoop) Run(namespaces []string, opts clients.WatchOpts) (<- go errutils.AggregateErrs(opts.Ctx, errs, emitterErrs, "v1.emitter errors") go func() { var channelClosed bool + // create a new context for each loop, cancel it before each loop var cancel context.CancelFunc = func() {} + // use closure to allow cancel function to be updated as context changes defer func() { cancel() }() + + // cache the previous snapshot for comparison + var previousSnapshot *TestingSnapshot + for { select { case snapshot, ok := <-watch: if !ok { return } + + if syncDecider, isDecider := el.syncer.(TestingSyncDecider); isDecider { + if shouldSync := syncDecider.ShouldSync(previousSnapshot, snapshot); !shouldSync { + continue // skip syncing this syncer + } + } else if syncDeciderWithContext, isDecider := el.syncer.(TestingSyncDeciderWithContext); isDecider { + if shouldSync := syncDeciderWithContext.ShouldSync(opts.Ctx, previousSnapshot, snapshot); !shouldSync { + continue // skip syncing this syncer + } + } + // cancel any open watches from previous loop cancel() @@ -124,6 +141,9 @@ func (el *testingEventLoop) Run(namespaces []string, opts clients.WatchOpts) (<- channelClosed = true close(el.ready) } + + previousSnapshot = snapshot + case <-opts.Ctx.Done(): return } diff --git a/test/mocks/v1/testing_snapshot.sk.go b/test/mocks/v1/testing_snapshot.sk.go index ce962ce2b..6412e1916 100644 --- a/test/mocks/v1/testing_snapshot.sk.go +++ b/test/mocks/v1/testing_snapshot.sk.go @@ -13,6 +13,7 @@ import ( "github.com/rotisserie/eris" "github.com/solo-io/go-utils/hashutils" "github.com/solo-io/solo-kit/pkg/api/v1/resources" + "github.com/solo-io/solo-kit/pkg/api/v1/resources/core" "go.uber.org/zap" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -257,6 +258,65 @@ func (s *TestingSnapshot) RemoveFromResourceList(resource resources.Resource) er } } +func (s *TestingSnapshot) RemoveMatches(predicate core.Predicate) { + var Simplemocks SimpleMockResourceList + for _, res := range s.Simplemocks { + if matches := predicate(res.GetMetadata()); !matches { + Simplemocks = append(Simplemocks, res) + } + } + s.Simplemocks = Simplemocks + var Mocks MockResourceList + for _, res := range s.Mocks { + if matches := predicate(res.GetMetadata()); !matches { + Mocks = append(Mocks, res) + } + } + s.Mocks = Mocks + var Fakes FakeResourceList + for _, res := range s.Fakes { + if matches := predicate(res.GetMetadata()); !matches { + Fakes = append(Fakes, res) + } + } + s.Fakes = Fakes + var Anothermockresources AnotherMockResourceList + for _, res := range s.Anothermockresources { + if matches := predicate(res.GetMetadata()); !matches { + Anothermockresources = append(Anothermockresources, res) + } + } + s.Anothermockresources = Anothermockresources + var Clusterresources ClusterResourceList + for _, res := range s.Clusterresources { + if matches := predicate(res.GetMetadata()); !matches { + Clusterresources = append(Clusterresources, res) + } + } + s.Clusterresources = Clusterresources + var Mcts MockCustomTypeList + for _, res := range s.Mcts { + if matches := predicate(res.GetMetadata()); !matches { + Mcts = append(Mcts, res) + } + } + s.Mcts = Mcts + var Mcshts MockCustomSpecHashTypeList + for _, res := range s.Mcshts { + if matches := predicate(res.GetMetadata()); !matches { + Mcshts = append(Mcshts, res) + } + } + s.Mcshts = Mcshts + var Pods github_com_solo_io_solo_kit_pkg_api_v1_resources_common_kubernetes.PodList + for _, res := range s.Pods { + if matches := predicate(res.GetMetadata()); !matches { + Pods = append(Pods, res) + } + } + s.Pods = Pods +} + func (s *TestingSnapshot) UpsertToResourceList(resource resources.Resource) error { refKey := resource.GetMetadata().Ref().Key() switch typed := resource.(type) { diff --git a/test/mocks/v1alpha1/mock_resources.pb.go b/test/mocks/v1alpha1/mock_resources.pb.go index 19d251954..83da3f5e1 100644 --- a/test/mocks/v1alpha1/mock_resources.pb.go +++ b/test/mocks/v1alpha1/mock_resources.pb.go @@ -4,7 +4,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/test/mocks/api/v1alpha1/mock_resources.proto diff --git a/test/mocks/v1alpha1/testing_event_loop.sk.go b/test/mocks/v1alpha1/testing_event_loop.sk.go index 8416c559c..2fa267af0 100644 --- a/test/mocks/v1alpha1/testing_event_loop.sk.go +++ b/test/mocks/v1alpha1/testing_event_loop.sk.go @@ -87,16 +87,33 @@ func (el *testingEventLoop) Run(namespaces []string, opts clients.WatchOpts) (<- go errutils.AggregateErrs(opts.Ctx, errs, emitterErrs, "v1alpha1.emitter errors") go func() { var channelClosed bool + // create a new context for each loop, cancel it before each loop var cancel context.CancelFunc = func() {} + // use closure to allow cancel function to be updated as context changes defer func() { cancel() }() + + // cache the previous snapshot for comparison + var previousSnapshot *TestingSnapshot + for { select { case snapshot, ok := <-watch: if !ok { return } + + if syncDecider, isDecider := el.syncer.(TestingSyncDecider); isDecider { + if shouldSync := syncDecider.ShouldSync(previousSnapshot, snapshot); !shouldSync { + continue // skip syncing this syncer + } + } else if syncDeciderWithContext, isDecider := el.syncer.(TestingSyncDeciderWithContext); isDecider { + if shouldSync := syncDeciderWithContext.ShouldSync(opts.Ctx, previousSnapshot, snapshot); !shouldSync { + continue // skip syncing this syncer + } + } + // cancel any open watches from previous loop cancel() @@ -124,6 +141,9 @@ func (el *testingEventLoop) Run(namespaces []string, opts clients.WatchOpts) (<- channelClosed = true close(el.ready) } + + previousSnapshot = snapshot + case <-opts.Ctx.Done(): return } diff --git a/test/mocks/v1alpha1/testing_snapshot.sk.go b/test/mocks/v1alpha1/testing_snapshot.sk.go index c86ad8967..b2470d816 100644 --- a/test/mocks/v1alpha1/testing_snapshot.sk.go +++ b/test/mocks/v1alpha1/testing_snapshot.sk.go @@ -11,6 +11,7 @@ import ( "github.com/rotisserie/eris" "github.com/solo-io/go-utils/hashutils" "github.com/solo-io/solo-kit/pkg/api/v1/resources" + "github.com/solo-io/solo-kit/pkg/api/v1/resources/core" "go.uber.org/zap" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -80,6 +81,16 @@ func (s *TestingSnapshot) RemoveFromResourceList(resource resources.Resource) er } } +func (s *TestingSnapshot) RemoveMatches(predicate core.Predicate) { + var Mocks MockResourceList + for _, res := range s.Mocks { + if matches := predicate(res.GetMetadata()); !matches { + Mocks = append(Mocks, res) + } + } + s.Mocks = Mocks +} + func (s *TestingSnapshot) UpsertToResourceList(resource resources.Resource) error { refKey := resource.GetMetadata().Ref().Key() switch typed := resource.(type) { diff --git a/test/mocks/v2alpha1/kube/client/clientset/versioned/doc.go b/test/mocks/v2alpha1/kube/client/clientset/versioned/doc.go deleted file mode 100644 index 41721ca52..000000000 --- a/test/mocks/v2alpha1/kube/client/clientset/versioned/doc.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -// This package has the automatically generated clientset. -package versioned diff --git a/test/mocks/v2alpha1/kube/client/informers/externalversions/factory.go b/test/mocks/v2alpha1/kube/client/informers/externalversions/factory.go index b9589e5de..b72f8a7b3 100644 --- a/test/mocks/v2alpha1/kube/client/informers/externalversions/factory.go +++ b/test/mocks/v2alpha1/kube/client/informers/externalversions/factory.go @@ -42,6 +42,7 @@ type sharedInformerFactory struct { lock sync.Mutex defaultResync time.Duration customResync map[reflect.Type]time.Duration + transform cache.TransformFunc informers map[reflect.Type]cache.SharedIndexInformer // startedInformers is used for tracking which informers have been started. @@ -80,6 +81,14 @@ func WithNamespace(namespace string) SharedInformerOption { } } +// WithTransform sets a transform on all informers. +func WithTransform(transform cache.TransformFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.transform = transform + return factory + } +} + // NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { return NewSharedInformerFactoryWithOptions(client, defaultResync) @@ -166,7 +175,7 @@ func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[ref return res } -// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// InformerFor returns the SharedIndexInformer for obj using an internal // client. func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { f.lock.Lock() @@ -184,6 +193,7 @@ func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internal } informer = newFunc(f.client, resyncPeriod) + informer.SetTransform(f.transform) f.informers[informerType] = informer return informer @@ -239,7 +249,7 @@ type SharedInformerFactory interface { // ForResource gives generic access to a shared informer of the matching type. ForResource(resource schema.GroupVersionResource) (GenericInformer, error) - // InternalInformerFor returns the SharedIndexInformer for obj using an internal + // InformerFor returns the SharedIndexInformer for obj using an internal // client. InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer diff --git a/test/mocks/v2alpha1/kube/hack/update-codegen.sh b/test/mocks/v2alpha1/kube/hack/update-codegen.sh index 485debd5d..963c633de 100755 --- a/test/mocks/v2alpha1/kube/hack/update-codegen.sh +++ b/test/mocks/v2alpha1/kube/hack/update-codegen.sh @@ -10,9 +10,9 @@ ROOT_PKG=github.com/solo-io/solo-kit/test/mocks/v2alpha1 CLIENT_PKG=${ROOT_PKG}/kube/client APIS_PKG=${ROOT_PKG}/kube/apis -# Below code is copied from https://github.com/weaveworks/flagger/blob/master/hack/update-codegen.sh +# Grab code-generator version from go.sum. CODEGEN_PKG=$(go list -f '{{ .Dir }}' -m k8s.io/code-generator) - +GENGO_PKG=$(go list -f '{{ .Dir }}' -m k8s.io/gengo/v2) echo ">> Using ${CODEGEN_PKG}" @@ -29,15 +29,22 @@ trap "cleanup" EXIT SIGINT echo ">> Temporary output directory ${TEMP_DIR}" +mkdir -p "${TEMP_DIR}/${ROOT_PKG}/pkg/client/informers" \ + "${TEMP_DIR}/${ROOT_PKG}/pkg/client/listers" \ + "${TEMP_DIR}/${ROOT_PKG}/pkg/client/clientset" + # Ensure we can execute. -chmod +x ${CODEGEN_PKG}/generate-groups.sh +chmod +x ${CODEGEN_PKG}/kube_codegen.sh + +source ${CODEGEN_PKG}/kube_codegen.sh kube::codegen::gen_client \ + --output-dir "${TEMP_DIR}" \ + --output-pkg "${CLIENT_PKG}" \ + --with-watch \ + --boilerplate "${GENGO_PKG}/boilerplate/boilerplate.go.txt" \ + ${APIS_PKG} +ls -lha $TEMP_DIR -${CODEGEN_PKG}/generate-groups.sh all \ - ${CLIENT_PKG} \ - ${APIS_PKG} \ - testing.solo.io:v2alpha1 \ - --output-base "${TEMP_DIR}" --go-header-file "${CODEGEN_PKG}/hack/boilerplate.go.txt" # Copy everything back. -cp -a "${TEMP_DIR}/${ROOT_PKG}/." "${SCRIPT_ROOT}/.." +cp -r "${TEMP_DIR}/${ROOT_PKG}/." "${SCRIPT_ROOT}/" diff --git a/test/mocks/v2alpha1/mock_resources.pb.go b/test/mocks/v2alpha1/mock_resources.pb.go index 86f12841d..3a971bff7 100644 --- a/test/mocks/v2alpha1/mock_resources.pb.go +++ b/test/mocks/v2alpha1/mock_resources.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.33.0 // protoc v3.6.1 // source: github.com/solo-io/solo-kit/test/mocks/api/v2alpha1/mock_resources.proto diff --git a/test/mocks/v2alpha1/testing_event_loop.sk.go b/test/mocks/v2alpha1/testing_event_loop.sk.go index 2fe948bcb..9382a2526 100644 --- a/test/mocks/v2alpha1/testing_event_loop.sk.go +++ b/test/mocks/v2alpha1/testing_event_loop.sk.go @@ -87,16 +87,33 @@ func (el *testingEventLoop) Run(namespaces []string, opts clients.WatchOpts) (<- go errutils.AggregateErrs(opts.Ctx, errs, emitterErrs, "v2alpha1.emitter errors") go func() { var channelClosed bool + // create a new context for each loop, cancel it before each loop var cancel context.CancelFunc = func() {} + // use closure to allow cancel function to be updated as context changes defer func() { cancel() }() + + // cache the previous snapshot for comparison + var previousSnapshot *TestingSnapshot + for { select { case snapshot, ok := <-watch: if !ok { return } + + if syncDecider, isDecider := el.syncer.(TestingSyncDecider); isDecider { + if shouldSync := syncDecider.ShouldSync(previousSnapshot, snapshot); !shouldSync { + continue // skip syncing this syncer + } + } else if syncDeciderWithContext, isDecider := el.syncer.(TestingSyncDeciderWithContext); isDecider { + if shouldSync := syncDeciderWithContext.ShouldSync(opts.Ctx, previousSnapshot, snapshot); !shouldSync { + continue // skip syncing this syncer + } + } + // cancel any open watches from previous loop cancel() @@ -124,6 +141,9 @@ func (el *testingEventLoop) Run(namespaces []string, opts clients.WatchOpts) (<- channelClosed = true close(el.ready) } + + previousSnapshot = snapshot + case <-opts.Ctx.Done(): return } diff --git a/test/mocks/v2alpha1/testing_snapshot.sk.go b/test/mocks/v2alpha1/testing_snapshot.sk.go index 39b213e70..591a058f4 100644 --- a/test/mocks/v2alpha1/testing_snapshot.sk.go +++ b/test/mocks/v2alpha1/testing_snapshot.sk.go @@ -13,6 +13,7 @@ import ( "github.com/rotisserie/eris" "github.com/solo-io/go-utils/hashutils" "github.com/solo-io/solo-kit/pkg/api/v1/resources" + "github.com/solo-io/solo-kit/pkg/api/v1/resources/core" "go.uber.org/zap" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -136,6 +137,30 @@ func (s *TestingSnapshot) RemoveFromResourceList(resource resources.Resource) er } } +func (s *TestingSnapshot) RemoveMatches(predicate core.Predicate) { + var Mocks MockResourceList + for _, res := range s.Mocks { + if matches := predicate(res.GetMetadata()); !matches { + Mocks = append(Mocks, res) + } + } + s.Mocks = Mocks + var Fcars FrequentlyChangingAnnotationsResourceList + for _, res := range s.Fcars { + if matches := predicate(res.GetMetadata()); !matches { + Fcars = append(Fcars, res) + } + } + s.Fcars = Fcars + var Fakes testing_solo_io.FakeResourceList + for _, res := range s.Fakes { + if matches := predicate(res.GetMetadata()); !matches { + Fakes = append(Fakes, res) + } + } + s.Fakes = Fakes +} + func (s *TestingSnapshot) UpsertToResourceList(resource resources.Resource) error { refKey := resource.GetMetadata().Ref().Key() switch typed := resource.(type) {