diff --git a/Makefile b/Makefile index 3023e0217..12f8e8830 100644 --- a/Makefile +++ b/Makefile @@ -25,6 +25,9 @@ export CERT_MGR_VERSION := v1.9.0 export CATALOGD_VERSION := $(shell go list -mod=mod -m -f "{{.Version}}" github.com/operator-framework/catalogd) export WAIT_TIMEOUT := 60s +# Install default ClusterCatalogs +export INSTALL_DEFAULT_CATALOGS := true + # By default setup-envtest will write to $XDG_DATA_HOME, or $HOME/.local/share if that is not defined. # If $HOME is not set, we need to specify a binary directory to prevent an error in setup-envtest. # Useful for some CI/CD environments that set neither $XDG_DATA_HOME nor $HOME. @@ -148,11 +151,11 @@ test-unit: $(SETUP_ENVTEST) #HELP Run the unit tests eval $$($(SETUP_ENVTEST) use -p env $(ENVTEST_VERSION) $(SETUP_ENVTEST_BIN_DIR_OVERRIDE)) && CGO_ENABLED=1 go test -count=1 -race -short $(UNIT_TEST_DIRS) -cover -coverprofile ${ROOT_DIR}/coverage/unit.out -test.gocoverdir=$(ROOT_DIR)/coverage/unit image-registry: ## Setup in-cluster image registry - ./test/tools/image-registry.sh $(E2E_REGISTRY_NAMESPACE) $(E2E_REGISTRY_NAME) + ./hack/test/image-registry.sh $(E2E_REGISTRY_NAMESPACE) $(E2E_REGISTRY_NAME) build-push-e2e-catalog: ## Build the testdata catalog used for e2e tests and push it to the image registry - ./test/tools/build-push-e2e-catalog.sh $(E2E_REGISTRY_NAMESPACE) $(LOCAL_REGISTRY_HOST)/$(E2E_TEST_CATALOG_V1) - ./test/tools/build-push-e2e-catalog.sh $(E2E_REGISTRY_NAMESPACE) $(LOCAL_REGISTRY_HOST)/$(E2E_TEST_CATALOG_V2) + ./hack/test/build-push-e2e-catalog.sh $(E2E_REGISTRY_NAMESPACE) $(LOCAL_REGISTRY_HOST)/$(E2E_TEST_CATALOG_V1) + ./hack/test/build-push-e2e-catalog.sh $(E2E_REGISTRY_NAMESPACE) $(LOCAL_REGISTRY_HOST)/$(E2E_TEST_CATALOG_V2) # When running the e2e suite, you can set the ARTIFACT_PATH variable to the absolute path # of the directory for the operator-controller e2e tests to store the artifacts, which @@ -168,6 +171,7 @@ test-e2e: run image-registry build-push-e2e-catalog registry-load-bundles e2e e2 .PHONY: extension-developer-e2e extension-developer-e2e: KUSTOMIZE_BUILD_DIR := config/overlays/cert-manager extension-developer-e2e: KIND_CLUSTER_NAME := operator-controller-ext-dev-e2e #EXHELP Run extension-developer e2e on local kind cluster +extension-developer-e2e: export INSTALL_DEFAULT_CATALOGS := false #EXHELP Run extension-developer e2e on local kind cluster extension-developer-e2e: run image-registry test-ext-dev-e2e kind-clean .PHONY: run-latest-release @@ -176,7 +180,7 @@ run-latest-release: .PHONY: pre-upgrade-setup pre-upgrade-setup: - ./hack/pre-upgrade-setup.sh $(CATALOG_IMG) $(TEST_CLUSTER_CATALOG_NAME) $(TEST_CLUSTER_EXTENSION_NAME) + ./hack/test/pre-upgrade-setup.sh $(CATALOG_IMG) $(TEST_CLUSTER_CATALOG_NAME) $(TEST_CLUSTER_EXTENSION_NAME) .PHONY: post-upgrade-checks post-upgrade-checks: @@ -190,7 +194,7 @@ test-upgrade-e2e: kind-cluster run-latest-release image-registry build-push-e2e- .PHONY: e2e-coverage e2e-coverage: - COVERAGE_OUTPUT=./coverage/e2e.out ./hack/e2e-coverage.sh + COVERAGE_OUTPUT=./coverage/e2e.out ./hack/test/e2e-coverage.sh .PHONY: kind-load kind-load: $(KIND) #EXHELP Loads the currently constructed image onto the cluster. @@ -200,7 +204,7 @@ kind-load: $(KIND) #EXHELP Loads the currently constructed image onto the cluste kind-deploy: export MANIFEST="./operator-controller.yaml" kind-deploy: manifests $(KUSTOMIZE) #EXHELP Install controller and dependencies onto the kind cluster. $(KUSTOMIZE) build $(KUSTOMIZE_BUILD_DIR) > operator-controller.yaml - envsubst '$$CATALOGD_VERSION,$$CERT_MGR_VERSION,$$MANIFEST' < scripts/install.tpl.sh | bash -s + envsubst '$$CATALOGD_VERSION,$$CERT_MGR_VERSION,$$INSTALL_DEFAULT_CATALOGS,$$MANIFEST' < scripts/install.tpl.sh | bash -s .PHONY: kind-cluster kind-cluster: $(KIND) #EXHELP Standup a kind cluster. @@ -284,7 +288,7 @@ release: $(GORELEASER) #EXHELP Runs goreleaser for the operator-controller. By d quickstart: export MANIFEST := https://github.com/operator-framework/operator-controller/releases/download/$(VERSION)/operator-controller.yaml quickstart: $(KUSTOMIZE) manifests #EXHELP Generate the installation release manifests and scripts. $(KUSTOMIZE) build $(KUSTOMIZE_BUILD_DIR) | sed "s/:devel/:$(VERSION)/g" > operator-controller.yaml - envsubst '$$CATALOGD_VERSION,$$CERT_MGR_VERSION,$$MANIFEST' < scripts/install.tpl.sh > install.sh + envsubst '$$CATALOGD_VERSION,$$CERT_MGR_VERSION,$$INSTALL_DEFAULT_CATALOGS,$$MANIFEST' < scripts/install.tpl.sh > install.sh ##@ Docs diff --git a/api/v1alpha1/clusterextension_types.go b/api/v1alpha1/clusterextension_types.go index a784ddd4a..c88cb7add 100644 --- a/api/v1alpha1/clusterextension_types.go +++ b/api/v1alpha1/clusterextension_types.go @@ -128,21 +128,17 @@ const ( ReasonErrorGettingClient = "ErrorGettingClient" ReasonBundleLoadFailed = "BundleLoadFailed" - ReasonInstallationFailed = "InstallationFailed" - ReasonInstallationStatusUnknown = "InstallationStatusUnknown" - ReasonInstallationSucceeded = "InstallationSucceeded" - ReasonResolutionFailed = "ResolutionFailed" + ReasonInstallationFailed = "InstallationFailed" + ReasonResolutionFailed = "ResolutionFailed" ReasonSuccess = "Success" ReasonDeprecated = "Deprecated" ReasonUpgradeFailed = "UpgradeFailed" - ReasonUnpackPending = "UnpackPending" ReasonUnpackSuccess = "UnpackSuccess" ReasonUnpackFailed = "UnpackFailed" ReasonErrorGettingReleaseState = "ErrorGettingReleaseState" - ReasonCreateDynamicWatchFailed = "CreateDynamicWatchFailed" ) func init() { @@ -158,7 +154,6 @@ func init() { ) // TODO(user): add Reasons from above conditionsets.ConditionReasons = append(conditionsets.ConditionReasons, - ReasonInstallationSucceeded, ReasonResolutionFailed, ReasonInstallationFailed, ReasonSuccess, @@ -166,12 +161,9 @@ func init() { ReasonUpgradeFailed, ReasonBundleLoadFailed, ReasonErrorGettingClient, - ReasonInstallationStatusUnknown, - ReasonUnpackPending, ReasonUnpackSuccess, ReasonUnpackFailed, ReasonErrorGettingReleaseState, - ReasonCreateDynamicWatchFailed, ) } @@ -180,8 +172,11 @@ type BundleMetadata struct { Version string `json:"version"` } -// ClusterExtensionStatus defines the observed state of ClusterExtension +// ClusterExtensionStatus defines the observed state of ClusterExtension. type ClusterExtensionStatus struct { + // InstalledBundle should only be modified when a new bundle is successfully installed. This ensures that if there + // is a previously successfully installed a bundle, and an upgrade fails, it is still communicated that there is + // still a bundle that is currently installed and owned by the ClusterExtension. // +optional InstalledBundle *BundleMetadata `json:"installedBundle,omitempty"` // +optional diff --git a/cmd/manager/main.go b/cmd/manager/main.go index a7d4bcda7..8da6967fe 100644 --- a/cmd/manager/main.go +++ b/cmd/manager/main.go @@ -20,15 +20,20 @@ import ( "context" "flag" "fmt" + "net/http" "os" "path/filepath" + "time" "github.com/spf13/pflag" "go.uber.org/zap/zapcore" apiextensionsv1client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" k8slabels "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/selection" + "k8s.io/apimachinery/pkg/types" + corev1client "k8s.io/client-go/kubernetes/typed/core/v1" _ "k8s.io/client-go/plugin/pkg/client/auth" + "k8s.io/client-go/rest" ctrl "sigs.k8s.io/controller-runtime" crcache "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/client" @@ -42,8 +47,10 @@ import ( ocv1alpha1 "github.com/operator-framework/operator-controller/api/v1alpha1" "github.com/operator-framework/operator-controller/internal/action" + "github.com/operator-framework/operator-controller/internal/authentication" "github.com/operator-framework/operator-controller/internal/catalogmetadata/cache" catalogclient "github.com/operator-framework/operator-controller/internal/catalogmetadata/client" + "github.com/operator-framework/operator-controller/internal/contentmanager" "github.com/operator-framework/operator-controller/internal/controllers" "github.com/operator-framework/operator-controller/internal/httputil" "github.com/operator-framework/operator-controller/internal/labels" @@ -158,9 +165,36 @@ func main() { ext := obj.(*ocv1alpha1.ClusterExtension) return ext.Spec.InstallNamespace, nil }) + coreClient, err := corev1client.NewForConfig(mgr.GetConfig()) + if err != nil { + setupLog.Error(err, "unable to create core client") + os.Exit(1) + } + tokenGetter := authentication.NewTokenGetter(coreClient, authentication.WithExpirationDuration(1*time.Hour)) + + restConfigMapper := func(ctx context.Context, o client.Object, c *rest.Config) (*rest.Config, error) { + cExt, ok := o.(*ocv1alpha1.ClusterExtension) + if !ok { + return c, nil + } + namespacedName := types.NamespacedName{ + Name: cExt.Spec.ServiceAccount.Name, + Namespace: cExt.Spec.InstallNamespace, + } + tempConfig := rest.AnonymousClientConfig(c) + tempConfig.WrapTransport = func(rt http.RoundTripper) http.RoundTripper { + return &authentication.TokenInjectingRoundTripper{ + Tripper: rt, + TokenGetter: tokenGetter, + Key: namespacedName, + } + } + return tempConfig, nil + } cfgGetter, err := helmclient.NewActionConfigGetter(mgr.GetConfig(), mgr.GetRESTMapper(), helmclient.StorageNamespaceMapper(installNamespaceMapper), helmclient.ClientNamespaceMapper(installNamespaceMapper), + helmclient.RestConfigMapper(restConfigMapper), ) if err != nil { setupLog.Error(err, "unable to config for creating helm client") @@ -170,13 +204,12 @@ func main() { acg, err := action.NewWrappedActionClientGetter(cfgGetter, helmclient.WithFailureRollbacks(false), ) - if err != nil { setupLog.Error(err, "unable to create helm client") os.Exit(1) } - certPool, err := httputil.NewCertPool(caCertDir) + certPoolWatcher, err := httputil.NewCertPoolWatcher(caCertDir, ctrl.Log.WithName("cert-pool")) if err != nil { setupLog.Error(err, "unable to create CA certificate pool") os.Exit(1) @@ -184,8 +217,8 @@ func main() { unpacker := &source.ImageRegistry{ BaseCachePath: filepath.Join(cachePath, "unpack"), // TODO: This needs to be derived per extension via ext.Spec.InstallNamespace - AuthNamespace: systemNamespace, - CaCertPool: certPool, + AuthNamespace: systemNamespace, + CertPoolWatcher: certPoolWatcher, } clusterExtensionFinalizers := crfinalizer.NewFinalizers() @@ -210,18 +243,15 @@ func main() { } cl := mgr.GetClient() - httpClient, err := httputil.BuildHTTPClient(certPool) - if err != nil { - setupLog.Error(err, "unable to create catalogd http client") - os.Exit(1) - } catalogsCachePath := filepath.Join(cachePath, "catalogs") if err := os.MkdirAll(catalogsCachePath, 0700); err != nil { setupLog.Error(err, "unable to create catalogs cache directory") os.Exit(1) } - catalogClient := catalogclient.New(cache.NewFilesystemCache(catalogsCachePath, httpClient)) + catalogClient := catalogclient.New(cache.NewFilesystemCache(catalogsCachePath, func() (*http.Client, error) { + return httputil.BuildHTTPClient(certPoolWatcher) + })) resolver := &resolve.CatalogResolver{ WalkCatalogsFunc: resolve.CatalogWalker( @@ -243,8 +273,8 @@ func main() { Unpacker: unpacker, InstalledBundleGetter: &controllers.DefaultInstalledBundleGetter{ActionClientGetter: acg}, Finalizers: clusterExtensionFinalizers, - CaCertPool: certPool, Preflights: preflights, + Watcher: contentmanager.New(restConfigMapper, mgr.GetConfig(), mgr.GetRESTMapper()), }).SetupWithManager(mgr); err != nil { setupLog.Error(err, "unable to create controller", "controller", "ClusterExtension") os.Exit(1) diff --git a/commitchecker.yaml b/commitchecker.yaml index e3d8f4fc0..a6227d2fc 100644 --- a/commitchecker.yaml +++ b/commitchecker.yaml @@ -1,4 +1,4 @@ -expectedMergeBase: 6cd022e8e4d3825175c05a9ceecb748291a1a8f1 +expectedMergeBase: 989a3df266062b3add4b4f330aa0f61659de0994 upstreamBranch: main upstreamOrg: operator-framework upstreamRepo: operator-controller diff --git a/config/base/crd/bases/olm.operatorframework.io_clusterextensions.yaml b/config/base/crd/bases/olm.operatorframework.io_clusterextensions.yaml index 9b92a3045..24cdf64af 100644 --- a/config/base/crd/bases/olm.operatorframework.io_clusterextensions.yaml +++ b/config/base/crd/bases/olm.operatorframework.io_clusterextensions.yaml @@ -113,7 +113,7 @@ spec: - serviceAccount type: object status: - description: ClusterExtensionStatus defines the observed state of ClusterExtension + description: ClusterExtensionStatus defines the observed state of ClusterExtension. properties: conditions: items: @@ -188,6 +188,10 @@ spec: - type x-kubernetes-list-type: map installedBundle: + description: |- + InstalledBundle should only be modified when a new bundle is successfully installed. This ensures that if there + is a previously successfully installed a bundle, and an upgrade fails, it is still communicated that there is + still a bundle that is currently installed and owned by the ClusterExtension. properties: name: type: string diff --git a/config/base/rbac/role.yaml b/config/base/rbac/role.yaml index 3d36de44e..0130a1662 100644 --- a/config/base/rbac/role.yaml +++ b/config/base/rbac/role.yaml @@ -5,11 +5,11 @@ metadata: name: manager-role rules: - apiGroups: - - '*' + - apiextensions.k8s.io resources: - - '*' + - customresourcedefinitions verbs: - - '*' + - get - apiGroups: - catalogd.operatorframework.io resources: @@ -36,6 +36,12 @@ rules: - patch - update - watch +- apiGroups: + - "" + resources: + - serviceaccounts/token + verbs: + - create - apiGroups: - olm.operatorframework.io resources: @@ -43,6 +49,8 @@ rules: verbs: - get - list + - patch + - update - watch - apiGroups: - olm.operatorframework.io diff --git a/config/components/tls/patches/manager_deployment_cert.yaml b/config/components/tls/patches/manager_deployment_cert.yaml index 9a1cf1b7a..747979321 100644 --- a/config/components/tls/patches/manager_deployment_cert.yaml +++ b/config/components/tls/patches/manager_deployment_cert.yaml @@ -3,7 +3,7 @@ value: {"name":"olmv1-certificate", "secret":{"secretName":"olmv1-cert", "optional": false, "items": [{"key": "ca.crt", "path": "olm-ca.crt"}]}} - op: add path: /spec/template/spec/containers/0/volumeMounts/- - value: {"name":"olmv1-certificate", "readOnly": true, "mountPath":"/var/certs/olm-ca.crt", "subPath":"olm-ca.crt"} + value: {"name":"olmv1-certificate", "readOnly": true, "mountPath":"/var/certs/"} - op: add path: /spec/template/spec/containers/0/args/- value: "--ca-certs-dir=/var/certs" diff --git a/config/samples/olm_v1alpha1_clusterextension.yaml b/config/samples/olm_v1alpha1_clusterextension.yaml index 475f3eeaf..b66c75ac0 100644 --- a/config/samples/olm_v1alpha1_clusterextension.yaml +++ b/config/samples/olm_v1alpha1_clusterextension.yaml @@ -7,4 +7,4 @@ spec: packageName: argocd-operator version: 0.6.0 serviceAccount: - name: argocd-installer + name: default diff --git a/go.mod b/go.mod index 0d184bbd7..4ad97adf8 100644 --- a/go.mod +++ b/go.mod @@ -1,43 +1,43 @@ module github.com/operator-framework/operator-controller -go 1.22.0 - -toolchain go1.22.2 +go 1.22.5 require ( - carvel.dev/kapp v0.62.1-0.20240508153820-7d8a03ed7ccf + carvel.dev/kapp v0.63.2 github.com/Masterminds/semver/v3 v3.2.1 github.com/blang/semver/v4 v4.0.0 - github.com/containerd/containerd v1.7.19 + github.com/containerd/containerd v1.7.20 + github.com/fsnotify/fsnotify v1.7.0 github.com/go-logr/logr v1.4.2 github.com/google/go-cmp v0.6.0 - github.com/google/go-containerregistry v0.20.0 + github.com/google/go-containerregistry v0.20.1 github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20240505154900-ff385a972813 github.com/google/go-containerregistry/pkg/authn/kubernetes v0.0.0-20240505154900-ff385a972813 - github.com/onsi/ginkgo/v2 v2.19.0 - github.com/onsi/gomega v1.33.1 + github.com/onsi/ginkgo/v2 v2.19.1 + github.com/onsi/gomega v1.34.1 github.com/operator-framework/api v0.26.0 - github.com/operator-framework/catalogd v0.18.0 - github.com/operator-framework/helm-operator-plugins v0.3.0 - github.com/operator-framework/operator-registry v1.44.0 + github.com/operator-framework/catalogd v0.20.0 + github.com/operator-framework/helm-operator-plugins v0.3.1 + github.com/operator-framework/operator-registry v1.45.0 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.9.0 go.uber.org/zap v1.27.0 - golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 gopkg.in/yaml.v2 v2.4.0 helm.sh/helm/v3 v3.15.3 - k8s.io/api v0.30.2 - k8s.io/apiextensions-apiserver v0.30.2 - k8s.io/apimachinery v0.30.2 - k8s.io/cli-runtime v0.30.2 - k8s.io/client-go v0.30.2 - k8s.io/component-base v0.30.2 - k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 + k8s.io/api v0.30.3 + k8s.io/apiextensions-apiserver v0.30.3 + k8s.io/apimachinery v0.30.3 + k8s.io/cli-runtime v0.30.3 + k8s.io/client-go v0.30.3 + k8s.io/component-base v0.30.3 + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 sigs.k8s.io/controller-runtime v0.18.4 sigs.k8s.io/yaml v1.4.0 ) require ( + carvel.dev/vendir v0.40.0 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect @@ -57,7 +57,7 @@ require ( github.com/Masterminds/squirrel v1.5.4 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/Microsoft/hcsshim v0.12.3 // indirect - github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect + github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/aws/aws-sdk-go-v2 v1.18.0 // indirect github.com/aws/aws-sdk-go-v2/config v1.18.25 // indirect @@ -76,7 +76,7 @@ require ( github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20230510185313-f5e39e5f34c7 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 // indirect github.com/containerd/cgroups/v3 v3.0.3 // indirect @@ -88,7 +88,7 @@ require ( github.com/containerd/stargz-snapshotter/estargz v0.15.1 // indirect github.com/containerd/ttrpc v1.2.5 // indirect github.com/containerd/typeurl/v2 v2.1.1 // indirect - github.com/containers/common v0.59.1 // indirect + github.com/containers/common v0.59.2 // indirect github.com/containers/image/v5 v5.31.1 // indirect github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 // indirect github.com/containers/ocicrypt v1.1.10 // indirect @@ -100,9 +100,9 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dimchansky/utfbom v1.1.1 // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/docker/cli v27.0.2+incompatible // indirect + github.com/docker/cli v27.0.3+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v26.1.3+incompatible // indirect + github.com/docker/docker v26.1.4+incompatible // indirect github.com/docker/docker-credential-helpers v0.8.1 // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect @@ -113,7 +113,6 @@ require ( github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/color v1.15.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/go-errors/errors v1.4.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect @@ -158,7 +157,7 @@ require ( github.com/json-iterator/go v1.1.12 // indirect github.com/k14s/starlark-go v0.0.0-20200720175618-3a5c849cc368 // indirect github.com/k14s/ytt v0.36.0 // indirect - github.com/klauspost/compress v1.17.8 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -207,8 +206,7 @@ require ( github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect github.com/vbatts/tar-split v0.11.5 // indirect github.com/vito/go-interact v1.0.1 // indirect - github.com/vmware-tanzu/carvel-kapp-controller v0.50.2 // indirect - github.com/vmware-tanzu/carvel-vendir v0.36.0 // indirect + github.com/vmware-tanzu/carvel-kapp-controller v0.51.0 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect @@ -225,26 +223,26 @@ require ( go.opentelemetry.io/proto/otlp v1.1.0 // indirect go.starlark.net v0.0.0-20230612165344-9532f5667272 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.24.0 // indirect - golang.org/x/net v0.26.0 // indirect + golang.org/x/crypto v0.25.0 // indirect + golang.org/x/net v0.27.0 // indirect golang.org/x/oauth2 v0.20.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect + golang.org/x/tools v0.23.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect - google.golang.org/grpc v1.64.1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect + google.golang.org/grpc v1.65.0 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/evanphx/json-patch.v5 v5.6.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiserver v0.30.2 // indirect + k8s.io/apiserver v0.30.3 // indirect k8s.io/klog/v2 v2.120.1 // indirect k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect k8s.io/kubectl v0.30.0 // indirect @@ -255,5 +253,3 @@ require ( sigs.k8s.io/kustomize/kyaml v0.15.0 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect ) - -replace github.com/operator-framework/catalogd => github.com/openshift/operator-framework-catalogd v0.0.0-20240715165051-38a51546d9c3 diff --git a/go.sum b/go.sum index 56b0591ea..2622d45e9 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ -carvel.dev/kapp v0.62.1-0.20240508153820-7d8a03ed7ccf h1:i3TZEmJNR0eYnxwhSUmFPm0zEqF1ixN+6nFEs7TBt2k= -carvel.dev/kapp v0.62.1-0.20240508153820-7d8a03ed7ccf/go.mod h1:fTRlfVQf5Wnms+NuL4eBaMaADPZjIoL9xwCMmwEX/hs= +carvel.dev/kapp v0.63.2 h1:Fy0XXZRKn0e5XGL8y/Tqr1lCFPJejvp/bDlTDXQicCQ= +carvel.dev/kapp v0.63.2/go.mod h1:1N6sOl3tqkIterSvng8DMc5/4PDlbCHVfLD/M7vLnps= +carvel.dev/vendir v0.40.0 h1:JdhCp/EjAPGI8F5zoAVYwZHf1sPEFee19RpgGb3ciT8= +carvel.dev/vendir v0.40.0/go.mod h1:XPdluJu7322RZNx05AA4gYnV52aKywBdh7Ma12GuM2Q= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -68,8 +70,8 @@ github.com/Microsoft/hcsshim v0.12.3/go.mod h1:Iyl1WVpZzr+UkzjekHZbV8o5Z9ZkxNGx6 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18= -github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9 h1:goHVqTbFX3AIo0tzGr14pgfAW2ZfPChKO21Z9MGf/gk= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= @@ -122,8 +124,8 @@ github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqy github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 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/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 h1:krfRl01rzPzxSxyLyrChD+U+MzsBXbm0OwYYB67uF+4= @@ -135,8 +137,8 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= -github.com/containerd/containerd v1.7.19 h1:/xQ4XRJ0tamDkdzrrBAUy/LE5nCcxFKdBm4EcPrSMEE= -github.com/containerd/containerd v1.7.19/go.mod h1:h4FtNYUUMB4Phr6v+xG89RYKj9XccvbNSCKjdufCrkc= +github.com/containerd/containerd v1.7.20 h1:Sl6jQYk3TRavaU83h66QMbI2Nqg9Jm6qzwX57Vsn1SQ= +github.com/containerd/containerd v1.7.20/go.mod h1:52GsS5CwquuqPuLncsXwG0t2CiUce+KsNHJZQJvAgR0= github.com/containerd/containerd/api v1.7.19 h1:VWbJL+8Ap4Ju2mx9c9qS1uFSB1OVYr5JJrW2yT5vFoA= github.com/containerd/containerd/api v1.7.19/go.mod h1:fwGavl3LNwAV5ilJ0sbrABL44AQxmNjDRcwheXDb6Ig= github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG023MDM= @@ -153,8 +155,8 @@ github.com/containerd/ttrpc v1.2.5 h1:IFckT1EFQoFBMG4c3sMdT8EP3/aKfumK1msY+Ze4oL github.com/containerd/ttrpc v1.2.5/go.mod h1:YCXHsb32f+Sq5/72xHubdiJRQY9inL4a4ZQrAbN1q9o= github.com/containerd/typeurl/v2 v2.1.1 h1:3Q4Pt7i8nYwy2KmQWIw2+1hTvwTE/6w9FqcttATPO/4= github.com/containerd/typeurl/v2 v2.1.1/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0= -github.com/containers/common v0.59.1 h1:7VkmJN3YvD0jLFwaUjLHSRJ98JLffydiyOJjYr0dUTo= -github.com/containers/common v0.59.1/go.mod h1:53VicJCZ2AD0O+Br7VVoyrS7viXF4YmwlTIocWUT8XE= +github.com/containers/common v0.59.2 h1:FcURZzlMYMVZXqjMEop6C0A3yWilrfmWUPUw09APHvI= +github.com/containers/common v0.59.2/go.mod h1:/PHpbapKSHQU29Jmjn3Ld3jekoHvX0zx7qQxxyPqSTM= github.com/containers/image/v5 v5.31.1 h1:3x9soI6Biml/GiDLpkSmKrkRSwVGctxu/vONpoUdklA= github.com/containers/image/v5 v5.31.1/go.mod h1:5QfOqSackPkSbF7Qxc1DnVNnPJKQ+KWLkfEfDpK590Q= github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 h1:Qzk5C6cYglewc+UyGf6lc8Mj2UaPTHy/iF2De0/77CA= @@ -206,12 +208,12 @@ github.com/distribution/distribution/v3 v3.0.0-alpha.1 h1:jn7I1gvjOvmLztH1+1cLiU github.com/distribution/distribution/v3 v3.0.0-alpha.1/go.mod h1:LCp4JZp1ZalYg0W/TN05jarCQu+h4w7xc7ZfQF4Y/cY= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v27.0.2+incompatible h1:IgWU3lWqAYNibtcxgl/PY4TB0eCmK1ZpNUZVJfenDQs= -github.com/docker/cli v27.0.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v27.0.3+incompatible h1:usGs0/BoBW8MWxGeEtqPMkzOY56jZ6kYlSN5BLDioCQ= +github.com/docker/cli v27.0.3+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v26.1.3+incompatible h1:lLCzRbrVZrljpVNobJu1J2FHk8V0s4BawoZippkc+xo= -github.com/docker/docker v26.1.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v26.1.4+incompatible h1:vuTpXDuoga+Z38m1OZHzl7NKisKWaWlhjQk7IDPSLsU= +github.com/docker/docker v26.1.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/docker-credential-helpers v0.8.1 h1:j/eKUktUltBtMzKqmfLB0PAgqYyMHOp5vfsD1807oKo= github.com/docker/docker-credential-helpers v0.8.1/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= @@ -345,8 +347,8 @@ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.20.0 h1:wRqHpOeVh3DnenOrPy9xDOLdnLatiGuuNRVelR2gSbg= -github.com/google/go-containerregistry v0.20.0/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= +github.com/google/go-containerregistry v0.20.1 h1:eTgx9QNYugV4DN5mz4U8hiAGTi1ybXn0TPi4Smd8du0= +github.com/google/go-containerregistry v0.20.1/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20240505154900-ff385a972813 h1:PNR/Dkh697bQVCKLUekdd6LSNU9XkmXjrUbvH+wpfTg= github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20240505154900-ff385a972813/go.mod h1:5UXYZJNyCPf2YD+6J76geTiLAXA8fJbDy7mGQa5m5Vc= github.com/google/go-containerregistry/pkg/authn/kubernetes v0.0.0-20240505154900-ff385a972813 h1:irEChX0pAmED+6auieJELA0JKeCakr6iDCTLjJUiT8k= @@ -465,8 +467,8 @@ github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1q github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -569,13 +571,13 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= -github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= +github.com/onsi/ginkgo/v2 v2.19.1 h1:QXgq3Z8Crl5EL1WBAC98A5sEBHARrAJNzAmMxzLcRF0= +github.com/onsi/ginkgo/v2 v2.19.1/go.mod h1:O3DtEWQkPa/F7fBMgmZQKKsluAy8pd3rEQdrjkPb9zA= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= -github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= @@ -584,16 +586,16 @@ github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/openshift/crd-schema-checker v0.0.0-20240404194209-35a9033b1d11 h1:eTNDkNRNV5lZvUbVM9Nop0lBcljSnA8rZX6yQPZ0ZnU= github.com/openshift/crd-schema-checker v0.0.0-20240404194209-35a9033b1d11/go.mod h1:EmVJt97N+pfWFsli/ipXTBZqSG5F5KGQhm3c3IsGq1o= -github.com/openshift/operator-framework-catalogd v0.0.0-20240715165051-38a51546d9c3 h1:mc+TCEHL2ykWc0qM/ZSBu1Iuqqu3o8EDAwkFYMu5gW8= -github.com/openshift/operator-framework-catalogd v0.0.0-20240715165051-38a51546d9c3/go.mod h1:3i2dDt0yg6L/xHbNt93/Teao6xBC8rhL6UgewjQpvI8= github.com/operator-framework/api v0.26.0 h1:YVntU2NkVl5zSLLwK5kFcH6P3oSvN9QDgTsY9mb4yUM= github.com/operator-framework/api v0.26.0/go.mod h1:3IxOwzVUeGxYlzfwKCcfCyS+q3EEhWA/4kv7UehbeyM= -github.com/operator-framework/helm-operator-plugins v0.3.0 h1:LNhcb5nPT/TAxZSsKH2LTYh79RgiN2twGFptQR96sRM= -github.com/operator-framework/helm-operator-plugins v0.3.0/go.mod h1:ly6Bd9rSzmt37Wy6WtZHmA+IY9zG958MryJFLcVpCXw= +github.com/operator-framework/catalogd v0.20.0 h1:m5ugxf9fjEUaNHy81lSu6jFzTEt0XpEo44+T7g9On+U= +github.com/operator-framework/catalogd v0.20.0/go.mod h1:F4KehkAI/bpDI4IVXNxQ7dlWtVBYvc2qkxSa7mIFGRk= +github.com/operator-framework/helm-operator-plugins v0.3.1 h1:D8hF0ufF+2ZtuttYUu4yBlsmHvic/zENm6n9h83ITI0= +github.com/operator-framework/helm-operator-plugins v0.3.1/go.mod h1:5Kx1PyLnRVPyQmLq+frv+HJgSZzXG+W6LavSCxzm8sI= github.com/operator-framework/operator-lib v0.14.0 h1:er+BgZymZD1im2wytLJiPLZpGALAX6N0gXaHx3PKbO4= github.com/operator-framework/operator-lib v0.14.0/go.mod h1:wUu4Xb9xzXnIpglvaZ3yucTMSlqGXHIoUEH9+5gWiu0= -github.com/operator-framework/operator-registry v1.44.0 h1:NW5/xHYR77J2EUYm+6iBER1WNGLNS8gM+G5GBQWqTTs= -github.com/operator-framework/operator-registry v1.44.0/go.mod h1:55I4XJ//Erir98Mm9OlD8UURWE0HQgL/zlvpGF+gkig= +github.com/operator-framework/operator-registry v1.45.0 h1:9c5NshWjPncdZtWEY0cfMnAjx3pShVnjw5UmZXp/xNE= +github.com/operator-framework/operator-registry v1.45.0/go.mod h1:CU6JJvVV1W5y1AZm+uEdo7cPUYY9DTZCDG79oEaOcKw= github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= @@ -717,10 +719,8 @@ github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8ok github.com/vito/go-interact v0.0.0-20171111012221-fa338ed9e9ec/go.mod h1:wPlfmglZmRWMYv/qJy3P+fK/UnoQB5ISk4txfNd9tDo= github.com/vito/go-interact v1.0.1 h1:O8xi8c93bRUv2Tb/v6HdiuGc+WnWt+AQzF74MOOdlBs= github.com/vito/go-interact v1.0.1/go.mod h1:HrdHSJXD2yn1MhlTwSIMeFgQ5WftiIorszVGd3S/DAA= -github.com/vmware-tanzu/carvel-kapp-controller v0.50.2 h1:/0iDxqCzQIDLhasdnx2Hw+iW5VbL2OenfHESbWOZ5fE= -github.com/vmware-tanzu/carvel-kapp-controller v0.50.2/go.mod h1:dcE+zg3cMl6CWRWwA1K9I9x24wGF98wlsatz5UEfdFo= -github.com/vmware-tanzu/carvel-vendir v0.36.0 h1:F9FNk2YysC6DlUDP2Nl2ynsv6JH8S0FYT4OK6HrRco0= -github.com/vmware-tanzu/carvel-vendir v0.36.0/go.mod h1:rPGI/zItMK4QgLRpLix2aykoYufavHyKqqLTONXb2uE= +github.com/vmware-tanzu/carvel-kapp-controller v0.51.0 h1:lCCHy9n/AzWPtq5gqbINJHgmF32RCUkh9DbVQgx6HAs= +github.com/vmware-tanzu/carvel-kapp-controller v0.51.0/go.mod h1:go1MQz1D2kVgjaE2ZHtuHGECFk8EDLeXMpjmDNDzuJM= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -805,15 +805,15 @@ golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -830,8 +830,8 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180730214132-a0f8a16cb08c/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -858,8 +858,8 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -912,16 +912,16 @@ golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.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-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -958,8 +958,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn 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.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= +golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -987,10 +987,10 @@ google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4= -google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 h1:Zy9XzmMEflZ/MAaA7vNcoebnRAld7FsPW1EeBB7V0m8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -998,8 +998,8 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac 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.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= -google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1055,28 +1055,28 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -k8s.io/api v0.30.2 h1:+ZhRj+28QT4UOH+BKznu4CBgPWgkXO7XAvMcMl0qKvI= -k8s.io/api v0.30.2/go.mod h1:ULg5g9JvOev2dG0u2hig4Z7tQ2hHIuS+m8MNZ+X6EmI= -k8s.io/apiextensions-apiserver v0.30.2 h1:l7Eue2t6QiLHErfn2vwK4KgF4NeDgjQkCXtEbOocKIE= -k8s.io/apiextensions-apiserver v0.30.2/go.mod h1:lsJFLYyK40iguuinsb3nt+Sj6CmodSI4ACDLep1rgjw= -k8s.io/apimachinery v0.30.2 h1:fEMcnBj6qkzzPGSVsAZtQThU62SmQ4ZymlXRC5yFSCg= -k8s.io/apimachinery v0.30.2/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= -k8s.io/apiserver v0.30.2 h1:ACouHiYl1yFI2VFI3YGM+lvxgy6ir4yK2oLOsLI1/tw= -k8s.io/apiserver v0.30.2/go.mod h1:BOTdFBIch9Sv0ypSEcUR6ew/NUFGocRFNl72Ra7wTm8= -k8s.io/cli-runtime v0.30.2 h1:ooM40eEJusbgHNEqnHziN9ZpLN5U4WcQGsdLKVxpkKE= -k8s.io/cli-runtime v0.30.2/go.mod h1:Y4g/2XezFyTATQUbvV5WaChoUGhojv/jZAtdp5Zkm0A= -k8s.io/client-go v0.30.2 h1:sBIVJdojUNPDU/jObC+18tXWcTJVcwyqS9diGdWHk50= -k8s.io/client-go v0.30.2/go.mod h1:JglKSWULm9xlJLx4KCkfLLQ7XwtlbflV6uFFSHTMgVs= -k8s.io/component-base v0.30.2 h1:pqGBczYoW1sno8q9ObExUqrYSKhtE5rW3y6gX88GZII= -k8s.io/component-base v0.30.2/go.mod h1:yQLkQDrkK8J6NtP+MGJOws+/PPeEXNpwFixsUI7h/OE= +k8s.io/api v0.30.3 h1:ImHwK9DCsPA9uoU3rVh4QHAHHK5dTSv1nxJUapx8hoQ= +k8s.io/api v0.30.3/go.mod h1:GPc8jlzoe5JG3pb0KJCSLX5oAFIW3/qNJITlDj8BH04= +k8s.io/apiextensions-apiserver v0.30.3 h1:oChu5li2vsZHx2IvnGP3ah8Nj3KyqG3kRSaKmijhB9U= +k8s.io/apiextensions-apiserver v0.30.3/go.mod h1:uhXxYDkMAvl6CJw4lrDN4CPbONkF3+XL9cacCT44kV4= +k8s.io/apimachinery v0.30.3 h1:q1laaWCmrszyQuSQCfNB8cFgCuDAoPszKY4ucAjDwHc= +k8s.io/apimachinery v0.30.3/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= +k8s.io/apiserver v0.30.3 h1:QZJndA9k2MjFqpnyYv/PH+9PE0SHhx3hBho4X0vE65g= +k8s.io/apiserver v0.30.3/go.mod h1:6Oa88y1CZqnzetd2JdepO0UXzQX4ZnOekx2/PtEjrOg= +k8s.io/cli-runtime v0.30.3 h1:aG69oRzJuP2Q4o8dm+f5WJIX4ZBEwrvdID0+MXyUY6k= +k8s.io/cli-runtime v0.30.3/go.mod h1:hwrrRdd9P84CXSKzhHxrOivAR9BRnkMt0OeP5mj7X30= +k8s.io/client-go v0.30.3 h1:bHrJu3xQZNXIi8/MoxYtZBBWQQXwy16zqJwloXXfD3k= +k8s.io/client-go v0.30.3/go.mod h1:8d4pf8vYu665/kUbsxWAQ/JDBNWqfFeZnvFiVdmx89U= +k8s.io/component-base v0.30.3 h1:Ci0UqKWf4oiwy8hr1+E3dsnliKnkMLZMVbWzeorlk7s= +k8s.io/component-base v0.30.3/go.mod h1:C1SshT3rGPCuNtBs14RmVD2xW0EhRSeLvBh7AGk1quA= k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= k8s.io/kubectl v0.30.0 h1:xbPvzagbJ6RNYVMVuiHArC1grrV5vSmmIcSZuCdzRyk= k8s.io/kubectl v0.30.0/go.mod h1:zgolRw2MQXLPwmic2l/+iHs239L49fhSeICuMhQQXTI= -k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak= -k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo= oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/hack/pre-upgrade-setup.sh b/hack/pre-upgrade-setup.sh deleted file mode 100755 index 937b38370..000000000 --- a/hack/pre-upgrade-setup.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -help="pre-upgrade-setup.sh is used to create some basic resources -which will later be used in upgrade testing. - -Usage: - post-upgrade-checks.sh [TEST_CATALOG_IMG] [TEST_CATALOG_NAME] [TEST_CLUSTER_EXTENSION_NAME] -" - -if [[ "$#" -ne 3 ]]; then - echo "Illegal number of arguments passed" - echo "${help}" - exit 1 -fi - -TEST_CATALOG_IMG=$1 -TEST_CLUSTER_CATALOG_NAME=$2 -TEST_CLUSTER_EXTENSION_NAME=$3 - -kubectl apply -f - << EOF -apiVersion: catalogd.operatorframework.io/v1alpha1 -kind: ClusterCatalog -metadata: - name: ${TEST_CLUSTER_CATALOG_NAME} -spec: - source: - type: image - image: - ref: ${TEST_CATALOG_IMG} - pollInterval: 24h - insecureSkipTLSVerify: true -EOF - - -kubectl apply -f - << EOF -apiVersion: olm.operatorframework.io/v1alpha1 -kind: ClusterExtension -metadata: - name: ${TEST_CLUSTER_EXTENSION_NAME} -spec: - installNamespace: default - packageName: prometheus - version: 1.0.0 - serviceAccount: - name: default -EOF - -kubectl wait --for=condition=Unpacked --timeout=60s ClusterCatalog $TEST_CLUSTER_CATALOG_NAME -kubectl wait --for=condition=Installed --timeout=60s ClusterExtension $TEST_CLUSTER_EXTENSION_NAME diff --git a/test/tools/build-push-e2e-catalog.sh b/hack/test/build-push-e2e-catalog.sh similarity index 100% rename from test/tools/build-push-e2e-catalog.sh rename to hack/test/build-push-e2e-catalog.sh diff --git a/hack/e2e-coverage.sh b/hack/test/e2e-coverage.sh similarity index 100% rename from hack/e2e-coverage.sh rename to hack/test/e2e-coverage.sh diff --git a/test/tools/image-registry.sh b/hack/test/image-registry.sh similarity index 100% rename from test/tools/image-registry.sh rename to hack/test/image-registry.sh diff --git a/hack/test/pre-upgrade-setup.sh b/hack/test/pre-upgrade-setup.sh new file mode 100755 index 000000000..944299380 --- /dev/null +++ b/hack/test/pre-upgrade-setup.sh @@ -0,0 +1,136 @@ +#!/bin/bash + +set -euo pipefail + +help="pre-upgrade-setup.sh is used to create some basic resources +which will later be used in upgrade testing. + +Usage: + post-upgrade-checks.sh [TEST_CATALOG_IMG] [TEST_CATALOG_NAME] [TEST_CLUSTER_EXTENSION_NAME] +" + +if [[ "$#" -ne 3 ]]; then + echo "Illegal number of arguments passed" + echo "${help}" + exit 1 +fi + +TEST_CATALOG_IMG=$1 +TEST_CLUSTER_CATALOG_NAME=$2 +TEST_CLUSTER_EXTENSION_NAME=$3 + +kubectl apply -f - << EOF +apiVersion: catalogd.operatorframework.io/v1alpha1 +kind: ClusterCatalog +metadata: + name: ${TEST_CLUSTER_CATALOG_NAME} +spec: + source: + type: image + image: + ref: ${TEST_CATALOG_IMG} + pollInterval: 24h + insecureSkipTLSVerify: true +EOF + +kubectl apply -f - < 0 { var block *pem.Block @@ -179,6 +182,15 @@ func appendCertsFromPEM(s *x509.CertPool, pemCerts []byte) error { if err != nil { return fmt.Errorf("unable to parse cert %d: %w", n, err) } + if firstExpiration.IsZero() || firstExpiration.After(cert.NotAfter) { + *firstExpiration = cert.NotAfter + } + now := time.Now() + if now.Before(cert.NotBefore) { + return fmt.Errorf("not yet valid cert %d: %q", n, cert.NotBefore.Format(time.RFC3339)) + } else if now.After(cert.NotAfter) { + return fmt.Errorf("expired cert %d: %q", n, cert.NotAfter.Format(time.RFC3339)) + } // no return values - panics or always succeeds s.AddCert(cert) n++ @@ -187,7 +199,7 @@ func appendCertsFromPEM(s *x509.CertPool, pemCerts []byte) error { return nil } -func NewCertPool(caDir string) (*x509.CertPool, error) { +func NewCertPool(caDir string, log logr.Logger) (*x509.CertPool, error) { caCertPool, err := x509.SystemCertPool() if err != nil { return nil, err @@ -200,20 +212,37 @@ func NewCertPool(caDir string) (*x509.CertPool, error) { if err != nil { return nil, err } + count := 0 + firstExpiration := time.Time{} + for _, e := range dirEntries { - if e.IsDir() { + file := filepath.Join(caDir, e.Name()) + // These might be symlinks pointing to directories, so use Stat() to resolve + fi, err := os.Stat(file) + if err != nil { + return nil, err + } + if fi.IsDir() { + log.Info("skip directory", "name", e.Name()) continue } - file := filepath.Join(caDir, e.Name()) + log.Info("load certificate", "name", e.Name()) data, err := os.ReadFile(file) if err != nil { return nil, fmt.Errorf("error reading cert file %q: %w", file, err) } - err = appendCertsFromPEM(caCertPool, data) + err = appendCertsFromPEM(caCertPool, data, &firstExpiration) if err != nil { return nil, fmt.Errorf("error adding cert file %q: %w", file, err) } + count++ + } + + // Found no certs! + if count == 0 { + return nil, fmt.Errorf("no certificates found in %q", caDir) } + log.Info("first expiration", "time", firstExpiration.Format(time.RFC3339)) return caCertPool, nil } diff --git a/internal/httputil/certutil_test.go b/internal/httputil/certutil_test.go index 9f72b51a8..a8a158ff3 100644 --- a/internal/httputil/certutil_test.go +++ b/internal/httputil/certutil_test.go @@ -1,8 +1,10 @@ package httputil_test import ( + "context" "testing" + "github.com/go-logr/logr" "github.com/stretchr/testify/require" "github.com/operator-framework/operator-controller/internal/httputil" @@ -21,17 +23,20 @@ func TestNewCertPool(t *testing.T) { dir string msg string }{ + {"../../testdata/certs/", `no certificates found in "../../testdata/certs/"`}, {"../../testdata/certs/good", ""}, {"../../testdata/certs/bad", `error adding cert file "../../testdata/certs/bad/Amazon_Root_CA_2.pem": unable to PEM decode cert 1`}, {"../../testdata/certs/ugly", `error adding cert file "../../testdata/certs/ugly/Amazon_Root_CA.pem": unable to PEM decode cert 2`}, {"../../testdata/certs/ugly2", `error adding cert file "../../testdata/certs/ugly2/Amazon_Root_CA_1.pem": unable to PEM decode cert 1`}, {"../../testdata/certs/ugly3", `error adding cert file "../../testdata/certs/ugly3/not_a_cert.pem": unable to PEM decode cert 1`}, {"../../testdata/certs/empty", `error adding cert file "../../testdata/certs/empty/empty.pem": unable to parse cert 1: x509: malformed certificate`}, + {"../../testdata/certs/expired", `error adding cert file "../../testdata/certs/expired/expired.pem": expired cert 1: "2024-01-02T15:00:00Z"`}, } + log, _ := logr.FromContext(context.Background()) for _, caDir := range caDirs { t.Logf("Loading certs from %q", caDir.dir) - pool, err := httputil.NewCertPool(caDir.dir) + pool, err := httputil.NewCertPool(caDir.dir, log) if caDir.msg == "" { require.NoError(t, err) require.NotNil(t, pool) diff --git a/internal/httputil/httputil.go b/internal/httputil/httputil.go index 2f15bfaf1..d620866e4 100644 --- a/internal/httputil/httputil.go +++ b/internal/httputil/httputil.go @@ -2,16 +2,20 @@ package httputil import ( "crypto/tls" - "crypto/x509" "net/http" "time" ) -func BuildHTTPClient(caCertPool *x509.CertPool) (*http.Client, error) { +func BuildHTTPClient(cpw *CertPoolWatcher) (*http.Client, error) { httpClient := &http.Client{Timeout: 10 * time.Second} + pool, _, err := cpw.Get() + if err != nil { + return nil, err + } + tlsConfig := &tls.Config{ - RootCAs: caCertPool, + RootCAs: pool, MinVersion: tls.VersionTLS12, } tlsTransport := &http.Transport{ diff --git a/internal/rukpak/bundledeployment/bundledeployment.go b/internal/rukpak/bundledeployment/bundledeployment.go deleted file mode 100644 index 24d65e08b..000000000 --- a/internal/rukpak/bundledeployment/bundledeployment.go +++ /dev/null @@ -1,83 +0,0 @@ -/* -Copyright 2021. - -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 bundledeployment - -// BundleDeploymentSpec defines the desired state of BundleDeployment -type BundleDeploymentSpec struct { - // installNamespace is the namespace where the bundle should be installed. However, note that - // the bundle may contain resources that are cluster-scoped or that are - // installed in a different namespace. This namespace is expected to exist. - InstallNamespace string - - // provisionerClassName sets the name of the provisioner that should reconcile this BundleDeployment. - ProvisionerClassName string - - // source defines the configuration for the underlying Bundle content. - Source BundleSource -} - -// BundleDeployment is the Schema for the bundledeployments API -type BundleDeployment struct { - Name string - - Spec BundleDeploymentSpec -} - -type SourceType string - -const SourceTypeImage SourceType = "image" - -type BundleSource struct { - // Type defines the kind of Bundle content being sourced. - Type SourceType - // Image is the bundle image that backs the content of this bundle. - Image *ImageSource -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BundleDeploymentStatus. -// This is generated code copied from rukpak. -func (in *BundleSource) DeepCopy() *BundleSource { - if in == nil { - return nil - } - out := new(BundleSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -// This is generated code copied from rukpak. -func (in *BundleSource) DeepCopyInto(out *BundleSource) { - *out = *in - if in.Image != nil { - in, out := &in.Image, &out.Image - *out = new(ImageSource) - **out = **in - } -} - -type ImageSource struct { - // Ref contains the reference to a container image containing Bundle contents. - Ref string - // ImagePullSecretName contains the name of the image pull secret in the namespace that the provisioner is deployed. - ImagePullSecretName string - // InsecureSkipTLSVerify indicates that TLS certificate validation should be skipped. - // If this option is specified, the HTTPS protocol will still be used to - // fetch the specified image reference. - // This should not be used in a production environment. - InsecureSkipTLSVerify bool -} diff --git a/internal/rukpak/preflights/crdupgradesafety/crdupgradesafety_test.go b/internal/rukpak/preflights/crdupgradesafety/crdupgradesafety_test.go new file mode 100644 index 000000000..454d53718 --- /dev/null +++ b/internal/rukpak/preflights/crdupgradesafety/crdupgradesafety_test.go @@ -0,0 +1,205 @@ +package crdupgradesafety_test + +import ( + "context" + "fmt" + "os" + "strings" + "testing" + + kappcus "carvel.dev/kapp/pkg/kapp/crdupgradesafety" + "github.com/stretchr/testify/require" + "helm.sh/helm/v3/pkg/release" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + + "github.com/operator-framework/operator-controller/internal/rukpak/preflights/crdupgradesafety" + "github.com/operator-framework/operator-controller/internal/rukpak/util" +) + +type MockCRDGetter struct { + oldCrd *apiextensionsv1.CustomResourceDefinition + getErr error + apiextensionsv1client.CustomResourceDefinitionInterface +} + +func (c *MockCRDGetter) Get(ctx context.Context, name string, options metav1.GetOptions) (*apiextensionsv1.CustomResourceDefinition, error) { + return c.oldCrd, c.getErr +} + +func newMockPreflight(crd *apiextensionsv1.CustomResourceDefinition, err error, customValidator *kappcus.Validator) *crdupgradesafety.Preflight { + var preflightOpts []crdupgradesafety.Option + if customValidator != nil { + preflightOpts = append(preflightOpts, crdupgradesafety.WithValidator(customValidator)) + } + return crdupgradesafety.NewPreflight(&MockCRDGetter{ + oldCrd: crd, + getErr: err, + }, preflightOpts...) +} + +const crdFolder string = "../../../../testdata/manifests" + +func getCrdFromManifestFile(t *testing.T, oldCrdFile string) *apiextensionsv1.CustomResourceDefinition { + if oldCrdFile == "" { + return nil + } + relObjects, err := util.ManifestObjects(strings.NewReader(getManifestString(t, oldCrdFile)), "old") + require.NoError(t, err) + + newCrd := &apiextensionsv1.CustomResourceDefinition{} + for _, obj := range relObjects { + if obj.GetObjectKind().GroupVersionKind() != apiextensionsv1.SchemeGroupVersion.WithKind("CustomResourceDefinition") { + continue + } + uMap, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj) + require.NoError(t, err) + err = runtime.DefaultUnstructuredConverter.FromUnstructured(uMap, newCrd) + require.NoError(t, err) + } + return newCrd +} + +func getManifestString(t *testing.T, crdFile string) string { + buff, err := os.ReadFile(fmt.Sprintf("%s/%s", crdFolder, crdFile)) + require.NoError(t, err) + return string(buff) +} + +// TestInstall exists only for completeness as Install() is currently a no-op. It can be used as +// a template for real tests in the future if the func is implemented. +func TestInstall(t *testing.T) { + preflight := newMockPreflight(nil, nil, nil) + require.Nil(t, preflight.Install(context.Background(), nil)) +} + +func TestUpgrade(t *testing.T) { + tests := []struct { + name string + oldCrdPath string + validator *kappcus.Validator + release *release.Release + wantErrMsgs []string + wantCrdGetErr error + }{ + { + name: "nil release", + }, + { + name: "release with no objects", + release: &release.Release{ + Name: "test-release", + }, + }, + { + name: "release with invalid manifest", + release: &release.Release{ + Name: "test-release", + Manifest: "abcd", + }, + wantErrMsgs: []string{"json: cannot unmarshal string into Go value of type unstructured.detector"}, + }, + { + name: "release with no CRD objects", + release: &release.Release{ + Name: "test-release", + Manifest: getManifestString(t, "no-crds.json"), + }, + }, + { + name: "fail to get old crd", + release: &release.Release{ + Name: "test-release", + Manifest: getManifestString(t, "crd-valid-upgrade.json"), + }, + wantCrdGetErr: fmt.Errorf("error!"), + wantErrMsgs: []string{"error!"}, + }, + { + name: "invalid crd manifest file", + release: &release.Release{ + Name: "test-release", + Manifest: getManifestString(t, "crd-invalid"), + }, + wantErrMsgs: []string{"json: cannot unmarshal"}, + }, + { + name: "custom validator", + oldCrdPath: "old-crd.json", + release: &release.Release{ + Name: "test-release", + Manifest: getManifestString(t, "old-crd.json"), + }, + validator: &kappcus.Validator{ + Validations: []kappcus.Validation{ + kappcus.NewValidationFunc("test", func(old, new apiextensionsv1.CustomResourceDefinition) error { + return fmt.Errorf("custom validation error!!") + }), + }, + }, + wantErrMsgs: []string{"custom validation error!!"}, + }, + { + name: "valid upgrade", + oldCrdPath: "old-crd.json", + release: &release.Release{ + Name: "test-release", + Manifest: getManifestString(t, "crd-valid-upgrade.json"), + }, + }, + { + name: "new crd validation failures (all except existing field removal)", + // Not really intended to test kapp validators, although it does anyway to a large extent. + // This test is primarily meant to ensure that we are actually using all of them. + oldCrdPath: "old-crd.json", + release: &release.Release{ + Name: "test-release", + Manifest: getManifestString(t, "crd-invalid-upgrade.json"), + }, + wantErrMsgs: []string{ + `"NoScopeChange"`, + `"NoStoredVersionRemoved"`, + `enums added`, + `new required fields added`, + `maximum constraint added when one did not exist previously`, + `maximum items constraint added`, + `maximum length constraint added`, + `maximum properties constraint added`, + `minimum constraint added when one did not exist previously`, + `minimum items constraint added`, + `minimum length constraint added`, + `minimum properties constraint added`, + `new value added as default`, + }, + }, + { + name: "new crd validation failure for existing field removal", + // Separate test from above as this error will cause the validator to + // return early and skip some of the above validations. + oldCrdPath: "old-crd.json", + release: &release.Release{ + Name: "test-release", + Manifest: getManifestString(t, "crd-field-removed.json"), + }, + wantErrMsgs: []string{ + `"NoExistingFieldRemoved"`, + }, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + preflight := newMockPreflight(getCrdFromManifestFile(t, tc.oldCrdPath), tc.wantCrdGetErr, tc.validator) + err := preflight.Upgrade(context.Background(), tc.release) + if len(tc.wantErrMsgs) != 0 { + for _, expectedErrMsg := range tc.wantErrMsgs { + require.ErrorContainsf(t, err, expectedErrMsg, "") + } + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/internal/rukpak/source/image_registry.go b/internal/rukpak/source/image_registry.go index 3b11443a1..a6d6640d4 100644 --- a/internal/rukpak/source/image_registry.go +++ b/internal/rukpak/source/image_registry.go @@ -4,7 +4,6 @@ import ( "archive/tar" "context" "crypto/tls" - "crypto/x509" "errors" "fmt" "io/fs" @@ -21,9 +20,24 @@ import ( apimacherrors "k8s.io/apimachinery/pkg/util/errors" "sigs.k8s.io/controller-runtime/pkg/log" - bd "github.com/operator-framework/operator-controller/internal/rukpak/bundledeployment" + "github.com/operator-framework/operator-controller/internal/httputil" ) +// SourceTypeImage is the identifier for image-type bundle sources +const SourceTypeImage SourceType = "image" + +type ImageSource struct { + // Ref contains the reference to a container image containing Bundle contents. + Ref string + // ImagePullSecretName contains the name of the image pull secret in the namespace that the provisioner is deployed. + ImagePullSecretName string + // InsecureSkipTLSVerify indicates that TLS certificate validation should be skipped. + // If this option is specified, the HTTPS protocol will still be used to + // fetch the specified image reference. + // This should not be used in a production environment. + InsecureSkipTLSVerify bool +} + // Unrecoverable represents an error that can not be recovered // from without user intervention. When this error is returned // the request should not be requeued. @@ -38,30 +52,30 @@ func NewUnrecoverable(err error) *Unrecoverable { // TODO: Make asynchronous type ImageRegistry struct { - BaseCachePath string - AuthNamespace string - CaCertPool *x509.CertPool + BaseCachePath string + AuthNamespace string + CertPoolWatcher *httputil.CertPoolWatcher } -func (i *ImageRegistry) Unpack(ctx context.Context, bundle *bd.BundleDeployment) (*Result, error) { +func (i *ImageRegistry) Unpack(ctx context.Context, bundle *BundleSource) (*Result, error) { l := log.FromContext(ctx) - if bundle.Spec.Source.Type != bd.SourceTypeImage { - panic(fmt.Sprintf("programmer error: source type %q is unable to handle specified bundle source type %q", bd.SourceTypeImage, bundle.Spec.Source.Type)) + if bundle.Type != SourceTypeImage { + panic(fmt.Sprintf("programmer error: source type %q is unable to handle specified bundle source type %q", SourceTypeImage, bundle.Type)) } - if bundle.Spec.Source.Image == nil { + if bundle.Image == nil { return nil, NewUnrecoverable(fmt.Errorf("error parsing bundle, bundle %s has a nil image source", bundle.Name)) } - imgRef, err := name.ParseReference(bundle.Spec.Source.Image.Ref) + imgRef, err := name.ParseReference(bundle.Image.Ref) if err != nil { return nil, NewUnrecoverable(fmt.Errorf("error parsing image reference: %w", err)) } remoteOpts := []remote.Option{} - if bundle.Spec.Source.Image.ImagePullSecretName != "" { + if bundle.Image.ImagePullSecretName != "" { chainOpts := k8schain.Options{ - ImagePullSecrets: []string{bundle.Spec.Source.Image.ImagePullSecretName}, + ImagePullSecrets: []string{bundle.Image.ImagePullSecretName}, Namespace: i.AuthNamespace, // TODO: Do we want to use any secrets that are included in the rukpak service account? // If so, we will need to add the permission to get service accounts and specify @@ -83,11 +97,15 @@ func (i *ImageRegistry) Unpack(ctx context.Context, bundle *bd.BundleDeployment) MinVersion: tls.VersionTLS12, } // nolint:gosec } - if bundle.Spec.Source.Image.InsecureSkipTLSVerify { + if bundle.Image.InsecureSkipTLSVerify { transport.TLSClientConfig.InsecureSkipVerify = true // nolint:gosec } - if i.CaCertPool != nil { - transport.TLSClientConfig.RootCAs = i.CaCertPool + if i.CertPoolWatcher != nil { + pool, _, err := i.CertPoolWatcher.Get() + if err != nil { + return nil, err + } + transport.TLSClientConfig.RootCAs = pool } remoteOpts = append(remoteOpts, remote.WithTransport(transport)) @@ -146,19 +164,19 @@ func wrapUnrecoverable(err error, isUnrecoverable bool) error { return err } -func (i *ImageRegistry) Cleanup(_ context.Context, bundle *bd.BundleDeployment) error { +func (i *ImageRegistry) Cleanup(_ context.Context, bundle *BundleSource) error { return os.RemoveAll(filepath.Join(i.BaseCachePath, bundle.Name)) } -func unpackedResult(fsys fs.FS, bundle *bd.BundleDeployment, ref string) *Result { +func unpackedResult(fsys fs.FS, bundle *BundleSource, ref string) *Result { return &Result{ Bundle: fsys, - ResolvedSource: &bd.BundleSource{ - Type: bd.SourceTypeImage, - Image: &bd.ImageSource{ + ResolvedSource: &BundleSource{ + Type: SourceTypeImage, + Image: &ImageSource{ Ref: ref, - ImagePullSecretName: bundle.Spec.Source.Image.ImagePullSecretName, - InsecureSkipTLSVerify: bundle.Spec.Source.Image.InsecureSkipTLSVerify, + ImagePullSecretName: bundle.Image.ImagePullSecretName, + InsecureSkipTLSVerify: bundle.Image.InsecureSkipTLSVerify, }, }, State: StateUnpacked, diff --git a/internal/rukpak/source/unpacker.go b/internal/rukpak/source/unpacker.go index 1c06bcdc0..0f0c64c93 100644 --- a/internal/rukpak/source/unpacker.go +++ b/internal/rukpak/source/unpacker.go @@ -6,8 +6,6 @@ import ( "io/fs" "sigs.k8s.io/controller-runtime/pkg/manager" - - bd "github.com/operator-framework/operator-controller/internal/rukpak/bundledeployment" ) // Unpacker unpacks bundle content, either synchronously or asynchronously and @@ -25,8 +23,8 @@ import ( // specifications. A source should treat a bundle root directory as an opaque // file tree and delegate bundle format concerns to bundle parsers. type Unpacker interface { - Unpack(context.Context, *bd.BundleDeployment) (*Result, error) - Cleanup(context.Context, *bd.BundleDeployment) error + Unpack(context.Context, *BundleSource) (*Result, error) + Cleanup(context.Context, *BundleSource) error } // Result conveys progress information about unpacking bundle content. @@ -43,7 +41,7 @@ type Result struct { // For example, resolved image sources should reference a container image // digest rather than an image tag, and git sources should reference a // commit hash rather than a branch or tag. - ResolvedSource *bd.BundleSource + ResolvedSource *BundleSource // State is the current state of unpacking the bundle content. State State @@ -69,28 +67,38 @@ const ( StateUnpacked State = "Unpacked" ) +type SourceType string + +type BundleSource struct { + Name string + // Type defines the kind of Bundle content being sourced. + Type SourceType + // Image is the bundle image that backs the content of this bundle. + Image *ImageSource +} + type unpacker struct { - sources map[bd.SourceType]Unpacker + sources map[SourceType]Unpacker } // NewUnpacker returns a new composite Source that unpacks bundles using the source // mapping provided by the configured sources. -func NewUnpacker(sources map[bd.SourceType]Unpacker) Unpacker { +func NewUnpacker(sources map[SourceType]Unpacker) Unpacker { return &unpacker{sources: sources} } -func (s *unpacker) Unpack(ctx context.Context, bundle *bd.BundleDeployment) (*Result, error) { - source, ok := s.sources[bundle.Spec.Source.Type] +func (s *unpacker) Unpack(ctx context.Context, bundle *BundleSource) (*Result, error) { + source, ok := s.sources[bundle.Type] if !ok { - return nil, fmt.Errorf("source type %q not supported", bundle.Spec.Source.Type) + return nil, fmt.Errorf("source type %q not supported", bundle.Type) } return source.Unpack(ctx, bundle) } -func (s *unpacker) Cleanup(ctx context.Context, bundle *bd.BundleDeployment) error { - source, ok := s.sources[bundle.Spec.Source.Type] +func (s *unpacker) Cleanup(ctx context.Context, bundle *BundleSource) error { + source, ok := s.sources[bundle.Type] if !ok { - return fmt.Errorf("source type %q not supported", bundle.Spec.Source.Type) + return fmt.Errorf("source type %q not supported", bundle.Type) } return source.Cleanup(ctx, bundle) } @@ -99,8 +107,8 @@ func (s *unpacker) Cleanup(ctx context.Context, bundle *bd.BundleDeployment) err // a default source mapping with built-in implementations of all of the supported // source types. func NewDefaultUnpacker(mgr manager.Manager, namespace, cacheDir string) (Unpacker, error) { - return NewUnpacker(map[bd.SourceType]Unpacker{ - bd.SourceTypeImage: &ImageRegistry{ + return NewUnpacker(map[SourceType]Unpacker{ + SourceTypeImage: &ImageRegistry{ BaseCachePath: cacheDir, AuthNamespace: namespace, }, diff --git a/internal/rukpak/util/fs.go b/internal/rukpak/util/fs.go deleted file mode 100644 index 8c7a90d11..000000000 --- a/internal/rukpak/util/fs.go +++ /dev/null @@ -1,37 +0,0 @@ -package util - -import ( - "io/fs" - "os" -) - -// FilesOnlyFilesystem is an fs.FS implementation that treats non-regular files -// (e.g. directories, symlinks, devices, etc.) as non-existent. The reason for -// this is so that we only serve bundle files. -// -// This treats directories as not found so that the http server does not serve -// HTML directory index responses. -// -// This treats other symlink files as not found so that we prevent HTTP requests -// from escaping the filesystem root. -// -// Lastly, this treats other non-regular files as not found because they are -// out of scope for serving bundle contents. -type FilesOnlyFilesystem struct { - FS fs.FS -} - -func (f *FilesOnlyFilesystem) Open(name string) (fs.File, error) { - file, err := f.FS.Open(name) - if err != nil { - return nil, err - } - stat, err := file.Stat() - if err != nil { - return nil, err - } - if !stat.Mode().IsRegular() { - return nil, os.ErrNotExist - } - return file, nil -} diff --git a/internal/rukpak/util/tar.go b/internal/rukpak/util/tar.go deleted file mode 100644 index 3226d4ea2..000000000 --- a/internal/rukpak/util/tar.go +++ /dev/null @@ -1,63 +0,0 @@ -package util - -import ( - "archive/tar" - "compress/gzip" - "fmt" - "io" - "io/fs" - "os" -) - -// FSToTarGZ writes the filesystem represented by fsys to w as a gzipped tar archive. -// This function unsets user and group information in the tar archive so that readers -// of archives produced by this function do not need to account for differences in -// permissions between source and destination filesystems. -func FSToTarGZ(w io.Writer, fsys fs.FS) error { - gzw := gzip.NewWriter(w) - tw := tar.NewWriter(gzw) - if err := fs.WalkDir(fsys, ".", func(path string, d fs.DirEntry, err error) error { - if err != nil { - return err - } - - if d.Type()&os.ModeSymlink != 0 { - return nil - } - info, err := d.Info() - if err != nil { - return fmt.Errorf("get file info for %q: %v", path, err) - } - - h, err := tar.FileInfoHeader(info, "") - if err != nil { - return fmt.Errorf("build tar file info header for %q: %v", path, err) - } - h.Uid = 0 - h.Gid = 0 - h.Uname = "" - h.Gname = "" - h.Name = path - - if err := tw.WriteHeader(h); err != nil { - return fmt.Errorf("write tar header for %q: %v", path, err) - } - if d.IsDir() { - return nil - } - f, err := fsys.Open(path) - if err != nil { - return fmt.Errorf("open file %q: %v", path, err) - } - if _, err := io.Copy(tw, f); err != nil { - return fmt.Errorf("write tar data for %q: %v", path, err) - } - return nil - }); err != nil { - return fmt.Errorf("generate tar.gz from FS: %v", err) - } - if err := tw.Close(); err != nil { - return err - } - return gzw.Close() -} diff --git a/openshift/manifests/01-customresourcedefinition-clusterextensions.olm.operatorframework.io.yml b/openshift/manifests/01-customresourcedefinition-clusterextensions.olm.operatorframework.io.yml index 407c39030..085e08d0e 100644 --- a/openshift/manifests/01-customresourcedefinition-clusterextensions.olm.operatorframework.io.yml +++ b/openshift/manifests/01-customresourcedefinition-clusterextensions.olm.operatorframework.io.yml @@ -110,7 +110,7 @@ spec: - serviceAccount type: object status: - description: ClusterExtensionStatus defines the observed state of ClusterExtension + description: ClusterExtensionStatus defines the observed state of ClusterExtension. properties: conditions: items: @@ -176,6 +176,10 @@ spec: - type x-kubernetes-list-type: map installedBundle: + description: |- + InstalledBundle should only be modified when a new bundle is successfully installed. This ensures that if there + is a previously successfully installed a bundle, and an upgrade fails, it is still communicated that there is + still a bundle that is currently installed and owned by the ClusterExtension. properties: name: type: string diff --git a/openshift/manifests/08-clusterrole-operator-controller-manager-role.yml b/openshift/manifests/08-clusterrole-operator-controller-manager-role.yml index 347caba3e..3918a1c65 100644 --- a/openshift/manifests/08-clusterrole-operator-controller-manager-role.yml +++ b/openshift/manifests/08-clusterrole-operator-controller-manager-role.yml @@ -5,11 +5,11 @@ metadata: name: operator-controller-manager-role rules: - apiGroups: - - '*' + - apiextensions.k8s.io resources: - - '*' + - customresourcedefinitions verbs: - - '*' + - get - apiGroups: - catalogd.operatorframework.io resources: @@ -36,6 +36,12 @@ rules: - patch - update - watch + - apiGroups: + - "" + resources: + - serviceaccounts/token + verbs: + - create - apiGroups: - olm.operatorframework.io resources: @@ -43,6 +49,8 @@ rules: verbs: - get - list + - patch + - update - watch - apiGroups: - olm.operatorframework.io diff --git a/requirements.txt b/requirements.txt index 0324df279..b998dbf2a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,20 +14,20 @@ markdown2==2.5.0 MarkupSafe==2.1.5 mergedeep==1.3.4 mkdocs==1.6.0 -mkdocs-material==9.5.29 +mkdocs-material==9.5.30 mkdocs-material-extensions==1.3.1 packaging==24.1 paginate==0.5.6 pathspec==0.12.1 platformdirs==4.2.2 Pygments==2.18.0 -pymdown-extensions==10.8.1 +pymdown-extensions==10.9 pyquery==2.0.0 python-dateutil==2.9.0.post0 PyYAML==6.0.1 pyyaml_env_tag==0.1 readtime==3.0.0 -regex==2024.5.15 +regex==2024.7.24 requests==2.32.3 six==1.16.0 soupsieve==2.5 diff --git a/scripts/install.tpl.sh b/scripts/install.tpl.sh index 1b44ac630..fa9069c77 100644 --- a/scripts/install.tpl.sh +++ b/scripts/install.tpl.sh @@ -11,6 +11,7 @@ fi catalogd_version=$CATALOGD_VERSION cert_mgr_version=$CERT_MGR_VERSION +install_default_catalogs=$INSTALL_DEFAULT_CATALOGS if [[ -z "$catalogd_version" || -z "$cert_mgr_version" ]]; then err="Error: Missing component version(s) for: " @@ -38,5 +39,10 @@ kubectl_wait "cert-manager" "deployment/cert-manager-webhook" "60s" kubectl apply -f "https://github.com/operator-framework/catalogd/releases/download/${catalogd_version}/catalogd.yaml" kubectl_wait "olmv1-system" "deployment/catalogd-controller-manager" "60s" +if [[ "${install_default_catalogs,,}" != "false" ]]; then + kubectl apply -f "https://github.com/operator-framework/catalogd/releases/download/${catalogd_version}/default-catalogs.yaml" + kubectl wait --for=condition=Unpacked "clustercatalog/operatorhubio" --timeout="60s" +fi + kubectl apply -f "${operator_controller_manifest}" kubectl_wait "olmv1-system" "deployment/operator-controller-controller-manager" "60s" diff --git a/test/e2e/cluster_extension_install_test.go b/test/e2e/cluster_extension_install_test.go index cac2edde1..5a51c030c 100644 --- a/test/e2e/cluster_extension_install_test.go +++ b/test/e2e/cluster_extension_install_test.go @@ -16,6 +16,7 @@ import ( "gopkg.in/yaml.v2" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/api/errors" apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -38,7 +39,129 @@ const ( var pollDuration = time.Minute var pollInterval = time.Second -func testInit(t *testing.T) (*ocv1alpha1.ClusterExtension, *catalogd.ClusterCatalog) { +func createServiceAccount(ctx context.Context, name types.NamespacedName) (*corev1.ServiceAccount, error) { + sa := &corev1.ServiceAccount{ + ObjectMeta: metav1.ObjectMeta{ + Name: name.Name, + Namespace: name.Namespace, + }, + } + err := c.Create(ctx, sa) + if err != nil { + return nil, err + } + cr := &rbacv1.ClusterRole{ + ObjectMeta: metav1.ObjectMeta{ + Name: name.Name, + }, + Rules: []rbacv1.PolicyRule{ + { + APIGroups: []string{ + "", + }, + Resources: []string{ + "secrets", // for helm + "services", + "serviceaccounts", + }, + Verbs: []string{ + "create", + "update", + "delete", + "patch", + "get", + "list", + "watch", + }, + }, + { + APIGroups: []string{ + "apiextensions.k8s.io", + }, + Resources: []string{ + "customresourcedefinitions", + }, + Verbs: []string{ + "create", + "update", + "delete", + "patch", + "get", + "list", + "watch", + }, + }, + { + APIGroups: []string{ + "apps", + }, + Resources: []string{ + "deployments", + }, + Verbs: []string{ + "create", + "update", + "delete", + "patch", + "get", + "list", + "watch", + }, + }, + { + APIGroups: []string{ + "rbac.authorization.k8s.io", + }, + Resources: []string{ + "clusterroles", + "roles", + "clusterrolebindings", + "rolebindings", + }, + Verbs: []string{ + "create", + "update", + "delete", + "patch", + "get", + "list", + "watch", + "bind", + "escalate", + }, + }, + }, + } + err = c.Create(ctx, cr) + if err != nil { + return nil, err + } + crb := &rbacv1.ClusterRoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Name: name.Name, + }, + Subjects: []rbacv1.Subject{ + { + Kind: "ServiceAccount", + Name: name.Name, + Namespace: name.Namespace, + }, + }, + RoleRef: rbacv1.RoleRef{ + APIGroup: "rbac.authorization.k8s.io", + Kind: "ClusterRole", + Name: name.Name, + }, + } + err = c.Create(ctx, crb) + if err != nil { + return nil, err + } + + return sa, nil +} + +func testInit(t *testing.T) (*ocv1alpha1.ClusterExtension, *catalogd.ClusterCatalog, *corev1.ServiceAccount) { var err error extensionCatalog, err := createTestCatalog(context.Background(), testCatalogName, os.Getenv(testCatalogRefEnvVar)) require.NoError(t, err) @@ -49,10 +172,18 @@ func testInit(t *testing.T) (*ocv1alpha1.ClusterExtension, *catalogd.ClusterCata Name: clusterExtensionName, }, } - return clusterExtension, extensionCatalog + + defaultNamespace := types.NamespacedName{ + Name: clusterExtensionName, + Namespace: "default", + } + + sa, err := createServiceAccount(context.Background(), defaultNamespace) + require.NoError(t, err) + return clusterExtension, extensionCatalog, sa } -func testCleanup(t *testing.T, cat *catalogd.ClusterCatalog, clusterExtension *ocv1alpha1.ClusterExtension) { +func testCleanup(t *testing.T, cat *catalogd.ClusterCatalog, clusterExtension *ocv1alpha1.ClusterExtension, sa *corev1.ServiceAccount) { require.NoError(t, c.Delete(context.Background(), cat)) require.Eventually(t, func() bool { err := c.Get(context.Background(), types.NamespacedName{Name: cat.Name}, &catalogd.ClusterCatalog{}) @@ -63,21 +194,26 @@ func testCleanup(t *testing.T, cat *catalogd.ClusterCatalog, clusterExtension *o err := c.Get(context.Background(), types.NamespacedName{Name: clusterExtension.Name}, &ocv1alpha1.ClusterExtension{}) return errors.IsNotFound(err) }, pollDuration, pollInterval) + require.NoError(t, c.Delete(context.Background(), sa)) + require.Eventually(t, func() bool { + err := c.Get(context.Background(), types.NamespacedName{Name: sa.Name, Namespace: sa.Namespace}, &corev1.ServiceAccount{}) + return errors.IsNotFound(err) + }, pollDuration, pollInterval) } func TestClusterExtensionInstallRegistry(t *testing.T) { t.Log("When a cluster extension is installed from a catalog") t.Log("When the extension bundle format is registry+v1") - clusterExtension, extensionCatalog := testInit(t) - defer testCleanup(t, extensionCatalog, clusterExtension) + clusterExtension, extensionCatalog, sa := testInit(t) + defer testCleanup(t, extensionCatalog, clusterExtension, sa) defer getArtifactsOutput(t) clusterExtension.Spec = ocv1alpha1.ClusterExtensionSpec{ PackageName: "prometheus", InstallNamespace: "default", ServiceAccount: ocv1alpha1.ServiceAccountReference{ - Name: "default", + Name: sa.Name, }, } t.Log("It resolves the specified package with correct bundle path") @@ -128,8 +264,8 @@ func TestClusterExtensionBlockInstallNonSuccessorVersion(t *testing.T) { t.Log("When a cluster extension is installed from a catalog") t.Log("When resolving upgrade edges") - clusterExtension, extensionCatalog := testInit(t) - defer testCleanup(t, extensionCatalog, clusterExtension) + clusterExtension, extensionCatalog, sa := testInit(t) + defer testCleanup(t, extensionCatalog, clusterExtension, sa) defer getArtifactsOutput(t) t.Log("By creating an ClusterExtension at a specified version") @@ -138,7 +274,7 @@ func TestClusterExtensionBlockInstallNonSuccessorVersion(t *testing.T) { Version: "1.0.0", InstallNamespace: "default", ServiceAccount: ocv1alpha1.ServiceAccountReference{ - Name: "default", + Name: sa.Name, }, } require.NoError(t, c.Create(context.Background(), clusterExtension)) @@ -177,8 +313,8 @@ func TestClusterExtensionForceInstallNonSuccessorVersion(t *testing.T) { t.Log("When a cluster extension is installed from a catalog") t.Log("When resolving upgrade edges") - clusterExtension, extensionCatalog := testInit(t) - defer testCleanup(t, extensionCatalog, clusterExtension) + clusterExtension, extensionCatalog, sa := testInit(t) + defer testCleanup(t, extensionCatalog, clusterExtension, sa) defer getArtifactsOutput(t) t.Log("By creating an ClusterExtension at a specified version") @@ -187,7 +323,7 @@ func TestClusterExtensionForceInstallNonSuccessorVersion(t *testing.T) { Version: "1.0.0", InstallNamespace: "default", ServiceAccount: ocv1alpha1.ServiceAccountReference{ - Name: "default", + Name: sa.Name, }, } require.NoError(t, c.Create(context.Background(), clusterExtension)) @@ -225,8 +361,8 @@ func TestClusterExtensionForceInstallNonSuccessorVersion(t *testing.T) { func TestClusterExtensionInstallSuccessorVersion(t *testing.T) { t.Log("When a cluster extension is installed from a catalog") t.Log("When resolving upgrade edges") - clusterExtension, extensionCatalog := testInit(t) - defer testCleanup(t, extensionCatalog, clusterExtension) + clusterExtension, extensionCatalog, sa := testInit(t) + defer testCleanup(t, extensionCatalog, clusterExtension, sa) defer getArtifactsOutput(t) t.Log("By creating an ClusterExtension at a specified version") @@ -235,7 +371,7 @@ func TestClusterExtensionInstallSuccessorVersion(t *testing.T) { Version: "1.0.0", InstallNamespace: "default", ServiceAccount: ocv1alpha1.ServiceAccountReference{ - Name: "default", + Name: sa.Name, }, } require.NoError(t, c.Create(context.Background(), clusterExtension)) @@ -272,15 +408,15 @@ func TestClusterExtensionInstallSuccessorVersion(t *testing.T) { func TestClusterExtensionInstallReResolvesWhenCatalogIsPatched(t *testing.T) { t.Log("When a cluster extension is installed from a catalog") t.Log("It resolves again when a catalog is patched with new ImageRef") - clusterExtension, extensionCatalog := testInit(t) - defer testCleanup(t, extensionCatalog, clusterExtension) + clusterExtension, extensionCatalog, sa := testInit(t) + defer testCleanup(t, extensionCatalog, clusterExtension, sa) defer getArtifactsOutput(t) clusterExtension.Spec = ocv1alpha1.ClusterExtensionSpec{ PackageName: "prometheus", InstallNamespace: "default", ServiceAccount: ocv1alpha1.ServiceAccountReference{ - Name: "default", + Name: sa.Name, }, } t.Log("It resolves the specified package with correct bundle path") @@ -351,14 +487,16 @@ func TestClusterExtensionInstallReResolvesWhenNewCatalog(t *testing.T) { Name: clusterExtensionName, }, } - defer testCleanup(t, extensionCatalog, clusterExtension) + sa, err := createServiceAccount(context.Background(), types.NamespacedName{Name: clusterExtensionName, Namespace: "default"}) + require.NoError(t, err) + defer testCleanup(t, extensionCatalog, clusterExtension, sa) defer getArtifactsOutput(t) clusterExtension.Spec = ocv1alpha1.ClusterExtensionSpec{ PackageName: "prometheus", InstallNamespace: "default", ServiceAccount: ocv1alpha1.ServiceAccountReference{ - Name: "default", + Name: sa.Name, }, } t.Log("It resolves the specified package with correct bundle path") @@ -409,6 +547,52 @@ func TestClusterExtensionInstallReResolvesWhenNewCatalog(t *testing.T) { }, pollDuration, pollInterval) } +func TestClusterExtensionInstallReResolvesWhenManagedContentChanged(t *testing.T) { + t.Log("When a cluster extension is installed from a catalog") + t.Log("It resolves again when managed content is changed") + clusterExtension, extensionCatalog, sa := testInit(t) + defer testCleanup(t, extensionCatalog, clusterExtension, sa) + defer getArtifactsOutput(t) + + clusterExtension.Spec = ocv1alpha1.ClusterExtensionSpec{ + PackageName: "prometheus", + InstallNamespace: "default", + ServiceAccount: ocv1alpha1.ServiceAccountReference{ + Name: sa.Name, + }, + } + t.Log("It installs the specified package with correct bundle path") + t.Log("By creating the ClusterExtension resource") + require.NoError(t, c.Create(context.Background(), clusterExtension)) + + t.Log("By reporting a successful installation") + require.EventuallyWithT(t, func(ct *assert.CollectT) { + assert.NoError(ct, c.Get(context.Background(), types.NamespacedName{Name: clusterExtension.Name}, clusterExtension)) + assert.Len(ct, clusterExtension.Status.Conditions, len(conditionsets.ConditionTypes)) + cond := apimeta.FindStatusCondition(clusterExtension.Status.Conditions, ocv1alpha1.TypeInstalled) + if !assert.NotNil(ct, cond) { + return + } + assert.Equal(ct, metav1.ConditionTrue, cond.Status) + assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) + assert.Equal(ct, &ocv1alpha1.BundleMetadata{Name: "prometheus-operator.1.2.0", Version: "1.2.0"}, clusterExtension.Status.InstalledBundle) + }, pollDuration, pollInterval) + + t.Log("By deleting a managed resource") + prometheusService := &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: "prometheus-operator", + Namespace: clusterExtension.Spec.InstallNamespace, + }, + } + require.NoError(t, c.Delete(context.Background(), prometheusService)) + + t.Log("By eventually re-creating the managed resource") + require.EventuallyWithT(t, func(ct *assert.CollectT) { + assert.NoError(ct, c.Get(context.Background(), types.NamespacedName{Name: prometheusService.Name, Namespace: prometheusService.Namespace}, prometheusService)) + }, pollDuration, pollInterval) +} + // getArtifactsOutput gets all the artifacts from the test run and saves them to the artifact path. // Currently it saves: // - clusterextensions diff --git a/test/extension-developer-e2e/extension_developer_test.go b/test/extension-developer-e2e/extension_developer_test.go index 107e15206..8c71755f3 100644 --- a/test/extension-developer-e2e/extension_developer_test.go +++ b/test/extension-developer-e2e/extension_developer_test.go @@ -2,15 +2,20 @@ package extensione2e import ( "context" + "fmt" "os" "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/rand" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" @@ -27,11 +32,131 @@ func TestExtensionDeveloper(t *testing.T) { require.NoError(t, catalogd.AddToScheme(scheme)) require.NoError(t, ocv1alpha1.AddToScheme(scheme)) + require.NoError(t, corev1.AddToScheme(scheme)) + require.NoError(t, rbacv1.AddToScheme(scheme)) c, err := client.New(cfg, client.Options{Scheme: scheme}) require.NoError(t, err) - var clusterExtensions = []*ocv1alpha1.ClusterExtension{ + ctx := context.Background() + saName := fmt.Sprintf("serviceaccounts-%s", rand.String(8)) + name := types.NamespacedName{ + Name: saName, + Namespace: "default", + } + + sa := &corev1.ServiceAccount{ + ObjectMeta: metav1.ObjectMeta{ + Name: name.Name, + Namespace: name.Namespace, + }, + } + require.NoError(t, c.Create(ctx, sa)) + + cr := &rbacv1.ClusterRole{ + ObjectMeta: metav1.ObjectMeta{ + Name: name.Name, + }, + Rules: []rbacv1.PolicyRule{ + { + APIGroups: []string{ + "", + }, + Resources: []string{ + "secrets", // for helm + "services", + "serviceaccounts", + }, + Verbs: []string{ + "create", + "update", + "delete", + "patch", + "get", + "list", + "watch", + }, + }, + { + APIGroups: []string{ + "apiextensions.k8s.io", + }, + Resources: []string{ + "customresourcedefinitions", + }, + Verbs: []string{ + "create", + "update", + "delete", + "patch", + "get", + "list", + "watch", + }, + }, + { + APIGroups: []string{ + "apps", + }, + Resources: []string{ + "deployments", + }, + Verbs: []string{ + "create", + "update", + "delete", + "patch", + "get", + "list", + "watch", + }, + }, + { + APIGroups: []string{ + "rbac.authorization.k8s.io", + }, + Resources: []string{ + "clusterroles", + "roles", + "clusterrolebindings", + "rolebindings", + }, + Verbs: []string{ + "create", + "update", + "delete", + "patch", + "get", + "list", + "watch", + "bind", + "escalate", + }, + }, + }, + } + require.NoError(t, c.Create(ctx, cr)) + + crb := &rbacv1.ClusterRoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Name: name.Name, + }, + Subjects: []rbacv1.Subject{ + { + Kind: "ServiceAccount", + Name: name.Name, + Namespace: name.Namespace, + }, + }, + RoleRef: rbacv1.RoleRef{ + APIGroup: "rbac.authorization.k8s.io", + Kind: "ClusterRole", + Name: name.Name, + }, + } + require.NoError(t, c.Create(ctx, crb)) + + clusterExtensions := []*ocv1alpha1.ClusterExtension{ { ObjectMeta: metav1.ObjectMeta{ Name: "registryv1", @@ -40,7 +165,7 @@ func TestExtensionDeveloper(t *testing.T) { PackageName: os.Getenv("REG_PKG_NAME"), InstallNamespace: "default", ServiceAccount: ocv1alpha1.ServiceAccountReference{ - Name: "default", + Name: saName, }, }, }, diff --git a/testdata/certs/expired/expired.pem b/testdata/certs/expired/expired.pem new file mode 100644 index 000000000..e8912ba61 --- /dev/null +++ b/testdata/certs/expired/expired.pem @@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIIFXzCCA0egAwIBAgIUN5r8l1RrpH53+9e6pfj6CXoyqP0wDQYJKoZIhvcNAQEL +BQAwPzELMAkGA1UEBhMCVVMxEDAOBgNVBAoMB1JlZCBIYXQxDDAKBgNVBAsMA09M +TTEQMA4GA1UEAwwHZXhwaXJlZDAeFw0yNDAxMDExNTAwMDBaFw0yNDAxMDIxNTAw +MDBaMD8xCzAJBgNVBAYTAlVTMRAwDgYDVQQKDAdSZWQgSGF0MQwwCgYDVQQLDANP +TE0xEDAOBgNVBAMMB2V4cGlyZWQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQDFalyjEXz0cMGs3pt360Cz0uD0CDnnAqQFHxXPchfCMZnW/VRGrJQq29rZ +UgU5PnxPgqadrw20BodfR2RS9xIacMP+092GY7Ep96xWokwXcsGPj2e5VMlEYVM1 +0MGqIbEv52ZnoEaZDHl4yprYeTs+b/7NGvdG1+N/YNAjkpk8cCBKUXo4ZhkgAZoW +jbv3DkAdkpQHipUYkQZNRws1ebyfTbKaEPxw7abEh9TJrHD1EI9hbmYOGJWLfe1e +zeBQjFioQA31FcQR3/v+aNEDX390+qi3p0LXe7GMabgcoFYcGXO7XvX0DdUBvdZZ +dyHA7cJvyfWfcbucI7xQ9xvAnu/4Ih4D8mHnJXjZK5ReQn06FPM/ZCgZ5LrHAKcZ +0mrOts/8noY9dMmBreSJmLCP8EqzY7yKJFFHVCeKo+bU6/KOyNhJGGSCHVJ/pZGK +ZpOQcNwVvHciLH+MfpW12xJXPEs8Wv24KufDdBCDliSFnVTYH3kZaq4Ozb7+3A5j +wUQ2aDg8nrq4oNORMSCafvia8MYH3NXbpUq1SAyD5DTKtMcWY3gcVnJgrBai1hPn +TPhrMb2NMDFnMnj7/l8jdu9xHrsgOmOrv7Zj0ytmpT6ITJgWNGXsiq7Dp+HH1c6N +ggG6g0zqoyoaxcPVN7PMrWTvfKUD3LHfIsesPc4+lT+TSlBQYwIDAQABo1MwUTAd +BgNVHQ4EFgQU8mBHR/00anEl8Io/A2c0LQlGF5MwHwYDVR0jBBgwFoAU8mBHR/00 +anEl8Io/A2c0LQlGF5MwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC +AgEABZYGEeJY2dgyi4W0LNVgN8mKuZuapIcisQ66foe46WuWGAjVONIHlb0Ciy75 +aaClLC8fiiIh+FUFZ5aIZkfhKH97QvehFO5O7mqCjM7ipvtEm+Vs1IVtXWDONUxo +SfgbjEPBV8+eflgvKQ6jJqiSqs8EnqdbGAfhxVG/3RN1b5xSFtKz6kzHQE+Gy6QT +DGCVhYvDq8j6G2LCePsqE8piOnSaXuRwD4/YEOaYhx4jjgOnaM0m/dM/Cx9wy2xg +LMRBjBwxFf6palgiFUvyqvturIPONQICkM/lZkpmHbeM4FCat/CD5VW+JgpYiEtW +2oFslTEbawUjmEYnzdo9iw9KPLJQqtasFEWzkWWnJrfm7AVGxcgAHVqGZhUMgq0k +MccM2zYZN2fCSZUUueDB7VCxFq5jK2oLzE14ngXdR7ZbxT3qai/zvGg1kl9y1bIF +WVTK0WZnHqZwVnHQVBH0Duv0uyRUzb6yRRziuLN5aBGQpy/Jm7MS0jLidCbqoCXC +dYqGMFlImzU+6CwPyTJo+X+v6L+FATIxZRpBBeEhHqEU6wz51ms68Sjx4bpW33b+ +WFt0JKEmIxB1puJK1qQvKu/MxJyy52GNqiRg7HXkJH9MMYWoAkF2jKMLFoerUPun +7GaV8SIUTFO/5pbnpxZ97a2FuB2RvDKs7GSdspEmC3wbAPU= +-----END CERTIFICATE----- diff --git a/testdata/manifests/crd-field-removed.json b/testdata/manifests/crd-field-removed.json new file mode 100644 index 000000000..ccae96e59 --- /dev/null +++ b/testdata/manifests/crd-field-removed.json @@ -0,0 +1,126 @@ +{ + "apiVersion": "apiextensions.k8s.io/v1", + "kind": "CustomResourceDefinition", + "metadata": { + "name": "crontabs.stable.example.com" + }, + "spec": { + "group": "stable.example.com", + "versions": [ + { + "name": "v1", + "served": true, + "storage": true, + "schema": { + "openAPIV3Schema": { + "type": "object", + "properties": { + } + } + } + }, + { + "name": "v2", + "served": true, + "storage": false, + "schema": { + "openAPIV3Schema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "enum": { + "type":"integer" + }, + "minMaxValue": { + "type":"integer" + }, + "required": { + "type":"integer" + }, + "minMaxItems": { + "type":"array", + "items": { + "type":"string" + } + }, + "minMaxLength": { + "type":"string" + }, + "defaultVal": { + "type": "string" + }, + "requiredVal": { + "type": "string" + } + } + } + }, + "required": [ + "requiredVal" + ] + } + } + }, + { + "name": "v3", + "served": true, + "storage": false, + "schema": { + "openAPIV3Schema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "enum": { + "type":"integer" + }, + "minMaxValue": { + "type":"integer" + }, + "required": { + "type":"integer" + }, + "minMaxItems": { + "type":"array", + "items": { + "type":"string" + } + }, + "minMaxLength": { + "type":"string" + }, + "defaultVal": { + "type": "string" + }, + "requiredVal": { + "type": "string" + } + } + } + }, + "required": [ + "requiredVal" + ] + } + } + } + ], + "scope": "Cluster", + "names": { + "plural": "crontabs", + "singular": "crontab", + "kind": "CronTab", + "shortNames": [ + "ct" + ] + } + }, + "status": { + "storedVersions": [ + "v1" + ] + } +} diff --git a/testdata/manifests/crd-invalid b/testdata/manifests/crd-invalid new file mode 100644 index 000000000..6b7a9f4e0 --- /dev/null +++ b/testdata/manifests/crd-invalid @@ -0,0 +1 @@ +not json diff --git a/testdata/manifests/crd-invalid-upgrade.json b/testdata/manifests/crd-invalid-upgrade.json new file mode 100644 index 000000000..4131a68fb --- /dev/null +++ b/testdata/manifests/crd-invalid-upgrade.json @@ -0,0 +1,82 @@ +{ + "apiVersion": "apiextensions.k8s.io/v1", + "kind": "CustomResourceDefinition", + "metadata": { + "name": "crontabs.stable.example.com" + }, + "spec": { + "group": "stable.example.com", + "versions": [ + { + "name": "v2", + "served": true, + "storage": true, + "schema": { + "openAPIV3Schema": { + "type": "object", + "maxProperties": 20, + "minProperties": 1, + "properties": { + "spec": { + "type": "object", + "properties": { + "removedField": { + "type":"integer" + }, + "enum": { + "type":"integer", + "enum":[ + 1, + 2 + ] + }, + "minMaxValue": { + "type":"integer", + "minimum": 2, + "maximum": 3 + }, + "required": { + "type":"integer" + }, + "minMaxItems": { + "type":"array", + "minItems": 1, + "maxItems": 2, + "items": { + "type":"string" + } + }, + "minMaxLength": { + "type":"string", + "minLength": 1, + "maxLength": 10 + }, + "defaultVal": { + "type":"string", + "default":"foo" + }, + "requiredVal": { + "type": "string" + } + } + } + }, + "required": [ + "requiredVal", + "requiredAdded" + ] + } + } + } + ], + "scope": "Namespaced", + "names": { + "plural": "crontabs", + "singular": "crontab", + "kind": "CronTab", + "shortNames": [ + "ct" + ] + } + } +} diff --git a/testdata/manifests/crd-valid-upgrade.json b/testdata/manifests/crd-valid-upgrade.json new file mode 100644 index 000000000..ad640795a --- /dev/null +++ b/testdata/manifests/crd-valid-upgrade.json @@ -0,0 +1,127 @@ +{ + "apiVersion": "apiextensions.k8s.io/v1", + "kind": "CustomResourceDefinition", + "metadata": { + "name": "crontabs.stable.example.com" + }, + "spec": { + "group": "stable.example.com", + "versions": [ + { + "name": "v1", + "served": true, + "storage": false, + "schema": { + "openAPIV3Schema": { + "type": "object", + "properties": { + } + } + } + }, + { + "name": "v2", + "served": true, + "storage": false, + "schema": { + "openAPIV3Schema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "removedField": { + "type":"integer" + }, + "enum": { + "type":"integer" + }, + "minMaxValue": { + "type":"integer" + }, + "required": { + "type":"integer" + }, + "minMaxItems": { + "type":"array", + "items": { + "type":"string" + } + }, + "minMaxLength": { + "type":"string" + }, + "defaultVal": { + "type": "string" + }, + "requiredVal": { + "type": "string" + } + } + } + }, + "required": [ + "requiredVal" + ] + } + } + }, + { + "name": "v3", + "served": true, + "storage": true, + "schema": { + "openAPIV3Schema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "removedField": { + "type":"integer" + }, + "enum": { + "type":"integer" + }, + "minMaxValue": { + "type":"integer" + }, + "required": { + "type":"integer" + }, + "minMaxItems": { + "type":"array", + "items": { + "type":"string" + } + }, + "minMaxLength": { + "type":"string" + }, + "defaultVal": { + "type": "string" + }, + "requiredVal": { + "type": "string" + } + } + } + }, + "required": [ + "requiredVal" + ] + } + } + } + ], + "scope": "Cluster", + "names": { + "plural": "crontabs", + "singular": "crontab", + "kind": "CronTab", + "shortNames": [ + "ct" + ] + } + } +} diff --git a/testdata/manifests/no-crds.json b/testdata/manifests/no-crds.json new file mode 100644 index 000000000..a4cf5505b --- /dev/null +++ b/testdata/manifests/no-crds.json @@ -0,0 +1,30 @@ +{ + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "creationTimestamp": null, + "labels": { + "app.kubernetes.io/component": "controller", + "app.kubernetes.io/name": "prometheus-operator", + "app.kubernetes.io/version": "1.0.0" + }, + "name": "prometheus-operator" + }, + "spec": { + "clusterIP": "None", + "ports": [ + { + "name": "http", + "port": 8080, + "targetPort": "http" + } + ], + "selector": { + "app.kubernetes.io/component": "controller", + "app.kubernetes.io/name": "prometheus-operator" + } + }, + "status": { + "loadBalancer": {} + } +} diff --git a/testdata/manifests/old-crd.json b/testdata/manifests/old-crd.json new file mode 100644 index 000000000..0dbc510d4 --- /dev/null +++ b/testdata/manifests/old-crd.json @@ -0,0 +1,86 @@ +{ + "apiVersion": "apiextensions.k8s.io/v1", + "kind": "CustomResourceDefinition", + "metadata": { + "name": "crontabs.stable.example.com" + }, + "spec": { + "group": "stable.example.com", + "versions": [ + { + "name": "v1", + "served": true, + "storage": false, + "schema": { + "openAPIV3Schema": { + "type": "object", + "properties": { + } + } + } + }, + { + "name": "v2", + "served": true, + "storage": true, + "schema": { + "openAPIV3Schema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "removedField": { + "type":"integer" + }, + "enum": { + "type":"integer" + }, + "minMaxValue": { + "type":"integer" + }, + "required": { + "type":"integer" + }, + "minMaxItems": { + "type":"array", + "items": { + "type":"string" + } + }, + "minMaxLength": { + "type":"string" + }, + "defaultVal": { + "type": "string" + }, + "requiredVal": { + "type": "string" + } + } + } + }, + "required": [ + "requiredVal" + ] + } + } + } + ], + "scope": "Cluster", + "names": { + "plural": "crontabs", + "singular": "crontab", + "kind": "CronTab", + "shortNames": [ + "ct" + ] + } + }, + "status": { + "storedVersions": [ + "v1", + "v2" + ] + } +} diff --git a/vendor/github.com/vmware-tanzu/carvel-vendir/LICENSE b/vendor/carvel.dev/vendir/LICENSE similarity index 100% rename from vendor/github.com/vmware-tanzu/carvel-vendir/LICENSE rename to vendor/carvel.dev/vendir/LICENSE diff --git a/vendor/github.com/vmware-tanzu/carvel-vendir/NOTICE b/vendor/carvel.dev/vendir/NOTICE similarity index 100% rename from vendor/github.com/vmware-tanzu/carvel-vendir/NOTICE rename to vendor/carvel.dev/vendir/NOTICE diff --git a/vendor/github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/config.go b/vendor/carvel.dev/vendir/pkg/vendir/versions/v1alpha1/config.go similarity index 100% rename from vendor/github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/config.go rename to vendor/carvel.dev/vendir/pkg/vendir/versions/v1alpha1/config.go diff --git a/vendor/github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/generated.pb.go b/vendor/carvel.dev/vendir/pkg/vendir/versions/v1alpha1/generated.pb.go similarity index 78% rename from vendor/github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/generated.pb.go rename to vendor/carvel.dev/vendir/pkg/vendir/versions/v1alpha1/generated.pb.go index c67facc7c..56ab6b7dc 100644 --- a/vendor/github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/generated.pb.go +++ b/vendor/carvel.dev/vendir/pkg/vendir/versions/v1alpha1/generated.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/generated.proto +// source: carvel.dev/vendir/pkg/vendir/versions/v1alpha1/generated.proto package v1alpha1 @@ -24,12 +24,12 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func (m *VersionSelection) Reset() { *m = VersionSelection{} } func (*VersionSelection) ProtoMessage() {} func (*VersionSelection) Descriptor() ([]byte, []int) { - return fileDescriptor_8d3ef80c738fc456, []int{0} + return fileDescriptor_f7fa722d77d11bd9, []int{0} } func (m *VersionSelection) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -57,7 +57,7 @@ var xxx_messageInfo_VersionSelection proto.InternalMessageInfo func (m *VersionSelectionSemver) Reset() { *m = VersionSelectionSemver{} } func (*VersionSelectionSemver) ProtoMessage() {} func (*VersionSelectionSemver) Descriptor() ([]byte, []int) { - return fileDescriptor_8d3ef80c738fc456, []int{1} + return fileDescriptor_f7fa722d77d11bd9, []int{1} } func (m *VersionSelectionSemver) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -85,7 +85,7 @@ var xxx_messageInfo_VersionSelectionSemver proto.InternalMessageInfo func (m *VersionSelectionSemverPrereleases) Reset() { *m = VersionSelectionSemverPrereleases{} } func (*VersionSelectionSemverPrereleases) ProtoMessage() {} func (*VersionSelectionSemverPrereleases) Descriptor() ([]byte, []int) { - return fileDescriptor_8d3ef80c738fc456, []int{2} + return fileDescriptor_f7fa722d77d11bd9, []int{2} } func (m *VersionSelectionSemverPrereleases) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -111,40 +111,38 @@ func (m *VersionSelectionSemverPrereleases) XXX_DiscardUnknown() { var xxx_messageInfo_VersionSelectionSemverPrereleases proto.InternalMessageInfo func init() { - proto.RegisterType((*VersionSelection)(nil), "github.com.vmware_tanzu.carvel_vendir.pkg.vendir.versions.v1alpha1.VersionSelection") - proto.RegisterType((*VersionSelectionSemver)(nil), "github.com.vmware_tanzu.carvel_vendir.pkg.vendir.versions.v1alpha1.VersionSelectionSemver") - proto.RegisterType((*VersionSelectionSemverPrereleases)(nil), "github.com.vmware_tanzu.carvel_vendir.pkg.vendir.versions.v1alpha1.VersionSelectionSemverPrereleases") + proto.RegisterType((*VersionSelection)(nil), "carvel.dev.vendir.pkg.vendir.versions.v1alpha1.VersionSelection") + proto.RegisterType((*VersionSelectionSemver)(nil), "carvel.dev.vendir.pkg.vendir.versions.v1alpha1.VersionSelectionSemver") + proto.RegisterType((*VersionSelectionSemverPrereleases)(nil), "carvel.dev.vendir.pkg.vendir.versions.v1alpha1.VersionSelectionSemverPrereleases") } func init() { - proto.RegisterFile("github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/generated.proto", fileDescriptor_8d3ef80c738fc456) -} - -var fileDescriptor_8d3ef80c738fc456 = []byte{ - // 354 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x8f, 0x31, 0x4b, 0xf3, 0x40, - 0x1c, 0xc6, 0x73, 0xef, 0x0b, 0xc5, 0x5e, 0x06, 0x25, 0x82, 0x14, 0x87, 0xab, 0x76, 0xea, 0xd2, - 0x0b, 0x15, 0xfc, 0x02, 0x71, 0x72, 0x93, 0x14, 0x3a, 0x74, 0x29, 0xd7, 0xf4, 0xdf, 0xf4, 0x68, - 0x7a, 0x17, 0x2e, 0xd7, 0x08, 0x0e, 0xe2, 0x47, 0x10, 0x27, 0x3f, 0x52, 0xc7, 0x8e, 0x9d, 0x8a, - 0x8d, 0x9b, 0x9f, 0x42, 0x7a, 0xd7, 0x92, 0x20, 0x82, 0x83, 0xb8, 0x3d, 0xf7, 0xbf, 0x87, 0xdf, - 0xf3, 0x3c, 0x38, 0x8c, 0xb9, 0x9e, 0x2e, 0x46, 0x34, 0x92, 0x73, 0x3f, 0x9f, 0xdf, 0x33, 0x05, - 0x1d, 0xcd, 0xc4, 0xc3, 0xc2, 0x8f, 0x98, 0xca, 0x21, 0xe9, 0xe4, 0x20, 0xc6, 0x5c, 0xf9, 0xe9, - 0x2c, 0xf6, 0xf7, 0x32, 0x07, 0x95, 0x71, 0x29, 0x32, 0x3f, 0xef, 0xb2, 0x24, 0x9d, 0xb2, 0xae, - 0x1f, 0x83, 0x00, 0xc5, 0x34, 0x8c, 0x69, 0xaa, 0xa4, 0x96, 0x5e, 0x50, 0x32, 0xa9, 0x65, 0x0e, - 0x0d, 0x93, 0x5a, 0xe6, 0xd0, 0x82, 0x68, 0x3a, 0x8b, 0xe9, 0x5e, 0x1e, 0x98, 0xf4, 0xc0, 0x3c, - 0xef, 0x54, 0x7a, 0xc5, 0x32, 0x96, 0xbe, 0x41, 0x8f, 0x16, 0x13, 0xf3, 0x32, 0x0f, 0xa3, 0x6c, - 0x64, 0xeb, 0x05, 0xe1, 0x93, 0xbe, 0x85, 0xf4, 0x20, 0x81, 0x48, 0x73, 0x29, 0xbc, 0x47, 0x5c, - 0xcb, 0x60, 0x9e, 0x83, 0x6a, 0xa0, 0x0b, 0xd4, 0x76, 0xaf, 0x06, 0xf4, 0xf7, 0xc5, 0xe8, 0xd7, - 0x94, 0x9e, 0x49, 0x08, 0x70, 0xb1, 0x69, 0xd6, 0xac, 0x0e, 0xf7, 0xa9, 0xad, 0x0f, 0x84, 0xcf, - 0xbe, 0xb7, 0x7b, 0xd7, 0xd8, 0x8d, 0xa4, 0xc8, 0xb4, 0x62, 0x5c, 0xe8, 0xcc, 0xf4, 0xab, 0x07, - 0xa7, 0xcb, 0x4d, 0xd3, 0x29, 0x36, 0x4d, 0xf7, 0xa6, 0xfc, 0x0a, 0xab, 0x3e, 0xef, 0x15, 0x61, - 0x37, 0x55, 0xa0, 0x20, 0x01, 0x96, 0x41, 0xd6, 0xf8, 0x67, 0x76, 0xc1, 0xdf, 0xed, 0xba, 0x2b, - 0xc3, 0x82, 0xe3, 0x5d, 0xb5, 0xca, 0x21, 0xac, 0x56, 0x69, 0xf5, 0xf1, 0xe5, 0x8f, 0x08, 0xaf, - 0x8b, 0x5d, 0x3e, 0x06, 0xa1, 0xf9, 0x84, 0x83, 0xda, 0xcd, 0xfe, 0xdf, 0xae, 0x5b, 0xee, 0x6d, - 0x79, 0x0e, 0xab, 0x9e, 0x80, 0x2e, 0xb7, 0xc4, 0x59, 0x6d, 0x89, 0xb3, 0xde, 0x12, 0xe7, 0xa9, - 0x20, 0x68, 0x59, 0x10, 0xb4, 0x2a, 0x08, 0x5a, 0x17, 0x04, 0xbd, 0x15, 0x04, 0x3d, 0xbf, 0x13, - 0x67, 0x70, 0x74, 0xd8, 0xf1, 0x19, 0x00, 0x00, 0xff, 0xff, 0x97, 0x30, 0x55, 0x40, 0xd1, 0x02, - 0x00, 0x00, + proto.RegisterFile("carvel.dev/vendir/pkg/vendir/versions/v1alpha1/generated.proto", fileDescriptor_f7fa722d77d11bd9) +} + +var fileDescriptor_f7fa722d77d11bd9 = []byte{ + // 333 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x8f, 0x31, 0x4b, 0xfb, 0x40, + 0x18, 0xc6, 0x73, 0xff, 0x3f, 0x14, 0x7b, 0x19, 0x94, 0x08, 0x52, 0x1c, 0xae, 0xda, 0xa9, 0x8b, + 0x17, 0x2a, 0xb8, 0x3a, 0x44, 0x10, 0xdc, 0x34, 0x85, 0x0e, 0x6e, 0x69, 0xf2, 0x36, 0x3d, 0x9b, + 0xde, 0x85, 0xbb, 0x6b, 0x46, 0x71, 0xf0, 0x03, 0xf8, 0xb1, 0x3a, 0x76, 0x92, 0x4e, 0xc5, 0x9e, + 0x5f, 0x44, 0x7a, 0x31, 0x24, 0x88, 0x20, 0x82, 0xdb, 0x73, 0xef, 0xbd, 0xcf, 0xef, 0x7d, 0x1e, + 0x7c, 0x19, 0x47, 0xb2, 0x80, 0x8c, 0x26, 0x50, 0xf8, 0x05, 0xf0, 0x84, 0x49, 0x3f, 0x9f, 0xa5, + 0x95, 0x2c, 0x40, 0x2a, 0x26, 0xb8, 0xf2, 0x8b, 0x41, 0x94, 0xe5, 0xd3, 0x68, 0xe0, 0xa7, 0xc0, + 0x41, 0x46, 0x1a, 0x12, 0x9a, 0x4b, 0xa1, 0x85, 0x47, 0x6b, 0x3f, 0x2d, 0x4d, 0x34, 0x9f, 0xa5, + 0x95, 0xac, 0xfc, 0xb4, 0xf2, 0x1f, 0x9f, 0xa5, 0x4c, 0x4f, 0x17, 0x63, 0x1a, 0x8b, 0xb9, 0x9f, + 0x8a, 0x54, 0xf8, 0x16, 0x33, 0x5e, 0x4c, 0xec, 0xcb, 0x3e, 0xac, 0x2a, 0xf1, 0xbd, 0x47, 0x7c, + 0x30, 0x2a, 0x19, 0x43, 0xc8, 0x20, 0xd6, 0x4c, 0x70, 0xef, 0x01, 0xb7, 0x14, 0xcc, 0x0b, 0x90, + 0x1d, 0x74, 0x82, 0xfa, 0xee, 0xf9, 0xf5, 0x2f, 0x33, 0xd0, 0xaf, 0xc4, 0xa1, 0xa5, 0x05, 0xd8, + 0x6c, 0xba, 0xad, 0x52, 0x87, 0x9f, 0x17, 0x7a, 0xaf, 0x08, 0x1f, 0x7d, 0xbf, 0xee, 0x5d, 0x60, + 0x37, 0x16, 0x5c, 0x69, 0x19, 0x31, 0xae, 0x95, 0xcd, 0xd2, 0x0e, 0x0e, 0x97, 0x9b, 0xae, 0x63, + 0x36, 0x5d, 0xf7, 0xaa, 0xfe, 0x0a, 0x9b, 0x7b, 0xde, 0x33, 0xc2, 0x6e, 0x2e, 0x41, 0x42, 0x06, + 0x91, 0x02, 0xd5, 0xf9, 0x67, 0x3b, 0xdc, 0xfd, 0x4d, 0x87, 0xdb, 0x1a, 0x1c, 0xec, 0xef, 0x62, + 0x34, 0x06, 0x61, 0xf3, 0x6c, 0x6f, 0x84, 0x4f, 0x7f, 0x44, 0x78, 0x03, 0xec, 0xb2, 0x04, 0xb8, + 0x66, 0x13, 0x06, 0x72, 0x57, 0xf1, 0x7f, 0xbf, 0x5d, 0x72, 0x6f, 0xea, 0x71, 0xd8, 0xdc, 0x09, + 0xe8, 0x72, 0x4b, 0x9c, 0xd5, 0x96, 0x38, 0xeb, 0x2d, 0x71, 0x9e, 0x0c, 0x41, 0x4b, 0x43, 0xd0, + 0xca, 0x10, 0xb4, 0x36, 0x04, 0xbd, 0x19, 0x82, 0x5e, 0xde, 0x89, 0x73, 0xbf, 0x57, 0xf5, 0xf8, + 0x08, 0x00, 0x00, 0xff, 0xff, 0xff, 0x5f, 0x50, 0x3c, 0x80, 0x02, 0x00, 0x00, } func (m *VersionSelection) Marshal() (dAtA []byte, err error) { @@ -424,10 +422,7 @@ func (m *VersionSelection) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -545,10 +540,7 @@ func (m *VersionSelectionSemver) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -630,10 +622,7 @@ func (m *VersionSelectionSemverPrereleases) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -651,6 +640,7 @@ func (m *VersionSelectionSemverPrereleases) Unmarshal(dAtA []byte) error { func skipGenerated(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 + depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { @@ -682,10 +672,8 @@ func skipGenerated(dAtA []byte) (n int, err error) { break } } - return iNdEx, nil case 1: iNdEx += 8 - return iNdEx, nil case 2: var length int for shift := uint(0); ; shift += 7 { @@ -706,55 +694,30 @@ func skipGenerated(dAtA []byte) (n int, err error) { return 0, ErrInvalidLengthGenerated } iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthGenerated - } - return iNdEx, nil case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipGenerated(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthGenerated - } - } - return iNdEx, nil + depth++ case 4: - return iNdEx, nil + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- case 5: iNdEx += 4 - return iNdEx, nil default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } } - panic("unreachable") + return 0, io.ErrUnexpectedEOF } var ( - ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") ) diff --git a/vendor/github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/generated.proto b/vendor/carvel.dev/vendir/pkg/vendir/versions/v1alpha1/generated.proto similarity index 89% rename from vendor/github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/generated.proto rename to vendor/carvel.dev/vendir/pkg/vendir/versions/v1alpha1/generated.proto index c9b2f884c..537db467e 100644 --- a/vendor/github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/generated.proto +++ b/vendor/carvel.dev/vendir/pkg/vendir/versions/v1alpha1/generated.proto @@ -3,7 +3,7 @@ syntax = 'proto2'; -package github.com.vmware_tanzu.carvel_vendir.pkg.vendir.versions.v1alpha1; +package carvel.dev.vendir.pkg.vendir.versions.v1alpha1; // Package-wide variables from generator "generated". option go_package = "v1alpha1"; diff --git a/vendor/github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/zz_generated.deepcopy.go b/vendor/carvel.dev/vendir/pkg/vendir/versions/v1alpha1/zz_generated.deepcopy.go similarity index 100% rename from vendor/github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/zz_generated.deepcopy.go rename to vendor/carvel.dev/vendir/pkg/vendir/versions/v1alpha1/zz_generated.deepcopy.go diff --git a/vendor/github.com/cespare/xxhash/v2/README.md b/vendor/github.com/cespare/xxhash/v2/README.md index 8bf0e5b78..33c88305c 100644 --- a/vendor/github.com/cespare/xxhash/v2/README.md +++ b/vendor/github.com/cespare/xxhash/v2/README.md @@ -70,3 +70,5 @@ benchstat <(go test -benchtime 500ms -count 15 -bench 'Sum64$') - [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics) - [FreeCache](https://github.com/coocood/freecache) - [FastCache](https://github.com/VictoriaMetrics/fastcache) +- [Ristretto](https://github.com/dgraph-io/ristretto) +- [Badger](https://github.com/dgraph-io/badger) diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash.go b/vendor/github.com/cespare/xxhash/v2/xxhash.go index a9e0d45c9..78bddf1ce 100644 --- a/vendor/github.com/cespare/xxhash/v2/xxhash.go +++ b/vendor/github.com/cespare/xxhash/v2/xxhash.go @@ -19,10 +19,13 @@ const ( // Store the primes in an array as well. // // The consts are used when possible in Go code to avoid MOVs but we need a -// contiguous array of the assembly code. +// contiguous array for the assembly code. var primes = [...]uint64{prime1, prime2, prime3, prime4, prime5} // Digest implements hash.Hash64. +// +// Note that a zero-valued Digest is not ready to receive writes. +// Call Reset or create a Digest using New before calling other methods. type Digest struct { v1 uint64 v2 uint64 @@ -33,19 +36,31 @@ type Digest struct { n int // how much of mem is used } -// New creates a new Digest that computes the 64-bit xxHash algorithm. +// New creates a new Digest with a zero seed. func New() *Digest { + return NewWithSeed(0) +} + +// NewWithSeed creates a new Digest with the given seed. +func NewWithSeed(seed uint64) *Digest { var d Digest - d.Reset() + d.ResetWithSeed(seed) return &d } // Reset clears the Digest's state so that it can be reused. +// It uses a seed value of zero. func (d *Digest) Reset() { - d.v1 = primes[0] + prime2 - d.v2 = prime2 - d.v3 = 0 - d.v4 = -primes[0] + d.ResetWithSeed(0) +} + +// ResetWithSeed clears the Digest's state so that it can be reused. +// It uses the given seed to initialize the state. +func (d *Digest) ResetWithSeed(seed uint64) { + d.v1 = seed + prime1 + prime2 + d.v2 = seed + prime2 + d.v3 = seed + d.v4 = seed - prime1 d.total = 0 d.n = 0 } diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go b/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go index 9216e0a40..78f95f256 100644 --- a/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go @@ -6,7 +6,7 @@ package xxhash -// Sum64 computes the 64-bit xxHash digest of b. +// Sum64 computes the 64-bit xxHash digest of b with a zero seed. // //go:noescape func Sum64(b []byte) uint64 diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_other.go b/vendor/github.com/cespare/xxhash/v2/xxhash_other.go index 26df13bba..118e49e81 100644 --- a/vendor/github.com/cespare/xxhash/v2/xxhash_other.go +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_other.go @@ -3,7 +3,7 @@ package xxhash -// Sum64 computes the 64-bit xxHash digest of b. +// Sum64 computes the 64-bit xxHash digest of b with a zero seed. func Sum64(b []byte) uint64 { // A simpler version would be // d := New() diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go b/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go index e86f1b5fd..05f5e7dfe 100644 --- a/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go @@ -5,7 +5,7 @@ package xxhash -// Sum64String computes the 64-bit xxHash digest of s. +// Sum64String computes the 64-bit xxHash digest of s with a zero seed. func Sum64String(s string) uint64 { return Sum64([]byte(s)) } diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go b/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go index 1c1638fd8..cf9d42aed 100644 --- a/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go @@ -33,7 +33,7 @@ import ( // // See https://github.com/golang/go/issues/42739 for discussion. -// Sum64String computes the 64-bit xxHash digest of s. +// Sum64String computes the 64-bit xxHash digest of s with a zero seed. // It may be faster than Sum64([]byte(s)) by avoiding a copy. func Sum64String(s string) uint64 { b := *(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)})) diff --git a/vendor/github.com/containerd/containerd/errdefs/errdefs_deprecated.go b/vendor/github.com/containerd/containerd/errdefs/errdefs_deprecated.go index c6a0d843e..a88cb8b18 100644 --- a/vendor/github.com/containerd/containerd/errdefs/errdefs_deprecated.go +++ b/vendor/github.com/containerd/containerd/errdefs/errdefs_deprecated.go @@ -24,6 +24,8 @@ // // The functions ToGRPC and FromGRPC can be used to map server-side and // client-side errors to the correct types. +// +// Deprecated: use [github.com/containerd/errdefs]. package errdefs import ( diff --git a/vendor/github.com/containerd/containerd/version/version.go b/vendor/github.com/containerd/containerd/version/version.go index d660c72e2..d9fdca566 100644 --- a/vendor/github.com/containerd/containerd/version/version.go +++ b/vendor/github.com/containerd/containerd/version/version.go @@ -23,7 +23,7 @@ var ( Package = "github.com/containerd/containerd" // Version holds the complete version number. Filled in at linking time. - Version = "1.7.19+unknown" + Version = "1.7.20+unknown" // Revision is filled with the VCS (e.g. git) revision being used to build // the program at linking time. diff --git a/vendor/github.com/google/go-containerregistry/pkg/v1/remote/write.go b/vendor/github.com/google/go-containerregistry/pkg/v1/remote/write.go index 30fe59051..1167cb793 100644 --- a/vendor/github.com/google/go-containerregistry/pkg/v1/remote/write.go +++ b/vendor/github.com/google/go-containerregistry/pkg/v1/remote/write.go @@ -45,14 +45,7 @@ type Taggable interface { // Write pushes the provided img to the specified image reference. func Write(ref name.Reference, img v1.Image, options ...Option) (rerr error) { - o, err := makeOptions(options...) - if err != nil { - return err - } - if o.progress != nil { - defer func() { o.progress.Close(rerr) }() - } - return newPusher(o).Push(o.context, ref, img) + return Push(ref, img, options...) } // writer writes the elements of an image to a remote image reference. @@ -656,14 +649,7 @@ func scopesForUploadingImage(repo name.Repository, layers []v1.Layer) []string { // WriteIndex will attempt to push all of the referenced manifests before // attempting to push the ImageIndex, to retain referential integrity. func WriteIndex(ref name.Reference, ii v1.ImageIndex, options ...Option) (rerr error) { - o, err := makeOptions(options...) - if err != nil { - return err - } - if o.progress != nil { - defer func() { o.progress.Close(rerr) }() - } - return newPusher(o).Push(o.context, ref, ii) + return Push(ref, ii, options...) } // WriteLayer uploads the provided Layer to the specified repo. @@ -711,3 +697,15 @@ func Put(ref name.Reference, t Taggable, options ...Option) error { } return newPusher(o).Put(o.context, ref, t) } + +// Push uploads the given Taggable to the specified reference. +func Push(ref name.Reference, t Taggable, options ...Option) (rerr error) { + o, err := makeOptions(options...) + if err != nil { + return err + } + if o.progress != nil { + defer func() { o.progress.Close(rerr) }() + } + return newPusher(o).Push(o.context, ref, t) +} diff --git a/vendor/github.com/klauspost/compress/zstd/dict.go b/vendor/github.com/klauspost/compress/zstd/dict.go index 8d5567fe6..b7b83164b 100644 --- a/vendor/github.com/klauspost/compress/zstd/dict.go +++ b/vendor/github.com/klauspost/compress/zstd/dict.go @@ -273,6 +273,9 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { enc.Encode(&block, b) addValues(&remain, block.literals) litTotal += len(block.literals) + if len(block.sequences) == 0 { + continue + } seqs += len(block.sequences) block.genCodes() addHist(&ll, block.coders.llEnc.Histogram()) @@ -286,6 +289,9 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { if offset == 0 { continue } + if int(offset) >= len(o.History) { + continue + } if offset > 3 { newOffsets[offset-3]++ } else { @@ -336,6 +342,9 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { if seqs/nUsed < 512 { // Use 512 as minimum. nUsed = seqs / 512 + if nUsed == 0 { + nUsed = 1 + } } copyHist := func(dst *fseEncoder, src *[256]int) ([]byte, error) { hist := dst.Histogram() @@ -358,6 +367,28 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { fakeLength += v hist[i] = uint32(v) } + + // Ensure we aren't trying to represent RLE. + if maxCount == fakeLength { + for i := range hist { + if uint8(i) == maxSym { + fakeLength++ + maxSym++ + hist[i+1] = 1 + if maxSym > 1 { + break + } + } + if hist[0] == 0 { + fakeLength++ + hist[i] = 1 + if maxSym > 1 { + break + } + } + } + } + dst.HistogramFinished(maxSym, maxCount) dst.reUsed = false dst.useRLE = false diff --git a/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s b/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s index 17901e080..ae7d4d329 100644 --- a/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s +++ b/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s @@ -162,12 +162,12 @@ finalize: MOVD h, ret+24(FP) RET -// func writeBlocks(d *Digest, b []byte) int +// func writeBlocks(s *Digest, b []byte) int TEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40 LDP ·primes+0(SB), (prime1, prime2) // Load state. Assume v[1-4] are stored contiguously. - MOVD d+0(FP), digest + MOVD s+0(FP), digest LDP 0(digest), (v1, v2) LDP 16(digest), (v3, v4) diff --git a/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s b/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s index 9a7655c0f..0782b86e3 100644 --- a/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s +++ b/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s @@ -5,7 +5,6 @@ #include "textflag.h" // func matchLen(a []byte, b []byte) int -// Requires: BMI TEXT ·matchLen(SB), NOSPLIT, $0-56 MOVQ a_base+0(FP), AX MOVQ b_base+24(FP), CX @@ -17,17 +16,16 @@ TEXT ·matchLen(SB), NOSPLIT, $0-56 JB matchlen_match4_standalone matchlen_loopback_standalone: - MOVQ (AX)(SI*1), BX - XORQ (CX)(SI*1), BX - TESTQ BX, BX - JZ matchlen_loop_standalone + MOVQ (AX)(SI*1), BX + XORQ (CX)(SI*1), BX + JZ matchlen_loop_standalone #ifdef GOAMD64_v3 TZCNTQ BX, BX #else BSFQ BX, BX #endif - SARQ $0x03, BX + SHRL $0x03, BX LEAL (SI)(BX*1), SI JMP gen_match_len_end diff --git a/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md b/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md index 76577dc78..782817c39 100644 --- a/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md +++ b/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md @@ -1,3 +1,14 @@ +## 2.19.1 + +### Fixes +- update supported platforms for race conditions [63c8c30] +- [build] Allow custom name for binaries. [ff41e27] + +### Maintenance +- bump gomega [76f4e0c] +- Bump rexml from 3.2.6 to 3.2.8 in /docs (#1417) [b69c00d] +- Bump golang.org/x/sys from 0.20.0 to 0.21.0 (#1425) [f097741] + ## 2.19.0 ### Features diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go index 5db5d1a7b..fd1726084 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go @@ -2,6 +2,8 @@ package build import ( "fmt" + "os" + "path" "github.com/onsi/ginkgo/v2/ginkgo/command" "github.com/onsi/ginkgo/v2/ginkgo/internal" @@ -53,7 +55,18 @@ func buildSpecs(args []string, cliConfig types.CLIConfig, goFlagsConfig types.Go if suite.State.Is(internal.TestSuiteStateFailedToCompile) { fmt.Println(suite.CompilationError.Error()) } else { - fmt.Printf("Compiled %s.test\n", suite.PackageName) + if len(goFlagsConfig.O) == 0 { + goFlagsConfig.O = path.Join(suite.Path, suite.PackageName+".test") + } else { + stat, err := os.Stat(goFlagsConfig.O) + if err != nil { + panic(err) + } + if stat.IsDir() { + goFlagsConfig.O += "/" + suite.PackageName + ".test" + } + } + fmt.Printf("Compiled %s\n", goFlagsConfig.O) } } diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go index 86da7340d..48827cc5e 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go @@ -25,6 +25,18 @@ func CompileSuite(suite TestSuite, goFlagsConfig types.GoFlagsConfig) TestSuite return suite } + if len(goFlagsConfig.O) > 0 { + userDefinedPath, err := filepath.Abs(goFlagsConfig.O) + if err != nil { + suite.State = TestSuiteStateFailedToCompile + suite.CompilationError = fmt.Errorf("Failed to compute compilation target path %s:\n%s", goFlagsConfig.O, err.Error()) + return suite + } + path = userDefinedPath + } + + goFlagsConfig.O = path + ginkgoInvocationPath, _ := os.Getwd() ginkgoInvocationPath, _ = filepath.Abs(ginkgoInvocationPath) packagePath := suite.AbsPath() @@ -34,7 +46,7 @@ func CompileSuite(suite TestSuite, goFlagsConfig types.GoFlagsConfig) TestSuite suite.CompilationError = fmt.Errorf("Failed to get relative path from package to the current working directory:\n%s", err.Error()) return suite } - args, err := types.GenerateGoTestCompileArgs(goFlagsConfig, path, "./", pathToInvocationPath) + args, err := types.GenerateGoTestCompileArgs(goFlagsConfig, "./", pathToInvocationPath) if err != nil { suite.State = TestSuiteStateFailedToCompile suite.CompilationError = fmt.Errorf("Failed to generate go test compile flags:\n%s", err.Error()) diff --git a/vendor/github.com/onsi/ginkgo/v2/types/config.go b/vendor/github.com/onsi/ginkgo/v2/types/config.go index 66463cf5e..9ca408eae 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/config.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/config.go @@ -219,6 +219,7 @@ type GoFlagsConfig struct { ToolExec string Work bool X bool + O string } func NewDefaultGoFlagsConfig() GoFlagsConfig { @@ -511,7 +512,7 @@ var GinkgoCLIWatchFlags = GinkgoFlags{ // GoBuildFlags provides flags for the Ginkgo CLI build, run, and watch commands that capture go's build-time flags. These are passed to go test -c by the ginkgo CLI var GoBuildFlags = GinkgoFlags{ {KeyPath: "Go.Race", Name: "race", SectionKey: "code-and-coverage-analysis", - Usage: "enable data race detection. Supported only on linux/amd64, freebsd/amd64, darwin/amd64, windows/amd64, linux/ppc64le and linux/arm64 (only for 48-bit VMA)."}, + Usage: "enable data race detection. Supported on linux/amd64, linux/ppc64le, linux/arm64, linux/s390x, freebsd/amd64, netbsd/amd64, darwin/amd64, darwin/arm64, and windows/amd64."}, {KeyPath: "Go.Vet", Name: "vet", UsageArgument: "list", SectionKey: "code-and-coverage-analysis", Usage: `Configure the invocation of "go vet" during "go test" to use the comma-separated list of vet checks. If list is empty, "go test" runs "go vet" with a curated list of checks believed to be always worth addressing. If list is "off", "go test" does not run "go vet" at all. Available checks can be found by running 'go doc cmd/vet'`}, {KeyPath: "Go.Cover", Name: "cover", SectionKey: "code-and-coverage-analysis", @@ -561,6 +562,8 @@ var GoBuildFlags = GinkgoFlags{ Usage: "print the name of the temporary work directory and do not delete it when exiting."}, {KeyPath: "Go.X", Name: "x", SectionKey: "go-build", Usage: "print the commands."}, + {KeyPath: "Go.O", Name: "o", SectionKey: "go-build", + Usage: "output binary path (including name)."}, } // GoRunFlags provides flags for the Ginkgo CLI run, and watch commands that capture go's run-time flags. These are passed to the compiled test binary by the ginkgo CLI @@ -614,7 +617,7 @@ func VetAndInitializeCLIAndGoConfig(cliConfig CLIConfig, goFlagsConfig GoFlagsCo } // GenerateGoTestCompileArgs is used by the Ginkgo CLI to generate command line arguments to pass to the go test -c command when compiling the test -func GenerateGoTestCompileArgs(goFlagsConfig GoFlagsConfig, destination string, packageToBuild string, pathToInvocationPath string) ([]string, error) { +func GenerateGoTestCompileArgs(goFlagsConfig GoFlagsConfig, packageToBuild string, pathToInvocationPath string) ([]string, error) { // if the user has set the CoverProfile run-time flag make sure to set the build-time cover flag to make sure // the built test binary can generate a coverprofile if goFlagsConfig.CoverProfile != "" { @@ -637,7 +640,7 @@ func GenerateGoTestCompileArgs(goFlagsConfig GoFlagsConfig, destination string, goFlagsConfig.CoverPkg = strings.Join(adjustedCoverPkgs, ",") } - args := []string{"test", "-c", "-o", destination, packageToBuild} + args := []string{"test", "-c", packageToBuild} goArgs, err := GenerateFlagArgs( GoBuildFlags, map[string]interface{}{ diff --git a/vendor/github.com/onsi/ginkgo/v2/types/version.go b/vendor/github.com/onsi/ginkgo/v2/types/version.go index acab03492..f2ee0501d 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/version.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/version.go @@ -1,3 +1,3 @@ package types -const VERSION = "2.19.0" +const VERSION = "2.19.1" diff --git a/vendor/github.com/onsi/gomega/CHANGELOG.md b/vendor/github.com/onsi/gomega/CHANGELOG.md index 62af14ad2..c6c34d65d 100644 --- a/vendor/github.com/onsi/gomega/CHANGELOG.md +++ b/vendor/github.com/onsi/gomega/CHANGELOG.md @@ -1,3 +1,25 @@ +## 1.34.1 + +### Maintenance +- Use slices from exp/slices to keep golang 1.20 compat [5e71dcd] + +## 1.34.0 + +### Features +- Add RoundTripper method to ghttp.Server [c549e0d] + +### Fixes +- fix incorrect handling of nil slices in HaveExactElements (fixes #771) [878940c] +- issue_765 - fixed bug in Hopcroft-Karp algorithm [ebadb67] + +### Maintenance +- bump ginkgo [8af2ece] +- Fix typo in docs [123a071] +- Bump github.com/onsi/ginkgo/v2 from 2.17.2 to 2.17.3 (#756) [0e69083] +- Bump google.golang.org/protobuf from 1.33.0 to 1.34.1 (#755) [2675796] +- Bump golang.org/x/net from 0.24.0 to 0.25.0 (#754) [4160c0f] +- Bump github-pages from 230 to 231 in /docs (#748) [892c303] + ## 1.33.1 ### Fixes diff --git a/vendor/github.com/onsi/gomega/gomega_dsl.go b/vendor/github.com/onsi/gomega/gomega_dsl.go index 9697d5134..2546ccceb 100644 --- a/vendor/github.com/onsi/gomega/gomega_dsl.go +++ b/vendor/github.com/onsi/gomega/gomega_dsl.go @@ -22,7 +22,7 @@ import ( "github.com/onsi/gomega/types" ) -const GOMEGA_VERSION = "1.33.1" +const GOMEGA_VERSION = "1.34.1" const nilGomegaPanic = `You are trying to make an assertion, but haven't registered Gomega's fail handler. If you're using Ginkgo then you probably forgot to put your assertion in an It(). diff --git a/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go b/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go index dca5b9446..5a236d7d6 100644 --- a/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go +++ b/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go @@ -30,15 +30,18 @@ func (matcher *HaveExactElementsMatcher) Match(actual interface{}) (success bool lenMatchers := len(matchers) lenValues := len(values) + success = true for i := 0; i < lenMatchers || i < lenValues; i++ { if i >= lenMatchers { matcher.extraIndex = i + success = false continue } if i >= lenValues { matcher.missingIndex = i + success = false return } @@ -49,15 +52,17 @@ func (matcher *HaveExactElementsMatcher) Match(actual interface{}) (success bool index: i, failure: err.Error(), }) + success = false } else if !match { matcher.mismatchFailures = append(matcher.mismatchFailures, mismatchFailure{ index: i, failure: elemMatcher.FailureMessage(values[i]), }) + success = false } } - return matcher.missingIndex+matcher.extraIndex+len(matcher.mismatchFailures) == 0, nil + return success, nil } func (matcher *HaveExactElementsMatcher) FailureMessage(actual interface{}) (message string) { diff --git a/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go b/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go index 1c54edd8f..4339acc64 100644 --- a/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go +++ b/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go @@ -1,6 +1,8 @@ package bipartitegraph import ( + "golang.org/x/exp/slices" + . "github.com/onsi/gomega/matchers/support/goraph/edge" . "github.com/onsi/gomega/matchers/support/goraph/node" "github.com/onsi/gomega/matchers/support/goraph/util" @@ -157,6 +159,11 @@ func (bg *BipartiteGraph) createSLAPGuideLayers(matching EdgeSet) (guideLayers [ if len(currentLayer) == 0 { return []NodeOrderedSet{} } + if done { // if last layer - into last layer must be only 'free' nodes + currentLayer = slices.DeleteFunc(currentLayer, func(in Node) bool { + return !matching.Free(in) + }) + } guideLayers = append(guideLayers, currentLayer) } diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/doc.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/doc.go index fdbe08d07..ad1e884ca 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/doc.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/doc.go @@ -1,4 +1,4 @@ -// Copyright 2020 VMware, Inc. +// Copyright 2024 The Carvel Authors. // SPDX-License-Identifier: Apache-2.0 // +k8s:deepcopy-gen=package diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/generated.pb.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/generated.pb.go index 772f7cff0..cb7a0d94e 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/generated.pb.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/generated.pb.go @@ -6,11 +6,12 @@ package v1alpha1 import ( fmt "fmt" + v1alpha1 "carvel.dev/vendir/pkg/vendir/versions/v1alpha1" + io "io" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - v1alpha1 "github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1" k8s_io_api_core_v1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -1113,167 +1114,169 @@ func init() { } var fileDescriptor_e972ccf085273df7 = []byte{ - // 2558 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0x5d, 0x8c, 0x1b, 0x57, - 0x15, 0xce, 0xac, 0xbd, 0xeb, 0xf5, 0xd9, 0x9f, 0x6c, 0x6e, 0xb2, 0xd4, 0x2c, 0x74, 0x1d, 0x4d, - 0xa5, 0xaa, 0x11, 0xc4, 0x56, 0x56, 0x69, 0x88, 0x40, 0x42, 0x5a, 0xef, 0x66, 0x37, 0x9b, 0xcd, - 0x26, 0xd6, 0xf5, 0x26, 0x34, 0x85, 0x36, 0x1d, 0x8f, 0xef, 0xda, 0x83, 0xc7, 0x33, 0xc3, 0xcc, - 0x1d, 0x67, 0x5d, 0x15, 0x09, 0x0a, 0x42, 0x85, 0x22, 0x11, 0x21, 0xb5, 0x20, 0x90, 0x78, 0x41, - 0xe2, 0x1d, 0xc1, 0x23, 0x2f, 0x88, 0x97, 0x48, 0x08, 0xa9, 0x52, 0x5f, 0xca, 0x8b, 0x21, 0xe6, - 0x89, 0x47, 0xd4, 0xb7, 0x3e, 0xa1, 0xfb, 0x33, 0x7f, 0xb6, 0x37, 0x5e, 0xa4, 0x9d, 0x34, 0x95, - 0x78, 0x9b, 0x39, 0xe7, 0xdc, 0xf3, 0x9d, 0x7b, 0xee, 0xbd, 0xe7, 0x9c, 0x7b, 0x66, 0xe0, 0x5e, - 0xd3, 0xa0, 0x2d, 0xbf, 0x5e, 0xd2, 0xed, 0x4e, 0xb9, 0xdb, 0x79, 0xa0, 0xb9, 0xe4, 0x22, 0xd5, - 0xac, 0x37, 0xfd, 0xb2, 0xae, 0xb9, 0x5d, 0x62, 0x5e, 0x6c, 0x6b, 0x8e, 0x73, 0x51, 0xb7, 0x2d, - 0xea, 0xda, 0xa6, 0x49, 0xdc, 0xb2, 0xd3, 0x6e, 0x96, 0x35, 0xc7, 0xf0, 0xca, 0x8c, 0xa1, 0x53, - 0xd7, 0x2c, 0x77, 0x2f, 0x69, 0xa6, 0xd3, 0xd2, 0x2e, 0x95, 0x9b, 0xc4, 0x22, 0xae, 0x46, 0x49, - 0xa3, 0xe4, 0xb8, 0x36, 0xb5, 0xd1, 0x4e, 0xa4, 0xba, 0x24, 0x54, 0xdf, 0xe7, 0xaa, 0x4b, 0x42, - 0xf5, 0x7d, 0xa6, 0xe1, 0x7e, 0xa4, 0xba, 0xe4, 0xb4, 0x9b, 0x25, 0xa6, 0xba, 0x14, 0xa8, 0x2e, - 0x05, 0xaa, 0x57, 0x2e, 0xc6, 0xac, 0x6c, 0xda, 0x4d, 0xbb, 0xcc, 0x11, 0xea, 0xfe, 0x01, 0x7f, - 0xe3, 0x2f, 0xfc, 0x49, 0x20, 0xaf, 0xe0, 0x09, 0x93, 0xea, 0x12, 0xab, 0x61, 0x88, 0xb9, 0xc8, - 0xc7, 0x2e, 0x71, 0x3d, 0xc3, 0xb6, 0xbc, 0x23, 0x67, 0xb3, 0x72, 0xb9, 0x7d, 0xd5, 0x2b, 0x19, - 0x36, 0x9b, 0x7c, 0x47, 0xd3, 0x5b, 0x86, 0x45, 0xdc, 0x5e, 0xe4, 0x8d, 0x0e, 0xa1, 0x5a, 0xb9, - 0x3b, 0x3a, 0xaa, 0x7c, 0xd4, 0x28, 0xd7, 0xb7, 0xa8, 0xd1, 0x21, 0x23, 0x03, 0xae, 0x4c, 0x1a, - 0xe0, 0xe9, 0x2d, 0xd2, 0xd1, 0x86, 0xc7, 0xa9, 0x1f, 0x2b, 0x00, 0xeb, 0x8e, 0xb3, 0x61, 0xfa, - 0x1e, 0x25, 0x2e, 0x2a, 0x43, 0xde, 0xd2, 0x3a, 0xc4, 0x73, 0x34, 0x9d, 0x14, 0x94, 0xf3, 0xca, - 0x4b, 0xf9, 0xca, 0x99, 0x47, 0xfd, 0xe2, 0xa9, 0x41, 0xbf, 0x98, 0xbf, 0x15, 0x30, 0x70, 0x24, - 0x83, 0xfe, 0xa0, 0xc0, 0xd9, 0xb6, 0x5f, 0x27, 0xba, 0x6d, 0x1d, 0x18, 0xcd, 0x1a, 0xd1, 0x5d, - 0x42, 0x31, 0x39, 0x28, 0x4c, 0x9d, 0x57, 0x5e, 0x9a, 0x5b, 0x6b, 0x95, 0x4e, 0x6c, 0x2d, 0x4b, - 0x91, 0x95, 0xbb, 0xa3, 0x78, 0x95, 0xe7, 0x06, 0xfd, 0xe2, 0xd9, 0x31, 0x0c, 0x3c, 0xce, 0x3a, - 0xf5, 0x0d, 0x78, 0xfe, 0x89, 0xea, 0xd0, 0x79, 0xc8, 0xb2, 0x39, 0x4a, 0x17, 0xcc, 0x4b, 0x17, - 0x64, 0x99, 0x0b, 0x30, 0xe7, 0xa0, 0xe7, 0x21, 0xd3, 0x26, 0x3d, 0x3e, 0xcf, 0x7c, 0x65, 0x4e, - 0x0a, 0x64, 0x76, 0x49, 0x0f, 0x33, 0xba, 0xfa, 0x03, 0x05, 0xf2, 0xeb, 0x8e, 0xb3, 0x49, 0x1c, - 0xd3, 0xee, 0xa1, 0x2e, 0x64, 0xd9, 0x84, 0xb8, 0xba, 0xb9, 0xb5, 0x57, 0x4e, 0xd6, 0x2b, 0x02, - 0x63, 0x57, 0x73, 0x9c, 0xca, 0x2c, 0x33, 0x92, 0x3d, 0x61, 0x8e, 0xa7, 0xbe, 0x9f, 0x81, 0x85, - 0x84, 0x04, 0x7a, 0x11, 0x66, 0x0c, 0x8b, 0xda, 0xb7, 0x3c, 0x39, 0xb5, 0x45, 0x69, 0xf9, 0xcc, - 0x0e, 0xa7, 0x62, 0xc9, 0x45, 0x45, 0x98, 0xee, 0x68, 0xce, 0x2d, 0xaf, 0x30, 0x75, 0x3e, 0xf3, - 0x52, 0xbe, 0x92, 0x1f, 0xf4, 0x8b, 0xd3, 0x7b, 0x8c, 0x80, 0x05, 0x1d, 0x95, 0x00, 0x5c, 0xed, - 0xc1, 0x6d, 0x87, 0xb2, 0xed, 0x5f, 0xc8, 0x70, 0xa9, 0xc5, 0x41, 0xbf, 0x08, 0x38, 0xa4, 0xe2, - 0x98, 0x04, 0xfa, 0x91, 0x02, 0x39, 0xc3, 0xf2, 0x1c, 0xa2, 0xd3, 0x42, 0x96, 0xbb, 0xe1, 0x7e, - 0x5a, 0x6e, 0xd8, 0x11, 0x30, 0x95, 0xb9, 0x41, 0xbf, 0x98, 0x93, 0x2f, 0x38, 0x00, 0x47, 0x6f, - 0x2b, 0x30, 0xd3, 0x20, 0x26, 0xa1, 0xa4, 0x30, 0xcd, 0xed, 0x78, 0x3d, 0x2d, 0x3b, 0x36, 0x39, - 0x4a, 0x05, 0x98, 0x7b, 0xc5, 0x33, 0x96, 0xc8, 0xea, 0x35, 0x38, 0x3b, 0x46, 0x74, 0xc8, 0xa9, - 0xca, 0x24, 0xa7, 0xaa, 0x5b, 0x70, 0x6e, 0xdc, 0xcc, 0xff, 0x67, 0x3d, 0x7f, 0x9c, 0x81, 0xd9, - 0x75, 0xc7, 0xd9, 0x22, 0x54, 0x6f, 0xa1, 0xef, 0xb2, 0x2d, 0x62, 0x1a, 0x16, 0x91, 0xdb, 0xf5, - 0xde, 0xc9, 0xfa, 0x87, 0x83, 0xec, 0x70, 0x00, 0xe1, 0x1a, 0xf1, 0x8c, 0x25, 0x28, 0xea, 0xc1, - 0xb4, 0xd1, 0xd1, 0x9a, 0x44, 0x86, 0x90, 0x57, 0xd2, 0x40, 0x67, 0xfa, 0xc5, 0x9e, 0xe6, 0x8f, - 0x58, 0x20, 0x22, 0x1f, 0xb2, 0x2d, 0x4a, 0x9d, 0x42, 0x86, 0x23, 0x7f, 0x23, 0x05, 0xe4, 0xeb, - 0xfb, 0xfb, 0x55, 0x71, 0x4a, 0xd9, 0x13, 0xe6, 0x70, 0xe8, 0x3b, 0x90, 0x69, 0x1a, 0xc1, 0xa9, - 0xb8, 0x9b, 0x02, 0xea, 0xb6, 0x41, 0x2b, 0x39, 0x16, 0x9e, 0xb6, 0x0d, 0x8a, 0x19, 0x16, 0xfa, - 0xb1, 0x02, 0xf9, 0x16, 0x31, 0x3b, 0x1b, 0x2d, 0xcd, 0xa5, 0xf2, 0x1c, 0x7c, 0x2b, 0x8d, 0xf9, - 0x06, 0x18, 0x95, 0x05, 0x96, 0x42, 0xc2, 0x57, 0x1c, 0xa1, 0xa3, 0xf7, 0x14, 0x98, 0x37, 0x3a, - 0x4d, 0xa7, 0xdd, 0xac, 0xf8, 0x56, 0xc3, 0x24, 0x85, 0x99, 0x34, 0xc2, 0x83, 0x5c, 0xf8, 0x08, - 0xa6, 0xb2, 0x34, 0xe8, 0x17, 0xe7, 0xe3, 0x14, 0x9c, 0x30, 0x83, 0xe5, 0x00, 0x47, 0xa3, 0xad, - 0x42, 0x2e, 0x99, 0x03, 0xaa, 0x1a, 0x6d, 0x61, 0xce, 0x51, 0xff, 0x9a, 0x81, 0xb9, 0x98, 0x8f, - 0x59, 0x4e, 0xf0, 0x5d, 0x53, 0x46, 0xd6, 0x30, 0x27, 0xdc, 0xc1, 0x37, 0x31, 0xa3, 0x33, 0xb6, - 0x2b, 0x53, 0x63, 0x8c, 0xcd, 0x92, 0x14, 0xa3, 0xa3, 0x9f, 0x28, 0x30, 0xef, 0x92, 0x83, 0x1a, - 0x31, 0x89, 0xce, 0x8e, 0xa5, 0xf4, 0xc3, 0xfe, 0x24, 0x3f, 0x88, 0x52, 0x84, 0x4f, 0x5f, 0x3e, - 0x06, 0x55, 0x49, 0xe4, 0x80, 0xbb, 0x82, 0x12, 0xea, 0x16, 0x93, 0xc7, 0x31, 0x34, 0x9c, 0xc0, - 0x46, 0xef, 0x28, 0x90, 0xf7, 0xc2, 0x6c, 0x2e, 0x0e, 0xc4, 0x37, 0x53, 0x58, 0x91, 0x9b, 0xb6, - 0xae, 0x99, 0x2c, 0x81, 0xf3, 0xfd, 0x11, 0xa5, 0xed, 0x08, 0x1c, 0x5d, 0x80, 0x9c, 0xe7, 0xd7, - 0x99, 0xdb, 0xf9, 0x11, 0xc9, 0x57, 0x4e, 0x4b, 0xd7, 0xe5, 0x6a, 0x82, 0x8c, 0x03, 0x3e, 0xfa, - 0x1a, 0x2c, 0x98, 0x07, 0x5e, 0xad, 0x6d, 0x38, 0xb5, 0x8e, 0xdf, 0x68, 0x8a, 0x08, 0x3f, 0x5b, - 0x59, 0x96, 0x03, 0x16, 0x6e, 0x6e, 0xd5, 0x22, 0x26, 0x4e, 0xca, 0xaa, 0xef, 0x4e, 0xc1, 0x7c, - 0xfc, 0x9c, 0x4e, 0x5a, 0xce, 0x17, 0x61, 0xc6, 0x6b, 0x69, 0x6b, 0x2f, 0x5f, 0x91, 0x2b, 0x1a, - 0xa6, 0xd2, 0xda, 0xf5, 0xf5, 0xb5, 0x97, 0xaf, 0x60, 0xc9, 0xfd, 0x6c, 0xba, 0x92, 0x15, 0x86, - 0x67, 0x46, 0x4e, 0xf1, 0x31, 0xea, 0xa2, 0x0b, 0x90, 0x93, 0xdb, 0x4f, 0xba, 0x25, 0x84, 0x90, - 0x7b, 0x10, 0x07, 0x7c, 0xf4, 0x50, 0x01, 0x70, 0x89, 0x63, 0x7b, 0x06, 0xb5, 0xdd, 0x9e, 0xf4, - 0xcc, 0x1b, 0x69, 0x46, 0x21, 0x4c, 0x1c, 0x5b, 0x26, 0xc2, 0x10, 0x17, 0xc7, 0x6c, 0x50, 0xff, - 0xac, 0xc0, 0xf2, 0xd8, 0x51, 0x93, 0x36, 0x43, 0x72, 0x91, 0xa7, 0x3e, 0xc5, 0x45, 0x56, 0xff, - 0x33, 0xc5, 0x8b, 0xbe, 0x28, 0xd3, 0x4d, 0xb2, 0x9d, 0x05, 0x1e, 0xaa, 0x35, 0xa3, 0xc0, 0x93, - 0x4d, 0x3b, 0xf0, 0xec, 0xc7, 0xd0, 0x70, 0x02, 0xfb, 0x19, 0x72, 0x64, 0xfc, 0xb4, 0x64, 0x26, - 0x9c, 0x96, 0x0f, 0xa7, 0x78, 0x25, 0x36, 0x92, 0x64, 0xd0, 0x0b, 0x41, 0x35, 0x23, 0x9c, 0xbf, - 0x20, 0x35, 0x24, 0xeb, 0x8e, 0x91, 0x05, 0xc8, 0xfc, 0x7f, 0x01, 0xd8, 0x4e, 0xfe, 0xf7, 0x14, - 0x2c, 0x26, 0x2b, 0x46, 0x56, 0xb8, 0x4c, 0xb3, 0xdc, 0x2b, 0xaa, 0xda, 0xb9, 0xb5, 0x46, 0x6a, - 0xc5, 0x69, 0x89, 0x2d, 0xac, 0x77, 0xcd, 0xa2, 0x6e, 0x2f, 0x5a, 0x36, 0x4e, 0xc3, 0xc2, 0x02, - 0x16, 0xbf, 0xf2, 0xfc, 0x69, 0xcb, 0xb5, 0x3b, 0xfc, 0xa2, 0x94, 0x52, 0xd5, 0xc2, 0xed, 0xa9, - 0xd9, 0xbe, 0xab, 0x93, 0xe8, 0x3a, 0x5e, 0x0d, 0x90, 0x71, 0x64, 0xc4, 0xca, 0x55, 0x80, 0xc8, - 0x6c, 0xb4, 0x24, 0xee, 0xa8, 0x7c, 0xeb, 0xf1, 0x6b, 0x29, 0x3a, 0x07, 0xd3, 0x5d, 0xcd, 0xf4, - 0x45, 0x71, 0x9d, 0xc7, 0xe2, 0xe5, 0xab, 0x53, 0x57, 0x15, 0xf5, 0x2f, 0xf1, 0x1d, 0x1c, 0x03, - 0x44, 0x3f, 0x4b, 0xec, 0x07, 0x71, 0x25, 0xa8, 0xa7, 0x3c, 0xcb, 0x27, 0x9f, 0xcb, 0x5f, 0x2a, - 0x30, 0x2f, 0x2e, 0xec, 0x7b, 0x9a, 0x13, 0x6d, 0xd2, 0xa7, 0x61, 0x14, 0x3f, 0x3c, 0x1b, 0x31, - 0x6c, 0x9c, 0xb0, 0x44, 0x3d, 0x84, 0xe7, 0x8e, 0x18, 0xca, 0x6a, 0x93, 0x86, 0xe1, 0x12, 0x9d, - 0xe5, 0x19, 0x1e, 0x53, 0x44, 0x7a, 0x0c, 0x6b, 0x93, 0xcd, 0x38, 0x13, 0x27, 0x65, 0x27, 0xe7, - 0x5d, 0xf5, 0x32, 0x2c, 0x0d, 0x9f, 0xac, 0x63, 0x8c, 0x7a, 0x3b, 0x07, 0xb9, 0x75, 0xc7, 0xa9, - 0x39, 0x44, 0x47, 0x37, 0x00, 0x79, 0xc4, 0xed, 0x1a, 0x3a, 0x59, 0xd7, 0x75, 0xdb, 0xb7, 0xe8, - 0xad, 0x68, 0xec, 0x8a, 0x1c, 0x8b, 0x6a, 0x23, 0x12, 0x78, 0xcc, 0x28, 0xf4, 0x16, 0xe4, 0x74, - 0xd1, 0x5d, 0x91, 0x8b, 0x73, 0x27, 0x95, 0x4e, 0x90, 0xb8, 0xe2, 0xcb, 0x17, 0x1c, 0x40, 0xa2, - 0x43, 0x98, 0x3e, 0x60, 0x8e, 0xe0, 0x6d, 0x89, 0xb9, 0xb5, 0x5a, 0x0a, 0x1b, 0x23, 0x0a, 0x09, - 0xfc, 0x15, 0x0b, 0x40, 0xf4, 0x43, 0x05, 0x66, 0x29, 0xe9, 0x38, 0xa6, 0x46, 0x49, 0x21, 0xcb, - 0xd1, 0x4f, 0xf8, 0x42, 0xb7, 0x2f, 0xb5, 0x57, 0x96, 0xa4, 0x01, 0xb3, 0x01, 0x05, 0x87, 0xc8, - 0xe8, 0x2d, 0x98, 0x69, 0xf0, 0xa6, 0x40, 0x61, 0x9a, 0xdb, 0xb0, 0x9f, 0x46, 0x8b, 0x23, 0x2a, - 0x78, 0xc5, 0x3b, 0x96, 0x98, 0xac, 0x30, 0x76, 0x34, 0xdf, 0x23, 0x0d, 0x7e, 0x83, 0x99, 0x8d, - 0xe4, 0xaa, 0x9c, 0x8a, 0x25, 0x17, 0x7d, 0x19, 0x66, 0x75, 0xcd, 0xd2, 0x89, 0x49, 0x1a, 0xfc, - 0x92, 0x35, 0x1b, 0xcd, 0x69, 0x43, 0xd2, 0x71, 0x28, 0x81, 0x5e, 0x07, 0xf0, 0x7a, 0x96, 0x5e, - 0x25, 0xae, 0x61, 0x37, 0x0a, 0xb3, 0x7c, 0x57, 0x95, 0x4a, 0xa2, 0xed, 0x59, 0x8a, 0xb7, 0x3d, - 0x23, 0xe3, 0x3b, 0x84, 0x6a, 0xa5, 0xee, 0xa5, 0xd2, 0xa6, 0xef, 0x6a, 0x3c, 0xf7, 0xf1, 0xd2, - 0xaf, 0x16, 0x6a, 0xc1, 0x31, 0x8d, 0x68, 0x0d, 0xc0, 0xb2, 0x6d, 0xd9, 0x89, 0x29, 0xe4, 0xb9, - 0x3d, 0x48, 0xda, 0x03, 0xb7, 0x42, 0x0e, 0x8e, 0x49, 0xa1, 0x4d, 0x58, 0x6a, 0x90, 0x03, 0xcd, - 0x37, 0x69, 0xd8, 0x1c, 0x2d, 0x00, 0x3f, 0x30, 0x05, 0x39, 0x72, 0x69, 0x73, 0x88, 0x8f, 0x47, - 0x46, 0xa8, 0xbf, 0xc9, 0xf1, 0x6b, 0x64, 0xb0, 0x8e, 0x88, 0x42, 0xa6, 0x47, 0x69, 0x3a, 0xdd, - 0x97, 0x00, 0xe4, 0x1e, 0x95, 0x2d, 0x81, 0x7b, 0x94, 0x62, 0x06, 0x87, 0x0e, 0x21, 0xdb, 0xae, - 0x9b, 0x0d, 0x79, 0x5e, 0x5f, 0x4d, 0x07, 0x76, 0xb7, 0x6e, 0x36, 0x64, 0x97, 0xb2, 0x6e, 0x36, - 0x30, 0x47, 0xe4, 0xf1, 0xbc, 0x45, 0xcc, 0x4e, 0x20, 0x24, 0xcb, 0x9f, 0x7a, 0x3a, 0x26, 0x5c, - 0x8f, 0x21, 0x89, 0x78, 0x1e, 0xa7, 0xe0, 0x84, 0x25, 0xe8, 0xa7, 0x0a, 0xe4, 0xdb, 0xbe, 0x47, - 0xed, 0x8e, 0xf1, 0x26, 0x49, 0xa7, 0x6f, 0x19, 0xba, 0x26, 0x80, 0x11, 0x99, 0x2f, 0x7c, 0xc5, - 0x91, 0x01, 0x2c, 0xbc, 0xe4, 0xbe, 0xed, 0xd9, 0x96, 0x45, 0x82, 0xa6, 0xcd, 0x6b, 0xe9, 0x18, - 0x73, 0x43, 0x80, 0x88, 0xf8, 0x2a, 0x5f, 0x70, 0x00, 0xcd, 0xb6, 0x8a, 0x67, 0x3b, 0x9e, 0x6c, - 0x50, 0xa4, 0xb4, 0x55, 0x6a, 0xb6, 0xe3, 0x89, 0xad, 0xc2, 0x9e, 0x30, 0x47, 0x64, 0x47, 0x43, - 0xf7, 0x09, 0x8f, 0x16, 0xa9, 0x1d, 0x8d, 0x0d, 0x9f, 0x88, 0xa3, 0xb1, 0xe1, 0x13, 0xcc, 0xe0, - 0x58, 0x75, 0xbf, 0x98, 0x14, 0x40, 0xc5, 0x78, 0x19, 0x2a, 0xfb, 0xe3, 0x89, 0xe2, 0xf0, 0x7d, - 0x05, 0x80, 0x57, 0x57, 0xf1, 0xea, 0x30, 0xa5, 0x2d, 0x7d, 0x97, 0xe3, 0xc8, 0x02, 0x31, 0x8c, - 0x59, 0x77, 0x43, 0x74, 0x1c, 0xb3, 0x04, 0xad, 0xc3, 0x69, 0xc3, 0x72, 0x7c, 0x7a, 0xed, 0xd0, - 0x71, 0x89, 0xe7, 0x05, 0xd7, 0x8d, 0x7c, 0xe5, 0x39, 0x39, 0xf0, 0xf4, 0x4e, 0x92, 0x8d, 0x87, - 0xe5, 0x59, 0xd8, 0xb3, 0x7d, 0x9a, 0xd4, 0x91, 0x4d, 0x86, 0xbd, 0xdb, 0x43, 0x7c, 0x3c, 0x32, - 0x42, 0xfd, 0x7b, 0x96, 0x17, 0x4b, 0xe3, 0xce, 0xe5, 0x31, 0xfa, 0x0c, 0x89, 0x2f, 0x55, 0x53, - 0xc7, 0xf8, 0x52, 0x15, 0xb4, 0xf3, 0x32, 0x47, 0xb5, 0xf3, 0x86, 0x97, 0x2c, 0xfb, 0xcc, 0x2c, - 0xd9, 0x2f, 0x14, 0x38, 0xd3, 0xf6, 0xeb, 0xc4, 0xb5, 0x08, 0x25, 0x9e, 0xbc, 0xd1, 0xc9, 0x00, - 0x80, 0x4f, 0xd0, 0x3e, 0xa9, 0xb9, 0xb2, 0x3c, 0xe8, 0x17, 0xcf, 0xec, 0x0e, 0x03, 0xe2, 0x51, - 0x1b, 0xd0, 0x7b, 0x0a, 0x2c, 0x46, 0xd4, 0xf5, 0xea, 0x4e, 0x10, 0x14, 0x4e, 0xf2, 0x6c, 0xee, - 0x26, 0x00, 0x2a, 0x68, 0xd0, 0x2f, 0x2e, 0x26, 0x69, 0x78, 0xc8, 0x08, 0xf5, 0x1c, 0xa0, 0xd1, - 0x68, 0xa6, 0xae, 0xc1, 0xe9, 0xa1, 0x5c, 0x34, 0xf1, 0x1c, 0xab, 0x9f, 0xe3, 0xd7, 0xa2, 0x91, - 0x20, 0xad, 0xfe, 0x6e, 0x2a, 0xa1, 0x8c, 0xc5, 0x28, 0x74, 0x08, 0x19, 0xa7, 0x19, 0x7c, 0xe5, - 0x7b, 0x2d, 0xbd, 0xb0, 0x58, 0xdd, 0xae, 0x8a, 0x08, 0x55, 0xdd, 0xae, 0x62, 0x06, 0x19, 0x4d, - 0x63, 0xea, 0x88, 0x70, 0x74, 0x08, 0x19, 0xad, 0x19, 0x64, 0xd6, 0x14, 0x4d, 0x5b, 0x6f, 0xca, - 0xe0, 0xb9, 0xde, 0x24, 0x98, 0x41, 0xaa, 0x1f, 0x2a, 0x89, 0xb5, 0x90, 0x42, 0xe8, 0x4f, 0x0a, - 0x9c, 0x73, 0x5c, 0xa3, 0xcb, 0x9c, 0x4a, 0x7a, 0x5e, 0x6d, 0xe8, 0x86, 0x69, 0xa5, 0xe8, 0xbd, - 0x31, 0xa8, 0x95, 0xc2, 0xa0, 0x5f, 0x3c, 0x37, 0x8e, 0x83, 0xc7, 0x5a, 0x39, 0x6e, 0x56, 0xd5, - 0xed, 0xea, 0x67, 0x7d, 0x56, 0xdb, 0xf0, 0xc2, 0x31, 0xd4, 0x1e, 0xe3, 0x5e, 0xf9, 0x7b, 0x05, - 0xbe, 0x38, 0x12, 0xed, 0x36, 0xed, 0x07, 0xd6, 0x03, 0xcd, 0x6d, 0xac, 0x57, 0x77, 0xd0, 0x43, - 0x05, 0xa6, 0x0d, 0x4a, 0x3a, 0x41, 0x1f, 0xa7, 0x9d, 0x66, 0x98, 0x8d, 0x01, 0xef, 0x50, 0xd2, - 0x89, 0x75, 0xe1, 0x98, 0x05, 0x58, 0x18, 0xa2, 0xfe, 0x2d, 0x0b, 0xe7, 0x27, 0x0d, 0x3d, 0x5e, - 0x62, 0x3a, 0x30, 0x88, 0xd9, 0x88, 0xdd, 0xf1, 0xc3, 0xc4, 0xb4, 0x15, 0x30, 0x70, 0x24, 0x73, - 0x44, 0x74, 0xcf, 0x3c, 0x03, 0xd1, 0xfd, 0xb7, 0x0a, 0x2c, 0x33, 0x3d, 0x1b, 0xa1, 0xfe, 0xc0, - 0xba, 0x6c, 0x6a, 0xd6, 0x7d, 0x7e, 0xd0, 0x2f, 0x2e, 0xef, 0x8e, 0x03, 0xc5, 0xe3, 0x6d, 0x19, - 0x97, 0x83, 0xa6, 0x9f, 0x85, 0x1c, 0xf4, 0x6e, 0xb2, 0xbe, 0x89, 0x67, 0x7c, 0xf4, 0xf3, 0x31, - 0x4d, 0x35, 0x92, 0x7e, 0xa5, 0xf1, 0xe4, 0xbe, 0xda, 0xaf, 0xc7, 0xf7, 0xd5, 0x9e, 0x92, 0x5d, - 0x13, 0x5a, 0x6b, 0xc7, 0xa8, 0xdf, 0x7e, 0xa5, 0xc0, 0x5c, 0x23, 0x3a, 0xaf, 0x72, 0x93, 0x36, - 0x9f, 0x52, 0x64, 0xa9, 0x9c, 0x1e, 0xf4, 0x8b, 0x73, 0x31, 0x02, 0x8e, 0x1b, 0xa3, 0x7e, 0x1d, - 0x56, 0x8e, 0x9e, 0xfc, 0x31, 0x22, 0xea, 0xc7, 0x99, 0xc4, 0x1d, 0xe4, 0x1e, 0xa5, 0xa8, 0x06, - 0xcb, 0x46, 0xd3, 0xb2, 0x5d, 0x72, 0xc7, 0x6a, 0x5b, 0xf6, 0x03, 0x6b, 0xc3, 0xee, 0x74, 0x88, - 0x45, 0xc5, 0xaf, 0x3d, 0xb3, 0x95, 0xe7, 0xa5, 0x96, 0xe5, 0x9d, 0x71, 0x42, 0x78, 0xfc, 0x58, - 0xfe, 0x55, 0x93, 0xba, 0x86, 0x4e, 0xf9, 0xea, 0xc7, 0x9a, 0x37, 0x35, 0x4e, 0xc5, 0x92, 0x1b, - 0xfb, 0x4b, 0x24, 0xf3, 0x69, 0xfc, 0x25, 0x12, 0x16, 0x3c, 0xd9, 0x23, 0x0a, 0x9e, 0x2f, 0xb1, - 0x30, 0x6c, 0x92, 0x3d, 0xcd, 0x6d, 0x7b, 0xbc, 0x0b, 0x96, 0x17, 0x3b, 0x7f, 0x2b, 0x20, 0xe2, - 0x88, 0x3f, 0x5c, 0xf9, 0xcf, 0x3c, 0x2b, 0x95, 0xbf, 0xfa, 0x0f, 0x05, 0xf2, 0x1b, 0xb6, 0xd5, - 0x30, 0xf8, 0xa7, 0x99, 0x4b, 0x90, 0xa5, 0x3d, 0x27, 0xd8, 0x25, 0xc1, 0xfa, 0x66, 0xf7, 0x7b, - 0x0e, 0xf9, 0xa4, 0x5f, 0x5c, 0x08, 0x05, 0x19, 0x01, 0x73, 0x51, 0x74, 0x93, 0x2d, 0xa7, 0x46, - 0x7d, 0x4f, 0xa6, 0xa2, 0xcb, 0xd1, 0x72, 0x32, 0xea, 0x27, 0xfd, 0xa2, 0x1a, 0xfd, 0x39, 0x58, - 0xd6, 0x6d, 0x97, 0x94, 0xbb, 0x97, 0x4a, 0xa1, 0x26, 0x21, 0x85, 0xa5, 0x0e, 0xb6, 0x39, 0x5c, - 0xa2, 0x79, 0xe1, 0x95, 0x31, 0xdc, 0x1c, 0x98, 0x53, 0xb1, 0xe4, 0xa2, 0x0b, 0x90, 0xeb, 0x10, - 0xcf, 0x63, 0x15, 0xe7, 0xd0, 0x77, 0xe6, 0x3d, 0x41, 0xc6, 0x01, 0x5f, 0xfd, 0x7e, 0x06, 0x16, - 0xb6, 0x89, 0x45, 0x5c, 0x43, 0x17, 0x60, 0xe8, 0x06, 0x20, 0xbb, 0xee, 0x11, 0xb7, 0x4b, 0x1a, - 0xdb, 0xe2, 0x6f, 0x45, 0x96, 0x71, 0xd8, 0x9c, 0x33, 0x51, 0x1f, 0xfa, 0xf6, 0x88, 0x04, 0x1e, - 0x33, 0x0a, 0xbd, 0xa3, 0x00, 0xe8, 0xc1, 0x64, 0x3c, 0x79, 0x0b, 0x3f, 0xc9, 0x6e, 0x68, 0xe8, - 0xa9, 0x68, 0x29, 0x43, 0x92, 0x87, 0x63, 0xd8, 0x68, 0x0f, 0xce, 0x1e, 0xb8, 0x06, 0xb1, 0x1a, - 0x66, 0x6f, 0x93, 0x78, 0xba, 0x6b, 0x38, 0x34, 0xba, 0x7b, 0x7f, 0x41, 0x0e, 0x3e, 0xbb, 0x35, - 0x2a, 0x82, 0xc7, 0x8d, 0x63, 0x5e, 0xf2, 0x3d, 0x72, 0xe0, 0x9b, 0xd7, 0x5c, 0xd7, 0x76, 0xf7, - 0x12, 0xde, 0x0e, 0xbd, 0x74, 0x67, 0x44, 0x02, 0x8f, 0x19, 0xa5, 0xee, 0xc0, 0x50, 0x2e, 0x43, - 0x5f, 0x81, 0x85, 0xa6, 0x6b, 0xfb, 0x8e, 0xcc, 0xb1, 0xc1, 0xf5, 0xe8, 0xcc, 0xa0, 0x5f, 0x5c, - 0xd8, 0x8e, 0x33, 0x70, 0x52, 0x4e, 0xbd, 0x0c, 0xc1, 0x77, 0xfe, 0xf8, 0x9f, 0x00, 0xca, 0x93, - 0xff, 0x04, 0xa8, 0xd8, 0x8f, 0x1e, 0xaf, 0x9e, 0xfa, 0xe0, 0xf1, 0xea, 0xa9, 0x8f, 0x1e, 0xaf, - 0x9e, 0xfa, 0xde, 0x60, 0x55, 0x79, 0x34, 0x58, 0x55, 0x3e, 0x18, 0xac, 0x2a, 0x1f, 0x0d, 0x56, - 0x95, 0x7f, 0x0e, 0x56, 0x95, 0x87, 0xff, 0x5a, 0x3d, 0xf5, 0xea, 0xce, 0x89, 0xfd, 0x73, 0xfc, - 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x20, 0xaf, 0xd1, 0x04, 0xbf, 0x2c, 0x00, 0x00, + // 2587 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x5d, 0x6c, 0x1b, 0x59, + 0xf5, 0xef, 0xc4, 0x4e, 0x1c, 0x9f, 0x24, 0x6d, 0x7a, 0xdb, 0xfc, 0xeb, 0x7f, 0xa1, 0x71, 0x35, + 0x2b, 0xad, 0x5a, 0x41, 0x6d, 0x35, 0xea, 0x96, 0x0a, 0xa4, 0x15, 0x76, 0xd2, 0xa4, 0x69, 0x9a, + 0xd6, 0xba, 0x4e, 0xcb, 0x76, 0x61, 0xb7, 0x3b, 0x19, 0x5f, 0xdb, 0x83, 0xc7, 0x33, 0xc3, 0xcc, + 0x1d, 0x37, 0x5e, 0x2d, 0x12, 0x14, 0x84, 0x16, 0x2d, 0x12, 0x15, 0xd2, 0x2e, 0x08, 0x24, 0x5e, + 0x90, 0x78, 0x47, 0xf0, 0x88, 0x90, 0x10, 0x2f, 0x7d, 0x41, 0x5a, 0x69, 0x5f, 0x16, 0x09, 0x19, + 0x6a, 0x9e, 0x78, 0xde, 0xb7, 0x7d, 0x42, 0xf7, 0x63, 0xbe, 0x6c, 0xa7, 0x09, 0x52, 0xa6, 0xdb, + 0x15, 0x6f, 0x33, 0xe7, 0x9e, 0x7b, 0x7e, 0xe7, 0x9e, 0x7b, 0xee, 0x39, 0xe7, 0x9e, 0x19, 0xb8, + 0xdf, 0x32, 0x68, 0xdb, 0xdf, 0x2d, 0xe9, 0x76, 0xb7, 0xdc, 0xeb, 0x3e, 0xd4, 0x5c, 0x72, 0x89, + 0x6a, 0xd6, 0xdb, 0x7e, 0x59, 0xd7, 0xdc, 0x1e, 0x31, 0x2f, 0x75, 0x34, 0xc7, 0xb9, 0xa4, 0xdb, + 0x16, 0x75, 0x6d, 0xd3, 0x24, 0x6e, 0xd9, 0xe9, 0xb4, 0xca, 0x9a, 0x63, 0x78, 0x65, 0x36, 0xa0, + 0x53, 0xd7, 0x2c, 0xf7, 0x2e, 0x6b, 0xa6, 0xd3, 0xd6, 0x2e, 0x97, 0x5b, 0xc4, 0x22, 0xae, 0x46, + 0x49, 0xa3, 0xe4, 0xb8, 0x36, 0xb5, 0xd1, 0x66, 0x24, 0xba, 0x24, 0x44, 0x3f, 0xe0, 0xa2, 0x4b, + 0x42, 0xf4, 0x03, 0x26, 0xe1, 0x41, 0x24, 0xba, 0xe4, 0x74, 0x5a, 0x25, 0x26, 0xba, 0x14, 0x88, + 0x2e, 0x05, 0xa2, 0xcf, 0xbe, 0x2a, 0xa6, 0x94, 0x1a, 0xa4, 0x57, 0xee, 0x11, 0xab, 0x61, 0x08, + 0x45, 0xe4, 0x63, 0x8f, 0xb8, 0x9e, 0x61, 0x5b, 0xde, 0xbe, 0xaa, 0x9c, 0xbd, 0x14, 0x5b, 0x65, + 0xcb, 0x6e, 0xd9, 0x65, 0x4e, 0xde, 0xf5, 0x9b, 0xfc, 0x8d, 0xbf, 0xf0, 0x27, 0xc9, 0x7e, 0xa5, + 0x73, 0xcd, 0x2b, 0x19, 0x36, 0x5b, 0x68, 0x57, 0xd3, 0xdb, 0x86, 0x45, 0xdc, 0x7e, 0xb4, 0xf2, + 0x2e, 0xa1, 0x5a, 0xb9, 0x37, 0x0e, 0x52, 0xde, 0x6f, 0x96, 0xeb, 0x5b, 0xd4, 0xe8, 0x92, 0xb1, + 0x09, 0x57, 0x0f, 0x9a, 0xe0, 0xe9, 0x6d, 0xd2, 0xd5, 0x46, 0xe7, 0xa9, 0x9f, 0x28, 0x00, 0x15, + 0xc7, 0x59, 0x35, 0x7d, 0x8f, 0x12, 0x17, 0x95, 0x21, 0x6f, 0x69, 0x5d, 0xe2, 0x39, 0x9a, 0x4e, + 0x0a, 0xca, 0x79, 0xe5, 0x42, 0xbe, 0x7a, 0xf2, 0xc9, 0xa0, 0x78, 0x6c, 0x38, 0x28, 0xe6, 0x6f, + 0x07, 0x03, 0x38, 0xe2, 0x41, 0xbf, 0x57, 0xe0, 0x54, 0xc7, 0xdf, 0x25, 0xba, 0x6d, 0x35, 0x8d, + 0x56, 0x9d, 0xe8, 0x2e, 0xa1, 0x98, 0x34, 0x0b, 0x53, 0xe7, 0x95, 0x0b, 0x73, 0x2b, 0xed, 0xd2, + 0x91, 0xed, 0x5b, 0x29, 0xd2, 0x72, 0x6b, 0x1c, 0xaf, 0x7a, 0x66, 0x38, 0x28, 0x9e, 0x9a, 0x30, + 0x80, 0x27, 0x69, 0xa7, 0xbe, 0x05, 0xe7, 0x9e, 0x29, 0x0e, 0x9d, 0x87, 0x2c, 0x5b, 0xa3, 0x34, + 0xc1, 0xbc, 0x34, 0x41, 0x96, 0x99, 0x00, 0xf3, 0x11, 0x74, 0x0e, 0x32, 0x1d, 0xd2, 0xe7, 0xeb, + 0xcc, 0x57, 0xe7, 0x24, 0x43, 0x66, 0x8b, 0xf4, 0x31, 0xa3, 0xab, 0x3f, 0x50, 0x20, 0x5f, 0x71, + 0x9c, 0x35, 0xe2, 0x98, 0x76, 0x1f, 0xf5, 0x20, 0xcb, 0x16, 0xc4, 0xc5, 0xcd, 0xad, 0xbc, 0x76, + 0xb4, 0x56, 0x11, 0x18, 0x5b, 0x9a, 0xe3, 0x54, 0x67, 0x99, 0x92, 0xec, 0x09, 0x73, 0x3c, 0xf5, + 0x83, 0x0c, 0x2c, 0x24, 0x38, 0xd0, 0xcb, 0x30, 0x63, 0x58, 0xd4, 0xbe, 0xed, 0xc9, 0xa5, 0x1d, + 0x97, 0x9a, 0xcf, 0x6c, 0x72, 0x2a, 0x96, 0xa3, 0xa8, 0x08, 0xd3, 0x5d, 0xcd, 0xb9, 0xed, 0x15, + 0xa6, 0xce, 0x67, 0x2e, 0xe4, 0xab, 0xf9, 0xe1, 0xa0, 0x38, 0xbd, 0xcd, 0x08, 0x58, 0xd0, 0x51, + 0x09, 0xc0, 0xd5, 0x1e, 0xde, 0x71, 0x28, 0x3b, 0x2d, 0x85, 0x0c, 0xe7, 0x3a, 0x3e, 0x1c, 0x14, + 0x01, 0x87, 0x54, 0x1c, 0xe3, 0x40, 0x3f, 0x52, 0x20, 0x67, 0x58, 0x9e, 0x43, 0x74, 0x5a, 0xc8, + 0x72, 0x33, 0x3c, 0x48, 0xcb, 0x0c, 0x9b, 0x02, 0xa6, 0x3a, 0x37, 0x1c, 0x14, 0x73, 0xf2, 0x05, + 0x07, 0xe0, 0xe8, 0x91, 0x02, 0x33, 0x0d, 0x62, 0x12, 0x4a, 0x0a, 0xd3, 0x5c, 0x8f, 0x37, 0xd3, + 0xd2, 0x63, 0x8d, 0xa3, 0x54, 0x81, 0x99, 0x57, 0x3c, 0x63, 0x89, 0xac, 0x5e, 0x87, 0x53, 0x13, + 0x58, 0x47, 0x8c, 0xaa, 0x1c, 0x64, 0x54, 0x75, 0x1d, 0x4e, 0x4f, 0x5a, 0xf9, 0x7f, 0x2d, 0xe7, + 0x0f, 0x33, 0x30, 0x5b, 0x71, 0x9c, 0x75, 0x42, 0xf5, 0x36, 0xfa, 0x2e, 0x73, 0x11, 0xd3, 0xb0, + 0x88, 0x74, 0xd7, 0xfb, 0x47, 0x6b, 0x1f, 0x0e, 0xb2, 0xc9, 0x01, 0x84, 0x69, 0xc4, 0x33, 0x96, + 0xa0, 0xa8, 0x0f, 0xd3, 0x46, 0x57, 0x6b, 0x11, 0x19, 0x42, 0x5e, 0x4b, 0x03, 0x9d, 0xc9, 0x17, + 0x3e, 0xcd, 0x1f, 0xb1, 0x40, 0x44, 0x3e, 0x64, 0xdb, 0x94, 0x3a, 0x85, 0x0c, 0x47, 0xfe, 0x46, + 0x0a, 0xc8, 0x37, 0x76, 0x76, 0x6a, 0xe2, 0x94, 0xb2, 0x27, 0xcc, 0xe1, 0xd0, 0x77, 0x20, 0xd3, + 0x32, 0x82, 0x53, 0x71, 0x2f, 0x05, 0xd4, 0x0d, 0x83, 0x56, 0x73, 0x2c, 0x3c, 0x6d, 0x18, 0x14, + 0x33, 0x2c, 0xf4, 0x63, 0x05, 0xf2, 0x6d, 0x62, 0x76, 0x57, 0xdb, 0x9a, 0x4b, 0xe5, 0x39, 0xf8, + 0x56, 0x1a, 0xeb, 0x0d, 0x30, 0xaa, 0x0b, 0x2c, 0x85, 0x84, 0xaf, 0x38, 0x42, 0x47, 0xef, 0x2b, + 0x30, 0x6f, 0x74, 0x5b, 0x4e, 0xa7, 0x55, 0xf5, 0xad, 0x86, 0x49, 0x0a, 0x33, 0x69, 0x84, 0x07, + 0xb9, 0xf1, 0x11, 0x4c, 0x75, 0x71, 0x38, 0x28, 0xce, 0xc7, 0x29, 0x38, 0xa1, 0x06, 0xcb, 0x01, + 0x8e, 0x46, 0xdb, 0x85, 0x5c, 0x32, 0x07, 0xd4, 0x34, 0xda, 0xc6, 0x7c, 0x44, 0x7d, 0x94, 0x85, + 0xb9, 0x98, 0x8d, 0x59, 0x4e, 0xf0, 0x5d, 0x53, 0x46, 0xd6, 0x30, 0x27, 0xdc, 0xc5, 0xb7, 0x30, + 0xa3, 0xb3, 0x61, 0x57, 0xa6, 0xc6, 0xd8, 0x30, 0x4b, 0x52, 0x8c, 0x8e, 0x7a, 0x30, 0xef, 0x92, + 0x66, 0x9d, 0x98, 0x44, 0x67, 0xa7, 0x52, 0x9a, 0xe1, 0xeb, 0xa5, 0xa8, 0x5e, 0x29, 0x89, 0x22, + 0x85, 0xaf, 0x54, 0x3e, 0x06, 0xf5, 0x4a, 0xb4, 0xd6, 0x7b, 0x82, 0x12, 0xca, 0x11, 0xeb, 0xc4, + 0x31, 0xc9, 0x38, 0x81, 0x83, 0xde, 0x55, 0x20, 0xef, 0x85, 0x89, 0x5b, 0xf8, 0xfe, 0x37, 0x53, + 0x30, 0xfe, 0x2d, 0x5b, 0xd7, 0x4c, 0x96, 0xab, 0xb9, 0x2b, 0x44, 0x19, 0x3a, 0x02, 0x47, 0x17, + 0x21, 0xe7, 0xf9, 0xbb, 0xcc, 0xc2, 0xfc, 0x34, 0xe4, 0xab, 0x27, 0xa4, 0x95, 0x72, 0x75, 0x41, + 0xc6, 0xc1, 0x38, 0xfa, 0x1a, 0x2c, 0x98, 0x4d, 0xaf, 0xde, 0x31, 0x9c, 0x7a, 0xd7, 0x6f, 0xb4, + 0x44, 0x30, 0x9f, 0xad, 0x2e, 0xc9, 0x09, 0x0b, 0xb7, 0xd6, 0xeb, 0xd1, 0x20, 0x4e, 0xf2, 0xa2, + 0x9b, 0x80, 0x9a, 0xb6, 0xab, 0x13, 0x7e, 0x1c, 0x35, 0xcf, 0xd0, 0x2b, 0xbe, 0xdc, 0xe8, 0xd9, + 0xea, 0x59, 0x29, 0x01, 0xad, 0x8f, 0x71, 0xe0, 0x09, 0xb3, 0xd4, 0xf7, 0xa6, 0x60, 0x3e, 0x7e, + 0xbc, 0x0f, 0xf2, 0x82, 0x97, 0x61, 0xc6, 0x6b, 0x6b, 0x2b, 0xaf, 0x5c, 0x95, 0x8e, 0x10, 0x66, + 0xe0, 0xfa, 0x8d, 0xca, 0xca, 0x2b, 0x57, 0xb1, 0x1c, 0xfd, 0x7c, 0x6e, 0x0b, 0xab, 0x27, 0x4f, + 0x8e, 0x1d, 0xfe, 0x43, 0x94, 0x53, 0x17, 0x21, 0x27, 0x5d, 0x59, 0x9a, 0x25, 0x84, 0x90, 0xfe, + 0x8c, 0x83, 0x71, 0xf4, 0x58, 0x01, 0x70, 0x89, 0x63, 0x7b, 0x06, 0xb5, 0xdd, 0xbe, 0xb4, 0xcc, + 0x5b, 0x69, 0x06, 0x2f, 0x4c, 0x1c, 0x5b, 0xe6, 0xcf, 0x10, 0x17, 0xc7, 0x74, 0x50, 0xff, 0xac, + 0xc0, 0xd2, 0xc4, 0x59, 0x07, 0x39, 0x43, 0x72, 0x93, 0xa7, 0x3e, 0xc3, 0x4d, 0x56, 0xff, 0x3e, + 0xc5, 0x6b, 0xc5, 0x28, 0x41, 0x1e, 0xa4, 0x7b, 0x0f, 0xe6, 0xa9, 0xd6, 0x8a, 0xe2, 0x55, 0xf6, + 0x28, 0xe3, 0xd5, 0x4e, 0x4c, 0x32, 0x4e, 0xe0, 0xbc, 0x40, 0x36, 0x8b, 0x1f, 0x8c, 0xcc, 0x01, + 0x07, 0xe3, 0x4f, 0x53, 0xbc, 0x56, 0x1b, 0x4b, 0x43, 0xe8, 0xa5, 0xa0, 0xde, 0x11, 0x76, 0x5e, + 0x90, 0x12, 0x92, 0x95, 0xc9, 0xa8, 0xad, 0x33, 0xff, 0x73, 0xb6, 0x56, 0xff, 0x3d, 0x05, 0xc7, + 0x93, 0xe5, 0x23, 0xab, 0x62, 0xa6, 0x59, 0x22, 0x16, 0x25, 0xee, 0xdc, 0x4a, 0x23, 0xb5, 0x4a, + 0xb5, 0xc4, 0xf6, 0xd0, 0xbb, 0x6e, 0x51, 0xb7, 0x1f, 0xed, 0x10, 0xa7, 0x61, 0xa1, 0x01, 0x8b, + 0x4a, 0x79, 0xfe, 0xb4, 0xee, 0xda, 0x5d, 0x7e, 0x6b, 0x4a, 0xa9, 0x84, 0xe1, 0xfa, 0xd4, 0x6d, + 0xdf, 0xd5, 0x49, 0x74, 0x37, 0xaf, 0x05, 0xc8, 0x38, 0x52, 0xe2, 0xec, 0x35, 0x80, 0x48, 0x6d, + 0xb4, 0x28, 0x2e, 0xac, 0xdc, 0xcb, 0xf8, 0x1d, 0x15, 0x9d, 0x86, 0xe9, 0x9e, 0x66, 0xfa, 0xa2, + 0xd2, 0xce, 0x63, 0xf1, 0xf2, 0xd5, 0xa9, 0x6b, 0x8a, 0xfa, 0x97, 0xb8, 0xb3, 0xc6, 0x00, 0xd1, + 0x4f, 0x13, 0xfe, 0x20, 0xee, 0x07, 0xbb, 0x29, 0xaf, 0xf2, 0xd9, 0x47, 0xf0, 0x17, 0x0a, 0xcc, + 0x8b, 0xdb, 0xfb, 0xb6, 0xe6, 0x44, 0x4e, 0xfa, 0x3c, 0x94, 0xe2, 0x87, 0x67, 0x35, 0x86, 0x8d, + 0x13, 0x9a, 0xa8, 0x7b, 0x70, 0x66, 0x9f, 0xa9, 0xac, 0x7a, 0x69, 0x18, 0x2e, 0xd1, 0x59, 0xf6, + 0xe0, 0xe1, 0x43, 0x24, 0xbd, 0xb0, 0x7a, 0x59, 0x8b, 0x0f, 0xe2, 0x24, 0xef, 0xc1, 0xd9, 0x54, + 0xbd, 0x02, 0x8b, 0xa3, 0x27, 0xeb, 0x10, 0xb3, 0x1e, 0xe5, 0x20, 0x57, 0x71, 0x9c, 0xba, 0x43, + 0x74, 0x56, 0x21, 0x79, 0xc4, 0xed, 0x19, 0x3a, 0xa9, 0xe8, 0xba, 0xed, 0x5b, 0xf4, 0x76, 0x34, + 0x37, 0xac, 0x90, 0xea, 0x63, 0x1c, 0x78, 0xc2, 0x2c, 0xf4, 0x0e, 0xe4, 0x74, 0xd1, 0x6a, 0x91, + 0x9b, 0x73, 0x37, 0x95, 0xb6, 0x90, 0xb8, 0xef, 0xcb, 0x17, 0x1c, 0x40, 0xa2, 0x3d, 0x98, 0x6e, + 0x32, 0x43, 0xf0, 0x1e, 0xc5, 0xdc, 0x4a, 0x3d, 0x05, 0xc7, 0x88, 0x42, 0x02, 0x7f, 0xc5, 0x02, + 0x10, 0xfd, 0x50, 0x81, 0x59, 0x4a, 0xba, 0x8e, 0xa9, 0x51, 0x52, 0xc8, 0x72, 0xf4, 0x23, 0xbe, + 0xdd, 0xed, 0x48, 0xe9, 0xd5, 0x45, 0xa9, 0xc0, 0x6c, 0x40, 0xc1, 0x21, 0x32, 0x7a, 0x07, 0x66, + 0x1a, 0xbc, 0x43, 0x50, 0x98, 0xe6, 0x3a, 0xec, 0xa4, 0xd1, 0xef, 0x88, 0xca, 0x58, 0xf1, 0x8e, + 0x25, 0x26, 0x2b, 0x77, 0x1d, 0xcd, 0xf7, 0x48, 0x83, 0xdf, 0x67, 0x66, 0x23, 0xbe, 0x1a, 0xa7, + 0x62, 0x39, 0x8a, 0xbe, 0x0c, 0xb3, 0xba, 0x66, 0xe9, 0xc4, 0x24, 0x0d, 0x59, 0x88, 0x87, 0x6b, + 0x5a, 0x95, 0x74, 0x1c, 0x72, 0xa0, 0x37, 0x01, 0xbc, 0xbe, 0xa5, 0xd7, 0x88, 0x6b, 0xd8, 0x8d, + 0xc2, 0x2c, 0xf7, 0xaa, 0x52, 0x49, 0xf4, 0x40, 0x4b, 0xf1, 0x1e, 0x68, 0xa4, 0x7c, 0x97, 0x50, + 0xad, 0xd4, 0xbb, 0x5c, 0x5a, 0xf3, 0x5d, 0x8d, 0xe7, 0x3e, 0x5e, 0xd0, 0xd5, 0x43, 0x29, 0x38, + 0x26, 0x11, 0xad, 0x00, 0x58, 0xb6, 0x2d, 0xdb, 0x32, 0x85, 0x3c, 0xd7, 0x07, 0x49, 0x7d, 0xe0, + 0x76, 0x38, 0x82, 0x63, 0x5c, 0x68, 0x0d, 0x16, 0x1b, 0xa4, 0xa9, 0xf9, 0x26, 0x0d, 0x3b, 0xa5, + 0x05, 0xe0, 0x07, 0xa6, 0x20, 0x67, 0x2e, 0xae, 0x8d, 0x8c, 0xe3, 0xb1, 0x19, 0xea, 0xaf, 0x73, + 0xfc, 0x4e, 0x19, 0xec, 0x23, 0xa2, 0x90, 0xe9, 0x53, 0x9a, 0x4e, 0x2b, 0x26, 0x00, 0xb9, 0x4f, + 0x65, 0x7f, 0xe0, 0x3e, 0xa5, 0x98, 0xc1, 0xa1, 0x3d, 0xc8, 0x76, 0x76, 0xcd, 0x86, 0x3c, 0xaf, + 0xaf, 0xa7, 0x03, 0xbb, 0xb5, 0x6b, 0x36, 0x64, 0xcb, 0x72, 0xd7, 0x6c, 0x60, 0x8e, 0xc8, 0xe3, + 0x79, 0x9b, 0x98, 0xdd, 0x80, 0x49, 0x96, 0x3a, 0xbb, 0xe9, 0xa8, 0x70, 0x23, 0x86, 0x24, 0xe2, + 0x79, 0x9c, 0x82, 0x13, 0x9a, 0xa0, 0x9f, 0x28, 0x90, 0xef, 0xf8, 0x1e, 0xb5, 0xbb, 0xc6, 0xdb, + 0x24, 0x9d, 0x26, 0x66, 0x68, 0x9a, 0x00, 0x46, 0x64, 0xbe, 0xf0, 0x15, 0x47, 0x0a, 0xb0, 0xf0, + 0x92, 0xfb, 0xb6, 0x67, 0x5b, 0x16, 0x09, 0x3a, 0x38, 0x6f, 0xa4, 0xa3, 0xcc, 0x4d, 0x01, 0x22, + 0xe2, 0xab, 0x7c, 0xc1, 0x01, 0x34, 0x73, 0x15, 0xcf, 0x76, 0x3c, 0xd9, 0xae, 0x48, 0xc9, 0x55, + 0xea, 0xb6, 0xe3, 0x09, 0x57, 0x61, 0x4f, 0x98, 0x23, 0xb2, 0xa3, 0xa1, 0xfb, 0x84, 0x47, 0x8b, + 0xd4, 0x8e, 0xc6, 0xaa, 0x4f, 0xc4, 0xd1, 0x58, 0xf5, 0x09, 0x66, 0x70, 0xea, 0x47, 0xa2, 0x0e, + 0x8d, 0x31, 0xa0, 0x62, 0xbc, 0x0c, 0x95, 0xcd, 0xf2, 0x44, 0x71, 0xf8, 0x81, 0x02, 0xc0, 0xab, + 0xab, 0x78, 0x75, 0x98, 0x92, 0x4b, 0xdf, 0xe3, 0x38, 0xb2, 0x40, 0x0c, 0x63, 0xd6, 0xbd, 0x10, + 0x1d, 0xc7, 0x34, 0x41, 0x15, 0x38, 0x61, 0x58, 0x8e, 0x4f, 0xaf, 0xef, 0x39, 0x2e, 0xf1, 0xbc, + 0xe0, 0x6a, 0x91, 0xaf, 0x9e, 0x91, 0x13, 0x4f, 0x6c, 0x26, 0x87, 0xf1, 0x28, 0x3f, 0x0b, 0x7b, + 0xb6, 0x4f, 0x93, 0x32, 0xb2, 0xc9, 0xb0, 0x77, 0x67, 0x64, 0x1c, 0x8f, 0xcd, 0x50, 0xff, 0x96, + 0xe5, 0xc5, 0xd2, 0xa4, 0x73, 0x79, 0x88, 0xee, 0x41, 0xe2, 0xb3, 0xd5, 0xd4, 0x21, 0x3e, 0x5b, + 0x05, 0xbd, 0xbd, 0xcc, 0x7e, 0xbd, 0xbd, 0xd1, 0x2d, 0xcb, 0xbe, 0x30, 0x5b, 0xf6, 0x73, 0x05, + 0x4e, 0x76, 0xfc, 0x5d, 0xe2, 0x5a, 0x84, 0x12, 0x4f, 0xde, 0xe8, 0x64, 0x00, 0xc0, 0x47, 0xa8, + 0x9f, 0x94, 0x5c, 0x5d, 0x1a, 0x0e, 0x8a, 0x27, 0xb7, 0x46, 0x01, 0xf1, 0xb8, 0x0e, 0xe8, 0x7d, + 0x05, 0x8e, 0x47, 0xd4, 0x4a, 0x6d, 0x33, 0x08, 0x0a, 0x47, 0x79, 0x36, 0xb7, 0x12, 0x00, 0x55, + 0x34, 0x1c, 0x14, 0x8f, 0x27, 0x69, 0x78, 0x44, 0x09, 0xf5, 0x34, 0xa0, 0xf1, 0x68, 0xa6, 0xae, + 0xc0, 0x89, 0x91, 0x5c, 0x74, 0xe0, 0x39, 0x56, 0xff, 0x8f, 0x5f, 0x8b, 0xc6, 0x82, 0xb4, 0xfa, + 0xdb, 0xa9, 0x84, 0x30, 0x16, 0xa3, 0xd0, 0x1e, 0x64, 0x9c, 0x56, 0xf0, 0xc9, 0xef, 0x8d, 0xf4, + 0xc2, 0x62, 0x6d, 0xa3, 0x26, 0x22, 0x54, 0x6d, 0xa3, 0x86, 0x19, 0x64, 0xb4, 0x8c, 0xa9, 0x7d, + 0xc2, 0xd1, 0x1e, 0x64, 0xb4, 0x56, 0x90, 0x59, 0x53, 0x54, 0xad, 0xd2, 0x92, 0xc1, 0xb3, 0xd2, + 0x22, 0x98, 0x41, 0xaa, 0x1f, 0x29, 0x89, 0xbd, 0x90, 0x4c, 0xe8, 0x8f, 0x0a, 0x9c, 0x76, 0x5c, + 0xa3, 0xc7, 0x8c, 0x4a, 0xfa, 0x5e, 0x7d, 0xe4, 0x86, 0x69, 0xa5, 0x68, 0xbd, 0x09, 0xa8, 0xd5, + 0xc2, 0x70, 0x50, 0x3c, 0x3d, 0x69, 0x04, 0x4f, 0xd4, 0x72, 0xd2, 0xaa, 0x6a, 0x1b, 0xb5, 0xcf, + 0xfb, 0xaa, 0x36, 0xe0, 0xa5, 0x43, 0x88, 0x3d, 0xc4, 0xbd, 0xf2, 0x77, 0x0a, 0x7c, 0x71, 0x2c, + 0xda, 0xad, 0xd9, 0x0f, 0xad, 0x87, 0x9a, 0xdb, 0xa8, 0xd4, 0x36, 0xd1, 0x63, 0x05, 0xa6, 0x0d, + 0x4a, 0xba, 0x41, 0x1f, 0xa7, 0x93, 0x66, 0x98, 0x8d, 0x01, 0x6f, 0x52, 0xd2, 0x8d, 0x35, 0xdc, + 0x98, 0x06, 0x58, 0x28, 0xa2, 0xfe, 0x35, 0x0b, 0xe7, 0x0f, 0x9a, 0x7a, 0xb8, 0xc4, 0xd4, 0x34, + 0x88, 0xd9, 0x88, 0xdd, 0xf1, 0xc3, 0xc4, 0xb4, 0x1e, 0x0c, 0xe0, 0x88, 0x67, 0x9f, 0xe8, 0x9e, + 0x79, 0x01, 0xa2, 0xfb, 0x6f, 0x14, 0x58, 0x62, 0x72, 0x56, 0x43, 0xf9, 0x81, 0x76, 0xd9, 0xd4, + 0xb4, 0xfb, 0xff, 0xe1, 0xa0, 0xb8, 0xb4, 0x35, 0x09, 0x14, 0x4f, 0xd6, 0x65, 0x52, 0x0e, 0x9a, + 0x7e, 0x11, 0x72, 0xd0, 0x7b, 0xc9, 0xfa, 0x26, 0x9e, 0xf1, 0xd1, 0xcf, 0x26, 0x34, 0xd5, 0x48, + 0xfa, 0x95, 0xc6, 0xb3, 0xfb, 0x6a, 0xbf, 0x9a, 0xdc, 0x57, 0x7b, 0x4e, 0x7a, 0x1d, 0xd0, 0x5a, + 0x3b, 0x44, 0xfd, 0xf6, 0x4b, 0x05, 0xe6, 0x1a, 0xd1, 0x79, 0x95, 0x4e, 0xda, 0x7a, 0x4e, 0x91, + 0xa5, 0x7a, 0x62, 0x38, 0x28, 0xce, 0xc5, 0x08, 0x38, 0xae, 0x8c, 0xfa, 0x2a, 0x9c, 0xdd, 0x7f, + 0xf1, 0x87, 0x88, 0xa8, 0x9f, 0x64, 0x12, 0x77, 0x90, 0xfb, 0x94, 0xa2, 0x3a, 0x2c, 0x19, 0x2d, + 0xcb, 0x76, 0xc9, 0x5d, 0xab, 0x63, 0xd9, 0x0f, 0xad, 0x55, 0xbb, 0xdb, 0x25, 0x16, 0x15, 0xff, + 0xf9, 0xcc, 0x56, 0xcf, 0x49, 0x29, 0x4b, 0x9b, 0x93, 0x98, 0xf0, 0xe4, 0xb9, 0xfc, 0x5b, 0x25, + 0x75, 0x0d, 0x9d, 0xf2, 0xdd, 0x8f, 0x35, 0x6f, 0xea, 0x9c, 0x8a, 0xe5, 0x68, 0xec, 0x97, 0x91, + 0xcc, 0x67, 0xf1, 0xcb, 0x48, 0x58, 0xf0, 0x64, 0xf7, 0x29, 0x78, 0xbe, 0xc4, 0xc2, 0xb0, 0x49, + 0xb6, 0x35, 0xb7, 0xe3, 0xf1, 0x2e, 0x58, 0x5e, 0x78, 0xfe, 0x7a, 0x40, 0xc4, 0xd1, 0xf8, 0x68, + 0xe5, 0x3f, 0xf3, 0xa2, 0x54, 0xfe, 0xea, 0x3f, 0x14, 0xc8, 0xaf, 0xda, 0x56, 0xc3, 0xe0, 0x9f, + 0x66, 0x2e, 0x43, 0x96, 0xf6, 0x9d, 0xc0, 0x4b, 0x82, 0xfd, 0xcd, 0xee, 0xf4, 0x1d, 0xf2, 0xe9, + 0xa0, 0xb8, 0x10, 0x32, 0x32, 0x02, 0xe6, 0xac, 0xe8, 0x16, 0xdb, 0x4e, 0x8d, 0xfa, 0x9e, 0x4c, + 0x45, 0x57, 0xa2, 0xed, 0x64, 0xd4, 0x4f, 0x07, 0x45, 0x35, 0xfa, 0x8d, 0xb0, 0xac, 0xdb, 0x2e, + 0x29, 0xf7, 0x2e, 0x97, 0x42, 0x49, 0x82, 0x0b, 0x4b, 0x19, 0xcc, 0x39, 0x5c, 0xa2, 0x79, 0xe1, + 0x95, 0x31, 0x74, 0x0e, 0xcc, 0xa9, 0x58, 0x8e, 0xa2, 0x8b, 0x90, 0xeb, 0x12, 0xcf, 0x63, 0x15, + 0xe7, 0xc8, 0xd7, 0xe3, 0x6d, 0x41, 0xc6, 0xc1, 0xb8, 0xfa, 0xfd, 0x0c, 0x2c, 0x6c, 0x10, 0x8b, + 0xb8, 0x86, 0x2e, 0xc0, 0xd0, 0x4d, 0x40, 0xf6, 0xae, 0x47, 0xdc, 0x1e, 0x69, 0x6c, 0x88, 0x5f, + 0x17, 0x59, 0xc6, 0x61, 0x6b, 0xce, 0x44, 0x7d, 0xe8, 0x3b, 0x63, 0x1c, 0x78, 0xc2, 0x2c, 0xf4, + 0xae, 0x02, 0xa0, 0x07, 0x8b, 0xf1, 0xe4, 0x2d, 0xfc, 0x28, 0xbb, 0xa1, 0xa1, 0xa5, 0xa2, 0xad, + 0x0c, 0x49, 0x1e, 0x8e, 0x61, 0xa3, 0x6d, 0x38, 0xd5, 0x74, 0x0d, 0x62, 0x35, 0xcc, 0xfe, 0x1a, + 0xf1, 0x74, 0xd7, 0x70, 0x68, 0x74, 0xf7, 0xfe, 0x82, 0x9c, 0x7c, 0x6a, 0x7d, 0x9c, 0x05, 0x4f, + 0x9a, 0xc7, 0xac, 0xe4, 0x7b, 0xa4, 0xe9, 0x9b, 0xd7, 0x5d, 0xd7, 0x76, 0xb7, 0x13, 0xd6, 0x0e, + 0xad, 0x74, 0x77, 0x8c, 0x03, 0x4f, 0x98, 0xa5, 0x6e, 0xc2, 0x48, 0x2e, 0x43, 0x5f, 0x81, 0x85, + 0x96, 0x6b, 0xfb, 0x8e, 0xcc, 0xb1, 0xc1, 0xf5, 0xe8, 0xe4, 0x70, 0x50, 0x5c, 0xd8, 0x88, 0x0f, + 0xe0, 0x24, 0x9f, 0x7a, 0x05, 0x82, 0xaf, 0xf7, 0xf1, 0xef, 0xfb, 0xca, 0xb3, 0xbf, 0xef, 0x57, + 0xed, 0x27, 0x4f, 0x97, 0x8f, 0x7d, 0xf8, 0x74, 0xf9, 0xd8, 0xc7, 0x4f, 0x97, 0x8f, 0x7d, 0x6f, + 0xb8, 0xac, 0x3c, 0x19, 0x2e, 0x2b, 0x1f, 0x0e, 0x97, 0x95, 0x8f, 0x87, 0xcb, 0xca, 0x3f, 0x87, + 0xcb, 0xca, 0xe3, 0x7f, 0x2d, 0x1f, 0x7b, 0x7d, 0xf3, 0xc8, 0x7e, 0x36, 0xfe, 0x4f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x42, 0x66, 0x62, 0x39, 0xb8, 0x2c, 0x00, 0x00, } func (m *AppCluster) Marshal() (dAtA []byte, err error) { @@ -1638,6 +1641,14 @@ func (m *AppFetchGit) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i-- + if m.ForceHTTPBasicAuth { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 if m.RefSelection != nil { { size, err := m.RefSelection.MarshalToSizedBuffer(dAtA[:i]) @@ -3298,6 +3309,7 @@ func (m *AppFetchGit) Size() (n int) { l = m.RefSelection.Size() n += 1 + l + sovGenerated(uint64(l)) } + n += 2 return n } @@ -3951,6 +3963,7 @@ func (this *AppFetchGit) String() string { `SubPath:` + fmt.Sprintf("%v", this.SubPath) + `,`, `LFSSkipSmudge:` + fmt.Sprintf("%v", this.LFSSkipSmudge) + `,`, `RefSelection:` + strings.Replace(fmt.Sprintf("%v", this.RefSelection), "VersionSelection", "v1alpha1.VersionSelection", 1) + `,`, + `ForceHTTPBasicAuth:` + fmt.Sprintf("%v", this.ForceHTTPBasicAuth) + `,`, `}`, }, "") return s @@ -5578,6 +5591,26 @@ func (m *AppFetchGit) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ForceHTTPBasicAuth", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ForceHTTPBasicAuth = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/generated.proto b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/generated.proto index 4e1461e8f..61e8100a9 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/generated.proto +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/generated.proto @@ -5,7 +5,7 @@ syntax = "proto2"; package github.com.vmware_tanzu.carvel_kapp_controller.pkg.apis.kappctrl.v1alpha1; -import "github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1/generated.proto"; +import "carvel.dev/vendir/pkg/vendir/versions/v1alpha1/generated.proto"; import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; @@ -109,7 +109,7 @@ message AppFetchGit { // Specifies a strategy to resolve to an explicit ref (optional; v0.24.0+) // +optional - optional github.com.vmware_tanzu.carvel_vendir.pkg.vendir.versions.v1alpha1.VersionSelection refSelection = 6; + optional carvel.dev.vendir.pkg.vendir.versions.v1alpha1.VersionSelection refSelection = 6; // Secret with auth details. allowed keys: ssh-privatekey, ssh-knownhosts, username, password (optional) // (if ssh-knownhosts is not specified, git will not perform strict host checking) @@ -123,6 +123,10 @@ message AppFetchGit { // Skip lfs download (optional) // +optional optional bool lfsSkipSmudge = 5; + + // Force the usage of HTTP Basic Auth when Basic Auth is provided (optional) + // +optional + optional bool forceHTTPBasicAuth = 7; } // +k8s:openapi-gen=true @@ -178,7 +182,7 @@ message AppFetchImage { // Specifies a strategy to choose a tag (optional; v0.24.0+) // if specified, do not include a tag in url key // +optional - optional github.com.vmware_tanzu.carvel_vendir.pkg.vendir.versions.v1alpha1.VersionSelection tagSelection = 4; + optional carvel.dev.vendir.pkg.vendir.versions.v1alpha1.VersionSelection tagSelection = 4; // Secret may include one or more keys: username, password, token. // By default anonymous access is used for authentication. @@ -199,7 +203,7 @@ message AppFetchImgpkgBundle { // Specifies a strategy to choose a tag (optional; v0.24.0+) // if specified, do not include a tag in url key // +optional - optional github.com.vmware_tanzu.carvel_vendir.pkg.vendir.versions.v1alpha1.VersionSelection tagSelection = 3; + optional carvel.dev.vendir.pkg.vendir.versions.v1alpha1.VersionSelection tagSelection = 3; // Secret may include one or more keys: username, password, token. // By default anonymous access is used for authentication. diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/register.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/register.go index ea53bdecc..b85712092 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/register.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/register.go @@ -1,4 +1,4 @@ -// Copyright 2020 VMware, Inc. +// Copyright 2024 The Carvel Authors. // SPDX-License-Identifier: Apache-2.0 package v1alpha1 diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/status.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/status.go index bc97e8f65..71fc4bb2d 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/status.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/status.go @@ -1,4 +1,4 @@ -// Copyright 2021 VMware, Inc. +// Copyright 2024 The Carvel Authors. // SPDX-License-Identifier: Apache-2.0 package v1alpha1 diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types.go index dc89189e4..9c2fb5a60 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types.go @@ -1,4 +1,4 @@ -// Copyright 2020 VMware, Inc. +// Copyright 2024 The Carvel Authors. // SPDX-License-Identifier: Apache-2.0 package v1alpha1 diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types_deploy.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types_deploy.go index cee423eff..ff52e5f03 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types_deploy.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types_deploy.go @@ -1,4 +1,4 @@ -// Copyright 2020 VMware, Inc. +// Copyright 2024 The Carvel Authors. // SPDX-License-Identifier: Apache-2.0 package v1alpha1 diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types_fetch.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types_fetch.go index 2a598a09b..f3a221a73 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types_fetch.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types_fetch.go @@ -1,10 +1,10 @@ -// Copyright 2020 VMware, Inc. +// Copyright 2024 The Carvel Authors. // SPDX-License-Identifier: Apache-2.0 package v1alpha1 import ( - versions "github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1" + versions "carvel.dev/vendir/pkg/vendir/versions/v1alpha1" ) // +k8s:openapi-gen=true @@ -106,6 +106,9 @@ type AppFetchGit struct { // Skip lfs download (optional) // +optional LFSSkipSmudge bool `json:"lfsSkipSmudge,omitempty" protobuf:"varint,5,opt,name=lfsSkipSmudge"` + // Force the usage of HTTP Basic Auth when Basic Auth is provided (optional) + // +optional + ForceHTTPBasicAuth bool `json:"forceHTTPBasicAuth,omitempty" protobuf:"varint,7,opt,name=forceHTTPBasicAuth"` } // +k8s:openapi-gen=true diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types_template.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types_template.go index 1e9470d4d..09c7a0055 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types_template.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/types_template.go @@ -1,4 +1,4 @@ -// Copyright 2020 VMware, Inc. +// Copyright 2024 The Carvel Authors. // SPDX-License-Identifier: Apache-2.0 //nolint:revive // we're unlikely to write descriptive godoc comments in this file. diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/zz_generated.deepcopy.go index b51afa929..478450469 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1/zz_generated.deepcopy.go @@ -6,7 +6,7 @@ package v1alpha1 import ( - versionsv1alpha1 "github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1" + versionsv1alpha1 "carvel.dev/vendir/pkg/vendir/versions/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/doc.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/doc.go index 8b244e452..746048840 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/doc.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/doc.go @@ -1,4 +1,4 @@ -// Copyright 2020 VMware, Inc. +// Copyright 2024 The Carvel Authors. // SPDX-License-Identifier: Apache-2.0 // +k8s:deepcopy-gen=package diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/package_install.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/package_install.go index 0195b0840..d27d8edbe 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/package_install.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/package_install.go @@ -1,11 +1,11 @@ -// Copyright 2020 VMware, Inc. +// Copyright 2024 The Carvel Authors. // SPDX-License-Identifier: Apache-2.0 package v1alpha1 import ( + versions "carvel.dev/vendir/pkg/vendir/versions/v1alpha1" "github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1" - versions "github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/package_repository.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/package_repository.go index c622b1491..0ef821c06 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/package_repository.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/package_repository.go @@ -1,4 +1,4 @@ -// Copyright 2020 VMware, Inc. +// Copyright 2024 The Carvel Authors. // SPDX-License-Identifier: Apache-2.0 package v1alpha1 diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/register.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/register.go index dd339fb05..d718b8db5 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/register.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/register.go @@ -1,4 +1,4 @@ -// Copyright 2020 VMware, Inc. +// Copyright 2024 The Carvel Authors. // SPDX-License-Identifier: Apache-2.0 package v1alpha1 diff --git a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/zz_generated.deepcopy.go index a92b8c534..405ddc200 100644 --- a/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1/zz_generated.deepcopy.go @@ -6,8 +6,8 @@ package v1alpha1 import ( + versionsv1alpha1 "carvel.dev/vendir/pkg/vendir/versions/v1alpha1" kappctrlv1alpha1 "github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1" - versionsv1alpha1 "github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) diff --git a/vendor/golang.org/x/crypto/bcrypt/bcrypt.go b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go index 5577c0f93..dc9311870 100644 --- a/vendor/golang.org/x/crypto/bcrypt/bcrypt.go +++ b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go @@ -4,7 +4,7 @@ // Package bcrypt implements Provos and Mazières's bcrypt adaptive hashing // algorithm. See http://www.usenix.org/event/usenix99/provos/provos.pdf -package bcrypt // import "golang.org/x/crypto/bcrypt" +package bcrypt // The code is a port of Provos and Mazières's C implementation. import ( diff --git a/vendor/golang.org/x/crypto/blowfish/cipher.go b/vendor/golang.org/x/crypto/blowfish/cipher.go index 213bf204a..089895680 100644 --- a/vendor/golang.org/x/crypto/blowfish/cipher.go +++ b/vendor/golang.org/x/crypto/blowfish/cipher.go @@ -11,7 +11,7 @@ // Deprecated: any new system should use AES (from crypto/aes, if necessary in // an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from // golang.org/x/crypto/chacha20poly1305). -package blowfish // import "golang.org/x/crypto/blowfish" +package blowfish // The code is a port of Bruce Schneier's C implementation. // See https://www.schneier.com/blowfish.html. diff --git a/vendor/golang.org/x/crypto/cast5/cast5.go b/vendor/golang.org/x/crypto/cast5/cast5.go index 425e8eecb..016e90215 100644 --- a/vendor/golang.org/x/crypto/cast5/cast5.go +++ b/vendor/golang.org/x/crypto/cast5/cast5.go @@ -11,7 +11,7 @@ // Deprecated: any new system should use AES (from crypto/aes, if necessary in // an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from // golang.org/x/crypto/chacha20poly1305). -package cast5 // import "golang.org/x/crypto/cast5" +package cast5 import ( "errors" diff --git a/vendor/golang.org/x/crypto/openpgp/armor/armor.go b/vendor/golang.org/x/crypto/openpgp/armor/armor.go index 8907183ec..e664d127c 100644 --- a/vendor/golang.org/x/crypto/openpgp/armor/armor.go +++ b/vendor/golang.org/x/crypto/openpgp/armor/armor.go @@ -10,14 +10,15 @@ // for their specific task. If you are required to interoperate with OpenPGP // systems and need a maintained package, consider a community fork. // See https://golang.org/issue/44226. -package armor // import "golang.org/x/crypto/openpgp/armor" +package armor import ( "bufio" "bytes" "encoding/base64" - "golang.org/x/crypto/openpgp/errors" "io" + + "golang.org/x/crypto/openpgp/errors" ) // A Block represents an OpenPGP armored structure. diff --git a/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go b/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go index 644b2e078..cea48efdc 100644 --- a/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go +++ b/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go @@ -13,7 +13,7 @@ // for their specific task. If you are required to interoperate with OpenPGP // systems and need a maintained package, consider a community fork. // See https://golang.org/issue/44226. -package clearsign // import "golang.org/x/crypto/openpgp/clearsign" +package clearsign import ( "bufio" diff --git a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go index 743b35a12..f922bdbca 100644 --- a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go +++ b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go @@ -16,7 +16,7 @@ // https://golang.org/issue/44226), and ElGamal in the OpenPGP ecosystem has // compatibility and security issues (see https://eprint.iacr.org/2021/923). // Moreover, this package doesn't protect against side-channel attacks. -package elgamal // import "golang.org/x/crypto/openpgp/elgamal" +package elgamal import ( "crypto/rand" diff --git a/vendor/golang.org/x/crypto/openpgp/errors/errors.go b/vendor/golang.org/x/crypto/openpgp/errors/errors.go index 1d7a0ea05..a32874947 100644 --- a/vendor/golang.org/x/crypto/openpgp/errors/errors.go +++ b/vendor/golang.org/x/crypto/openpgp/errors/errors.go @@ -9,7 +9,7 @@ // for their specific task. If you are required to interoperate with OpenPGP // systems and need a maintained package, consider a community fork. // See https://golang.org/issue/44226. -package errors // import "golang.org/x/crypto/openpgp/errors" +package errors import ( "strconv" diff --git a/vendor/golang.org/x/crypto/openpgp/packet/packet.go b/vendor/golang.org/x/crypto/openpgp/packet/packet.go index 0a19794a8..a84a1a214 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/packet.go +++ b/vendor/golang.org/x/crypto/openpgp/packet/packet.go @@ -10,7 +10,7 @@ // for their specific task. If you are required to interoperate with OpenPGP // systems and need a maintained package, consider a community fork. // See https://golang.org/issue/44226. -package packet // import "golang.org/x/crypto/openpgp/packet" +package packet import ( "bufio" diff --git a/vendor/golang.org/x/crypto/openpgp/read.go b/vendor/golang.org/x/crypto/openpgp/read.go index 48a893146..cff3db919 100644 --- a/vendor/golang.org/x/crypto/openpgp/read.go +++ b/vendor/golang.org/x/crypto/openpgp/read.go @@ -9,7 +9,7 @@ // for their specific task. If you are required to interoperate with OpenPGP // systems and need a maintained package, consider a community fork. // See https://golang.org/issue/44226. -package openpgp // import "golang.org/x/crypto/openpgp" +package openpgp import ( "crypto" diff --git a/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go b/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go index f53244a1c..fa1a91907 100644 --- a/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go +++ b/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go @@ -10,7 +10,7 @@ // for their specific task. If you are required to interoperate with OpenPGP // systems and need a maintained package, consider a community fork. // See https://golang.org/issue/44226. -package s2k // import "golang.org/x/crypto/openpgp/s2k" +package s2k import ( "crypto" diff --git a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go index 904b57e01..28cd99c7f 100644 --- a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go +++ b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go @@ -16,7 +16,7 @@ Hash Functions SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512 for HMAC. To choose, you can pass the `New` functions from the different SHA packages to pbkdf2.Key. */ -package pbkdf2 // import "golang.org/x/crypto/pbkdf2" +package pbkdf2 import ( "crypto/hmac" diff --git a/vendor/golang.org/x/crypto/scrypt/scrypt.go b/vendor/golang.org/x/crypto/scrypt/scrypt.go index c971a99fa..76fa40fb2 100644 --- a/vendor/golang.org/x/crypto/scrypt/scrypt.go +++ b/vendor/golang.org/x/crypto/scrypt/scrypt.go @@ -5,7 +5,7 @@ // Package scrypt implements the scrypt key derivation function as defined in // Colin Percival's paper "Stronger Key Derivation via Sequential Memory-Hard // Functions" (https://www.tarsnap.com/scrypt/scrypt.pdf). -package scrypt // import "golang.org/x/crypto/scrypt" +package scrypt import ( "crypto/sha256" diff --git a/vendor/golang.org/x/exp/LICENSE b/vendor/golang.org/x/exp/LICENSE index 6a66aea5e..2a7cf70da 100644 --- a/vendor/golang.org/x/exp/LICENSE +++ b/vendor/golang.org/x/exp/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/exp/slices/sort.go b/vendor/golang.org/x/exp/slices/sort.go index b67897f76..f58bbc7ba 100644 --- a/vendor/golang.org/x/exp/slices/sort.go +++ b/vendor/golang.org/x/exp/slices/sort.go @@ -22,10 +22,12 @@ func Sort[S ~[]E, E constraints.Ordered](x S) { // SortFunc sorts the slice x in ascending order as determined by the cmp // function. This sort is not guaranteed to be stable. // cmp(a, b) should return a negative number when a < b, a positive number when -// a > b and zero when a == b. +// a > b and zero when a == b or when a is not comparable to b in the sense +// of the formal definition of Strict Weak Ordering. // // SortFunc requires that cmp is a strict weak ordering. // See https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings. +// To indicate 'uncomparable', return 0 from the function. func SortFunc[S ~[]E, E any](x S, cmp func(a, b E) int) { n := len(x) pdqsortCmpFunc(x, 0, n, bits.Len(uint(n)), cmp) diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index 98a49c6b6..61f511f97 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -827,10 +827,6 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro cc.henc.SetMaxDynamicTableSizeLimit(t.maxEncoderHeaderTableSize()) cc.peerMaxHeaderTableSize = initialHeaderTableSize - if t.AllowHTTP { - cc.nextStreamID = 3 - } - if cs, ok := c.(connectionStater); ok { state := cs.ConnectionState() cc.tlsState = &state diff --git a/vendor/golang.org/x/sys/unix/mremap.go b/vendor/golang.org/x/sys/unix/mremap.go index fd45fe529..3a5e776f8 100644 --- a/vendor/golang.org/x/sys/unix/mremap.go +++ b/vendor/golang.org/x/sys/unix/mremap.go @@ -50,3 +50,8 @@ func (m *mremapMmapper) Mremap(oldData []byte, newLength int, flags int) (data [ func Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) { return mapper.Mremap(oldData, newLength, flags) } + +func MremapPtr(oldAddr unsafe.Pointer, oldSize uintptr, newAddr unsafe.Pointer, newSize uintptr, flags int) (ret unsafe.Pointer, err error) { + xaddr, err := mapper.mremap(uintptr(oldAddr), oldSize, newSize, flags, uintptr(newAddr)) + return unsafe.Pointer(xaddr), err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 59542a897..4cc7b0059 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -542,6 +542,18 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { } } +//sys pthread_chdir_np(path string) (err error) + +func PthreadChdir(path string) (err error) { + return pthread_chdir_np(path) +} + +//sys pthread_fchdir_np(fd int) (err error) + +func PthreadFchdir(fd int) (err error) { + return pthread_fchdir_np(fd) +} + //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) //sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go index 77081de8c..4e92e5aa4 100644 --- a/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -154,6 +154,15 @@ func Munmap(b []byte) (err error) { return mapper.Munmap(b) } +func MmapPtr(fd int, offset int64, addr unsafe.Pointer, length uintptr, prot int, flags int) (ret unsafe.Pointer, err error) { + xaddr, err := mapper.mmap(uintptr(addr), length, prot, flags, fd, offset) + return unsafe.Pointer(xaddr), err +} + +func MunmapPtr(addr unsafe.Pointer, length uintptr) (err error) { + return mapper.munmap(uintptr(addr), length) +} + func Read(fd int, p []byte) (n int, err error) { n, err = read(fd, p) if raceenabled { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index ccb02f240..07642c308 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -760,6 +760,39 @@ var libc_sysctl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func pthread_chdir_np(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_pthread_chdir_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pthread_chdir_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pthread_chdir_np pthread_chdir_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pthread_fchdir_np(fd int) (err error) { + _, _, e1 := syscall_syscall(libc_pthread_fchdir_np_trampoline_addr, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pthread_fchdir_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pthread_fchdir_np pthread_fchdir_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index 8b8bb2840..923e08cb7 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -228,6 +228,16 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) +TEXT libc_pthread_chdir_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pthread_chdir_np(SB) +GLOBL ·libc_pthread_chdir_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pthread_chdir_np_trampoline_addr(SB)/8, $libc_pthread_chdir_np_trampoline<>(SB) + +TEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pthread_fchdir_np(SB) +GLOBL ·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB) + TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index 1b40b997b..7d73dda64 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -760,6 +760,39 @@ var libc_sysctl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func pthread_chdir_np(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_pthread_chdir_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pthread_chdir_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pthread_chdir_np pthread_chdir_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pthread_fchdir_np(fd int) (err error) { + _, _, e1 := syscall_syscall(libc_pthread_fchdir_np_trampoline_addr, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pthread_fchdir_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pthread_fchdir_np pthread_fchdir_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index 08362c1ab..057700111 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -228,6 +228,16 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) +TEXT libc_pthread_chdir_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pthread_chdir_np(SB) +GLOBL ·libc_pthread_chdir_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pthread_chdir_np_trampoline_addr(SB)/8, $libc_pthread_chdir_np_trampoline<>(SB) + +TEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pthread_fchdir_np(SB) +GLOBL ·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB) + TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go index 6f7d2ac70..97651b5bd 100644 --- a/vendor/golang.org/x/sys/windows/security_windows.go +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -894,7 +894,7 @@ type ACL struct { aclRevision byte sbz1 byte aclSize uint16 - aceCount uint16 + AceCount uint16 sbz2 uint16 } @@ -1087,6 +1087,27 @@ type EXPLICIT_ACCESS struct { Trustee TRUSTEE } +// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-ace_header +type ACE_HEADER struct { + AceType uint8 + AceFlags uint8 + AceSize uint16 +} + +// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-access_allowed_ace +type ACCESS_ALLOWED_ACE struct { + Header ACE_HEADER + Mask ACCESS_MASK + SidStart uint32 +} + +const ( + // Constants for AceType + // https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-ace_header + ACCESS_ALLOWED_ACE_TYPE = 0 + ACCESS_DENIED_ACE_TYPE = 1 +) + // This type is the union inside of TRUSTEE and must be created using one of the TrusteeValueFrom* functions. type TrusteeValue uintptr @@ -1158,6 +1179,7 @@ type OBJECTS_AND_NAME struct { //sys makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) = advapi32.MakeSelfRelativeSD //sys setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) = advapi32.SetEntriesInAclW +//sys GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (ret error) = advapi32.GetAce // Control returns the security descriptor control bits. func (sd *SECURITY_DESCRIPTOR) Control() (control SECURITY_DESCRIPTOR_CONTROL, revision uint32, err error) { diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 9f73df75b..eba761018 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -91,6 +91,7 @@ var ( procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW") procEqualSid = modadvapi32.NewProc("EqualSid") procFreeSid = modadvapi32.NewProc("FreeSid") + procGetAce = modadvapi32.NewProc("GetAce") procGetLengthSid = modadvapi32.NewProc("GetLengthSid") procGetNamedSecurityInfoW = modadvapi32.NewProc("GetNamedSecurityInfoW") procGetSecurityDescriptorControl = modadvapi32.NewProc("GetSecurityDescriptorControl") @@ -1224,6 +1225,14 @@ func setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCE return } +func GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (ret error) { + r0, _, _ := syscall.Syscall(procGetAce.Addr(), 3, uintptr(unsafe.Pointer(acl)), uintptr(aceIndex), uintptr(unsafe.Pointer(pAce))) + if r0 == 0 { + ret = GetLastError() + } + return +} + func SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) { r1, _, e1 := syscall.Syscall(procSetKernelObjectSecurity.Addr(), 3, uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor))) if r1 == 0 { diff --git a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/checked.pb.go b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/checked.pb.go index 137ff5b1e..9f81dbcd8 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/checked.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/checked.pb.go @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/eval.pb.go b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/eval.pb.go index ca4415956..0a2ffb595 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/eval.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/eval.pb.go @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/explain.pb.go b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/explain.pb.go index 3f994b4e3..57aaa2c9f 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/explain.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/explain.pb.go @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/syntax.pb.go b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/syntax.pb.go index 0d718fc36..6b867a46e 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/syntax.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/syntax.pb.go @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/value.pb.go b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/value.pb.go index 033f23868..0a5ca6a1b 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/value.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/value.pb.go @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go b/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go index 3543268f8..e7d3805e3 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.21.9 +// protoc v4.24.4 // source: google/api/httpbody.proto package httpbody diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go index 7bd161e48..3e5621827 100644 --- a/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go @@ -1,4 +1,4 @@ -// Copyright 2022 Google LLC +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.21.9 +// protoc v4.24.4 // source: google/rpc/error_details.proto package errdetails diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go index a6b508188..6ad1b1c1d 100644 --- a/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go @@ -1,4 +1,4 @@ -// Copyright 2022 Google LLC +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.21.9 +// protoc v4.24.4 // source: google/rpc/status.proto package status diff --git a/vendor/google.golang.org/grpc/README.md b/vendor/google.golang.org/grpc/README.md index ab0fbb79b..b572707c6 100644 --- a/vendor/google.golang.org/grpc/README.md +++ b/vendor/google.golang.org/grpc/README.md @@ -10,7 +10,7 @@ RPC framework that puts mobile and HTTP/2 first. For more information see the ## Prerequisites -- **[Go][]**: any one of the **three latest major** [releases][go-releases]. +- **[Go][]**: any one of the **two latest major** [releases][go-releases]. ## Installation diff --git a/vendor/google.golang.org/grpc/pickfirst.go b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go similarity index 89% rename from vendor/google.golang.org/grpc/pickfirst.go rename to vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go index 885362661..07527603f 100644 --- a/vendor/google.golang.org/grpc/pickfirst.go +++ b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go @@ -16,26 +16,36 @@ * */ -package grpc +// Package pickfirst contains the pick_first load balancing policy. +package pickfirst import ( "encoding/json" "errors" "fmt" + "math/rand" "google.golang.org/grpc/balancer" "google.golang.org/grpc/connectivity" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/internal" internalgrpclog "google.golang.org/grpc/internal/grpclog" - "google.golang.org/grpc/internal/grpcrand" "google.golang.org/grpc/internal/pretty" "google.golang.org/grpc/resolver" "google.golang.org/grpc/serviceconfig" ) +func init() { + balancer.Register(pickfirstBuilder{}) + internal.ShuffleAddressListForTesting = func(n int, swap func(i, j int)) { rand.Shuffle(n, swap) } +} + +var logger = grpclog.Component("pick-first-lb") + const ( - // PickFirstBalancerName is the name of the pick_first balancer. - PickFirstBalancerName = "pick_first" - logPrefix = "[pick-first-lb %p] " + // Name is the name of the pick_first balancer. + Name = "pick_first" + logPrefix = "[pick-first-lb %p] " ) type pickfirstBuilder struct{} @@ -47,7 +57,7 @@ func (pickfirstBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) } func (pickfirstBuilder) Name() string { - return PickFirstBalancerName + return Name } type pfConfig struct { @@ -93,6 +103,12 @@ func (b *pickfirstBalancer) ResolverError(err error) { }) } +type Shuffler interface { + ShuffleAddressListForTesting(n int, swap func(i, j int)) +} + +func ShuffleAddressListForTesting(n int, swap func(i, j int)) { rand.Shuffle(n, swap) } + func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState) error { if len(state.ResolverState.Addresses) == 0 && len(state.ResolverState.Endpoints) == 0 { // The resolver reported an empty address list. Treat it like an error by @@ -124,7 +140,7 @@ func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState // within each endpoint. - A61 if cfg.ShuffleAddressList { endpoints = append([]resolver.Endpoint{}, endpoints...) - grpcrand.Shuffle(len(endpoints), func(i, j int) { endpoints[i], endpoints[j] = endpoints[j], endpoints[i] }) + internal.ShuffleAddressListForTesting.(func(int, func(int, int)))(len(endpoints), func(i, j int) { endpoints[i], endpoints[j] = endpoints[j], endpoints[i] }) } // "Flatten the list by concatenating the ordered list of addresses for each @@ -145,7 +161,7 @@ func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState addrs = state.ResolverState.Addresses if cfg.ShuffleAddressList { addrs = append([]resolver.Address{}, addrs...) - grpcrand.Shuffle(len(addrs), func(i, j int) { addrs[i], addrs[j] = addrs[j], addrs[i] }) + rand.Shuffle(len(addrs), func(i, j int) { addrs[i], addrs[j] = addrs[j], addrs[i] }) } } diff --git a/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go b/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go index f7031ad22..260255d31 100644 --- a/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go +++ b/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go @@ -22,12 +22,12 @@ package roundrobin import ( + "math/rand" "sync/atomic" "google.golang.org/grpc/balancer" "google.golang.org/grpc/balancer/base" "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/internal/grpcrand" ) // Name is the name of round_robin balancer. @@ -60,7 +60,7 @@ func (*rrPickerBuilder) Build(info base.PickerBuildInfo) balancer.Picker { // Start at a random index, as the same RR balancer rebuilds a new // picker when SubConn states change, and we don't want to apply excess // load to the first server in the list. - next: uint32(grpcrand.Intn(len(scs))), + next: uint32(rand.Intn(len(scs))), } } diff --git a/vendor/google.golang.org/grpc/balancer_wrapper.go b/vendor/google.golang.org/grpc/balancer_wrapper.go index af39b8a4c..4161fdf47 100644 --- a/vendor/google.golang.org/grpc/balancer_wrapper.go +++ b/vendor/google.golang.org/grpc/balancer_wrapper.go @@ -198,6 +198,10 @@ func (ccb *ccBalancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resol func (ccb *ccBalancerWrapper) UpdateState(s balancer.State) { ccb.cc.mu.Lock() defer ccb.cc.mu.Unlock() + if ccb.cc.conns == nil { + // The CC has been closed; ignore this update. + return + } ccb.mu.Lock() if ccb.closed { diff --git a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go index 1afb1e84a..63c639e4f 100644 --- a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go +++ b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.33.0 +// protoc-gen-go v1.34.1 // protoc v4.25.2 // source: grpc/binlog/v1/binarylog.proto diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go index 2359f94b8..423be7b43 100644 --- a/vendor/google.golang.org/grpc/clientconn.go +++ b/vendor/google.golang.org/grpc/clientconn.go @@ -31,6 +31,7 @@ import ( "google.golang.org/grpc/balancer" "google.golang.org/grpc/balancer/base" + "google.golang.org/grpc/balancer/pickfirst" "google.golang.org/grpc/codes" "google.golang.org/grpc/connectivity" "google.golang.org/grpc/internal" @@ -72,6 +73,8 @@ var ( // invalidDefaultServiceConfigErrPrefix is used to prefix the json parsing error for the default // service config. invalidDefaultServiceConfigErrPrefix = "grpc: the provided default service config is invalid" + // PickFirstBalancerName is the name of the pick_first balancer. + PickFirstBalancerName = pickfirst.Name ) // The following errors are returned from Dial and DialContext @@ -152,6 +155,16 @@ func NewClient(target string, opts ...DialOption) (conn *ClientConn, err error) for _, opt := range opts { opt.apply(&cc.dopts) } + + // Determine the resolver to use. + if err := cc.initParsedTargetAndResolverBuilder(); err != nil { + return nil, err + } + + for _, opt := range globalPerTargetDialOptions { + opt.DialOptionForTarget(cc.parsedTarget.URL).apply(&cc.dopts) + } + chainUnaryClientInterceptors(cc) chainStreamClientInterceptors(cc) @@ -160,7 +173,7 @@ func NewClient(target string, opts ...DialOption) (conn *ClientConn, err error) } if cc.dopts.defaultServiceConfigRawJSON != nil { - scpr := parseServiceConfig(*cc.dopts.defaultServiceConfigRawJSON) + scpr := parseServiceConfig(*cc.dopts.defaultServiceConfigRawJSON, cc.dopts.maxCallAttempts) if scpr.Err != nil { return nil, fmt.Errorf("%s: %v", invalidDefaultServiceConfigErrPrefix, scpr.Err) } @@ -168,25 +181,16 @@ func NewClient(target string, opts ...DialOption) (conn *ClientConn, err error) } cc.mkp = cc.dopts.copts.KeepaliveParams - // Register ClientConn with channelz. - cc.channelzRegistration(target) - - // TODO: Ideally it should be impossible to error from this function after - // channelz registration. This will require removing some channelz logs - // from the following functions that can error. Errors can be returned to - // the user, and successful logs can be emitted here, after the checks have - // passed and channelz is subsequently registered. - - // Determine the resolver to use. - if err := cc.parseTargetAndFindResolver(); err != nil { - channelz.RemoveEntry(cc.channelz.ID) - return nil, err - } - if err = cc.determineAuthority(); err != nil { - channelz.RemoveEntry(cc.channelz.ID) + if err = cc.initAuthority(); err != nil { return nil, err } + // Register ClientConn with channelz. Note that this is only done after + // channel creation cannot fail. + cc.channelzRegistration(target) + channelz.Infof(logger, cc.channelz, "parsed dial target is: %#v", cc.parsedTarget) + channelz.Infof(logger, cc.channelz, "Channel authority set to %q", cc.authority) + cc.csMgr = newConnectivityStateManager(cc.ctx, cc.channelz) cc.pickerWrapper = newPickerWrapper(cc.dopts.copts.StatsHandlers) @@ -587,11 +591,11 @@ type ClientConn struct { // The following are initialized at dial time, and are read-only after that. target string // User's dial target. - parsedTarget resolver.Target // See parseTargetAndFindResolver(). - authority string // See determineAuthority(). + parsedTarget resolver.Target // See initParsedTargetAndResolverBuilder(). + authority string // See initAuthority(). dopts dialOptions // Default and user specified dial options. channelz *channelz.Channel // Channelz object. - resolverBuilder resolver.Builder // See parseTargetAndFindResolver(). + resolverBuilder resolver.Builder // See initParsedTargetAndResolverBuilder(). idlenessMgr *idle.Manager // The following provide their own synchronization, and therefore don't @@ -692,8 +696,7 @@ func (cc *ClientConn) waitForResolvedAddrs(ctx context.Context) error { var emptyServiceConfig *ServiceConfig func init() { - balancer.Register(pickfirstBuilder{}) - cfg := parseServiceConfig("{}") + cfg := parseServiceConfig("{}", defaultMaxCallAttempts) if cfg.Err != nil { panic(fmt.Sprintf("impossible error parsing empty service config: %v", cfg.Err)) } @@ -1673,22 +1676,19 @@ func (cc *ClientConn) connectionError() error { return cc.lastConnectionError } -// parseTargetAndFindResolver parses the user's dial target and stores the -// parsed target in `cc.parsedTarget`. +// initParsedTargetAndResolverBuilder parses the user's dial target and stores +// the parsed target in `cc.parsedTarget`. // // The resolver to use is determined based on the scheme in the parsed target // and the same is stored in `cc.resolverBuilder`. // // Doesn't grab cc.mu as this method is expected to be called only at Dial time. -func (cc *ClientConn) parseTargetAndFindResolver() error { - channelz.Infof(logger, cc.channelz, "original dial target is: %q", cc.target) +func (cc *ClientConn) initParsedTargetAndResolverBuilder() error { + logger.Infof("original dial target is: %q", cc.target) var rb resolver.Builder parsedTarget, err := parseTarget(cc.target) - if err != nil { - channelz.Infof(logger, cc.channelz, "dial target %q parse failed: %v", cc.target, err) - } else { - channelz.Infof(logger, cc.channelz, "parsed dial target is: %#v", parsedTarget) + if err == nil { rb = cc.getResolver(parsedTarget.URL.Scheme) if rb != nil { cc.parsedTarget = parsedTarget @@ -1707,15 +1707,12 @@ func (cc *ClientConn) parseTargetAndFindResolver() error { defScheme = resolver.GetDefaultScheme() } - channelz.Infof(logger, cc.channelz, "fallback to scheme %q", defScheme) canonicalTarget := defScheme + ":///" + cc.target parsedTarget, err = parseTarget(canonicalTarget) if err != nil { - channelz.Infof(logger, cc.channelz, "dial target %q parse failed: %v", canonicalTarget, err) return err } - channelz.Infof(logger, cc.channelz, "parsed dial target is: %+v", parsedTarget) rb = cc.getResolver(parsedTarget.URL.Scheme) if rb == nil { return fmt.Errorf("could not get resolver for default scheme: %q", parsedTarget.URL.Scheme) @@ -1805,7 +1802,7 @@ func encodeAuthority(authority string) string { // credentials do not match the authority configured through the dial option. // // Doesn't grab cc.mu as this method is expected to be called only at Dial time. -func (cc *ClientConn) determineAuthority() error { +func (cc *ClientConn) initAuthority() error { dopts := cc.dopts // Historically, we had two options for users to specify the serverName or // authority for a channel. One was through the transport credentials @@ -1838,6 +1835,5 @@ func (cc *ClientConn) determineAuthority() error { } else { cc.authority = encodeAuthority(endpoint) } - channelz.Infof(logger, cc.channelz, "Channel authority set to %q", cc.authority) return nil } diff --git a/vendor/google.golang.org/grpc/credentials/tls.go b/vendor/google.golang.org/grpc/credentials/tls.go index 5dafd34ed..411435854 100644 --- a/vendor/google.golang.org/grpc/credentials/tls.go +++ b/vendor/google.golang.org/grpc/credentials/tls.go @@ -27,9 +27,13 @@ import ( "net/url" "os" + "google.golang.org/grpc/grpclog" credinternal "google.golang.org/grpc/internal/credentials" + "google.golang.org/grpc/internal/envconfig" ) +var logger = grpclog.Component("credentials") + // TLSInfo contains the auth information for a TLS authenticated connection. // It implements the AuthInfo interface. type TLSInfo struct { @@ -112,6 +116,22 @@ func (c *tlsCreds) ClientHandshake(ctx context.Context, authority string, rawCon conn.Close() return nil, nil, ctx.Err() } + + // The negotiated protocol can be either of the following: + // 1. h2: When the server supports ALPN. Only HTTP/2 can be negotiated since + // it is the only protocol advertised by the client during the handshake. + // The tls library ensures that the server chooses a protocol advertised + // by the client. + // 2. "" (empty string): If the server doesn't support ALPN. ALPN is a requirement + // for using HTTP/2 over TLS. We can terminate the connection immediately. + np := conn.ConnectionState().NegotiatedProtocol + if np == "" { + if envconfig.EnforceALPNEnabled { + conn.Close() + return nil, nil, fmt.Errorf("credentials: cannot check peer: missing selected ALPN property") + } + logger.Warningf("Allowing TLS connection to server %q with ALPN disabled. TLS connections to servers with ALPN disabled will be disallowed in future grpc-go releases", cfg.ServerName) + } tlsInfo := TLSInfo{ State: conn.ConnectionState(), CommonAuthInfo: CommonAuthInfo{ @@ -131,8 +151,20 @@ func (c *tlsCreds) ServerHandshake(rawConn net.Conn) (net.Conn, AuthInfo, error) conn.Close() return nil, nil, err } + cs := conn.ConnectionState() + // The negotiated application protocol can be empty only if the client doesn't + // support ALPN. In such cases, we can close the connection since ALPN is required + // for using HTTP/2 over TLS. + if cs.NegotiatedProtocol == "" { + if envconfig.EnforceALPNEnabled { + conn.Close() + return nil, nil, fmt.Errorf("credentials: cannot check peer: missing selected ALPN property") + } else if logger.V(2) { + logger.Info("Allowing TLS connection from client with ALPN disabled. TLS connections with ALPN disabled will be disallowed in future grpc-go releases") + } + } tlsInfo := TLSInfo{ - State: conn.ConnectionState(), + State: cs, CommonAuthInfo: CommonAuthInfo{ SecurityLevel: PrivacyAndIntegrity, }, diff --git a/vendor/google.golang.org/grpc/dialoptions.go b/vendor/google.golang.org/grpc/dialoptions.go index 00273702b..f5453d48a 100644 --- a/vendor/google.golang.org/grpc/dialoptions.go +++ b/vendor/google.golang.org/grpc/dialoptions.go @@ -21,6 +21,7 @@ package grpc import ( "context" "net" + "net/url" "time" "google.golang.org/grpc/backoff" @@ -36,6 +37,11 @@ import ( "google.golang.org/grpc/stats" ) +const ( + // https://github.com/grpc/proposal/blob/master/A6-client-retries.md#limits-on-retries-and-hedges + defaultMaxCallAttempts = 5 +) + func init() { internal.AddGlobalDialOptions = func(opt ...DialOption) { globalDialOptions = append(globalDialOptions, opt...) @@ -43,6 +49,14 @@ func init() { internal.ClearGlobalDialOptions = func() { globalDialOptions = nil } + internal.AddGlobalPerTargetDialOptions = func(opt any) { + if ptdo, ok := opt.(perTargetDialOption); ok { + globalPerTargetDialOptions = append(globalPerTargetDialOptions, ptdo) + } + } + internal.ClearGlobalPerTargetDialOptions = func() { + globalPerTargetDialOptions = nil + } internal.WithBinaryLogger = withBinaryLogger internal.JoinDialOptions = newJoinDialOption internal.DisableGlobalDialOptions = newDisableGlobalDialOptions @@ -80,6 +94,7 @@ type dialOptions struct { idleTimeout time.Duration recvBufferPool SharedBufferPool defaultScheme string + maxCallAttempts int } // DialOption configures how we set up the connection. @@ -89,6 +104,19 @@ type DialOption interface { var globalDialOptions []DialOption +// perTargetDialOption takes a parsed target and returns a dial option to apply. +// +// This gets called after NewClient() parses the target, and allows per target +// configuration set through a returned DialOption. The DialOption will not take +// effect if specifies a resolver builder, as that Dial Option is factored in +// while parsing target. +type perTargetDialOption interface { + // DialOption returns a Dial Option to apply. + DialOptionForTarget(parsedTarget url.URL) DialOption +} + +var globalPerTargetDialOptions []perTargetDialOption + // EmptyDialOption does not alter the dial configuration. It can be embedded in // another structure to build custom dial options. // @@ -655,6 +683,7 @@ func defaultDialOptions() dialOptions { idleTimeout: 30 * time.Minute, recvBufferPool: nopBufferPool{}, defaultScheme: "dns", + maxCallAttempts: defaultMaxCallAttempts, } } @@ -712,6 +741,23 @@ func WithIdleTimeout(d time.Duration) DialOption { }) } +// WithMaxCallAttempts returns a DialOption that configures the maximum number +// of attempts per call (including retries and hedging) using the channel. +// Service owners may specify a higher value for these parameters, but higher +// values will be treated as equal to the maximum value by the client +// implementation. This mitigates security concerns related to the service +// config being transferred to the client via DNS. +// +// A value of 5 will be used if this dial option is not set or n < 2. +func WithMaxCallAttempts(n int) DialOption { + return newFuncDialOption(func(o *dialOptions) { + if n < 2 { + n = defaultMaxCallAttempts + } + o.maxCallAttempts = n + }) +} + // WithRecvBufferPool returns a DialOption that configures the ClientConn // to use the provided shared buffer pool for parsing incoming messages. Depending // on the application's workload, this could result in reduced memory allocation. diff --git a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go index 6a93475a7..38b883507 100644 --- a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go +++ b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.33.0 +// protoc-gen-go v1.34.1 // protoc v4.25.2 // source: grpc/health/v1/health.proto diff --git a/vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go b/vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go index 8f793e6e8..51b736ba0 100644 --- a/vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go +++ b/vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.3.0 +// - protoc-gen-go-grpc v1.4.0 // - protoc v4.25.2 // source: grpc/health/v1/health.proto @@ -43,6 +43,10 @@ const ( // HealthClient is the client API for Health service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +// +// Health is gRPC's mechanism for checking whether a server is able to handle +// RPCs. Its semantics are documented in +// https://github.com/grpc/grpc/blob/master/doc/health-checking.md. type HealthClient interface { // Check gets the health of the specified service. If the requested service // is unknown, the call will fail with status NOT_FOUND. If the caller does @@ -126,6 +130,10 @@ func (x *healthWatchClient) Recv() (*HealthCheckResponse, error) { // HealthServer is the server API for Health service. // All implementations should embed UnimplementedHealthServer // for forward compatibility +// +// Health is gRPC's mechanism for checking whether a server is able to handle +// RPCs. Its semantics are documented in +// https://github.com/grpc/grpc/blob/master/doc/health-checking.md. type HealthServer interface { // Check gets the health of the specified service. If the requested service // is unknown, the call will fail with status NOT_FOUND. If the caller does diff --git a/vendor/google.golang.org/grpc/internal/backoff/backoff.go b/vendor/google.golang.org/grpc/internal/backoff/backoff.go index fed1c011a..b15cf482d 100644 --- a/vendor/google.golang.org/grpc/internal/backoff/backoff.go +++ b/vendor/google.golang.org/grpc/internal/backoff/backoff.go @@ -25,10 +25,10 @@ package backoff import ( "context" "errors" + "math/rand" "time" grpcbackoff "google.golang.org/grpc/backoff" - "google.golang.org/grpc/internal/grpcrand" ) // Strategy defines the methodology for backing off after a grpc connection @@ -67,7 +67,7 @@ func (bc Exponential) Backoff(retries int) time.Duration { } // Randomize backoff delays so that if a cluster of requests start at // the same time, they won't operate in lockstep. - backoff *= 1 + bc.Config.Jitter*(grpcrand.Float64()*2-1) + backoff *= 1 + bc.Config.Jitter*(rand.Float64()*2-1) if backoff < 0 { return 0 } diff --git a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go index 9c915d9e4..d90648713 100644 --- a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go +++ b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go @@ -40,6 +40,12 @@ var ( // ALTSMaxConcurrentHandshakes is the maximum number of concurrent ALTS // handshakes that can be performed. ALTSMaxConcurrentHandshakes = uint64FromEnv("GRPC_ALTS_MAX_CONCURRENT_HANDSHAKES", 100, 1, 100) + // EnforceALPNEnabled is set if TLS connections to servers with ALPN disabled + // should be rejected. The HTTP/2 protocol requires ALPN to be enabled, this + // option is present for backward compatibility. This option may be overridden + // by setting the environment variable "GRPC_ENFORCE_ALPN_ENABLED" to "true" + // or "false". + EnforceALPNEnabled = boolFromEnv("GRPC_ENFORCE_ALPN_ENABLED", false) ) func boolFromEnv(envVar string, def bool) bool { diff --git a/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go b/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go deleted file mode 100644 index 0126d6b51..000000000 --- a/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go +++ /dev/null @@ -1,100 +0,0 @@ -//go:build !go1.21 - -// TODO: when this file is deleted (after Go 1.20 support is dropped), delete -// all of grpcrand and call the rand package directly. - -/* - * - * Copyright 2018 gRPC 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 grpcrand implements math/rand functions in a concurrent-safe way -// with a global random source, independent of math/rand's global source. -package grpcrand - -import ( - "math/rand" - "sync" - "time" -) - -var ( - r = rand.New(rand.NewSource(time.Now().UnixNano())) - mu sync.Mutex -) - -// Int implements rand.Int on the grpcrand global source. -func Int() int { - mu.Lock() - defer mu.Unlock() - return r.Int() -} - -// Int63n implements rand.Int63n on the grpcrand global source. -func Int63n(n int64) int64 { - mu.Lock() - defer mu.Unlock() - return r.Int63n(n) -} - -// Intn implements rand.Intn on the grpcrand global source. -func Intn(n int) int { - mu.Lock() - defer mu.Unlock() - return r.Intn(n) -} - -// Int31n implements rand.Int31n on the grpcrand global source. -func Int31n(n int32) int32 { - mu.Lock() - defer mu.Unlock() - return r.Int31n(n) -} - -// Float64 implements rand.Float64 on the grpcrand global source. -func Float64() float64 { - mu.Lock() - defer mu.Unlock() - return r.Float64() -} - -// Uint64 implements rand.Uint64 on the grpcrand global source. -func Uint64() uint64 { - mu.Lock() - defer mu.Unlock() - return r.Uint64() -} - -// Uint32 implements rand.Uint32 on the grpcrand global source. -func Uint32() uint32 { - mu.Lock() - defer mu.Unlock() - return r.Uint32() -} - -// ExpFloat64 implements rand.ExpFloat64 on the grpcrand global source. -func ExpFloat64() float64 { - mu.Lock() - defer mu.Unlock() - return r.ExpFloat64() -} - -// Shuffle implements rand.Shuffle on the grpcrand global source. -var Shuffle = func(n int, f func(int, int)) { - mu.Lock() - defer mu.Unlock() - r.Shuffle(n, f) -} diff --git a/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand_go1.21.go b/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand_go1.21.go deleted file mode 100644 index c37299af1..000000000 --- a/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand_go1.21.go +++ /dev/null @@ -1,73 +0,0 @@ -//go:build go1.21 - -/* - * - * Copyright 2024 gRPC 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 grpcrand implements math/rand functions in a concurrent-safe way -// with a global random source, independent of math/rand's global source. -package grpcrand - -import "math/rand" - -// This implementation will be used for Go version 1.21 or newer. -// For older versions, the original implementation with mutex will be used. - -// Int implements rand.Int on the grpcrand global source. -func Int() int { - return rand.Int() -} - -// Int63n implements rand.Int63n on the grpcrand global source. -func Int63n(n int64) int64 { - return rand.Int63n(n) -} - -// Intn implements rand.Intn on the grpcrand global source. -func Intn(n int) int { - return rand.Intn(n) -} - -// Int31n implements rand.Int31n on the grpcrand global source. -func Int31n(n int32) int32 { - return rand.Int31n(n) -} - -// Float64 implements rand.Float64 on the grpcrand global source. -func Float64() float64 { - return rand.Float64() -} - -// Uint64 implements rand.Uint64 on the grpcrand global source. -func Uint64() uint64 { - return rand.Uint64() -} - -// Uint32 implements rand.Uint32 on the grpcrand global source. -func Uint32() uint32 { - return rand.Uint32() -} - -// ExpFloat64 implements rand.ExpFloat64 on the grpcrand global source. -func ExpFloat64() float64 { - return rand.ExpFloat64() -} - -// Shuffle implements rand.Shuffle on the grpcrand global source. -var Shuffle = func(n int, f func(int, int)) { - rand.Shuffle(n, f) -} diff --git a/vendor/google.golang.org/grpc/internal/internal.go b/vendor/google.golang.org/grpc/internal/internal.go index 48d24bdb4..5d6653986 100644 --- a/vendor/google.golang.org/grpc/internal/internal.go +++ b/vendor/google.golang.org/grpc/internal/internal.go @@ -106,6 +106,14 @@ var ( // This is used in the 1.0 release of gcp/observability, and thus must not be // deleted or changed. ClearGlobalDialOptions func() + + // AddGlobalPerTargetDialOptions adds a PerTargetDialOption that will be + // configured for newly created ClientConns. + AddGlobalPerTargetDialOptions any // func (opt any) + // ClearGlobalPerTargetDialOptions clears the slice of global late apply + // dial options. + ClearGlobalPerTargetDialOptions func() + // JoinDialOptions combines the dial options passed as arguments into a // single dial option. JoinDialOptions any // func(...grpc.DialOption) grpc.DialOption @@ -126,7 +134,8 @@ var ( // deleted or changed. BinaryLogger any // func(binarylog.Logger) grpc.ServerOption - // SubscribeToConnectivityStateChanges adds a grpcsync.Subscriber to a provided grpc.ClientConn + // SubscribeToConnectivityStateChanges adds a grpcsync.Subscriber to a + // provided grpc.ClientConn. SubscribeToConnectivityStateChanges any // func(*grpc.ClientConn, grpcsync.Subscriber) // NewXDSResolverWithConfigForTesting creates a new xds resolver builder using @@ -184,25 +193,25 @@ var ( ChannelzTurnOffForTesting func() - // TriggerXDSResourceNameNotFoundForTesting triggers the resource-not-found - // error for a given resource type and name. This is usually triggered when - // the associated watch timer fires. For testing purposes, having this - // function makes events more predictable than relying on timer events. - TriggerXDSResourceNameNotFoundForTesting any // func(func(xdsresource.Type, string), string, string) error + // TriggerXDSResourceNotFoundForTesting causes the provided xDS Client to + // invoke resource-not-found error for the given resource type and name. + TriggerXDSResourceNotFoundForTesting any // func(xdsclient.XDSClient, xdsresource.Type, string) error - // TriggerXDSResourceNameNotFoundClient invokes the testing xDS Client - // singleton to invoke resource not found for a resource type name and - // resource name. - TriggerXDSResourceNameNotFoundClient any // func(string, string) error - - // FromOutgoingContextRaw returns the un-merged, intermediary contents of metadata.rawMD. + // FromOutgoingContextRaw returns the un-merged, intermediary contents of + // metadata.rawMD. FromOutgoingContextRaw any // func(context.Context) (metadata.MD, [][]string, bool) - // UserSetDefaultScheme is set to true if the user has overridden the default resolver scheme. + // UserSetDefaultScheme is set to true if the user has overridden the + // default resolver scheme. UserSetDefaultScheme bool = false + + // ShuffleAddressListForTesting pseudo-randomizes the order of addresses. n + // is the number of elements. swap swaps the elements with indexes i and j. + ShuffleAddressListForTesting any // func(n int, swap func(i, j int)) ) -// HealthChecker defines the signature of the client-side LB channel health checking function. +// HealthChecker defines the signature of the client-side LB channel health +// checking function. // // The implementation is expected to create a health checking RPC stream by // calling newStream(), watch for the health status of serviceName, and report diff --git a/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go b/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go index f3f52a59a..4552db16b 100644 --- a/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go +++ b/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go @@ -24,6 +24,7 @@ import ( "context" "encoding/json" "fmt" + "math/rand" "net" "os" "strconv" @@ -35,7 +36,6 @@ import ( "google.golang.org/grpc/grpclog" "google.golang.org/grpc/internal/backoff" "google.golang.org/grpc/internal/envconfig" - "google.golang.org/grpc/internal/grpcrand" "google.golang.org/grpc/internal/resolver/dns/internal" "google.golang.org/grpc/resolver" "google.golang.org/grpc/serviceconfig" @@ -63,6 +63,8 @@ var ( func init() { resolver.Register(NewBuilder()) internal.TimeAfterFunc = time.After + internal.TimeNowFunc = time.Now + internal.TimeUntilFunc = time.Until internal.NewNetResolver = newNetResolver internal.AddressDialer = addressDialer } @@ -209,12 +211,12 @@ func (d *dnsResolver) watcher() { err = d.cc.UpdateState(*state) } - var waitTime time.Duration + var nextResolutionTime time.Time if err == nil { // Success resolving, wait for the next ResolveNow. However, also wait 30 // seconds at the very least to prevent constantly re-resolving. backoffIndex = 1 - waitTime = MinResolutionInterval + nextResolutionTime = internal.TimeNowFunc().Add(MinResolutionInterval) select { case <-d.ctx.Done(): return @@ -223,13 +225,13 @@ func (d *dnsResolver) watcher() { } else { // Poll on an error found in DNS Resolver or an error received from // ClientConn. - waitTime = backoff.DefaultExponential.Backoff(backoffIndex) + nextResolutionTime = internal.TimeNowFunc().Add(backoff.DefaultExponential.Backoff(backoffIndex)) backoffIndex++ } select { case <-d.ctx.Done(): return - case <-internal.TimeAfterFunc(waitTime): + case <-internal.TimeAfterFunc(internal.TimeUntilFunc(nextResolutionTime)): } } } @@ -423,7 +425,7 @@ func chosenByPercentage(a *int) bool { if a == nil { return true } - return grpcrand.Intn(100)+1 <= *a + return rand.Intn(100)+1 <= *a } func canaryingSC(js string) string { diff --git a/vendor/google.golang.org/grpc/internal/resolver/dns/internal/internal.go b/vendor/google.golang.org/grpc/internal/resolver/dns/internal/internal.go index a7ecaf8d5..c0eae4f5f 100644 --- a/vendor/google.golang.org/grpc/internal/resolver/dns/internal/internal.go +++ b/vendor/google.golang.org/grpc/internal/resolver/dns/internal/internal.go @@ -51,11 +51,22 @@ var ( // The following vars are overridden from tests. var ( // TimeAfterFunc is used by the DNS resolver to wait for the given duration - // to elapse. In non-test code, this is implemented by time.After. In test + // to elapse. In non-test code, this is implemented by time.After. In test // code, this can be used to control the amount of time the resolver is // blocked waiting for the duration to elapse. TimeAfterFunc func(time.Duration) <-chan time.Time + // TimeNowFunc is used by the DNS resolver to get the current time. + // In non-test code, this is implemented by time.Now. In test code, + // this can be used to control the current time for the resolver. + TimeNowFunc func() time.Time + + // TimeUntilFunc is used by the DNS resolver to calculate the remaining + // wait time for re-resolution. In non-test code, this is implemented by + // time.Until. In test code, this can be used to control the remaining + // time for resolver to wait for re-resolution. + TimeUntilFunc func(time.Time) time.Duration + // NewNetResolver returns the net.Resolver instance for the given target. NewNetResolver func(string) (NetResolver, error) diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_server.go b/vendor/google.golang.org/grpc/internal/transport/http2_server.go index cab0e2d3d..b7091165b 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_server.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_server.go @@ -25,6 +25,7 @@ import ( "fmt" "io" "math" + "math/rand" "net" "net/http" "strconv" @@ -43,7 +44,6 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" "google.golang.org/grpc/internal/channelz" - "google.golang.org/grpc/internal/grpcrand" "google.golang.org/grpc/internal/grpcsync" "google.golang.org/grpc/keepalive" "google.golang.org/grpc/metadata" @@ -1440,7 +1440,7 @@ func getJitter(v time.Duration) time.Duration { } // Generate a jitter between +/- 10% of the value. r := int64(v / 10) - j := grpcrand.Int63n(2*r) - r + j := rand.Int63n(2*r) - r return time.Duration(j) } diff --git a/vendor/google.golang.org/grpc/picker_wrapper.go b/vendor/google.golang.org/grpc/picker_wrapper.go index 56e8aba78..bdaa2130e 100644 --- a/vendor/google.golang.org/grpc/picker_wrapper.go +++ b/vendor/google.golang.org/grpc/picker_wrapper.go @@ -22,7 +22,7 @@ import ( "context" "fmt" "io" - "sync" + "sync/atomic" "google.golang.org/grpc/balancer" "google.golang.org/grpc/codes" @@ -33,35 +33,43 @@ import ( "google.golang.org/grpc/status" ) +// pickerGeneration stores a picker and a channel used to signal that a picker +// newer than this one is available. +type pickerGeneration struct { + // picker is the picker produced by the LB policy. May be nil if a picker + // has never been produced. + picker balancer.Picker + // blockingCh is closed when the picker has been invalidated because there + // is a new one available. + blockingCh chan struct{} +} + // pickerWrapper is a wrapper of balancer.Picker. It blocks on certain pick // actions and unblock when there's a picker update. type pickerWrapper struct { - mu sync.Mutex - done bool - blockingCh chan struct{} - picker balancer.Picker + // If pickerGen holds a nil pointer, the pickerWrapper is closed. + pickerGen atomic.Pointer[pickerGeneration] statsHandlers []stats.Handler // to record blocking picker calls } func newPickerWrapper(statsHandlers []stats.Handler) *pickerWrapper { - return &pickerWrapper{ - blockingCh: make(chan struct{}), + pw := &pickerWrapper{ statsHandlers: statsHandlers, } + pw.pickerGen.Store(&pickerGeneration{ + blockingCh: make(chan struct{}), + }) + return pw } -// updatePicker is called by UpdateBalancerState. It unblocks all blocked pick. +// updatePicker is called by UpdateState calls from the LB policy. It +// unblocks all blocked pick. func (pw *pickerWrapper) updatePicker(p balancer.Picker) { - pw.mu.Lock() - if pw.done { - pw.mu.Unlock() - return - } - pw.picker = p - // pw.blockingCh should never be nil. - close(pw.blockingCh) - pw.blockingCh = make(chan struct{}) - pw.mu.Unlock() + old := pw.pickerGen.Swap(&pickerGeneration{ + picker: p, + blockingCh: make(chan struct{}), + }) + close(old.blockingCh) } // doneChannelzWrapper performs the following: @@ -98,20 +106,17 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer. var lastPickErr error for { - pw.mu.Lock() - if pw.done { - pw.mu.Unlock() + pg := pw.pickerGen.Load() + if pg == nil { return nil, balancer.PickResult{}, ErrClientConnClosing } - - if pw.picker == nil { - ch = pw.blockingCh + if pg.picker == nil { + ch = pg.blockingCh } - if ch == pw.blockingCh { + if ch == pg.blockingCh { // This could happen when either: // - pw.picker is nil (the previous if condition), or - // - has called pick on the current picker. - pw.mu.Unlock() + // - we have already called pick on the current picker. select { case <-ctx.Done(): var errStr string @@ -145,9 +150,8 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer. } } - ch = pw.blockingCh - p := pw.picker - pw.mu.Unlock() + ch = pg.blockingCh + p := pg.picker pickResult, err := p.Pick(info) if err != nil { @@ -197,24 +201,15 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer. } func (pw *pickerWrapper) close() { - pw.mu.Lock() - defer pw.mu.Unlock() - if pw.done { - return - } - pw.done = true - close(pw.blockingCh) + old := pw.pickerGen.Swap(nil) + close(old.blockingCh) } // reset clears the pickerWrapper and prepares it for being used again when idle // mode is exited. func (pw *pickerWrapper) reset() { - pw.mu.Lock() - defer pw.mu.Unlock() - if pw.done { - return - } - pw.blockingCh = make(chan struct{}) + old := pw.pickerGen.Swap(&pickerGeneration{blockingCh: make(chan struct{})}) + close(old.blockingCh) } // dropError is a wrapper error that indicates the LB policy wishes to drop the diff --git a/vendor/google.golang.org/grpc/resolver_wrapper.go b/vendor/google.golang.org/grpc/resolver_wrapper.go index 9dcc9780f..c5fb45236 100644 --- a/vendor/google.golang.org/grpc/resolver_wrapper.go +++ b/vendor/google.golang.org/grpc/resolver_wrapper.go @@ -171,7 +171,7 @@ func (ccr *ccResolverWrapper) NewAddress(addrs []resolver.Address) { // ParseServiceConfig is called by resolver implementations to parse a JSON // representation of the service config. func (ccr *ccResolverWrapper) ParseServiceConfig(scJSON string) *serviceconfig.ParseResult { - return parseServiceConfig(scJSON) + return parseServiceConfig(scJSON, ccr.cc.dopts.maxCallAttempts) } // addChannelzTraceEvent adds a channelz trace event containing the new diff --git a/vendor/google.golang.org/grpc/service_config.go b/vendor/google.golang.org/grpc/service_config.go index 9da8fc802..2671c5ef6 100644 --- a/vendor/google.golang.org/grpc/service_config.go +++ b/vendor/google.golang.org/grpc/service_config.go @@ -26,6 +26,7 @@ import ( "time" "google.golang.org/grpc/balancer" + "google.golang.org/grpc/balancer/pickfirst" "google.golang.org/grpc/codes" "google.golang.org/grpc/internal" "google.golang.org/grpc/internal/balancer/gracefulswitch" @@ -163,9 +164,11 @@ type jsonSC struct { } func init() { - internal.ParseServiceConfig = parseServiceConfig + internal.ParseServiceConfig = func(js string) *serviceconfig.ParseResult { + return parseServiceConfig(js, defaultMaxCallAttempts) + } } -func parseServiceConfig(js string) *serviceconfig.ParseResult { +func parseServiceConfig(js string, maxAttempts int) *serviceconfig.ParseResult { if len(js) == 0 { return &serviceconfig.ParseResult{Err: fmt.Errorf("no JSON service config provided")} } @@ -183,12 +186,12 @@ func parseServiceConfig(js string) *serviceconfig.ParseResult { } c := rsc.LoadBalancingConfig if c == nil { - name := PickFirstBalancerName + name := pickfirst.Name if rsc.LoadBalancingPolicy != nil { name = *rsc.LoadBalancingPolicy } if balancer.Get(name) == nil { - name = PickFirstBalancerName + name = pickfirst.Name } cfg := []map[string]any{{name: struct{}{}}} strCfg, err := json.Marshal(cfg) @@ -218,7 +221,7 @@ func parseServiceConfig(js string) *serviceconfig.ParseResult { WaitForReady: m.WaitForReady, Timeout: (*time.Duration)(m.Timeout), } - if mc.RetryPolicy, err = convertRetryPolicy(m.RetryPolicy); err != nil { + if mc.RetryPolicy, err = convertRetryPolicy(m.RetryPolicy, maxAttempts); err != nil { logger.Warningf("grpc: unmarshalling service config %s: %v", js, err) return &serviceconfig.ParseResult{Err: err} } @@ -264,7 +267,7 @@ func parseServiceConfig(js string) *serviceconfig.ParseResult { return &serviceconfig.ParseResult{Config: &sc} } -func convertRetryPolicy(jrp *jsonRetryPolicy) (p *internalserviceconfig.RetryPolicy, err error) { +func convertRetryPolicy(jrp *jsonRetryPolicy, maxAttempts int) (p *internalserviceconfig.RetryPolicy, err error) { if jrp == nil { return nil, nil } @@ -278,17 +281,16 @@ func convertRetryPolicy(jrp *jsonRetryPolicy) (p *internalserviceconfig.RetryPol return nil, nil } + if jrp.MaxAttempts < maxAttempts { + maxAttempts = jrp.MaxAttempts + } rp := &internalserviceconfig.RetryPolicy{ - MaxAttempts: jrp.MaxAttempts, + MaxAttempts: maxAttempts, InitialBackoff: time.Duration(jrp.InitialBackoff), MaxBackoff: time.Duration(jrp.MaxBackoff), BackoffMultiplier: jrp.BackoffMultiplier, RetryableStatusCodes: make(map[codes.Code]bool), } - if rp.MaxAttempts > 5 { - // TODO(retry): Make the max maxAttempts configurable. - rp.MaxAttempts = 5 - } for _, code := range jrp.RetryableStatusCodes { rp.RetryableStatusCodes[code] = true } diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go index b54563e81..8051ef5b5 100644 --- a/vendor/google.golang.org/grpc/stream.go +++ b/vendor/google.golang.org/grpc/stream.go @@ -23,6 +23,7 @@ import ( "errors" "io" "math" + "math/rand" "strconv" "sync" "time" @@ -34,7 +35,6 @@ import ( "google.golang.org/grpc/internal/balancerload" "google.golang.org/grpc/internal/binarylog" "google.golang.org/grpc/internal/channelz" - "google.golang.org/grpc/internal/grpcrand" "google.golang.org/grpc/internal/grpcutil" imetadata "google.golang.org/grpc/internal/metadata" iresolver "google.golang.org/grpc/internal/resolver" @@ -699,7 +699,7 @@ func (a *csAttempt) shouldRetry(err error) (bool, error) { if max := float64(rp.MaxBackoff); cur > max { cur = max } - dur = time.Duration(grpcrand.Int63n(int64(cur))) + dur = time.Duration(rand.Int63n(int64(cur))) cs.numRetriesSincePushback++ } diff --git a/vendor/google.golang.org/grpc/version.go b/vendor/google.golang.org/grpc/version.go index a0b782890..bafaef99b 100644 --- a/vendor/google.golang.org/grpc/version.go +++ b/vendor/google.golang.org/grpc/version.go @@ -19,4 +19,4 @@ package grpc // Version is the current grpc version. -const Version = "1.64.1" +const Version = "1.65.0" diff --git a/vendor/k8s.io/utils/net/multi_listen.go b/vendor/k8s.io/utils/net/multi_listen.go new file mode 100644 index 000000000..7cb7795be --- /dev/null +++ b/vendor/k8s.io/utils/net/multi_listen.go @@ -0,0 +1,195 @@ +/* +Copyright 2024 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package net + +import ( + "context" + "fmt" + "net" + "sync" +) + +// connErrPair pairs conn and error which is returned by accept on sub-listeners. +type connErrPair struct { + conn net.Conn + err error +} + +// multiListener implements net.Listener +type multiListener struct { + listeners []net.Listener + wg sync.WaitGroup + + // connCh passes accepted connections, from child listeners to parent. + connCh chan connErrPair + // stopCh communicates from parent to child listeners. + stopCh chan struct{} +} + +// compile time check to ensure *multiListener implements net.Listener +var _ net.Listener = &multiListener{} + +// MultiListen returns net.Listener which can listen on and accept connections for +// the given network on multiple addresses. Internally it uses stdlib to create +// sub-listener and multiplexes connection requests using go-routines. +// The network must be "tcp", "tcp4" or "tcp6". +// It follows the semantics of net.Listen that primarily means: +// 1. If the host is an unspecified/zero IP address with "tcp" network, MultiListen +// listens on all available unicast and anycast IP addresses of the local system. +// 2. Use "tcp4" or "tcp6" to exclusively listen on IPv4 or IPv6 family, respectively. +// 3. The host can accept names (e.g, localhost) and it will create a listener for at +// most one of the host's IP. +func MultiListen(ctx context.Context, network string, addrs ...string) (net.Listener, error) { + var lc net.ListenConfig + return multiListen( + ctx, + network, + addrs, + func(ctx context.Context, network, address string) (net.Listener, error) { + return lc.Listen(ctx, network, address) + }) +} + +// multiListen implements MultiListen by consuming stdlib functions as dependency allowing +// mocking for unit-testing. +func multiListen( + ctx context.Context, + network string, + addrs []string, + listenFunc func(ctx context.Context, network, address string) (net.Listener, error), +) (net.Listener, error) { + if !(network == "tcp" || network == "tcp4" || network == "tcp6") { + return nil, fmt.Errorf("network %q not supported", network) + } + if len(addrs) == 0 { + return nil, fmt.Errorf("no address provided to listen on") + } + + ml := &multiListener{ + connCh: make(chan connErrPair), + stopCh: make(chan struct{}), + } + for _, addr := range addrs { + l, err := listenFunc(ctx, network, addr) + if err != nil { + // close all the sub-listeners and exit + _ = ml.Close() + return nil, err + } + ml.listeners = append(ml.listeners, l) + } + + for _, l := range ml.listeners { + ml.wg.Add(1) + go func(l net.Listener) { + defer ml.wg.Done() + for { + // Accept() is blocking, unless ml.Close() is called, in which + // case it will return immediately with an error. + conn, err := l.Accept() + // This assumes that ANY error from Accept() will terminate the + // sub-listener. We could maybe be more precise, but it + // doesn't seem necessary. + terminate := err != nil + + select { + case ml.connCh <- connErrPair{conn: conn, err: err}: + case <-ml.stopCh: + // In case we accepted a connection AND were stopped, and + // this select-case was chosen, just throw away the + // connection. This avoids potentially blocking on connCh + // or leaking a connection. + if conn != nil { + _ = conn.Close() + } + terminate = true + } + // Make sure we don't loop on Accept() returning an error and + // the select choosing the channel case. + if terminate { + return + } + } + }(l) + } + return ml, nil +} + +// Accept implements net.Listener. It waits for and returns a connection from +// any of the sub-listener. +func (ml *multiListener) Accept() (net.Conn, error) { + // wait for any sub-listener to enqueue an accepted connection + connErr, ok := <-ml.connCh + if !ok { + // The channel will be closed only when Close() is called on the + // multiListener. Closing of this channel implies that all + // sub-listeners are also closed, which causes a "use of closed + // network connection" error on their Accept() calls. We return the + // same error for multiListener.Accept() if multiListener.Close() + // has already been called. + return nil, fmt.Errorf("use of closed network connection") + } + return connErr.conn, connErr.err +} + +// Close implements net.Listener. It will close all sub-listeners and wait for +// the go-routines to exit. +func (ml *multiListener) Close() error { + // Make sure this can be called repeatedly without explosions. + select { + case <-ml.stopCh: + return fmt.Errorf("use of closed network connection") + default: + } + + // Tell all sub-listeners to stop. + close(ml.stopCh) + + // Closing the listeners causes Accept() to immediately return an error in + // the sub-listener go-routines. + for _, l := range ml.listeners { + _ = l.Close() + } + + // Wait for all the sub-listener go-routines to exit. + ml.wg.Wait() + close(ml.connCh) + + // Drain any already-queued connections. + for connErr := range ml.connCh { + if connErr.conn != nil { + _ = connErr.conn.Close() + } + } + return nil +} + +// Addr is an implementation of the net.Listener interface. It always returns +// the address of the first listener. Callers should use conn.LocalAddr() to +// obtain the actual local address of the sub-listener. +func (ml *multiListener) Addr() net.Addr { + return ml.listeners[0].Addr() +} + +// Addrs is like Addr, but returns the address for all registered listeners. +func (ml *multiListener) Addrs() []net.Addr { + var ret []net.Addr + for _, l := range ml.listeners { + ret = append(ret, l.Addr()) + } + return ret +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 73749b8ba..d1e8eff49 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,5 +1,5 @@ -# carvel.dev/kapp v0.62.1-0.20240508153820-7d8a03ed7ccf -## explicit; go 1.22.0 +# carvel.dev/kapp v0.63.2 +## explicit; go 1.22.5 carvel.dev/kapp/pkg/kapp/cmd/core carvel.dev/kapp/pkg/kapp/config carvel.dev/kapp/pkg/kapp/crdupgradesafety @@ -12,6 +12,9 @@ carvel.dev/kapp/pkg/kapp/resourcesmisc carvel.dev/kapp/pkg/kapp/util carvel.dev/kapp/pkg/kapp/version carvel.dev/kapp/pkg/kapp/yttresmod +# carvel.dev/vendir v0.40.0 +## explicit; go 1.21 +carvel.dev/vendir/pkg/vendir/versions/v1alpha1 # cloud.google.com/go/compute/metadata v0.3.0 ## explicit; go 1.19 cloud.google.com/go/compute/metadata @@ -108,7 +111,7 @@ github.com/Microsoft/hcsshim/internal/wclayer github.com/Microsoft/hcsshim/internal/winapi github.com/Microsoft/hcsshim/osversion github.com/Microsoft/hcsshim/pkg/ociwclayer -# github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df +# github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9 ## explicit; go 1.18 github.com/antlr/antlr4/runtime/Go/antlr/v4 # github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 @@ -224,7 +227,7 @@ github.com/blang/semver/v4 # github.com/cenkalti/backoff/v4 v4.2.1 ## explicit; go 1.18 github.com/cenkalti/backoff/v4 -# github.com/cespare/xxhash/v2 v2.2.0 +# github.com/cespare/xxhash/v2 v2.3.0 ## explicit; go 1.11 github.com/cespare/xxhash/v2 # github.com/chai2010/gettext-go v1.0.2 @@ -241,7 +244,7 @@ github.com/chrismellard/docker-credential-acr-env/pkg/token # github.com/containerd/cgroups/v3 v3.0.3 ## explicit; go 1.18 github.com/containerd/cgroups/v3/cgroup1/stats -# github.com/containerd/containerd v1.7.19 +# github.com/containerd/containerd v1.7.20 ## explicit; go 1.21 github.com/containerd/containerd/archive github.com/containerd/containerd/archive/compression @@ -309,7 +312,7 @@ github.com/containerd/ttrpc # github.com/containerd/typeurl/v2 v2.1.1 ## explicit; go 1.13 github.com/containerd/typeurl/v2 -# github.com/containers/common v0.59.1 +# github.com/containers/common v0.59.2 ## explicit; go 1.21 github.com/containers/common/pkg/auth github.com/containers/common/pkg/capabilities @@ -392,7 +395,7 @@ github.com/dimchansky/utfbom # github.com/distribution/reference v0.6.0 ## explicit; go 1.20 github.com/distribution/reference -# github.com/docker/cli v27.0.2+incompatible +# github.com/docker/cli v27.0.3+incompatible ## explicit github.com/docker/cli/cli/config github.com/docker/cli/cli/config/configfile @@ -410,7 +413,7 @@ github.com/docker/distribution/registry/client/auth/challenge github.com/docker/distribution/registry/client/transport github.com/docker/distribution/registry/storage/cache github.com/docker/distribution/registry/storage/cache/memory -# github.com/docker/docker v26.1.3+incompatible +# github.com/docker/docker v26.1.4+incompatible ## explicit github.com/docker/docker/api/types/filters github.com/docker/docker/api/types/registry @@ -568,7 +571,7 @@ github.com/google/go-cmp/cmp/internal/diff github.com/google/go-cmp/cmp/internal/flags github.com/google/go-cmp/cmp/internal/function github.com/google/go-cmp/cmp/internal/value -# github.com/google/go-containerregistry v0.20.0 +# github.com/google/go-containerregistry v0.20.1 ## explicit; go 1.18 github.com/google/go-containerregistry/internal/and github.com/google/go-containerregistry/internal/compression @@ -710,7 +713,7 @@ github.com/k14s/ytt/pkg/yamlmeta/internal/yaml.v2 github.com/k14s/ytt/pkg/yamltemplate github.com/k14s/ytt/pkg/yttlibrary github.com/k14s/ytt/pkg/yttlibrary/overlay -# github.com/klauspost/compress v1.17.8 +# github.com/klauspost/compress v1.17.9 ## explicit; go 1.20 github.com/klauspost/compress github.com/klauspost/compress/fse @@ -794,7 +797,7 @@ github.com/munnerz/goautoneg # github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f ## explicit github.com/mxk/go-flowrate/flowrate -# github.com/onsi/ginkgo/v2 v2.19.0 +# github.com/onsi/ginkgo/v2 v2.19.1 ## explicit; go 1.20 github.com/onsi/ginkgo/v2 github.com/onsi/ginkgo/v2/config @@ -816,7 +819,7 @@ github.com/onsi/ginkgo/v2/internal/parallel_support github.com/onsi/ginkgo/v2/internal/testingtproxy github.com/onsi/ginkgo/v2/reporters github.com/onsi/ginkgo/v2/types -# github.com/onsi/gomega v1.33.1 +# github.com/onsi/gomega v1.34.1 ## explicit; go 1.20 github.com/onsi/gomega github.com/onsi/gomega/format @@ -857,10 +860,10 @@ github.com/operator-framework/api/pkg/validation github.com/operator-framework/api/pkg/validation/errors github.com/operator-framework/api/pkg/validation/interfaces github.com/operator-framework/api/pkg/validation/internal -# github.com/operator-framework/catalogd v0.18.0 => github.com/openshift/operator-framework-catalogd v0.0.0-20240715165051-38a51546d9c3 +# github.com/operator-framework/catalogd v0.20.0 ## explicit; go 1.22.0 github.com/operator-framework/catalogd/api/core/v1alpha1 -# github.com/operator-framework/helm-operator-plugins v0.3.0 +# github.com/operator-framework/helm-operator-plugins v0.3.1 ## explicit; go 1.22.0 github.com/operator-framework/helm-operator-plugins/internal/sdk/controllerutil github.com/operator-framework/helm-operator-plugins/pkg/client @@ -870,7 +873,7 @@ github.com/operator-framework/helm-operator-plugins/pkg/manifestutil github.com/operator-framework/operator-lib/handler github.com/operator-framework/operator-lib/handler/internal/metrics github.com/operator-framework/operator-lib/internal/annotation -# github.com/operator-framework/operator-registry v1.44.0 +# github.com/operator-framework/operator-registry v1.45.0 ## explicit; go 1.22.0 github.com/operator-framework/operator-registry/alpha/declcfg github.com/operator-framework/operator-registry/alpha/model @@ -961,13 +964,10 @@ github.com/vbatts/tar-split/archive/tar # github.com/vito/go-interact v1.0.1 ## explicit; go 1.12 github.com/vito/go-interact/interact -# github.com/vmware-tanzu/carvel-kapp-controller v0.50.2 +# github.com/vmware-tanzu/carvel-kapp-controller v0.51.0 ## explicit; go 1.21 github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1 github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/packaging/v1alpha1 -# github.com/vmware-tanzu/carvel-vendir v0.36.0 -## explicit; go 1.21 -github.com/vmware-tanzu/carvel-vendir/pkg/vendir/versions/v1alpha1 # github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb ## explicit github.com/xeipuuv/gojsonpointer @@ -1065,8 +1065,8 @@ go.uber.org/zap/internal/exit go.uber.org/zap/internal/pool go.uber.org/zap/internal/stacktrace go.uber.org/zap/zapcore -# golang.org/x/crypto v0.24.0 -## explicit; go 1.18 +# golang.org/x/crypto v0.25.0 +## explicit; go 1.20 golang.org/x/crypto/bcrypt golang.org/x/crypto/blowfish golang.org/x/crypto/cast5 @@ -1081,12 +1081,12 @@ golang.org/x/crypto/pbkdf2 golang.org/x/crypto/pkcs12 golang.org/x/crypto/pkcs12/internal/rc2 golang.org/x/crypto/scrypt -# golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 +# golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 ## explicit; go 1.20 golang.org/x/exp/constraints golang.org/x/exp/maps golang.org/x/exp/slices -# golang.org/x/net v0.26.0 +# golang.org/x/net v0.27.0 ## explicit; go 1.18 golang.org/x/net/context golang.org/x/net/html @@ -1118,13 +1118,13 @@ golang.org/x/oauth2/jwt golang.org/x/sync/errgroup golang.org/x/sync/semaphore golang.org/x/sync/singleflight -# golang.org/x/sys v0.21.0 +# golang.org/x/sys v0.22.0 ## explicit; go 1.18 golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry -# golang.org/x/term v0.21.0 +# golang.org/x/term v0.22.0 ## explicit; go 1.18 golang.org/x/term # golang.org/x/text v0.16.0 @@ -1162,7 +1162,7 @@ golang.org/x/text/width # golang.org/x/time v0.5.0 ## explicit; go 1.18 golang.org/x/time/rate -# golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d +# golang.org/x/tools v0.23.0 ## explicit; go 1.19 golang.org/x/tools/cover golang.org/x/tools/go/ast/inspector @@ -1172,22 +1172,23 @@ gomodules.xyz/jsonpatch/v2 # google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de ## explicit; go 1.19 google.golang.org/genproto/protobuf/field_mask -# google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 -## explicit; go 1.19 +# google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 +## explicit; go 1.20 google.golang.org/genproto/googleapis/api/expr/v1alpha1 google.golang.org/genproto/googleapis/api/httpbody -# google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda -## explicit; go 1.19 +# google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 +## explicit; go 1.20 google.golang.org/genproto/googleapis/rpc/errdetails google.golang.org/genproto/googleapis/rpc/status -# google.golang.org/grpc v1.64.1 -## explicit; go 1.19 +# google.golang.org/grpc v1.65.0 +## explicit; go 1.21 google.golang.org/grpc google.golang.org/grpc/attributes google.golang.org/grpc/backoff google.golang.org/grpc/balancer google.golang.org/grpc/balancer/base google.golang.org/grpc/balancer/grpclb/state +google.golang.org/grpc/balancer/pickfirst google.golang.org/grpc/balancer/roundrobin google.golang.org/grpc/binarylog/grpc_binarylog_v1 google.golang.org/grpc/channelz @@ -1210,7 +1211,6 @@ google.golang.org/grpc/internal/channelz google.golang.org/grpc/internal/credentials google.golang.org/grpc/internal/envconfig google.golang.org/grpc/internal/grpclog -google.golang.org/grpc/internal/grpcrand google.golang.org/grpc/internal/grpcsync google.golang.org/grpc/internal/grpcutil google.golang.org/grpc/internal/idle @@ -1333,7 +1333,7 @@ helm.sh/helm/v3/pkg/storage/driver helm.sh/helm/v3/pkg/time helm.sh/helm/v3/pkg/time/ctime helm.sh/helm/v3/pkg/uploader -# k8s.io/api v0.30.2 +# k8s.io/api v0.30.3 ## explicit; go 1.22.0 k8s.io/api/admission/v1 k8s.io/api/admission/v1beta1 @@ -1392,7 +1392,7 @@ k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 k8s.io/api/storagemigration/v1alpha1 -# k8s.io/apiextensions-apiserver v0.30.2 +# k8s.io/apiextensions-apiserver v0.30.3 ## explicit; go 1.22.0 k8s.io/apiextensions-apiserver/pkg/apihelpers k8s.io/apiextensions-apiserver/pkg/apis/apiextensions @@ -1414,7 +1414,7 @@ k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/scheme k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1 k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1 k8s.io/apiextensions-apiserver/pkg/features -# k8s.io/apimachinery v0.30.2 +# k8s.io/apimachinery v0.30.3 ## explicit; go 1.22.0 k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/errors @@ -1477,7 +1477,7 @@ k8s.io/apimachinery/pkg/watch k8s.io/apimachinery/third_party/forked/golang/json k8s.io/apimachinery/third_party/forked/golang/netutil k8s.io/apimachinery/third_party/forked/golang/reflect -# k8s.io/apiserver v0.30.2 +# k8s.io/apiserver v0.30.3 ## explicit; go 1.22.0 k8s.io/apiserver/pkg/apis/apiserver k8s.io/apiserver/pkg/apis/apiserver/install @@ -1506,13 +1506,13 @@ k8s.io/apiserver/pkg/util/feature k8s.io/apiserver/pkg/util/webhook k8s.io/apiserver/pkg/util/x509metrics k8s.io/apiserver/pkg/warning -# k8s.io/cli-runtime v0.30.2 +# k8s.io/cli-runtime v0.30.3 ## explicit; go 1.22.0 k8s.io/cli-runtime/pkg/genericclioptions k8s.io/cli-runtime/pkg/genericiooptions k8s.io/cli-runtime/pkg/printers k8s.io/cli-runtime/pkg/resource -# k8s.io/client-go v0.30.2 +# k8s.io/client-go v0.30.3 ## explicit; go 1.22.0 k8s.io/client-go/applyconfigurations/admissionregistration/v1 k8s.io/client-go/applyconfigurations/admissionregistration/v1alpha1 @@ -1733,7 +1733,7 @@ k8s.io/client-go/util/jsonpath k8s.io/client-go/util/keyutil k8s.io/client-go/util/retry k8s.io/client-go/util/workqueue -# k8s.io/component-base v0.30.2 +# k8s.io/component-base v0.30.3 ## explicit; go 1.22.0 k8s.io/component-base/featuregate k8s.io/component-base/featuregate/testing @@ -1779,7 +1779,7 @@ k8s.io/kubectl/pkg/util/openapi k8s.io/kubectl/pkg/util/templates k8s.io/kubectl/pkg/util/term k8s.io/kubectl/pkg/validation -# k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 +# k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 ## explicit; go 1.18 k8s.io/utils/buffer k8s.io/utils/clock @@ -1964,4 +1964,3 @@ sigs.k8s.io/structured-merge-diff/v4/value ## explicit; go 1.12 sigs.k8s.io/yaml sigs.k8s.io/yaml/goyaml.v2 -# github.com/operator-framework/catalogd => github.com/openshift/operator-framework-catalogd v0.0.0-20240715165051-38a51546d9c3