diff --git a/.ci/cache_version_tags.sh b/.ci/cache_version_tags.sh new file mode 100644 index 0000000..aafb2dc --- /dev/null +++ b/.ci/cache_version_tags.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# +# Copyright Red Hat +# +# 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. + +VERSION_PATTERN="v[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?" +CONFIG_CSV='config/manifests/bases/registry-operator.clusterserviceversion.yaml' +CONFIG_MANAGER_KUSTOMIZE='config/manager/kustomization.yaml' +BUNDLE_CSV='bundle/manifests/registry-operator.clusterserviceversion.yaml' +YQ_CLI=${YQ_CLI:-yq} + +# error on unset variables +set -u + +${YQ_CLI} '.spec.version' ${CONFIG_CSV} > ${CACHED_CSV_VERSION} && \ +${YQ_CLI} '(.metadata.annotations.containerImage | split(":") | .[1])' ${CONFIG_CSV} > ${CACHED_CSV_CONTAINER_IMAGE_TAG} && \ +${YQ_CLI} "(.metadata.name | capture(\"(?P${VERSION_PATTERN})\") | .tag)" ${CONFIG_CSV} > ${CACHED_CSV_NAME_TAG} && \ +${YQ_CLI} '.spec.version' ${BUNDLE_CSV} > ${CACHED_BUNDLE_VERSION} && \ +${YQ_CLI} '(.metadata.annotations.containerImage | split(":") | .[1])' ${BUNDLE_CSV} > ${CACHED_BUNDLE_CONTAINER_IMAGE_TAG} && \ +${YQ_CLI} "(.metadata.name | capture(\"(?P${VERSION_PATTERN})\") | .tag)" ${BUNDLE_CSV} > ${CACHED_BUNDLE_NAME_TAG} && \ +${YQ_CLI} '.images[0].newTag' ${CONFIG_MANAGER_KUSTOMIZE} > ${CACHED_MANAGER_IMAGE_TAG} diff --git a/.ci/minikube_integration.sh b/.ci/minikube_integration.sh new file mode 100644 index 0000000..fd5f706 --- /dev/null +++ b/.ci/minikube_integration.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +# +# Copyright Red Hat +# +# 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. + +# NOTE: This script assumes that minikube is installed and running, and using the docker driver on Linux +# Due to networking issues with the docker driver and ingress on macOS/Windows, this script must be run on Linux + +# Share docker env with Minikube +eval $(minikube docker-env) + +# error on unset variables +set -u +# print each command before executing it +set -x + +# Build the registry operator image +export IMG=${REGISTRY_OPERATOR} +make docker-build +if [ $? -ne 0 ]; then + echo "Error building registry operator image" + exit 1; +fi + +# Install cert-manager +make install-cert + +# Wait for the cert-manager to become ready +kubectl wait deploy/cert-manager --namespace cert-manager --for=condition=Available --timeout=600s +kubectl wait deploy/cert-manager-cainjector --namespace cert-manager --for=condition=Available --timeout=600s +kubectl wait deploy/cert-manager-webhook --namespace cert-manager --for=condition=Available --timeout=600s +if [ $? -ne 0 ]; then + echo "cert-manager-controller container logs:" + kubectl logs -l app=cert-manager --namespace cert-manager --container cert-manager-controller + echo "cert-manager-cainjector container logs:" + kubectl logs -l app=cainjector --namespace cert-manager --container cert-manager-cainjector + echo "cert-manager-webhook container logs:" + kubectl logs -l app=webhook --namespace cert-manager --container cert-manager-webhook + + # Return the description of every pod + kubectl describe pods --namespace cert-manager + exit 1 +fi + +# Install CRDs & deploy registry operator +make install && make deploy + +# Wait for the registry operator to become ready +kubectl wait deploy/registry-operator-controller-manager --namespace registry-operator-system --for=condition=Available --timeout=600s +if [ $? -ne 0 ]; then + echo "manager container logs:" + kubectl logs -l app=devfileregistry-operator --namespace registry-operator-system --container manager + echo "kube-rbac-proxy container logs:" + kubectl logs -l app=devfileregistry-operator --namespace registry-operator-system --container kube-rbac-proxy + + # Return the description of every pod + kubectl describe pods --namespace registry-operator-system + exit 1 +fi + +# wait 15 seconds for registry operator to get set up +sleep 15 + +# run integration test suite +make test-integration diff --git a/.ci/openshift_integration.sh b/.ci/openshift_integration.sh index d2d0e43..1c77d15 100755 --- a/.ci/openshift_integration.sh +++ b/.ci/openshift_integration.sh @@ -1,6 +1,20 @@ #!/bin/bash -#!/usr/bin/env bash +# +# Copyright Red Hat +# +# 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. + # exit immediately when a command fails set -e # only exit with zero if all commands of the pipeline exit successfully diff --git a/.codecov.yaml b/.codecov.yaml index 8739c45..c06cf68 100644 --- a/.codecov.yaml +++ b/.codecov.yaml @@ -1,3 +1,18 @@ +# +# Copyright Red Hat +# +# 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. + # See http://docs.codecov.io/docs/coverage-configuration coverage: precision: 2 # 2 = xx.xx%, 0 = xx% diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f3c489b..70b8fed 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,3 +1,17 @@ +# +# Copyright Red Hat +# +# 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. name: Validate PRs on: @@ -9,18 +23,18 @@ jobs: name: Check go sources runs-on: ubuntu-latest steps: + - + name: Check out code into the Go module directory + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Set up Go 1.x - uses: actions/setup-go@v2 + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: - go-version: 1.19 - - - name: Check out code into the Go module directory - uses: actions/checkout@v2 + go-version-file: 'go.mod' - name: Cache go modules id: cache-mod - uses: actions/cache@v2 + uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} @@ -72,7 +86,7 @@ jobs: run: make test - name: Upload coverage to Codecov - uses: codecov/codecov-action@v2.1.0 + uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4 - name: Run Gosec Security Scanner run: | @@ -85,7 +99,7 @@ jobs: fi - name: Upload SARIF file - uses: github/codeql-action/upload-sarif@v2 + uses: github/codeql-action/upload-sarif@74483a38d39275f33fcff5f35b679b5ca4a26a99 # 2.22.5 with: # Path to SARIF file relative to the root of the repository sarif_file: gosec.sarif @@ -96,7 +110,7 @@ jobs: steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Check if operator docker build is working run: docker build -f Dockerfile . @@ -107,7 +121,7 @@ jobs: steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Build the operator's bundle image run: make bundle-build diff --git a/.github/workflows/codecov.yaml b/.github/workflows/codecov.yaml index 617525a..5670664 100644 --- a/.github/workflows/codecov.yaml +++ b/.github/workflows/codecov.yaml @@ -1,3 +1,17 @@ +# +# Copyright Red Hat +# +# 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. name: Code Coverage Report on: push: @@ -8,14 +22,14 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Checkout - uses: actions/checkout@v2.3.1 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 with: persist-credentials: false - name: Set up Go 1.x - uses: actions/setup-go@v2 + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: - go-version: 1.19 + go-version-file: 'go.mod' - name: Run tests run: make test - name: Codecov - uses: codecov/codecov-action@v2.1.0 + uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4 diff --git a/.github/workflows/dockerimage-push.yaml b/.github/workflows/dockerimage-push.yaml index de8d7ff..7c3a054 100644 --- a/.github/workflows/dockerimage-push.yaml +++ b/.github/workflows/dockerimage-push.yaml @@ -1,3 +1,17 @@ +# +# Copyright Red Hat +# +# 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. name: Next Dockerimage on: @@ -10,9 +24,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout registry-operator source code - uses: actions/checkout@v2 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Docker Build & Push - Registry Operator Image - uses: docker/build-push-action@v1.1.0 + uses: docker/build-push-action@3e7a4f6646880c6f63758d73ac32392d323eaf8f # v1.1.2 with: username: ${{ secrets.QUAY_USERNAME }} password: ${{ secrets.QUAY_PASSWORD }} @@ -26,9 +40,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout registry-operator source code - uses: actions/checkout@v2 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Build and push the Registry Operator Bundle to quay.io - uses: docker/build-push-action@v1.1.0 + uses: docker/build-push-action@3e7a4f6646880c6f63758d73ac32392d323eaf8f # v1.1.2 with: username: ${{ secrets.QUAY_USERNAME }} password: ${{ secrets.QUAY_PASSWORD }} diff --git a/.github/workflows/release-pr.yaml b/.github/workflows/release-pr.yaml new file mode 100644 index 0000000..4b264de --- /dev/null +++ b/.github/workflows/release-pr.yaml @@ -0,0 +1,119 @@ +# +# Copyright Red Hat +# +# 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. +name: Release PRs + +on: + pull_request: + branches: + - release-v0 + +jobs: + gosec: + runs-on: ubuntu-latest + steps: + - name: Checkout registry-operator source code + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - name: Set up Go 1.x + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + with: + go-version-file: 'go.mod' + - name: Run Gosec Security Scanner + run: | + go install github.com/securego/gosec/v2/cmd/gosec@v2.14.0 + make gosec + if [[ $? != 0 ]] + then + echo "gosec scanner failed to run " + exit 1 + fi + - name: Upload SARIF file + uses: github/codeql-action/upload-sarif@74483a38d39275f33fcff5f35b679b5ca4a26a99 # 2.22.5 + with: + # Path to SARIF file relative to the root of the repository + sarif_file: gosec.sarif + version-check: + runs-on: ubuntu-latest + env: + CACHED_CSV_VERSION: .cache/csv_version.txt + CACHED_CSV_CONTAINER_IMAGE_TAG: .cache/csv_container_image_tag.txt + CACHED_CSV_NAME_TAG: .cache/csv_name_tag.txt + CACHED_BUNDLE_VERSION: .cache/bundle_version.txt + CACHED_BUNDLE_CONTAINER_IMAGE_TAG: .cache/bundle_container_image_tag.txt + CACHED_BUNDLE_NAME_TAG: .cache/bundle_name_tag.txt + CACHED_MANAGER_IMAGE_TAG: .cache/manager_image_tag.txt + steps: + - name: Checkout registry-operator source code + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - name: Download yq + run: curl -sL https://github.com/mikefarah/yq/releases/download/v4.34.2/yq_linux_amd64 -o yq && chmod +x yq + - name: Cache version tags + env: + YQ_CLI: ./yq + run: mkdir -p .cache && bash .ci/cache_version_tags.sh + - name: Check if VERSION and version tags match release tag + run: bash check_version.sh + k8s-integration-test: + strategy: + matrix: + version: [1.25, 1.26] + needs: + - version-check + - gosec + runs-on: ubuntu-latest + env: + OPERATOR_SDK_DL_URL: https://github.com/operator-framework/operator-sdk/releases/download/v1.28.0 + OPERATOR_SDK_CLI: ./operator-sdk + steps: + - name: Checkout registry-operator source code + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - name: Setup Go environment + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + with: + go-version-file: 'go.mod' + - name: Download operator-sdk + run: | + export ARCH=$(case $(uname -m) in x86_64) echo -n amd64 ;; aarch64) echo -n arm64 ;; *) echo -n $(uname -m) ;; esac) + export OS=$(uname | awk '{print tolower($0)}') + + curl -LO ${OPERATOR_SDK_DL_URL}/operator-sdk_${OS}_${ARCH} + - name: Verify the downloaded operator-sdk + run: | + export ARCH=$(case $(uname -m) in x86_64) echo -n amd64 ;; aarch64) echo -n arm64 ;; *) echo -n $(uname -m) ;; esac) + export OS=$(uname | awk '{print tolower($0)}') + gpg --keyserver keyserver.ubuntu.com --recv-keys 052996E2A20B5C7E; + curl -LO ${OPERATOR_SDK_DL_URL}/checksums.txt; + curl -LO ${OPERATOR_SDK_DL_URL}/checksums.txt.asc; + gpg -u "Operator SDK (release) " --verify checksums.txt.asc; + grep operator-sdk_${OS}_${ARCH} checksums.txt | sha256sum -c - + - name: Setup operator-sdk + run: | + export ARCH=$(case $(uname -m) in x86_64) echo -n amd64 ;; aarch64) echo -n arm64 ;; *) echo -n $(uname -m) ;; esac) + export OS=$(uname | awk '{print tolower($0)}') + mv operator-sdk_${OS}_${ARCH} ${OPERATOR_SDK_CLI} + chmod +x ${OPERATOR_SDK_CLI} + - name: Setup Minikube + uses: manusa/actions-setup-minikube@3856c6fa039819f1c8e7e248b1fc5a8564e354c9 # v2.9.0 + with: + minikube version: 'v1.31.2' + kubernetes version: "${{ matrix.version }}" + driver: 'docker' + github token: ${{ secrets.GITHUB_TOKEN }} + start args: '--memory 4096 --cpus 2' + - name: Set manager image pull policy to Never + uses: mikefarah/yq@0b34c9a00de1c575a34eea05af1d956a525c4fc1 # v4.34.2 + with: + cmd: yq -i '(select(documentIndex == 1) | .spec.template.spec.containers[0].imagePullPolicy) = "Never"' 'config/manager/manager.yaml' + - name: Run integration testing on release image + run: REGISTRY_OPERATOR=localhost/registry-operator:v$(cat VERSION) bash .ci/minikube_integration.sh diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..ca654ba --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,51 @@ +# +# Copyright Red Hat +# +# 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. +name: Push Release Images + +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + - 'v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+' + +jobs: + push-operator-image: + runs-on: ubuntu-latest + steps: + - name: Checkout registry-operator source code + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - name: Docker Build & Push - Registry Operator Release Image + uses: docker/build-push-action@3e7a4f6646880c6f63758d73ac32392d323eaf8f # v1.1.2 + with: + username: ${{ secrets.QUAY_USERNAME }} + password: ${{ secrets.QUAY_PASSWORD }} + registry: quay.io + repository: devfile/registry-operator + dockerfile: Dockerfile + tags: ${{ github.ref_name }} + push-operator-bundle: + runs-on: ubuntu-latest + steps: + - name: Checkout registry-operator source code + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - name: Docker Build & Push - Registry Operator Bundle Release Image + uses: docker/build-push-action@3e7a4f6646880c6f63758d73ac32392d323eaf8f # v1.1.2 + with: + username: ${{ secrets.QUAY_USERNAME }} + password: ${{ secrets.QUAY_PASSWORD }} + registry: quay.io + repository: devfile/registry-operator-bundle + dockerfile: bundle.Dockerfile + tags: ${{ github.ref_name }} diff --git a/.gitignore b/.gitignore index d97ffc5..b944d5c 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,6 @@ bin *.swp *.swo *~ + +# cache directory +.cache/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d838584..14c191f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,22 +24,30 @@ You can tag Devfile Registry related issues with the `/area registry` text in yo 3. Open the folder in the IDE of your choice (VS Code with Go extension, or GoLand is recommended) #### Build and Run the Operator -1. Log in to an OpenShfit or Kubernetes cluster +The Makefile currently supports both Docker and Podman. To run the proper command replace `` with either `podman` or `docker` depending on your container engine. +1. Log in to an OpenShift or Kubernetes cluster 2. Run `export IMG=` where `` is the image repository to where you would like to push the image (e.g. `quay.io/user/registry-operator:latest`). -3. Run `make docker-build` to build the devfile registry operator. +3. Run `make -build` to build the devfile registry operator. -4. Run `make docker-push` to push the devfile registry operator image. +4. Run `make -push` to push the devfile registry operator image. -5. (Optional, **docker only**) Run `make docker-buildx` to build and push the devfile registry operator multi-architecture image +5. (Optional, **docker only**) Run `make docker-buildx` to build and push the devfile registry operator multi-architecture image. -6. Run `make install-cert` to install the cert-manager. +6. Run `make install-cert` to install the cert-manager. (Allow time for these services to spin up before moving on to step 7 & 8). 7. Run `make install` to install the CRDs. 8. Run `make deploy` to deploy the operator. +##### Enabling HTTP/2 on the Webhook Server + +By default, http/2 on the webhook server is disabled due to [CVE-2023-44487](https://github.com/advisories/GHSA-qppj-fm5r-hxr3). + +If you want to enable http/2 for the webhook server, build with `ENABLE_WEBHOOK_HTTP2=true make docker-build` or with +`ENABLE_WEBHOOK_HTTP2=true make run` if running locally. + ### Testing your Changes All changes delivered to the Devfile Registry operator are expected to be sufficiently tested. This may include validating that existing tests pass, updating tests, or adding new tests. @@ -67,7 +75,7 @@ make test-integration Signed-off-by: First Lastname ``` -You can easily add this footer to your commits by adding `-s` when running `git commit`.When you think the code is ready for review, create a pull request and link the issue associated with it. +You can easily add this footer to your commits by adding `-s` when running `git commit`. When you think the code is ready for review, create a pull request and link the issue associated with it. Owners of the repository will watch out for and review new PRs. diff --git a/Dockerfile b/Dockerfile index 5038968..84dad63 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,18 @@ +# +# Copyright Red Hat +# +# 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. + # Build the manager binary FROM golang:1.19 as builder ARG TARGETARCH @@ -22,6 +37,10 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH} GO111MODULE=on go build -a -o ARG ENABLE_WEBHOOKS=true ENV ENABLE_WEBHOOKS=${ENABLE_WEBHOOKS} +# disable http/2 on the webhook server by default +ARG ENABLE_WEBHOOK_HTTP2=false +ENV ENABLE_WEBHOOK_HTTP2=${ENABLE_WEBHOOK_HTTP2} + # Use distroless as minimal base image to package the manager binary # Refer to https://github.com/GoogleContainerTools/distroless for more details FROM gcr.io/distroless/static:nonroot diff --git a/Makefile b/Makefile index 72a9901..471e3a6 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,25 @@ +# +# Copyright Red Hat +# +# 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. + # Current Operator version VERSION ?= `cat $(PWD)/VERSION` # Default bundle image tag BUNDLE_IMG ?= quay.io/devfile/registry-operator-bundle:v$(VERSION) CERT_MANAGER_VERSION ?= v1.11.0 ENABLE_WEBHOOKS ?= true +ENABLE_WEBHOOK_HTTP2 ?= false # Options for 'bundle-build' ifneq ($(origin CHANNELS), undefined) @@ -43,6 +59,9 @@ K8S_CLI := kubectl endif endif +# operator-sdk +OPERATOR_SDK_CLI ?= operator-sdk + # Setting SHELL to bash allows bash commands to be executed by recipes. # This is a requirement for 'setup-envtest.sh' in the test target. @@ -100,11 +119,11 @@ test-integration: .PHONY: build manager manager: manifests generate fmt vet ## Build manager binary. - go build -o $(LOCALBIN)/manager ./cmd/main.go + go build -o $(LOCALBIN)/manager ./main.go .PHONY: run run: manifests generate fmt vet ## Run a controller from your host. - go run ./cmd/main.go + $(LOCALBIN)/manager .PHONY: manifests manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects. @@ -152,7 +171,8 @@ generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and # Build the docker image .PHONY: docker-build docker-build: - docker build . -t ${IMG} --build-arg ENABLE_WEBHOOKS=${ENABLE_WEBHOOKS} + docker build . -t ${IMG} --build-arg ENABLE_WEBHOOKS=${ENABLE_WEBHOOKS} \ +--build-arg ENABLE_WEBHOOK_HTTP2=${ENABLE_WEBHOOK_HTTP2} # Push the docker image .PHONY: docker-push @@ -177,6 +197,17 @@ docker-buildx: test ## Build and push docker image for the manager for cross-pla - docker buildx rm registry-operator-builder rm Dockerfile.cross +# Build the podman image +.PHONY: podman-build +podman-build: + podman build . -t ${IMG} --build-arg ENABLE_WEBHOOKS=${ENABLE_WEBHOOKS} + +# Push the podman image +.PHONY: podman-push +podman-push: + podman push ${IMG} + + .PHONY: install-cert install-cert: ## Install cert manager for webhooks $(K8S_CLI) apply -f https://github.com/cert-manager/cert-manager/releases/download/$(CERT_MANAGER_VERSION)/cert-manager.yaml @@ -226,10 +257,10 @@ $(ENVTEST): $(LOCALBIN) # Generate bundle manifests and metadata, then validate generated files. .PHONY: bundle bundle: manifests - operator-sdk generate kustomize manifests -q + $(OPERATOR_SDK_CLI) generate kustomize manifests -q cd config/manager && $(KUSTOMIZE) edit set image controller=$(IMG) - $(KUSTOMIZE) build config/manifests | operator-sdk generate bundle -q --overwrite --version $(VERSION) $(BUNDLE_METADATA_OPTS) - operator-sdk bundle validate ./bundle + $(KUSTOMIZE) build config/manifests | $(OPERATOR_SDK_CLI) generate bundle -q --overwrite --version $(VERSION) $(BUNDLE_METADATA_OPTS) + $(OPERATOR_SDK_CLI) bundle validate ./bundle # Build the bundle image. .PHONY: bundle-build diff --git a/README.md b/README.md index 9e0d3d6..6a5f41a 100644 --- a/README.md +++ b/README.md @@ -69,11 +69,13 @@ Some of the rules supported by the makefile: |rule|purpose| |---|---| -| controller-gen | install the controll-gen tool, used by other commands | +| controller-gen | install the controller-gen tool, used by other commands | | kustomize | install the kustomize tool, used by other commands | -| docker-build | build registry operator docker image | -| docker-push | push registry operator docker image | -| docker-buildx | build & push registry operator docker image for all supported architectures \(**does not work with podman**\) | +| docker-build | build registry operator container image using docker | +| docker-push | push registry operator container image using docker | +| docker-buildx | build & push registry operator docker image for all supported architectures | +| podman-build | build registry operator container image using podman | +| podman-push | push registry operator container image using podman | | deploy | deploy operator to cluster | | undeploy | undeploy operator from cluster | | install | create the devfile registry CRDs on the cluster | @@ -96,11 +98,12 @@ To see all rules supported by the makefile, run `make help` To run integration tests for the operator, run `make test-integration`. -The `oc` executable must be accessible. +One of the `oc` or `kubectl` executables must be accessible. If both are present in your path, `oc` will be used, except if you +define the environment variable `K8S_CLI` with the command you prefer to use. By default, the tests will use the default image for the operator, `quay.io/devfile/registry-operator:next`. -You can use `make docker-build` to build your own image, `make docker-push` to publish it. Then, to use your own image, run: +You can use `make -build` to build your own image, `make -push` to publish it - Replace `` with `podman` or `docker`. Then, to use your own image, run: ``` IMG= make test-integration diff --git a/VERSION b/VERSION index 7693c96..341cf11 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.3 \ No newline at end of file +0.2.0 \ No newline at end of file diff --git a/add_licenses.sh b/add_licenses.sh index d116872..bb50412 100755 --- a/add_licenses.sh +++ b/add_licenses.sh @@ -1,5 +1,5 @@ #!/bin/bash -# + # # Copyright Red Hat # diff --git a/bundle.Dockerfile b/bundle.Dockerfile index 016d9ff..7521e07 100644 --- a/bundle.Dockerfile +++ b/bundle.Dockerfile @@ -1,3 +1,17 @@ +# +# Copyright Red Hat +# +# 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. FROM scratch # Core bundle labels. diff --git a/bundle/manifests/registry-operator.clusterserviceversion.yaml b/bundle/manifests/registry-operator.clusterserviceversion.yaml index e2bb4c7..9674785 100644 --- a/bundle/manifests/registry-operator.clusterserviceversion.yaml +++ b/bundle/manifests/registry-operator.clusterserviceversion.yaml @@ -49,15 +49,15 @@ metadata: ] capabilities: Basic Install categories: OpenShift Optional,Developer Tools - containerImage: quay.io/devfile/registry-operator:v0.1.3 - createdAt: "2023-10-11T20:03:38Z" + containerImage: quay.io/devfile/registry-operator:v0.2.0 + createdAt: "2023-11-20T18:36:27Z" description: Deploy and manage Devfile Registries on Kubernetes and OpenShift with the Devfile Registry operator. operators.operatorframework.io/builder: operator-sdk-v1.28.0 operators.operatorframework.io/project_layout: go.kubebuilder.io/v3 repository: https://github.com/devfile/registry-operator support: Red Hat - name: registry-operator.v0.1.3 + name: registry-operator.v0.2.0 namespace: placeholder spec: apiservicedefinitions: {} @@ -239,181 +239,13 @@ spec: description: "A devfile registry is a service that stores and provides devfile stacks to Kubernetes developer tools like `odo`, Eclipse Che, and the OpenShift Developer Console. Using this\noperator you can deploy and manage devfile registries on - Kubernetes and OpenShift.\n\nBasic usage:\n ```\n apiVersion: registry.devfile.io/v1alpha1\n - \ kind: DevfileRegistry\n metadata:\n name: sample-devfileregistry\n spec:\n - \ devfileIndex: \n image: quay.io/devfile/devfile-index:next\n ```\n\nFor - more on setup and usage see our [README](https://github.com/devfile/registry-operator/blob/main/README.md)." + Kubernetes and OpenShift.\n\nBasic usage:\n```\napiVersion: registry.devfile.io/v1alpha1\n + \ kind: DevfileRegistry\nmetadata:\n name: sample-devfileregistry\nspec:\n devfileIndex: + \n image: quay.io/devfile/devfile-index:next\n```\n\nFor more on setup and + usage see our [README](https://github.com/devfile/registry-operator/blob/main/README.md)." displayName: Devfile Registry Operator icon: - - base64data: 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 + - base64data: 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 mediatype: image/png install: spec: @@ -589,7 +421,8 @@ spec: - --upstream=http://127.0.0.1:8080/ - --logtostderr=true - --v=10 - image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 + - --http2-disable=true + image: gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0 name: kube-rbac-proxy ports: - containerPort: 8443 @@ -615,7 +448,7 @@ spec: - --leader-elect command: - /manager - image: quay.io/devfile/registry-operator:v0.1.3 + image: quay.io/devfile/registry-operator:v0.2.0 imagePullPolicy: Always livenessProbe: httpGet: @@ -736,7 +569,7 @@ spec: provider: name: Red Hat url: https://redhat.com - version: 0.1.3 + version: 0.2.0 webhookdefinitions: - admissionReviewVersions: - v1 diff --git a/check_version.sh b/check_version.sh new file mode 100644 index 0000000..ddd393d --- /dev/null +++ b/check_version.sh @@ -0,0 +1,117 @@ +#!/bin/bash + +# +# Copyright Red Hat +# +# 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. + +CACHED_CSV_VERSION=${CACHED_CSV_VERSION:-'.cache/csv_version.txt'} +CACHED_CSV_CONTAINER_IMAGE_TAG=${CACHED_CSV_CONTAINER_IMAGE_TAG:-'.cache/csv_container_image_tag.txt'} +CACHED_CSV_NAME_TAG=${CACHED_CSV_NAME_TAG:-'.cache/csv_name_tag.txt'} +CACHED_BUNDLE_VERSION=${CACHED_BUNDLE_VERSION:-'.cache/bundle_version.txt'} +CACHED_BUNDLE_CONTAINER_IMAGE_TAG=${CACHED_BUNDLE_CONTAINER_IMAGE_TAG:-'.cache/bundle_container_image_tag.txt'} +CACHED_BUNDLE_NAME_TAG=${CACHED_BUNDLE_NAME_TAG:-'.cache/bundle_name_tag.txt'} +CACHED_MANAGER_IMAGE_TAG=${CACHED_MANAGER_IMAGE_TAG:-'.cache/manager_image_tag.txt'} + +version_number=$(cat ./VERSION) +version_label="v${version_number}" +failed="false" + +if [[ ! "${version_number}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ ! "${version_number}" =~ ^[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+$ ]] +then + echo "invalid version '${version_number}' under VERSION file, should be [0-9]+.[0-9]+.[0-9]+ or [0-9]+.[0-9]+.[0-9]+-rc.[0-9]+" + exit 1 +fi + +if [ "${CI}" != "true" ] +then + if [ -z $(command -v yq) ] && [ -z $(command -v ${YQ_CLI}) ] + then + echo "This script requires the yq tool." + exit 1 + fi + + # Make cache directory if not exists + mkdir -p .cache/ + + # Export variables + export CACHED_CSV_VERSION + export CACHED_CSV_CONTAINER_IMAGE_TAG + export CACHED_CSV_NAME_TAG + export CACHED_BUNDLE_VERSION + export CACHED_BUNDLE_CONTAINER_IMAGE_TAG + export CACHED_BUNDLE_NAME_TAG + export CACHED_MANAGER_IMAGE_TAG + + # Read references to release version under project files and cache them for checks + bash .ci/cache_version_tags.sh + if [ $? -ne 0 ] + then + exit 1 + fi +fi + +# error on unset variables +set -u + +## Check if all references to the release version match ## + +if [ "${version_label}" != "v$(cat ${CACHED_CSV_VERSION})" ] +then + echo "Release tag does not match csv version: release tag = ${version_label}, csv version = v$(cat ${CACHED_CSV_VERSION})" + failed="true" +fi + +if [ "${version_label}" != "$(cat ${CACHED_CSV_CONTAINER_IMAGE_TAG})" ] +then + echo "Release tag does not match csv container image tag: release tag = ${version_label}, csv container image tag = $(cat ${CACHED_CSV_CONTAINER_IMAGE_TAG})" + failed="true" +fi + +if [ "${version_label}" != "$(cat ${CACHED_CSV_NAME_TAG})" ] +then + echo "Release tag does not match csv name tag: release tag = ${version_label}, csv name tag = $(cat ${CACHED_CSV_NAME_TAG})" + failed="true" +fi + +if [ "${version_label}" != "v$(cat ${CACHED_BUNDLE_VERSION})" ] +then + echo "Release tag does not match bundle version: release tag = ${version_label}, bundle version = v$(cat ${CACHED_BUNDLE_VERSION})" + failed="true" +fi + +if [ "${version_label}" != "$(cat ${CACHED_BUNDLE_CONTAINER_IMAGE_TAG})" ] +then + echo "Release tag does not match bundle container image tag: release tag = ${version_label}, bundle container image tag = $(cat ${CACHED_BUNDLE_CONTAINER_IMAGE_TAG})" + failed="true" +fi + +if [ "${version_label}" != "$(cat ${CACHED_BUNDLE_NAME_TAG})" ] +then + echo "Release tag does not match bundle name tag: release tag = ${version_label}, bundle name tag = $(cat ${CACHED_BUNDLE_NAME_TAG})" + failed="true" +fi + +if [ "${version_label}" != "$(cat ${CACHED_MANAGER_IMAGE_TAG})" ] +then + echo "Release tag does not match manager image tag: release tag = ${version_label}, manager image tag = $(cat ${CACHED_MANAGER_IMAGE_TAG})" + failed="true" +fi + +if [ ${failed} == "true" ] +then + echo "One or more checks failed!" + exit 1 +else + echo "All version tags match!" +fi diff --git a/config/default/manager_auth_proxy_patch.yaml b/config/default/manager_auth_proxy_patch.yaml index 91d442d..39b81b6 100644 --- a/config/default/manager_auth_proxy_patch.yaml +++ b/config/default/manager_auth_proxy_patch.yaml @@ -16,12 +16,13 @@ spec: drop: ["ALL"] seccompProfile: type: "RuntimeDefault" - image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 + image: gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0 args: - "--secure-listen-address=0.0.0.0:8443" - "--upstream=http://127.0.0.1:8080/" - "--logtostderr=true" - "--v=10" + - "--http2-disable=true" ports: - containerPort: 8443 protocol: TCP diff --git a/config/manager/kustomization.yaml b/config/manager/kustomization.yaml index 9d4f89b..b8376ad 100644 --- a/config/manager/kustomization.yaml +++ b/config/manager/kustomization.yaml @@ -15,4 +15,4 @@ kind: Kustomization images: - name: controller newName: quay.io/devfile/registry-operator - newTag: next + newTag: v0.2.0 diff --git a/config/manifests/bases/registry-operator.clusterserviceversion.yaml b/config/manifests/bases/registry-operator.clusterserviceversion.yaml index 939f549..e5555b8 100644 --- a/config/manifests/bases/registry-operator.clusterserviceversion.yaml +++ b/config/manifests/bases/registry-operator.clusterserviceversion.yaml @@ -49,13 +49,13 @@ metadata: ] capabilities: Basic Install categories: OpenShift Optional,Developer Tools - containerImage: quay.io/devfile/registry-operator:v0.1.3 + containerImage: quay.io/devfile/registry-operator:v0.2.0 createdAt: "2023-09-06T19:45:06Z" description: Deploy and manage Devfile Registries on Kubernetes and OpenShift with the Devfile Registry operator. repository: https://github.com/devfile/registry-operator support: Red Hat - name: registry-operator.v0.1.3 + name: registry-operator.v0.2.0 namespace: placeholder spec: apiservicedefinitions: {} @@ -237,181 +237,13 @@ spec: description: "A devfile registry is a service that stores and provides devfile stacks to Kubernetes developer tools like `odo`, Eclipse Che, and the OpenShift Developer Console. Using this\noperator you can deploy and manage devfile registries on - Kubernetes and OpenShift.\n\nBasic usage:\n ```\n apiVersion: registry.devfile.io/v1alpha1\n - \ kind: DevfileRegistry\n metadata:\n name: sample-devfileregistry\n spec:\n - \ devfileIndex: \n image: quay.io/devfile/devfile-index:next\n ```\n\nFor - more on setup and usage see our [README](https://github.com/devfile/registry-operator/blob/main/README.md)." + Kubernetes and OpenShift.\n\nBasic usage:\n```\napiVersion: registry.devfile.io/v1alpha1\n + \ kind: DevfileRegistry\nmetadata:\n name: sample-devfileregistry\nspec:\n devfileIndex: + \n image: quay.io/devfile/devfile-index:next\n```\n\nFor more on setup and + usage see our [README](https://github.com/devfile/registry-operator/blob/main/README.md)." displayName: Devfile Registry Operator icon: - - base64data: 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 + - base64data: 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 mediatype: image/png install: spec: @@ -457,4 +289,4 @@ spec: provider: name: Red Hat url: https://redhat.com - version: 0.1.3 + version: 0.2.0 diff --git a/go.mod b/go.mod index 131dd17..129ea25 100644 --- a/go.mod +++ b/go.mod @@ -7,16 +7,16 @@ require ( github.com/devfile/registry-support/registry-library v0.0.0-20230327144043-0f64fa10dd3d github.com/go-logr/logr v1.2.3 github.com/hashicorp/go-multierror v1.1.1 - github.com/onsi/ginkgo/v2 v2.6.0 - github.com/onsi/gomega v1.24.1 + github.com/onsi/ginkgo/v2 v2.9.1 + github.com/onsi/gomega v1.27.4 github.com/openshift/api v0.0.0-20221013123532-e8b83ffadbab github.com/stretchr/testify v1.8.1 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.26.2 - k8s.io/apiextensions-apiserver v0.26.1 - k8s.io/apimachinery v0.26.2 - k8s.io/client-go v0.26.2 - sigs.k8s.io/controller-runtime v0.14.5 + k8s.io/api v0.26.10 + k8s.io/apiextensions-apiserver v0.26.10 + k8s.io/apimachinery v0.27.7 + k8s.io/client-go v0.26.10 + sigs.k8s.io/controller-runtime v0.14.7 ) require ( @@ -36,16 +36,18 @@ require ( github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-logr/zapr v1.2.3 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.20.0 // indirect - github.com/go-openapi/swag v0.19.14 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.1 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.2.0 // indirect + github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect + github.com/google/uuid v1.3.0 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-version v1.4.0 // indirect @@ -53,7 +55,7 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.13.6 // indirect - github.com/mailru/easyjson v0.7.6 // indirect + github.com/mailru/easyjson v0.7.7 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/moby/locker v1.0.1 // indirect github.com/moby/term v0.0.0-20221205130635-1aeaba878587 // indirect @@ -69,18 +71,20 @@ require ( github.com/prometheus/client_model v0.3.0 // indirect github.com/prometheus/common v0.39.0 // indirect github.com/prometheus/procfs v0.8.0 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/sirupsen/logrus v1.9.0 // indirect github.com/spf13/pflag v1.0.5 // indirect go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/net v0.8.0 // indirect + golang.org/x/net v0.17.0 // indirect golang.org/x/oauth2 v0.3.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/term v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.7.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 // indirect @@ -88,12 +92,12 @@ require ( google.golang.org/protobuf v1.28.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.26.1 // indirect - k8s.io/klog/v2 v2.80.1 // indirect - k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect - k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect + k8s.io/component-base v0.26.10 // indirect + k8s.io/klog/v2 v2.90.1 // indirect + k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect + k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect oras.land/oras-go v1.2.2 // indirect - sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index cd47b68..dcb3980 100644 --- a/go.sum +++ b/go.sum @@ -407,24 +407,27 @@ github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= -github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= +github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= @@ -519,12 +522,15 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= @@ -630,8 +636,8 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -647,8 +653,9 @@ github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -725,8 +732,8 @@ github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0 github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= -github.com/onsi/ginkgo/v2 v2.6.0/go.mod h1:63DOGlLAH8+REH8jUGdL3YpCpu7JODesutUjdENfUAc= +github.com/onsi/ginkgo/v2 v2.9.1 h1:zie5Ly042PD3bsCvsSOPvRnFwyo3rKe64TJlD6nu0mk= +github.com/onsi/ginkgo/v2 v2.9.1/go.mod h1:FEcmzVcCHl+4o9bQZVab+4dC9+j+91t2FHSzmGAPfuo= github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -736,8 +743,8 @@ github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoT github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/onsi/gomega v1.14.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= -github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= -github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM= +github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E= +github.com/onsi/gomega v1.27.4/go.mod h1:riYq/GJKh8hhoM01HN6Vmuy93AarCXCBGpvFDK3q3fQ= github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -829,6 +836,8 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= @@ -989,7 +998,7 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= 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= @@ -1082,8 +1091,8 @@ golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220107192237-5cfca573fb4d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= 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= @@ -1208,13 +1217,13 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1224,8 +1233,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1300,6 +1309,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= 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= @@ -1490,19 +1501,19 @@ k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= k8s.io/api v0.21.3/go.mod h1:hUgeYHUbBp23Ue4qdX9tR8/ANi/g3ehylAqDn9NWVOg= k8s.io/api v0.22.1/go.mod h1:bh13rkTp3F1XEaLGykbyRD2QaTTzPm0e/BMd8ptFONY= -k8s.io/api v0.26.2 h1:dM3cinp3PGB6asOySalOZxEG4CZ0IAdJsrYZXE/ovGQ= -k8s.io/api v0.26.2/go.mod h1:1kjMQsFE+QHPfskEcVNgL3+Hp88B80uj0QtSOlj8itU= +k8s.io/api v0.26.10 h1:skTnrDR0r8dg4MMLf6YZIzugxNM0BjFsWKPkNc5kOvk= +k8s.io/api v0.26.10/go.mod h1:ou/H3yviqrHtP/DSPVTfsc7qNfmU06OhajytJfYXkXw= k8s.io/apiextensions-apiserver v0.21.3/go.mod h1:kl6dap3Gd45+21Jnh6utCx8Z2xxLm8LGDkprcd+KbsE= -k8s.io/apiextensions-apiserver v0.26.1 h1:cB8h1SRk6e/+i3NOrQgSFij1B2S0Y0wDoNl66bn8RMI= -k8s.io/apiextensions-apiserver v0.26.1/go.mod h1:AptjOSXDGuE0JICx/Em15PaoO7buLwTs0dGleIHixSM= +k8s.io/apiextensions-apiserver v0.26.10 h1:wAriTUc6l7gUqJKOxhmXnYo/VNJzk4oh4QLCUR4Uq+k= +k8s.io/apiextensions-apiserver v0.26.10/go.mod h1:N2qhlxkhJLSoC4f0M1/1lNG627b45SYqnOPEVFoQXw4= k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= k8s.io/apimachinery v0.21.3/go.mod h1:H/IM+5vH9kZRNJ4l3x/fXP/5bOPJaVP/guptnZPeCFI= k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= -k8s.io/apimachinery v0.26.2 h1:da1u3D5wfR5u2RpLhE/ZtZS2P7QvDgLZTi9wrNZl/tQ= -k8s.io/apimachinery v0.26.2/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= +k8s.io/apimachinery v0.27.7 h1:Gxgtb7Y/Rsu8ymgmUEaiErkxa6RY4oTd8kNUI6SUR58= +k8s.io/apimachinery v0.27.7/go.mod h1:jBGQgTjkw99ef6q5hv1YurDd3BqKDk9YRxmX0Ozo0i8= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= @@ -1511,8 +1522,8 @@ k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= k8s.io/client-go v0.21.3/go.mod h1:+VPhCgTsaFmGILxR/7E1N0S+ryO010QBeNCv5JwRGYU= -k8s.io/client-go v0.26.2 h1:s1WkVujHX3kTp4Zn4yGNFK+dlDXy1bAAkIl+cFAiuYI= -k8s.io/client-go v0.26.2/go.mod h1:u5EjOuSyBa09yqqyY7m3abZeovO/7D/WehVVlZ2qcqU= +k8s.io/client-go v0.26.10 h1:4mDzl+1IrfRxh4Ro0s65JRGJp14w77gSMUTjACYWVRo= +k8s.io/client-go v0.26.10/go.mod h1:sh74ig838gCckU4ElYclWb24lTesPdEDPnlyg5vcbkA= k8s.io/code-generator v0.19.0/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= k8s.io/code-generator v0.21.3/go.mod h1:K3y0Bv9Cz2cOW2vXUrNZlFbflhuPvuadW6JdnN6gGKo= @@ -1521,8 +1532,8 @@ k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeY k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= k8s.io/component-base v0.21.3/go.mod h1:kkuhtfEHeZM6LkX0saqSK8PbdO7A0HigUngmhhrwfGQ= -k8s.io/component-base v0.26.1 h1:4ahudpeQXHZL5kko+iDHqLj/FSGAEUnSVO0EBbgDd+4= -k8s.io/component-base v0.26.1/go.mod h1:VHrLR0b58oC035w6YQiBSbtsf0ThuSwXP+p5dD/kAWU= +k8s.io/component-base v0.26.10 h1:vl3Gfe5aC09mNxfnQtTng7u3rnBVrShOK3MAkqEleb0= +k8s.io/component-base v0.26.10/go.mod h1:/IDdENUHG5uGxqcofZajovYXE9KSPzJ4yQbkYQt7oN0= k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= @@ -1537,19 +1548,19 @@ k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= +k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E= -k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210722164352-7f3ee0f31471/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= -k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY= +k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= oras.land/oras-go v1.1.0/go.mod h1:1A7vR/0KknT2UkJVWh+xMi95I/AhK8ZrxrnUSmXN0bQ= oras.land/oras-go v1.2.2 h1:0E9tOHUfrNH7TCDk5KU0jVBEzCqbfdyuVfGmJ7ZeRPE= oras.land/oras-go v1.2.2/go.mod h1:Apa81sKoZPpP7CDciE006tSZ0x3Q3+dOoBcMZ/aNxvw= @@ -1560,10 +1571,10 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyz sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.19/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/controller-runtime v0.9.5/go.mod h1:q6PpkM5vqQubEKUKOM6qr06oXGzOBcCby1DA9FbyZeA= -sigs.k8s.io/controller-runtime v0.14.5 h1:6xaWFqzT5KuAQ9ufgUaj1G/+C4Y1GRkhrxl+BJ9i+5s= -sigs.k8s.io/controller-runtime v0.14.5/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/controller-runtime v0.14.7 h1:Vrnm2vk9ZFlRkXATHz0W0wXcqNl7kPat8q2JyxVy0Q8= +sigs.k8s.io/controller-runtime v0.14.7/go.mod h1:ErTs3SJCOujNUnTz4AS+uh8hp6DHMo1gj6fFndJT1X8= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= diff --git a/main.go b/main.go index b8ec491..bbe2754 100644 --- a/main.go +++ b/main.go @@ -17,6 +17,7 @@ package main import ( + "crypto/tls" "flag" "os" @@ -117,6 +118,22 @@ func main() { setupLog.Error(err, "unable to create webhook", "webhook", "ClusterDevfileRegistriesList") os.Exit(1) } + + // Retrieve the option to enable HTTP2 on the Webhook server + enableWebhookHTTP2 := os.Getenv("ENABLE_WEBHOOK_HTTP2") + if enableWebhookHTTP2 == "" { + enableWebhookHTTP2 = "false" + } + + if enableWebhookHTTP2 == "false" { + setupLog.Info("disabling http/2 on the webhook server") + server := mgr.GetWebhookServer() + server.TLSOpts = append(server.TLSOpts, + func(c *tls.Config) { + c.NextProtos = []string{"http/1.1"} + }, + ) + } } // +kubebuilder:scaffold:builder diff --git a/registry.yaml b/registry.yaml index f9b9216..a88b9b8 100644 --- a/registry.yaml +++ b/registry.yaml @@ -1,3 +1,17 @@ +# +# Copyright Red Hat +# +# 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. apiVersion: registry.devfile.io/v1alpha1 kind: DevfileRegistry metadata: diff --git a/samples/clusterregistrieslist.yaml b/samples/clusterregistrieslist.yaml index 2bff24d..4bd122c 100644 --- a/samples/clusterregistrieslist.yaml +++ b/samples/clusterregistrieslist.yaml @@ -1,3 +1,17 @@ +# +# Copyright Red Hat +# +# 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. apiVersion: registry.devfile.io/v1alpha1 kind: ClusterDevfileRegistriesList metadata: diff --git a/samples/devfileregistrieslist.yaml b/samples/devfileregistrieslist.yaml index 2bdecad..621f2b2 100644 --- a/samples/devfileregistrieslist.yaml +++ b/samples/devfileregistrieslist.yaml @@ -1,3 +1,17 @@ +# +# Copyright Red Hat +# +# 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. apiVersion: registry.devfile.io/v1alpha1 kind: DevfileRegistriesList metadata: diff --git a/samples/registry-k8s.yaml b/samples/registry-k8s.yaml index 2cdddbf..d72799f 100644 --- a/samples/registry-k8s.yaml +++ b/samples/registry-k8s.yaml @@ -1,3 +1,17 @@ +# +# Copyright Red Hat +# +# 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. apiVersion: registry.devfile.io/v1alpha1 kind: DevfileRegistry metadata: diff --git a/samples/registry-no-storage.yaml b/samples/registry-no-storage.yaml index c5b61ee..969f9f8 100644 --- a/samples/registry-no-storage.yaml +++ b/samples/registry-no-storage.yaml @@ -1,3 +1,17 @@ +# +# Copyright Red Hat +# +# 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. apiVersion: registry.devfile.io/v1alpha1 kind: DevfileRegistry metadata: diff --git a/samples/registry.yaml b/samples/registry.yaml index 728f44b..080426f 100644 --- a/samples/registry.yaml +++ b/samples/registry.yaml @@ -1,3 +1,17 @@ +# +# Copyright Red Hat +# +# 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. apiVersion: registry.devfile.io/v1alpha1 kind: DevfileRegistry metadata: diff --git a/tests/integration/pkg/client/client.go b/tests/integration/pkg/client/client.go index 565aeb2..2026341 100644 --- a/tests/integration/pkg/client/client.go +++ b/tests/integration/pkg/client/client.go @@ -17,8 +17,10 @@ package client import ( + "errors" "fmt" "os" + "os/exec" "k8s.io/client-go/kubernetes" "sigs.k8s.io/controller-runtime/pkg/client" @@ -28,6 +30,7 @@ import ( type K8sClient struct { kubeClient *kubernetes.Clientset controllerClient client.Client + cli string } // NewK8sClient creates kubernetes client wrapper with helper functions and direct access to k8s go client @@ -49,6 +52,12 @@ func NewK8sClient() (*K8sClient, error) { } h := &K8sClient{kubeClient: kubeClient, controllerClient: controllerClient} + + h.cli, err = findCLI() + if err != nil { + fmt.Println("failed to find oc or kubectl cli") + os.Exit(1) + } return h, nil } @@ -56,3 +65,20 @@ func NewK8sClient() (*K8sClient, error) { func (c *K8sClient) Kube() kubernetes.Interface { return c.kubeClient } + +// findCLI returns the first found CLI compatible with oc/kubectl +func findCLI() (string, error) { + selected := os.Getenv("K8S_CLI") + if selected != "" { + return selected, nil + } + for _, cli := range []string{"oc", "kubectl"} { + _, err := exec.LookPath(cli) + if err != nil { + continue + } + return cli, nil + } + + return "", errors.New("no oc/kubectl CLI found") +} diff --git a/tests/integration/pkg/client/oc.go b/tests/integration/pkg/client/oc.go index 6716655..ee990c3 100644 --- a/tests/integration/pkg/client/oc.go +++ b/tests/integration/pkg/client/oc.go @@ -24,9 +24,9 @@ import ( "github.com/devfile/registry-operator/tests/integration/pkg/config" ) -// OcApplyResource applies resources on the cluster, corresponding to the specified file(s) -func (w *K8sClient) OcApplyResource(filePath string) (err error) { - cmd := exec.Command("oc", "apply", "--namespace", config.Namespace, "-f", filePath) +// ApplyResource applies resources on the cluster, corresponding to the specified file(s) +func (w *K8sClient) ApplyResource(filePath string) (err error) { + cmd := exec.Command(w.cli, "apply", "--namespace", config.Namespace, "-f", filePath) outBytes, err := cmd.CombinedOutput() output := string(outBytes) if err != nil && !strings.Contains(output, "AlreadyExists") { @@ -35,9 +35,9 @@ func (w *K8sClient) OcApplyResource(filePath string) (err error) { return err } -// OcDeleteResource deletes the resources from the cluster that the specified file(s) correspond to -func (w *K8sClient) OcDeleteResource(filePath string) (err error) { - cmd := exec.Command("oc", "delete", "--namespace", config.Namespace, "-f", filePath) +// DeleteResource deletes the resources from the cluster that the specified file(s) correspond to +func (w *K8sClient) DeleteResource(filePath string) (err error) { + cmd := exec.Command(w.cli, "delete", "--namespace", config.Namespace, "-f", filePath) outBytes, err := cmd.CombinedOutput() output := string(outBytes) if err != nil && !strings.Contains(output, "AlreadyExists") { @@ -48,7 +48,7 @@ func (w *K8sClient) OcDeleteResource(filePath string) (err error) { // CurlEndpointInContainer execs into the given container in the pod and uses curl to hit the specified endpoint func (w *K8sClient) CurlEndpointInContainer(pod string, container string, endpoint string) (string, error) { - cmd := exec.Command("oc", "exec", pod, "--namespace", config.Namespace, "-c", container, "--", "curl", endpoint) + cmd := exec.Command(w.cli, "exec", pod, "--namespace", config.Namespace, "-c", container, "--", "curl", endpoint) outBytes, err := cmd.CombinedOutput() output := string(outBytes) return output, err diff --git a/tests/integration/pkg/tests/devfileregistry_tests.go b/tests/integration/pkg/tests/devfileregistry_tests.go index 2fe3603..8e18ba9 100644 --- a/tests/integration/pkg/tests/devfileregistry_tests.go +++ b/tests/integration/pkg/tests/devfileregistry_tests.go @@ -37,7 +37,7 @@ var _ = ginkgo.Describe("[Create Devfile Registry resource]", func() { label := "devfileregistry_cr=" + crName // Deploy the devfileregistry resource for this test case and wait for the pod to be running - err := K8sClient.OcApplyResource("tests/integration/examples/create/devfileregistry.yaml") + err := K8sClient.ApplyResource("tests/integration/examples/create/devfileregistry.yaml") if err != nil { ginkgo.Fail("Failed to create devfileregistry instance: " + err.Error()) return @@ -82,7 +82,7 @@ var _ = ginkgo.Describe("[Create Devfile Registry resource]", func() { }) var _ = ginkgo.AfterEach(func() { - K8sClient.OcDeleteResource("tests/integration/examples/create/devfileregistry.yaml") + K8sClient.DeleteResource("tests/integration/examples/create/devfileregistry.yaml") }) }) @@ -92,7 +92,7 @@ var _ = ginkgo.Describe("[Create Devfile Registry resource with TLS enabled]", f label := "devfileregistry_cr=" + crName // Deploy the devfileregistry resource for this test case and wait for the pod to be running - err := K8sClient.OcApplyResource("tests/integration/examples/create/devfileregistry-tls.yaml") + err := K8sClient.ApplyResource("tests/integration/examples/create/devfileregistry-tls.yaml") if err != nil { ginkgo.Fail("Failed to create devfileregistry instance: " + err.Error()) return @@ -117,7 +117,7 @@ var _ = ginkgo.Describe("[Create Devfile Registry resource with TLS enabled]", f }) var _ = ginkgo.AfterEach(func() { - K8sClient.OcDeleteResource("tests/integration/examples/create/devfileregistry-tls.yaml") + K8sClient.DeleteResource("tests/integration/examples/create/devfileregistry-tls.yaml") }) }) @@ -127,7 +127,7 @@ var _ = ginkgo.Describe("[Create Devfile Registry resource with headless enabled label := "devfileregistry_cr=" + crName // Deploy the devfileregistry resource for this test case and wait for the pod to be running - err := K8sClient.OcApplyResource("tests/integration/examples/create/devfileregistry-headless.yaml") + err := K8sClient.ApplyResource("tests/integration/examples/create/devfileregistry-headless.yaml") if err != nil { ginkgo.Fail("Failed to create devfileregistry instance: " + err.Error()) return @@ -159,7 +159,7 @@ var _ = ginkgo.Describe("[Create Devfile Registry resource with headless enabled }) var _ = ginkgo.AfterEach(func() { - K8sClient.OcDeleteResource("tests/integration/examples/create/devfileregistry-headless.yaml") + K8sClient.DeleteResource("tests/integration/examples/create/devfileregistry-headless.yaml") }) }) @@ -169,7 +169,7 @@ var _ = ginkgo.Describe("[Update Devfile Registry resource]", func() { label := "devfileregistry_cr=" + crName // Deploy the devfileregistry resource for this test case and wait for the pod to be running - err := K8sClient.OcApplyResource("tests/integration/examples/update/devfileregistry-old.yaml") + err := K8sClient.ApplyResource("tests/integration/examples/update/devfileregistry-old.yaml") if err != nil { ginkgo.Fail("Failed to create devfileregistry instance: " + err.Error()) return @@ -189,7 +189,7 @@ var _ = ginkgo.Describe("[Update Devfile Registry resource]", func() { // Update the devfileregistry resource for this test case fmt.Printf("Applying update...") - err = K8sClient.OcApplyResource("tests/integration/examples/update/devfileregistry-new.yaml") + err = K8sClient.ApplyResource("tests/integration/examples/update/devfileregistry-new.yaml") if err != nil { ginkgo.Fail("Failed to create devfileregistry instance: " + err.Error()) return @@ -225,7 +225,7 @@ var _ = ginkgo.Describe("[Update Devfile Registry resource]", func() { }) var _ = ginkgo.AfterEach(func() { - K8sClient.OcDeleteResource("tests/integration/examples/update/devfileregistry-new.yaml") + K8sClient.DeleteResource("tests/integration/examples/update/devfileregistry-new.yaml") }) })