mirror of
				https://github.com/1Password/onepassword-operator.git
				synced 2025-10-31 03:39:39 +00:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ![github-actions[bot]](/assets/img/avatar_default.png)  | 5f232b121a | ||
|   | f72e5243b0 | 
| @@ -12,6 +12,14 @@ | |||||||
|  |  | ||||||
| --- | --- | ||||||
|  |  | ||||||
|  | [//]: # (START/v1.8.1) | ||||||
|  | # v1.8.1 | ||||||
|  |  | ||||||
|  | ## Fixes | ||||||
|  |  * Upgrade operator to use Operator SDK v1.33.0. {#180} | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
| [//]: # (START/v1.8.0) | [//]: # (START/v1.8.0) | ||||||
| # v1.8.0 | # v1.8.0 | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								Dockerfile
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | |||||||
| # Build the manager binary | # Build the manager binary | ||||||
| FROM golang:1.20 as builder | FROM golang:1.21 as builder | ||||||
| ARG TARGETOS | ARG TARGETOS | ||||||
| ARG TARGETARCH | ARG TARGETARCH | ||||||
|  |  | ||||||
| @@ -7,14 +7,11 @@ WORKDIR /workspace | |||||||
| # Copy the Go Modules manifests | # Copy the Go Modules manifests | ||||||
| COPY go.mod go.mod | COPY go.mod go.mod | ||||||
| COPY go.sum go.sum | COPY go.sum go.sum | ||||||
| # cache deps before building and copying source so that we don't need to re-download as much |  | ||||||
| # and so that source changes don't invalidate our downloaded layer |  | ||||||
| RUN go mod download |  | ||||||
|  |  | ||||||
| # Copy the go source | # Copy the go source | ||||||
| COPY main.go main.go | COPY cmd/main.go cmd/main.go | ||||||
| COPY api/ api/ | COPY api/ api/ | ||||||
| COPY controllers/ controllers/ | COPY internal/controller/ internal/controller/ | ||||||
| COPY pkg/ pkg/ | COPY pkg/ pkg/ | ||||||
| COPY version/ version/ | COPY version/ version/ | ||||||
| COPY vendor/ vendor/ | COPY vendor/ vendor/ | ||||||
| @@ -29,7 +26,7 @@ RUN CGO_ENABLED=0 \ | |||||||
|     go build \ |     go build \ | ||||||
|     -ldflags "-X \"github.com/1Password/onepassword-operator/version.Version=$operator_version\"" \ |     -ldflags "-X \"github.com/1Password/onepassword-operator/version.Version=$operator_version\"" \ | ||||||
|     -mod vendor \ |     -mod vendor \ | ||||||
|     -a -o manager main.go |     -a -o manager cmd/main.go | ||||||
|  |  | ||||||
| # Use distroless as minimal base image to package the manager binary | # Use distroless as minimal base image to package the manager binary | ||||||
| # Refer to https://github.com/GoogleContainerTools/distroless for more details | # Refer to https://github.com/GoogleContainerTools/distroless for more details | ||||||
|   | |||||||
							
								
								
									
										86
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										86
									
								
								Makefile
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ export MAIN_BRANCH ?= main | |||||||
| # To re-generate a bundle for another specific version without changing the standard setup, you can: | # To re-generate a bundle for another specific version without changing the standard setup, you can: | ||||||
| # - use the VERSION as arg of the bundle target (e.g make bundle VERSION=0.0.2) | # - use the VERSION as arg of the bundle target (e.g make bundle VERSION=0.0.2) | ||||||
| # - use environment variables to overwrite this value (e.g export VERSION=0.0.2) | # - use environment variables to overwrite this value (e.g export VERSION=0.0.2) | ||||||
| VERSION ?= 1.6.0 | VERSION ?= 1.8.1 | ||||||
|  |  | ||||||
| # CHANNELS define the bundle channels used in the bundle. | # CHANNELS define the bundle channels used in the bundle. | ||||||
| # Add a new line here if you would like to change its default config. (E.g CHANNELS = "candidate,fast,stable") | # Add a new line here if you would like to change its default config. (E.g CHANNELS = "candidate,fast,stable") | ||||||
| @@ -48,10 +48,14 @@ ifeq ($(USE_IMAGE_DIGESTS), true) | |||||||
| 	BUNDLE_GEN_FLAGS += --use-image-digests | 	BUNDLE_GEN_FLAGS += --use-image-digests | ||||||
| endif | endif | ||||||
|  |  | ||||||
|  | # Set the Operator SDK version to use. By default, what is installed on the system is used. | ||||||
|  | # This is useful for CI or a project to utilize a specific version of the operator-sdk toolkit. | ||||||
|  | OPERATOR_SDK_VERSION ?= v1.33.0 | ||||||
|  |  | ||||||
| # Image URL to use all building/pushing image targets | # Image URL to use all building/pushing image targets | ||||||
| IMG ?= 1password/onepassword-operator:latest | IMG ?= 1password/onepassword-operator:latest | ||||||
| # ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary. | # ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary. | ||||||
| ENVTEST_K8S_VERSION = 1.26 | ENVTEST_K8S_VERSION = 1.28.3 | ||||||
|  |  | ||||||
| # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) | # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) | ||||||
| ifeq (,$(shell go env GOBIN)) | ifeq (,$(shell go env GOBIN)) | ||||||
| @@ -60,6 +64,12 @@ else | |||||||
| GOBIN=$(shell go env GOBIN) | GOBIN=$(shell go env GOBIN) | ||||||
| endif | endif | ||||||
|  |  | ||||||
|  | # CONTAINER_TOOL defines the container tool to be used for building images. | ||||||
|  | # Be aware that the target commands are only tested with Docker which is | ||||||
|  | # scaffolded by default. However, you might want to replace it to use other | ||||||
|  | # tools. (i.e. podman) | ||||||
|  | CONTAINER_TOOL ?= docker | ||||||
|  |  | ||||||
| # Setting SHELL to bash allows bash commands to be executed by recipes. | # Setting SHELL to bash allows bash commands to be executed by recipes. | ||||||
| # Options are set to exit when a recipe line exits non-zero or a piped command fails. | # Options are set to exit when a recipe line exits non-zero or a piped command fails. | ||||||
| SHELL = /usr/bin/env bash -o pipefail | SHELL = /usr/bin/env bash -o pipefail | ||||||
| @@ -111,38 +121,38 @@ test: manifests generate fmt vet envtest ## Run tests. | |||||||
|  |  | ||||||
| .PHONY: build | .PHONY: build | ||||||
| build: manifests generate fmt vet ## Build manager binary. | build: manifests generate fmt vet ## Build manager binary. | ||||||
| 	go build -o bin/manager main.go | 	go build -o bin/manager cmd/main.go | ||||||
|  |  | ||||||
| .PHONY: run | .PHONY: run | ||||||
| run: manifests generate fmt vet ## Run a controller from your host. | run: manifests generate fmt vet ## Run a controller from your host. | ||||||
| 	go run ./main.go | 	go run ./cmd/main.go | ||||||
|  |  | ||||||
| # If you wish built the manager image targeting other platforms you can use the --platform flag. | # If you wish built the manager image targeting other platforms you can use the --platform flag. | ||||||
| # (i.e. docker build --platform linux/arm64 ). However, you must enable docker buildKit for it. | # (i.e. docker build --platform linux/arm64 ). However, you must enable docker buildKit for it. | ||||||
| # More info: https://docs.docker.com/develop/develop-images/build_enhancements/ | # More info: https://docs.docker.com/develop/develop-images/build_enhancements/ | ||||||
| .PHONY: docker-build | .PHONY: docker-build | ||||||
| docker-build: test ## Build docker image with the manager. | docker-build: test ## Build docker image with the manager. | ||||||
| 	docker build -t ${IMG} . | 	$(CONTAINER_TOOL) build -t ${IMG} . | ||||||
|  |  | ||||||
| .PHONY: docker-push | .PHONY: docker-push | ||||||
| docker-push: ## Push docker image with the manager. | docker-push: ## Push docker image with the manager. | ||||||
| 	docker push ${IMG} | 	$(CONTAINER_TOOL) push ${IMG} | ||||||
|  |  | ||||||
| # PLATFORMS defines the target platforms for  the manager image be build to provide support to multiple | # PLATFORMS defines the target platforms for  the manager image be build to provide support to multiple | ||||||
| # architectures. (i.e. make docker-buildx IMG=myregistry/mypoperator:0.0.1). To use this option you need to: | # architectures. (i.e. make docker-buildx IMG=myregistry/mypoperator:0.0.1). To use this option you need to: | ||||||
| # - able to use docker buildx . More info: https://docs.docker.com/build/buildx/ | # - able to use docker buildx . More info: https://docs.docker.com/build/buildx/ | ||||||
| # - have enable BuildKit, More info: https://docs.docker.com/develop/develop-images/build_enhancements/ | # - have enable BuildKit, More info: https://docs.docker.com/develop/develop-images/build_enhancements/ | ||||||
| # - be able to push the image for your registry (i.e. if you do not inform a valid value via IMG=<myregistry/image:<tag>> than the export will fail) | # - be able to push the image for your registry (i.e. if you do not inform a valid value via IMG=<myregistry/image:<tag>> then the export will fail) | ||||||
| # To properly provided solutions that supports more than one platform you should use this option. | # To properly provided solutions that supports more than one platform you should use this option. | ||||||
| PLATFORMS ?= linux/arm64,linux/amd64,linux/s390x,linux/ppc64le | PLATFORMS ?= linux/arm64,linux/amd64,linux/s390x,linux/ppc64le | ||||||
| .PHONY: docker-buildx | .PHONY: docker-buildx | ||||||
| docker-buildx: test ## Build and push docker image for the manager for cross-platform support | docker-buildx: test ## Build and push docker image for the manager for cross-platform support | ||||||
| 	# copy existing Dockerfile and insert --platform=${BUILDPLATFORM} into Dockerfile.cross, and preserve the original Dockerfile | 	# copy existing Dockerfile and insert --platform=${BUILDPLATFORM} into Dockerfile.cross, and preserve the original Dockerfile | ||||||
| 	sed -e '1 s/\(^FROM\)/FROM --platform=\$$\{BUILDPLATFORM\}/; t' -e ' 1,// s//FROM --platform=\$$\{BUILDPLATFORM\}/' Dockerfile > Dockerfile.cross | 	sed -e '1 s/\(^FROM\)/FROM --platform=\$$\{BUILDPLATFORM\}/; t' -e ' 1,// s//FROM --platform=\$$\{BUILDPLATFORM\}/' Dockerfile > Dockerfile.cross | ||||||
| 	- docker buildx create --name project-v3-builder | 	- $(CONTAINER_TOOL) buildx create --name project-v3-builder | ||||||
| 	docker buildx use project-v3-builder | 	$(CONTAINER_TOOL) buildx use project-v3-builder | ||||||
| 	- docker buildx build --push --platform=$(PLATFORMS) --tag ${IMG} -f Dockerfile.cross | 	- $(CONTAINER_TOOL) buildx build --push --platform=$(PLATFORMS) --tag ${IMG} -f Dockerfile.cross . | ||||||
| 	- docker buildx rm project-v3-builder | 	- $(CONTAINER_TOOL) buildx rm project-v3-builder | ||||||
| 	rm Dockerfile.cross | 	rm Dockerfile.cross | ||||||
|  |  | ||||||
| ##@ Deployment | ##@ Deployment | ||||||
| @@ -153,24 +163,24 @@ endif | |||||||
|  |  | ||||||
| .PHONY: install | .PHONY: install | ||||||
| install: manifests kustomize ## Install CRDs into the K8s cluster specified in ~/.kube/config. | install: manifests kustomize ## Install CRDs into the K8s cluster specified in ~/.kube/config. | ||||||
| 	$(KUSTOMIZE) build config/crd | kubectl apply -f - | 	$(KUSTOMIZE) build config/crd | $(KUBECTL) apply -f - | ||||||
|  |  | ||||||
| .PHONY: uninstall | .PHONY: uninstall | ||||||
| uninstall: manifests kustomize ## Uninstall CRDs from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion. | uninstall: manifests kustomize ## Uninstall CRDs from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion. | ||||||
| 	$(KUSTOMIZE) build config/crd | kubectl delete --ignore-not-found=$(ignore-not-found) -f - | 	$(KUSTOMIZE) build config/crd | $(KUBECTL) delete --ignore-not-found=$(ignore-not-found) -f - | ||||||
|  |  | ||||||
| .PHONY: set-namespace | .PHONY: set-namespace | ||||||
| set-namespace: | set-namespace: | ||||||
| 	cd config/default && $(KUSTOMIZE) edit set namespace $(shell kubectl config view --minify -o jsonpath={..namespace}) | 	cd config/default && $(KUSTOMIZE) edit set namespace $(shell $(KUBECTL) config view --minify -o jsonpath={..namespace}) | ||||||
|  |  | ||||||
| .PHONY: deploy | .PHONY: deploy | ||||||
| deploy: manifests kustomize set-namespace ## Deploy controller to the K8s cluster specified in ~/.kube/config. | deploy: manifests kustomize set-namespace ## Deploy controller to the K8s cluster specified in ~/.kube/config. | ||||||
| 	cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG} | 	cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG} | ||||||
| 	$(KUSTOMIZE) build config/default | kubectl apply -f - | 	$(KUSTOMIZE) build config/default | $(KUBECTL) apply -f - | ||||||
|  |  | ||||||
| .PHONY: undeploy | .PHONY: undeploy | ||||||
| undeploy: ## Undeploy controller from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion. | undeploy: ## Undeploy controller from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion. | ||||||
| 	$(KUSTOMIZE) build config/default | kubectl delete --ignore-not-found=$(ignore-not-found) -f - | 	$(KUSTOMIZE) build config/default | $(KUBECTL) delete --ignore-not-found=$(ignore-not-found) -f - | ||||||
|  |  | ||||||
| ##@ Build Dependencies | ##@ Build Dependencies | ||||||
|  |  | ||||||
| @@ -180,36 +190,58 @@ $(LOCALBIN): | |||||||
| 	mkdir -p $(LOCALBIN) | 	mkdir -p $(LOCALBIN) | ||||||
|  |  | ||||||
| ## Tool Binaries | ## Tool Binaries | ||||||
|  | KUBECTL ?= kubectl | ||||||
| KUSTOMIZE ?= $(LOCALBIN)/kustomize | KUSTOMIZE ?= $(LOCALBIN)/kustomize | ||||||
| CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen | CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen | ||||||
| ENVTEST ?= $(LOCALBIN)/setup-envtest | ENVTEST ?= $(LOCALBIN)/setup-envtest | ||||||
|  |  | ||||||
| ## Tool Versions | ## Tool Versions | ||||||
| KUSTOMIZE_VERSION ?= v4.5.7 | KUSTOMIZE_VERSION ?= v5.3.0 | ||||||
| CONTROLLER_TOOLS_VERSION ?= v0.10.0 | CONTROLLER_TOOLS_VERSION ?= v0.13.0 | ||||||
|  |  | ||||||
| KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" |  | ||||||
| .PHONY: kustomize | .PHONY: kustomize | ||||||
| kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary. | kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary. If wrong version is installed, it will be removed before downloading. | ||||||
| $(KUSTOMIZE): $(LOCALBIN) | $(KUSTOMIZE): $(LOCALBIN) | ||||||
| 	test -s $(LOCALBIN)/kustomize || { curl -s $(KUSTOMIZE_INSTALL_SCRIPT) | bash -s -- $(subst v,,$(KUSTOMIZE_VERSION)) $(LOCALBIN); } | 	@if test -x $(LOCALBIN)/kustomize && ! $(LOCALBIN)/kustomize version | grep -q $(KUSTOMIZE_VERSION); then \ | ||||||
|  | 		echo "$(LOCALBIN)/kustomize version is not expected $(KUSTOMIZE_VERSION). Removing it before installing."; \ | ||||||
|  | 		rm -rf $(LOCALBIN)/kustomize; \ | ||||||
|  | 	fi | ||||||
|  | 	test -s $(LOCALBIN)/kustomize || GOBIN=$(LOCALBIN) GO111MODULE=on go install sigs.k8s.io/kustomize/kustomize/v5@$(KUSTOMIZE_VERSION) | ||||||
|  |  | ||||||
| .PHONY: controller-gen | .PHONY: controller-gen | ||||||
| controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary. | controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary. If wrong version is installed, it will be overwritten. | ||||||
| $(CONTROLLER_GEN): $(LOCALBIN) | $(CONTROLLER_GEN): $(LOCALBIN) | ||||||
| 	test -s $(LOCALBIN)/controller-gen || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION) | 	test -s $(LOCALBIN)/controller-gen && $(LOCALBIN)/controller-gen --version | grep -q $(CONTROLLER_TOOLS_VERSION) || \ | ||||||
|  | 	GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION) | ||||||
|  |  | ||||||
| .PHONY: envtest | .PHONY: envtest | ||||||
| envtest: $(ENVTEST) ## Download envtest-setup locally if necessary. | envtest: $(ENVTEST) ## Download envtest-setup locally if necessary. | ||||||
| $(ENVTEST): $(LOCALBIN) | $(ENVTEST): $(LOCALBIN) | ||||||
| 	test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest | 	test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest | ||||||
|  |  | ||||||
|  | .PHONY: operator-sdk | ||||||
|  | OPERATOR_SDK ?= $(LOCALBIN)/operator-sdk | ||||||
|  | operator-sdk: ## Download operator-sdk locally if necessary. | ||||||
|  | ifeq (,$(wildcard $(OPERATOR_SDK))) | ||||||
|  | ifeq (, $(shell which operator-sdk 2>/dev/null)) | ||||||
|  | 	@{ \ | ||||||
|  | 	set -e ;\ | ||||||
|  | 	mkdir -p $(dir $(OPERATOR_SDK)) ;\ | ||||||
|  | 	OS=$(shell go env GOOS) && ARCH=$(shell go env GOARCH) && \ | ||||||
|  | 	curl -sSLo $(OPERATOR_SDK) https://github.com/operator-framework/operator-sdk/releases/download/$(OPERATOR_SDK_VERSION)/operator-sdk_$${OS}_$${ARCH} ;\ | ||||||
|  | 	chmod +x $(OPERATOR_SDK) ;\ | ||||||
|  | 	} | ||||||
|  | else | ||||||
|  | OPERATOR_SDK = $(shell which operator-sdk) | ||||||
|  | endif | ||||||
|  | endif | ||||||
|  |  | ||||||
| .PHONY: bundle | .PHONY: bundle | ||||||
| bundle: manifests kustomize ## Generate bundle manifests and metadata, then validate generated files. | bundle: manifests kustomize operator-sdk ## Generate bundle manifests and metadata, then validate generated files. | ||||||
| 	operator-sdk generate kustomize manifests -q | 	$(OPERATOR_SDK) generate kustomize manifests -q | ||||||
| 	cd config/manager && $(KUSTOMIZE) edit set image controller=$(IMG) | 	cd config/manager && $(KUSTOMIZE) edit set image controller=$(IMG) | ||||||
| 	$(KUSTOMIZE) build config/manifests | operator-sdk generate bundle $(BUNDLE_GEN_FLAGS) | 	$(KUSTOMIZE) build config/manifests | $(OPERATOR_SDK) generate bundle $(BUNDLE_GEN_FLAGS) | ||||||
| 	operator-sdk bundle validate ./bundle | 	$(OPERATOR_SDK) bundle validate ./bundle | ||||||
|  |  | ||||||
| .PHONY: bundle-build | .PHONY: bundle-build | ||||||
| bundle-build: ## Build the bundle image. | bundle-build: ## Build the bundle image. | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								PROJECT
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								PROJECT
									
									
									
									
									
								
							| @@ -1,6 +1,10 @@ | |||||||
|  | # Code generated by tool. DO NOT EDIT. | ||||||
|  | # This file is used to track the info used to scaffold your project | ||||||
|  | # and allow the plugins properly work. | ||||||
|  | # More info: https://book.kubebuilder.io/reference/project-config.html | ||||||
| domain: onepassword.com | domain: onepassword.com | ||||||
| layout: | layout: | ||||||
| - go.kubebuilder.io/v4-alpha | - go.kubebuilder.io/v4 | ||||||
| plugins: | plugins: | ||||||
|   manifests.sdk.operatorframework.io/v2: {} |   manifests.sdk.operatorframework.io/v2: {} | ||||||
|   scorecard.sdk.operatorframework.io/v2: {} |   scorecard.sdk.operatorframework.io/v2: {} | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| /* | /* | ||||||
| MIT License | MIT License | ||||||
|  |  | ||||||
| Copyright (c) 2020-2022 1Password | Copyright (c) 2020-2024 1Password | ||||||
|  |  | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| /* | /* | ||||||
| MIT License | MIT License | ||||||
|  |  | ||||||
| Copyright (c) 2020-2022 1Password | Copyright (c) 2020-2024 1Password | ||||||
|  |  | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|   | |||||||
| @@ -1,10 +1,9 @@ | |||||||
| //go:build !ignore_autogenerated | //go:build !ignore_autogenerated | ||||||
| // +build !ignore_autogenerated |  | ||||||
|  |  | ||||||
| /* | /* | ||||||
| MIT License | MIT License | ||||||
|  |  | ||||||
| Copyright (c) 2020-2022 1Password | Copyright (c) 2020-2024 1Password | ||||||
|  |  | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| /* | /* | ||||||
| MIT License | MIT License | ||||||
| 
 | 
 | ||||||
| Copyright (c) 2020-2022 1Password | Copyright (c) 2020-2024 1Password | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
| @@ -44,13 +44,15 @@ import ( | |||||||
| 	k8sruntime "k8s.io/apimachinery/pkg/runtime" | 	k8sruntime "k8s.io/apimachinery/pkg/runtime" | ||||||
| 	utilruntime "k8s.io/apimachinery/pkg/util/runtime" | 	utilruntime "k8s.io/apimachinery/pkg/util/runtime" | ||||||
| 	clientgoscheme "k8s.io/client-go/kubernetes/scheme" | 	clientgoscheme "k8s.io/client-go/kubernetes/scheme" | ||||||
|  | 	"k8s.io/client-go/rest" | ||||||
| 	ctrl "sigs.k8s.io/controller-runtime" | 	ctrl "sigs.k8s.io/controller-runtime" | ||||||
| 	"sigs.k8s.io/controller-runtime/pkg/cache" | 	"sigs.k8s.io/controller-runtime/pkg/cache" | ||||||
| 	"sigs.k8s.io/controller-runtime/pkg/healthz" | 	"sigs.k8s.io/controller-runtime/pkg/healthz" | ||||||
| 	"sigs.k8s.io/controller-runtime/pkg/log/zap" | 	"sigs.k8s.io/controller-runtime/pkg/log/zap" | ||||||
|  | 	metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" | ||||||
| 
 | 
 | ||||||
| 	onepasswordcomv1 "github.com/1Password/onepassword-operator/api/v1" | 	onepasswordcomv1 "github.com/1Password/onepassword-operator/api/v1" | ||||||
| 	"github.com/1Password/onepassword-operator/controllers" | 	"github.com/1Password/onepassword-operator/internal/controller" | ||||||
| 	op "github.com/1Password/onepassword-operator/pkg/onepassword" | 	op "github.com/1Password/onepassword-operator/pkg/onepassword" | ||||||
| 	"github.com/1Password/onepassword-operator/pkg/utils" | 	"github.com/1Password/onepassword-operator/pkg/utils" | ||||||
| 	"github.com/1Password/onepassword-operator/version" | 	"github.com/1Password/onepassword-operator/version" | ||||||
| @@ -125,20 +127,23 @@ func main() { | |||||||
| 
 | 
 | ||||||
| 	options := ctrl.Options{ | 	options := ctrl.Options{ | ||||||
| 		Scheme:                 scheme, | 		Scheme:                 scheme, | ||||||
| 		Namespace:              watchNamespace, | 		Metrics:                metricsserver.Options{BindAddress: metricsAddr}, | ||||||
| 		MetricsBindAddress:     metricsAddr, |  | ||||||
| 		Port:                   9443, |  | ||||||
| 		HealthProbeBindAddress: probeAddr, | 		HealthProbeBindAddress: probeAddr, | ||||||
| 		LeaderElection:         enableLeaderElection, | 		LeaderElection:         enableLeaderElection, | ||||||
| 		LeaderElectionID:       "c26807fd.onepassword.com", | 		LeaderElectionID:       "c26807fd.onepassword.com", | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Add support for MultiNamespace set in WATCH_NAMESPACE (e.g ns1,ns2) | 	// Add support for MultiNamespace set in WATCH_NAMESPACE (e.g ns1,ns2) | ||||||
| 	if strings.Contains(watchNamespace, ",") { | 	if watchNamespace != "" { | ||||||
| 		setupLog.Info("manager set up with multiple namespaces", "namespaces", watchNamespace) | 		namespaces := strings.Split(watchNamespace, ",") | ||||||
| 		// configure cluster-scoped with MultiNamespacedCacheBuilder | 		namespaceMap := make(map[string]cache.Config) | ||||||
| 		options.Namespace = "" | 		for _, namespace := range namespaces { | ||||||
| 		options.NewCache = cache.MultiNamespacedCacheBuilder(strings.Split(watchNamespace, ",")) | 			namespaceMap[namespace] = cache.Config{} | ||||||
|  | 		} | ||||||
|  | 		options.NewCache = func(config *rest.Config, opts cache.Options) (cache.Cache, error) { | ||||||
|  | 			opts.DefaultNamespaces = namespaceMap | ||||||
|  | 			return cache.New(config, opts) | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options) | 	mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options) | ||||||
| @@ -154,7 +159,7 @@ func main() { | |||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if err = (&controllers.OnePasswordItemReconciler{ | 	if err = (&controller.OnePasswordItemReconciler{ | ||||||
| 		Client:          mgr.GetClient(), | 		Client:          mgr.GetClient(), | ||||||
| 		Scheme:          mgr.GetScheme(), | 		Scheme:          mgr.GetScheme(), | ||||||
| 		OpConnectClient: opConnectClient, | 		OpConnectClient: opConnectClient, | ||||||
| @@ -164,7 +169,7 @@ func main() { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	r, _ := regexp.Compile(annotationRegExpString) | 	r, _ := regexp.Compile(annotationRegExpString) | ||||||
| 	if err = (&controllers.DeploymentReconciler{ | 	if err = (&controller.DeploymentReconciler{ | ||||||
| 		Client:             mgr.GetClient(), | 		Client:             mgr.GetClient(), | ||||||
| 		Scheme:             mgr.GetScheme(), | 		Scheme:             mgr.GetScheme(), | ||||||
| 		OpConnectClient:    opConnectClient, | 		OpConnectClient:    opConnectClient, | ||||||
| @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 | |||||||
| kind: CustomResourceDefinition | kind: CustomResourceDefinition | ||||||
| metadata: | metadata: | ||||||
|   annotations: |   annotations: | ||||||
|     controller-gen.kubebuilder.io/version: v0.10.0 |     controller-gen.kubebuilder.io/version: v0.13.0 | ||||||
|   creationTimestamp: null |  | ||||||
|   name: onepassworditems.onepassword.com |   name: onepassworditems.onepassword.com | ||||||
| spec: | spec: | ||||||
|   group: onepassword.com |   group: onepassword.com | ||||||
|   | |||||||
| @@ -5,17 +5,19 @@ resources: | |||||||
| - bases/onepassword.com_onepassworditems.yaml | - bases/onepassword.com_onepassworditems.yaml | ||||||
| #+kubebuilder:scaffold:crdkustomizeresource | #+kubebuilder:scaffold:crdkustomizeresource | ||||||
|  |  | ||||||
| patchesStrategicMerge: | patches: | ||||||
| # [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix. | # [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix. | ||||||
| # patches here are for enabling the conversion webhook for each CRD | # patches here are for enabling the conversion webhook for each CRD | ||||||
| #- patches/webhook_in_onepassworditems.yaml | #- path: patches/webhook_in_onepassworditems.yaml | ||||||
| #+kubebuilder:scaffold:crdkustomizewebhookpatch | #+kubebuilder:scaffold:crdkustomizewebhookpatch | ||||||
|  |  | ||||||
| # [CERTMANAGER] To enable cert-manager, uncomment all the sections with [CERTMANAGER] prefix. | # [CERTMANAGER] To enable cert-manager, uncomment all the sections with [CERTMANAGER] prefix. | ||||||
| # patches here are for enabling the CA injection for each CRD | # patches here are for enabling the CA injection for each CRD | ||||||
| #- patches/cainjection_in_onepassworditems.yaml | #- path: patches/cainjection_in_onepassworditems.yaml | ||||||
| #+kubebuilder:scaffold:crdkustomizecainjectionpatch | #+kubebuilder:scaffold:crdkustomizecainjectionpatch | ||||||
|  |  | ||||||
|  | # [WEBHOOK] To enable webhook, uncomment the following section | ||||||
| # the following config is for teaching kustomize how to do kustomization for CRDs. | # the following config is for teaching kustomize how to do kustomization for CRDs. | ||||||
| configurations: |  | ||||||
| - kustomizeconfig.yaml | #configurations: | ||||||
|  | #- kustomizeconfig.yaml | ||||||
|   | |||||||
| @@ -1,3 +1,6 @@ | |||||||
|  | # Adds namespace to all resources. | ||||||
|  | # namespace: onepassword-connect-operator | ||||||
|  |  | ||||||
| # Value of this field is prepended to the | # Value of this field is prepended to the | ||||||
| # names of all resources, e.g. a deployment named | # names of all resources, e.g. a deployment named | ||||||
| # "wordpress" becomes "alices-wordpress". | # "wordpress" becomes "alices-wordpress". | ||||||
| @@ -23,24 +26,20 @@ resources: | |||||||
| # [PROMETHEUS] To enable prometheus monitor, uncomment all sections with 'PROMETHEUS'. | # [PROMETHEUS] To enable prometheus monitor, uncomment all sections with 'PROMETHEUS'. | ||||||
| #- ../prometheus | #- ../prometheus | ||||||
|  |  | ||||||
| patchesStrategicMerge: | patches: | ||||||
| # Protect the /metrics endpoint by putting it behind auth. | # Protect the /metrics endpoint by putting it behind auth. | ||||||
| # If you want your controller-manager to expose the /metrics | # If you want your controller-manager to expose the /metrics | ||||||
| # endpoint w/o any authn/z, please comment the following line. | # endpoint w/o any authn/z, please comment the following line. | ||||||
| - manager_auth_proxy_patch.yaml | - path: manager_auth_proxy_patch.yaml | ||||||
|  |  | ||||||
| # Mount the controller config file for loading manager configurations |  | ||||||
| # through a ComponentConfig type |  | ||||||
| #- manager_config_patch.yaml |  | ||||||
|  |  | ||||||
| # [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in | # [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in | ||||||
| # crd/kustomization.yaml | # crd/kustomization.yaml | ||||||
| #- manager_webhook_patch.yaml | #- path: manager_webhook_patch.yaml | ||||||
|  |  | ||||||
| # [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. | # [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. | ||||||
| # Uncomment 'CERTMANAGER' sections in crd/kustomization.yaml to enable the CA injection in the admission webhooks. | # Uncomment 'CERTMANAGER' sections in crd/kustomization.yaml to enable the CA injection in the admission webhooks. | ||||||
| # 'CERTMANAGER' needs to be enabled to use ca injection | # 'CERTMANAGER' needs to be enabled to use ca injection | ||||||
| #- webhookcainjection_patch.yaml | #- path: webhookcainjection_patch.yaml | ||||||
|  |  | ||||||
| # [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER' prefix. | # [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER' prefix. | ||||||
| # Uncomment the following replacements to add the cert-manager CA injection annotations | # Uncomment the following replacements to add the cert-manager CA injection annotations | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ spec: | |||||||
|           capabilities: |           capabilities: | ||||||
|             drop: |             drop: | ||||||
|               - "ALL" |               - "ALL" | ||||||
|         image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 |         image: gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0 | ||||||
|         args: |         args: | ||||||
|         - "--secure-listen-address=0.0.0.0:8443" |         - "--secure-listen-address=0.0.0.0:8443" | ||||||
|         - "--upstream=http://127.0.0.1:8080/" |         - "--upstream=http://127.0.0.1:8080/" | ||||||
|   | |||||||
| @@ -6,17 +6,5 @@ metadata: | |||||||
| spec: | spec: | ||||||
|   template: |   template: | ||||||
|     spec: |     spec: | ||||||
|       securityContext: |  | ||||||
|         runAsNonRoot: true |  | ||||||
|       containers: |       containers: | ||||||
|       - name: manager |       - name: manager | ||||||
|         args: |  | ||||||
|         - "--config=controller_manager_config.yaml" |  | ||||||
|         volumeMounts: |  | ||||||
|         - name: manager-config |  | ||||||
|           mountPath: /controller_manager_config.yaml |  | ||||||
|           subPath: controller_manager_config.yaml |  | ||||||
|       volumes: |  | ||||||
|       - name: manager-config |  | ||||||
|         configMap: |  | ||||||
|           name: manager-config |  | ||||||
|   | |||||||
| @@ -1,21 +0,0 @@ | |||||||
| apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 |  | ||||||
| kind: ControllerManagerConfig |  | ||||||
| health: |  | ||||||
|   healthProbeBindAddress: :8081 |  | ||||||
| metrics: |  | ||||||
|   bindAddress: 127.0.0.1:8080 |  | ||||||
| webhook: |  | ||||||
|   port: 9443 |  | ||||||
| leaderElection: |  | ||||||
|   leaderElect: true |  | ||||||
|   resourceName: c26807fd.onepassword.com |  | ||||||
| # leaderElectionReleaseOnCancel defines if the leader should step down volume |  | ||||||
| # when the Manager ends. This requires the binary to immediately end when the |  | ||||||
| # Manager is stopped, otherwise, this setting is unsafe. Setting this significantly |  | ||||||
| # speeds up voluntary leader transitions as the new leader don't have to wait |  | ||||||
| # LeaseDuration time first. |  | ||||||
| # In the default scaffold provided, the program ends immediately after |  | ||||||
| # the manager stops, so would be fine to enable this option. However, |  | ||||||
| # if you are doing or is intended to do any operation such as perform cleanups |  | ||||||
| # after the manager stops then its usage might be unsafe. |  | ||||||
| # leaderElectionReleaseOnCancel: true |  | ||||||
| @@ -1,10 +1,8 @@ | |||||||
| resources: | resources: | ||||||
| - manager.yaml | - manager.yaml | ||||||
|  | apiVersion: kustomize.config.k8s.io/v1beta1 | ||||||
| generatorOptions: | kind: Kustomization | ||||||
|   disableNameSuffixHash: true | images: | ||||||
|  | - name: controller | ||||||
| configMapGenerator: |   newName: 1password/onepassword-operator | ||||||
| - name: manager-config |   newTag: latest | ||||||
|   files: |  | ||||||
|   - controller_manager_config.yaml |  | ||||||
|   | |||||||
| @@ -1,14 +1,34 @@ | |||||||
|  | apiVersion: v1 | ||||||
|  | kind: Namespace | ||||||
|  | metadata: | ||||||
|  |   labels: | ||||||
|  |     control-plane: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/name: namespace | ||||||
|  |     app.kubernetes.io/instance: system | ||||||
|  |     app.kubernetes.io/component: manager | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|  |   name: system | ||||||
|  | --- | ||||||
| apiVersion: apps/v1 | apiVersion: apps/v1 | ||||||
| kind: Deployment | kind: Deployment | ||||||
| metadata: | metadata: | ||||||
|   name: onepassword-connect-operator |   name: onepassword-connect-operator | ||||||
|   namespace: system |   namespace: system | ||||||
|   labels: |   labels: | ||||||
|     name: onepassword-connect-operator |     control-plane: controller-manager | ||||||
|  |     app.kubernetes.io/name: deployment | ||||||
|  |     app.kubernetes.io/instance: controller-manager | ||||||
|  |     app.kubernetes.io/component: manager | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
| spec: | spec: | ||||||
|   selector: |   selector: | ||||||
|     matchLabels: |     matchLabels: | ||||||
|       name: onepassword-connect-operator |       name: onepassword-connect-operator | ||||||
|  |       control-plane: onepassword-connect-operator | ||||||
|   replicas: 1 |   replicas: 1 | ||||||
|   template: |   template: | ||||||
|     metadata: |     metadata: | ||||||
| @@ -16,7 +36,28 @@ spec: | |||||||
|         kubectl.kubernetes.io/default-container: manager |         kubectl.kubernetes.io/default-container: manager | ||||||
|       labels: |       labels: | ||||||
|         name: onepassword-connect-operator |         name: onepassword-connect-operator | ||||||
|  |         control-plane: onepassword-connect-operator | ||||||
|     spec: |     spec: | ||||||
|  |       # TODO(user): Uncomment the following code to configure the nodeAffinity expression | ||||||
|  |       # according to the platforms which are supported by your solution. | ||||||
|  |       # It is considered best practice to support multiple architectures. You can | ||||||
|  |       # build your manager image using the makefile target docker-buildx. | ||||||
|  |       # affinity: | ||||||
|  |       #   nodeAffinity: | ||||||
|  |       #     requiredDuringSchedulingIgnoredDuringExecution: | ||||||
|  |       #       nodeSelectorTerms: | ||||||
|  |       #         - matchExpressions: | ||||||
|  |       #           - key: kubernetes.io/arch | ||||||
|  |       #             operator: In | ||||||
|  |       #             values: | ||||||
|  |       #               - amd64 | ||||||
|  |       #               - arm64 | ||||||
|  |       #               - ppc64le | ||||||
|  |       #               - s390x | ||||||
|  |       #           - key: kubernetes.io/os | ||||||
|  |       #             operator: In | ||||||
|  |       #             values: | ||||||
|  |       #               - linux | ||||||
|       securityContext: |       securityContext: | ||||||
|         runAsNonRoot: true |         runAsNonRoot: true | ||||||
|         # TODO(user): For common cases that do not require escalating privileges |         # TODO(user): For common cases that do not require escalating privileges | ||||||
|   | |||||||
| @@ -1,10 +1,16 @@ | |||||||
|  |  | ||||||
| # Prometheus Monitor Service (Metrics) | # Prometheus Monitor Service (Metrics) | ||||||
| apiVersion: monitoring.coreos.com/v1 | apiVersion: monitoring.coreos.com/v1 | ||||||
| kind: ServiceMonitor | kind: ServiceMonitor | ||||||
| metadata: | metadata: | ||||||
|   labels: |   labels: | ||||||
|     name: onepassword-connect-operator |     name: onepassword-connect-operator | ||||||
|  |     control-plane: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/name: servicemonitor | ||||||
|  |     app.kubernetes.io/instance: controller-manager-metrics-monitor | ||||||
|  |     app.kubernetes.io/component: metrics | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|   name: onepassword-connect-operator-metrics-monitor |   name: onepassword-connect-operator-metrics-monitor | ||||||
|   namespace: system |   namespace: system | ||||||
| spec: | spec: | ||||||
| @@ -18,3 +24,4 @@ spec: | |||||||
|   selector: |   selector: | ||||||
|     matchLabels: |     matchLabels: | ||||||
|       name: onepassword-connect-operator |       name: onepassword-connect-operator | ||||||
|  |       control-plane: onepassword-connect-operator | ||||||
|   | |||||||
| @@ -1,6 +1,13 @@ | |||||||
| apiVersion: rbac.authorization.k8s.io/v1 | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
| kind: ClusterRole | kind: ClusterRole | ||||||
| metadata: | metadata: | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: clusterrole | ||||||
|  |     app.kubernetes.io/instance: metrics-reader | ||||||
|  |     app.kubernetes.io/component: kube-rbac-proxy | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|   name: metrics-reader |   name: metrics-reader | ||||||
| rules: | rules: | ||||||
| - nonResourceURLs: | - nonResourceURLs: | ||||||
|   | |||||||
| @@ -1,6 +1,13 @@ | |||||||
| apiVersion: rbac.authorization.k8s.io/v1 | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
| kind: ClusterRole | kind: ClusterRole | ||||||
| metadata: | metadata: | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: clusterrole | ||||||
|  |     app.kubernetes.io/instance: proxy-role | ||||||
|  |     app.kubernetes.io/component: kube-rbac-proxy | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|   name: proxy-role |   name: proxy-role | ||||||
| rules: | rules: | ||||||
| - apiGroups: | - apiGroups: | ||||||
|   | |||||||
| @@ -1,6 +1,13 @@ | |||||||
| apiVersion: rbac.authorization.k8s.io/v1 | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
| kind: ClusterRoleBinding | kind: ClusterRoleBinding | ||||||
| metadata: | metadata: | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: clusterrolebinding | ||||||
|  |     app.kubernetes.io/instance: proxy-rolebinding | ||||||
|  |     app.kubernetes.io/component: kube-rbac-proxy | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|   name: proxy-rolebinding |   name: proxy-rolebinding | ||||||
| roleRef: | roleRef: | ||||||
|   apiGroup: rbac.authorization.k8s.io |   apiGroup: rbac.authorization.k8s.io | ||||||
|   | |||||||
| @@ -3,6 +3,13 @@ kind: Service | |||||||
| metadata: | metadata: | ||||||
|   labels: |   labels: | ||||||
|     name: onepassword-connect-operator |     name: onepassword-connect-operator | ||||||
|  |     control-plane: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/name: service | ||||||
|  |     app.kubernetes.io/instance: controller-manager-metrics-service | ||||||
|  |     app.kubernetes.io/component: kube-rbac-proxy | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|   name: onepassword-connect-operator-metrics-service |   name: onepassword-connect-operator-metrics-service | ||||||
|   namespace: system |   namespace: system | ||||||
| spec: | spec: | ||||||
| @@ -13,3 +20,4 @@ spec: | |||||||
|     targetPort: https |     targetPort: https | ||||||
|   selector: |   selector: | ||||||
|     name: onepassword-connect-operator |     name: onepassword-connect-operator | ||||||
|  |     control-plane: onepassword-connect-operator | ||||||
|   | |||||||
| @@ -2,6 +2,13 @@ | |||||||
| apiVersion: rbac.authorization.k8s.io/v1 | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
| kind: Role | kind: Role | ||||||
| metadata: | metadata: | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: role | ||||||
|  |     app.kubernetes.io/instance: leader-election-role | ||||||
|  |     app.kubernetes.io/component: rbac | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|   name: leader-election-role |   name: leader-election-role | ||||||
| rules: | rules: | ||||||
| - apiGroups: | - apiGroups: | ||||||
|   | |||||||
| @@ -1,6 +1,13 @@ | |||||||
| apiVersion: rbac.authorization.k8s.io/v1 | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
| kind: RoleBinding | kind: RoleBinding | ||||||
| metadata: | metadata: | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: rolebinding | ||||||
|  |     app.kubernetes.io/instance: leader-election-rolebinding | ||||||
|  |     app.kubernetes.io/component: rbac | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|   name: leader-election-rolebinding |   name: leader-election-rolebinding | ||||||
| roleRef: | roleRef: | ||||||
|   apiGroup: rbac.authorization.k8s.io |   apiGroup: rbac.authorization.k8s.io | ||||||
|   | |||||||
| @@ -2,6 +2,13 @@ | |||||||
| apiVersion: rbac.authorization.k8s.io/v1 | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
| kind: ClusterRole | kind: ClusterRole | ||||||
| metadata: | metadata: | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: clusterrole | ||||||
|  |     app.kubernetes.io/instance: onepassworditem-editor-role | ||||||
|  |     app.kubernetes.io/component: rbac | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|   name: onepassworditem-editor-role |   name: onepassworditem-editor-role | ||||||
| rules: | rules: | ||||||
| - apiGroups: | - apiGroups: | ||||||
|   | |||||||
| @@ -2,6 +2,13 @@ | |||||||
| apiVersion: rbac.authorization.k8s.io/v1 | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
| kind: ClusterRole | kind: ClusterRole | ||||||
| metadata: | metadata: | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: clusterrole | ||||||
|  |     app.kubernetes.io/instance: onepassworditem-viewer-role | ||||||
|  |     app.kubernetes.io/component: rbac | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|   name: onepassworditem-viewer-role |   name: onepassworditem-viewer-role | ||||||
| rules: | rules: | ||||||
| - apiGroups: | - apiGroups: | ||||||
|   | |||||||
| @@ -2,7 +2,6 @@ | |||||||
| apiVersion: rbac.authorization.k8s.io/v1 | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
| kind: ClusterRole | kind: ClusterRole | ||||||
| metadata: | metadata: | ||||||
|   creationTimestamp: null |  | ||||||
|   name: manager-role |   name: manager-role | ||||||
| rules: | rules: | ||||||
| - apiGroups: | - apiGroups: | ||||||
| @@ -87,6 +86,15 @@ rules: | |||||||
|   - get |   - get | ||||||
|   - patch |   - patch | ||||||
|   - update |   - update | ||||||
|  | - apiGroups: | ||||||
|  |   - coordination.k8s.io | ||||||
|  |   resources: | ||||||
|  |   - leases | ||||||
|  |   verbs: | ||||||
|  |   - create | ||||||
|  |   - get | ||||||
|  |   - list | ||||||
|  |   - update | ||||||
| - apiGroups: | - apiGroups: | ||||||
|   - monitoring.coreos.com |   - monitoring.coreos.com | ||||||
|   resources: |   resources: | ||||||
|   | |||||||
| @@ -1,6 +1,13 @@ | |||||||
| apiVersion: rbac.authorization.k8s.io/v1 | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
| kind: ClusterRoleBinding | kind: ClusterRoleBinding | ||||||
| metadata: | metadata: | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: clusterrolebinding | ||||||
|  |     app.kubernetes.io/instance: manager-rolebinding | ||||||
|  |     app.kubernetes.io/component: rbac | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|   name: manager-rolebinding |   name: manager-rolebinding | ||||||
| roleRef: | roleRef: | ||||||
|   apiGroup: rbac.authorization.k8s.io |   apiGroup: rbac.authorization.k8s.io | ||||||
|   | |||||||
| @@ -1,5 +1,12 @@ | |||||||
| apiVersion: v1 | apiVersion: v1 | ||||||
| kind: ServiceAccount | kind: ServiceAccount | ||||||
| metadata: | metadata: | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: serviceaccount | ||||||
|  |     app.kubernetes.io/instance: controller-manager-sa | ||||||
|  |     app.kubernetes.io/component: rbac | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|   name: onepassword-connect-operator |   name: onepassword-connect-operator | ||||||
|   namespace: system |   namespace: system | ||||||
|   | |||||||
| @@ -1,6 +1,12 @@ | |||||||
| apiVersion: onepassword.com/v1 | apiVersion: onepassword.com/v1 | ||||||
| kind: OnePasswordItem | kind: OnePasswordItem | ||||||
| metadata: | metadata: | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: onepassworditem | ||||||
|  |     app.kubernetes.io/instance: onepassworditem-sample | ||||||
|  |     app.kubernetes.io/part-of: onepassword-connect-operator | ||||||
|  |     app.kubernetes.io/managed-by: kustomize | ||||||
|  |     app.kubernetes.io/created-by: onepassword-connect-operator | ||||||
|   name: onepassworditem-sample |   name: onepassworditem-sample | ||||||
| spec: | spec: | ||||||
|   itemPath: "vaults/<vault_id>/items/<item_id>" |   itemPath: "vaults/<vault_id>/items/<item_id>" | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|     entrypoint: |     entrypoint: | ||||||
|     - scorecard-test |     - scorecard-test | ||||||
|     - basic-check-spec |     - basic-check-spec | ||||||
|     image: quay.io/operator-framework/scorecard-test:v1.23.0 |     image: quay.io/operator-framework/scorecard-test:v1.33.0 | ||||||
|     labels: |     labels: | ||||||
|       suite: basic |       suite: basic | ||||||
|       test: basic-check-spec-test |       test: basic-check-spec-test | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|     entrypoint: |     entrypoint: | ||||||
|     - scorecard-test |     - scorecard-test | ||||||
|     - olm-bundle-validation |     - olm-bundle-validation | ||||||
|     image: quay.io/operator-framework/scorecard-test:v1.23.0 |     image: quay.io/operator-framework/scorecard-test:v1.33.0 | ||||||
|     labels: |     labels: | ||||||
|       suite: olm |       suite: olm | ||||||
|       test: olm-bundle-validation-test |       test: olm-bundle-validation-test | ||||||
| @@ -14,7 +14,7 @@ | |||||||
|     entrypoint: |     entrypoint: | ||||||
|     - scorecard-test |     - scorecard-test | ||||||
|     - olm-crds-have-validation |     - olm-crds-have-validation | ||||||
|     image: quay.io/operator-framework/scorecard-test:v1.23.0 |     image: quay.io/operator-framework/scorecard-test:v1.33.0 | ||||||
|     labels: |     labels: | ||||||
|       suite: olm |       suite: olm | ||||||
|       test: olm-crds-have-validation-test |       test: olm-crds-have-validation-test | ||||||
| @@ -24,7 +24,7 @@ | |||||||
|     entrypoint: |     entrypoint: | ||||||
|     - scorecard-test |     - scorecard-test | ||||||
|     - olm-crds-have-resources |     - olm-crds-have-resources | ||||||
|     image: quay.io/operator-framework/scorecard-test:v1.23.0 |     image: quay.io/operator-framework/scorecard-test:v1.33.0 | ||||||
|     labels: |     labels: | ||||||
|       suite: olm |       suite: olm | ||||||
|       test: olm-crds-have-resources-test |       test: olm-crds-have-resources-test | ||||||
| @@ -34,7 +34,7 @@ | |||||||
|     entrypoint: |     entrypoint: | ||||||
|     - scorecard-test |     - scorecard-test | ||||||
|     - olm-spec-descriptors |     - olm-spec-descriptors | ||||||
|     image: quay.io/operator-framework/scorecard-test:v1.23.0 |     image: quay.io/operator-framework/scorecard-test:v1.33.0 | ||||||
|     labels: |     labels: | ||||||
|       suite: olm |       suite: olm | ||||||
|       test: olm-spec-descriptors-test |       test: olm-spec-descriptors-test | ||||||
| @@ -44,7 +44,7 @@ | |||||||
|     entrypoint: |     entrypoint: | ||||||
|     - scorecard-test |     - scorecard-test | ||||||
|     - olm-status-descriptors |     - olm-status-descriptors | ||||||
|     image: quay.io/operator-framework/scorecard-test:v1.23.0 |     image: quay.io/operator-framework/scorecard-test:v1.33.0 | ||||||
|     labels: |     labels: | ||||||
|       suite: olm |       suite: olm | ||||||
|       test: olm-status-descriptors-test |       test: olm-status-descriptors-test | ||||||
|   | |||||||
							
								
								
									
										77
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								go.mod
									
									
									
									
									
								
							| @@ -1,29 +1,31 @@ | |||||||
| module github.com/1Password/onepassword-operator | module github.com/1Password/onepassword-operator | ||||||
|  |  | ||||||
| go 1.20 | go 1.21 | ||||||
|  |  | ||||||
|  | toolchain go1.21.5 | ||||||
|  |  | ||||||
| require ( | require ( | ||||||
| 	github.com/1Password/connect-sdk-go v1.5.1 | 	github.com/1Password/connect-sdk-go v1.5.3 | ||||||
| 	github.com/onsi/ginkgo/v2 v2.9.2 | 	github.com/onsi/ginkgo/v2 v2.13.2 | ||||||
| 	github.com/onsi/gomega v1.27.5 | 	github.com/onsi/gomega v1.30.0 | ||||||
| 	github.com/stretchr/testify v1.8.2 | 	github.com/stretchr/testify v1.8.4 | ||||||
| 	k8s.io/api v0.26.3 | 	k8s.io/api v0.29.0 | ||||||
| 	k8s.io/apimachinery v0.26.3 | 	k8s.io/apimachinery v0.29.0 | ||||||
| 	k8s.io/client-go v0.26.3 | 	k8s.io/client-go v0.29.0 | ||||||
| 	k8s.io/kubectl v0.26.3 | 	k8s.io/kubectl v0.29.0 | ||||||
| 	sigs.k8s.io/controller-runtime v0.14.5 | 	sigs.k8s.io/controller-runtime v0.16.3 | ||||||
| ) | ) | ||||||
|  |  | ||||||
| require ( | require ( | ||||||
| 	github.com/beorn7/perks v1.0.1 // indirect | 	github.com/beorn7/perks v1.0.1 // indirect | ||||||
| 	github.com/cespare/xxhash/v2 v2.2.0 // indirect | 	github.com/cespare/xxhash/v2 v2.2.0 // indirect | ||||||
| 	github.com/davecgh/go-spew v1.1.1 // indirect | 	github.com/davecgh/go-spew v1.1.1 // indirect | ||||||
| 	github.com/emicklei/go-restful/v3 v3.10.2 // indirect | 	github.com/emicklei/go-restful/v3 v3.11.0 // indirect | ||||||
| 	github.com/evanphx/json-patch v5.6.0+incompatible // indirect | 	github.com/evanphx/json-patch v5.6.0+incompatible // indirect | ||||||
| 	github.com/evanphx/json-patch/v5 v5.6.0 // indirect | 	github.com/evanphx/json-patch/v5 v5.6.0 // indirect | ||||||
| 	github.com/fsnotify/fsnotify v1.6.0 // indirect | 	github.com/fsnotify/fsnotify v1.6.0 // indirect | ||||||
| 	github.com/go-logr/logr v1.2.3 // indirect | 	github.com/go-logr/logr v1.3.0 // indirect | ||||||
| 	github.com/go-logr/zapr v1.2.3 // indirect | 	github.com/go-logr/zapr v1.2.4 // indirect | ||||||
| 	github.com/go-openapi/jsonpointer v0.19.6 // indirect | 	github.com/go-openapi/jsonpointer v0.19.6 // indirect | ||||||
| 	github.com/go-openapi/jsonreference v0.20.2 // indirect | 	github.com/go-openapi/jsonreference v0.20.2 // indirect | ||||||
| 	github.com/go-openapi/swag v0.22.3 // indirect | 	github.com/go-openapi/swag v0.22.3 // indirect | ||||||
| @@ -31,12 +33,12 @@ require ( | |||||||
| 	github.com/gogo/protobuf v1.3.2 // indirect | 	github.com/gogo/protobuf v1.3.2 // indirect | ||||||
| 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | ||||||
| 	github.com/golang/protobuf v1.5.3 // indirect | 	github.com/golang/protobuf v1.5.3 // indirect | ||||||
| 	github.com/google/gnostic v0.6.9 // indirect | 	github.com/google/gnostic-models v0.6.8 // indirect | ||||||
| 	github.com/google/go-cmp v0.5.9 // indirect | 	github.com/google/go-cmp v0.6.0 // indirect | ||||||
| 	github.com/google/gofuzz v1.2.0 // indirect | 	github.com/google/gofuzz v1.2.0 // indirect | ||||||
| 	github.com/google/pprof v0.0.0-20230323073829-e72429f035bd // indirect | 	github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect | ||||||
| 	github.com/google/uuid v1.3.0 // indirect | 	github.com/google/uuid v1.3.0 // indirect | ||||||
| 	github.com/imdario/mergo v0.3.15 // indirect | 	github.com/imdario/mergo v0.3.6 // indirect | ||||||
| 	github.com/josharian/intern v1.0.0 // indirect | 	github.com/josharian/intern v1.0.0 // indirect | ||||||
| 	github.com/json-iterator/go v1.1.12 // indirect | 	github.com/json-iterator/go v1.1.12 // indirect | ||||||
| 	github.com/mailru/easyjson v0.7.7 // indirect | 	github.com/mailru/easyjson v0.7.7 // indirect | ||||||
| @@ -47,35 +49,36 @@ require ( | |||||||
| 	github.com/opentracing/opentracing-go v1.2.0 // indirect | 	github.com/opentracing/opentracing-go v1.2.0 // indirect | ||||||
| 	github.com/pkg/errors v0.9.1 // indirect | 	github.com/pkg/errors v0.9.1 // indirect | ||||||
| 	github.com/pmezard/go-difflib v1.0.0 // indirect | 	github.com/pmezard/go-difflib v1.0.0 // indirect | ||||||
| 	github.com/prometheus/client_golang v1.14.0 // indirect | 	github.com/prometheus/client_golang v1.16.0 // indirect | ||||||
| 	github.com/prometheus/client_model v0.3.0 // indirect | 	github.com/prometheus/client_model v0.4.0 // indirect | ||||||
| 	github.com/prometheus/common v0.42.0 // indirect | 	github.com/prometheus/common v0.44.0 // indirect | ||||||
| 	github.com/prometheus/procfs v0.9.0 // indirect | 	github.com/prometheus/procfs v0.10.1 // indirect | ||||||
| 	github.com/spf13/pflag v1.0.5 // indirect | 	github.com/spf13/pflag v1.0.5 // indirect | ||||||
| 	github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect | 	github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect | ||||||
| 	github.com/uber/jaeger-lib v2.4.1+incompatible // indirect | 	github.com/uber/jaeger-lib v2.4.1+incompatible // indirect | ||||||
| 	go.uber.org/atomic v1.10.0 // indirect | 	go.uber.org/atomic v1.10.0 // indirect | ||||||
| 	go.uber.org/multierr v1.10.0 // indirect | 	go.uber.org/multierr v1.11.0 // indirect | ||||||
| 	go.uber.org/zap v1.24.0 // indirect | 	go.uber.org/zap v1.25.0 // indirect | ||||||
| 	golang.org/x/net v0.8.0 // indirect | 	golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect | ||||||
| 	golang.org/x/oauth2 v0.6.0 // indirect | 	golang.org/x/net v0.17.0 // indirect | ||||||
| 	golang.org/x/sys v0.6.0 // indirect | 	golang.org/x/oauth2 v0.10.0 // indirect | ||||||
| 	golang.org/x/term v0.6.0 // indirect | 	golang.org/x/sys v0.14.0 // indirect | ||||||
| 	golang.org/x/text v0.8.0 // indirect | 	golang.org/x/term v0.13.0 // indirect | ||||||
|  | 	golang.org/x/text v0.13.0 // indirect | ||||||
| 	golang.org/x/time v0.3.0 // indirect | 	golang.org/x/time v0.3.0 // indirect | ||||||
| 	golang.org/x/tools v0.7.0 // indirect | 	golang.org/x/tools v0.14.0 // indirect | ||||||
| 	gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect | 	gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect | ||||||
| 	google.golang.org/appengine v1.6.7 // indirect | 	google.golang.org/appengine v1.6.7 // indirect | ||||||
| 	google.golang.org/protobuf v1.30.0 // indirect | 	google.golang.org/protobuf v1.31.0 // indirect | ||||||
| 	gopkg.in/inf.v0 v0.9.1 // indirect | 	gopkg.in/inf.v0 v0.9.1 // indirect | ||||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
| 	k8s.io/apiextensions-apiserver v0.26.3 // indirect | 	k8s.io/apiextensions-apiserver v0.28.3 // indirect | ||||||
| 	k8s.io/component-base v0.26.3 // indirect | 	k8s.io/component-base v0.29.0 // indirect | ||||||
| 	k8s.io/klog/v2 v2.90.1 // indirect | 	k8s.io/klog/v2 v2.110.1 // indirect | ||||||
| 	k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a // indirect | 	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect | ||||||
| 	k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 // indirect | 	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect | ||||||
| 	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect | 	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect | ||||||
| 	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect | 	sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect | ||||||
| 	sigs.k8s.io/yaml v1.3.0 // indirect | 	sigs.k8s.io/yaml v1.3.0 // indirect | ||||||
| ) | ) | ||||||
|   | |||||||
							
								
								
									
										281
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										281
									
								
								go.sum
									
									
									
									
									
								
							| @@ -1,52 +1,34 @@ | |||||||
| cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= | github.com/1Password/connect-sdk-go v1.5.3 h1:KyjJ+kCKj6BwB2Y8tPM1Ixg5uIS6HsB0uWA8U38p/Uk= | ||||||
| cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= | github.com/1Password/connect-sdk-go v1.5.3/go.mod h1:5rSymY4oIYtS4G3t0oMkGAXBeoYiukV3vkqlnEjIDJs= | ||||||
| github.com/1Password/connect-sdk-go v1.5.1 h1:wb9niRg4BOa+lZJjj1TOX6093VJxuOYtzqUnRpwKnvs= |  | ||||||
| github.com/1Password/connect-sdk-go v1.5.1/go.mod h1:lKGz6DFO6qMchEQ+lDx6f9MzORTxC1HkhUdHnJ24fKs= |  | ||||||
| github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= |  | ||||||
| github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= | github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= | ||||||
| github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= | github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= | ||||||
| github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= |  | ||||||
| github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= |  | ||||||
| github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= | github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= | ||||||
|  | github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= | ||||||
|  | github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= | ||||||
| github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= | github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= | ||||||
| github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= | github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= | ||||||
| github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= |  | ||||||
| github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= |  | ||||||
| github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= |  | ||||||
| github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= | github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= | ||||||
| github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= | github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= | ||||||
| github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= | github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= | ||||||
| github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= | github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= | ||||||
| github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= | github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= | ||||||
| github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= |  | ||||||
| github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= | github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= | ||||||
| github.com/davecgh/go-spew v1.1.0/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 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.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||||
| github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= | github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= | ||||||
| github.com/emicklei/go-restful/v3 v3.10.2 h1:hIovbnmBTLjHXkqEBUz3HGpXZdM7ZrE9fJIZIqlJLqE= | github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= | ||||||
| github.com/emicklei/go-restful/v3 v3.10.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= |  | ||||||
| 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.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= |  | ||||||
| github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= |  | ||||||
| github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= |  | ||||||
| github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= |  | ||||||
| github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= | github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= | ||||||
| github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | ||||||
| github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= | github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= | ||||||
| github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= | github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= | ||||||
| github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= |  | ||||||
| github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= | github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= | ||||||
| github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= | github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= | ||||||
| github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | ||||||
| github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= | ||||||
| github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | ||||||
| github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= | github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= | ||||||
| github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= | ||||||
| github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= |  | ||||||
| github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= |  | ||||||
| github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= | 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/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= | ||||||
| github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= | github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= | ||||||
| @@ -57,48 +39,29 @@ github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEe | |||||||
| github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= | github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= | ||||||
| github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= | github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= | ||||||
| github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= | github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= | ||||||
| github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= |  | ||||||
| github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= | github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= | ||||||
| github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | ||||||
| github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= |  | ||||||
| github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | 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.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.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= |  | ||||||
| github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= |  | ||||||
| github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= |  | ||||||
| github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= |  | ||||||
| github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= |  | ||||||
| github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= |  | ||||||
| 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.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 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= | ||||||
| github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | ||||||
| github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= | github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= | ||||||
| github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= | 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.5.0/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.5/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.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/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | ||||||
| github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/pprof v0.0.0-20230323073829-e72429f035bd h1:r8yyd+DJDmsUhGrRBxH5Pj7KeFK5l+Y3FsgT8keqKtk= | github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | ||||||
| github.com/google/pprof v0.0.0-20230323073829-e72429f035bd/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk= | github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||||
| 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 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= | ||||||
| github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||||
| github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= | github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= | ||||||
| github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= | github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= | ||||||
| github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= | github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= | ||||||
| github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= | github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= | ||||||
| github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= | github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= | ||||||
| github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= | github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= | ||||||
| @@ -107,9 +70,9 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm | |||||||
| github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | ||||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||||
| github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | 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 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= |  | ||||||
| github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | ||||||
|  | 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.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | ||||||
| github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | ||||||
| github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= | ||||||
| @@ -125,10 +88,10 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G | |||||||
| github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= | github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= | ||||||
| github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= | ||||||
| github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= | ||||||
| github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU= | github.com/onsi/ginkgo/v2 v2.13.2 h1:Bi2gGVkfn6gQcjNjZJVO8Gf0FHzMPf2phUei9tejVMs= | ||||||
| github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts= | github.com/onsi/ginkgo/v2 v2.13.2/go.mod h1:XStQ8QcGwLyF4HdfcZB8SFOS/MWCgDuXMSBe6zrvLgM= | ||||||
| github.com/onsi/gomega v1.27.5 h1:T/X6I0RNFw/kTqgfkZPcQ5KU6vCnWNBGdtrIx2dpGeQ= | github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= | ||||||
| github.com/onsi/gomega v1.27.5/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= | github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= | ||||||
| github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= | github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= | ||||||
| github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= | github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= | ||||||
| github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||||
| @@ -136,203 +99,151 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | |||||||
| github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||||
| github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | 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.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||||
| github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= | github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= | ||||||
| github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= | github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= | ||||||
| github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= | github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= | ||||||
| github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= | github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= | ||||||
| github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= | github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= | ||||||
| github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= | github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= | ||||||
| github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= | github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= | ||||||
| github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= | github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= | ||||||
| github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= | github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= | ||||||
| github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= | github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= | ||||||
| github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= |  | ||||||
| github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= | github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= | ||||||
| github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= | github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= | ||||||
| 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.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||||||
| github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= | github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= | ||||||
| github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= | github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= | ||||||
| github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= | github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= | ||||||
| github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | ||||||
| github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= |  | ||||||
| github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= |  | ||||||
| github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||||||
| github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | 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.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.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= | ||||||
| github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | ||||||
| github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= | github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= | ||||||
| github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= | ||||||
| github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= | github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= | ||||||
| github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= | github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= | ||||||
| github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= | github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= | ||||||
| github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= | github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= | ||||||
| github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= |  | ||||||
| github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= |  | ||||||
| github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= |  | ||||||
| github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||||
| github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||||
| go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= | github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= | ||||||
| go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= | go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= | ||||||
| go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= | go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= | ||||||
| go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= | go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= | ||||||
| go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= | go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= | ||||||
| go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= | go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= | ||||||
|  | go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= | ||||||
| go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= | go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= | ||||||
| go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= | go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= | ||||||
| go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= | go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= | ||||||
| go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= |  | ||||||
| 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.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= | ||||||
|  | go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= | ||||||
|  | go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= | ||||||
| golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||||||
| golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||||
| golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||||
| golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= | ||||||
| golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= | golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= | ||||||
| golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= |  | ||||||
| golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= |  | ||||||
| golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | ||||||
| golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | golang.org/x/mod v0.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.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||||
| golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||||
| golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= | ||||||
| golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= | ||||||
| golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= |  | ||||||
| golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||||
| golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||||
| golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= | golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= | ||||||
| golang.org/x/net v0.0.0-20190620200207-3b0461eec859/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-20200226121028-0de0cce0169b/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-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-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||||
| golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= | golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= | ||||||
| golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= | ||||||
| golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= | golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= | ||||||
| golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= | golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= | ||||||
| golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= | ||||||
| golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= |  | ||||||
| golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= |  | ||||||
| golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= |  | ||||||
| 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= | golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
| golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
| golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
| golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/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-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
| golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
| golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |  | ||||||
| golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
| golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
| golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= | golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= | ||||||
| golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | golang.org/x/sys v0.14.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.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | ||||||
| golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= | golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= | ||||||
| golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= | golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= | ||||||
| golang.org/x/text v0.3.0/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.2/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.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||||
| golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= | ||||||
| golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= | ||||||
| golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= |  | ||||||
| golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= |  | ||||||
| golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= | golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= | ||||||
| golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
| golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= |  | ||||||
| golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= |  | ||||||
| golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||||
| golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= |  | ||||||
| golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= |  | ||||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||||
| golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||||
| golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||||
| golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= | golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||||
| golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= | golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= | ||||||
|  | golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= | ||||||
| golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | 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-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||||
| golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||||
| golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||||
| gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= | gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= | ||||||
| gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= | gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= | ||||||
| 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.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= | google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= | ||||||
| google.golang.org/appengine v1.6.7/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-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= |  | ||||||
| google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= |  | ||||||
| google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= |  | ||||||
| google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= |  | ||||||
| google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= |  | ||||||
| google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= |  | ||||||
| google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= |  | ||||||
| google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= |  | ||||||
| google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= |  | ||||||
| google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= |  | ||||||
| google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= |  | ||||||
| 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= |  | ||||||
| google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= |  | ||||||
| google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= |  | ||||||
| google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= |  | ||||||
| google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= |  | ||||||
| google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= |  | ||||||
| google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= |  | ||||||
| google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= | google.golang.org/protobuf v1.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.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= | ||||||
| google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= | google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | ||||||
| google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= | google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||||||
| google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= |  | ||||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
| gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
| gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |  | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | 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/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | ||||||
| gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | ||||||
| gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= | gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= | ||||||
| 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.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||||
| gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= | 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.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | ||||||
| gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.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-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= |  | ||||||
| gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||||||
| gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | 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= | k8s.io/api v0.29.0 h1:NiCdQMY1QOp1H8lfRyeEf8eOwV6+0xA6XEE44ohDX2A= | ||||||
| honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | k8s.io/api v0.29.0/go.mod h1:sdVmXoz2Bo/cb77Pxi71IPTSErEW32xa4aXwKH7gfBA= | ||||||
| k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU= | k8s.io/apiextensions-apiserver v0.28.3 h1:Od7DEnhXHnHPZG+W9I97/fSQkVpVPQx2diy+2EtmY08= | ||||||
| k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE= | k8s.io/apiextensions-apiserver v0.28.3/go.mod h1:NE1XJZ4On0hS11aWWJUTNkmVB03j9LM7gJSisbRt8Lc= | ||||||
| k8s.io/apiextensions-apiserver v0.26.3 h1:5PGMm3oEzdB1W/FTMgGIDmm100vn7IaUP5er36dB+YE= | k8s.io/apimachinery v0.29.0 h1:+ACVktwyicPz0oc6MTMLwa2Pw3ouLAfAon1wPLtG48o= | ||||||
| k8s.io/apiextensions-apiserver v0.26.3/go.mod h1:jdA5MdjNWGP+njw1EKMZc64xAT5fIhN6VJrElV3sfpQ= | k8s.io/apimachinery v0.29.0/go.mod h1:eVBxQ/cwiJxH58eK/jd/vAk4mrxmVlnpBH5J2GbMeis= | ||||||
| k8s.io/apimachinery v0.26.3 h1:dQx6PNETJ7nODU3XPtrwkfuubs6w7sX0M8n61zHIV/k= | k8s.io/client-go v0.29.0 h1:KmlDtFcrdUzOYrBhXHgKw5ycWzc3ryPX5mQe0SkG3y8= | ||||||
| k8s.io/apimachinery v0.26.3/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= | k8s.io/client-go v0.29.0/go.mod h1:yLkXH4HKMAywcrD82KMSmfYg2DlE8mepPR4JGSo5n38= | ||||||
| k8s.io/client-go v0.26.3 h1:k1UY+KXfkxV2ScEL3gilKcF7761xkYsSD6BC9szIu8s= | k8s.io/component-base v0.29.0 h1:T7rjd5wvLnPBV1vC4zWd/iWRbV8Mdxs+nGaoaFzGw3s= | ||||||
| k8s.io/client-go v0.26.3/go.mod h1:ZPNu9lm8/dbRIPAgteN30RSXea6vrCpFvq+MateTUuQ= | k8s.io/component-base v0.29.0/go.mod h1:sADonFTQ9Zc9yFLghpDpmNXEdHyQmFIGbiuZbqAXQ1M= | ||||||
| k8s.io/component-base v0.26.3 h1:oC0WMK/ggcbGDTkdcqefI4wIZRYdK3JySx9/HADpV0g= | k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= | ||||||
| k8s.io/component-base v0.26.3/go.mod h1:5kj1kZYwSC6ZstHJN7oHBqcJC6yyn41eR+Sqa/mQc8E= | k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= | ||||||
| k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= | k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= | ||||||
| k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= | k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= | ||||||
| k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a h1:gmovKNur38vgoWfGtP5QOGNOA7ki4n6qNYoFAgMlNvg= | k8s.io/kubectl v0.29.0 h1:Oqi48gXjikDhrBF67AYuZRTcJV4lg2l42GmvsP7FmYI= | ||||||
| k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a/go.mod h1:y5VtZWM9sHHc2ZodIH/6SHzXj+TPU5USoA8lcIeKEKY= | k8s.io/kubectl v0.29.0/go.mod h1:0jMjGWIcMIQzmUaMgAzhSELv5WtHo2a8pq67DtviAJs= | ||||||
| k8s.io/kubectl v0.26.3 h1:bZ5SgFyeEXw6XTc1Qji0iNdtqAC76lmeIIQULg2wNXM= | k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= | ||||||
| k8s.io/kubectl v0.26.3/go.mod h1:02+gv7Qn4dupzN3fi/9OvqqdW+uG/4Zi56vc4Zmsp1g= | k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= | ||||||
| k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 h1:xMMXJlJbsU8w3V5N2FLDQ8YgU8s1EoULdbQBcAeNJkY= | sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= | ||||||
| k8s.io/utils v0.0.0-20230313181309-38a27ef9d749/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= | sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= | ||||||
| sigs.k8s.io/controller-runtime v0.14.5 h1:6xaWFqzT5KuAQ9ufgUaj1G/+C4Y1GRkhrxl+BJ9i+5s= |  | ||||||
| sigs.k8s.io/controller-runtime v0.14.5/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= |  | ||||||
| sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= | 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/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.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | ||||||
| sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | ||||||
| sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| /* | /* | ||||||
| MIT License | MIT License | ||||||
|  |  | ||||||
| Copyright (c) 2020-2022 1Password | Copyright (c) 2020-2024 1Password | ||||||
|  |  | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| /* | /* | ||||||
| MIT License | MIT License | ||||||
| 
 | 
 | ||||||
| Copyright (c) 2020-2022 1Password | Copyright (c) 2020-2024 1Password | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
| @@ -22,7 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||||
| SOFTWARE. | SOFTWARE. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| package controllers | package controller | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| package controllers | package controller | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /* | /* | ||||||
| MIT License | MIT License | ||||||
| 
 | 
 | ||||||
| Copyright (c) 2020-2022 1Password | Copyright (c) 2020-2024 1Password | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
| @@ -22,7 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||||
| SOFTWARE. | SOFTWARE. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| package controllers | package controller | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| @@ -67,6 +67,7 @@ type OnePasswordItemReconciler struct { | |||||||
| //+kubebuilder:rbac:groups=apps,resourceNames=onepassword-connect-operator,resources=deployments/finalizers,verbs=update | //+kubebuilder:rbac:groups=apps,resourceNames=onepassword-connect-operator,resources=deployments/finalizers,verbs=update | ||||||
| //+kubebuilder:rbac:groups=onepassword.com,resources=*,verbs=get;list;watch;create;update;patch;delete | //+kubebuilder:rbac:groups=onepassword.com,resources=*,verbs=get;list;watch;create;update;patch;delete | ||||||
| //+kubebuilder:rbac:groups=monitoring.coreos.com,resources=servicemonitors,verbs=get;create | //+kubebuilder:rbac:groups=monitoring.coreos.com,resources=servicemonitors,verbs=get;create | ||||||
|  | //+kubebuilder:rbac:groups=coordination.k8s.io,resources=leases,verbs=get;list;create;update | ||||||
| 
 | 
 | ||||||
| // Reconcile is part of the main kubernetes reconciliation loop which aims to | // Reconcile is part of the main kubernetes reconciliation loop which aims to | ||||||
| // move the current state of the cluster closer to the desired state. | // move the current state of the cluster closer to the desired state. | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| package controllers | package controller | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /* | /* | ||||||
| MIT License | MIT License | ||||||
| 
 | 
 | ||||||
| Copyright (c) 2020-2022 1Password | Copyright (c) 2020-2024 1Password | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
| @@ -22,7 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||||
| SOFTWARE. | SOFTWARE. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| package controllers | package controller | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| @@ -129,7 +129,7 @@ var _ = BeforeSuite(func() { | |||||||
| 
 | 
 | ||||||
| 	By("bootstrapping test environment") | 	By("bootstrapping test environment") | ||||||
| 	testEnv = &envtest.Environment{ | 	testEnv = &envtest.Environment{ | ||||||
| 		CRDDirectoryPaths:     []string{filepath.Join("..", "config", "crd", "bases")}, | 		CRDDirectoryPaths:     []string{filepath.Join("..", "..", "config", "crd", "bases")}, | ||||||
| 		ErrorIfCRDPathMissing: true, | 		ErrorIfCRDPathMissing: true, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @@ -15,8 +15,8 @@ import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| var logConnectSetup = logf.Log.WithName("ConnectSetup") | var logConnectSetup = logf.Log.WithName("ConnectSetup") | ||||||
| var deploymentPath = "config/connect/deployment.yaml" | var deploymentPath = "../config/connect/deployment.yaml" | ||||||
| var servicePath = "config/connect/service.yaml" | var servicePath = "../config/connect/service.yaml" | ||||||
|  |  | ||||||
| func SetupConnect(kubeClient client.Client, deploymentNamespace string) error { | func SetupConnect(kubeClient client.Client, deploymentNamespace string) error { | ||||||
| 	err := setupService(kubeClient, servicePath, deploymentNamespace) | 	err := setupService(kubeClient, servicePath, deploymentNamespace) | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								vendor/github.com/1Password/connect-sdk-go/connect/client.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/1Password/connect-sdk-go/connect/client.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -246,10 +246,14 @@ func (rs *restClient) GetItem(itemQuery string, vaultQuery string) (*onepassword | |||||||
| 	if itemQuery == "" { | 	if itemQuery == "" { | ||||||
| 		return nil, fmt.Errorf("Please provide either the item name or its ID.") | 		return nil, fmt.Errorf("Please provide either the item name or its ID.") | ||||||
| 	} | 	} | ||||||
| 	if !isValidUUID(itemQuery) { |  | ||||||
| 		return rs.GetItemByTitle(itemQuery, vaultQuery) | 	if isValidUUID(itemQuery) { | ||||||
|  | 		item, err := rs.GetItemByUUID(itemQuery, vaultQuery) | ||||||
|  | 		if item != nil { | ||||||
|  | 			return item, err | ||||||
| 		} | 		} | ||||||
| 	return rs.GetItemByUUID(itemQuery, vaultQuery) | 	} | ||||||
|  | 	return rs.GetItemByTitle(itemQuery, vaultQuery) | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetItemByUUID Get a specific Item from the 1Password Connect API by its UUID | // GetItemByUUID Get a specific Item from the 1Password Connect API by its UUID | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								vendor/github.com/1Password/connect-sdk-go/connect/version.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/1Password/connect-sdk-go/connect/version.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -10,7 +10,7 @@ import ( | |||||||
|  |  | ||||||
| // SDKVersion is the latest Semantic Version of the library | // SDKVersion is the latest Semantic Version of the library | ||||||
| // Do not rename this variable without changing the regex in the Makefile | // Do not rename this variable without changing the regex in the Makefile | ||||||
| const SDKVersion = "1.5.1" | const SDKVersion = "1.5.3" | ||||||
|  |  | ||||||
| const VersionHeaderKey = "1Password-Connect-Version" | const VersionHeaderKey = "1Password-Connect-Version" | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								vendor/github.com/1Password/connect-sdk-go/onepassword/vaults.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/1Password/connect-sdk-go/onepassword/vaults.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -12,7 +12,7 @@ type Vault struct { | |||||||
| 	Description string `json:"description,omitempty"` | 	Description string `json:"description,omitempty"` | ||||||
|  |  | ||||||
| 	AttrVersion    int       `json:"attributeVersion,omitempty"` | 	AttrVersion    int       `json:"attributeVersion,omitempty"` | ||||||
| 	ContentVersoin int       `json:"contentVersion,omitempty"` | 	ContentVersion int       `json:"contentVersion,omitempty"` | ||||||
| 	Items          int       `json:"items,omitempty"` | 	Items          int       `json:"items,omitempty"` | ||||||
| 	Type           VaultType `json:"type,omitempty"` | 	Type           VaultType `json:"type,omitempty"` | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								vendor/github.com/emicklei/go-restful/v3/CHANGES.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/emicklei/go-restful/v3/CHANGES.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,11 +1,15 @@ | |||||||
| # Change history of go-restful | # Change history of go-restful | ||||||
|  |  | ||||||
| ## [v3.10.2] - 2023-03-09 | ## [v3.11.0] - 2023-08-19 | ||||||
|  |  | ||||||
|  | - restored behavior as <= v3.9.0 with option to change path strategy using TrimRightSlashEnabled.  | ||||||
|  |  | ||||||
|  | ## [v3.10.2] - 2023-03-09 - DO NOT USE | ||||||
|  |  | ||||||
| - introduced MergePathStrategy to be able to revert behaviour of path concatenation to 3.9.0 | - introduced MergePathStrategy to be able to revert behaviour of path concatenation to 3.9.0 | ||||||
|   see comment in Readme how to customize this behaviour. |   see comment in Readme how to customize this behaviour. | ||||||
|  |  | ||||||
| ## [v3.10.1] - 2022-11-19 | ## [v3.10.1] - 2022-11-19 - DO NOT USE | ||||||
|  |  | ||||||
| - fix broken 3.10.0 by using path package for joining paths | - fix broken 3.10.0 by using path package for joining paths | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								vendor/github.com/emicklei/go-restful/v3/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/emicklei/go-restful/v3/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -79,7 +79,7 @@ func (u UserResource) findUser(request *restful.Request, response *restful.Respo | |||||||
| - Content encoding (gzip,deflate) of request and response payloads | - Content encoding (gzip,deflate) of request and response payloads | ||||||
| - Automatic responses on OPTIONS (using a filter) | - Automatic responses on OPTIONS (using a filter) | ||||||
| - Automatic CORS request handling (using a filter) | - Automatic CORS request handling (using a filter) | ||||||
| - API declaration for Swagger UI ([go-restful-openapi](https://github.com/emicklei/go-restful-openapi), see [go-restful-swagger12](https://github.com/emicklei/go-restful-swagger12)) | - API declaration for Swagger UI ([go-restful-openapi](https://github.com/emicklei/go-restful-openapi)) | ||||||
| - Panic recovery to produce HTTP 500, customizable using RecoverHandler(...) | - Panic recovery to produce HTTP 500, customizable using RecoverHandler(...) | ||||||
| - Route errors produce HTTP 404/405/406/415 errors, customizable using ServiceErrorHandler(...) | - Route errors produce HTTP 404/405/406/415 errors, customizable using ServiceErrorHandler(...) | ||||||
| - Configurable (trace) logging | - Configurable (trace) logging | ||||||
| @@ -96,10 +96,7 @@ There are several hooks to customize the behavior of the go-restful package. | |||||||
| - Compression | - Compression | ||||||
| - Encoders for other serializers | - Encoders for other serializers | ||||||
| - Use [jsoniter](https://github.com/json-iterator/go) by building this package using a build tag, e.g. `go build -tags=jsoniter .`  | - Use [jsoniter](https://github.com/json-iterator/go) by building this package using a build tag, e.g. `go build -tags=jsoniter .`  | ||||||
| - Use the variable `MergePathStrategy` to change the behaviour of composing the Route path given a root path and a local route path	 | - Use the package variable `TrimRightSlashEnabled` (default true) to control the behavior of matching routes that end with a slash `/`  | ||||||
| 	- versions >= 3.10.1 has set the value to `PathJoinStrategy` that fixes a reported [security issue](https://github.com/advisories/GHSA-r48q-9g5r-8q2h) but may cause your services not to work correctly anymore. |  | ||||||
| 	- versions <= 3.9 had the behaviour that can be restored in newer versions by setting the value to `TrimSlashStrategy`. |  | ||||||
| 	- you can set value to a custom implementation (must implement MergePathStrategyFunc) |  | ||||||
|  |  | ||||||
| ## Resources | ## Resources | ||||||
|  |  | ||||||
| @@ -112,4 +109,4 @@ There are several hooks to customize the behavior of the go-restful package. | |||||||
|  |  | ||||||
| Type ```git shortlog -s``` for a full list of contributors. | Type ```git shortlog -s``` for a full list of contributors. | ||||||
|  |  | ||||||
| © 2012 - 2022, http://ernestmicklei.com. MIT License. Contributions are welcome. | © 2012 - 2023, http://ernestmicklei.com. MIT License. Contributions are welcome. | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								vendor/github.com/emicklei/go-restful/v3/route.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/github.com/emicklei/go-restful/v3/route.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -41,6 +41,7 @@ type Route struct { | |||||||
| 	ResponseErrors          map[int]ResponseError | 	ResponseErrors          map[int]ResponseError | ||||||
| 	DefaultResponse         *ResponseError | 	DefaultResponse         *ResponseError | ||||||
| 	ReadSample, WriteSample interface{}   // structs that model an example request or response payload | 	ReadSample, WriteSample interface{}   // structs that model an example request or response payload | ||||||
|  | 	WriteSamples            []interface{} // if more than one return types is possible (oneof) then this will contain multiple values | ||||||
|  |  | ||||||
| 	// Extra information used to store custom information about the route. | 	// Extra information used to store custom information about the route. | ||||||
| 	Metadata map[string]interface{} | 	Metadata map[string]interface{} | ||||||
| @@ -164,7 +165,13 @@ func tokenizePath(path string) []string { | |||||||
| 	if "/" == path { | 	if "/" == path { | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
|  | 	if TrimRightSlashEnabled { | ||||||
|  | 		// 3.9.0 | ||||||
|  | 		return strings.Split(strings.Trim(path, "/"), "/") | ||||||
|  | 	} else { | ||||||
|  | 		// 3.10.2 | ||||||
| 		return strings.Split(strings.TrimLeft(path, "/"), "/") | 		return strings.Split(strings.TrimLeft(path, "/"), "/") | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| // for debugging | // for debugging | ||||||
| @@ -177,4 +184,8 @@ func (r *Route) EnableContentEncoding(enabled bool) { | |||||||
| 	r.contentEncodingEnabled = &enabled | 	r.contentEncodingEnabled = &enabled | ||||||
| } | } | ||||||
|  |  | ||||||
| var TrimRightSlashEnabled = false | // TrimRightSlashEnabled controls whether | ||||||
|  | // - path on route building is using path.Join | ||||||
|  | // - the path of the incoming request is trimmed of its slash suffux. | ||||||
|  | // Value of true matches the behavior of <= 3.9.0 | ||||||
|  | var TrimRightSlashEnabled = true | ||||||
|   | |||||||
							
								
								
									
										41
									
								
								vendor/github.com/emicklei/go-restful/v3/route_builder.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								vendor/github.com/emicklei/go-restful/v3/route_builder.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -34,7 +34,8 @@ type RouteBuilder struct { | |||||||
| 	doc                    string | 	doc                    string | ||||||
| 	notes                  string | 	notes                  string | ||||||
| 	operation              string | 	operation              string | ||||||
| 	readSample, writeSample interface{} | 	readSample             interface{} | ||||||
|  | 	writeSamples           []interface{} | ||||||
| 	parameters             []*Parameter | 	parameters             []*Parameter | ||||||
| 	errorMap               map[int]ResponseError | 	errorMap               map[int]ResponseError | ||||||
| 	defaultResponse        *ResponseError | 	defaultResponse        *ResponseError | ||||||
| @@ -135,9 +136,9 @@ func (b RouteBuilder) ParameterNamed(name string) (p *Parameter) { | |||||||
| 	return p | 	return p | ||||||
| } | } | ||||||
|  |  | ||||||
| // Writes tells what resource type will be written as the response payload. Optional. | // Writes tells which one of the resource types will be written as the response payload. Optional. | ||||||
| func (b *RouteBuilder) Writes(sample interface{}) *RouteBuilder { | func (b *RouteBuilder) Writes(samples ...interface{}) *RouteBuilder { | ||||||
| 	b.writeSample = sample | 	b.writeSamples = samples // oneof | ||||||
| 	return b | 	return b | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -342,39 +343,29 @@ func (b *RouteBuilder) Build() Route { | |||||||
| 		ResponseErrors:                   b.errorMap, | 		ResponseErrors:                   b.errorMap, | ||||||
| 		DefaultResponse:                  b.defaultResponse, | 		DefaultResponse:                  b.defaultResponse, | ||||||
| 		ReadSample:                       b.readSample, | 		ReadSample:                       b.readSample, | ||||||
| 		WriteSample:                      b.writeSample, | 		WriteSamples:                     b.writeSamples, | ||||||
| 		Metadata:                         b.metadata, | 		Metadata:                         b.metadata, | ||||||
| 		Deprecated:                       b.deprecated, | 		Deprecated:                       b.deprecated, | ||||||
| 		contentEncodingEnabled:           b.contentEncodingEnabled, | 		contentEncodingEnabled:           b.contentEncodingEnabled, | ||||||
| 		allowedMethodsWithoutContentType: b.allowedMethodsWithoutContentType, | 		allowedMethodsWithoutContentType: b.allowedMethodsWithoutContentType, | ||||||
| 	} | 	} | ||||||
|  | 	// set WriteSample if one specified | ||||||
|  | 	if len(b.writeSamples) == 1 { | ||||||
|  | 		route.WriteSample = b.writeSamples[0] | ||||||
|  | 	} | ||||||
| 	route.Extensions = b.extensions | 	route.Extensions = b.extensions | ||||||
| 	route.postBuild() | 	route.postBuild() | ||||||
| 	return route | 	return route | ||||||
| } | } | ||||||
|  |  | ||||||
| type MergePathStrategyFunc func(rootPath, routePath string) string |  | ||||||
|  |  | ||||||
| var ( |  | ||||||
| 	// behavior >= 3.10 |  | ||||||
| 	PathJoinStrategy = func(rootPath, routePath string) string { |  | ||||||
| 		return path.Join(rootPath, routePath) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// behavior <= 3.9 |  | ||||||
| 	TrimSlashStrategy = func(rootPath, routePath string) string { |  | ||||||
| 		return strings.TrimRight(rootPath, "/") + "/" + strings.TrimLeft(routePath, "/") |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// MergePathStrategy is the active strategy for merging a Route path when building the routing of all WebServices. |  | ||||||
| 	// The value is set to PathJoinStrategy |  | ||||||
| 	// PathJoinStrategy is a strategy that is more strict [Security - PRISMA-2022-0227] |  | ||||||
| 	MergePathStrategy = PathJoinStrategy |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // merge two paths using the current (package global) merge path strategy. | // merge two paths using the current (package global) merge path strategy. | ||||||
| func concatPath(rootPath, routePath string) string { | func concatPath(rootPath, routePath string) string { | ||||||
| 	return MergePathStrategy(rootPath, routePath) |  | ||||||
|  | 	if TrimRightSlashEnabled { | ||||||
|  | 		return strings.TrimRight(rootPath, "/") + "/" + strings.TrimLeft(routePath, "/") | ||||||
|  | 	} else { | ||||||
|  | 		return path.Join(rootPath, routePath) | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| var anonymousFuncCount int32 | var anonymousFuncCount int32 | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								vendor/github.com/go-logr/logr/.golangci.yaml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/go-logr/logr/.golangci.yaml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -6,7 +6,6 @@ linters: | |||||||
|   disable-all: true |   disable-all: true | ||||||
|   enable: |   enable: | ||||||
|     - asciicheck |     - asciicheck | ||||||
|     - deadcode |  | ||||||
|     - errcheck |     - errcheck | ||||||
|     - forcetypeassert |     - forcetypeassert | ||||||
|     - gocritic |     - gocritic | ||||||
| @@ -18,10 +17,8 @@ linters: | |||||||
|     - misspell |     - misspell | ||||||
|     - revive |     - revive | ||||||
|     - staticcheck |     - staticcheck | ||||||
|     - structcheck |  | ||||||
|     - typecheck |     - typecheck | ||||||
|     - unused |     - unused | ||||||
|     - varcheck |  | ||||||
|  |  | ||||||
| issues: | issues: | ||||||
|   exclude-use-default: false |   exclude-use-default: false | ||||||
|   | |||||||
							
								
								
									
										113
									
								
								vendor/github.com/go-logr/logr/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										113
									
								
								vendor/github.com/go-logr/logr/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,6 +1,7 @@ | |||||||
| # A minimal logging API for Go | # A minimal logging API for Go | ||||||
|  |  | ||||||
| [](https://pkg.go.dev/github.com/go-logr/logr) | [](https://pkg.go.dev/github.com/go-logr/logr) | ||||||
|  | [](https://securityscorecards.dev/viewer/?platform=github.com&org=go-logr&repo=logr) | ||||||
|  |  | ||||||
| logr offers an(other) opinion on how Go programs and libraries can do logging | logr offers an(other) opinion on how Go programs and libraries can do logging | ||||||
| without becoming coupled to a particular logging implementation.  This is not | without becoming coupled to a particular logging implementation.  This is not | ||||||
| @@ -73,6 +74,29 @@ received: | |||||||
| If the Go standard library had defined an interface for logging, this project | If the Go standard library had defined an interface for logging, this project | ||||||
| probably would not be needed.  Alas, here we are. | probably would not be needed.  Alas, here we are. | ||||||
|  |  | ||||||
|  | When the Go developers started developing such an interface with | ||||||
|  | [slog](https://github.com/golang/go/issues/56345), they adopted some of the | ||||||
|  | logr design but also left out some parts and changed others: | ||||||
|  |  | ||||||
|  | | Feature | logr | slog | | ||||||
|  | |---------|------|------| | ||||||
|  | | High-level API | `Logger` (passed by value) | `Logger` (passed by [pointer](https://github.com/golang/go/issues/59126)) | | ||||||
|  | | Low-level API | `LogSink` | `Handler` | | ||||||
|  | | Stack unwinding | done by `LogSink` | done by `Logger` | | ||||||
|  | | Skipping helper functions | `WithCallDepth`, `WithCallStackHelper` | [not supported by Logger](https://github.com/golang/go/issues/59145) | | ||||||
|  | | Generating a value for logging on demand | `Marshaler` | `LogValuer` | | ||||||
|  | | Log levels | >= 0, higher meaning "less important" | positive and negative, with 0 for "info" and higher meaning "more important" | | ||||||
|  | | Error log entries | always logged, don't have a verbosity level | normal log entries with level >= `LevelError` | | ||||||
|  | | Passing logger via context | `NewContext`, `FromContext` | no API | | ||||||
|  | | Adding a name to a logger | `WithName` | no API | | ||||||
|  | | Modify verbosity of log entries in a call chain | `V` | no API | | ||||||
|  | | Grouping of key/value pairs | not supported | `WithGroup`, `GroupValue` | | ||||||
|  |  | ||||||
|  | The high-level slog API is explicitly meant to be one of many different APIs | ||||||
|  | that can be layered on top of a shared `slog.Handler`. logr is one such | ||||||
|  | alternative API, with [interoperability](#slog-interoperability) provided by the [`slogr`](slogr) | ||||||
|  | package. | ||||||
|  |  | ||||||
| ### Inspiration | ### Inspiration | ||||||
|  |  | ||||||
| Before you consider this package, please read [this blog post by the | Before you consider this package, please read [this blog post by the | ||||||
| @@ -118,6 +142,91 @@ There are implementations for the following logging libraries: | |||||||
| - **github.com/go-kit/log**: [gokitlogr](https://github.com/tonglil/gokitlogr) (also compatible with github.com/go-kit/kit/log since v0.12.0) | - **github.com/go-kit/log**: [gokitlogr](https://github.com/tonglil/gokitlogr) (also compatible with github.com/go-kit/kit/log since v0.12.0) | ||||||
| - **bytes.Buffer** (writing to a buffer): [bufrlogr](https://github.com/tonglil/buflogr) (useful for ensuring values were logged, like during testing) | - **bytes.Buffer** (writing to a buffer): [bufrlogr](https://github.com/tonglil/buflogr) (useful for ensuring values were logged, like during testing) | ||||||
|  |  | ||||||
|  | ## slog interoperability | ||||||
|  |  | ||||||
|  | Interoperability goes both ways, using the `logr.Logger` API with a `slog.Handler` | ||||||
|  | and using the `slog.Logger` API with a `logr.LogSink`. [slogr](./slogr) provides `NewLogr` and | ||||||
|  | `NewSlogHandler` API calls to convert between a `logr.Logger` and a `slog.Handler`. | ||||||
|  | As usual, `slog.New` can be used to wrap such a `slog.Handler` in the high-level | ||||||
|  | slog API. `slogr` itself leaves that to the caller. | ||||||
|  |  | ||||||
|  | ## Using a `logr.Sink` as backend for slog | ||||||
|  |  | ||||||
|  | Ideally, a logr sink implementation should support both logr and slog by | ||||||
|  | implementing both the normal logr interface(s) and `slogr.SlogSink`.  Because | ||||||
|  | of a conflict in the parameters of the common `Enabled` method, it is [not | ||||||
|  | possible to implement both slog.Handler and logr.Sink in the same | ||||||
|  | type](https://github.com/golang/go/issues/59110). | ||||||
|  |  | ||||||
|  | If both are supported, log calls can go from the high-level APIs to the backend | ||||||
|  | without the need to convert parameters. `NewLogr` and `NewSlogHandler` can | ||||||
|  | convert back and forth without adding additional wrappers, with one exception: | ||||||
|  | when `Logger.V` was used to adjust the verbosity for a `slog.Handler`, then | ||||||
|  | `NewSlogHandler` has to use a wrapper which adjusts the verbosity for future | ||||||
|  | log calls. | ||||||
|  |  | ||||||
|  | Such an implementation should also support values that implement specific | ||||||
|  | interfaces from both packages for logging (`logr.Marshaler`, `slog.LogValuer`, | ||||||
|  | `slog.GroupValue`). logr does not convert those. | ||||||
|  |  | ||||||
|  | Not supporting slog has several drawbacks: | ||||||
|  | - Recording source code locations works correctly if the handler gets called | ||||||
|  |   through `slog.Logger`, but may be wrong in other cases. That's because a | ||||||
|  |   `logr.Sink` does its own stack unwinding instead of using the program counter | ||||||
|  |   provided by the high-level API. | ||||||
|  | - slog levels <= 0 can be mapped to logr levels by negating the level without a | ||||||
|  |   loss of information. But all slog levels > 0 (e.g. `slog.LevelWarning` as | ||||||
|  |   used by `slog.Logger.Warn`) must be mapped to 0 before calling the sink | ||||||
|  |   because logr does not support "more important than info" levels. | ||||||
|  | - The slog group concept is supported by prefixing each key in a key/value | ||||||
|  |   pair with the group names, separated by a dot. For structured output like | ||||||
|  |   JSON it would be better to group the key/value pairs inside an object. | ||||||
|  | - Special slog values and interfaces don't work as expected. | ||||||
|  | - The overhead is likely to be higher. | ||||||
|  |  | ||||||
|  | These drawbacks are severe enough that applications using a mixture of slog and | ||||||
|  | logr should switch to a different backend. | ||||||
|  |  | ||||||
|  | ## Using a `slog.Handler` as backend for logr | ||||||
|  |  | ||||||
|  | Using a plain `slog.Handler` without support for logr works better than the | ||||||
|  | other direction: | ||||||
|  | - All logr verbosity levels can be mapped 1:1 to their corresponding slog level | ||||||
|  |   by negating them. | ||||||
|  | - Stack unwinding is done by the `slogr.SlogSink` and the resulting program | ||||||
|  |   counter is passed to the `slog.Handler`. | ||||||
|  | - Names added via `Logger.WithName` are gathered and recorded in an additional | ||||||
|  |   attribute with `logger` as key and the names separated by slash as value. | ||||||
|  | - `Logger.Error` is turned into a log record with `slog.LevelError` as level | ||||||
|  |   and an additional attribute with `err` as key, if an error was provided. | ||||||
|  |  | ||||||
|  | The main drawback is that `logr.Marshaler` will not be supported. Types should | ||||||
|  | ideally support both `logr.Marshaler` and `slog.Valuer`. If compatibility | ||||||
|  | with logr implementations without slog support is not important, then | ||||||
|  | `slog.Valuer` is sufficient. | ||||||
|  |  | ||||||
|  | ## Context support for slog | ||||||
|  |  | ||||||
|  | Storing a logger in a `context.Context` is not supported by | ||||||
|  | slog. `logr.NewContext` and `logr.FromContext` can be used with slog like this | ||||||
|  | to fill this gap: | ||||||
|  |  | ||||||
|  |     func HandlerFromContext(ctx context.Context) slog.Handler { | ||||||
|  |         logger, err := logr.FromContext(ctx) | ||||||
|  |         if err == nil { | ||||||
|  |             return slogr.NewSlogHandler(logger) | ||||||
|  |         } | ||||||
|  |         return slog.Default().Handler() | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     func ContextWithHandler(ctx context.Context, handler slog.Handler) context.Context { | ||||||
|  |         return logr.NewContext(ctx, slogr.NewLogr(handler)) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | The downside is that storing and retrieving a `slog.Handler` needs more | ||||||
|  | allocations compared to using a `logr.Logger`. Therefore the recommendation is | ||||||
|  | to use the `logr.Logger` API in code which uses contextual logging. | ||||||
|  |  | ||||||
| ## FAQ | ## FAQ | ||||||
|  |  | ||||||
| ### Conceptual | ### Conceptual | ||||||
| @@ -241,7 +350,9 @@ Otherwise, you can start out with `0` as "you always want to see this", | |||||||
|  |  | ||||||
| Then gradually choose levels in between as you need them, working your way | Then gradually choose levels in between as you need them, working your way | ||||||
| down from 10 (for debug and trace style logs) and up from 1 (for chattier | down from 10 (for debug and trace style logs) and up from 1 (for chattier | ||||||
| info-type logs.) | info-type logs). For reference, slog pre-defines -4 for debug logs | ||||||
|  | (corresponds to 4 in logr), which matches what is | ||||||
|  | [recommended for Kubernetes](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md#what-method-to-use). | ||||||
|  |  | ||||||
| #### How do I choose my keys? | #### How do I choose my keys? | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										18
									
								
								vendor/github.com/go-logr/logr/SECURITY.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/go-logr/logr/SECURITY.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | # Security Policy | ||||||
|  |  | ||||||
|  | If you have discovered a security vulnerability in this project, please report it | ||||||
|  | privately. **Do not disclose it as a public issue.** This gives us time to work with you | ||||||
|  | to fix the issue before public exposure, reducing the chance that the exploit will be | ||||||
|  | used before a patch is released. | ||||||
|  |  | ||||||
|  | You may submit the report in the following ways: | ||||||
|  |  | ||||||
|  | - send an email to go-logr-security@googlegroups.com | ||||||
|  | - send us a [private vulnerability report](https://github.com/go-logr/logr/security/advisories/new) | ||||||
|  |  | ||||||
|  | Please provide the following information in your report: | ||||||
|  |  | ||||||
|  | - A description of the vulnerability and its impact | ||||||
|  | - How to reproduce the issue | ||||||
|  |  | ||||||
|  | We ask that you give us 90 days to work on a fix before public exposure. | ||||||
							
								
								
									
										32
									
								
								vendor/github.com/go-logr/logr/discard.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								vendor/github.com/go-logr/logr/discard.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -20,35 +20,5 @@ package logr | |||||||
| // used whenever the caller is not interested in the logs.  Logger instances | // used whenever the caller is not interested in the logs.  Logger instances | ||||||
| // produced by this function always compare as equal. | // produced by this function always compare as equal. | ||||||
| func Discard() Logger { | func Discard() Logger { | ||||||
| 	return Logger{ | 	return New(nil) | ||||||
| 		level: 0, |  | ||||||
| 		sink:  discardLogSink{}, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // discardLogSink is a LogSink that discards all messages. |  | ||||||
| type discardLogSink struct{} |  | ||||||
|  |  | ||||||
| // Verify that it actually implements the interface |  | ||||||
| var _ LogSink = discardLogSink{} |  | ||||||
|  |  | ||||||
| func (l discardLogSink) Init(RuntimeInfo) { |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (l discardLogSink) Enabled(int) bool { |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (l discardLogSink) Info(int, string, ...interface{}) { |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (l discardLogSink) Error(error, string, ...interface{}) { |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (l discardLogSink) WithValues(...interface{}) LogSink { |  | ||||||
| 	return l |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (l discardLogSink) WithName(string) LogSink { |  | ||||||
| 	return l |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										73
									
								
								vendor/github.com/go-logr/logr/funcr/funcr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										73
									
								
								vendor/github.com/go-logr/logr/funcr/funcr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -21,13 +21,13 @@ limitations under the License. | |||||||
| // github.com/go-logr/logr.LogSink with output through an arbitrary | // github.com/go-logr/logr.LogSink with output through an arbitrary | ||||||
| // "write" function.  See New and NewJSON for details. | // "write" function.  See New and NewJSON for details. | ||||||
| // | // | ||||||
| // Custom LogSinks | // # Custom LogSinks | ||||||
| // | // | ||||||
| // For users who need more control, a funcr.Formatter can be embedded inside | // For users who need more control, a funcr.Formatter can be embedded inside | ||||||
| // your own custom LogSink implementation. This is useful when the LogSink | // your own custom LogSink implementation. This is useful when the LogSink | ||||||
| // needs to implement additional methods, for example. | // needs to implement additional methods, for example. | ||||||
| // | // | ||||||
| // Formatting | // # Formatting | ||||||
| // | // | ||||||
| // This will respect logr.Marshaler, fmt.Stringer, and error interfaces for | // This will respect logr.Marshaler, fmt.Stringer, and error interfaces for | ||||||
| // values which are being logged.  When rendering a struct, funcr will use Go's | // values which are being logged.  When rendering a struct, funcr will use Go's | ||||||
| @@ -37,6 +37,7 @@ package funcr | |||||||
| import ( | import ( | ||||||
| 	"bytes" | 	"bytes" | ||||||
| 	"encoding" | 	"encoding" | ||||||
|  | 	"encoding/json" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
| 	"reflect" | 	"reflect" | ||||||
| @@ -115,17 +116,17 @@ type Options struct { | |||||||
| 	// Equivalent hooks are offered for key-value pairs saved via | 	// Equivalent hooks are offered for key-value pairs saved via | ||||||
| 	// logr.Logger.WithValues or Formatter.AddValues (see RenderValuesHook) and | 	// logr.Logger.WithValues or Formatter.AddValues (see RenderValuesHook) and | ||||||
| 	// for user-provided pairs (see RenderArgsHook). | 	// for user-provided pairs (see RenderArgsHook). | ||||||
| 	RenderBuiltinsHook func(kvList []interface{}) []interface{} | 	RenderBuiltinsHook func(kvList []any) []any | ||||||
|  |  | ||||||
| 	// RenderValuesHook is the same as RenderBuiltinsHook, except that it is | 	// RenderValuesHook is the same as RenderBuiltinsHook, except that it is | ||||||
| 	// only called for key-value pairs saved via logr.Logger.WithValues.  See | 	// only called for key-value pairs saved via logr.Logger.WithValues.  See | ||||||
| 	// RenderBuiltinsHook for more details. | 	// RenderBuiltinsHook for more details. | ||||||
| 	RenderValuesHook func(kvList []interface{}) []interface{} | 	RenderValuesHook func(kvList []any) []any | ||||||
|  |  | ||||||
| 	// RenderArgsHook is the same as RenderBuiltinsHook, except that it is only | 	// RenderArgsHook is the same as RenderBuiltinsHook, except that it is only | ||||||
| 	// called for key-value pairs passed directly to Info and Error.  See | 	// called for key-value pairs passed directly to Info and Error.  See | ||||||
| 	// RenderBuiltinsHook for more details. | 	// RenderBuiltinsHook for more details. | ||||||
| 	RenderArgsHook func(kvList []interface{}) []interface{} | 	RenderArgsHook func(kvList []any) []any | ||||||
|  |  | ||||||
| 	// MaxLogDepth tells funcr how many levels of nested fields (e.g. a struct | 	// MaxLogDepth tells funcr how many levels of nested fields (e.g. a struct | ||||||
| 	// that contains a struct, etc.) it may log.  Every time it finds a struct, | 	// that contains a struct, etc.) it may log.  Every time it finds a struct, | ||||||
| @@ -162,7 +163,7 @@ func (l fnlogger) WithName(name string) logr.LogSink { | |||||||
| 	return &l | 	return &l | ||||||
| } | } | ||||||
|  |  | ||||||
| func (l fnlogger) WithValues(kvList ...interface{}) logr.LogSink { | func (l fnlogger) WithValues(kvList ...any) logr.LogSink { | ||||||
| 	l.Formatter.AddValues(kvList) | 	l.Formatter.AddValues(kvList) | ||||||
| 	return &l | 	return &l | ||||||
| } | } | ||||||
| @@ -172,12 +173,12 @@ func (l fnlogger) WithCallDepth(depth int) logr.LogSink { | |||||||
| 	return &l | 	return &l | ||||||
| } | } | ||||||
|  |  | ||||||
| func (l fnlogger) Info(level int, msg string, kvList ...interface{}) { | func (l fnlogger) Info(level int, msg string, kvList ...any) { | ||||||
| 	prefix, args := l.FormatInfo(level, msg, kvList) | 	prefix, args := l.FormatInfo(level, msg, kvList) | ||||||
| 	l.write(prefix, args) | 	l.write(prefix, args) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (l fnlogger) Error(err error, msg string, kvList ...interface{}) { | func (l fnlogger) Error(err error, msg string, kvList ...any) { | ||||||
| 	prefix, args := l.FormatError(err, msg, kvList) | 	prefix, args := l.FormatError(err, msg, kvList) | ||||||
| 	l.write(prefix, args) | 	l.write(prefix, args) | ||||||
| } | } | ||||||
| @@ -217,7 +218,7 @@ func newFormatter(opts Options, outfmt outputFormat) Formatter { | |||||||
| 		prefix:       "", | 		prefix:       "", | ||||||
| 		values:       nil, | 		values:       nil, | ||||||
| 		depth:        0, | 		depth:        0, | ||||||
| 		opts:         opts, | 		opts:         &opts, | ||||||
| 	} | 	} | ||||||
| 	return f | 	return f | ||||||
| } | } | ||||||
| @@ -228,10 +229,10 @@ func newFormatter(opts Options, outfmt outputFormat) Formatter { | |||||||
| type Formatter struct { | type Formatter struct { | ||||||
| 	outputFormat outputFormat | 	outputFormat outputFormat | ||||||
| 	prefix       string | 	prefix       string | ||||||
| 	values       []interface{} | 	values       []any | ||||||
| 	valuesStr    string | 	valuesStr    string | ||||||
| 	depth        int | 	depth        int | ||||||
| 	opts         Options | 	opts         *Options | ||||||
| } | } | ||||||
|  |  | ||||||
| // outputFormat indicates which outputFormat to use. | // outputFormat indicates which outputFormat to use. | ||||||
| @@ -245,10 +246,10 @@ const ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| // PseudoStruct is a list of key-value pairs that gets logged as a struct. | // PseudoStruct is a list of key-value pairs that gets logged as a struct. | ||||||
| type PseudoStruct []interface{} | type PseudoStruct []any | ||||||
|  |  | ||||||
| // render produces a log line, ready to use. | // render produces a log line, ready to use. | ||||||
| func (f Formatter) render(builtins, args []interface{}) string { | func (f Formatter) render(builtins, args []any) string { | ||||||
| 	// Empirically bytes.Buffer is faster than strings.Builder for this. | 	// Empirically bytes.Buffer is faster than strings.Builder for this. | ||||||
| 	buf := bytes.NewBuffer(make([]byte, 0, 1024)) | 	buf := bytes.NewBuffer(make([]byte, 0, 1024)) | ||||||
| 	if f.outputFormat == outputJSON { | 	if f.outputFormat == outputJSON { | ||||||
| @@ -291,7 +292,7 @@ func (f Formatter) render(builtins, args []interface{}) string { | |||||||
| // This function returns a potentially modified version of kvList, which | // This function returns a potentially modified version of kvList, which | ||||||
| // ensures that there is a value for every key (adding a value if needed) and | // ensures that there is a value for every key (adding a value if needed) and | ||||||
| // that each key is a string (substituting a key if needed). | // that each key is a string (substituting a key if needed). | ||||||
| func (f Formatter) flatten(buf *bytes.Buffer, kvList []interface{}, continuing bool, escapeKeys bool) []interface{} { | func (f Formatter) flatten(buf *bytes.Buffer, kvList []any, continuing bool, escapeKeys bool) []any { | ||||||
| 	// This logic overlaps with sanitize() but saves one type-cast per key, | 	// This logic overlaps with sanitize() but saves one type-cast per key, | ||||||
| 	// which can be measurable. | 	// which can be measurable. | ||||||
| 	if len(kvList)%2 != 0 { | 	if len(kvList)%2 != 0 { | ||||||
| @@ -333,7 +334,7 @@ func (f Formatter) flatten(buf *bytes.Buffer, kvList []interface{}, continuing b | |||||||
| 	return kvList | 	return kvList | ||||||
| } | } | ||||||
|  |  | ||||||
| func (f Formatter) pretty(value interface{}) string { | func (f Formatter) pretty(value any) string { | ||||||
| 	return f.prettyWithFlags(value, 0, 0) | 	return f.prettyWithFlags(value, 0, 0) | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -342,7 +343,7 @@ const ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| // TODO: This is not fast. Most of the overhead goes here. | // TODO: This is not fast. Most of the overhead goes here. | ||||||
| func (f Formatter) prettyWithFlags(value interface{}, flags uint32, depth int) string { | func (f Formatter) prettyWithFlags(value any, flags uint32, depth int) string { | ||||||
| 	if depth > f.opts.MaxLogDepth { | 	if depth > f.opts.MaxLogDepth { | ||||||
| 		return `"<max-log-depth-exceeded>"` | 		return `"<max-log-depth-exceeded>"` | ||||||
| 	} | 	} | ||||||
| @@ -447,6 +448,7 @@ func (f Formatter) prettyWithFlags(value interface{}, flags uint32, depth int) s | |||||||
| 		if flags&flagRawStruct == 0 { | 		if flags&flagRawStruct == 0 { | ||||||
| 			buf.WriteByte('{') | 			buf.WriteByte('{') | ||||||
| 		} | 		} | ||||||
|  | 		printComma := false // testing i>0 is not enough because of JSON omitted fields | ||||||
| 		for i := 0; i < t.NumField(); i++ { | 		for i := 0; i < t.NumField(); i++ { | ||||||
| 			fld := t.Field(i) | 			fld := t.Field(i) | ||||||
| 			if fld.PkgPath != "" { | 			if fld.PkgPath != "" { | ||||||
| @@ -478,9 +480,10 @@ func (f Formatter) prettyWithFlags(value interface{}, flags uint32, depth int) s | |||||||
| 			if omitempty && isEmpty(v.Field(i)) { | 			if omitempty && isEmpty(v.Field(i)) { | ||||||
| 				continue | 				continue | ||||||
| 			} | 			} | ||||||
| 			if i > 0 { | 			if printComma { | ||||||
| 				buf.WriteByte(',') | 				buf.WriteByte(',') | ||||||
| 			} | 			} | ||||||
|  | 			printComma = true // if we got here, we are rendering a field | ||||||
| 			if fld.Anonymous && fld.Type.Kind() == reflect.Struct && name == "" { | 			if fld.Anonymous && fld.Type.Kind() == reflect.Struct && name == "" { | ||||||
| 				buf.WriteString(f.prettyWithFlags(v.Field(i).Interface(), flags|flagRawStruct, depth+1)) | 				buf.WriteString(f.prettyWithFlags(v.Field(i).Interface(), flags|flagRawStruct, depth+1)) | ||||||
| 				continue | 				continue | ||||||
| @@ -500,6 +503,20 @@ func (f Formatter) prettyWithFlags(value interface{}, flags uint32, depth int) s | |||||||
| 		} | 		} | ||||||
| 		return buf.String() | 		return buf.String() | ||||||
| 	case reflect.Slice, reflect.Array: | 	case reflect.Slice, reflect.Array: | ||||||
|  | 		// If this is outputing as JSON make sure this isn't really a json.RawMessage. | ||||||
|  | 		// If so just emit "as-is" and don't pretty it as that will just print | ||||||
|  | 		// it as [X,Y,Z,...] which isn't terribly useful vs the string form you really want. | ||||||
|  | 		if f.outputFormat == outputJSON { | ||||||
|  | 			if rm, ok := value.(json.RawMessage); ok { | ||||||
|  | 				// If it's empty make sure we emit an empty value as the array style would below. | ||||||
|  | 				if len(rm) > 0 { | ||||||
|  | 					buf.Write(rm) | ||||||
|  | 				} else { | ||||||
|  | 					buf.WriteString("null") | ||||||
|  | 				} | ||||||
|  | 				return buf.String() | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
| 		buf.WriteByte('[') | 		buf.WriteByte('[') | ||||||
| 		for i := 0; i < v.Len(); i++ { | 		for i := 0; i < v.Len(); i++ { | ||||||
| 			if i > 0 { | 			if i > 0 { | ||||||
| @@ -597,7 +614,7 @@ func isEmpty(v reflect.Value) bool { | |||||||
| 	return false | 	return false | ||||||
| } | } | ||||||
|  |  | ||||||
| func invokeMarshaler(m logr.Marshaler) (ret interface{}) { | func invokeMarshaler(m logr.Marshaler) (ret any) { | ||||||
| 	defer func() { | 	defer func() { | ||||||
| 		if r := recover(); r != nil { | 		if r := recover(); r != nil { | ||||||
| 			ret = fmt.Sprintf("<panic: %s>", r) | 			ret = fmt.Sprintf("<panic: %s>", r) | ||||||
| @@ -658,12 +675,12 @@ func (f Formatter) caller() Caller { | |||||||
|  |  | ||||||
| const noValue = "<no-value>" | const noValue = "<no-value>" | ||||||
|  |  | ||||||
| func (f Formatter) nonStringKey(v interface{}) string { | func (f Formatter) nonStringKey(v any) string { | ||||||
| 	return fmt.Sprintf("<non-string-key: %s>", f.snippet(v)) | 	return fmt.Sprintf("<non-string-key: %s>", f.snippet(v)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // snippet produces a short snippet string of an arbitrary value. | // snippet produces a short snippet string of an arbitrary value. | ||||||
| func (f Formatter) snippet(v interface{}) string { | func (f Formatter) snippet(v any) string { | ||||||
| 	const snipLen = 16 | 	const snipLen = 16 | ||||||
|  |  | ||||||
| 	snip := f.pretty(v) | 	snip := f.pretty(v) | ||||||
| @@ -676,7 +693,7 @@ func (f Formatter) snippet(v interface{}) string { | |||||||
| // sanitize ensures that a list of key-value pairs has a value for every key | // sanitize ensures that a list of key-value pairs has a value for every key | ||||||
| // (adding a value if needed) and that each key is a string (substituting a key | // (adding a value if needed) and that each key is a string (substituting a key | ||||||
| // if needed). | // if needed). | ||||||
| func (f Formatter) sanitize(kvList []interface{}) []interface{} { | func (f Formatter) sanitize(kvList []any) []any { | ||||||
| 	if len(kvList)%2 != 0 { | 	if len(kvList)%2 != 0 { | ||||||
| 		kvList = append(kvList, noValue) | 		kvList = append(kvList, noValue) | ||||||
| 	} | 	} | ||||||
| @@ -710,8 +727,8 @@ func (f Formatter) GetDepth() int { | |||||||
| // FormatInfo renders an Info log message into strings.  The prefix will be | // FormatInfo renders an Info log message into strings.  The prefix will be | ||||||
| // empty when no names were set (via AddNames), or when the output is | // empty when no names were set (via AddNames), or when the output is | ||||||
| // configured for JSON. | // configured for JSON. | ||||||
| func (f Formatter) FormatInfo(level int, msg string, kvList []interface{}) (prefix, argsStr string) { | func (f Formatter) FormatInfo(level int, msg string, kvList []any) (prefix, argsStr string) { | ||||||
| 	args := make([]interface{}, 0, 64) // using a constant here impacts perf | 	args := make([]any, 0, 64) // using a constant here impacts perf | ||||||
| 	prefix = f.prefix | 	prefix = f.prefix | ||||||
| 	if f.outputFormat == outputJSON { | 	if f.outputFormat == outputJSON { | ||||||
| 		args = append(args, "logger", prefix) | 		args = append(args, "logger", prefix) | ||||||
| @@ -730,8 +747,8 @@ func (f Formatter) FormatInfo(level int, msg string, kvList []interface{}) (pref | |||||||
| // FormatError renders an Error log message into strings.  The prefix will be | // FormatError renders an Error log message into strings.  The prefix will be | ||||||
| // empty when no names were set (via AddNames), or when the output is | // empty when no names were set (via AddNames), or when the output is | ||||||
| // configured for JSON. | // configured for JSON. | ||||||
| func (f Formatter) FormatError(err error, msg string, kvList []interface{}) (prefix, argsStr string) { | func (f Formatter) FormatError(err error, msg string, kvList []any) (prefix, argsStr string) { | ||||||
| 	args := make([]interface{}, 0, 64) // using a constant here impacts perf | 	args := make([]any, 0, 64) // using a constant here impacts perf | ||||||
| 	prefix = f.prefix | 	prefix = f.prefix | ||||||
| 	if f.outputFormat == outputJSON { | 	if f.outputFormat == outputJSON { | ||||||
| 		args = append(args, "logger", prefix) | 		args = append(args, "logger", prefix) | ||||||
| @@ -744,12 +761,12 @@ func (f Formatter) FormatError(err error, msg string, kvList []interface{}) (pre | |||||||
| 		args = append(args, "caller", f.caller()) | 		args = append(args, "caller", f.caller()) | ||||||
| 	} | 	} | ||||||
| 	args = append(args, "msg", msg) | 	args = append(args, "msg", msg) | ||||||
| 	var loggableErr interface{} | 	var loggableErr any | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		loggableErr = err.Error() | 		loggableErr = err.Error() | ||||||
| 	} | 	} | ||||||
| 	args = append(args, "error", loggableErr) | 	args = append(args, "error", loggableErr) | ||||||
| 	return f.prefix, f.render(args, kvList) | 	return prefix, f.render(args, kvList) | ||||||
| } | } | ||||||
|  |  | ||||||
| // AddName appends the specified name.  funcr uses '/' characters to separate | // AddName appends the specified name.  funcr uses '/' characters to separate | ||||||
| @@ -764,7 +781,7 @@ func (f *Formatter) AddName(name string) { | |||||||
|  |  | ||||||
| // AddValues adds key-value pairs to the set of saved values to be logged with | // AddValues adds key-value pairs to the set of saved values to be logged with | ||||||
| // each log line. | // each log line. | ||||||
| func (f *Formatter) AddValues(kvList []interface{}) { | func (f *Formatter) AddValues(kvList []any) { | ||||||
| 	// Three slice args forces a copy. | 	// Three slice args forces a copy. | ||||||
| 	n := len(f.values) | 	n := len(f.values) | ||||||
| 	f.values = append(f.values[:n:n], kvList...) | 	f.values = append(f.values[:n:n], kvList...) | ||||||
|   | |||||||
							
								
								
									
										125
									
								
								vendor/github.com/go-logr/logr/logr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										125
									
								
								vendor/github.com/go-logr/logr/logr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -21,7 +21,7 @@ limitations under the License. | |||||||
| // to back that API.  Packages in the Go ecosystem can depend on this package, | // to back that API.  Packages in the Go ecosystem can depend on this package, | ||||||
| // while callers can implement logging with whatever backend is appropriate. | // while callers can implement logging with whatever backend is appropriate. | ||||||
| // | // | ||||||
| // Usage | // # Usage | ||||||
| // | // | ||||||
| // Logging is done using a Logger instance.  Logger is a concrete type with | // Logging is done using a Logger instance.  Logger is a concrete type with | ||||||
| // methods, which defers the actual logging to a LogSink interface.  The main | // methods, which defers the actual logging to a LogSink interface.  The main | ||||||
| @@ -30,15 +30,19 @@ limitations under the License. | |||||||
| // "structured logging". | // "structured logging". | ||||||
| // | // | ||||||
| // With Go's standard log package, we might write: | // With Go's standard log package, we might write: | ||||||
|  | // | ||||||
| //	log.Printf("setting target value %s", targetValue) | //	log.Printf("setting target value %s", targetValue) | ||||||
| // | // | ||||||
| // With logr's structured logging, we'd write: | // With logr's structured logging, we'd write: | ||||||
|  | // | ||||||
| //	logger.Info("setting target", "value", targetValue) | //	logger.Info("setting target", "value", targetValue) | ||||||
| // | // | ||||||
| // Errors are much the same.  Instead of: | // Errors are much the same.  Instead of: | ||||||
|  | // | ||||||
| //	log.Printf("failed to open the pod bay door for user %s: %v", user, err) | //	log.Printf("failed to open the pod bay door for user %s: %v", user, err) | ||||||
| // | // | ||||||
| // We'd write: | // We'd write: | ||||||
|  | // | ||||||
| //	logger.Error(err, "failed to open the pod bay door", "user", user) | //	logger.Error(err, "failed to open the pod bay door", "user", user) | ||||||
| // | // | ||||||
| // Info() and Error() are very similar, but they are separate methods so that | // Info() and Error() are very similar, but they are separate methods so that | ||||||
| @@ -47,7 +51,7 @@ limitations under the License. | |||||||
| // always logged, regardless of the current verbosity.  If there is no error | // always logged, regardless of the current verbosity.  If there is no error | ||||||
| // instance available, passing nil is valid. | // instance available, passing nil is valid. | ||||||
| // | // | ||||||
| // Verbosity | // # Verbosity | ||||||
| // | // | ||||||
| // Often we want to log information only when the application in "verbose | // Often we want to log information only when the application in "verbose | ||||||
| // mode".  To write log lines that are more verbose, Logger has a V() method. | // mode".  To write log lines that are more verbose, Logger has a V() method. | ||||||
| @@ -58,14 +62,16 @@ limitations under the License. | |||||||
| // Error messages do not have a verbosity level and are always logged. | // Error messages do not have a verbosity level and are always logged. | ||||||
| // | // | ||||||
| // Where we might have written: | // Where we might have written: | ||||||
|  | // | ||||||
| //	if flVerbose >= 2 { | //	if flVerbose >= 2 { | ||||||
| //	    log.Printf("an unusual thing happened") | //	    log.Printf("an unusual thing happened") | ||||||
| //	} | //	} | ||||||
| // | // | ||||||
| // We can write: | // We can write: | ||||||
|  | // | ||||||
| //	logger.V(2).Info("an unusual thing happened") | //	logger.V(2).Info("an unusual thing happened") | ||||||
| // | // | ||||||
| // Logger Names | // # Logger Names | ||||||
| // | // | ||||||
| // Logger instances can have name strings so that all messages logged through | // Logger instances can have name strings so that all messages logged through | ||||||
| // that instance have additional context.  For example, you might want to add | // that instance have additional context.  For example, you might want to add | ||||||
| @@ -82,17 +88,19 @@ limitations under the License. | |||||||
| // joining operation (e.g. whitespace, commas, periods, slashes, brackets, | // joining operation (e.g. whitespace, commas, periods, slashes, brackets, | ||||||
| // quotes, etc). | // quotes, etc). | ||||||
| // | // | ||||||
| // Saved Values | // # Saved Values | ||||||
| // | // | ||||||
| // Logger instances can store any number of key/value pairs, which will be | // Logger instances can store any number of key/value pairs, which will be | ||||||
| // logged alongside all messages logged through that instance.  For example, | // logged alongside all messages logged through that instance.  For example, | ||||||
| // you might want to create a Logger instance per managed object: | // you might want to create a Logger instance per managed object: | ||||||
| // | // | ||||||
| // With the standard log package, we might write: | // With the standard log package, we might write: | ||||||
|  | // | ||||||
| //	log.Printf("decided to set field foo to value %q for object %s/%s", | //	log.Printf("decided to set field foo to value %q for object %s/%s", | ||||||
| //	    targetValue, object.Namespace, object.Name) | //	    targetValue, object.Namespace, object.Name) | ||||||
| // | // | ||||||
| // With logr we'd write: | // With logr we'd write: | ||||||
|  | // | ||||||
| //	// Elsewhere: set up the logger to log the object name. | //	// Elsewhere: set up the logger to log the object name. | ||||||
| //	obj.logger = mainLogger.WithValues( | //	obj.logger = mainLogger.WithValues( | ||||||
| //	    "name", obj.name, "namespace", obj.namespace) | //	    "name", obj.name, "namespace", obj.namespace) | ||||||
| @@ -100,7 +108,7 @@ limitations under the License. | |||||||
| //	// later on... | //	// later on... | ||||||
| //	obj.logger.Info("setting foo", "value", targetValue) | //	obj.logger.Info("setting foo", "value", targetValue) | ||||||
| // | // | ||||||
| // Best Practices | // # Best Practices | ||||||
| // | // | ||||||
| // Logger has very few hard rules, with the goal that LogSink implementations | // Logger has very few hard rules, with the goal that LogSink implementations | ||||||
| // might have a lot of freedom to differentiate.  There are, however, some | // might have a lot of freedom to differentiate.  There are, however, some | ||||||
| @@ -119,20 +127,20 @@ limitations under the License. | |||||||
| // such a value can call its methods without having to check whether the | // such a value can call its methods without having to check whether the | ||||||
| // instance is ready for use. | // instance is ready for use. | ||||||
| // | // | ||||||
| // Calling methods with the null logger (Logger{}) as instance will crash | // The zero logger (= Logger{}) is identical to Discard() and discards all log | ||||||
| // because it has no LogSink. Therefore this null logger should never be passed | // entries. Code that receives a Logger by value can simply call it, the methods | ||||||
| // around. For cases where passing a logger is optional, a pointer to Logger | // will never crash. For cases where passing a logger is optional, a pointer to Logger | ||||||
| // should be used. | // should be used. | ||||||
| // | // | ||||||
| // Key Naming Conventions | // # Key Naming Conventions | ||||||
| // | // | ||||||
| // Keys are not strictly required to conform to any specification or regex, but | // Keys are not strictly required to conform to any specification or regex, but | ||||||
| // it is recommended that they: | // it is recommended that they: | ||||||
| //   * be human-readable and meaningful (not auto-generated or simple ordinals) | //   - be human-readable and meaningful (not auto-generated or simple ordinals) | ||||||
| //   * be constant (not dependent on input data) | //   - be constant (not dependent on input data) | ||||||
| //   * contain only printable characters | //   - contain only printable characters | ||||||
| //   * not contain whitespace or punctuation | //   - not contain whitespace or punctuation | ||||||
| //   * use lower case for simple keys and lowerCamelCase for more complex ones | //   - use lower case for simple keys and lowerCamelCase for more complex ones | ||||||
| // | // | ||||||
| // These guidelines help ensure that log data is processed properly regardless | // These guidelines help ensure that log data is processed properly regardless | ||||||
| // of the log implementation.  For example, log implementations will try to | // of the log implementation.  For example, log implementations will try to | ||||||
| @@ -141,24 +149,25 @@ limitations under the License. | |||||||
| // While users are generally free to use key names of their choice, it's | // While users are generally free to use key names of their choice, it's | ||||||
| // generally best to avoid using the following keys, as they're frequently used | // generally best to avoid using the following keys, as they're frequently used | ||||||
| // by implementations: | // by implementations: | ||||||
| //   * "caller": the calling information (file/line) of a particular log line | //   - "caller": the calling information (file/line) of a particular log line | ||||||
| //   * "error": the underlying error value in the `Error` method | //   - "error": the underlying error value in the `Error` method | ||||||
| //   * "level": the log level | //   - "level": the log level | ||||||
| //   * "logger": the name of the associated logger | //   - "logger": the name of the associated logger | ||||||
| //   * "msg": the log message | //   - "msg": the log message | ||||||
| //   * "stacktrace": the stack trace associated with a particular log line or | //   - "stacktrace": the stack trace associated with a particular log line or | ||||||
| //     error (often from the `Error` message) | //     error (often from the `Error` message) | ||||||
| //   * "ts": the timestamp for a log line | //   - "ts": the timestamp for a log line | ||||||
| // | // | ||||||
| // Implementations are encouraged to make use of these keys to represent the | // Implementations are encouraged to make use of these keys to represent the | ||||||
| // above concepts, when necessary (for example, in a pure-JSON output form, it | // above concepts, when necessary (for example, in a pure-JSON output form, it | ||||||
| // would be necessary to represent at least message and timestamp as ordinary | // would be necessary to represent at least message and timestamp as ordinary | ||||||
| // named values). | // named values). | ||||||
| // | // | ||||||
| // Break Glass | // # Break Glass | ||||||
| // | // | ||||||
| // Implementations may choose to give callers access to the underlying | // Implementations may choose to give callers access to the underlying | ||||||
| // logging implementation.  The recommended pattern for this is: | // logging implementation.  The recommended pattern for this is: | ||||||
|  | // | ||||||
| //	// Underlier exposes access to the underlying logging implementation. | //	// Underlier exposes access to the underlying logging implementation. | ||||||
| //	// Since callers only have a logr.Logger, they have to know which | //	// Since callers only have a logr.Logger, they have to know which | ||||||
| //	// implementation is in use, so this interface is less of an abstraction | //	// implementation is in use, so this interface is less of an abstraction | ||||||
| @@ -168,8 +177,9 @@ limitations under the License. | |||||||
| //	} | //	} | ||||||
| // | // | ||||||
| // Logger grants access to the sink to enable type assertions like this: | // Logger grants access to the sink to enable type assertions like this: | ||||||
|  | // | ||||||
| //	func DoSomethingWithImpl(log logr.Logger) { | //	func DoSomethingWithImpl(log logr.Logger) { | ||||||
| //       if underlier, ok := log.GetSink()(impl.Underlier) { | //	    if underlier, ok := log.GetSink().(impl.Underlier); ok { | ||||||
| //	       implLogger := underlier.GetUnderlying() | //	       implLogger := underlier.GetUnderlying() | ||||||
| //	       ... | //	       ... | ||||||
| //	    } | //	    } | ||||||
| @@ -177,11 +187,12 @@ limitations under the License. | |||||||
| // | // | ||||||
| // Custom `With*` functions can be implemented by copying the complete | // Custom `With*` functions can be implemented by copying the complete | ||||||
| // Logger struct and replacing the sink in the copy: | // Logger struct and replacing the sink in the copy: | ||||||
|  | // | ||||||
| //	// WithFooBar changes the foobar parameter in the log sink and returns a | //	// WithFooBar changes the foobar parameter in the log sink and returns a | ||||||
| //	// new logger with that modified sink.  It does nothing for loggers where | //	// new logger with that modified sink.  It does nothing for loggers where | ||||||
| //	// the sink doesn't support that parameter. | //	// the sink doesn't support that parameter. | ||||||
| //	func WithFoobar(log logr.Logger, foobar int) logr.Logger { | //	func WithFoobar(log logr.Logger, foobar int) logr.Logger { | ||||||
| //      if foobarLogSink, ok := log.GetSink()(FoobarSink); ok { | //	   if foobarLogSink, ok := log.GetSink().(FoobarSink); ok { | ||||||
| //	      log = log.WithSink(foobarLogSink.WithFooBar(foobar)) | //	      log = log.WithSink(foobarLogSink.WithFooBar(foobar)) | ||||||
| //	   } | //	   } | ||||||
| //	   return log | //	   return log | ||||||
| @@ -201,11 +212,14 @@ import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| // New returns a new Logger instance.  This is primarily used by libraries | // New returns a new Logger instance.  This is primarily used by libraries | ||||||
| // implementing LogSink, rather than end users. | // implementing LogSink, rather than end users.  Passing a nil sink will create | ||||||
|  | // a Logger which discards all log lines. | ||||||
| func New(sink LogSink) Logger { | func New(sink LogSink) Logger { | ||||||
| 	logger := Logger{} | 	logger := Logger{} | ||||||
| 	logger.setSink(sink) | 	logger.setSink(sink) | ||||||
|  | 	if sink != nil { | ||||||
| 		sink.Init(runtimeInfo) | 		sink.Init(runtimeInfo) | ||||||
|  | 	} | ||||||
| 	return logger | 	return logger | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -244,7 +258,13 @@ type Logger struct { | |||||||
| // Enabled tests whether this Logger is enabled.  For example, commandline | // Enabled tests whether this Logger is enabled.  For example, commandline | ||||||
| // flags might be used to set the logging verbosity and disable some info logs. | // flags might be used to set the logging verbosity and disable some info logs. | ||||||
| func (l Logger) Enabled() bool { | func (l Logger) Enabled() bool { | ||||||
| 	return l.sink.Enabled(l.level) | 	// Some implementations of LogSink look at the caller in Enabled (e.g. | ||||||
|  | 	// different verbosity levels per package or file), but we only pass one | ||||||
|  | 	// CallDepth in (via Init).  This means that all calls from Logger to the | ||||||
|  | 	// LogSink's Enabled, Info, and Error methods must have the same number of | ||||||
|  | 	// frames.  In other words, Logger methods can't call other Logger methods | ||||||
|  | 	// which call these LogSink methods unless we do it the same in all paths. | ||||||
|  | 	return l.sink != nil && l.sink.Enabled(l.level) | ||||||
| } | } | ||||||
|  |  | ||||||
| // Info logs a non-error message with the given key/value pairs as context. | // Info logs a non-error message with the given key/value pairs as context. | ||||||
| @@ -253,8 +273,11 @@ func (l Logger) Enabled() bool { | |||||||
| // line.  The key/value pairs can then be used to add additional variable | // line.  The key/value pairs can then be used to add additional variable | ||||||
| // information.  The key/value pairs must alternate string keys and arbitrary | // information.  The key/value pairs must alternate string keys and arbitrary | ||||||
| // values. | // values. | ||||||
| func (l Logger) Info(msg string, keysAndValues ...interface{}) { | func (l Logger) Info(msg string, keysAndValues ...any) { | ||||||
| 	if l.Enabled() { | 	if l.sink == nil { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	if l.sink.Enabled(l.level) { // see comment in Enabled | ||||||
| 		if withHelper, ok := l.sink.(CallStackHelperLogSink); ok { | 		if withHelper, ok := l.sink.(CallStackHelperLogSink); ok { | ||||||
| 			withHelper.GetCallStackHelper()() | 			withHelper.GetCallStackHelper()() | ||||||
| 		} | 		} | ||||||
| @@ -272,7 +295,10 @@ func (l Logger) Info(msg string, keysAndValues ...interface{}) { | |||||||
| // while the err argument should be used to attach the actual error that | // while the err argument should be used to attach the actual error that | ||||||
| // triggered this log line, if present. The err parameter is optional | // triggered this log line, if present. The err parameter is optional | ||||||
| // and nil may be passed instead of an error instance. | // and nil may be passed instead of an error instance. | ||||||
| func (l Logger) Error(err error, msg string, keysAndValues ...interface{}) { | func (l Logger) Error(err error, msg string, keysAndValues ...any) { | ||||||
|  | 	if l.sink == nil { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
| 	if withHelper, ok := l.sink.(CallStackHelperLogSink); ok { | 	if withHelper, ok := l.sink.(CallStackHelperLogSink); ok { | ||||||
| 		withHelper.GetCallStackHelper()() | 		withHelper.GetCallStackHelper()() | ||||||
| 	} | 	} | ||||||
| @@ -284,6 +310,9 @@ func (l Logger) Error(err error, msg string, keysAndValues ...interface{}) { | |||||||
| // level means a log message is less important.  Negative V-levels are treated | // level means a log message is less important.  Negative V-levels are treated | ||||||
| // as 0. | // as 0. | ||||||
| func (l Logger) V(level int) Logger { | func (l Logger) V(level int) Logger { | ||||||
|  | 	if l.sink == nil { | ||||||
|  | 		return l | ||||||
|  | 	} | ||||||
| 	if level < 0 { | 	if level < 0 { | ||||||
| 		level = 0 | 		level = 0 | ||||||
| 	} | 	} | ||||||
| @@ -291,9 +320,19 @@ func (l Logger) V(level int) Logger { | |||||||
| 	return l | 	return l | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // GetV returns the verbosity level of the logger. If the logger's LogSink is | ||||||
|  | // nil as in the Discard logger, this will always return 0. | ||||||
|  | func (l Logger) GetV() int { | ||||||
|  | 	// 0 if l.sink nil because of the if check in V above. | ||||||
|  | 	return l.level | ||||||
|  | } | ||||||
|  |  | ||||||
| // WithValues returns a new Logger instance with additional key/value pairs. | // WithValues returns a new Logger instance with additional key/value pairs. | ||||||
| // See Info for documentation on how key/value pairs work. | // See Info for documentation on how key/value pairs work. | ||||||
| func (l Logger) WithValues(keysAndValues ...interface{}) Logger { | func (l Logger) WithValues(keysAndValues ...any) Logger { | ||||||
|  | 	if l.sink == nil { | ||||||
|  | 		return l | ||||||
|  | 	} | ||||||
| 	l.setSink(l.sink.WithValues(keysAndValues...)) | 	l.setSink(l.sink.WithValues(keysAndValues...)) | ||||||
| 	return l | 	return l | ||||||
| } | } | ||||||
| @@ -304,6 +343,9 @@ func (l Logger) WithValues(keysAndValues ...interface{}) Logger { | |||||||
| // contain only letters, digits, and hyphens (see the package documentation for | // contain only letters, digits, and hyphens (see the package documentation for | ||||||
| // more information). | // more information). | ||||||
| func (l Logger) WithName(name string) Logger { | func (l Logger) WithName(name string) Logger { | ||||||
|  | 	if l.sink == nil { | ||||||
|  | 		return l | ||||||
|  | 	} | ||||||
| 	l.setSink(l.sink.WithName(name)) | 	l.setSink(l.sink.WithName(name)) | ||||||
| 	return l | 	return l | ||||||
| } | } | ||||||
| @@ -324,6 +366,9 @@ func (l Logger) WithName(name string) Logger { | |||||||
| // WithCallDepth(1) because it works with implementions that support the | // WithCallDepth(1) because it works with implementions that support the | ||||||
| // CallDepthLogSink and/or CallStackHelperLogSink interfaces. | // CallDepthLogSink and/or CallStackHelperLogSink interfaces. | ||||||
| func (l Logger) WithCallDepth(depth int) Logger { | func (l Logger) WithCallDepth(depth int) Logger { | ||||||
|  | 	if l.sink == nil { | ||||||
|  | 		return l | ||||||
|  | 	} | ||||||
| 	if withCallDepth, ok := l.sink.(CallDepthLogSink); ok { | 	if withCallDepth, ok := l.sink.(CallDepthLogSink); ok { | ||||||
| 		l.setSink(withCallDepth.WithCallDepth(depth)) | 		l.setSink(withCallDepth.WithCallDepth(depth)) | ||||||
| 	} | 	} | ||||||
| @@ -345,6 +390,9 @@ func (l Logger) WithCallDepth(depth int) Logger { | |||||||
| // implementation does not support either of these, the original Logger will be | // implementation does not support either of these, the original Logger will be | ||||||
| // returned. | // returned. | ||||||
| func (l Logger) WithCallStackHelper() (func(), Logger) { | func (l Logger) WithCallStackHelper() (func(), Logger) { | ||||||
|  | 	if l.sink == nil { | ||||||
|  | 		return func() {}, l | ||||||
|  | 	} | ||||||
| 	var helper func() | 	var helper func() | ||||||
| 	if withCallDepth, ok := l.sink.(CallDepthLogSink); ok { | 	if withCallDepth, ok := l.sink.(CallDepthLogSink); ok { | ||||||
| 		l.setSink(withCallDepth.WithCallDepth(1)) | 		l.setSink(withCallDepth.WithCallDepth(1)) | ||||||
| @@ -357,6 +405,11 @@ func (l Logger) WithCallStackHelper() (func(), Logger) { | |||||||
| 	return helper, l | 	return helper, l | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // IsZero returns true if this logger is an uninitialized zero value | ||||||
|  | func (l Logger) IsZero() bool { | ||||||
|  | 	return l.sink == nil | ||||||
|  | } | ||||||
|  |  | ||||||
| // contextKey is how we find Loggers in a context.Context. | // contextKey is how we find Loggers in a context.Context. | ||||||
| type contextKey struct{} | type contextKey struct{} | ||||||
|  |  | ||||||
| @@ -427,22 +480,22 @@ type LogSink interface { | |||||||
| 	// The level argument is provided for optional logging.  This method will | 	// The level argument is provided for optional logging.  This method will | ||||||
| 	// only be called when Enabled(level) is true. See Logger.Info for more | 	// only be called when Enabled(level) is true. See Logger.Info for more | ||||||
| 	// details. | 	// details. | ||||||
| 	Info(level int, msg string, keysAndValues ...interface{}) | 	Info(level int, msg string, keysAndValues ...any) | ||||||
|  |  | ||||||
| 	// Error logs an error, with the given message and key/value pairs as | 	// Error logs an error, with the given message and key/value pairs as | ||||||
| 	// context.  See Logger.Error for more details. | 	// context.  See Logger.Error for more details. | ||||||
| 	Error(err error, msg string, keysAndValues ...interface{}) | 	Error(err error, msg string, keysAndValues ...any) | ||||||
|  |  | ||||||
| 	// WithValues returns a new LogSink with additional key/value pairs.  See | 	// WithValues returns a new LogSink with additional key/value pairs.  See | ||||||
| 	// Logger.WithValues for more details. | 	// Logger.WithValues for more details. | ||||||
| 	WithValues(keysAndValues ...interface{}) LogSink | 	WithValues(keysAndValues ...any) LogSink | ||||||
|  |  | ||||||
| 	// WithName returns a new LogSink with the specified name appended.  See | 	// WithName returns a new LogSink with the specified name appended.  See | ||||||
| 	// Logger.WithName for more details. | 	// Logger.WithName for more details. | ||||||
| 	WithName(name string) LogSink | 	WithName(name string) LogSink | ||||||
| } | } | ||||||
|  |  | ||||||
| // CallDepthLogSink represents a Logger that knows how to climb the call stack | // CallDepthLogSink represents a LogSink that knows how to climb the call stack | ||||||
| // to identify the original call site and can offset the depth by a specified | // to identify the original call site and can offset the depth by a specified | ||||||
| // number of frames.  This is useful for users who have helper functions | // number of frames.  This is useful for users who have helper functions | ||||||
| // between the "real" call site and the actual calls to Logger methods. | // between the "real" call site and the actual calls to Logger methods. | ||||||
| @@ -467,7 +520,7 @@ type CallDepthLogSink interface { | |||||||
| 	WithCallDepth(depth int) LogSink | 	WithCallDepth(depth int) LogSink | ||||||
| } | } | ||||||
|  |  | ||||||
| // CallStackHelperLogSink represents a Logger that knows how to climb | // CallStackHelperLogSink represents a LogSink that knows how to climb | ||||||
| // the call stack to identify the original call site and can skip | // the call stack to identify the original call site and can skip | ||||||
| // intermediate helper functions if they mark themselves as | // intermediate helper functions if they mark themselves as | ||||||
| // helper. Go's testing package uses that approach. | // helper. Go's testing package uses that approach. | ||||||
| @@ -506,5 +559,5 @@ type Marshaler interface { | |||||||
| 	//     with exported fields | 	//     with exported fields | ||||||
| 	// | 	// | ||||||
| 	// It may return any value of any type. | 	// It may return any value of any type. | ||||||
| 	MarshalLog() interface{} | 	MarshalLog() any | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										168
									
								
								vendor/github.com/go-logr/logr/slogr/sloghandler.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								vendor/github.com/go-logr/logr/slogr/sloghandler.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,168 @@ | |||||||
|  | //go:build go1.21 | ||||||
|  | // +build go1.21 | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | Copyright 2023 The logr 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package slogr | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"log/slog" | ||||||
|  |  | ||||||
|  | 	"github.com/go-logr/logr" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type slogHandler struct { | ||||||
|  | 	// May be nil, in which case all logs get discarded. | ||||||
|  | 	sink logr.LogSink | ||||||
|  | 	// Non-nil if sink is non-nil and implements SlogSink. | ||||||
|  | 	slogSink SlogSink | ||||||
|  |  | ||||||
|  | 	// groupPrefix collects values from WithGroup calls. It gets added as | ||||||
|  | 	// prefix to value keys when handling a log record. | ||||||
|  | 	groupPrefix string | ||||||
|  |  | ||||||
|  | 	// levelBias can be set when constructing the handler to influence the | ||||||
|  | 	// slog.Level of log records. A positive levelBias reduces the | ||||||
|  | 	// slog.Level value. slog has no API to influence this value after the | ||||||
|  | 	// handler got created, so it can only be set indirectly through | ||||||
|  | 	// Logger.V. | ||||||
|  | 	levelBias slog.Level | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var _ slog.Handler = &slogHandler{} | ||||||
|  |  | ||||||
|  | // groupSeparator is used to concatenate WithGroup names and attribute keys. | ||||||
|  | const groupSeparator = "." | ||||||
|  |  | ||||||
|  | // GetLevel is used for black box unit testing. | ||||||
|  | func (l *slogHandler) GetLevel() slog.Level { | ||||||
|  | 	return l.levelBias | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l *slogHandler) Enabled(ctx context.Context, level slog.Level) bool { | ||||||
|  | 	return l.sink != nil && (level >= slog.LevelError || l.sink.Enabled(l.levelFromSlog(level))) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l *slogHandler) Handle(ctx context.Context, record slog.Record) error { | ||||||
|  | 	if l.slogSink != nil { | ||||||
|  | 		// Only adjust verbosity level of log entries < slog.LevelError. | ||||||
|  | 		if record.Level < slog.LevelError { | ||||||
|  | 			record.Level -= l.levelBias | ||||||
|  | 		} | ||||||
|  | 		return l.slogSink.Handle(ctx, record) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// No need to check for nil sink here because Handle will only be called | ||||||
|  | 	// when Enabled returned true. | ||||||
|  |  | ||||||
|  | 	kvList := make([]any, 0, 2*record.NumAttrs()) | ||||||
|  | 	record.Attrs(func(attr slog.Attr) bool { | ||||||
|  | 		if attr.Key != "" { | ||||||
|  | 			kvList = append(kvList, l.addGroupPrefix(attr.Key), attr.Value.Resolve().Any()) | ||||||
|  | 		} | ||||||
|  | 		return true | ||||||
|  | 	}) | ||||||
|  | 	if record.Level >= slog.LevelError { | ||||||
|  | 		l.sinkWithCallDepth().Error(nil, record.Message, kvList...) | ||||||
|  | 	} else { | ||||||
|  | 		level := l.levelFromSlog(record.Level) | ||||||
|  | 		l.sinkWithCallDepth().Info(level, record.Message, kvList...) | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // sinkWithCallDepth adjusts the stack unwinding so that when Error or Info | ||||||
|  | // are called by Handle, code in slog gets skipped. | ||||||
|  | // | ||||||
|  | // This offset currently (Go 1.21.0) works for calls through | ||||||
|  | // slog.New(NewSlogHandler(...)).  There's no guarantee that the call | ||||||
|  | // chain won't change. Wrapping the handler will also break unwinding. It's | ||||||
|  | // still better than not adjusting at all.... | ||||||
|  | // | ||||||
|  | // This cannot be done when constructing the handler because NewLogr needs | ||||||
|  | // access to the original sink without this adjustment. A second copy would | ||||||
|  | // work, but then WithAttrs would have to be called for both of them. | ||||||
|  | func (l *slogHandler) sinkWithCallDepth() logr.LogSink { | ||||||
|  | 	if sink, ok := l.sink.(logr.CallDepthLogSink); ok { | ||||||
|  | 		return sink.WithCallDepth(2) | ||||||
|  | 	} | ||||||
|  | 	return l.sink | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l *slogHandler) WithAttrs(attrs []slog.Attr) slog.Handler { | ||||||
|  | 	if l.sink == nil || len(attrs) == 0 { | ||||||
|  | 		return l | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	copy := *l | ||||||
|  | 	if l.slogSink != nil { | ||||||
|  | 		copy.slogSink = l.slogSink.WithAttrs(attrs) | ||||||
|  | 		copy.sink = copy.slogSink | ||||||
|  | 	} else { | ||||||
|  | 		kvList := make([]any, 0, 2*len(attrs)) | ||||||
|  | 		for _, attr := range attrs { | ||||||
|  | 			if attr.Key != "" { | ||||||
|  | 				kvList = append(kvList, l.addGroupPrefix(attr.Key), attr.Value.Resolve().Any()) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		copy.sink = l.sink.WithValues(kvList...) | ||||||
|  | 	} | ||||||
|  | 	return © | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l *slogHandler) WithGroup(name string) slog.Handler { | ||||||
|  | 	if l.sink == nil { | ||||||
|  | 		return l | ||||||
|  | 	} | ||||||
|  | 	copy := *l | ||||||
|  | 	if l.slogSink != nil { | ||||||
|  | 		copy.slogSink = l.slogSink.WithGroup(name) | ||||||
|  | 		copy.sink = l.slogSink | ||||||
|  | 	} else { | ||||||
|  | 		copy.groupPrefix = copy.addGroupPrefix(name) | ||||||
|  | 	} | ||||||
|  | 	return © | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l *slogHandler) addGroupPrefix(name string) string { | ||||||
|  | 	if l.groupPrefix == "" { | ||||||
|  | 		return name | ||||||
|  | 	} | ||||||
|  | 	return l.groupPrefix + groupSeparator + name | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // levelFromSlog adjusts the level by the logger's verbosity and negates it. | ||||||
|  | // It ensures that the result is >= 0. This is necessary because the result is | ||||||
|  | // passed to a logr.LogSink and that API did not historically document whether | ||||||
|  | // levels could be negative or what that meant. | ||||||
|  | // | ||||||
|  | // Some example usage: | ||||||
|  | //     logrV0 := getMyLogger() | ||||||
|  | //     logrV2 := logrV0.V(2) | ||||||
|  | //     slogV2 := slog.New(slogr.NewSlogHandler(logrV2)) | ||||||
|  | //     slogV2.Debug("msg") // =~ logrV2.V(4) =~ logrV0.V(6) | ||||||
|  | //     slogV2.Info("msg")  // =~  logrV2.V(0) =~ logrV0.V(2) | ||||||
|  | //     slogv2.Warn("msg")  // =~ logrV2.V(-4) =~ logrV0.V(0) | ||||||
|  | func (l *slogHandler) levelFromSlog(level slog.Level) int { | ||||||
|  | 	result := -level | ||||||
|  | 	result += l.levelBias // in case the original logr.Logger had a V level | ||||||
|  | 	if result < 0 { | ||||||
|  | 		result = 0 // because logr.LogSink doesn't expect negative V levels | ||||||
|  | 	} | ||||||
|  | 	return int(result) | ||||||
|  | } | ||||||
							
								
								
									
										108
									
								
								vendor/github.com/go-logr/logr/slogr/slogr.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								vendor/github.com/go-logr/logr/slogr/slogr.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,108 @@ | |||||||
|  | //go:build go1.21 | ||||||
|  | // +build go1.21 | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | Copyright 2023 The logr 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | // Package slogr enables usage of a slog.Handler with logr.Logger as front-end | ||||||
|  | // API and of a logr.LogSink through the slog.Handler and thus slog.Logger | ||||||
|  | // APIs. | ||||||
|  | // | ||||||
|  | // See the README in the top-level [./logr] package for a discussion of | ||||||
|  | // interoperability. | ||||||
|  | package slogr | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"log/slog" | ||||||
|  |  | ||||||
|  | 	"github.com/go-logr/logr" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // NewLogr returns a logr.Logger which writes to the slog.Handler. | ||||||
|  | // | ||||||
|  | // The logr verbosity level is mapped to slog levels such that V(0) becomes | ||||||
|  | // slog.LevelInfo and V(4) becomes slog.LevelDebug. | ||||||
|  | func NewLogr(handler slog.Handler) logr.Logger { | ||||||
|  | 	if handler, ok := handler.(*slogHandler); ok { | ||||||
|  | 		if handler.sink == nil { | ||||||
|  | 			return logr.Discard() | ||||||
|  | 		} | ||||||
|  | 		return logr.New(handler.sink).V(int(handler.levelBias)) | ||||||
|  | 	} | ||||||
|  | 	return logr.New(&slogSink{handler: handler}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // NewSlogHandler returns a slog.Handler which writes to the same sink as the logr.Logger. | ||||||
|  | // | ||||||
|  | // The returned logger writes all records with level >= slog.LevelError as | ||||||
|  | // error log entries with LogSink.Error, regardless of the verbosity level of | ||||||
|  | // the logr.Logger: | ||||||
|  | // | ||||||
|  | //	logger := <some logr.Logger with 0 as verbosity level> | ||||||
|  | //	slog.New(NewSlogHandler(logger.V(10))).Error(...) -> logSink.Error(...) | ||||||
|  | // | ||||||
|  | // The level of all other records gets reduced by the verbosity | ||||||
|  | // level of the logr.Logger and the result is negated. If it happens | ||||||
|  | // to be negative, then it gets replaced by zero because a LogSink | ||||||
|  | // is not expected to handled negative levels: | ||||||
|  | // | ||||||
|  | //	slog.New(NewSlogHandler(logger)).Debug(...) -> logger.GetSink().Info(level=4, ...) | ||||||
|  | //	slog.New(NewSlogHandler(logger)).Warning(...) -> logger.GetSink().Info(level=0, ...) | ||||||
|  | //	slog.New(NewSlogHandler(logger)).Info(...) -> logger.GetSink().Info(level=0, ...) | ||||||
|  | //	slog.New(NewSlogHandler(logger.V(4))).Info(...) -> logger.GetSink().Info(level=4, ...) | ||||||
|  | func NewSlogHandler(logger logr.Logger) slog.Handler { | ||||||
|  | 	if sink, ok := logger.GetSink().(*slogSink); ok && logger.GetV() == 0 { | ||||||
|  | 		return sink.handler | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	handler := &slogHandler{sink: logger.GetSink(), levelBias: slog.Level(logger.GetV())} | ||||||
|  | 	if slogSink, ok := handler.sink.(SlogSink); ok { | ||||||
|  | 		handler.slogSink = slogSink | ||||||
|  | 	} | ||||||
|  | 	return handler | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // SlogSink is an optional interface that a LogSink can implement to support | ||||||
|  | // logging through the slog.Logger or slog.Handler APIs better. It then should | ||||||
|  | // also support special slog values like slog.Group. When used as a | ||||||
|  | // slog.Handler, the advantages are: | ||||||
|  | // | ||||||
|  | //   - stack unwinding gets avoided in favor of logging the pre-recorded PC, | ||||||
|  | //     as intended by slog | ||||||
|  | //   - proper grouping of key/value pairs via WithGroup | ||||||
|  | //   - verbosity levels > slog.LevelInfo can be recorded | ||||||
|  | //   - less overhead | ||||||
|  | // | ||||||
|  | // Both APIs (logr.Logger and slog.Logger/Handler) then are supported equally | ||||||
|  | // well. Developers can pick whatever API suits them better and/or mix | ||||||
|  | // packages which use either API in the same binary with a common logging | ||||||
|  | // implementation. | ||||||
|  | // | ||||||
|  | // This interface is necessary because the type implementing the LogSink | ||||||
|  | // interface cannot also implement the slog.Handler interface due to the | ||||||
|  | // different prototype of the common Enabled method. | ||||||
|  | // | ||||||
|  | // An implementation could support both interfaces in two different types, but then | ||||||
|  | // additional interfaces would be needed to convert between those types in NewLogr | ||||||
|  | // and NewSlogHandler. | ||||||
|  | type SlogSink interface { | ||||||
|  | 	logr.LogSink | ||||||
|  |  | ||||||
|  | 	Handle(ctx context.Context, record slog.Record) error | ||||||
|  | 	WithAttrs(attrs []slog.Attr) SlogSink | ||||||
|  | 	WithGroup(name string) SlogSink | ||||||
|  | } | ||||||
							
								
								
									
										122
									
								
								vendor/github.com/go-logr/logr/slogr/slogsink.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								vendor/github.com/go-logr/logr/slogr/slogsink.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,122 @@ | |||||||
|  | //go:build go1.21 | ||||||
|  | // +build go1.21 | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | Copyright 2023 The logr 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package slogr | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"log/slog" | ||||||
|  | 	"runtime" | ||||||
|  | 	"time" | ||||||
|  |  | ||||||
|  | 	"github.com/go-logr/logr" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	_ logr.LogSink          = &slogSink{} | ||||||
|  | 	_ logr.CallDepthLogSink = &slogSink{} | ||||||
|  | 	_ Underlier             = &slogSink{} | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // Underlier is implemented by the LogSink returned by NewLogr. | ||||||
|  | type Underlier interface { | ||||||
|  | 	// GetUnderlying returns the Handler used by the LogSink. | ||||||
|  | 	GetUnderlying() slog.Handler | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	// nameKey is used to log the `WithName` values as an additional attribute. | ||||||
|  | 	nameKey = "logger" | ||||||
|  |  | ||||||
|  | 	// errKey is used to log the error parameter of Error as an additional attribute. | ||||||
|  | 	errKey = "err" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type slogSink struct { | ||||||
|  | 	callDepth int | ||||||
|  | 	name      string | ||||||
|  | 	handler   slog.Handler | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l *slogSink) Init(info logr.RuntimeInfo) { | ||||||
|  | 	l.callDepth = info.CallDepth | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l *slogSink) GetUnderlying() slog.Handler { | ||||||
|  | 	return l.handler | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l *slogSink) WithCallDepth(depth int) logr.LogSink { | ||||||
|  | 	newLogger := *l | ||||||
|  | 	newLogger.callDepth += depth | ||||||
|  | 	return &newLogger | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l *slogSink) Enabled(level int) bool { | ||||||
|  | 	return l.handler.Enabled(context.Background(), slog.Level(-level)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l *slogSink) Info(level int, msg string, kvList ...interface{}) { | ||||||
|  | 	l.log(nil, msg, slog.Level(-level), kvList...) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l *slogSink) Error(err error, msg string, kvList ...interface{}) { | ||||||
|  | 	l.log(err, msg, slog.LevelError, kvList...) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l *slogSink) log(err error, msg string, level slog.Level, kvList ...interface{}) { | ||||||
|  | 	var pcs [1]uintptr | ||||||
|  | 	// skip runtime.Callers, this function, Info/Error, and all helper functions above that. | ||||||
|  | 	runtime.Callers(3+l.callDepth, pcs[:]) | ||||||
|  |  | ||||||
|  | 	record := slog.NewRecord(time.Now(), level, msg, pcs[0]) | ||||||
|  | 	if l.name != "" { | ||||||
|  | 		record.AddAttrs(slog.String(nameKey, l.name)) | ||||||
|  | 	} | ||||||
|  | 	if err != nil { | ||||||
|  | 		record.AddAttrs(slog.Any(errKey, err)) | ||||||
|  | 	} | ||||||
|  | 	record.Add(kvList...) | ||||||
|  | 	l.handler.Handle(context.Background(), record) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l slogSink) WithName(name string) logr.LogSink { | ||||||
|  | 	if l.name != "" { | ||||||
|  | 		l.name = l.name + "/" | ||||||
|  | 	} | ||||||
|  | 	l.name += name | ||||||
|  | 	return &l | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (l slogSink) WithValues(kvList ...interface{}) logr.LogSink { | ||||||
|  | 	l.handler = l.handler.WithAttrs(kvListToAttrs(kvList...)) | ||||||
|  | 	return &l | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func kvListToAttrs(kvList ...interface{}) []slog.Attr { | ||||||
|  | 	// We don't need the record itself, only its Add method. | ||||||
|  | 	record := slog.NewRecord(time.Time{}, 0, "", 0) | ||||||
|  | 	record.Add(kvList...) | ||||||
|  | 	attrs := make([]slog.Attr, 0, record.NumAttrs()) | ||||||
|  | 	record.Attrs(func(attr slog.Attr) bool { | ||||||
|  | 		attrs = append(attrs, attr) | ||||||
|  | 		return true | ||||||
|  | 	}) | ||||||
|  | 	return attrs | ||||||
|  | } | ||||||
| @@ -24,7 +24,7 @@ import ( | |||||||
| 	"github.com/golang/protobuf/ptypes/any" | 	"github.com/golang/protobuf/ptypes/any" | ||||||
| 	yaml "gopkg.in/yaml.v3" | 	yaml "gopkg.in/yaml.v3" | ||||||
| 
 | 
 | ||||||
| 	extensions "github.com/google/gnostic/extensions" | 	extensions "github.com/google/gnostic-models/extensions" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // ExtensionHandler describes a binary that is called by the compiler to handle specification extensions. | // ExtensionHandler describes a binary that is called by the compiler to handle specification extensions. | ||||||
| @@ -22,7 +22,7 @@ import ( | |||||||
| 
 | 
 | ||||||
| 	"gopkg.in/yaml.v3" | 	"gopkg.in/yaml.v3" | ||||||
| 
 | 
 | ||||||
| 	"github.com/google/gnostic/jsonschema" | 	"github.com/google/gnostic-models/jsonschema" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // compiler helper functions, usually called from generated code | // compiler helper functions, usually called from generated code | ||||||
| @@ -14,8 +14,8 @@ | |||||||
| 
 | 
 | ||||||
| // Code generated by protoc-gen-go. DO NOT EDIT. | // Code generated by protoc-gen-go. DO NOT EDIT. | ||||||
| // versions: | // versions: | ||||||
| // 	protoc-gen-go v1.26.0 | // 	protoc-gen-go v1.27.1 | ||||||
| // 	protoc        v3.18.1 | // 	protoc        v3.19.3 | ||||||
| // source: extensions/extension.proto | // source: extensions/extension.proto | ||||||
| 
 | 
 | ||||||
| package gnostic_extension_v1 | package gnostic_extension_v1 | ||||||
| @@ -1,3 +1,16 @@ | |||||||
|  | // Copyright 2017 Google LLC. All Rights Reserved. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
| 
 | 
 | ||||||
| // THIS FILE IS AUTOMATICALLY GENERATED. | // THIS FILE IS AUTOMATICALLY GENERATED. | ||||||
| 
 | 
 | ||||||
| @@ -46,23 +46,8 @@ func (schema *Schema) describeSchema(indent string) string { | |||||||
| 	if schema.Schema != nil { | 	if schema.Schema != nil { | ||||||
| 		result += indent + "$schema: " + *(schema.Schema) + "\n" | 		result += indent + "$schema: " + *(schema.Schema) + "\n" | ||||||
| 	} | 	} | ||||||
| 	if schema.ReadOnly != nil && *schema.ReadOnly { |  | ||||||
| 		result += indent + fmt.Sprintf("readOnly: %+v\n", *(schema.ReadOnly)) |  | ||||||
| 	} |  | ||||||
| 	if schema.WriteOnly != nil && *schema.WriteOnly { |  | ||||||
| 		result += indent + fmt.Sprintf("writeOnly: %+v\n", *(schema.WriteOnly)) |  | ||||||
| 	} |  | ||||||
| 	if schema.ID != nil { | 	if schema.ID != nil { | ||||||
| 		switch strings.TrimSuffix(*schema.Schema, "#") { |  | ||||||
| 		case "http://json-schema.org/draft-04/schema#": |  | ||||||
| 			fallthrough |  | ||||||
| 		case "#": |  | ||||||
| 			fallthrough |  | ||||||
| 		case "": |  | ||||||
| 		result += indent + "id: " + *(schema.ID) + "\n" | 		result += indent + "id: " + *(schema.ID) + "\n" | ||||||
| 		default: |  | ||||||
| 			result += indent + "$id: " + *(schema.ID) + "\n" |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
| 	if schema.MultipleOf != nil { | 	if schema.MultipleOf != nil { | ||||||
| 		result += indent + fmt.Sprintf("multipleOf: %+v\n", *(schema.MultipleOf)) | 		result += indent + fmt.Sprintf("multipleOf: %+v\n", *(schema.MultipleOf)) | ||||||
| @@ -26,8 +26,6 @@ type Schema struct { | |||||||
| 	Schema *string // $schema | 	Schema *string // $schema | ||||||
| 	ID     *string // id keyword used for $ref resolution scope | 	ID     *string // id keyword used for $ref resolution scope | ||||||
| 	Ref    *string // $ref, i.e. JSON Pointers | 	Ref    *string // $ref, i.e. JSON Pointers | ||||||
| 	ReadOnly  *bool |  | ||||||
| 	WriteOnly *bool |  | ||||||
| 
 | 
 | ||||||
| 	// http://json-schema.org/latest/json-schema-validation.html | 	// http://json-schema.org/latest/json-schema-validation.html | ||||||
| 	// 5.1.  Validation keywords for numeric instances (number and integer) | 	// 5.1.  Validation keywords for numeric instances (number and integer) | ||||||
| @@ -165,6 +165,7 @@ func NewSchemaFromObject(jsonData *yaml.Node) *Schema { | |||||||
| 
 | 
 | ||||||
| 	default: | 	default: | ||||||
| 		fmt.Printf("schemaValue: unexpected node %+v\n", jsonData) | 		fmt.Printf("schemaValue: unexpected node %+v\n", jsonData) | ||||||
|  | 		return nil | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return nil | 	return nil | ||||||
| @@ -16,7 +16,6 @@ package jsonschema | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strings" |  | ||||||
| 
 | 
 | ||||||
| 	"gopkg.in/yaml.v3" | 	"gopkg.in/yaml.v3" | ||||||
| ) | ) | ||||||
| @@ -34,11 +33,7 @@ func renderMappingNode(node *yaml.Node, indent string) (result string) { | |||||||
| 		value := node.Content[i+1] | 		value := node.Content[i+1] | ||||||
| 		switch value.Kind { | 		switch value.Kind { | ||||||
| 		case yaml.ScalarNode: | 		case yaml.ScalarNode: | ||||||
| 			if value.Tag == "!!bool" { |  | ||||||
| 				result += value.Value |  | ||||||
| 			} else { |  | ||||||
| 			result += "\"" + value.Value + "\"" | 			result += "\"" + value.Value + "\"" | ||||||
| 			} |  | ||||||
| 		case yaml.MappingNode: | 		case yaml.MappingNode: | ||||||
| 			result += renderMappingNode(value, innerIndent) | 			result += renderMappingNode(value, innerIndent) | ||||||
| 		case yaml.SequenceNode: | 		case yaml.SequenceNode: | ||||||
| @@ -63,11 +58,7 @@ func renderSequenceNode(node *yaml.Node, indent string) (result string) { | |||||||
| 		item := node.Content[i] | 		item := node.Content[i] | ||||||
| 		switch item.Kind { | 		switch item.Kind { | ||||||
| 		case yaml.ScalarNode: | 		case yaml.ScalarNode: | ||||||
| 			if item.Tag == "!!bool" { |  | ||||||
| 				result += innerIndent + item.Value |  | ||||||
| 			} else { |  | ||||||
| 			result += innerIndent + "\"" + item.Value + "\"" | 			result += innerIndent + "\"" + item.Value + "\"" | ||||||
| 			} |  | ||||||
| 		case yaml.MappingNode: | 		case yaml.MappingNode: | ||||||
| 			result += innerIndent + renderMappingNode(item, innerIndent) + "" | 			result += innerIndent + renderMappingNode(item, innerIndent) + "" | ||||||
| 		default: | 		default: | ||||||
| @@ -269,26 +260,11 @@ func (schema *Schema) nodeValue() *yaml.Node { | |||||||
| 		content = appendPair(content, "title", nodeForString(*schema.Title)) | 		content = appendPair(content, "title", nodeForString(*schema.Title)) | ||||||
| 	} | 	} | ||||||
| 	if schema.ID != nil { | 	if schema.ID != nil { | ||||||
| 		switch strings.TrimSuffix(*schema.Schema, "#") { |  | ||||||
| 		case "http://json-schema.org/draft-04/schema": |  | ||||||
| 			fallthrough |  | ||||||
| 		case "#": |  | ||||||
| 			fallthrough |  | ||||||
| 		case "": |  | ||||||
| 		content = appendPair(content, "id", nodeForString(*schema.ID)) | 		content = appendPair(content, "id", nodeForString(*schema.ID)) | ||||||
| 		default: |  | ||||||
| 			content = appendPair(content, "$id", nodeForString(*schema.ID)) |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
| 	if schema.Schema != nil { | 	if schema.Schema != nil { | ||||||
| 		content = appendPair(content, "$schema", nodeForString(*schema.Schema)) | 		content = appendPair(content, "$schema", nodeForString(*schema.Schema)) | ||||||
| 	} | 	} | ||||||
| 	if schema.ReadOnly != nil && *schema.ReadOnly { |  | ||||||
| 		content = appendPair(content, "readOnly", nodeForBoolean(*schema.ReadOnly)) |  | ||||||
| 	} |  | ||||||
| 	if schema.WriteOnly != nil && *schema.WriteOnly { |  | ||||||
| 		content = appendPair(content, "writeOnly", nodeForBoolean(*schema.WriteOnly)) |  | ||||||
| 	} |  | ||||||
| 	if schema.Type != nil { | 	if schema.Type != nil { | ||||||
| 		content = appendPair(content, "type", schema.Type.nodeValue()) | 		content = appendPair(content, "type", schema.Type.nodeValue()) | ||||||
| 	} | 	} | ||||||
| @@ -23,7 +23,7 @@ import ( | |||||||
| 
 | 
 | ||||||
| 	"gopkg.in/yaml.v3" | 	"gopkg.in/yaml.v3" | ||||||
| 
 | 
 | ||||||
| 	"github.com/google/gnostic/compiler" | 	"github.com/google/gnostic-models/compiler" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // Version returns the package name (and OpenAPI version). | // Version returns the package name (and OpenAPI version). | ||||||
| @@ -7887,12 +7887,7 @@ func (m *Oauth2Scopes) ToRawInfo() *yaml.Node { | |||||||
| 	if m == nil { | 	if m == nil { | ||||||
| 		return info | 		return info | ||||||
| 	} | 	} | ||||||
| 	if m.AdditionalProperties != nil { | 	// &{Name:additionalProperties Type:NamedString StringEnumValues:[] MapType:string Repeated:true Pattern: Implicit:true Description:} | ||||||
| 		for _, item := range m.AdditionalProperties { |  | ||||||
| 			info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) |  | ||||||
| 			info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Value)) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return info | 	return info | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -16,8 +16,8 @@ | |||||||
| 
 | 
 | ||||||
| // Code generated by protoc-gen-go. DO NOT EDIT. | // Code generated by protoc-gen-go. DO NOT EDIT. | ||||||
| // versions: | // versions: | ||||||
| // 	protoc-gen-go v1.26.0 | // 	protoc-gen-go v1.27.1 | ||||||
| // 	protoc        v3.18.1 | // 	protoc        v3.19.3 | ||||||
| // source: openapiv2/OpenAPIv2.proto | // source: openapiv2/OpenAPIv2.proto | ||||||
| 
 | 
 | ||||||
| package openapi_v2 | package openapi_v2 | ||||||
| @@ -17,7 +17,7 @@ package openapi_v2 | |||||||
| import ( | import ( | ||||||
| 	"gopkg.in/yaml.v3" | 	"gopkg.in/yaml.v3" | ||||||
| 
 | 
 | ||||||
| 	"github.com/google/gnostic/compiler" | 	"github.com/google/gnostic-models/compiler" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // ParseDocument reads an OpenAPI v2 description from a YAML/JSON representation. | // ParseDocument reads an OpenAPI v2 description from a YAML/JSON representation. | ||||||
| @@ -23,7 +23,7 @@ import ( | |||||||
| 
 | 
 | ||||||
| 	"gopkg.in/yaml.v3" | 	"gopkg.in/yaml.v3" | ||||||
| 
 | 
 | ||||||
| 	"github.com/google/gnostic/compiler" | 	"github.com/google/gnostic-models/compiler" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // Version returns the package name (and OpenAPI version). | // Version returns the package name (and OpenAPI version). | ||||||
| @@ -8560,12 +8560,7 @@ func (m *Strings) ToRawInfo() *yaml.Node { | |||||||
| 	if m == nil { | 	if m == nil { | ||||||
| 		return info | 		return info | ||||||
| 	} | 	} | ||||||
| 	if m.AdditionalProperties != nil { | 	// &{Name:additionalProperties Type:NamedString StringEnumValues:[] MapType:string Repeated:true Pattern: Implicit:true Description:} | ||||||
| 		for _, item := range m.AdditionalProperties { |  | ||||||
| 			info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) |  | ||||||
| 			info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Value)) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return info | 	return info | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -16,8 +16,8 @@ | |||||||
| 
 | 
 | ||||||
| // Code generated by protoc-gen-go. DO NOT EDIT. | // Code generated by protoc-gen-go. DO NOT EDIT. | ||||||
| // versions: | // versions: | ||||||
| // 	protoc-gen-go v1.28.0 | // 	protoc-gen-go v1.27.1 | ||||||
| // 	protoc        v3.19.4 | // 	protoc        v3.19.3 | ||||||
| // source: openapiv3/OpenAPIv3.proto | // source: openapiv3/OpenAPIv3.proto | ||||||
| 
 | 
 | ||||||
| package openapi_v3 | package openapi_v3 | ||||||
| @@ -6760,13 +6760,12 @@ var file_openapiv3_OpenAPIv3_proto_rawDesc = []byte{ | |||||||
| 	0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, | 	0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, | ||||||
| 	0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x33, 0x2e, 0x4e, 0x61, | 	0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x33, 0x2e, 0x4e, 0x61, | ||||||
| 	0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x16, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, | 	0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x16, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, | ||||||
| 	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x56, | 	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x3e, | ||||||
| 	0x0a, 0x0e, 0x6f, 0x72, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x33, | 	0x0a, 0x0e, 0x6f, 0x72, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x33, | ||||||
| 	0x42, 0x0c, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, | 	0x42, 0x0c, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, | ||||||
| 	0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6f, | 	0x5a, 0x16, 0x2e, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x33, 0x3b, 0x6f, 0x70, | ||||||
| 	0x67, 0x6c, 0x65, 0x2f, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2f, 0x6f, 0x70, 0x65, 0x6e, | 	0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x33, 0xa2, 0x02, 0x03, 0x4f, 0x41, 0x53, 0x62, 0x06, | ||||||
| 	0x61, 0x70, 0x69, 0x76, 0x33, 0x3b, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x33, | 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||||
| 	0xa2, 0x02, 0x03, 0x4f, 0x41, 0x53, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
| @@ -42,7 +42,7 @@ option java_package = "org.openapi_v3"; | |||||||
| option objc_class_prefix = "OAS"; | option objc_class_prefix = "OAS"; | ||||||
| 
 | 
 | ||||||
| // The Go package name. | // The Go package name. | ||||||
| option go_package = "github.com/google/gnostic/openapiv3;openapi_v3"; | option go_package = "./openapiv3;openapi_v3"; | ||||||
| 
 | 
 | ||||||
| message AdditionalPropertiesItem { | message AdditionalPropertiesItem { | ||||||
|   oneof oneof { |   oneof oneof { | ||||||
| @@ -19,7 +19,3 @@ for OpenAPI. | |||||||
| 
 | 
 | ||||||
| The schema-generator directory contains support code which generates | The schema-generator directory contains support code which generates | ||||||
| openapi-3.1.json from the OpenAPI 3.1 specification document (Markdown). | openapi-3.1.json from the OpenAPI 3.1 specification document (Markdown). | ||||||
| 
 |  | ||||||
| ### How to rebuild |  | ||||||
| 
 |  | ||||||
| `protoc -I=. -I=third_party --go_out=. --go_opt=paths=source_relative openapiv3/*.proto` |  | ||||||
| @@ -17,7 +17,7 @@ package openapi_v3 | |||||||
| import ( | import ( | ||||||
| 	"gopkg.in/yaml.v3" | 	"gopkg.in/yaml.v3" | ||||||
| 
 | 
 | ||||||
| 	"github.com/google/gnostic/compiler" | 	"github.com/google/gnostic-models/compiler" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // ParseDocument reads an OpenAPI v3 description from a YAML/JSON representation. | // ParseDocument reads an OpenAPI v3 description from a YAML/JSON representation. | ||||||
							
								
								
									
										183
									
								
								vendor/github.com/google/gnostic/openapiv3/annotations.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										183
									
								
								vendor/github.com/google/gnostic/openapiv3/annotations.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,183 +0,0 @@ | |||||||
| // Copyright 2022 Google LLC. All Rights Reserved. |  | ||||||
| // |  | ||||||
| // 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 protoc-gen-go. DO NOT EDIT. |  | ||||||
| // versions: |  | ||||||
| // 	protoc-gen-go v1.28.0 |  | ||||||
| // 	protoc        v3.19.4 |  | ||||||
| // source: openapiv3/annotations.proto |  | ||||||
|  |  | ||||||
| package openapi_v3 |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	protoreflect "google.golang.org/protobuf/reflect/protoreflect" |  | ||||||
| 	protoimpl "google.golang.org/protobuf/runtime/protoimpl" |  | ||||||
| 	descriptorpb "google.golang.org/protobuf/types/descriptorpb" |  | ||||||
| 	reflect "reflect" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| const ( |  | ||||||
| 	// Verify that this generated code is sufficiently up-to-date. |  | ||||||
| 	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) |  | ||||||
| 	// Verify that runtime/protoimpl is sufficiently up-to-date. |  | ||||||
| 	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| var file_openapiv3_annotations_proto_extTypes = []protoimpl.ExtensionInfo{ |  | ||||||
| 	{ |  | ||||||
| 		ExtendedType:  (*descriptorpb.FileOptions)(nil), |  | ||||||
| 		ExtensionType: (*Document)(nil), |  | ||||||
| 		Field:         1143, |  | ||||||
| 		Name:          "openapi.v3.document", |  | ||||||
| 		Tag:           "bytes,1143,opt,name=document", |  | ||||||
| 		Filename:      "openapiv3/annotations.proto", |  | ||||||
| 	}, |  | ||||||
| 	{ |  | ||||||
| 		ExtendedType:  (*descriptorpb.MethodOptions)(nil), |  | ||||||
| 		ExtensionType: (*Operation)(nil), |  | ||||||
| 		Field:         1143, |  | ||||||
| 		Name:          "openapi.v3.operation", |  | ||||||
| 		Tag:           "bytes,1143,opt,name=operation", |  | ||||||
| 		Filename:      "openapiv3/annotations.proto", |  | ||||||
| 	}, |  | ||||||
| 	{ |  | ||||||
| 		ExtendedType:  (*descriptorpb.MessageOptions)(nil), |  | ||||||
| 		ExtensionType: (*Schema)(nil), |  | ||||||
| 		Field:         1143, |  | ||||||
| 		Name:          "openapi.v3.schema", |  | ||||||
| 		Tag:           "bytes,1143,opt,name=schema", |  | ||||||
| 		Filename:      "openapiv3/annotations.proto", |  | ||||||
| 	}, |  | ||||||
| 	{ |  | ||||||
| 		ExtendedType:  (*descriptorpb.FieldOptions)(nil), |  | ||||||
| 		ExtensionType: (*Schema)(nil), |  | ||||||
| 		Field:         1143, |  | ||||||
| 		Name:          "openapi.v3.property", |  | ||||||
| 		Tag:           "bytes,1143,opt,name=property", |  | ||||||
| 		Filename:      "openapiv3/annotations.proto", |  | ||||||
| 	}, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Extension fields to descriptorpb.FileOptions. |  | ||||||
| var ( |  | ||||||
| 	// optional openapi.v3.Document document = 1143; |  | ||||||
| 	E_Document = &file_openapiv3_annotations_proto_extTypes[0] |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // Extension fields to descriptorpb.MethodOptions. |  | ||||||
| var ( |  | ||||||
| 	// optional openapi.v3.Operation operation = 1143; |  | ||||||
| 	E_Operation = &file_openapiv3_annotations_proto_extTypes[1] |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // Extension fields to descriptorpb.MessageOptions. |  | ||||||
| var ( |  | ||||||
| 	// optional openapi.v3.Schema schema = 1143; |  | ||||||
| 	E_Schema = &file_openapiv3_annotations_proto_extTypes[2] |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // Extension fields to descriptorpb.FieldOptions. |  | ||||||
| var ( |  | ||||||
| 	// optional openapi.v3.Schema property = 1143; |  | ||||||
| 	E_Property = &file_openapiv3_annotations_proto_extTypes[3] |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| var File_openapiv3_annotations_proto protoreflect.FileDescriptor |  | ||||||
|  |  | ||||||
| var file_openapiv3_annotations_proto_rawDesc = []byte{ |  | ||||||
| 	0x0a, 0x1b, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x33, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, |  | ||||||
| 	0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x6f, |  | ||||||
| 	0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x33, 0x1a, 0x19, 0x6f, 0x70, 0x65, 0x6e, 0x61, |  | ||||||
| 	0x70, 0x69, 0x76, 0x33, 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49, 0x76, 0x33, 0x2e, 0x70, |  | ||||||
| 	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, |  | ||||||
| 	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, |  | ||||||
| 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3a, 0x4f, 0x0a, 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, |  | ||||||
| 	0x6e, 0x74, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, |  | ||||||
| 	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, |  | ||||||
| 	0x18, 0xf7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, |  | ||||||
| 	0x69, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x64, |  | ||||||
| 	0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x54, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, |  | ||||||
| 	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, |  | ||||||
| 	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, |  | ||||||
| 	0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, |  | ||||||
| 	0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x33, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, |  | ||||||
| 	0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x4c, 0x0a, |  | ||||||
| 	0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, |  | ||||||
| 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, |  | ||||||
| 	0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, |  | ||||||
| 	0x12, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x63, 0x68, |  | ||||||
| 	0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x3a, 0x4e, 0x0a, 0x08, 0x70, |  | ||||||
| 	0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, |  | ||||||
| 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, |  | ||||||
| 	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, |  | ||||||
| 	0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, |  | ||||||
| 	0x61, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x42, 0x5a, 0x0a, 0x0e, 0x6f, |  | ||||||
| 	0x72, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x33, 0x42, 0x10, 0x41, |  | ||||||
| 	0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, |  | ||||||
| 	0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, |  | ||||||
| 	0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2f, 0x6f, 0x70, 0x65, |  | ||||||
| 	0x6e, 0x61, 0x70, 0x69, 0x76, 0x33, 0x3b, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x76, |  | ||||||
| 	0x33, 0xa2, 0x02, 0x03, 0x4f, 0x41, 0x53, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| var file_openapiv3_annotations_proto_goTypes = []interface{}{ |  | ||||||
| 	(*descriptorpb.FileOptions)(nil),    // 0: google.protobuf.FileOptions |  | ||||||
| 	(*descriptorpb.MethodOptions)(nil),  // 1: google.protobuf.MethodOptions |  | ||||||
| 	(*descriptorpb.MessageOptions)(nil), // 2: google.protobuf.MessageOptions |  | ||||||
| 	(*descriptorpb.FieldOptions)(nil),   // 3: google.protobuf.FieldOptions |  | ||||||
| 	(*Document)(nil),                    // 4: openapi.v3.Document |  | ||||||
| 	(*Operation)(nil),                   // 5: openapi.v3.Operation |  | ||||||
| 	(*Schema)(nil),                      // 6: openapi.v3.Schema |  | ||||||
| } |  | ||||||
| var file_openapiv3_annotations_proto_depIdxs = []int32{ |  | ||||||
| 	0, // 0: openapi.v3.document:extendee -> google.protobuf.FileOptions |  | ||||||
| 	1, // 1: openapi.v3.operation:extendee -> google.protobuf.MethodOptions |  | ||||||
| 	2, // 2: openapi.v3.schema:extendee -> google.protobuf.MessageOptions |  | ||||||
| 	3, // 3: openapi.v3.property:extendee -> google.protobuf.FieldOptions |  | ||||||
| 	4, // 4: openapi.v3.document:type_name -> openapi.v3.Document |  | ||||||
| 	5, // 5: openapi.v3.operation:type_name -> openapi.v3.Operation |  | ||||||
| 	6, // 6: openapi.v3.schema:type_name -> openapi.v3.Schema |  | ||||||
| 	6, // 7: openapi.v3.property:type_name -> openapi.v3.Schema |  | ||||||
| 	8, // [8:8] is the sub-list for method output_type |  | ||||||
| 	8, // [8:8] is the sub-list for method input_type |  | ||||||
| 	4, // [4:8] is the sub-list for extension type_name |  | ||||||
| 	0, // [0:4] is the sub-list for extension extendee |  | ||||||
| 	0, // [0:0] is the sub-list for field type_name |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func init() { file_openapiv3_annotations_proto_init() } |  | ||||||
| func file_openapiv3_annotations_proto_init() { |  | ||||||
| 	if File_openapiv3_annotations_proto != nil { |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 	file_openapiv3_OpenAPIv3_proto_init() |  | ||||||
| 	type x struct{} |  | ||||||
| 	out := protoimpl.TypeBuilder{ |  | ||||||
| 		File: protoimpl.DescBuilder{ |  | ||||||
| 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), |  | ||||||
| 			RawDescriptor: file_openapiv3_annotations_proto_rawDesc, |  | ||||||
| 			NumEnums:      0, |  | ||||||
| 			NumMessages:   0, |  | ||||||
| 			NumExtensions: 4, |  | ||||||
| 			NumServices:   0, |  | ||||||
| 		}, |  | ||||||
| 		GoTypes:           file_openapiv3_annotations_proto_goTypes, |  | ||||||
| 		DependencyIndexes: file_openapiv3_annotations_proto_depIdxs, |  | ||||||
| 		ExtensionInfos:    file_openapiv3_annotations_proto_extTypes, |  | ||||||
| 	}.Build() |  | ||||||
| 	File_openapiv3_annotations_proto = out.File |  | ||||||
| 	file_openapiv3_annotations_proto_rawDesc = nil |  | ||||||
| 	file_openapiv3_annotations_proto_goTypes = nil |  | ||||||
| 	file_openapiv3_annotations_proto_depIdxs = nil |  | ||||||
| } |  | ||||||
							
								
								
									
										60
									
								
								vendor/github.com/google/gnostic/openapiv3/annotations.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								vendor/github.com/google/gnostic/openapiv3/annotations.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,60 +0,0 @@ | |||||||
| // Copyright 2022 Google LLC. All Rights Reserved. |  | ||||||
| // |  | ||||||
| // 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. |  | ||||||
|  |  | ||||||
| syntax = "proto3"; |  | ||||||
|  |  | ||||||
| package openapi.v3; |  | ||||||
|  |  | ||||||
| import "openapiv3/OpenAPIv3.proto"; |  | ||||||
| import "google/protobuf/descriptor.proto"; |  | ||||||
|  |  | ||||||
| // This option lets the proto compiler generate Java code inside the package |  | ||||||
| // name (see below) instead of inside an outer class. It creates a simpler |  | ||||||
| // developer experience by reducing one-level of name nesting and be |  | ||||||
| // consistent with most programming languages that don't support outer classes. |  | ||||||
| option java_multiple_files = true; |  | ||||||
|  |  | ||||||
| // The Java outer classname should be the filename in UpperCamelCase. This |  | ||||||
| // class is only used to hold proto descriptor, so developers don't need to |  | ||||||
| // work with it directly. |  | ||||||
| option java_outer_classname = "AnnotationsProto"; |  | ||||||
|  |  | ||||||
| // The Java package name must be proto package name with proper prefix. |  | ||||||
| option java_package = "org.openapi_v3"; |  | ||||||
|  |  | ||||||
| // A reasonable prefix for the Objective-C symbols generated from the package. |  | ||||||
| // It should at a minimum be 3 characters long, all uppercase, and convention |  | ||||||
| // is to use an abbreviation of the package name. Something short, but |  | ||||||
| // hopefully unique enough to not conflict with things that may come along in |  | ||||||
| // the future. 'GPB' is reserved for the protocol buffer implementation itself. |  | ||||||
| option objc_class_prefix = "OAS"; |  | ||||||
|  |  | ||||||
| // The Go package name. |  | ||||||
| option go_package = "github.com/google/gnostic/openapiv3;openapi_v3"; |  | ||||||
|  |  | ||||||
| extend google.protobuf.FileOptions { |  | ||||||
|   Document document = 1143; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| extend google.protobuf.MethodOptions { |  | ||||||
|   Operation operation = 1143; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| extend google.protobuf.MessageOptions { |  | ||||||
|   Schema schema = 1143; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| extend google.protobuf.FieldOptions { |  | ||||||
|   Schema property = 1143; |  | ||||||
| } |  | ||||||
							
								
								
									
										1251
									
								
								vendor/github.com/google/gnostic/openapiv3/openapi-3.0.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1251
									
								
								vendor/github.com/google/gnostic/openapiv3/openapi-3.0.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1250
									
								
								vendor/github.com/google/gnostic/openapiv3/openapi-3.1.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1250
									
								
								vendor/github.com/google/gnostic/openapiv3/openapi-3.1.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										38
									
								
								vendor/github.com/google/go-cmp/cmp/compare.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										38
									
								
								vendor/github.com/google/go-cmp/cmp/compare.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -5,7 +5,7 @@ | |||||||
| // Package cmp determines equality of values. | // Package cmp determines equality of values. | ||||||
| // | // | ||||||
| // This package is intended to be a more powerful and safer alternative to | // This package is intended to be a more powerful and safer alternative to | ||||||
| // reflect.DeepEqual for comparing whether two values are semantically equal. | // [reflect.DeepEqual] for comparing whether two values are semantically equal. | ||||||
| // It is intended to only be used in tests, as performance is not a goal and | // It is intended to only be used in tests, as performance is not a goal and | ||||||
| // it may panic if it cannot compare the values. Its propensity towards | // it may panic if it cannot compare the values. Its propensity towards | ||||||
| // panicking means that its unsuitable for production environments where a | // panicking means that its unsuitable for production environments where a | ||||||
| @@ -18,16 +18,17 @@ | |||||||
| //     For example, an equality function may report floats as equal so long as | //     For example, an equality function may report floats as equal so long as | ||||||
| //     they are within some tolerance of each other. | //     they are within some tolerance of each other. | ||||||
| // | // | ||||||
| //   - Types with an Equal method may use that method to determine equality. | //   - Types with an Equal method (e.g., [time.Time.Equal]) may use that method | ||||||
| //     This allows package authors to determine the equality operation | //     to determine equality. This allows package authors to determine | ||||||
| //     for the types that they define. | //     the equality operation for the types that they define. | ||||||
| // | // | ||||||
| //   - If no custom equality functions are used and no Equal method is defined, | //   - If no custom equality functions are used and no Equal method is defined, | ||||||
| //     equality is determined by recursively comparing the primitive kinds on | //     equality is determined by recursively comparing the primitive kinds on | ||||||
| //     both values, much like reflect.DeepEqual. Unlike reflect.DeepEqual, | //     both values, much like [reflect.DeepEqual]. Unlike [reflect.DeepEqual], | ||||||
| //     unexported fields are not compared by default; they result in panics | //     unexported fields are not compared by default; they result in panics | ||||||
| //     unless suppressed by using an Ignore option (see cmpopts.IgnoreUnexported) | //     unless suppressed by using an [Ignore] option | ||||||
| //     or explicitly compared using the Exporter option. | //     (see [github.com/google/go-cmp/cmp/cmpopts.IgnoreUnexported]) | ||||||
|  | //     or explicitly compared using the [Exporter] option. | ||||||
| package cmp | package cmp | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
| @@ -45,14 +46,14 @@ import ( | |||||||
| // Equal reports whether x and y are equal by recursively applying the | // Equal reports whether x and y are equal by recursively applying the | ||||||
| // following rules in the given order to x and y and all of their sub-values: | // following rules in the given order to x and y and all of their sub-values: | ||||||
| // | // | ||||||
| //   - Let S be the set of all Ignore, Transformer, and Comparer options that | //   - Let S be the set of all [Ignore], [Transformer], and [Comparer] options that | ||||||
| //     remain after applying all path filters, value filters, and type filters. | //     remain after applying all path filters, value filters, and type filters. | ||||||
| //     If at least one Ignore exists in S, then the comparison is ignored. | //     If at least one [Ignore] exists in S, then the comparison is ignored. | ||||||
| //     If the number of Transformer and Comparer options in S is non-zero, | //     If the number of [Transformer] and [Comparer] options in S is non-zero, | ||||||
| //     then Equal panics because it is ambiguous which option to use. | //     then Equal panics because it is ambiguous which option to use. | ||||||
| //     If S contains a single Transformer, then use that to transform | //     If S contains a single [Transformer], then use that to transform | ||||||
| //     the current values and recursively call Equal on the output values. | //     the current values and recursively call Equal on the output values. | ||||||
| //     If S contains a single Comparer, then use that to compare the current values. | //     If S contains a single [Comparer], then use that to compare the current values. | ||||||
| //     Otherwise, evaluation proceeds to the next rule. | //     Otherwise, evaluation proceeds to the next rule. | ||||||
| // | // | ||||||
| //   - If the values have an Equal method of the form "(T) Equal(T) bool" or | //   - If the values have an Equal method of the form "(T) Equal(T) bool" or | ||||||
| @@ -66,21 +67,22 @@ import ( | |||||||
| //     Functions are only equal if they are both nil, otherwise they are unequal. | //     Functions are only equal if they are both nil, otherwise they are unequal. | ||||||
| // | // | ||||||
| // Structs are equal if recursively calling Equal on all fields report equal. | // Structs are equal if recursively calling Equal on all fields report equal. | ||||||
| // If a struct contains unexported fields, Equal panics unless an Ignore option | // If a struct contains unexported fields, Equal panics unless an [Ignore] option | ||||||
| // (e.g., cmpopts.IgnoreUnexported) ignores that field or the Exporter option | // (e.g., [github.com/google/go-cmp/cmp/cmpopts.IgnoreUnexported]) ignores that field | ||||||
| // explicitly permits comparing the unexported field. | // or the [Exporter] option explicitly permits comparing the unexported field. | ||||||
| // | // | ||||||
| // Slices are equal if they are both nil or both non-nil, where recursively | // Slices are equal if they are both nil or both non-nil, where recursively | ||||||
| // calling Equal on all non-ignored slice or array elements report equal. | // calling Equal on all non-ignored slice or array elements report equal. | ||||||
| // Empty non-nil slices and nil slices are not equal; to equate empty slices, | // Empty non-nil slices and nil slices are not equal; to equate empty slices, | ||||||
| // consider using cmpopts.EquateEmpty. | // consider using [github.com/google/go-cmp/cmp/cmpopts.EquateEmpty]. | ||||||
| // | // | ||||||
| // Maps are equal if they are both nil or both non-nil, where recursively | // Maps are equal if they are both nil or both non-nil, where recursively | ||||||
| // calling Equal on all non-ignored map entries report equal. | // calling Equal on all non-ignored map entries report equal. | ||||||
| // Map keys are equal according to the == operator. | // Map keys are equal according to the == operator. | ||||||
| // To use custom comparisons for map keys, consider using cmpopts.SortMaps. | // To use custom comparisons for map keys, consider using | ||||||
|  | // [github.com/google/go-cmp/cmp/cmpopts.SortMaps]. | ||||||
| // Empty non-nil maps and nil maps are not equal; to equate empty maps, | // Empty non-nil maps and nil maps are not equal; to equate empty maps, | ||||||
| // consider using cmpopts.EquateEmpty. | // consider using [github.com/google/go-cmp/cmp/cmpopts.EquateEmpty]. | ||||||
| // | // | ||||||
| // Pointers and interfaces are equal if they are both nil or both non-nil, | // Pointers and interfaces are equal if they are both nil or both non-nil, | ||||||
| // where they have the same underlying concrete type and recursively | // where they have the same underlying concrete type and recursively | ||||||
|   | |||||||
| @@ -2,9 +2,6 @@ | |||||||
| // Use of this source code is governed by a BSD-style | // Use of this source code is governed by a BSD-style | ||||||
| // license that can be found in the LICENSE file. | // license that can be found in the LICENSE file. | ||||||
| 
 | 
 | ||||||
| //go:build !purego |  | ||||||
| // +build !purego |  | ||||||
| 
 |  | ||||||
| package cmp | package cmp | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| @@ -12,8 +9,6 @@ import ( | |||||||
| 	"unsafe" | 	"unsafe" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const supportExporters = true |  | ||||||
| 
 |  | ||||||
| // retrieveUnexportedField uses unsafe to forcibly retrieve any field from | // retrieveUnexportedField uses unsafe to forcibly retrieve any field from | ||||||
| // a struct such that the value has read-write permissions. | // a struct such that the value has read-write permissions. | ||||||
| // | // | ||||||
							
								
								
									
										16
									
								
								vendor/github.com/google/go-cmp/cmp/export_panic.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								vendor/github.com/google/go-cmp/cmp/export_panic.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,16 +0,0 @@ | |||||||
| // Copyright 2017, The Go Authors. All rights reserved. |  | ||||||
| // Use of this source code is governed by a BSD-style |  | ||||||
| // license that can be found in the LICENSE file. |  | ||||||
|  |  | ||||||
| //go:build purego |  | ||||||
| // +build purego |  | ||||||
|  |  | ||||||
| package cmp |  | ||||||
|  |  | ||||||
| import "reflect" |  | ||||||
|  |  | ||||||
| const supportExporters = false |  | ||||||
|  |  | ||||||
| func retrieveUnexportedField(reflect.Value, reflect.StructField, bool) reflect.Value { |  | ||||||
| 	panic("no support for forcibly accessing unexported fields") |  | ||||||
| } |  | ||||||
| @@ -2,9 +2,6 @@ | |||||||
| // Use of this source code is governed by a BSD-style | // Use of this source code is governed by a BSD-style | ||||||
| // license that can be found in the LICENSE file. | // license that can be found in the LICENSE file. | ||||||
| 
 | 
 | ||||||
| //go:build !purego |  | ||||||
| // +build !purego |  | ||||||
| 
 |  | ||||||
| package value | package value | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
							
								
								
									
										34
									
								
								vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,34 +0,0 @@ | |||||||
| // Copyright 2018, The Go Authors. All rights reserved. |  | ||||||
| // Use of this source code is governed by a BSD-style |  | ||||||
| // license that can be found in the LICENSE file. |  | ||||||
|  |  | ||||||
| //go:build purego |  | ||||||
| // +build purego |  | ||||||
|  |  | ||||||
| package value |  | ||||||
|  |  | ||||||
| import "reflect" |  | ||||||
|  |  | ||||||
| // Pointer is an opaque typed pointer and is guaranteed to be comparable. |  | ||||||
| type Pointer struct { |  | ||||||
| 	p uintptr |  | ||||||
| 	t reflect.Type |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // PointerOf returns a Pointer from v, which must be a |  | ||||||
| // reflect.Ptr, reflect.Slice, or reflect.Map. |  | ||||||
| func PointerOf(v reflect.Value) Pointer { |  | ||||||
| 	// NOTE: Storing a pointer as an uintptr is technically incorrect as it |  | ||||||
| 	// assumes that the GC implementation does not use a moving collector. |  | ||||||
| 	return Pointer{v.Pointer(), v.Type()} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IsNil reports whether the pointer is nil. |  | ||||||
| func (p Pointer) IsNil() bool { |  | ||||||
| 	return p.p == 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Uintptr returns the pointer as a uintptr. |  | ||||||
| func (p Pointer) Uintptr() uintptr { |  | ||||||
| 	return p.p |  | ||||||
| } |  | ||||||
							
								
								
									
										84
									
								
								vendor/github.com/google/go-cmp/cmp/options.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										84
									
								
								vendor/github.com/google/go-cmp/cmp/options.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -13,15 +13,15 @@ import ( | |||||||
| 	"github.com/google/go-cmp/cmp/internal/function" | 	"github.com/google/go-cmp/cmp/internal/function" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // Option configures for specific behavior of Equal and Diff. In particular, | // Option configures for specific behavior of [Equal] and [Diff]. In particular, | ||||||
| // the fundamental Option functions (Ignore, Transformer, and Comparer), | // the fundamental Option functions ([Ignore], [Transformer], and [Comparer]), | ||||||
| // configure how equality is determined. | // configure how equality is determined. | ||||||
| // | // | ||||||
| // The fundamental options may be composed with filters (FilterPath and | // The fundamental options may be composed with filters ([FilterPath] and | ||||||
| // FilterValues) to control the scope over which they are applied. | // [FilterValues]) to control the scope over which they are applied. | ||||||
| // | // | ||||||
| // The cmp/cmpopts package provides helper functions for creating options that | // The [github.com/google/go-cmp/cmp/cmpopts] package provides helper functions | ||||||
| // may be used with Equal and Diff. | // for creating options that may be used with [Equal] and [Diff]. | ||||||
| type Option interface { | type Option interface { | ||||||
| 	// filter applies all filters and returns the option that remains. | 	// filter applies all filters and returns the option that remains. | ||||||
| 	// Each option may only read s.curPath and call s.callTTBFunc. | 	// Each option may only read s.curPath and call s.callTTBFunc. | ||||||
| @@ -56,9 +56,9 @@ type core struct{} | |||||||
|  |  | ||||||
| func (core) isCore() {} | func (core) isCore() {} | ||||||
|  |  | ||||||
| // Options is a list of Option values that also satisfies the Option interface. | // Options is a list of [Option] values that also satisfies the [Option] interface. | ||||||
| // Helper comparison packages may return an Options value when packing multiple | // Helper comparison packages may return an Options value when packing multiple | ||||||
| // Option values into a single Option. When this package processes an Options, | // [Option] values into a single [Option]. When this package processes an Options, | ||||||
| // it will be implicitly expanded into a flat list. | // it will be implicitly expanded into a flat list. | ||||||
| // | // | ||||||
| // Applying a filter on an Options is equivalent to applying that same filter | // Applying a filter on an Options is equivalent to applying that same filter | ||||||
| @@ -105,16 +105,16 @@ func (opts Options) String() string { | |||||||
| 	return fmt.Sprintf("Options{%s}", strings.Join(ss, ", ")) | 	return fmt.Sprintf("Options{%s}", strings.Join(ss, ", ")) | ||||||
| } | } | ||||||
|  |  | ||||||
| // FilterPath returns a new Option where opt is only evaluated if filter f | // FilterPath returns a new [Option] where opt is only evaluated if filter f | ||||||
| // returns true for the current Path in the value tree. | // returns true for the current [Path] in the value tree. | ||||||
| // | // | ||||||
| // This filter is called even if a slice element or map entry is missing and | // This filter is called even if a slice element or map entry is missing and | ||||||
| // provides an opportunity to ignore such cases. The filter function must be | // provides an opportunity to ignore such cases. The filter function must be | ||||||
| // symmetric such that the filter result is identical regardless of whether the | // symmetric such that the filter result is identical regardless of whether the | ||||||
| // missing value is from x or y. | // missing value is from x or y. | ||||||
| // | // | ||||||
| // The option passed in may be an Ignore, Transformer, Comparer, Options, or | // The option passed in may be an [Ignore], [Transformer], [Comparer], [Options], or | ||||||
| // a previously filtered Option. | // a previously filtered [Option]. | ||||||
| func FilterPath(f func(Path) bool, opt Option) Option { | func FilterPath(f func(Path) bool, opt Option) Option { | ||||||
| 	if f == nil { | 	if f == nil { | ||||||
| 		panic("invalid path filter function") | 		panic("invalid path filter function") | ||||||
| @@ -142,7 +142,7 @@ func (f pathFilter) String() string { | |||||||
| 	return fmt.Sprintf("FilterPath(%s, %v)", function.NameOf(reflect.ValueOf(f.fnc)), f.opt) | 	return fmt.Sprintf("FilterPath(%s, %v)", function.NameOf(reflect.ValueOf(f.fnc)), f.opt) | ||||||
| } | } | ||||||
|  |  | ||||||
| // FilterValues returns a new Option where opt is only evaluated if filter f, | // FilterValues returns a new [Option] where opt is only evaluated if filter f, | ||||||
| // which is a function of the form "func(T, T) bool", returns true for the | // which is a function of the form "func(T, T) bool", returns true for the | ||||||
| // current pair of values being compared. If either value is invalid or | // current pair of values being compared. If either value is invalid or | ||||||
| // the type of the values is not assignable to T, then this filter implicitly | // the type of the values is not assignable to T, then this filter implicitly | ||||||
| @@ -154,8 +154,8 @@ func (f pathFilter) String() string { | |||||||
| // If T is an interface, it is possible that f is called with two values with | // If T is an interface, it is possible that f is called with two values with | ||||||
| // different concrete types that both implement T. | // different concrete types that both implement T. | ||||||
| // | // | ||||||
| // The option passed in may be an Ignore, Transformer, Comparer, Options, or | // The option passed in may be an [Ignore], [Transformer], [Comparer], [Options], or | ||||||
| // a previously filtered Option. | // a previously filtered [Option]. | ||||||
| func FilterValues(f interface{}, opt Option) Option { | func FilterValues(f interface{}, opt Option) Option { | ||||||
| 	v := reflect.ValueOf(f) | 	v := reflect.ValueOf(f) | ||||||
| 	if !function.IsType(v.Type(), function.ValueFilter) || v.IsNil() { | 	if !function.IsType(v.Type(), function.ValueFilter) || v.IsNil() { | ||||||
| @@ -192,9 +192,9 @@ func (f valuesFilter) String() string { | |||||||
| 	return fmt.Sprintf("FilterValues(%s, %v)", function.NameOf(f.fnc), f.opt) | 	return fmt.Sprintf("FilterValues(%s, %v)", function.NameOf(f.fnc), f.opt) | ||||||
| } | } | ||||||
|  |  | ||||||
| // Ignore is an Option that causes all comparisons to be ignored. | // Ignore is an [Option] that causes all comparisons to be ignored. | ||||||
| // This value is intended to be combined with FilterPath or FilterValues. | // This value is intended to be combined with [FilterPath] or [FilterValues]. | ||||||
| // It is an error to pass an unfiltered Ignore option to Equal. | // It is an error to pass an unfiltered Ignore option to [Equal]. | ||||||
| func Ignore() Option { return ignore{} } | func Ignore() Option { return ignore{} } | ||||||
|  |  | ||||||
| type ignore struct{ core } | type ignore struct{ core } | ||||||
| @@ -234,6 +234,8 @@ func (validator) apply(s *state, vx, vy reflect.Value) { | |||||||
| 			name = fmt.Sprintf("%q.%v", t.PkgPath(), t.Name()) // e.g., "path/to/package".MyType | 			name = fmt.Sprintf("%q.%v", t.PkgPath(), t.Name()) // e.g., "path/to/package".MyType | ||||||
| 			if _, ok := reflect.New(t).Interface().(error); ok { | 			if _, ok := reflect.New(t).Interface().(error); ok { | ||||||
| 				help = "consider using cmpopts.EquateErrors to compare error values" | 				help = "consider using cmpopts.EquateErrors to compare error values" | ||||||
|  | 			} else if t.Comparable() { | ||||||
|  | 				help = "consider using cmpopts.EquateComparable to compare comparable Go types" | ||||||
| 			} | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			// Unnamed type with unexported fields. Derive PkgPath from field. | 			// Unnamed type with unexported fields. Derive PkgPath from field. | ||||||
| @@ -254,7 +256,7 @@ const identRx = `[_\p{L}][_\p{L}\p{N}]*` | |||||||
|  |  | ||||||
| var identsRx = regexp.MustCompile(`^` + identRx + `(\.` + identRx + `)*$`) | var identsRx = regexp.MustCompile(`^` + identRx + `(\.` + identRx + `)*$`) | ||||||
|  |  | ||||||
| // Transformer returns an Option that applies a transformation function that | // Transformer returns an [Option] that applies a transformation function that | ||||||
| // converts values of a certain type into that of another. | // converts values of a certain type into that of another. | ||||||
| // | // | ||||||
| // The transformer f must be a function "func(T) R" that converts values of | // The transformer f must be a function "func(T) R" that converts values of | ||||||
| @@ -265,13 +267,14 @@ var identsRx = regexp.MustCompile(`^` + identRx + `(\.` + identRx + `)*$`) | |||||||
| // same transform to the output of itself (e.g., in the case where the | // same transform to the output of itself (e.g., in the case where the | ||||||
| // input and output types are the same), an implicit filter is added such that | // input and output types are the same), an implicit filter is added such that | ||||||
| // a transformer is applicable only if that exact transformer is not already | // a transformer is applicable only if that exact transformer is not already | ||||||
| // in the tail of the Path since the last non-Transform step. | // in the tail of the [Path] since the last non-[Transform] step. | ||||||
| // For situations where the implicit filter is still insufficient, | // For situations where the implicit filter is still insufficient, | ||||||
| // consider using cmpopts.AcyclicTransformer, which adds a filter | // consider using [github.com/google/go-cmp/cmp/cmpopts.AcyclicTransformer], | ||||||
| // to prevent the transformer from being recursively applied upon itself. | // which adds a filter to prevent the transformer from | ||||||
|  | // being recursively applied upon itself. | ||||||
| // | // | ||||||
| // The name is a user provided label that is used as the Transform.Name in the | // The name is a user provided label that is used as the [Transform.Name] in the | ||||||
| // transformation PathStep (and eventually shown in the Diff output). | // transformation [PathStep] (and eventually shown in the [Diff] output). | ||||||
| // The name must be a valid identifier or qualified identifier in Go syntax. | // The name must be a valid identifier or qualified identifier in Go syntax. | ||||||
| // If empty, an arbitrary name is used. | // If empty, an arbitrary name is used. | ||||||
| func Transformer(name string, f interface{}) Option { | func Transformer(name string, f interface{}) Option { | ||||||
| @@ -329,7 +332,7 @@ func (tr transformer) String() string { | |||||||
| 	return fmt.Sprintf("Transformer(%s, %s)", tr.name, function.NameOf(tr.fnc)) | 	return fmt.Sprintf("Transformer(%s, %s)", tr.name, function.NameOf(tr.fnc)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // Comparer returns an Option that determines whether two values are equal | // Comparer returns an [Option] that determines whether two values are equal | ||||||
| // to each other. | // to each other. | ||||||
| // | // | ||||||
| // The comparer f must be a function "func(T, T) bool" and is implicitly | // The comparer f must be a function "func(T, T) bool" and is implicitly | ||||||
| @@ -377,35 +380,32 @@ func (cm comparer) String() string { | |||||||
| 	return fmt.Sprintf("Comparer(%s)", function.NameOf(cm.fnc)) | 	return fmt.Sprintf("Comparer(%s)", function.NameOf(cm.fnc)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // Exporter returns an Option that specifies whether Equal is allowed to | // Exporter returns an [Option] that specifies whether [Equal] is allowed to | ||||||
| // introspect into the unexported fields of certain struct types. | // introspect into the unexported fields of certain struct types. | ||||||
| // | // | ||||||
| // Users of this option must understand that comparing on unexported fields | // Users of this option must understand that comparing on unexported fields | ||||||
| // from external packages is not safe since changes in the internal | // from external packages is not safe since changes in the internal | ||||||
| // implementation of some external package may cause the result of Equal | // implementation of some external package may cause the result of [Equal] | ||||||
| // to unexpectedly change. However, it may be valid to use this option on types | // to unexpectedly change. However, it may be valid to use this option on types | ||||||
| // defined in an internal package where the semantic meaning of an unexported | // defined in an internal package where the semantic meaning of an unexported | ||||||
| // field is in the control of the user. | // field is in the control of the user. | ||||||
| // | // | ||||||
| // In many cases, a custom Comparer should be used instead that defines | // In many cases, a custom [Comparer] should be used instead that defines | ||||||
| // equality as a function of the public API of a type rather than the underlying | // equality as a function of the public API of a type rather than the underlying | ||||||
| // unexported implementation. | // unexported implementation. | ||||||
| // | // | ||||||
| // For example, the reflect.Type documentation defines equality to be determined | // For example, the [reflect.Type] documentation defines equality to be determined | ||||||
| // by the == operator on the interface (essentially performing a shallow pointer | // by the == operator on the interface (essentially performing a shallow pointer | ||||||
| // comparison) and most attempts to compare *regexp.Regexp types are interested | // comparison) and most attempts to compare *[regexp.Regexp] types are interested | ||||||
| // in only checking that the regular expression strings are equal. | // in only checking that the regular expression strings are equal. | ||||||
| // Both of these are accomplished using Comparers: | // Both of these are accomplished using [Comparer] options: | ||||||
| // | // | ||||||
| //	Comparer(func(x, y reflect.Type) bool { return x == y }) | //	Comparer(func(x, y reflect.Type) bool { return x == y }) | ||||||
| //	Comparer(func(x, y *regexp.Regexp) bool { return x.String() == y.String() }) | //	Comparer(func(x, y *regexp.Regexp) bool { return x.String() == y.String() }) | ||||||
| // | // | ||||||
| // In other cases, the cmpopts.IgnoreUnexported option can be used to ignore | // In other cases, the [github.com/google/go-cmp/cmp/cmpopts.IgnoreUnexported] | ||||||
| // all unexported fields on specified struct types. | // option can be used to ignore all unexported fields on specified struct types. | ||||||
| func Exporter(f func(reflect.Type) bool) Option { | func Exporter(f func(reflect.Type) bool) Option { | ||||||
| 	if !supportExporters { |  | ||||||
| 		panic("Exporter is not supported on purego builds") |  | ||||||
| 	} |  | ||||||
| 	return exporter(f) | 	return exporter(f) | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -415,10 +415,10 @@ func (exporter) filter(_ *state, _ reflect.Type, _, _ reflect.Value) applicableO | |||||||
| 	panic("not implemented") | 	panic("not implemented") | ||||||
| } | } | ||||||
|  |  | ||||||
| // AllowUnexported returns an Options that allows Equal to forcibly introspect | // AllowUnexported returns an [Option] that allows [Equal] to forcibly introspect | ||||||
| // unexported fields of the specified struct types. | // unexported fields of the specified struct types. | ||||||
| // | // | ||||||
| // See Exporter for the proper use of this option. | // See [Exporter] for the proper use of this option. | ||||||
| func AllowUnexported(types ...interface{}) Option { | func AllowUnexported(types ...interface{}) Option { | ||||||
| 	m := make(map[reflect.Type]bool) | 	m := make(map[reflect.Type]bool) | ||||||
| 	for _, typ := range types { | 	for _, typ := range types { | ||||||
| @@ -432,7 +432,7 @@ func AllowUnexported(types ...interface{}) Option { | |||||||
| } | } | ||||||
|  |  | ||||||
| // Result represents the comparison result for a single node and | // Result represents the comparison result for a single node and | ||||||
| // is provided by cmp when calling Report (see Reporter). | // is provided by cmp when calling Report (see [Reporter]). | ||||||
| type Result struct { | type Result struct { | ||||||
| 	_     [0]func() // Make Result incomparable | 	_     [0]func() // Make Result incomparable | ||||||
| 	flags resultFlags | 	flags resultFlags | ||||||
| @@ -445,7 +445,7 @@ func (r Result) Equal() bool { | |||||||
| } | } | ||||||
|  |  | ||||||
| // ByIgnore reports whether the node is equal because it was ignored. | // ByIgnore reports whether the node is equal because it was ignored. | ||||||
| // This never reports true if Equal reports false. | // This never reports true if [Result.Equal] reports false. | ||||||
| func (r Result) ByIgnore() bool { | func (r Result) ByIgnore() bool { | ||||||
| 	return r.flags&reportByIgnore != 0 | 	return r.flags&reportByIgnore != 0 | ||||||
| } | } | ||||||
| @@ -455,7 +455,7 @@ func (r Result) ByMethod() bool { | |||||||
| 	return r.flags&reportByMethod != 0 | 	return r.flags&reportByMethod != 0 | ||||||
| } | } | ||||||
|  |  | ||||||
| // ByFunc reports whether a Comparer function determined equality. | // ByFunc reports whether a [Comparer] function determined equality. | ||||||
| func (r Result) ByFunc() bool { | func (r Result) ByFunc() bool { | ||||||
| 	return r.flags&reportByFunc != 0 | 	return r.flags&reportByFunc != 0 | ||||||
| } | } | ||||||
| @@ -478,7 +478,7 @@ const ( | |||||||
| 	reportByCycle | 	reportByCycle | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // Reporter is an Option that can be passed to Equal. When Equal traverses | // Reporter is an [Option] that can be passed to [Equal]. When [Equal] traverses | ||||||
| // the value trees, it calls PushStep as it descends into each node in the | // the value trees, it calls PushStep as it descends into each node in the | ||||||
| // tree and PopStep as it ascend out of the node. The leaves of the tree are | // tree and PopStep as it ascend out of the node. The leaves of the tree are | ||||||
| // either compared (determined to be equal or not equal) or ignored and reported | // either compared (determined to be equal or not equal) or ignored and reported | ||||||
|   | |||||||
							
								
								
									
										46
									
								
								vendor/github.com/google/go-cmp/cmp/path.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										46
									
								
								vendor/github.com/google/go-cmp/cmp/path.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -14,9 +14,9 @@ import ( | |||||||
| 	"github.com/google/go-cmp/cmp/internal/value" | 	"github.com/google/go-cmp/cmp/internal/value" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // Path is a list of PathSteps describing the sequence of operations to get | // Path is a list of [PathStep] describing the sequence of operations to get | ||||||
| // from some root type to the current position in the value tree. | // from some root type to the current position in the value tree. | ||||||
| // The first Path element is always an operation-less PathStep that exists | // The first Path element is always an operation-less [PathStep] that exists | ||||||
| // simply to identify the initial type. | // simply to identify the initial type. | ||||||
| // | // | ||||||
| // When traversing structs with embedded structs, the embedded struct will | // When traversing structs with embedded structs, the embedded struct will | ||||||
| @@ -29,8 +29,13 @@ type Path []PathStep | |||||||
| // a value's tree structure. Users of this package never need to implement | // a value's tree structure. Users of this package never need to implement | ||||||
| // these types as values of this type will be returned by this package. | // these types as values of this type will be returned by this package. | ||||||
| // | // | ||||||
| // Implementations of this interface are | // Implementations of this interface: | ||||||
| // StructField, SliceIndex, MapIndex, Indirect, TypeAssertion, and Transform. | //   - [StructField] | ||||||
|  | //   - [SliceIndex] | ||||||
|  | //   - [MapIndex] | ||||||
|  | //   - [Indirect] | ||||||
|  | //   - [TypeAssertion] | ||||||
|  | //   - [Transform] | ||||||
| type PathStep interface { | type PathStep interface { | ||||||
| 	String() string | 	String() string | ||||||
|  |  | ||||||
| @@ -70,8 +75,9 @@ func (pa *Path) pop() { | |||||||
| 	*pa = (*pa)[:len(*pa)-1] | 	*pa = (*pa)[:len(*pa)-1] | ||||||
| } | } | ||||||
|  |  | ||||||
| // Last returns the last PathStep in the Path. | // Last returns the last [PathStep] in the Path. | ||||||
| // If the path is empty, this returns a non-nil PathStep that reports a nil Type. | // If the path is empty, this returns a non-nil [PathStep] | ||||||
|  | // that reports a nil [PathStep.Type]. | ||||||
| func (pa Path) Last() PathStep { | func (pa Path) Last() PathStep { | ||||||
| 	return pa.Index(-1) | 	return pa.Index(-1) | ||||||
| } | } | ||||||
| @@ -79,7 +85,8 @@ func (pa Path) Last() PathStep { | |||||||
| // Index returns the ith step in the Path and supports negative indexing. | // Index returns the ith step in the Path and supports negative indexing. | ||||||
| // A negative index starts counting from the tail of the Path such that -1 | // A negative index starts counting from the tail of the Path such that -1 | ||||||
| // refers to the last step, -2 refers to the second-to-last step, and so on. | // refers to the last step, -2 refers to the second-to-last step, and so on. | ||||||
| // If index is invalid, this returns a non-nil PathStep that reports a nil Type. | // If index is invalid, this returns a non-nil [PathStep] | ||||||
|  | // that reports a nil [PathStep.Type]. | ||||||
| func (pa Path) Index(i int) PathStep { | func (pa Path) Index(i int) PathStep { | ||||||
| 	if i < 0 { | 	if i < 0 { | ||||||
| 		i = len(pa) + i | 		i = len(pa) + i | ||||||
| @@ -168,7 +175,8 @@ func (ps pathStep) String() string { | |||||||
| 	return fmt.Sprintf("{%s}", s) | 	return fmt.Sprintf("{%s}", s) | ||||||
| } | } | ||||||
|  |  | ||||||
| // StructField represents a struct field access on a field called Name. | // StructField is a [PathStep] that represents a struct field access | ||||||
|  | // on a field called [StructField.Name]. | ||||||
| type StructField struct{ *structField } | type StructField struct{ *structField } | ||||||
| type structField struct { | type structField struct { | ||||||
| 	pathStep | 	pathStep | ||||||
| @@ -204,10 +212,11 @@ func (sf StructField) String() string { return fmt.Sprintf(".%s", sf.name) } | |||||||
| func (sf StructField) Name() string { return sf.name } | func (sf StructField) Name() string { return sf.name } | ||||||
|  |  | ||||||
| // Index is the index of the field in the parent struct type. | // Index is the index of the field in the parent struct type. | ||||||
| // See reflect.Type.Field. | // See [reflect.Type.Field]. | ||||||
| func (sf StructField) Index() int { return sf.idx } | func (sf StructField) Index() int { return sf.idx } | ||||||
|  |  | ||||||
| // SliceIndex is an index operation on a slice or array at some index Key. | // SliceIndex is a [PathStep] that represents an index operation on | ||||||
|  | // a slice or array at some index [SliceIndex.Key]. | ||||||
| type SliceIndex struct{ *sliceIndex } | type SliceIndex struct{ *sliceIndex } | ||||||
| type sliceIndex struct { | type sliceIndex struct { | ||||||
| 	pathStep | 	pathStep | ||||||
| @@ -247,12 +256,12 @@ func (si SliceIndex) Key() int { | |||||||
| // all of the indexes to be shifted. If an index is -1, then that | // all of the indexes to be shifted. If an index is -1, then that | ||||||
| // indicates that the element does not exist in the associated slice. | // indicates that the element does not exist in the associated slice. | ||||||
| // | // | ||||||
| // Key is guaranteed to return -1 if and only if the indexes returned | // [SliceIndex.Key] is guaranteed to return -1 if and only if the indexes | ||||||
| // by SplitKeys are not the same. SplitKeys will never return -1 for | // returned by SplitKeys are not the same. SplitKeys will never return -1 for | ||||||
| // both indexes. | // both indexes. | ||||||
| func (si SliceIndex) SplitKeys() (ix, iy int) { return si.xkey, si.ykey } | func (si SliceIndex) SplitKeys() (ix, iy int) { return si.xkey, si.ykey } | ||||||
|  |  | ||||||
| // MapIndex is an index operation on a map at some index Key. | // MapIndex is a [PathStep] that represents an index operation on a map at some index Key. | ||||||
| type MapIndex struct{ *mapIndex } | type MapIndex struct{ *mapIndex } | ||||||
| type mapIndex struct { | type mapIndex struct { | ||||||
| 	pathStep | 	pathStep | ||||||
| @@ -266,7 +275,7 @@ func (mi MapIndex) String() string                 { return fmt.Sprintf("[%#v]", | |||||||
| // Key is the value of the map key. | // Key is the value of the map key. | ||||||
| func (mi MapIndex) Key() reflect.Value { return mi.key } | func (mi MapIndex) Key() reflect.Value { return mi.key } | ||||||
|  |  | ||||||
| // Indirect represents pointer indirection on the parent type. | // Indirect is a [PathStep] that represents pointer indirection on the parent type. | ||||||
| type Indirect struct{ *indirect } | type Indirect struct{ *indirect } | ||||||
| type indirect struct { | type indirect struct { | ||||||
| 	pathStep | 	pathStep | ||||||
| @@ -276,7 +285,7 @@ func (in Indirect) Type() reflect.Type             { return in.typ } | |||||||
| func (in Indirect) Values() (vx, vy reflect.Value) { return in.vx, in.vy } | func (in Indirect) Values() (vx, vy reflect.Value) { return in.vx, in.vy } | ||||||
| func (in Indirect) String() string                 { return "*" } | func (in Indirect) String() string                 { return "*" } | ||||||
|  |  | ||||||
| // TypeAssertion represents a type assertion on an interface. | // TypeAssertion is a [PathStep] that represents a type assertion on an interface. | ||||||
| type TypeAssertion struct{ *typeAssertion } | type TypeAssertion struct{ *typeAssertion } | ||||||
| type typeAssertion struct { | type typeAssertion struct { | ||||||
| 	pathStep | 	pathStep | ||||||
| @@ -286,7 +295,8 @@ func (ta TypeAssertion) Type() reflect.Type             { return ta.typ } | |||||||
| func (ta TypeAssertion) Values() (vx, vy reflect.Value) { return ta.vx, ta.vy } | func (ta TypeAssertion) Values() (vx, vy reflect.Value) { return ta.vx, ta.vy } | ||||||
| func (ta TypeAssertion) String() string                 { return fmt.Sprintf(".(%v)", value.TypeString(ta.typ, false)) } | func (ta TypeAssertion) String() string                 { return fmt.Sprintf(".(%v)", value.TypeString(ta.typ, false)) } | ||||||
|  |  | ||||||
| // Transform is a transformation from the parent type to the current type. | // Transform is a [PathStep] that represents a transformation | ||||||
|  | // from the parent type to the current type. | ||||||
| type Transform struct{ *transform } | type Transform struct{ *transform } | ||||||
| type transform struct { | type transform struct { | ||||||
| 	pathStep | 	pathStep | ||||||
| @@ -297,13 +307,13 @@ func (tf Transform) Type() reflect.Type             { return tf.typ } | |||||||
| func (tf Transform) Values() (vx, vy reflect.Value) { return tf.vx, tf.vy } | func (tf Transform) Values() (vx, vy reflect.Value) { return tf.vx, tf.vy } | ||||||
| func (tf Transform) String() string                 { return fmt.Sprintf("%s()", tf.trans.name) } | func (tf Transform) String() string                 { return fmt.Sprintf("%s()", tf.trans.name) } | ||||||
|  |  | ||||||
| // Name is the name of the Transformer. | // Name is the name of the [Transformer]. | ||||||
| func (tf Transform) Name() string { return tf.trans.name } | func (tf Transform) Name() string { return tf.trans.name } | ||||||
|  |  | ||||||
| // Func is the function pointer to the transformer function. | // Func is the function pointer to the transformer function. | ||||||
| func (tf Transform) Func() reflect.Value { return tf.trans.fnc } | func (tf Transform) Func() reflect.Value { return tf.trans.fnc } | ||||||
|  |  | ||||||
| // Option returns the originally constructed Transformer option. | // Option returns the originally constructed [Transformer] option. | ||||||
| // The == operator can be used to detect the exact option used. | // The == operator can be used to detect the exact option used. | ||||||
| func (tf Transform) Option() Option { return tf.trans } | func (tf Transform) Option() Option { return tf.trans } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								vendor/github.com/google/go-cmp/cmp/report_reflect.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/google/go-cmp/cmp/report_reflect.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -199,7 +199,7 @@ func (opts formatOptions) FormatValue(v reflect.Value, parentKind reflect.Kind, | |||||||
| 				break | 				break | ||||||
| 			} | 			} | ||||||
| 			sf := t.Field(i) | 			sf := t.Field(i) | ||||||
| 			if supportExporters && !isExported(sf.Name) { | 			if !isExported(sf.Name) { | ||||||
| 				vv = retrieveUnexportedField(v, sf, true) | 				vv = retrieveUnexportedField(v, sf, true) | ||||||
| 			} | 			} | ||||||
| 			s := opts.WithTypeMode(autoType).FormatValue(vv, t.Kind(), ptrs) | 			s := opts.WithTypeMode(autoType).FormatValue(vv, t.Kind(), ptrs) | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user