diff --git a/.github/workflows/release-next-catalog-and-operator-image.yaml b/.github/workflows/release-next-catalog-and-operator-image.yaml
index 60a37926c..aba80409d 100644
--- a/.github/workflows/release-next-catalog-and-operator-image.yaml
+++ b/.github/workflows/release-next-catalog-and-operator-image.yaml
@@ -78,8 +78,10 @@ jobs:
registry: quay.io
- name: Build catalog source
run: |
- ${GITHUB_WORKSPACE}/build/scripts/release/addDigests.sh -s $(make csv-path CHANNEL=next) -t next
- ${GITHUB_WORKSPACE}/build/scripts/olm/release-catalog.sh \
+ ./build/scripts/release/editors-definitions.sh add-env-vars
+ make update-dev-resources
+ ./build/scripts/release/addDigests.sh -s $(make csv-path CHANNEL=next) -t next
+ ./build/scripts/olm/release-catalog.sh \
--channel next \
--catalog-image quay.io/eclipse/eclipse-che-olm-catalog:next-digest \
--bundle-image quay.io/eclipse/eclipse-che-olm-bundle:$(make bundle-version CHANNEL=next)-digest
diff --git a/Dockerfile b/Dockerfile
index e7e39d81d..eb52f6017 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -37,11 +37,11 @@ COPY go.sum go.sum
# Copy the go source
COPY main.go main.go
COPY vendor/ vendor/
-COPY mocks/ mocks/
COPY api/ api/
COPY config/ config/
COPY controllers/ controllers/
COPY pkg/ pkg/
+COPY editors-definitions /tmp/editors-definitions
# build operator
# to test FIPS compliance, run https://github.com/openshift/check-payload#scan-a-container-or-operator-image against a built image
@@ -53,6 +53,7 @@ RUN export ARCH="$(uname -m)" && if [[ ${ARCH} == "x86_64" ]]; then export ARCH=
FROM registry.access.redhat.com/ubi8-minimal:8.9-1161
COPY --from=builder /tmp/header-rewrite-traefik-plugin /tmp/header-rewrite-traefik-plugin
+COPY --from=builder /tmp/editors-definitions /tmp/editors-definitions
COPY --from=builder /che-operator/che-operator /manager
ENTRYPOINT ["/manager"]
diff --git a/Makefile b/Makefile
index 1fa7b687f..8200b666e 100644
--- a/Makefile
+++ b/Makefile
@@ -359,7 +359,7 @@ genenerate-env:
cat $(BASH_ENV_FILE)
install-che-operands: SHELL := /bin/bash
-install-che-operands: generate manifests download-kustomize download-gateway-resources
+install-che-operands: generate manifests download-kustomize download-gateway-resources copy-editors-definitions
echo "[INFO] Running on $(PLATFORM)"
if [[ ! "$$($(K8S_CLI) get checluster eclipse-che -n $(ECLIPSE_CHE_NAMESPACE) || false )" ]]; then
[[ $(PLATFORM) == "kubernetes" ]] && $(MAKE) install-certmgr
@@ -378,6 +378,12 @@ install-che-operands: generate manifests download-kustomize download-gateway-res
$(MAKE) store_tls_cert
$(MAKE) create-checluster-cr
+
+# Copy editors definitions to /tmp/editors-definitions
+copy-editors-definitions:
+ mkdir -p /tmp/editors-definitions
+ cp -r $(PROJECT_DIR)/editors-definitions/* /tmp/editors-definitions
+
# Downloads Gateway resources
download-gateway-resources:
GATEWAY_RESOURCES=/tmp/header-rewrite-traefik-plugin
diff --git a/api/v1/zz_generated.deepcopy.go b/api/v1/zz_generated.deepcopy.go
index 8d63c87da..2dd04068f 100644
--- a/api/v1/zz_generated.deepcopy.go
+++ b/api/v1/zz_generated.deepcopy.go
@@ -2,7 +2,7 @@
// +build !ignore_autogenerated
//
-// Copyright (c) 2019-2023 Red Hat, Inc.
+// Copyright (c) 2019-2024 Red Hat, Inc.
// This program and the accompanying materials are made
// available under the terms of the Eclipse Public License 2.0
// which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/api/v2/zz_generated.deepcopy.go b/api/v2/zz_generated.deepcopy.go
index 981740202..a563f3ea2 100644
--- a/api/v2/zz_generated.deepcopy.go
+++ b/api/v2/zz_generated.deepcopy.go
@@ -2,7 +2,7 @@
// +build !ignore_autogenerated
//
-// Copyright (c) 2019-2023 Red Hat, Inc.
+// Copyright (c) 2019-2024 Red Hat, Inc.
// This program and the accompanying materials are made
// available under the terms of the Eclipse Public License 2.0
// which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/build/scripts/release/addDigests.sh b/build/scripts/release/addDigests.sh
index 1b8e1a572..763637be5 100755
--- a/build/scripts/release/addDigests.sh
+++ b/build/scripts/release/addDigests.sh
@@ -94,7 +94,7 @@ do
tagOrDigest="${source#*:}"
fi
- if [[ ${imageLabel} == "plugin-registry-image" ]] || [[ ${imageLabel} == "devfile-registry-image" ]]; then
+ if [[ ${imageLabel} == "devfile-registry-image" ]]; then
# Image tag could contains invalid for Env variable name characters, so let's encode it using base32.
# But alphabet of base32 uses one invalid for env variable name character '=' at the end of the line, so let's replace it by '_'.
# To recovery original tag should be done opposite actions: replace '_' to '=', and decode string using 'base32 -d'.
diff --git a/build/scripts/release/buildDigestMap.sh b/build/scripts/release/buildDigestMap.sh
index cecd58b1b..bfe09e861 100755
--- a/build/scripts/release/buildDigestMap.sh
+++ b/build/scripts/release/buildDigestMap.sh
@@ -50,13 +50,6 @@ setOperatorImage() {
OPERATOR_IMAGE=$(yq -r '.spec.install.spec.deployments[].spec.template.spec.containers[0].image' "${CSV}")
}
-setPluginRegistryList() {
- registry=$(yq -r '.spec.install.spec.deployments[].spec.template.spec.containers[].env[] | select(.name | test("RELATED_IMAGE_.*plugin_registry"; "g")) | .value' "${CSV}")
- setRegistryImages "${registry}"
-
- PLUGIN_REGISTRY_LIST=${registryImages}
-}
-
setDevfileRegistryList() {
registry=$(yq -r '.spec.install.spec.deployments[].spec.template.spec.containers[].env[] | select(.name | test("RELATED_IMAGE_.*devfile_registry"; "g")) | .value' "${CSV}")
@@ -150,9 +143,6 @@ setImagesFromDeploymentEnv
setOperatorImage
echo "${OPERATOR_IMAGE}"
-setPluginRegistryList
-echo "${PLUGIN_REGISTRY_LIST}"
-
setDevfileRegistryList
echo "${DEVFILE_REGISTRY_LIST}"
@@ -166,10 +156,6 @@ for image in ${REQUIRED_IMAGES}; do
writeDigest "${image}" "required-image"
done
-for image in ${PLUGIN_REGISTRY_LIST}; do
- writeDigest "${image}" "plugin-registry-image"
-done
-
for image in ${DEVFILE_REGISTRY_LIST}; do
writeDigest "${image}" "devfile-registry-image"
done
diff --git a/build/scripts/release/editors-definitions.sh b/build/scripts/release/editors-definitions.sh
new file mode 100755
index 000000000..75c47d7be
--- /dev/null
+++ b/build/scripts/release/editors-definitions.sh
@@ -0,0 +1,80 @@
+#!/bin/bash
+#
+# Copyright (c) 2019-2024 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+set -e
+
+OPERATOR_REPO=$(dirname "$(dirname "$(dirname "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")")")
+EDITORS_DEFINITIONS_DIR="${OPERATOR_REPO}/editors-definitions"
+MANAGER_YAML="${OPERATOR_REPO}/config/manager/manager.yaml"
+
+init() {
+ unset VERSION
+ unset ENVS
+
+ COMMAND=$1
+ shift
+
+ while [[ "$#" -gt 0 ]]; do
+ case $1 in
+ '--version') VERSION=$2; shift 1;;
+ esac
+ shift 1
+ done
+}
+
+usage () {
+ echo "Editor definitions utils."
+ echo
+ echo "Usage:"
+ echo -e "\t$0 release --version RELEASE_VERSION"
+ echo -e "\t$0 add-env-vars"
+}
+
+release() {
+ if [[ ! ${VERSION} ]]; then usage; exit 1; fi
+
+ yq -riY ".metadata.attributes.version = \"${VERSION}\"" "${EDITORS_DEFINITIONS_DIR}/che-code-latest.yaml"
+ yq -riY "(.components[] | select(.name==\"che-code-injector\") | .container.image) = \"quay.io/che-incubator/che-code:${VERSION}\"" "${EDITORS_DEFINITIONS_DIR}/che-code-latest.yaml"
+}
+
+addEnvVars() {
+ for EDITOR_DEFINITION_FILE in $(find "${EDITORS_DEFINITIONS_DIR}" -name "*.yaml"); do
+ NAME=$(yq -r '.metadata.name' "${EDITOR_DEFINITION_FILE}")
+ VERSION=$(yq -r '.metadata.attributes.version' "${EDITOR_DEFINITION_FILE}")
+ for COMPONENT in $(yq -r '.components[] | .name' "${EDITOR_DEFINITION_FILE}"); do
+ ENV_VALUE=$(yq -r ".components[] | select(.name==\"${COMPONENT}\") | .container.image" "${EDITOR_DEFINITION_FILE}")
+ ENV_NAME=$(echo "RELATED_IMAGE_editor_definition_${NAME}_${VERSION}_${COMPONENT}" | sed 's|[-\.]|_|g')
+
+ if [[ ! ${ENV_VALUE} == "null" ]]; then
+ ENV="{ name: \"${ENV_NAME}\", value: \"${ENV_VALUE}\"}"
+ if [[ -z ${ENVS} ]]; then
+ ENVS="${ENV}"
+ else
+ ENVS="${ENVS}, ${ENV}"
+ fi
+ fi
+ done
+ done
+
+ yq -riY "(.spec.template.spec.containers[0].env ) += [${ENVS}]" "${MANAGER_YAML}"
+}
+
+init "$@"
+
+pushd "${OPERATOR_REPO}" >/dev/null
+case $COMMAND in
+ 'release') release;;
+ 'add-env-vars') addEnvVars;;
+ *) usage; exit 1;;
+esac
+popd >/dev/null
diff --git a/build/scripts/release/make-release.sh b/build/scripts/release/make-release.sh
index 0508fe604..d5258e3f7 100755
--- a/build/scripts/release/make-release.sh
+++ b/build/scripts/release/make-release.sh
@@ -179,6 +179,17 @@ replaceTag() {
echo "${1}" | sed -e "s/\(.*:\).*/\1${2}/"
}
+releaseEditorsDefinitions() {
+ echo "[INFO] Releasing editor definitions"
+
+ . "${OPERATOR_REPO}/build/scripts/release/editors-definitions.sh" release --version "${RELEASE}"
+ . "${OPERATOR_REPO}/build/scripts/release/editors-definitions.sh" add-env-vars
+
+ git add editors-definitions
+ git add "${OPERATOR_REPO}/config/manager/manager.yaml"
+ git commit -m "ci: Release editors definitions to $RELEASE" --signoff
+}
+
updateVersionFile() {
echo "[INFO] updating version.go file"
# change version/version.go file
@@ -268,7 +279,7 @@ createPRToMainBranch() {
resetChanges main
local tmpBranch="copy-csv-to-main"
git checkout -B $tmpBranch
- git diff refs/heads/${BRANCH}...refs/heads/${RELEASE_BRANCH} ':(exclude)config/manager/manager.yaml' ':(exclude)deploy' ':(exclude)Dockerfile' | git apply -3
+ git diff refs/heads/${BRANCH}...refs/heads/${RELEASE_BRANCH} ':(exclude)config/manager/manager.yaml' ':(exclude)deploy' ':(exclude)editors-definitions' ':(exclude)Dockerfile' | git apply -3
if git status --porcelain; then
git add -A || true # add new generated CSV files in olm/ folder
git commit -am "ci: Copy "$RELEASE" csv to main" --signoff
@@ -291,6 +302,7 @@ run() {
checkoutToReleaseBranch
updateVersionFile
+ releaseEditorsDefinitions
releaseOperatorCode
if [[ $RELEASE_OLM_FILES == "true" ]]; then
releaseOlmFiles
diff --git a/bundle/next/eclipse-che/manifests/che-operator-service_v1_service.yaml b/bundle/next/eclipse-che/manifests/che-operator-service_v1_service.yaml
index e1157f101..b90419978 100644
--- a/bundle/next/eclipse-che/manifests/che-operator-service_v1_service.yaml
+++ b/bundle/next/eclipse-che/manifests/che-operator-service_v1_service.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/bundle/next/eclipse-che/manifests/che-operator.clusterserviceversion.yaml b/bundle/next/eclipse-che/manifests/che-operator.clusterserviceversion.yaml
index 23ec13851..20a32027e 100644
--- a/bundle/next/eclipse-che/manifests/che-operator.clusterserviceversion.yaml
+++ b/bundle/next/eclipse-che/manifests/che-operator.clusterserviceversion.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
@@ -100,7 +100,7 @@ metadata:
operators.operatorframework.io/project_layout: go.kubebuilder.io/v3
repository: https://github.com/eclipse-che/che-operator
support: Eclipse Foundation
- name: eclipse-che.v7.86.0-867.next
+ name: eclipse-che.v7.87.0-869.next
namespace: placeholder
spec:
apiservicedefinitions: {}
@@ -1032,7 +1032,7 @@ spec:
minKubeVersion: 1.19.0
provider:
name: Eclipse Foundation
- version: 7.86.0-867.next
+ version: 7.87.0-869.next
webhookdefinitions:
- admissionReviewVersions:
- v1
diff --git a/bundle/next/eclipse-che/manifests/org.eclipse.che_checlusters.yaml b/bundle/next/eclipse-che/manifests/org.eclipse.che_checlusters.yaml
index ac001cf76..14eda48e4 100644
--- a/bundle/next/eclipse-che/manifests/org.eclipse.che_checlusters.yaml
+++ b/bundle/next/eclipse-che/manifests/org.eclipse.che_checlusters.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/bundle/next/eclipse-che/metadata/annotations.yaml b/bundle/next/eclipse-che/metadata/annotations.yaml
index a6c29492d..193dda9aa 100644
--- a/bundle/next/eclipse-che/metadata/annotations.yaml
+++ b/bundle/next/eclipse-che/metadata/annotations.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/bundle/next/eclipse-che/tests/scorecard/config.yaml b/bundle/next/eclipse-che/tests/scorecard/config.yaml
index 0e6085674..08071ebe0 100644
--- a/bundle/next/eclipse-che/tests/scorecard/config.yaml
+++ b/bundle/next/eclipse-che/tests/scorecard/config.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/config/crd/bases/org.eclipse.che_checlusters.yaml b/config/crd/bases/org.eclipse.che_checlusters.yaml
index d9a62e09b..9e7d9f7cd 100644
--- a/config/crd/bases/org.eclipse.che_checlusters.yaml
+++ b/config/crd/bases/org.eclipse.che_checlusters.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/config/manifests/bases/che-operator.clusterserviceversion.yaml b/config/manifests/bases/che-operator.clusterserviceversion.yaml
index d137db40d..f8a4715f3 100644
--- a/config/manifests/bases/che-operator.clusterserviceversion.yaml
+++ b/config/manifests/bases/che-operator.clusterserviceversion.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/combined.yaml b/deploy/deployment/kubernetes/combined.yaml
index 8a523b37b..84cfe53bb 100644
--- a/deploy/deployment/kubernetes/combined.yaml
+++ b/deploy/deployment/kubernetes/combined.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/che-operator-selfsigned-issuer.Issuer.yaml b/deploy/deployment/kubernetes/objects/che-operator-selfsigned-issuer.Issuer.yaml
index 9e7d30b56..4fc313e85 100644
--- a/deploy/deployment/kubernetes/objects/che-operator-selfsigned-issuer.Issuer.yaml
+++ b/deploy/deployment/kubernetes/objects/che-operator-selfsigned-issuer.Issuer.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/che-operator-service.Service.yaml b/deploy/deployment/kubernetes/objects/che-operator-service.Service.yaml
index a2b93c3f8..ca8a54c33 100644
--- a/deploy/deployment/kubernetes/objects/che-operator-service.Service.yaml
+++ b/deploy/deployment/kubernetes/objects/che-operator-service.Service.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/che-operator-serving-cert.Certificate.yaml b/deploy/deployment/kubernetes/objects/che-operator-serving-cert.Certificate.yaml
index 7abd7ffbe..9e236cf8a 100644
--- a/deploy/deployment/kubernetes/objects/che-operator-serving-cert.Certificate.yaml
+++ b/deploy/deployment/kubernetes/objects/che-operator-serving-cert.Certificate.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/che-operator.ClusterRole.yaml b/deploy/deployment/kubernetes/objects/che-operator.ClusterRole.yaml
index 3b506c07d..8d0fea548 100644
--- a/deploy/deployment/kubernetes/objects/che-operator.ClusterRole.yaml
+++ b/deploy/deployment/kubernetes/objects/che-operator.ClusterRole.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/che-operator.ClusterRoleBinding.yaml b/deploy/deployment/kubernetes/objects/che-operator.ClusterRoleBinding.yaml
index b24901258..112ba1b18 100644
--- a/deploy/deployment/kubernetes/objects/che-operator.ClusterRoleBinding.yaml
+++ b/deploy/deployment/kubernetes/objects/che-operator.ClusterRoleBinding.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/che-operator.Deployment.yaml b/deploy/deployment/kubernetes/objects/che-operator.Deployment.yaml
index 4f9176822..cfd19830f 100644
--- a/deploy/deployment/kubernetes/objects/che-operator.Deployment.yaml
+++ b/deploy/deployment/kubernetes/objects/che-operator.Deployment.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/che-operator.Role.yaml b/deploy/deployment/kubernetes/objects/che-operator.Role.yaml
index 43625be99..a8e1adced 100644
--- a/deploy/deployment/kubernetes/objects/che-operator.Role.yaml
+++ b/deploy/deployment/kubernetes/objects/che-operator.Role.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/che-operator.RoleBinding.yaml b/deploy/deployment/kubernetes/objects/che-operator.RoleBinding.yaml
index df0254b1e..640908c90 100644
--- a/deploy/deployment/kubernetes/objects/che-operator.RoleBinding.yaml
+++ b/deploy/deployment/kubernetes/objects/che-operator.RoleBinding.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/che-operator.ServiceAccount.yaml b/deploy/deployment/kubernetes/objects/che-operator.ServiceAccount.yaml
index 6bda97faf..4d56168fd 100644
--- a/deploy/deployment/kubernetes/objects/che-operator.ServiceAccount.yaml
+++ b/deploy/deployment/kubernetes/objects/che-operator.ServiceAccount.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/checlusters.org.eclipse.che.CustomResourceDefinition.yaml b/deploy/deployment/kubernetes/objects/checlusters.org.eclipse.che.CustomResourceDefinition.yaml
index 2f3e453aa..b195c127c 100644
--- a/deploy/deployment/kubernetes/objects/checlusters.org.eclipse.che.CustomResourceDefinition.yaml
+++ b/deploy/deployment/kubernetes/objects/checlusters.org.eclipse.che.CustomResourceDefinition.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/eclipse-che.Namespace.yaml b/deploy/deployment/kubernetes/objects/eclipse-che.Namespace.yaml
index da2bffddd..59f513954 100644
--- a/deploy/deployment/kubernetes/objects/eclipse-che.Namespace.yaml
+++ b/deploy/deployment/kubernetes/objects/eclipse-che.Namespace.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/org.eclipse.che.MutatingWebhookConfiguration.yaml b/deploy/deployment/kubernetes/objects/org.eclipse.che.MutatingWebhookConfiguration.yaml
index 70c1d94e1..4fa8fd452 100644
--- a/deploy/deployment/kubernetes/objects/org.eclipse.che.MutatingWebhookConfiguration.yaml
+++ b/deploy/deployment/kubernetes/objects/org.eclipse.che.MutatingWebhookConfiguration.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/kubernetes/objects/org.eclipse.che.ValidatingWebhookConfiguration.yaml b/deploy/deployment/kubernetes/objects/org.eclipse.che.ValidatingWebhookConfiguration.yaml
index 8bada1b40..39b0ff6bf 100644
--- a/deploy/deployment/kubernetes/objects/org.eclipse.che.ValidatingWebhookConfiguration.yaml
+++ b/deploy/deployment/kubernetes/objects/org.eclipse.che.ValidatingWebhookConfiguration.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/openshift/combined.yaml b/deploy/deployment/openshift/combined.yaml
index b2282f275..802ad1104 100644
--- a/deploy/deployment/openshift/combined.yaml
+++ b/deploy/deployment/openshift/combined.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/openshift/objects/che-operator-service.Service.yaml b/deploy/deployment/openshift/objects/che-operator-service.Service.yaml
index 13a93239c..00275befa 100644
--- a/deploy/deployment/openshift/objects/che-operator-service.Service.yaml
+++ b/deploy/deployment/openshift/objects/che-operator-service.Service.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/openshift/objects/che-operator.ClusterRole.yaml b/deploy/deployment/openshift/objects/che-operator.ClusterRole.yaml
index 3b506c07d..8d0fea548 100644
--- a/deploy/deployment/openshift/objects/che-operator.ClusterRole.yaml
+++ b/deploy/deployment/openshift/objects/che-operator.ClusterRole.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/openshift/objects/che-operator.ClusterRoleBinding.yaml b/deploy/deployment/openshift/objects/che-operator.ClusterRoleBinding.yaml
index b24901258..112ba1b18 100644
--- a/deploy/deployment/openshift/objects/che-operator.ClusterRoleBinding.yaml
+++ b/deploy/deployment/openshift/objects/che-operator.ClusterRoleBinding.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/openshift/objects/che-operator.Deployment.yaml b/deploy/deployment/openshift/objects/che-operator.Deployment.yaml
index 78bda734a..417572858 100644
--- a/deploy/deployment/openshift/objects/che-operator.Deployment.yaml
+++ b/deploy/deployment/openshift/objects/che-operator.Deployment.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/openshift/objects/che-operator.Role.yaml b/deploy/deployment/openshift/objects/che-operator.Role.yaml
index 43625be99..a8e1adced 100644
--- a/deploy/deployment/openshift/objects/che-operator.Role.yaml
+++ b/deploy/deployment/openshift/objects/che-operator.Role.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/openshift/objects/che-operator.RoleBinding.yaml b/deploy/deployment/openshift/objects/che-operator.RoleBinding.yaml
index df0254b1e..640908c90 100644
--- a/deploy/deployment/openshift/objects/che-operator.RoleBinding.yaml
+++ b/deploy/deployment/openshift/objects/che-operator.RoleBinding.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/openshift/objects/che-operator.ServiceAccount.yaml b/deploy/deployment/openshift/objects/che-operator.ServiceAccount.yaml
index 6bda97faf..4d56168fd 100644
--- a/deploy/deployment/openshift/objects/che-operator.ServiceAccount.yaml
+++ b/deploy/deployment/openshift/objects/che-operator.ServiceAccount.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/openshift/objects/checlusters.org.eclipse.che.CustomResourceDefinition.yaml b/deploy/deployment/openshift/objects/checlusters.org.eclipse.che.CustomResourceDefinition.yaml
index 41739617a..32b727175 100644
--- a/deploy/deployment/openshift/objects/checlusters.org.eclipse.che.CustomResourceDefinition.yaml
+++ b/deploy/deployment/openshift/objects/checlusters.org.eclipse.che.CustomResourceDefinition.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/openshift/objects/eclipse-che.Namespace.yaml b/deploy/deployment/openshift/objects/eclipse-che.Namespace.yaml
index da2bffddd..59f513954 100644
--- a/deploy/deployment/openshift/objects/eclipse-che.Namespace.yaml
+++ b/deploy/deployment/openshift/objects/eclipse-che.Namespace.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/openshift/objects/org.eclipse.che.MutatingWebhookConfiguration.yaml b/deploy/deployment/openshift/objects/org.eclipse.che.MutatingWebhookConfiguration.yaml
index 9c0e3869d..ceee5fef2 100644
--- a/deploy/deployment/openshift/objects/org.eclipse.che.MutatingWebhookConfiguration.yaml
+++ b/deploy/deployment/openshift/objects/org.eclipse.che.MutatingWebhookConfiguration.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/deploy/deployment/openshift/objects/org.eclipse.che.ValidatingWebhookConfiguration.yaml b/deploy/deployment/openshift/objects/org.eclipse.che.ValidatingWebhookConfiguration.yaml
index e7cd60d8e..8059eed89 100644
--- a/deploy/deployment/openshift/objects/org.eclipse.che.ValidatingWebhookConfiguration.yaml
+++ b/deploy/deployment/openshift/objects/org.eclipse.che.ValidatingWebhookConfiguration.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/editors-definitions/che-code-insiders.yaml b/editors-definitions/che-code-insiders.yaml
new file mode 100644
index 000000000..c506b80f1
--- /dev/null
+++ b/editors-definitions/che-code-insiders.yaml
@@ -0,0 +1,145 @@
+#
+# Copyright (c) 2019-2024 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+schemaVersion: 2.2.2
+metadata:
+ name: che-code
+ displayName: VS Code - Open Source
+ description: Microsoft Visual Studio Code - Open Source IDE for Eclipse Che - Insiders
+ build
+ tags:
+ - Tech-Preview
+ attributes:
+ publisher: che-incubator
+ version: insiders
+ title: Microsoft Visual Studio Code - Open Source IDE for Eclipse Che - Insiders
+ build
+ repository: https://github.com/che-incubator/che-code
+ firstPublicationDate: '2021-10-31'
+ icon-mediatype: image/svg+xml
+ icon-data: |
+
+commands:
+ - id: init-container-command
+ apply:
+ component: che-code-injector
+ - id: init-che-code-command
+ exec:
+ component: che-code-runtime-description
+ commandLine: nohup /checode/entrypoint-volume.sh > /checode/entrypoint-logs.txt
+ 2>&1 &
+events:
+ preStart:
+ - init-container-command
+ postStart:
+ - init-che-code-command
+components:
+ - name: che-code-injector
+ container:
+ image: quay.io/che-incubator/che-code:insiders
+ command:
+ - /entrypoint-init-container.sh
+ volumeMounts:
+ - name: checode
+ path: /checode
+ memoryLimit: 256Mi
+ memoryRequest: 32Mi
+ cpuLimit: 500m
+ cpuRequest: 30m
+ - name: che-code-runtime-description
+ container:
+ image: quay.io/devfile/universal-developer-image:latest
+ memoryLimit: 1024Mi
+ memoryRequest: 256Mi
+ cpuLimit: 500m
+ cpuRequest: 30m
+ volumeMounts:
+ - name: checode
+ path: /checode
+ endpoints:
+ - name: che-code
+ attributes:
+ type: main
+ cookiesAuthEnabled: true
+ discoverable: false
+ urlRewriteSupported: true
+ targetPort: 3100
+ exposure: public
+ secure: true
+ protocol: https
+ - name: code-redirect-1
+ targetPort: 13131
+ exposure: public
+ protocol: https
+ attributes:
+ discoverable: false
+ urlRewriteSupported: false
+ - name: code-redirect-2
+ targetPort: 13132
+ exposure: public
+ protocol: https
+ attributes:
+ discoverable: false
+ urlRewriteSupported: false
+ - name: code-redirect-3
+ targetPort: 13133
+ exposure: public
+ protocol: https
+ attributes:
+ discoverable: false
+ urlRewriteSupported: false
+ attributes:
+ app.kubernetes.io/component: che-code-runtime
+ app.kubernetes.io/part-of: che-code.eclipse.org
+ controller.devfile.io/container-contribution: true
+ - name: checode
+ volume: {}
\ No newline at end of file
diff --git a/editors-definitions/che-code-latest.yaml b/editors-definitions/che-code-latest.yaml
new file mode 100644
index 000000000..edaf94a51
--- /dev/null
+++ b/editors-definitions/che-code-latest.yaml
@@ -0,0 +1,143 @@
+#
+# Copyright (c) 2019-2024 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+schemaVersion: 2.2.2
+metadata:
+ name: che-code
+ displayName: VS Code - Open Source
+ description: Microsoft Visual Studio Code - Open Source IDE for Eclipse Che
+ attributes:
+ publisher: che-incubator
+ version: latest
+ title: Microsoft Visual Studio Code - Open Source IDE for Eclipse Che
+ repository: https://github.com/che-incubator/che-code
+ firstPublicationDate: '2021-10-31'
+ icon-mediatype: image/svg+xml
+ icon-data: |
+
+commands:
+ - id: init-container-command
+ apply:
+ component: che-code-injector
+ - id: init-che-code-command
+ exec:
+ component: che-code-runtime-description
+ commandLine: nohup /checode/entrypoint-volume.sh > /checode/entrypoint-logs.txt
+ 2>&1 &
+events:
+ preStart:
+ - init-container-command
+ postStart:
+ - init-che-code-command
+components:
+ - name: che-code-injector
+ container:
+ image: quay.io/che-incubator/che-code:latest
+ command:
+ - /entrypoint-init-container.sh
+ volumeMounts:
+ - name: checode
+ path: /checode
+ memoryLimit: 256Mi
+ memoryRequest: 32Mi
+ cpuLimit: 500m
+ cpuRequest: 30m
+ - name: che-code-runtime-description
+ container:
+ image: quay.io/devfile/universal-developer-image:latest
+ memoryLimit: 1024Mi
+ memoryRequest: 256Mi
+ cpuLimit: 500m
+ cpuRequest: 30m
+ volumeMounts:
+ - name: checode
+ path: /checode
+ endpoints:
+ - name: che-code
+ attributes:
+ type: main
+ cookiesAuthEnabled: true
+ discoverable: false
+ urlRewriteSupported: true
+ targetPort: 3100
+ exposure: public
+ secure: true
+ protocol: https
+ - name: code-redirect-1
+ targetPort: 13131
+ exposure: public
+ protocol: https
+ attributes:
+ discoverable: false
+ urlRewriteSupported: false
+ - name: code-redirect-2
+ targetPort: 13132
+ exposure: public
+ protocol: https
+ attributes:
+ discoverable: false
+ urlRewriteSupported: false
+ - name: code-redirect-3
+ targetPort: 13133
+ exposure: public
+ protocol: https
+ attributes:
+ discoverable: false
+ urlRewriteSupported: false
+ attributes:
+ app.kubernetes.io/component: che-code-runtime
+ app.kubernetes.io/part-of: che-code.eclipse.org
+ controller.devfile.io/container-contribution: true
+ - name: checode
+ volume: {}
+attributes:
+ version: null
diff --git a/editors-definitions/che-idea-latest.yaml b/editors-definitions/che-idea-latest.yaml
new file mode 100644
index 000000000..533a3fa4d
--- /dev/null
+++ b/editors-definitions/che-idea-latest.yaml
@@ -0,0 +1,166 @@
+#
+# Copyright (c) 2019-2024 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+schemaVersion: 2.2.2
+metadata:
+ name: che-idea
+ displayName: IntelliJ IDEA Community
+ description: JetBrains IntelliJ IDEA Community IDE for Eclipse Che
+ tags:
+ - Tech-Preview
+ attributes:
+ publisher: che-incubator
+ version: latest
+ title: JetBrains IntelliJ IDEA Community IDE for Eclipse Che
+ repository: https://github.com/che-incubator/jetbrains-editor-images
+ firstPublicationDate: '2022-01-11'
+ icon-mediatype: image/svg+xml
+ icon-data: |
+
+commands:
+ - id: init-container-command
+ apply:
+ component: che-idea-injector
+ - id: init-che-idea-command
+ exec:
+ component: che-idea-runtime-description
+ commandLine: nohup /projector/entrypoint-volume.sh > /projector/entrypoint-logs.txt
+ 2>&1 &
+events:
+ preStart:
+ - init-container-command
+ postStart:
+ - init-che-idea-command
+components:
+ - name: che-idea-runtime-description
+ container:
+ image: quay.io/devfile/universal-developer-image:latest
+ env:
+ - name: PROJECTOR_ASSEMBLY_DIR
+ value: /projector
+ - name: PROJECTOR_CONFIG_DIR
+ value: /home/user/.jetbrains
+ volumeMounts:
+ - name: projector-volume
+ path: /projector
+ - name: projector-configuration
+ path: /home/user/.jetbrains
+ - name: projector-java-configuration
+ path: /home/user/.java
+ memoryLimit: 6144Mi
+ memoryRequest: 2048Mi
+ cpuLimit: 2000m
+ cpuRequest: 1500m
+ endpoints:
+ - name: intellij
+ attributes:
+ type: main
+ cookiesAuthEnabled: true
+ discoverable: false
+ urlRewriteSupported: true
+ targetPort: 8887
+ exposure: public
+ path: /?backgroundColor=434343&wss
+ secure: true
+ protocol: https
+ - name: intellij-redirect-1
+ targetPort: 13131
+ exposure: public
+ protocol: https
+ attributes:
+ discoverable: false
+ urlRewriteSupported: false
+ - name: intellij-redirect-2
+ targetPort: 13132
+ exposure: public
+ protocol: https
+ attributes:
+ discoverable: false
+ urlRewriteSupported: false
+ - name: intellij-redirect-3
+ targetPort: 13133
+ exposure: public
+ protocol: https
+ attributes:
+ discoverable: false
+ urlRewriteSupported: false
+ attributes:
+ app.kubernetes.io/component: che-idea-runtime
+ app.kubernetes.io/part-of: che-idea.eclipse.org
+ controller.devfile.io/container-contribution: true
+ - name: projector-volume
+ volume: {}
+ - name: projector-configuration
+ volume: {}
+ - name: projector-java-configuration
+ volume: {}
+ - name: che-idea-injector
+ container:
+ image: quay.io/che-incubator/che-idea:latest
+ command:
+ - /projector/entrypoint-init-container.sh
+ env:
+ - name: PROJECTOR_VOLUME_MOUNT
+ value: /projector-volume
+ - name: PROJECTOR_ASSEMBLY_DIR
+ value: /projector
+ volumeMounts:
+ - name: projector-volume
+ path: /projector-volume
+ memoryLimit: 128Mi
+ memoryRequest: 32Mi
+ cpuLimit: 500m
+ cpuRequest: 30m
\ No newline at end of file
diff --git a/editors-definitions/che-idea-next.yaml b/editors-definitions/che-idea-next.yaml
new file mode 100644
index 000000000..a820486a1
--- /dev/null
+++ b/editors-definitions/che-idea-next.yaml
@@ -0,0 +1,166 @@
+#
+# Copyright (c) 2019-2024 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+schemaVersion: 2.2.2
+metadata:
+ name: che-idea
+ displayName: IntelliJ IDEA Community
+ description: JetBrains IntelliJ IDEA Community IDE for Eclipse Che - next
+ tags:
+ - Tech-Preview
+ attributes:
+ publisher: che-incubator
+ version: next
+ title: JetBrains IntelliJ IDEA Community IDE for Eclipse Che - next
+ repository: https://github.com/che-incubator/jetbrains-editor-images
+ firstPublicationDate: '2022-01-11'
+ icon-mediatype: image/svg+xml
+ icon-data: |
+
+commands:
+ - id: init-container-command
+ apply:
+ component: che-idea-injector
+ - id: init-che-idea-command
+ exec:
+ component: che-idea-runtime-description
+ commandLine: nohup /projector/entrypoint-volume.sh > /projector/entrypoint-logs.txt
+ 2>&1 &
+events:
+ preStart:
+ - init-container-command
+ postStart:
+ - init-che-idea-command
+components:
+ - name: che-idea-runtime-description
+ container:
+ image: quay.io/devfile/universal-developer-image:latest
+ env:
+ - name: PROJECTOR_ASSEMBLY_DIR
+ value: /projector
+ - name: PROJECTOR_CONFIG_DIR
+ value: /home/user/.jetbrains
+ volumeMounts:
+ - name: projector-volume
+ path: /projector
+ - name: projector-configuration
+ path: /home/user/.jetbrains
+ - name: projector-java-configuration
+ path: /home/user/.java
+ memoryLimit: 6144Mi
+ memoryRequest: 2048Mi
+ cpuLimit: 2000m
+ cpuRequest: 1500m
+ endpoints:
+ - name: intellij
+ attributes:
+ type: main
+ cookiesAuthEnabled: true
+ discoverable: false
+ urlRewriteSupported: true
+ targetPort: 8887
+ exposure: public
+ path: /?backgroundColor=434343&wss
+ secure: true
+ protocol: https
+ - name: intellij-redirect-1
+ targetPort: 13131
+ exposure: public
+ protocol: https
+ attributes:
+ discoverable: false
+ urlRewriteSupported: false
+ - name: intellij-redirect-2
+ targetPort: 13132
+ exposure: public
+ protocol: https
+ attributes:
+ discoverable: false
+ urlRewriteSupported: false
+ - name: intellij-redirect-3
+ targetPort: 13133
+ exposure: public
+ protocol: https
+ attributes:
+ discoverable: false
+ urlRewriteSupported: false
+ attributes:
+ app.kubernetes.io/component: che-idea-runtime
+ app.kubernetes.io/part-of: che-idea.eclipse.org
+ controller.devfile.io/container-contribution: true
+ - name: projector-volume
+ volume: {}
+ - name: projector-configuration
+ volume: {}
+ - name: projector-java-configuration
+ volume: {}
+ - name: che-idea-injector
+ container:
+ image: quay.io/che-incubator/che-idea:next
+ command:
+ - /projector/entrypoint-init-container.sh
+ env:
+ - name: PROJECTOR_VOLUME_MOUNT
+ value: /projector-volume
+ - name: PROJECTOR_ASSEMBLY_DIR
+ value: /projector
+ volumeMounts:
+ - name: projector-volume
+ path: /projector-volume
+ memoryLimit: 128Mi
+ memoryRequest: 32Mi
+ cpuLimit: 500m
+ cpuRequest: 30m
\ No newline at end of file
diff --git a/editors-definitions/che-idea-server-latest.yaml b/editors-definitions/che-idea-server-latest.yaml
new file mode 100644
index 000000000..4a202d53b
--- /dev/null
+++ b/editors-definitions/che-idea-server-latest.yaml
@@ -0,0 +1,126 @@
+#
+# Copyright (c) 2019-2024 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+schemaVersion: 2.2.2
+metadata:
+ name: che-idea-server
+ displayName: IntelliJ IDEA Ultimate (desktop)
+ description: JetBrains IntelliJ IDEA Ultimate dev server for Eclipse Che - latest
+ tags:
+ - Tech-Preview
+ attributes:
+ publisher: che-incubator
+ version: latest
+ title: JetBrains IntelliJ IDEA Ultimate dev server for Eclipse Che - latest
+ repository: https://github.com/che-incubator/che-idea-dev-server
+ firstPublicationDate: '2023-30-11'
+ icon-mediatype: image/svg+xml
+ icon-data: |
+
+commands:
+ - id: inject-editor
+ apply:
+ component: editor-injector
+ - id: start-idea-server
+ exec:
+ component: editor-runtime
+ commandLine: nohup /idea-server/entrypoint-volume.sh > /idea-server/std.out
+ 2>&1 &
+events:
+ preStart:
+ - inject-editor
+ postStart:
+ - start-idea-server
+components:
+ - name: idea-server
+ volume: {}
+ - name: editor-injector
+ container:
+ image: quay.io/che-incubator/che-idea-dev-server:latest
+ command:
+ - /entrypoint-init-container.sh
+ volumeMounts:
+ - name: idea-server
+ path: /idea-server
+ memoryLimit: 256Mi
+ memoryRequest: 32Mi
+ cpuLimit: 500m
+ cpuRequest: 30m
+ - name: editor-runtime
+ container:
+ image: quay.io/devfile/universal-developer-image:latest
+ memoryLimit: 6144Mi
+ memoryRequest: 2048Mi
+ cpuLimit: 2000m
+ cpuRequest: 1500m
+ volumeMounts:
+ - name: idea-server
+ path: /idea-server
+ endpoints:
+ - name: idea-server
+ attributes:
+ type: main
+ cookiesAuthEnabled: true
+ discoverable: false
+ urlRewriteSupported: true
+ targetPort: 3400
+ exposure: public
+ secure: true
+ protocol: https
+ attributes:
+ app.kubernetes.io/component: editor-runtime
+ app.kubernetes.io/part-of: idea-server.eclipse.org
+ controller.devfile.io/container-contribution: true
\ No newline at end of file
diff --git a/editors-definitions/che-idea-server-next.yaml b/editors-definitions/che-idea-server-next.yaml
new file mode 100644
index 000000000..60a1bd582
--- /dev/null
+++ b/editors-definitions/che-idea-server-next.yaml
@@ -0,0 +1,126 @@
+#
+# Copyright (c) 2019-2024 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+schemaVersion: 2.2.2
+metadata:
+ name: che-idea-server
+ displayName: IntelliJ IDEA Ultimate (desktop)
+ description: JetBrains IntelliJ IDEA Ultimate dev server for Eclipse Che - next
+ tags:
+ - Tech-Preview
+ attributes:
+ publisher: che-incubator
+ version: next
+ title: JetBrains IntelliJ IDEA Ultimate dev server for Eclipse Che - next
+ repository: https://github.com/che-incubator/che-idea-dev-server
+ firstPublicationDate: '2023-30-11'
+ icon-mediatype: image/svg+xml
+ icon-data: |
+
+commands:
+ - id: inject-editor
+ apply:
+ component: editor-injector
+ - id: start-idea-server
+ exec:
+ component: editor-runtime
+ commandLine: nohup /idea-server/entrypoint-volume.sh > /idea-server/std.out
+ 2>&1 &
+events:
+ preStart:
+ - inject-editor
+ postStart:
+ - start-idea-server
+components:
+ - name: idea-server
+ volume: {}
+ - name: editor-injector
+ container:
+ image: quay.io/che-incubator/che-idea-dev-server:next
+ command:
+ - /entrypoint-init-container.sh
+ volumeMounts:
+ - name: idea-server
+ path: /idea-server
+ memoryLimit: 256Mi
+ memoryRequest: 32Mi
+ cpuLimit: 500m
+ cpuRequest: 30m
+ - name: editor-runtime
+ container:
+ image: quay.io/devfile/universal-developer-image:latest
+ memoryLimit: 6144Mi
+ memoryRequest: 2048Mi
+ cpuLimit: 2000m
+ cpuRequest: 1500m
+ volumeMounts:
+ - name: idea-server
+ path: /idea-server
+ endpoints:
+ - name: idea-server
+ attributes:
+ type: main
+ cookiesAuthEnabled: true
+ discoverable: false
+ urlRewriteSupported: true
+ targetPort: 3400
+ exposure: public
+ secure: true
+ protocol: https
+ attributes:
+ app.kubernetes.io/component: editor-runtime
+ app.kubernetes.io/part-of: idea-server.eclipse.org
+ controller.devfile.io/container-contribution: true
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 6a64650bb..96b1f7738 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,6 @@ require (
github.com/devfile/api/v2 v2.2.2
github.com/devfile/devworkspace-operator v0.25.0
github.com/go-logr/logr v1.2.4
- github.com/golang/mock v1.5.0
github.com/google/go-cmp v0.6.0
github.com/openshift/api v0.0.0-20200331152225-585af27e34fd
github.com/operator-framework/api v0.10.0
diff --git a/go.sum b/go.sum
index cfd47cf7f..f02cf571a 100644
--- a/go.sum
+++ b/go.sum
@@ -810,8 +810,6 @@ github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18h
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.5.0 h1:jlYHihg//f7RRwuPfptm04yp4s7O6Kw8EZiVYIGcH0g=
-github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
diff --git a/hack/boilerplate.go.txt b/hack/boilerplate.go.txt
index 7d4b8d7d8..0f150714d 100644
--- a/hack/boilerplate.go.txt
+++ b/hack/boilerplate.go.txt
@@ -1,5 +1,5 @@
//
-// Copyright (c) 2019-2023 Red Hat, Inc.
+// Copyright (c) 2019-2024 Red Hat, Inc.
// This program and the accompanying materials are made
// available under the terms of the Eclipse Public License 2.0
// which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/hack/license-header.txt b/hack/license-header.txt
index 49362f7db..0df17688b 100644
--- a/hack/license-header.txt
+++ b/hack/license-header.txt
@@ -1,5 +1,5 @@
-Copyright (c) 2019-2023 Red Hat, Inc.
+Copyright (c) 2019-2024 Red Hat, Inc.
This program and the accompanying materials are made
available under the terms of the Eclipse Public License 2.0
which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/crds/checlusters.org.eclipse.che.CustomResourceDefinition.yaml b/helmcharts/next/crds/checlusters.org.eclipse.che.CustomResourceDefinition.yaml
index 2f3e453aa..b195c127c 100644
--- a/helmcharts/next/crds/checlusters.org.eclipse.che.CustomResourceDefinition.yaml
+++ b/helmcharts/next/crds/checlusters.org.eclipse.che.CustomResourceDefinition.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/templates/che-operator-selfsigned-issuer.Issuer.yaml b/helmcharts/next/templates/che-operator-selfsigned-issuer.Issuer.yaml
index 9e7d30b56..4fc313e85 100644
--- a/helmcharts/next/templates/che-operator-selfsigned-issuer.Issuer.yaml
+++ b/helmcharts/next/templates/che-operator-selfsigned-issuer.Issuer.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/templates/che-operator-service.Service.yaml b/helmcharts/next/templates/che-operator-service.Service.yaml
index a2b93c3f8..ca8a54c33 100644
--- a/helmcharts/next/templates/che-operator-service.Service.yaml
+++ b/helmcharts/next/templates/che-operator-service.Service.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/templates/che-operator-serving-cert.Certificate.yaml b/helmcharts/next/templates/che-operator-serving-cert.Certificate.yaml
index 7abd7ffbe..9e236cf8a 100644
--- a/helmcharts/next/templates/che-operator-serving-cert.Certificate.yaml
+++ b/helmcharts/next/templates/che-operator-serving-cert.Certificate.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/templates/che-operator.ClusterRole.yaml b/helmcharts/next/templates/che-operator.ClusterRole.yaml
index 3b506c07d..8d0fea548 100644
--- a/helmcharts/next/templates/che-operator.ClusterRole.yaml
+++ b/helmcharts/next/templates/che-operator.ClusterRole.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/templates/che-operator.ClusterRoleBinding.yaml b/helmcharts/next/templates/che-operator.ClusterRoleBinding.yaml
index b24901258..112ba1b18 100644
--- a/helmcharts/next/templates/che-operator.ClusterRoleBinding.yaml
+++ b/helmcharts/next/templates/che-operator.ClusterRoleBinding.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/templates/che-operator.Deployment.yaml b/helmcharts/next/templates/che-operator.Deployment.yaml
index 4f9176822..cfd19830f 100644
--- a/helmcharts/next/templates/che-operator.Deployment.yaml
+++ b/helmcharts/next/templates/che-operator.Deployment.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/templates/che-operator.Role.yaml b/helmcharts/next/templates/che-operator.Role.yaml
index 43625be99..a8e1adced 100644
--- a/helmcharts/next/templates/che-operator.Role.yaml
+++ b/helmcharts/next/templates/che-operator.Role.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/templates/che-operator.RoleBinding.yaml b/helmcharts/next/templates/che-operator.RoleBinding.yaml
index df0254b1e..640908c90 100644
--- a/helmcharts/next/templates/che-operator.RoleBinding.yaml
+++ b/helmcharts/next/templates/che-operator.RoleBinding.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/templates/che-operator.ServiceAccount.yaml b/helmcharts/next/templates/che-operator.ServiceAccount.yaml
index 6bda97faf..4d56168fd 100644
--- a/helmcharts/next/templates/che-operator.ServiceAccount.yaml
+++ b/helmcharts/next/templates/che-operator.ServiceAccount.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/templates/org.eclipse.che.MutatingWebhookConfiguration.yaml b/helmcharts/next/templates/org.eclipse.che.MutatingWebhookConfiguration.yaml
index 70c1d94e1..4fa8fd452 100644
--- a/helmcharts/next/templates/org.eclipse.che.MutatingWebhookConfiguration.yaml
+++ b/helmcharts/next/templates/org.eclipse.che.MutatingWebhookConfiguration.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/templates/org.eclipse.che.ValidatingWebhookConfiguration.yaml b/helmcharts/next/templates/org.eclipse.che.ValidatingWebhookConfiguration.yaml
index 8bada1b40..39b0ff6bf 100644
--- a/helmcharts/next/templates/org.eclipse.che.ValidatingWebhookConfiguration.yaml
+++ b/helmcharts/next/templates/org.eclipse.che.ValidatingWebhookConfiguration.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/helmcharts/next/templates/org_v2_checluster.yaml b/helmcharts/next/templates/org_v2_checluster.yaml
index aacc4ae65..e351474fe 100644
--- a/helmcharts/next/templates/org_v2_checluster.yaml
+++ b/helmcharts/next/templates/org_v2_checluster.yaml
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2019-2023 Red Hat, Inc.
+# Copyright (c) 2019-2024 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
diff --git a/mocks/pkg/util/process_mock.go b/mocks/pkg/util/process_mock.go
deleted file mode 100644
index a668487c5..000000000
--- a/mocks/pkg/util/process_mock.go
+++ /dev/null
@@ -1,81 +0,0 @@
-// Code generated by MockGen. DO NOT EDIT.
-// Source: pkg/util/process.go
-
-// Package mock_util is a generated GoMock package.
-package mock_util
-
-import (
- reflect "reflect"
-
- gomock "github.com/golang/mock/gomock"
-)
-
-// MockRunnable is a mock of Runnable interface
-type MockRunnable struct {
- ctrl *gomock.Controller
- recorder *MockRunnableMockRecorder
-}
-
-// MockRunnableMockRecorder is the mock recorder for MockRunnable
-type MockRunnableMockRecorder struct {
- mock *MockRunnable
-}
-
-// NewMockRunnable creates a new mock instance
-func NewMockRunnable(ctrl *gomock.Controller) *MockRunnable {
- mock := &MockRunnable{ctrl: ctrl}
- mock.recorder = &MockRunnableMockRecorder{mock}
- return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use
-func (m *MockRunnable) EXPECT() *MockRunnableMockRecorder {
- return m.recorder
-}
-
-// Run mocks base method
-func (m *MockRunnable) Run(name string, args ...string) error {
- m.ctrl.T.Helper()
- varargs := []interface{}{name}
- for _, a := range args {
- varargs = append(varargs, a)
- }
- ret := m.ctrl.Call(m, "Run", varargs...)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// Run indicates an expected call of Run
-func (mr *MockRunnableMockRecorder) Run(name interface{}, args ...interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- varargs := append([]interface{}{name}, args...)
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Run", reflect.TypeOf((*MockRunnable)(nil).Run), varargs...)
-}
-
-// GetStdOut mocks base method
-func (m *MockRunnable) GetStdOut() string {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "GetStdOut")
- ret0, _ := ret[0].(string)
- return ret0
-}
-
-// GetStdOut indicates an expected call of GetStdOut
-func (mr *MockRunnableMockRecorder) GetStdOut() *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetStdOut", reflect.TypeOf((*MockRunnable)(nil).GetStdOut))
-}
-
-// GetStdErr mocks base method
-func (m *MockRunnable) GetStdErr() string {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "GetStdErr")
- ret0, _ := ret[0].(string)
- return ret0
-}
-
-// GetStdErr indicates an expected call of GetStdErr
-func (mr *MockRunnableMockRecorder) GetStdErr() *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetStdErr", reflect.TypeOf((*MockRunnable)(nil).GetStdErr))
-}
diff --git a/pkg/common/constants/constants.go b/pkg/common/constants/constants.go
index 17854d7be..c74afa7ec 100644
--- a/pkg/common/constants/constants.go
+++ b/pkg/common/constants/constants.go
@@ -124,6 +124,7 @@ const (
GatewayAuthenticationContainerName = "oauth-proxy"
GatewayAuthorizationContainerName = "kube-rbac-proxy"
KubernetesImagePullerComponentName = "kubernetes-image-puller"
+ EditorDefinitionComponentName = "editor-definition"
// common
CheFlavor = "che"
diff --git a/pkg/common/utils/process.go b/pkg/common/utils/process.go
deleted file mode 100644
index c2905f451..000000000
--- a/pkg/common/utils/process.go
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// Copyright (c) 2019-2023 Red Hat, Inc.
-// This program and the accompanying materials are made
-// available under the terms of the Eclipse Public License 2.0
-// which is available at https://www.eclipse.org/legal/epl-2.0/
-//
-// SPDX-License-Identifier: EPL-2.0
-//
-// Contributors:
-// Red Hat, Inc. - initial API and implementation
-//
-
-package utils
-
-import (
- "bytes"
- "os/exec"
-)
-
-type Runnable interface {
- Run(name string, args ...string) error
- GetStdOut() string
- GetStdErr() string
-}
-
-type Process struct {
- cmd *exec.Cmd
- stdout bytes.Buffer
- stderr bytes.Buffer
-}
-
-func NewRunnable() Runnable {
- return &Process{}
-}
-
-func (p *Process) Run(name string, args ...string) error {
- p.cmd = exec.Command(name, args...)
- p.stderr.Reset()
- p.stdout.Reset()
- p.cmd.Stdout = &p.stdout
- p.cmd.Stderr = &p.stderr
- return p.cmd.Run()
-}
-
-func (p *Process) GetStdOut() string {
- return string(p.stdout.Bytes())
-}
-
-func (p *Process) GetStdErr() string {
- return string(p.stderr.Bytes())
-}
diff --git a/pkg/deploy/pluginregistry/init_test.go b/pkg/deploy/pluginregistry/init_test.go
index 02fd09c04..d8d7e5f0b 100644
--- a/pkg/deploy/pluginregistry/init_test.go
+++ b/pkg/deploy/pluginregistry/init_test.go
@@ -1,5 +1,5 @@
//
-// Copyright (c) 2019-2023 Red Hat, Inc.
+// Copyright (c) 2019-2024 Red Hat, Inc.
// This program and the accompanying materials are made
// available under the terms of the Eclipse Public License 2.0
// which is available at https://www.eclipse.org/legal/epl-2.0/
@@ -23,4 +23,6 @@ func init() {
infrastructure.InitializeForTesting(infrastructure.OpenShiftv4)
defaults.InitializeForTesting("../../../config/manager/manager.yaml")
+
+ editorsDefinitionsDir = "./test-editors-definitions"
}
diff --git a/pkg/deploy/pluginregistry/pluginregistry.go b/pkg/deploy/pluginregistry/pluginregistry.go
index 097ee2b19..81893555c 100644
--- a/pkg/deploy/pluginregistry/pluginregistry.go
+++ b/pkg/deploy/pluginregistry/pluginregistry.go
@@ -1,5 +1,5 @@
//
-// Copyright (c) 2019-2023 Red Hat, Inc.
+// Copyright (c) 2019-2024 Red Hat, Inc.
// This program and the accompanying materials are made
// available under the terms of the Eclipse Public License 2.0
// which is available at https://www.eclipse.org/legal/epl-2.0/
@@ -16,6 +16,9 @@ import (
"fmt"
"strings"
+ appsv1 "k8s.io/api/apps/v1"
+ corev1 "k8s.io/api/core/v1"
+
"github.com/eclipse-che/che-operator/pkg/common/chetypes"
"github.com/eclipse-che/che-operator/pkg/common/constants"
"github.com/eclipse-che/che-operator/pkg/deploy/gateway"
@@ -35,12 +38,25 @@ func NewPluginRegistryReconciler() *PluginRegistryReconciler {
func (p *PluginRegistryReconciler) Reconcile(ctx *chetypes.DeployContext) (reconcile.Result, bool, error) {
if ctx.CheCluster.Spec.Components.PluginRegistry.DisableInternalRegistry {
- ctx.CheCluster.Status.PluginRegistryURL = ""
- err := deploy.UpdateCheCRStatus(ctx, "PluginRegistryURL", "")
- return reconcile.Result{}, err == nil, err
+ _, _ = deploy.DeleteNamespacedObject(ctx, constants.PluginRegistryName, &corev1.Service{})
+ _, _ = deploy.DeleteNamespacedObject(ctx, constants.PluginRegistryName, &corev1.ConfigMap{})
+ _, _ = deploy.DeleteNamespacedObject(ctx, editorsDefinitionsConfigMapName, &corev1.ConfigMap{})
+ _, _ = deploy.DeleteNamespacedObject(ctx, gateway.GatewayConfigMapNamePrefix+constants.PluginRegistryName, &corev1.ConfigMap{})
+ _, _ = deploy.DeleteNamespacedObject(ctx, constants.PluginRegistryName, &appsv1.Deployment{})
+
+ if ctx.CheCluster.Status.PluginRegistryURL != "" {
+ ctx.CheCluster.Status.PluginRegistryURL = ""
+ err := deploy.UpdateCheCRStatus(ctx, "PluginRegistryURL", "")
+ return reconcile.Result{}, err == nil, err
+ }
}
- done, err := p.syncService(ctx)
+ done, err := p.syncEditors(ctx)
+ if !done {
+ return reconcile.Result{}, false, err
+ }
+
+ done, err = p.syncService(ctx)
if !done {
return reconcile.Result{}, false, err
}
diff --git a/pkg/deploy/pluginregistry/pluginregistry_editors.go b/pkg/deploy/pluginregistry/pluginregistry_editors.go
new file mode 100644
index 000000000..0c66453ee
--- /dev/null
+++ b/pkg/deploy/pluginregistry/pluginregistry_editors.go
@@ -0,0 +1,129 @@
+//
+// Copyright (c) 2019-2024 Red Hat, Inc.
+// This program and the accompanying materials are made
+// available under the terms of the Eclipse Public License 2.0
+// which is available at https://www.eclipse.org/legal/epl-2.0/
+//
+// SPDX-License-Identifier: EPL-2.0
+//
+// Contributors:
+// Red Hat, Inc. - initial API and implementation
+//
+
+package pluginregistry
+
+import (
+ "fmt"
+ "os"
+ "path/filepath"
+ "regexp"
+
+ "github.com/eclipse-che/che-operator/pkg/common/chetypes"
+ "github.com/eclipse-che/che-operator/pkg/common/constants"
+ "github.com/eclipse-che/che-operator/pkg/common/utils"
+ "github.com/eclipse-che/che-operator/pkg/deploy"
+ corev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "sigs.k8s.io/yaml"
+)
+
+var (
+ editorsDefinitionsDir = "/tmp/editors-definitions"
+ editorsDefinitionsConfigMapName = "editors-definitions"
+)
+
+func (p *PluginRegistryReconciler) syncEditors(ctx *chetypes.DeployContext) (bool, error) {
+ editorDefinitions, err := readEditorDefinitions()
+ if err != nil {
+ return false, err
+ }
+
+ done, err := syncEditorDefinitions(ctx, editorDefinitions)
+ if !done {
+ return false, err
+ }
+
+ return true, nil
+}
+
+func readEditorDefinitions() (map[string][]byte, error) {
+ editorDefinitions := make(map[string][]byte)
+
+ files, err := os.ReadDir(editorsDefinitionsDir)
+ if err != nil {
+ return editorDefinitions, err
+ }
+
+ for _, file := range files {
+ if !file.IsDir() {
+ fileName := file.Name()
+
+ editorContent, err := os.ReadFile(filepath.Join(editorsDefinitionsDir, fileName))
+ if err != nil {
+ return editorDefinitions, err
+ }
+
+ var devfile map[string]interface{}
+ err = yaml.Unmarshal(editorContent, &devfile)
+ if err != nil {
+ return editorDefinitions, err
+ }
+
+ updateEditorDefinitionImageFromEnv(devfile)
+
+ editorContent, err = yaml.Marshal(devfile)
+ if err != nil {
+ return editorDefinitions, err
+ }
+
+ editorDefinitions[fileName] = editorContent
+ }
+ }
+
+ return editorDefinitions, nil
+}
+
+func updateEditorDefinitionImageFromEnv(devfile map[string]interface{}) {
+ notAllowedCharsReg, _ := regexp.Compile("[^a-zA-Z0-9]+")
+
+ metadata := devfile["metadata"].(map[string]interface{})
+ devfileName := metadata["name"].(string)
+ attributes := metadata["attributes"].(map[string]interface{})
+ devfileVersion := attributes["version"].(string)
+
+ components := devfile["components"].([]interface{})
+ for _, component := range components {
+ componentName := component.(map[string]interface{})["name"].(string)
+ if container, ok := component.(map[string]interface{})["container"].(map[string]interface{}); ok {
+ imageEnvName := fmt.Sprintf("RELATED_IMAGE_%s_%s_%s", devfileName, devfileVersion, componentName)
+ imageEnvName = notAllowedCharsReg.ReplaceAllString(imageEnvName, "_")
+ imageEnvName = utils.GetArchitectureDependentEnvName(imageEnvName)
+
+ if imageEnvValue, ok := os.LookupEnv(imageEnvName); ok {
+ container["image"] = imageEnvValue
+ }
+ }
+ }
+}
+
+func syncEditorDefinitions(ctx *chetypes.DeployContext, editorDefinitions map[string][]byte) (bool, error) {
+ cm := &corev1.ConfigMap{
+ TypeMeta: metav1.TypeMeta{
+ Kind: "ConfigMap",
+ APIVersion: "v1",
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Name: editorsDefinitionsConfigMapName,
+ Namespace: ctx.CheCluster.Namespace,
+ Labels: deploy.GetLabels(constants.EditorDefinitionComponentName),
+ Annotations: map[string]string{},
+ },
+ Data: map[string]string{},
+ }
+
+ for fileName, content := range editorDefinitions {
+ cm.Data[fileName] = string(content)
+ }
+
+ return deploy.Sync(ctx, cm, deploy.ConfigMapDiffOpts)
+}
diff --git a/pkg/deploy/pluginregistry/pluginregistry_editors_test.go b/pkg/deploy/pluginregistry/pluginregistry_editors_test.go
new file mode 100644
index 000000000..a31f257cb
--- /dev/null
+++ b/pkg/deploy/pluginregistry/pluginregistry_editors_test.go
@@ -0,0 +1,68 @@
+//
+// Copyright (c) 2019-2024 Red Hat, Inc.
+// This program and the accompanying materials are made
+// available under the terms of the Eclipse Public License 2.0
+// which is available at https://www.eclipse.org/legal/epl-2.0/
+//
+// SPDX-License-Identifier: EPL-2.0
+//
+// Contributors:
+// Red Hat, Inc. - initial API and implementation
+//
+
+package pluginregistry
+
+import (
+ "os"
+ "testing"
+
+ "github.com/eclipse-che/che-operator/pkg/common/test"
+ "github.com/stretchr/testify/assert"
+ "k8s.io/apimachinery/pkg/runtime"
+ "sigs.k8s.io/yaml"
+)
+
+func TestReadEditorDefinitions(t *testing.T) {
+ err := os.Setenv("RELATED_IMAGE_che_code_1_2_3_component_a", "image-new-a")
+ assert.NoError(t, err)
+
+ defer func() {
+ _ = os.Setenv("RELATED_IMAGE_che_code_1_2_3_component_a", "")
+ }()
+
+ editorDefinitions, err := readEditorDefinitions()
+ assert.NoError(t, err)
+ assert.NotEmpty(t, editorDefinitions)
+ assert.Equal(t, 1, len(editorDefinitions))
+ assert.Contains(t, editorDefinitions, "devfile.yaml")
+
+ var devfile map[string]interface{}
+ err = yaml.Unmarshal(editorDefinitions["devfile.yaml"], &devfile)
+ assert.NoError(t, err)
+
+ components := devfile["components"].([]interface{})
+
+ component := components[0].(map[string]interface{})
+ container := component["container"].(map[string]interface{})
+ assert.Equal(t, "image-new-a", container["image"])
+
+ component = components[1].(map[string]interface{})
+ container = component["container"].(map[string]interface{})
+ assert.Equal(t, "image-b", container["image"])
+
+ component = components[2].(map[string]interface{})
+ container, ok := component["container"].(map[string]interface{})
+ assert.False(t, ok)
+}
+
+func TestSyncEditorDefinitions(t *testing.T) {
+ ctx := test.GetDeployContext(nil, []runtime.Object{})
+
+ editorDefinitions, err := readEditorDefinitions()
+ assert.NoError(t, err)
+ assert.NotEmpty(t, editorDefinitions)
+
+ done, err := syncEditorDefinitions(ctx, editorDefinitions)
+ assert.NoError(t, err)
+ assert.True(t, done)
+}
diff --git a/pkg/deploy/pluginregistry/pluginregistry_test.go b/pkg/deploy/pluginregistry/pluginregistry_test.go
index ffe6cb7b4..266539bc9 100644
--- a/pkg/deploy/pluginregistry/pluginregistry_test.go
+++ b/pkg/deploy/pluginregistry/pluginregistry_test.go
@@ -1,5 +1,5 @@
//
-// Copyright (c) 2019-2023 Red Hat, Inc.
+// Copyright (c) 2019-2024 Red Hat, Inc.
// This program and the accompanying materials are made
// available under the terms of the Eclipse Public License 2.0
// which is available at https://www.eclipse.org/legal/epl-2.0/
@@ -37,6 +37,7 @@ func TestPluginRegistryReconcile(t *testing.T) {
assert.True(t, test.IsObjectExists(ctx.ClusterAPI.Client, types.NamespacedName{Name: "plugin-registry", Namespace: "eclipse-che"}, &corev1.Service{}))
assert.True(t, test.IsObjectExists(ctx.ClusterAPI.Client, types.NamespacedName{Name: "plugin-registry", Namespace: "eclipse-che"}, &corev1.ConfigMap{}))
+ assert.True(t, test.IsObjectExists(ctx.ClusterAPI.Client, types.NamespacedName{Name: "editors-definitions", Namespace: "eclipse-che"}, &corev1.ConfigMap{}))
assert.True(t, test.IsObjectExists(ctx.ClusterAPI.Client, types.NamespacedName{Name: "plugin-registry", Namespace: "eclipse-che"}, &appsv1.Deployment{}))
assert.NotEmpty(t, ctx.CheCluster.Status.PluginRegistryURL)
}
diff --git a/pkg/deploy/pluginregistry/test-editors-definitions/devfile.yaml b/pkg/deploy/pluginregistry/test-editors-definitions/devfile.yaml
new file mode 100644
index 000000000..c2a766892
--- /dev/null
+++ b/pkg/deploy/pluginregistry/test-editors-definitions/devfile.yaml
@@ -0,0 +1,25 @@
+#
+# Copyright (c) 2019-2024 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+schemaVersion: 2.2.2
+metadata:
+ name: che-code
+ attributes:
+ version: 1.2.3
+components:
+ - name: component-a
+ container:
+ image: image-a
+ - name: component-b
+ container:
+ image: image-b
+ - name: component-c
diff --git a/vendor/github.com/golang/mock/AUTHORS b/vendor/github.com/golang/mock/AUTHORS
deleted file mode 100644
index 660b8ccc8..000000000
--- a/vendor/github.com/golang/mock/AUTHORS
+++ /dev/null
@@ -1,12 +0,0 @@
-# This is the official list of GoMock authors for copyright purposes.
-# This file is distinct from the CONTRIBUTORS files.
-# See the latter for an explanation.
-
-# Names should be added to this file as
-# Name or Organization
-# The email address is not required for organizations.
-
-# Please keep the list sorted.
-
-Alex Reece
-Google Inc.
diff --git a/vendor/github.com/golang/mock/CONTRIBUTORS b/vendor/github.com/golang/mock/CONTRIBUTORS
deleted file mode 100644
index def849cab..000000000
--- a/vendor/github.com/golang/mock/CONTRIBUTORS
+++ /dev/null
@@ -1,37 +0,0 @@
-# This is the official list of people who can contribute (and typically
-# have contributed) code to the gomock repository.
-# The AUTHORS file lists the copyright holders; this file
-# lists people. For example, Google employees are listed here
-# but not in AUTHORS, because Google holds the copyright.
-#
-# The submission process automatically checks to make sure
-# that people submitting code are listed in this file (by email address).
-#
-# Names should be added to this file only after verifying that
-# the individual or the individual's organization has agreed to
-# the appropriate Contributor License Agreement, found here:
-#
-# http://code.google.com/legal/individual-cla-v1.0.html
-# http://code.google.com/legal/corporate-cla-v1.0.html
-#
-# The agreement for individuals can be filled out on the web.
-#
-# When adding J Random Contributor's name to this file,
-# either J's name or J's organization's name should be
-# added to the AUTHORS file, depending on whether the
-# individual or corporate CLA was used.
-
-# Names should be added to this file like so:
-# Name
-#
-# An entry with two email addresses specifies that the
-# first address should be used in the submit logs and
-# that the second address should be recognized as the
-# same person when interacting with Rietveld.
-
-# Please keep the list sorted.
-
-Aaron Jacobs
-Alex Reece
-David Symonds
-Ryan Barrett
diff --git a/vendor/github.com/golang/mock/LICENSE b/vendor/github.com/golang/mock/LICENSE
deleted file mode 100644
index d64569567..000000000
--- a/vendor/github.com/golang/mock/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- 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.
diff --git a/vendor/github.com/golang/mock/gomock/call.go b/vendor/github.com/golang/mock/gomock/call.go
deleted file mode 100644
index b18cc2d61..000000000
--- a/vendor/github.com/golang/mock/gomock/call.go
+++ /dev/null
@@ -1,433 +0,0 @@
-// Copyright 2010 Google Inc.
-//
-// 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 gomock
-
-import (
- "fmt"
- "reflect"
- "strconv"
- "strings"
-)
-
-// Call represents an expected call to a mock.
-type Call struct {
- t TestHelper // for triggering test failures on invalid call setup
-
- receiver interface{} // the receiver of the method call
- method string // the name of the method
- methodType reflect.Type // the type of the method
- args []Matcher // the args
- origin string // file and line number of call setup
-
- preReqs []*Call // prerequisite calls
-
- // Expectations
- minCalls, maxCalls int
-
- numCalls int // actual number made
-
- // actions are called when this Call is called. Each action gets the args and
- // can set the return values by returning a non-nil slice. Actions run in the
- // order they are created.
- actions []func([]interface{}) []interface{}
-}
-
-// newCall creates a *Call. It requires the method type in order to support
-// unexported methods.
-func newCall(t TestHelper, receiver interface{}, method string, methodType reflect.Type, args ...interface{}) *Call {
- t.Helper()
-
- // TODO: check arity, types.
- margs := make([]Matcher, len(args))
- for i, arg := range args {
- if m, ok := arg.(Matcher); ok {
- margs[i] = m
- } else if arg == nil {
- // Handle nil specially so that passing a nil interface value
- // will match the typed nils of concrete args.
- margs[i] = Nil()
- } else {
- margs[i] = Eq(arg)
- }
- }
-
- // callerInfo's skip should be updated if the number of calls between the user's test
- // and this line changes, i.e. this code is wrapped in another anonymous function.
- // 0 is us, 1 is RecordCallWithMethodType(), 2 is the generated recorder, and 3 is the user's test.
- origin := callerInfo(3)
- actions := []func([]interface{}) []interface{}{func([]interface{}) []interface{} {
- // Synthesize the zero value for each of the return args' types.
- rets := make([]interface{}, methodType.NumOut())
- for i := 0; i < methodType.NumOut(); i++ {
- rets[i] = reflect.Zero(methodType.Out(i)).Interface()
- }
- return rets
- }}
- return &Call{t: t, receiver: receiver, method: method, methodType: methodType,
- args: margs, origin: origin, minCalls: 1, maxCalls: 1, actions: actions}
-}
-
-// AnyTimes allows the expectation to be called 0 or more times
-func (c *Call) AnyTimes() *Call {
- c.minCalls, c.maxCalls = 0, 1e8 // close enough to infinity
- return c
-}
-
-// MinTimes requires the call to occur at least n times. If AnyTimes or MaxTimes have not been called or if MaxTimes
-// was previously called with 1, MinTimes also sets the maximum number of calls to infinity.
-func (c *Call) MinTimes(n int) *Call {
- c.minCalls = n
- if c.maxCalls == 1 {
- c.maxCalls = 1e8
- }
- return c
-}
-
-// MaxTimes limits the number of calls to n times. If AnyTimes or MinTimes have not been called or if MinTimes was
-// previously called with 1, MaxTimes also sets the minimum number of calls to 0.
-func (c *Call) MaxTimes(n int) *Call {
- c.maxCalls = n
- if c.minCalls == 1 {
- c.minCalls = 0
- }
- return c
-}
-
-// DoAndReturn declares the action to run when the call is matched.
-// The return values from this function are returned by the mocked function.
-// It takes an interface{} argument to support n-arity functions.
-func (c *Call) DoAndReturn(f interface{}) *Call {
- // TODO: Check arity and types here, rather than dying badly elsewhere.
- v := reflect.ValueOf(f)
-
- c.addAction(func(args []interface{}) []interface{} {
- vargs := make([]reflect.Value, len(args))
- ft := v.Type()
- for i := 0; i < len(args); i++ {
- if args[i] != nil {
- vargs[i] = reflect.ValueOf(args[i])
- } else {
- // Use the zero value for the arg.
- vargs[i] = reflect.Zero(ft.In(i))
- }
- }
- vrets := v.Call(vargs)
- rets := make([]interface{}, len(vrets))
- for i, ret := range vrets {
- rets[i] = ret.Interface()
- }
- return rets
- })
- return c
-}
-
-// Do declares the action to run when the call is matched. The function's
-// return values are ignored to retain backward compatibility. To use the
-// return values call DoAndReturn.
-// It takes an interface{} argument to support n-arity functions.
-func (c *Call) Do(f interface{}) *Call {
- // TODO: Check arity and types here, rather than dying badly elsewhere.
- v := reflect.ValueOf(f)
-
- c.addAction(func(args []interface{}) []interface{} {
- vargs := make([]reflect.Value, len(args))
- ft := v.Type()
- for i := 0; i < len(args); i++ {
- if args[i] != nil {
- vargs[i] = reflect.ValueOf(args[i])
- } else {
- // Use the zero value for the arg.
- vargs[i] = reflect.Zero(ft.In(i))
- }
- }
- v.Call(vargs)
- return nil
- })
- return c
-}
-
-// Return declares the values to be returned by the mocked function call.
-func (c *Call) Return(rets ...interface{}) *Call {
- c.t.Helper()
-
- mt := c.methodType
- if len(rets) != mt.NumOut() {
- c.t.Fatalf("wrong number of arguments to Return for %T.%v: got %d, want %d [%s]",
- c.receiver, c.method, len(rets), mt.NumOut(), c.origin)
- }
- for i, ret := range rets {
- if got, want := reflect.TypeOf(ret), mt.Out(i); got == want {
- // Identical types; nothing to do.
- } else if got == nil {
- // Nil needs special handling.
- switch want.Kind() {
- case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
- // ok
- default:
- c.t.Fatalf("argument %d to Return for %T.%v is nil, but %v is not nillable [%s]",
- i, c.receiver, c.method, want, c.origin)
- }
- } else if got.AssignableTo(want) {
- // Assignable type relation. Make the assignment now so that the generated code
- // can return the values with a type assertion.
- v := reflect.New(want).Elem()
- v.Set(reflect.ValueOf(ret))
- rets[i] = v.Interface()
- } else {
- c.t.Fatalf("wrong type of argument %d to Return for %T.%v: %v is not assignable to %v [%s]",
- i, c.receiver, c.method, got, want, c.origin)
- }
- }
-
- c.addAction(func([]interface{}) []interface{} {
- return rets
- })
-
- return c
-}
-
-// Times declares the exact number of times a function call is expected to be executed.
-func (c *Call) Times(n int) *Call {
- c.minCalls, c.maxCalls = n, n
- return c
-}
-
-// SetArg declares an action that will set the nth argument's value,
-// indirected through a pointer. Or, in the case of a slice, SetArg
-// will copy value's elements into the nth argument.
-func (c *Call) SetArg(n int, value interface{}) *Call {
- c.t.Helper()
-
- mt := c.methodType
- // TODO: This will break on variadic methods.
- // We will need to check those at invocation time.
- if n < 0 || n >= mt.NumIn() {
- c.t.Fatalf("SetArg(%d, ...) called for a method with %d args [%s]",
- n, mt.NumIn(), c.origin)
- }
- // Permit setting argument through an interface.
- // In the interface case, we don't (nay, can't) check the type here.
- at := mt.In(n)
- switch at.Kind() {
- case reflect.Ptr:
- dt := at.Elem()
- if vt := reflect.TypeOf(value); !vt.AssignableTo(dt) {
- c.t.Fatalf("SetArg(%d, ...) argument is a %v, not assignable to %v [%s]",
- n, vt, dt, c.origin)
- }
- case reflect.Interface:
- // nothing to do
- case reflect.Slice:
- // nothing to do
- default:
- c.t.Fatalf("SetArg(%d, ...) referring to argument of non-pointer non-interface non-slice type %v [%s]",
- n, at, c.origin)
- }
-
- c.addAction(func(args []interface{}) []interface{} {
- v := reflect.ValueOf(value)
- switch reflect.TypeOf(args[n]).Kind() {
- case reflect.Slice:
- setSlice(args[n], v)
- default:
- reflect.ValueOf(args[n]).Elem().Set(v)
- }
- return nil
- })
- return c
-}
-
-// isPreReq returns true if other is a direct or indirect prerequisite to c.
-func (c *Call) isPreReq(other *Call) bool {
- for _, preReq := range c.preReqs {
- if other == preReq || preReq.isPreReq(other) {
- return true
- }
- }
- return false
-}
-
-// After declares that the call may only match after preReq has been exhausted.
-func (c *Call) After(preReq *Call) *Call {
- c.t.Helper()
-
- if c == preReq {
- c.t.Fatalf("A call isn't allowed to be its own prerequisite")
- }
- if preReq.isPreReq(c) {
- c.t.Fatalf("Loop in call order: %v is a prerequisite to %v (possibly indirectly).", c, preReq)
- }
-
- c.preReqs = append(c.preReqs, preReq)
- return c
-}
-
-// Returns true if the minimum number of calls have been made.
-func (c *Call) satisfied() bool {
- return c.numCalls >= c.minCalls
-}
-
-// Returns true if the maximum number of calls have been made.
-func (c *Call) exhausted() bool {
- return c.numCalls >= c.maxCalls
-}
-
-func (c *Call) String() string {
- args := make([]string, len(c.args))
- for i, arg := range c.args {
- args[i] = arg.String()
- }
- arguments := strings.Join(args, ", ")
- return fmt.Sprintf("%T.%v(%s) %s", c.receiver, c.method, arguments, c.origin)
-}
-
-// Tests if the given call matches the expected call.
-// If yes, returns nil. If no, returns error with message explaining why it does not match.
-func (c *Call) matches(args []interface{}) error {
- if !c.methodType.IsVariadic() {
- if len(args) != len(c.args) {
- return fmt.Errorf("expected call at %s has the wrong number of arguments. Got: %d, want: %d",
- c.origin, len(args), len(c.args))
- }
-
- for i, m := range c.args {
- if !m.Matches(args[i]) {
- return fmt.Errorf(
- "expected call at %s doesn't match the argument at index %d.\nGot: %v\nWant: %v",
- c.origin, i, formatGottenArg(m, args[i]), m,
- )
- }
- }
- } else {
- if len(c.args) < c.methodType.NumIn()-1 {
- return fmt.Errorf("expected call at %s has the wrong number of matchers. Got: %d, want: %d",
- c.origin, len(c.args), c.methodType.NumIn()-1)
- }
- if len(c.args) != c.methodType.NumIn() && len(args) != len(c.args) {
- return fmt.Errorf("expected call at %s has the wrong number of arguments. Got: %d, want: %d",
- c.origin, len(args), len(c.args))
- }
- if len(args) < len(c.args)-1 {
- return fmt.Errorf("expected call at %s has the wrong number of arguments. Got: %d, want: greater than or equal to %d",
- c.origin, len(args), len(c.args)-1)
- }
-
- for i, m := range c.args {
- if i < c.methodType.NumIn()-1 {
- // Non-variadic args
- if !m.Matches(args[i]) {
- return fmt.Errorf("expected call at %s doesn't match the argument at index %s.\nGot: %v\nWant: %v",
- c.origin, strconv.Itoa(i), formatGottenArg(m, args[i]), m)
- }
- continue
- }
- // The last arg has a possibility of a variadic argument, so let it branch
-
- // sample: Foo(a int, b int, c ...int)
- if i < len(c.args) && i < len(args) {
- if m.Matches(args[i]) {
- // Got Foo(a, b, c) want Foo(matcherA, matcherB, gomock.Any())
- // Got Foo(a, b, c) want Foo(matcherA, matcherB, someSliceMatcher)
- // Got Foo(a, b, c) want Foo(matcherA, matcherB, matcherC)
- // Got Foo(a, b) want Foo(matcherA, matcherB)
- // Got Foo(a, b, c, d) want Foo(matcherA, matcherB, matcherC, matcherD)
- continue
- }
- }
-
- // The number of actual args don't match the number of matchers,
- // or the last matcher is a slice and the last arg is not.
- // If this function still matches it is because the last matcher
- // matches all the remaining arguments or the lack of any.
- // Convert the remaining arguments, if any, into a slice of the
- // expected type.
- vargsType := c.methodType.In(c.methodType.NumIn() - 1)
- vargs := reflect.MakeSlice(vargsType, 0, len(args)-i)
- for _, arg := range args[i:] {
- vargs = reflect.Append(vargs, reflect.ValueOf(arg))
- }
- if m.Matches(vargs.Interface()) {
- // Got Foo(a, b, c, d, e) want Foo(matcherA, matcherB, gomock.Any())
- // Got Foo(a, b, c, d, e) want Foo(matcherA, matcherB, someSliceMatcher)
- // Got Foo(a, b) want Foo(matcherA, matcherB, gomock.Any())
- // Got Foo(a, b) want Foo(matcherA, matcherB, someEmptySliceMatcher)
- break
- }
- // Wrong number of matchers or not match. Fail.
- // Got Foo(a, b) want Foo(matcherA, matcherB, matcherC, matcherD)
- // Got Foo(a, b, c) want Foo(matcherA, matcherB, matcherC, matcherD)
- // Got Foo(a, b, c, d) want Foo(matcherA, matcherB, matcherC, matcherD, matcherE)
- // Got Foo(a, b, c, d, e) want Foo(matcherA, matcherB, matcherC, matcherD)
- // Got Foo(a, b, c) want Foo(matcherA, matcherB)
-
- return fmt.Errorf("expected call at %s doesn't match the argument at index %s.\nGot: %v\nWant: %v",
- c.origin, strconv.Itoa(i), formatGottenArg(m, args[i:]), c.args[i])
- }
- }
-
- // Check that all prerequisite calls have been satisfied.
- for _, preReqCall := range c.preReqs {
- if !preReqCall.satisfied() {
- return fmt.Errorf("Expected call at %s doesn't have a prerequisite call satisfied:\n%v\nshould be called before:\n%v",
- c.origin, preReqCall, c)
- }
- }
-
- // Check that the call is not exhausted.
- if c.exhausted() {
- return fmt.Errorf("expected call at %s has already been called the max number of times", c.origin)
- }
-
- return nil
-}
-
-// dropPrereqs tells the expected Call to not re-check prerequisite calls any
-// longer, and to return its current set.
-func (c *Call) dropPrereqs() (preReqs []*Call) {
- preReqs = c.preReqs
- c.preReqs = nil
- return
-}
-
-func (c *Call) call() []func([]interface{}) []interface{} {
- c.numCalls++
- return c.actions
-}
-
-// InOrder declares that the given calls should occur in order.
-func InOrder(calls ...*Call) {
- for i := 1; i < len(calls); i++ {
- calls[i].After(calls[i-1])
- }
-}
-
-func setSlice(arg interface{}, v reflect.Value) {
- va := reflect.ValueOf(arg)
- for i := 0; i < v.Len(); i++ {
- va.Index(i).Set(v.Index(i))
- }
-}
-
-func (c *Call) addAction(action func([]interface{}) []interface{}) {
- c.actions = append(c.actions, action)
-}
-
-func formatGottenArg(m Matcher, arg interface{}) string {
- got := fmt.Sprintf("%v", arg)
- if gs, ok := m.(GotFormatter); ok {
- got = gs.Got(arg)
- }
- return got
-}
diff --git a/vendor/github.com/golang/mock/gomock/callset.go b/vendor/github.com/golang/mock/gomock/callset.go
deleted file mode 100644
index e4e85d602..000000000
--- a/vendor/github.com/golang/mock/gomock/callset.go
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2011 Google Inc.
-//
-// 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 gomock
-
-import (
- "bytes"
- "fmt"
-)
-
-// callSet represents a set of expected calls, indexed by receiver and method
-// name.
-type callSet struct {
- // Calls that are still expected.
- expected map[callSetKey][]*Call
- // Calls that have been exhausted.
- exhausted map[callSetKey][]*Call
-}
-
-// callSetKey is the key in the maps in callSet
-type callSetKey struct {
- receiver interface{}
- fname string
-}
-
-func newCallSet() *callSet {
- return &callSet{make(map[callSetKey][]*Call), make(map[callSetKey][]*Call)}
-}
-
-// Add adds a new expected call.
-func (cs callSet) Add(call *Call) {
- key := callSetKey{call.receiver, call.method}
- m := cs.expected
- if call.exhausted() {
- m = cs.exhausted
- }
- m[key] = append(m[key], call)
-}
-
-// Remove removes an expected call.
-func (cs callSet) Remove(call *Call) {
- key := callSetKey{call.receiver, call.method}
- calls := cs.expected[key]
- for i, c := range calls {
- if c == call {
- // maintain order for remaining calls
- cs.expected[key] = append(calls[:i], calls[i+1:]...)
- cs.exhausted[key] = append(cs.exhausted[key], call)
- break
- }
- }
-}
-
-// FindMatch searches for a matching call. Returns error with explanation message if no call matched.
-func (cs callSet) FindMatch(receiver interface{}, method string, args []interface{}) (*Call, error) {
- key := callSetKey{receiver, method}
-
- // Search through the expected calls.
- expected := cs.expected[key]
- var callsErrors bytes.Buffer
- for _, call := range expected {
- err := call.matches(args)
- if err != nil {
- _, _ = fmt.Fprintf(&callsErrors, "\n%v", err)
- } else {
- return call, nil
- }
- }
-
- // If we haven't found a match then search through the exhausted calls so we
- // get useful error messages.
- exhausted := cs.exhausted[key]
- for _, call := range exhausted {
- if err := call.matches(args); err != nil {
- _, _ = fmt.Fprintf(&callsErrors, "\n%v", err)
- continue
- }
- _, _ = fmt.Fprintf(
- &callsErrors, "all expected calls for method %q have been exhausted", method,
- )
- }
-
- if len(expected)+len(exhausted) == 0 {
- _, _ = fmt.Fprintf(&callsErrors, "there are no expected calls of the method %q for that receiver", method)
- }
-
- return nil, fmt.Errorf(callsErrors.String())
-}
-
-// Failures returns the calls that are not satisfied.
-func (cs callSet) Failures() []*Call {
- failures := make([]*Call, 0, len(cs.expected))
- for _, calls := range cs.expected {
- for _, call := range calls {
- if !call.satisfied() {
- failures = append(failures, call)
- }
- }
- }
- return failures
-}
diff --git a/vendor/github.com/golang/mock/gomock/controller.go b/vendor/github.com/golang/mock/gomock/controller.go
deleted file mode 100644
index 3b6569091..000000000
--- a/vendor/github.com/golang/mock/gomock/controller.go
+++ /dev/null
@@ -1,333 +0,0 @@
-// Copyright 2010 Google Inc.
-//
-// 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 gomock is a mock framework for Go.
-//
-// Standard usage:
-// (1) Define an interface that you wish to mock.
-// type MyInterface interface {
-// SomeMethod(x int64, y string)
-// }
-// (2) Use mockgen to generate a mock from the interface.
-// (3) Use the mock in a test:
-// func TestMyThing(t *testing.T) {
-// mockCtrl := gomock.NewController(t)
-// defer mockCtrl.Finish()
-//
-// mockObj := something.NewMockMyInterface(mockCtrl)
-// mockObj.EXPECT().SomeMethod(4, "blah")
-// // pass mockObj to a real object and play with it.
-// }
-//
-// By default, expected calls are not enforced to run in any particular order.
-// Call order dependency can be enforced by use of InOrder and/or Call.After.
-// Call.After can create more varied call order dependencies, but InOrder is
-// often more convenient.
-//
-// The following examples create equivalent call order dependencies.
-//
-// Example of using Call.After to chain expected call order:
-//
-// firstCall := mockObj.EXPECT().SomeMethod(1, "first")
-// secondCall := mockObj.EXPECT().SomeMethod(2, "second").After(firstCall)
-// mockObj.EXPECT().SomeMethod(3, "third").After(secondCall)
-//
-// Example of using InOrder to declare expected call order:
-//
-// gomock.InOrder(
-// mockObj.EXPECT().SomeMethod(1, "first"),
-// mockObj.EXPECT().SomeMethod(2, "second"),
-// mockObj.EXPECT().SomeMethod(3, "third"),
-// )
-package gomock
-
-import (
- "context"
- "fmt"
- "reflect"
- "runtime"
- "sync"
-)
-
-// A TestReporter is something that can be used to report test failures. It
-// is satisfied by the standard library's *testing.T.
-type TestReporter interface {
- Errorf(format string, args ...interface{})
- Fatalf(format string, args ...interface{})
-}
-
-// TestHelper is a TestReporter that has the Helper method. It is satisfied
-// by the standard library's *testing.T.
-type TestHelper interface {
- TestReporter
- Helper()
-}
-
-// cleanuper is used to check if TestHelper also has the `Cleanup` method. A
-// common pattern is to pass in a `*testing.T` to
-// `NewController(t TestReporter)`. In Go 1.14+, `*testing.T` has a cleanup
-// method. This can be utilized to call `Finish()` so the caller of this library
-// does not have to.
-type cleanuper interface {
- Cleanup(func())
-}
-
-// A Controller represents the top-level control of a mock ecosystem. It
-// defines the scope and lifetime of mock objects, as well as their
-// expectations. It is safe to call Controller's methods from multiple
-// goroutines. Each test should create a new Controller and invoke Finish via
-// defer.
-//
-// func TestFoo(t *testing.T) {
-// ctrl := gomock.NewController(t)
-// defer ctrl.Finish()
-// // ..
-// }
-//
-// func TestBar(t *testing.T) {
-// t.Run("Sub-Test-1", st) {
-// ctrl := gomock.NewController(st)
-// defer ctrl.Finish()
-// // ..
-// })
-// t.Run("Sub-Test-2", st) {
-// ctrl := gomock.NewController(st)
-// defer ctrl.Finish()
-// // ..
-// })
-// })
-type Controller struct {
- // T should only be called within a generated mock. It is not intended to
- // be used in user code and may be changed in future versions. T is the
- // TestReporter passed in when creating the Controller via NewController.
- // If the TestReporter does not implement a TestHelper it will be wrapped
- // with a nopTestHelper.
- T TestHelper
- mu sync.Mutex
- expectedCalls *callSet
- finished bool
-}
-
-// NewController returns a new Controller. It is the preferred way to create a
-// Controller.
-//
-// New in go1.14+, if you are passing a *testing.T into this function you no
-// longer need to call ctrl.Finish() in your test methods
-func NewController(t TestReporter) *Controller {
- h, ok := t.(TestHelper)
- if !ok {
- h = &nopTestHelper{t}
- }
- ctrl := &Controller{
- T: h,
- expectedCalls: newCallSet(),
- }
- if c, ok := isCleanuper(ctrl.T); ok {
- c.Cleanup(func() {
- ctrl.T.Helper()
- ctrl.finish(true, nil)
- })
- }
-
- return ctrl
-}
-
-type cancelReporter struct {
- t TestHelper
- cancel func()
-}
-
-func (r *cancelReporter) Errorf(format string, args ...interface{}) {
- r.t.Errorf(format, args...)
-}
-func (r *cancelReporter) Fatalf(format string, args ...interface{}) {
- defer r.cancel()
- r.t.Fatalf(format, args...)
-}
-
-func (r *cancelReporter) Helper() {
- r.t.Helper()
-}
-
-// WithContext returns a new Controller and a Context, which is cancelled on any
-// fatal failure.
-func WithContext(ctx context.Context, t TestReporter) (*Controller, context.Context) {
- h, ok := t.(TestHelper)
- if !ok {
- h = &nopTestHelper{t: t}
- }
-
- ctx, cancel := context.WithCancel(ctx)
- return NewController(&cancelReporter{t: h, cancel: cancel}), ctx
-}
-
-type nopTestHelper struct {
- t TestReporter
-}
-
-func (h *nopTestHelper) Errorf(format string, args ...interface{}) {
- h.t.Errorf(format, args...)
-}
-func (h *nopTestHelper) Fatalf(format string, args ...interface{}) {
- h.t.Fatalf(format, args...)
-}
-
-func (h nopTestHelper) Helper() {}
-
-// RecordCall is called by a mock. It should not be called by user code.
-func (ctrl *Controller) RecordCall(receiver interface{}, method string, args ...interface{}) *Call {
- ctrl.T.Helper()
-
- recv := reflect.ValueOf(receiver)
- for i := 0; i < recv.Type().NumMethod(); i++ {
- if recv.Type().Method(i).Name == method {
- return ctrl.RecordCallWithMethodType(receiver, method, recv.Method(i).Type(), args...)
- }
- }
- ctrl.T.Fatalf("gomock: failed finding method %s on %T", method, receiver)
- panic("unreachable")
-}
-
-// RecordCallWithMethodType is called by a mock. It should not be called by user code.
-func (ctrl *Controller) RecordCallWithMethodType(receiver interface{}, method string, methodType reflect.Type, args ...interface{}) *Call {
- ctrl.T.Helper()
-
- call := newCall(ctrl.T, receiver, method, methodType, args...)
-
- ctrl.mu.Lock()
- defer ctrl.mu.Unlock()
- ctrl.expectedCalls.Add(call)
-
- return call
-}
-
-// Call is called by a mock. It should not be called by user code.
-func (ctrl *Controller) Call(receiver interface{}, method string, args ...interface{}) []interface{} {
- ctrl.T.Helper()
-
- // Nest this code so we can use defer to make sure the lock is released.
- actions := func() []func([]interface{}) []interface{} {
- ctrl.T.Helper()
- ctrl.mu.Lock()
- defer ctrl.mu.Unlock()
-
- expected, err := ctrl.expectedCalls.FindMatch(receiver, method, args)
- if err != nil {
- // callerInfo's skip should be updated if the number of calls between the user's test
- // and this line changes, i.e. this code is wrapped in another anonymous function.
- // 0 is us, 1 is controller.Call(), 2 is the generated mock, and 3 is the user's test.
- origin := callerInfo(3)
- ctrl.T.Fatalf("Unexpected call to %T.%v(%v) at %s because: %s", receiver, method, args, origin, err)
- }
-
- // Two things happen here:
- // * the matching call no longer needs to check prerequite calls,
- // * and the prerequite calls are no longer expected, so remove them.
- preReqCalls := expected.dropPrereqs()
- for _, preReqCall := range preReqCalls {
- ctrl.expectedCalls.Remove(preReqCall)
- }
-
- actions := expected.call()
- if expected.exhausted() {
- ctrl.expectedCalls.Remove(expected)
- }
- return actions
- }()
-
- var rets []interface{}
- for _, action := range actions {
- if r := action(args); r != nil {
- rets = r
- }
- }
-
- return rets
-}
-
-// Finish checks to see if all the methods that were expected to be called
-// were called. It should be invoked for each Controller. It is not idempotent
-// and therefore can only be invoked once.
-func (ctrl *Controller) Finish() {
- // If we're currently panicking, probably because this is a deferred call.
- // This must be recovered in the deferred function.
- err := recover()
- ctrl.finish(false, err)
-}
-
-func (ctrl *Controller) finish(cleanup bool, panicErr interface{}) {
- ctrl.T.Helper()
-
- ctrl.mu.Lock()
- defer ctrl.mu.Unlock()
-
- if ctrl.finished {
- if _, ok := isCleanuper(ctrl.T); !ok {
- ctrl.T.Fatalf("Controller.Finish was called more than once. It has to be called exactly once.")
- }
- return
- }
- ctrl.finished = true
-
- // Short-circuit, pass through the panic.
- if panicErr != nil {
- panic(panicErr)
- }
-
- // Check that all remaining expected calls are satisfied.
- failures := ctrl.expectedCalls.Failures()
- for _, call := range failures {
- ctrl.T.Errorf("missing call(s) to %v", call)
- }
- if len(failures) != 0 {
- if !cleanup {
- ctrl.T.Fatalf("aborting test due to missing call(s)")
- return
- }
- ctrl.T.Errorf("aborting test due to missing call(s)")
- }
-}
-
-// callerInfo returns the file:line of the call site. skip is the number
-// of stack frames to skip when reporting. 0 is callerInfo's call site.
-func callerInfo(skip int) string {
- if _, file, line, ok := runtime.Caller(skip + 1); ok {
- return fmt.Sprintf("%s:%d", file, line)
- }
- return "unknown file"
-}
-
-// isCleanuper checks it if t's base TestReporter has a Cleanup method.
-func isCleanuper(t TestReporter) (cleanuper, bool) {
- tr := unwrapTestReporter(t)
- c, ok := tr.(cleanuper)
- return c, ok
-}
-
-// unwrapTestReporter unwraps TestReporter to the base implementation.
-func unwrapTestReporter(t TestReporter) TestReporter {
- tr := t
- switch nt := t.(type) {
- case *cancelReporter:
- tr = nt.t
- if h, check := tr.(*nopTestHelper); check {
- tr = h.t
- }
- case *nopTestHelper:
- tr = nt.t
- default:
- // not wrapped
- }
- return tr
-}
diff --git a/vendor/github.com/golang/mock/gomock/matchers.go b/vendor/github.com/golang/mock/gomock/matchers.go
deleted file mode 100644
index 770aba5a3..000000000
--- a/vendor/github.com/golang/mock/gomock/matchers.go
+++ /dev/null
@@ -1,269 +0,0 @@
-// Copyright 2010 Google Inc.
-//
-// 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 gomock
-
-import (
- "fmt"
- "reflect"
- "strings"
-)
-
-// A Matcher is a representation of a class of values.
-// It is used to represent the valid or expected arguments to a mocked method.
-type Matcher interface {
- // Matches returns whether x is a match.
- Matches(x interface{}) bool
-
- // String describes what the matcher matches.
- String() string
-}
-
-// WantFormatter modifies the given Matcher's String() method to the given
-// Stringer. This allows for control on how the "Want" is formatted when
-// printing .
-func WantFormatter(s fmt.Stringer, m Matcher) Matcher {
- type matcher interface {
- Matches(x interface{}) bool
- }
-
- return struct {
- matcher
- fmt.Stringer
- }{
- matcher: m,
- Stringer: s,
- }
-}
-
-// StringerFunc type is an adapter to allow the use of ordinary functions as
-// a Stringer. If f is a function with the appropriate signature,
-// StringerFunc(f) is a Stringer that calls f.
-type StringerFunc func() string
-
-// String implements fmt.Stringer.
-func (f StringerFunc) String() string {
- return f()
-}
-
-// GotFormatter is used to better print failure messages. If a matcher
-// implements GotFormatter, it will use the result from Got when printing
-// the failure message.
-type GotFormatter interface {
- // Got is invoked with the received value. The result is used when
- // printing the failure message.
- Got(got interface{}) string
-}
-
-// GotFormatterFunc type is an adapter to allow the use of ordinary
-// functions as a GotFormatter. If f is a function with the appropriate
-// signature, GotFormatterFunc(f) is a GotFormatter that calls f.
-type GotFormatterFunc func(got interface{}) string
-
-// Got implements GotFormatter.
-func (f GotFormatterFunc) Got(got interface{}) string {
- return f(got)
-}
-
-// GotFormatterAdapter attaches a GotFormatter to a Matcher.
-func GotFormatterAdapter(s GotFormatter, m Matcher) Matcher {
- return struct {
- GotFormatter
- Matcher
- }{
- GotFormatter: s,
- Matcher: m,
- }
-}
-
-type anyMatcher struct{}
-
-func (anyMatcher) Matches(interface{}) bool {
- return true
-}
-
-func (anyMatcher) String() string {
- return "is anything"
-}
-
-type eqMatcher struct {
- x interface{}
-}
-
-func (e eqMatcher) Matches(x interface{}) bool {
- // In case, some value is nil
- if e.x == nil || x == nil {
- return reflect.DeepEqual(e.x, x)
- }
-
- // Check if types assignable and convert them to common type
- x1Val := reflect.ValueOf(e.x)
- x2Val := reflect.ValueOf(x)
-
- if x1Val.Type().AssignableTo(x2Val.Type()) {
- x1ValConverted := x1Val.Convert(x2Val.Type())
- return reflect.DeepEqual(x1ValConverted.Interface(), x2Val.Interface())
- }
-
- return false
-}
-
-func (e eqMatcher) String() string {
- return fmt.Sprintf("is equal to %v", e.x)
-}
-
-type nilMatcher struct{}
-
-func (nilMatcher) Matches(x interface{}) bool {
- if x == nil {
- return true
- }
-
- v := reflect.ValueOf(x)
- switch v.Kind() {
- case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map,
- reflect.Ptr, reflect.Slice:
- return v.IsNil()
- }
-
- return false
-}
-
-func (nilMatcher) String() string {
- return "is nil"
-}
-
-type notMatcher struct {
- m Matcher
-}
-
-func (n notMatcher) Matches(x interface{}) bool {
- return !n.m.Matches(x)
-}
-
-func (n notMatcher) String() string {
- // TODO: Improve this if we add a NotString method to the Matcher interface.
- return "not(" + n.m.String() + ")"
-}
-
-type assignableToTypeOfMatcher struct {
- targetType reflect.Type
-}
-
-func (m assignableToTypeOfMatcher) Matches(x interface{}) bool {
- return reflect.TypeOf(x).AssignableTo(m.targetType)
-}
-
-func (m assignableToTypeOfMatcher) String() string {
- return "is assignable to " + m.targetType.Name()
-}
-
-type allMatcher struct {
- matchers []Matcher
-}
-
-func (am allMatcher) Matches(x interface{}) bool {
- for _, m := range am.matchers {
- if !m.Matches(x) {
- return false
- }
- }
- return true
-}
-
-func (am allMatcher) String() string {
- ss := make([]string, 0, len(am.matchers))
- for _, matcher := range am.matchers {
- ss = append(ss, matcher.String())
- }
- return strings.Join(ss, "; ")
-}
-
-type lenMatcher struct {
- i int
-}
-
-func (m lenMatcher) Matches(x interface{}) bool {
- v := reflect.ValueOf(x)
- switch v.Kind() {
- case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice, reflect.String:
- return v.Len() == m.i
- default:
- return false
- }
-}
-
-func (m lenMatcher) String() string {
- return fmt.Sprintf("has length %d", m.i)
-}
-
-// Constructors
-
-// All returns a composite Matcher that returns true if and only all of the
-// matchers return true.
-func All(ms ...Matcher) Matcher { return allMatcher{ms} }
-
-// Any returns a matcher that always matches.
-func Any() Matcher { return anyMatcher{} }
-
-// Eq returns a matcher that matches on equality.
-//
-// Example usage:
-// Eq(5).Matches(5) // returns true
-// Eq(5).Matches(4) // returns false
-func Eq(x interface{}) Matcher { return eqMatcher{x} }
-
-// Len returns a matcher that matches on length. This matcher returns false if
-// is compared to a type that is not an array, chan, map, slice, or string.
-func Len(i int) Matcher {
- return lenMatcher{i}
-}
-
-// Nil returns a matcher that matches if the received value is nil.
-//
-// Example usage:
-// var x *bytes.Buffer
-// Nil().Matches(x) // returns true
-// x = &bytes.Buffer{}
-// Nil().Matches(x) // returns false
-func Nil() Matcher { return nilMatcher{} }
-
-// Not reverses the results of its given child matcher.
-//
-// Example usage:
-// Not(Eq(5)).Matches(4) // returns true
-// Not(Eq(5)).Matches(5) // returns false
-func Not(x interface{}) Matcher {
- if m, ok := x.(Matcher); ok {
- return notMatcher{m}
- }
- return notMatcher{Eq(x)}
-}
-
-// AssignableToTypeOf is a Matcher that matches if the parameter to the mock
-// function is assignable to the type of the parameter to this function.
-//
-// Example usage:
-// var s fmt.Stringer = &bytes.Buffer{}
-// AssignableToTypeOf(s).Matches(time.Second) // returns true
-// AssignableToTypeOf(s).Matches(99) // returns false
-//
-// var ctx = reflect.TypeOf((*context.Context)(nil)).Elem()
-// AssignableToTypeOf(ctx).Matches(context.Background()) // returns true
-func AssignableToTypeOf(x interface{}) Matcher {
- if xt, ok := x.(reflect.Type); ok {
- return assignableToTypeOfMatcher{xt}
- }
- return assignableToTypeOfMatcher{reflect.TypeOf(x)}
-}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 1c26272ce..e36ad62c1 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -80,9 +80,6 @@ github.com/gogo/protobuf/sortkeys
# github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da => github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e
## explicit
github.com/golang/groupcache/lru
-# github.com/golang/mock v1.5.0
-## explicit; go 1.11
-github.com/golang/mock/gomock
# github.com/golang/protobuf v1.5.3 => github.com/golang/protobuf v1.4.3
## explicit; go 1.9
github.com/golang/protobuf/jsonpb