From b531b912e6caad7834f3f7fb8e33379b2881ea1f Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 23 Nov 2023 10:12:24 +0200 Subject: [PATCH] Release 0.1.37 (#292) * CR-20911-app-proxy (#284) * bump app-proxy with security fixes * update app-proxy with security fix in autopilot * CR-20910 -- Fix gitops vulns (#285) Fix gitops vulns * feat: csdp-add-cluster chart templates update (#286) * appVersions (#288) * bump app-proxy (#289) Update kustomization.yaml * fix: argocd-manager sa token for openshift (#290) * Bump app-proxy (#291) Update kustomization.yaml * release 0.1.37 --------- Co-authored-by: Oleksandr Saulyak Co-authored-by: Yaroslav Drachenko Co-authored-by: mikhail-klimko Co-authored-by: Andrii Shaforostov Co-authored-by: Daniel Maizel --- Makefile | 18 ++- VERSION | 2 +- add-cluster/add-cluster.sh | 4 + add-cluster/helm/Chart.yaml | 18 ++- add-cluster/helm/templates/_helpers.tpl | 34 +++-- add-cluster/helm/templates/clusterrole.yaml | 4 +- .../helm/templates/clusterrolebinding.yaml | 8 +- add-cluster/helm/templates/configmap.yaml | 8 +- add-cluster/helm/templates/job.yaml | 118 +++++++++++------- add-cluster/helm/templates/secret.yaml | 4 +- .../helm/templates/serviceaccount.yaml | 22 +++- add-cluster/helm/values.yaml | 102 ++++++++++++--- add-cluster/kustomize/kustomization.yaml | 2 +- checkout-test-branch.sh | 3 + csdp/base_components/README.yaml | 4 +- .../codefresh-base/kustomization.yaml | 2 +- .../codefresh-base/kustomization.yaml | 2 +- .../bootstrap/kustomization.yaml | 4 +- csdp/hybrid/basic/runtime.yaml | 2 +- 19 files changed, 259 insertions(+), 102 deletions(-) diff --git a/Makefile b/Makefile index 48f5f56f..df07a45e 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,12 @@ VERSION=$(shell cat VERSION) KUST_VERSION_FILE="./csdp/base_components/bootstrap/kustomization.yaml" RUNTIME_YAML_FILE="./csdp/hybrid/basic/runtime.yaml" +YQ_BINARY := /usr/local/bin/yq BUMP_CHECK_MSG="Error: git working tree is not clean, make sure that you ran 'make bump' locally and commit the changes!" .PHONY: bump -bump: /usr/local/bin/yq +bump: $(YQ_BINARY) @echo "bumping version ${VERSION}" @echo "--> updating file: ${KUST_VERSION_FILE}" @@ -22,8 +23,13 @@ check-bump: bump @git status --short && git diff --quiet || (echo "\n${BUMP_CHECK_MSG}" && exit 1) -/usr/local/bin/yq: - @echo "Downloading yq..." - @curl -L https://github.com/mikefarah/yq/releases/latest/download/yq_$(shell go env GOOS)_$(shell go env GOARCH) -o /usr/local/bin/yq &&\ - chmod +x /usr/local/bin/yq - @yq --version +$(YQ_BINARY): + @echo "Checking if yq is installed..." + @if command -v yq > /dev/null ; then \ + echo "yq is already installed"; \ + else \ + @echo "Downloading yq..." \ + @curl -L https://github.com/mikefarah/yq/releases/latest/download/yq_$(shell go env GOOS)_$(shell go env GOARCH) -o $(YQ_BINARY) &&\ + chmod +x $(YQ_BINARY); \ + @yq --version; \ + fi diff --git a/VERSION b/VERSION index 072d0fa3..9f42295f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.36 +0.1.37 diff --git a/add-cluster/add-cluster.sh b/add-cluster/add-cluster.sh index 7332b02b..2ca45fa7 100755 --- a/add-cluster/add-cluster.sh +++ b/add-cluster/add-cluster.sh @@ -9,6 +9,10 @@ # CSDP_TOKEN_SECRET # SKIP_TLS_VALIDATION (cm - optional) +if $DEBUG; then + set -eou xtrace +fi + SECRET_NAME="" function get_service_account_secret_name() { diff --git a/add-cluster/helm/Chart.yaml b/add-cluster/helm/Chart.yaml index e3fb5625..eee6ff13 100644 --- a/add-cluster/helm/Chart.yaml +++ b/add-cluster/helm/Chart.yaml @@ -1,9 +1,17 @@ apiVersion: v2 name: csdp-add-cluster description: This helm chart adds a remote cluster to an existing Codefresh runtime - type: application - -version: 0.2.0 - -appVersion: 0.7.0 +version: 0.4.0 +appVersion: 0.8.0 +home: https://codefresh.io/ +icon: https://avatars1.githubusercontent.com/u/11412079?v=3 +sources: + - https://github.com/codefresh-io/csdp-official/tree/main/add-cluster/helm +maintainers: + - name: codefresh + url: https://codefresh-io.github.io/ +dependencies: + - name: cf-common + repository: oci://quay.io/codefresh/charts + version: 0.16.0 \ No newline at end of file diff --git a/add-cluster/helm/templates/_helpers.tpl b/add-cluster/helm/templates/_helpers.tpl index 2cbb2f46..e2a99202 100644 --- a/add-cluster/helm/templates/_helpers.tpl +++ b/add-cluster/helm/templates/_helpers.tpl @@ -45,14 +45,28 @@ app.kubernetes.io/managed-by: {{ .Release.Service }} Creates the ServiceAccount name (used for the *Role and *RoleBinding as well) Based on the "argocd-manager" unless explicitly set */}} -{{- define "csdp-add-cluster.serviceAccount" -}} -{{- if .Values.serviceAccount }} -{{- .Values.serviceAccount | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- if contains "argocd-manager" .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name "argocd-manager" | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} +{{- define "csdp-add-cluster.serviceAccountName" -}} + {{- if .Values.serviceAccount.create }} + {{- default (include "csdp-add-cluster.fullname" .) .Values.serviceAccount.name }} + {{- else }} + {{- default "default" .Values.serviceAccount.name }} + {{- end }} {{- end }} + +{{/* +Environment variable value of Codefresh installation token +*/}} +{{- define "csdp-add-cluster.token-env-var-value" -}} + {{- if .Values.codefresh.userToken.token }} +valueFrom: + secretKeyRef: + name: {{ include "csdp-add-cluster.fullname" . }}-secret + key: codefresh-api-token + {{- else if .Values.codefresh.userToken.secretKeyRef }} +valueFrom: + secretKeyRef: + {{- .Values.codefresh.userToken.secretKeyRef | toYaml | nindent 4 }} + {{- else }} +{{ fail ".Values.codefresh.userToken OR .Values.codefresh.userToken.secretKeyRef is required!" }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/add-cluster/helm/templates/clusterrole.yaml b/add-cluster/helm/templates/clusterrole.yaml index c485264f..99dc2ee1 100644 --- a/add-cluster/helm/templates/clusterrole.yaml +++ b/add-cluster/helm/templates/clusterrole.yaml @@ -1,7 +1,8 @@ +{{- if .Values.rbac.create }} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - name: {{ include "csdp-add-cluster.serviceAccount" . }}-role + name: {{ include "csdp-add-cluster.serviceAccountName" . }}-role labels: {{- include "csdp-add-cluster.labels" . | nindent 4 }} rules: @@ -15,3 +16,4 @@ rules: - '*' verbs: - '*' +{{- end }} diff --git a/add-cluster/helm/templates/clusterrolebinding.yaml b/add-cluster/helm/templates/clusterrolebinding.yaml index 88a328c1..bab00fc7 100644 --- a/add-cluster/helm/templates/clusterrolebinding.yaml +++ b/add-cluster/helm/templates/clusterrolebinding.yaml @@ -1,14 +1,16 @@ +{{- if .Values.rbac.create }} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: - name: {{ include "csdp-add-cluster.serviceAccount" . }}-role-binding + name: {{ include "csdp-add-cluster.serviceAccountName" . }}-role-binding labels: {{- include "csdp-add-cluster.labels" . | nindent 4 }} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole - name: {{ include "csdp-add-cluster.serviceAccount" . }}-role + name: {{ include "csdp-add-cluster.serviceAccountName" . }}-role subjects: - kind: ServiceAccount - name: {{ include "csdp-add-cluster.serviceAccount" . }} + name: {{ include "csdp-add-cluster.serviceAccountName" . }} namespace: {{ .Values.systemNamespace | default "kube-system" }} +{{- end }} diff --git a/add-cluster/helm/templates/configmap.yaml b/add-cluster/helm/templates/configmap.yaml index 44eeb5f0..3ab88e2c 100644 --- a/add-cluster/helm/templates/configmap.yaml +++ b/add-cluster/helm/templates/configmap.yaml @@ -2,12 +2,12 @@ apiVersion: v1 kind: ConfigMap metadata: name: {{ include "csdp-add-cluster.fullname" . }}-cm - namespace: kube-system + namespace: {{ .Values.systemNamespace | default "kube-system" }} labels: {{- include "csdp-add-cluster.labels" . | nindent 4 }} data: - ingressUrl: {{ .Values.ingressUrl | quote }} - contextName: {{ .Values.contextName | quote }} - server: {{ .Values.server | quote }} + ingressUrl: {{ required ".Values.ingressUrl is required!" .Values.ingressUrl | quote }} + contextName: {{ required ".Values.contextName is required!" .Values.contextName | quote }} + server: {{ required ".Values.server is required!" .Values.server | quote }} labels: {{ .Values.labels | quote }} annotations: {{ .Values.annotations | quote }} diff --git a/add-cluster/helm/templates/job.yaml b/add-cluster/helm/templates/job.yaml index df4632d3..96b0de30 100644 --- a/add-cluster/helm/templates/job.yaml +++ b/add-cluster/helm/templates/job.yaml @@ -1,3 +1,4 @@ +{{ $cfCommonTplSemver := printf "cf-common-%s" (index .Subcharts "cf-common").Chart.Version }} apiVersion: batch/v1 kind: Job metadata: @@ -6,64 +7,87 @@ metadata: labels: {{- include "csdp-add-cluster.labels" . | nindent 4 }} spec: - ttlSecondsAfterFinished: 600 # stick around for 10m + {{- with .Values.ttlSecondsAfterFinished }} + ttlSecondsAfterFinished: {{ . }} + {{- end }} + {{- with .Values.backoffLimit }} + backoffLimit: {{ .}} + {{- end }} template: metadata: name: {{ include "csdp-add-cluster.fullname" . }}-pod + labels: + {{- include "csdp-add-cluster.labels" . | nindent 8 }} spec: - serviceAccount: {{ include "csdp-add-cluster.serviceAccount" . }} - restartPolicy: Never + {{- include (printf "%s.image.pullSecrets" $cfCommonTplSemver ) . | nindent 8 }} + serviceAccount: {{ include "csdp-add-cluster.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} containers: - name: main - image: "quay.io/codefresh/csdp-add-cluster:{{ .Chart.AppVersion }}" - imagePullPolicy: Always + image: {{ include (printf "%v.tplrender" $cfCommonTplSemver) (dict "Values" (include (printf "%s.image.name" $cfCommonTplSemver ) (dict "image" .Values.image "context" .)) "context" .) }} + imagePullPolicy: {{ .Values.image.pullPolicy | default "Always" }} command: - bash args: - ./add-cluster.sh env: - - name: SERVICE_ACCOUNT_NAME - valueFrom: - fieldRef: - fieldPath: spec.serviceAccountName - - name: INGRESS_URL - valueFrom: - configMapKeyRef: - name: {{ include "csdp-add-cluster.fullname" . }}-cm - key: ingressUrl - - name: CSDP_TOKEN - valueFrom: - secretKeyRef: - name: {{ include "csdp-add-cluster.fullname" . }}-secret - key: csdpToken - - name: CONTEXT_NAME - valueFrom: - configMapKeyRef: - name: {{ include "csdp-add-cluster.fullname" . }}-cm - key: contextName - - name: SERVER - valueFrom: - configMapKeyRef: - name: {{ include "csdp-add-cluster.fullname" . }}-cm - key: server - - name: CSDP_TOKEN_SECRET - value: {{ include "csdp-add-cluster.fullname" . }}-secret + - name: SERVICE_ACCOUNT_NAME + valueFrom: + fieldRef: + fieldPath: spec.serviceAccountName + - name: INGRESS_URL + valueFrom: + configMapKeyRef: + name: {{ include "csdp-add-cluster.fullname" . }}-cm + key: ingressUrl + - name: CSDP_TOKEN + {{- include "csdp-add-cluster.token-env-var-value" . | indent 12 }} + - name: CONTEXT_NAME + valueFrom: + configMapKeyRef: + name: {{ include "csdp-add-cluster.fullname" . }}-cm + key: contextName + - name: SERVER + valueFrom: + configMapKeyRef: + name: {{ include "csdp-add-cluster.fullname" . }}-cm + key: server + - name: CSDP_TOKEN_SECRET + value: {{ include "csdp-add-cluster.fullname" . }}-secret + {{- include (printf "%s.env-vars" $cfCommonTplSemver) (dict "Values" .Values.env "context" .) | nindent 10 }} volumeMounts: - - name: config-volume - mountPath: /etc/config + - name: config-volume + mountPath: /etc/config + {{- with .Values.extraVolumeMounts }} + {{- toYaml . | nindent 10 }} + {{- end }} + {{- with .Values.resources }} resources: - limits: - memory: 512Mi - cpu: '1' - requests: - memory: 256Mi - cpu: '0.2' + {{- toYaml . | nindent 12 }} + {{- end }} volumes: - - name: config-volume - configMap: - name: {{ include "csdp-add-cluster.fullname" . }}-cm - items: - - key: annotations - path: annotations.yaml - - key: labels - path: labels.yaml + - name: config-volume + configMap: + name: {{ include "csdp-add-cluster.fullname" . }}-cm + items: + - key: annotations + path: annotations.yaml + - key: labels + path: labels.yaml + {{- with .Values.extraVolumes }} + {{- toYaml . | nindent 6 }} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 6 }} + {{- end }} + restartPolicy: OnFailure \ No newline at end of file diff --git a/add-cluster/helm/templates/secret.yaml b/add-cluster/helm/templates/secret.yaml index 92ab3165..d6636ce6 100644 --- a/add-cluster/helm/templates/secret.yaml +++ b/add-cluster/helm/templates/secret.yaml @@ -1,3 +1,4 @@ +{{- if .Values.codefresh.userToken.token }} apiVersion: v1 kind: Secret metadata: @@ -7,4 +8,5 @@ metadata: {{- include "csdp-add-cluster.labels" . | nindent 4 }} type: Opaque data: - csdpToken: {{ .Values.csdpToken | b64enc | quote }} + codefresh-api-token: {{ .Values.codefresh.userToken.token | b64enc | quote }} +{{- end }} diff --git a/add-cluster/helm/templates/serviceaccount.yaml b/add-cluster/helm/templates/serviceaccount.yaml index efededdb..d420071c 100644 --- a/add-cluster/helm/templates/serviceaccount.yaml +++ b/add-cluster/helm/templates/serviceaccount.yaml @@ -1,7 +1,27 @@ +{{- if .Values.serviceAccount.create }} apiVersion: v1 kind: ServiceAccount metadata: - name: {{ include "csdp-add-cluster.serviceAccount" . }} + name: {{ include "csdp-add-cluster.serviceAccountName" . }} namespace: {{ .Values.systemNamespace | default "kube-system" }} labels: {{- include "csdp-add-cluster.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- if .Values.serviceAccount.secret }} + {{- if .Values.serviceAccount.secret.create }} +secrets: + - name: {{ include "csdp-add-cluster.serviceAccountName" . }}-sa-token +--- +apiVersion: v1 +kind: Secret +type: kubernetes.io/service-account-token +metadata: + name: {{ include "csdp-add-cluster.serviceAccountName" . }}-sa-token + annotations: + kubernetes.io/service-account.name: {{ include "csdp-add-cluster.serviceAccountName" . }} + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/add-cluster/helm/values.yaml b/add-cluster/helm/values.yaml index 577b6564..1335649d 100644 --- a/add-cluster/helm/values.yaml +++ b/add-cluster/helm/values.yaml @@ -1,31 +1,103 @@ -# serviceAccountName is the name of the ServiceAccount Argo-CD will use to access the cluster -serviceAccountName: argocd-manager +# -- String to partially override csdp-add-cluster.fullname template (will maintain the release name) +nameOverride: "" +# -- String to fully override csdp-add-cluster.fullname template +fullnameOverride: "" -# ingressUrl is the url used to access the CSDP runtime -# example https://some.domain.name -ingressUrl: +# -- Global parameters +global: + # -- Global Docker image registry + imageRegistry: "" + # -- Global Docker registry secret names as array + imagePullSecrets: [] -# csdpToken is the user's Personal Access Token -csdpToken: +# -- GitOps-Runtime Ingress hostname +ingressUrl: "" -# contextName is the name of the cluster in Argo-CD -contextName: +# -- Codefresh platform settings +codefresh: + # -- User token. + userToken: + # -- User token in plain text. + token: "" + # -- User token that references an existing secret containing the token. + secretKeyRef: {} -# server is the k8s cluster API endpoint url +# -- contextName is the name of the cluster in Argo-CD +contextName: "" + +# -- namespace to deploy helm chart +systemNamespace: kube-system + +# -- server is the k8s cluster API endpoint url # can be obtained by # CONTEXT_NAME= # CLUSTER_NAME=$(kubectl config view --raw --flatten -o jsonpath='{.contexts[?(@.name == "'"${CONTEXT_NAME}"'")].context.cluster}') # kubectl config view --raw --flatten -o jsonpath='{.clusters[?(@.name == "'"${CLUSTER_NAME}"'")].cluster.server}' -server: +server: "" + +# -- Create RBAC resources +rbac: + create: true + +# -- Create ServiceAccount +serviceAccount: + create: true + # -- Create ServiceAccount secret + secret: + create: true + name: argocd-manager + annotations: {} + +# -- Image +image: + registry: quay.io + repository: codefresh/csdp-add-cluster + tag: '{{ .Chart.AppVersion }}' + pullPolicy: IfNotPresent + +# -- Set ttlSecondsAfterFinished for the Job +ttlSecondsAfterFinished: 600 +# -- Set backoffLimit for the Job +backoffLimit: 0 + +# -- Set pod security context +podSecurityContext: {} +# -- Set extra env vars +env: {} +# e.g. +# env: +# SKIP_TLS_VALIDATION: true +# DEBUG: true + +# -- Set nodeSelector +nodeSelector: {} +# -- Set affinity +affinity: {} +# -- Set tolerations +tolerations: [] + +# -- Set resources +resources: + limits: + memory: 512Mi + cpu: '1' + requests: + memory: 256Mi + cpu: '0.2' + +# -- Set extra volume mounts for the Job +extraVolumeMounts: [] +# -- Set extra volumes for the Job +extraVolumes: [] -# labels for cluster secret metadata -# example +# -- labels for cluster secret metadata +# e.g. # labels: | # some.label.key/field: label_value labels: '' # annotations for cluster secret metadata -# example +# e.g. # annotations: | # some.annotation.key/field: annotation value -annotations: '' +annotations: '' \ No newline at end of file diff --git a/add-cluster/kustomize/kustomization.yaml b/add-cluster/kustomize/kustomization.yaml index 02ad22e7..30294cb9 100644 --- a/add-cluster/kustomize/kustomization.yaml +++ b/add-cluster/kustomize/kustomization.yaml @@ -4,7 +4,7 @@ namespace: kube-system images: - name: quay.io/codefresh/csdp-add-cluster - newTag: 0.7.0 + newTag: 0.8.0 resources: - configmap.yaml diff --git a/checkout-test-branch.sh b/checkout-test-branch.sh index 2b7c0571..8835831a 100755 --- a/checkout-test-branch.sh +++ b/checkout-test-branch.sh @@ -1,5 +1,8 @@ #!/bin/bash +set -o pipefail +set -e + if [ $# -ne 2 ]; then echo "Please provide exactly two arguments." echo "Usage: ./checkout-test-branch.sh \$target_version \$prerelease_version_suffix" diff --git a/csdp/base_components/README.yaml b/csdp/base_components/README.yaml index 9d6cda3c..3be82b84 100644 --- a/csdp/base_components/README.yaml +++ b/csdp/base_components/README.yaml @@ -1,8 +1,7 @@ - All resources are defined using Kustomize components in this folder in the following structure: base_components: - apps: + apps: : For example app-proxy, argo-cd, etc. _components: Abstract building blocks of the applcation Kustomization. Should contain patches and manifests. Try to keep `images` patches in `codefresh-base` kustomization, unless you need one `bundle` to have @@ -12,3 +11,4 @@ base_components: Try to keep resources and patches out of the bundle kustomization, it should contain only the composition of components. bootstrap: This is the bootstrap component + diff --git a/csdp/base_components/apps/app-proxy/_components/codefresh-base/kustomization.yaml b/csdp/base_components/apps/app-proxy/_components/codefresh-base/kustomization.yaml index 2fe7d17a..cd6f3c26 100644 --- a/csdp/base_components/apps/app-proxy/_components/codefresh-base/kustomization.yaml +++ b/csdp/base_components/apps/app-proxy/_components/codefresh-base/kustomization.yaml @@ -4,7 +4,7 @@ kind: Component images: - name: quay.io/codefresh/cap-app-proxy newName: quay.io/codefresh/cap-app-proxy - newTag: 1.2471.1 + newTag: 1.2545.0 resources: - app-proxy.deploy.yaml diff --git a/csdp/base_components/apps/argo-cd/_components/codefresh-base/kustomization.yaml b/csdp/base_components/apps/argo-cd/_components/codefresh-base/kustomization.yaml index 5ab0ffcb..1d0403f0 100644 --- a/csdp/base_components/apps/argo-cd/_components/codefresh-base/kustomization.yaml +++ b/csdp/base_components/apps/argo-cd/_components/codefresh-base/kustomization.yaml @@ -5,7 +5,7 @@ resources: images: - name: quay.io/codefresh/argocd - newTag: v2.8.1-cap-CR-not-setup-kustomize-ns + newTag: v2.8.1-cap-CR-app-versions - name: quay.io/codefresh/applicationset newTag: v0.4.2-CR-13254-remove-private-logs diff --git a/csdp/base_components/bootstrap/kustomization.yaml b/csdp/base_components/bootstrap/kustomization.yaml index 29108db9..37064c44 100644 --- a/csdp/base_components/bootstrap/kustomization.yaml +++ b/csdp/base_components/bootstrap/kustomization.yaml @@ -9,8 +9,8 @@ configMapGenerator: - name: codefresh-cm behavior: create literals: # order matters - DO NOT change - - version=0.1.36 # Runtime version - - bootstrapRevision=0.1.36 # Tag to use for bootstrap (change this to the name of your branch if you want to test changes) + - version=0.1.37 # Runtime version + - bootstrapRevision=0.1.37 # Tag to use for bootstrap (change this to the name of your branch if you want to test changes) - appsetRequeueTime=15 replacements: # template the version from the configmap into the applicationset generators diff --git a/csdp/hybrid/basic/runtime.yaml b/csdp/hybrid/basic/runtime.yaml index 8f280876..ff3acfd1 100644 --- a/csdp/hybrid/basic/runtime.yaml +++ b/csdp/hybrid/basic/runtime.yaml @@ -5,7 +5,7 @@ metadata: namespace: "{{ namespace }}" spec: requiredCLIVersion: ^0.1.0 - version: 0.1.36 + version: 0.1.37 bootstrapSpecifier: github.com/codefresh-io/csdp-official/csdp/hybrid/basic/apps/argo-cd components: - name: events