diff --git a/CHANGELOG/release-notes-v1.5.0.md b/CHANGELOG/release-notes-v1.5.0.md new file mode 100644 index 0000000000..12ce18e29e --- /dev/null +++ b/CHANGELOG/release-notes-v1.5.0.md @@ -0,0 +1,19 @@ +## v1.5.0 + +## Enhancements +- feat: Config Approval bypass v1 (for cm, cs and deployment template) (#6493) +- feat: Licensing changes (#6474) +## Bugs +- fix: Added support for IAM role S3 blob client (#6521) +- fix: Making tx independent of git sensor call (#6519) +- fix: Sql query memory issue (#6516) +- fix: Grafana data-source get API (#6503) +- fix: Made triggeredBy for CI & CD uniform (#6489) +- fix: HPA permission denied error (#6485) +- fix: Force abort for pre/post cd (#6475) +- fix: Optimisation in workflow status api (#6473) +- fix: Let user delete the container reg if the ref app was deleted (#6464) +## Others +- misc: Update the descriptions of env variables (#6499) +- misc: Patch api for user attribute (#6490) +- chore: Nil implementations fixed for user attribute in telemetry (#6497) diff --git a/charts/devtron/Chart.yaml b/charts/devtron/Chart.yaml index 118ab2e31e..33e6cbfbc5 100644 --- a/charts/devtron/Chart.yaml +++ b/charts/devtron/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: devtron-operator -appVersion: 1.4.0 +appVersion: 1.5.0 description: Chart to configure and install Devtron. Devtron is a Kubernetes Orchestration system. keywords: - Devtron @@ -11,7 +11,7 @@ keywords: - argocd - Hyperion engine: gotpl -version: 0.22.88 +version: 0.22.90 sources: - https://github.com/devtron-labs/charts dependencies: diff --git a/charts/devtron/devtron-bom.yaml b/charts/devtron/devtron-bom.yaml index 03047b2ceb..c5a3cebb09 100644 --- a/charts/devtron/devtron-bom.yaml +++ b/charts/devtron/devtron-bom.yaml @@ -10,7 +10,7 @@ global: containerRegistry: "quay.io/devtron" extraManifests: [] installer: - release: "v1.4.0" + release: "v1.5.0" registry: "" image: "inception" tag: "473deaa4-185-21582" @@ -33,14 +33,15 @@ components: FEATURE_STEP_WISE_LOGS_ENABLE: "true" FEATURE_USER_DEFINED_GITOPS_REPO_ENABLE: "true" ENABLE_RESOURCE_SCAN: "true" - FEATURE_CODE_MIRROR_ENABLE: "false" + FEATURE_CODE_MIRROR_ENABLE: "true" registry: "" - image: "dashboard:a400ce3c-690-31030" + image: "dashboard:0fc42ac3-690-32105" imagePullPolicy: IfNotPresent + healthPort: 8080 devtron: registry: "" - image: "hyperion:846c2d90-280-31082" - cicdImage: "devtron:846c2d90-434-31081" + image: "hyperion:e2daf69a-280-32104" + cicdImage: "devtron:e2daf69a-434-32096" imagePullPolicy: IfNotPresent customOverrides: {} podSecurityContext: @@ -51,9 +52,10 @@ components: allowPrivilegeEscalation: false runAsNonRoot: true runAsUser: 1001 + healthPort: 8080 ciRunner: registry: "" - image: "ci-runner:d79b15c6-138-31014" + image: "ci-runner:c49b4aa5-138-32101" argocdDexServer: registry: "" image: "dex:v2.30.2" @@ -62,7 +64,7 @@ components: authenticator: "authenticator:e414faff-393-13273" kubelink: registry: "" - image: "kubelink:ccd98a22-564-31008" + image: "kubelink:c49b4aa5-564-32098" imagePullPolicy: IfNotPresent configs: ENABLE_HELM_RELEASE_CACHE: "true" @@ -86,10 +88,12 @@ components: allowPrivilegeEscalation: false runAsNonRoot: true runAsUser: 1001 + healthPort: 50052 kubewatch: registry: "" - image: "kubewatch:34abb17d-419-31007" + image: "kubewatch:c49b4aa5-419-32097" imagePullPolicy: IfNotPresent + healthPort: 8080 configs: devtroncd_NAMESPACE: "devtron-ci" USE_CUSTOM_HTTP_TRANSPORT: "true" @@ -108,16 +112,14 @@ components: keyName: postgresql-password postgres: registry: "" - image: "postgres:11.9.0-debian-10-r26" - armImage: "postgres:11.9" + image: "postgres:14.9" initImage: "minideb:latest" imagePullPolicy: "IfNotPresent" metrics: - image: postgres_exporter:v0.4.7 - armImage: postgres_exporter:v0.10.1 + image: postgres_exporter:v0.10.1 gitsensor: registry: "" - image: "git-sensor:2b4b8363-200-31009" + image: "git-sensor:c49b4aa5-200-32099" imagePullPolicy: IfNotPresent serviceMonitor: enabled: false @@ -132,10 +134,11 @@ components: dbconfig: secretName: postgresql-postgresql keyName: postgresql-password + healthPort: 8080 # Values for lens lens: registry: "" - image: "lens:34abb17d-333-31011" + image: "lens:c49b4aa5-333-32100" imagePullPolicy: IfNotPresent configs: GIT_SENSOR_PROTOCOL: GRPC @@ -148,6 +151,7 @@ components: dbconfig: secretName: postgresql-postgresql keyName: postgresql-password + healthPort: 8080 # Change below values for nats nats: registry: "" @@ -181,7 +185,7 @@ components: DB_NAME: "lens" chartSync: registry: "" - image: chart-sync:34abb17d-836-31017 + image: chart-sync:c49b4aa5-836-32103 schedule: "0 19 * * *" podSecurityContext: fsGroup: 1001 @@ -211,7 +215,8 @@ workflowController: IMDSv1ExecutorImage: "argoexec:v3.0.7" security: imageScanner: - image: "image-scanner:34abb17d-141-31016" + image: "image-scanner:c49b4aa5-141-32102" + healthPort: 8080 configs: TRIVY_DB_REPOSITORY: mirror.gcr.io/aquasec/trivy-db TRIVY_JAVA_DB_REPOSITORY: mirror.gcr.io/aquasec/trivy-java-db @@ -221,7 +226,8 @@ security: tag: 4.3.6 # Values for notifier integration notifier: - image: "notifier:c2173311-372-31015" + image: "notifier:56798239-372-32072" + healthPort: 3000 minio: image: "minio:RELEASE.2021-02-14T04-01-33Z" mbImage: "minio-mc:RELEASE.2021-02-14T04-28-06Z" @@ -263,6 +269,7 @@ devtronEnterprise: allowPrivilegeEscalation: false runAsNonRoot: true runAsUser: 1001 + healthPort: 8080 scoop: enabled: false registry: "" diff --git a/charts/devtron/templates/NOTES.txt b/charts/devtron/templates/NOTES.txt index 0150709137..3399e5f0e1 100644 --- a/charts/devtron/templates/NOTES.txt +++ b/charts/devtron/templates/NOTES.txt @@ -1,3 +1,11 @@ +{{- if .Release.IsUpgrade }} + {{- $liveCm := lookup "v1" "ConfigMap" "devtroncd" "devtron-custom-cm" }} + {{- $currentValue := pluck "POSTGRES_MIGRATED" $liveCm.data | first | default "" }} + {{- if ne $currentValue "14" }} + {{- fail "Upgrade Failed Please ensure that you have completed the pre-requisites mentioned in https://docs.devtron.ai/upgrade/devtron-upgrade-1.5.0" }} + {{- end }} +{{- end }} + Please wait for ~1 minute before running any of the following commands. 1. Run the following command to get the password for the default admin user: diff --git a/charts/devtron/templates/argocd-secret.yaml b/charts/devtron/templates/argocd-secret.yaml index b8d7775b3f..1d55e545bc 100644 --- a/charts/devtron/templates/argocd-secret.yaml +++ b/charts/devtron/templates/argocd-secret.yaml @@ -1,3 +1,4 @@ +{{- $customOverrides := index $.Values.components.devtron.customOverrides }} apiVersion: v1 kind: Secret metadata: @@ -22,6 +23,7 @@ metadata: data: timeout.hard.reconciliation: "0" timeout.reconciliation: 60s + {{- if ne $customOverrides.IS_AIR_GAP_ENVIRONMENT "true" }} repositories: |- - name: devtron type: helm @@ -56,6 +58,7 @@ data: - name: kedacore type: helm url: https://kedacore.github.io/charts + {{- end }} resource.customizations: > kubernetes-client.io/ExternalSecret: health.lua: | diff --git a/charts/devtron/templates/casbin.yaml b/charts/devtron/templates/casbin.yaml index 9d4abfed25..3c9cbb090b 100644 --- a/charts/devtron/templates/casbin.yaml +++ b/charts/devtron/templates/casbin.yaml @@ -55,7 +55,7 @@ spec: failureThreshold: 3 httpGet: path: /health - port: 8080 + port: {{ $.Values.devtronEnterprise.casbin.healthPort}} initialDelaySeconds: 20 periodSeconds: 10 successThreshold: 1 @@ -64,7 +64,7 @@ spec: failureThreshold: 3 httpGet: path: /health - port: 8080 + port: {{ $.Values.devtronEnterprise.casbin.healthPort}} initialDelaySeconds: 20 periodSeconds: 10 successThreshold: 1 diff --git a/charts/devtron/templates/dashboard.yaml b/charts/devtron/templates/dashboard.yaml index be35e89487..5f033101f2 100644 --- a/charts/devtron/templates/dashboard.yaml +++ b/charts/devtron/templates/dashboard.yaml @@ -90,6 +90,26 @@ spec: securityContext: {{- toYaml $.Values.global.containerSecurityContext | nindent 12 }} {{- end }} + livenessProbe: + failureThreshold: 3 + httpGet: + path: / + port: {{ $.Values.components.dashboard.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + readinessProbe: + failureThreshold: 3 + httpGet: + path: / + port: {{ $.Values.components.dashboard.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 ports: - name: app containerPort: 8080 diff --git a/charts/devtron/templates/devtron.yaml b/charts/devtron/templates/devtron.yaml index 3cfa96570e..66994e6c86 100644 --- a/charts/devtron/templates/devtron.yaml +++ b/charts/devtron/templates/devtron.yaml @@ -34,6 +34,7 @@ data: CI_WORKFLOW_EXECUTOR_TYPE: SYSTEM DEVTRON_INSTALLATION_TYPE: enterprise DEVTRON_VERSION_IDENTIFIER_IN_HELM_VALUES: "devtron.installer.release" + DEVTRON_MANAGED_LICENSING_ENABLED: "false" DEVTRON_BOM_URL: https://raw.githubusercontent.com/devtron-labs/charts/refs/tags/devtron-enterprise-%s/charts/devtron-enterprise/devtron-bom.yaml {{- end }} {{- if $.Values.installer.modules }} @@ -206,6 +207,7 @@ data: {{- $modules = append $modules "argo-cd" }} {{- end }} {{- end }} + POSTGRES_MIGRATED: "14" INSTALLED_MODULES: {{ if $modules }}{{ printf "'%s'" (join "," $modules) }}{{ else }}""{{ end }} DEFAULT_CI_IMAGE: {{ include "common.image" (dict "component" $.Values.components.ciRunner "global" $.Values.global ) }} --- @@ -278,6 +280,26 @@ spec: - -c - ' curl -X POST -H "Content-Type: application/json" -d ''{"eventType": "SIG_TERM"}'' localhost:8080/orchestrator/telemetry/summary' + livenessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: {{ $.Values.components.devtron.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: {{ $.Values.components.devtron.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 ports: - name: devtron containerPort: 8080 diff --git a/charts/devtron/templates/gitsensor.yaml b/charts/devtron/templates/gitsensor.yaml index eed39814f6..3aa98912b3 100644 --- a/charts/devtron/templates/gitsensor.yaml +++ b/charts/devtron/templates/gitsensor.yaml @@ -112,6 +112,26 @@ spec: volumeMounts: - name: git-volume mountPath: /git-base/ + livenessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: {{ $.Values.components.gitsensor.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: {{ $.Values.components.gitsensor.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 env: - name: DEVTRON_APP_NAME value: git-sensor diff --git a/charts/devtron/templates/kubelink.yaml b/charts/devtron/templates/kubelink.yaml index 3c3de6cabd..eab17e5d96 100644 --- a/charts/devtron/templates/kubelink.yaml +++ b/charts/devtron/templates/kubelink.yaml @@ -85,6 +85,26 @@ spec: name: {{ .dbconfig.secretName }} key: {{ .dbconfig.keyName }} {{- end }} + livenessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: {{ $.Values.components.kubelink.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: {{ $.Values.components.kubelink.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 envFrom: - configMapRef: name: kubelink-cm diff --git a/charts/devtron/templates/kubewatch.yaml b/charts/devtron/templates/kubewatch.yaml index 4e792cad25..f66c81c613 100644 --- a/charts/devtron/templates/kubewatch.yaml +++ b/charts/devtron/templates/kubewatch.yaml @@ -188,6 +188,26 @@ spec: - name: app containerPort: 3000 protocol: TCP + livenessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: {{ $.Values.components.kubewatch.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: {{ $.Values.components.kubewatch.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 env: - name: POD_NAME valueFrom: diff --git a/charts/devtron/templates/lens.yaml b/charts/devtron/templates/lens.yaml index 6b7afc7aee..d442eee358 100644 --- a/charts/devtron/templates/lens.yaml +++ b/charts/devtron/templates/lens.yaml @@ -84,6 +84,26 @@ spec: securityContext: {{- toYaml $.Values.global.containerSecurityContext | nindent 12 }} {{- end }} + livenessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: {{ $.Values.components.lens.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: {{ $.Values.components.lens.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 ports: - name: app containerPort: 8080 diff --git a/charts/devtron/templates/migrator.yaml b/charts/devtron/templates/migrator.yaml index e3af542602..e600750c02 100644 --- a/charts/devtron/templates/migrator.yaml +++ b/charts/devtron/templates/migrator.yaml @@ -462,60 +462,6 @@ spec: name: shared-volume backoffLimit: 20 activeDeadlineSeconds: 1500 - {{- end }} ---- -{{- if $.Capabilities.APIVersions.Has "batch/v1/Job" }} -apiVersion: batch/v1 -{{- else }} -apiVersion: batch/v1beta1 -{{- end }} -#this job is added for creating new database(clairv4). -#This database is needed for clair upgrade (v2 to v4), since old database does not support migration for new clair. -#Without this job, database can be created for new users, but not for existing users. -kind: Job -metadata: - name: postgresql-miscellaneous -spec: - ttlSecondsAfterFinished: 1000 - template: - spec: - {{- include "common.schedulerConfig" (dict "nodeSelector" $.Values.components.migrator.nodeSelector "tolerations" $.Values.components.migrator.tolerations "imagePullSecrets" $.Values.components.migrator.imagePullSecrets "global" $.Values.global) | indent 6 }} - securityContext: - fsGroup: 1000 - runAsGroup: 1000 - runAsUser: 1000 - containers: - - name: postgresql-miscellaneous - image: {{ include "common.image" (dict "component" $.Values.components.postgres "global" $.Values.global "extraImage" $.Values.components.postgres.armImage ) }} - securityContext: - allowPrivilegeEscalation: false - runAsUser: 1000 - runAsNonRoot: true - env: - - name: PGPASSWORD - valueFrom: - secretKeyRef: - name: postgresql-postgresql - key: postgresql-password - - name: PGHOST - value: postgresql-postgresql - envFrom: - - configMapRef: - name: devtron-common-cm - command: - - /bin/sh - - -c - - psql -Upostgres -f /docker-entrypoint-initdb.d/db_create.sql - volumeMounts: - - name: custom-init-scripts - mountPath: /docker-entrypoint-initdb.d/ - volumes: - - name: custom-init-scripts - configMap: - name: postgresql-postgresql-init-scripts - restartPolicy: OnFailure - backoffLimit: 20 - activeDeadlineSeconds: 1800 {{- end }} {{- end }} \ No newline at end of file diff --git a/charts/devtron/templates/notifier.yaml b/charts/devtron/templates/notifier.yaml index 282e2c5266..ebc256e8c3 100644 --- a/charts/devtron/templates/notifier.yaml +++ b/charts/devtron/templates/notifier.yaml @@ -88,7 +88,26 @@ spec: securityContext: {{- toYaml $.Values.global.containerSecurityContext | nindent 12 }} {{- end }} - + livenessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: {{ $.Values.notifier.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: {{ $.Values.notifier.healthPort}} + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 ports: - name: app containerPort: 3000 diff --git a/charts/devtron/templates/postgresql.yaml b/charts/devtron/templates/postgresql.yaml index 1295e16664..a42fd85e6d 100644 --- a/charts/devtron/templates/postgresql.yaml +++ b/charts/devtron/templates/postgresql.yaml @@ -1,379 +1,46 @@ {{- with .Values.components.postgres }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: postgresql-postgresql-init-scripts - labels: - app: postgresql - chart: postgresql-8.6.4 - release: "devtron" - annotations: - "helm.sh/hook": pre-install - "helm.sh/hook-weight": "-2" - "helm.sh/resource-policy": keep -data: - db_create.sql: | - create database casbin; - create database git_sensor; - create database lens; - create database clairv4 -{{- if not $.Values.installer.arch }} ---- -apiVersion: v1 -kind: Service -metadata: - name: postgresql-postgresql-metrics - labels: - app: postgresql - chart: postgresql-8.6.4 - release: "devtron" - annotations: - prometheus.io/port: "9187" - prometheus.io/scrape: "true" - "helm.sh/resource-policy": keep -spec: - type: ClusterIP - ports: - - name: http-metrics - port: 9187 - targetPort: http-metrics - selector: - app: postgresql - release: devtron - role: master ---- -apiVersion: v1 -kind: Service -metadata: - name: postgresql-postgresql-headless - labels: - app: postgresql - chart: postgresql-8.6.4 - release: "devtron" - annotations: - "helm.sh/resource-policy": keep -spec: - type: ClusterIP - clusterIP: None - ports: - - name: tcp-postgresql - port: 5432 - targetPort: tcp-postgresql - selector: - app: postgresql - release: "devtron" --- apiVersion: v1 kind: Service metadata: name: postgresql-postgresql + namespace: devtroncd labels: app: postgresql - chart: postgresql-8.6.4 release: "devtron" + app.kubernetes.io/managed-by: Helm annotations: "helm.sh/resource-policy": keep spec: type: ClusterIP ports: - - name: tcp-postgresql + - name: postgres port: 5432 - targetPort: tcp-postgresql - selector: - app: postgresql - release: "devtron" - role: master ---- -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: postgresql-postgresql - labels: - app: postgresql - chart: postgresql-8.6.4 - release: "devtron" - annotations: - "helm.sh/resource-policy": keep -spec: - serviceName: postgresql-postgresql-headless - replicas: 1 - updateStrategy: - type: RollingUpdate + protocol: TCP + targetPort: postgres selector: - matchLabels: - app: postgresql - release: "devtron" - role: master - template: - metadata: - name: postgresql-postgresql - labels: - app: postgresql - chart: postgresql-8.6.4 - release: "devtron" - role: master - spec: - {{- include "common.schedulerConfig" (dict "nodeSelector" $.Values.components.postgres.nodeSelector "tolerations" $.Values.components.postgres.tolerations "imagePullSecrets" $.Values.components.postgres.imagePullSecrets "global" $.Values.global) | indent 6 }} - serviceAccountName: devtron-default-sa - securityContext: - fsGroup: 1001 - initContainers: - - name: init-chmod-data - image: {{ include "common.image" (dict "component" $.Values.components.postgres "global" $.Values.global "extraImage" $.Values.components.postgres.initImage ) }} - imagePullPolicy: "IfNotPresent" - command: - - /bin/sh - - -cx - - | - - mkdir -p /bitnami/postgresql/data - chmod 700 /bitnami/postgresql/data - find /bitnami/postgresql -mindepth 1 -maxdepth 1 -not -name ".snapshot" -not -name "lost+found" | \ - xargs chown -R 1001:1001 - chmod -R 777 /dev/shm - {{- if .initContainer }} - {{- if .initContainer.resources }} - resources: - {{- toYaml .initContainer.resources | nindent 12 }} - {{- end }} - {{- end }} - envFrom: - - configMapRef: - name: devtron-common-cm - securityContext: - runAsUser: 0 - volumeMounts: - - name: data - mountPath: /bitnami/postgresql - subPath: - - name: dshm - mountPath: /dev/shm - containers: - - name: postgresql-postgresql - image: {{ include "common.image" (dict "component" $.Values.components.postgres "global" $.Values.global ) }} - imagePullPolicy: {{ .imagePullPolicy }} - securityContext: - runAsUser: 1001 - env: - - name: BITNAMI_DEBUG - value: "false" - - name: POSTGRESQL_PORT_NUMBER - value: "5432" - - name: POSTGRESQL_VOLUME_DIR - value: "/bitnami/postgresql" - - name: PGDATA - value: "/bitnami/postgresql/data" - - name: POSTGRES_USER - value: postgres - - name: POSTGRES_PASSWORD - valueFrom: - secretKeyRef: - name: postgresql-postgresql - key: postgresql-password - - name: POSTGRES_DB - value: "orchestrator" - - name: POSTGRESQL_ENABLE_LDAP - value: "no" - - name: POSTGRESQL_SHARED_PRELOAD_LIBRARIES - value: pgaudit, uuid-ossp - envFrom: - - configMapRef: - name: devtron-common-cm - {{- if .resources }} - resources: - {{- toYaml .resources | nindent 12 }} - {{- end }} - ports: - - name: tcp-postgresql - containerPort: 5432 - livenessProbe: - exec: - command: - - /bin/sh - - -c - - exec pg_isready -U "postgres" -d "orchestrator" -h 127.0.0.1 -p 5432 - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 5 - successThreshold: 1 - failureThreshold: 6 - readinessProbe: - exec: - command: - - /bin/sh - - -c - - -e - - | - exec pg_isready -U "postgres" -d "orchestrator" -h 127.0.0.1 -p 5432 - [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f /bitnami/postgresql/.initialized ] - initialDelaySeconds: 5 - periodSeconds: 10 - timeoutSeconds: 5 - successThreshold: 1 - failureThreshold: 6 - volumeMounts: - - name: custom-init-scripts - mountPath: /docker-entrypoint-initdb.d/ - - name: dshm - mountPath: /dev/shm - - name: data - mountPath: /bitnami/postgresql - subPath: - - name: metrics - image: {{ include "common.image" (dict "component" $.Values.components.postgres.metrics "global" $.Values.global ) }} - imagePullPolicy: "IfNotPresent" - env: - - name: DATA_SOURCE_URI - value: "127.0.0.1:5432/orchestrator?sslmode=disable" - - name: DATA_SOURCE_PASS - valueFrom: - secretKeyRef: - name: postgresql-postgresql - key: postgresql-password - - name: DATA_SOURCE_USER - value: postgres - envFrom: - - configMapRef: - name: devtron-common-cm - {{- if .postgresExporter }} - {{- if .postgresExporter.resources }} - resources: - {{- toYaml .postgresExporter.resources | nindent 12 }} - {{- end }} - {{- end }} - livenessProbe: - httpGet: - path: / - port: http-metrics - initialDelaySeconds: 5 - periodSeconds: 10 - timeoutSeconds: 5 - successThreshold: 1 - failureThreshold: 6 - readinessProbe: - httpGet: - path: / - port: http-metrics - initialDelaySeconds: 5 - periodSeconds: 10 - timeoutSeconds: 5 - successThreshold: 1 - failureThreshold: 6 - volumeMounts: - ports: - - name: http-metrics - containerPort: 9187 - volumes: - - name: custom-init-scripts - configMap: - name: postgresql-postgresql-init-scripts - - name: dshm - emptyDir: - medium: Memory - sizeLimit: 1Gi - volumeClaimTemplates: - - metadata: - name: data - spec: - accessModes: - - "ReadWriteOnce" - {{- include "common.storageclass" $ | indent 8 }} - resources: - requests: - storage: {{ .persistence.volumeSize }} -{{- else }} ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: postgresql-postgresql-customscripts - labels: - helm.sh/chart: postgres-0.4.0 app.kubernetes.io/name: postgres app.kubernetes.io/instance: devtron - app.kubernetes.io/version: "14.5" - app.kubernetes.io/managed-by: Helm - annotations: - "helm.sh/hook": pre-install - "helm.sh/hook-weight": "-2" - "helm.sh/resource-policy": keep -data: - db_create.sql: | - create database casbin; - create database git_sensor; - create database lens; - create database clairv4; ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: postgresql-postgresql-scripts - labels: - helm.sh/chart: postgres-0.4.0 - app.kubernetes.io/name: postgres - app.kubernetes.io/instance: devtron - app.kubernetes.io/version: "14.5" - app.kubernetes.io/managed-by: Helm - annotations: - "helm.sh/hook": pre-install - "helm.sh/hook-weight": "-2" - "helm.sh/resource-policy": keep -data: - 01-init-userdb.sh: | - #!/bin/sh - create_user() - { - psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" -v USERDBNAME="$POSTGRES_DB" -v USERDBUSER="$USERDB_USER" -v USERDBPASSWORD="'$USERDB_PASSWORD'" <<-EOSQL - CREATE USER :USERDBUSER WITH PASSWORD :USERDBPASSWORD; - GRANT ALL PRIVILEGES ON DATABASE :USERDBNAME TO :USERDBUSER; - EOSQL - } - set -e - if [ ! -z "$POSTGRES_DB" ] && [ ! -z "$USERDB_USER" ] && [ ! -z "$USERDB_PASSWORD" ]; then - create_user - fi - init.sh: | - #!/bin/sh - echo "Start initialization" - echo "Copy init-userdb script" - cp /initscripts/01-init-userdb.sh /scripts - if [ -d /extrascripts ]; then - echo "Copy extra scripts" - cp /extrascripts/* /scripts - fi - if [ -d /customscripts ]; then - echo "Copy custom scripts" - cp /customscripts/* /scripts - fi - if [ -d /customconfig ]; then - echo "Create postgres config" - cat /customconfig/* >>/configs/postgresql.conf - fi - if [ -d /extraconfigs ]; then - echo "Add extra configs to postgres config" - cat /extraconfigs/* >>/configs/postgresql.conf - fi - echo "Initialization done." --- apiVersion: v1 kind: Service metadata: - name: postgresql-postgresql + name: postgresql-postgresql-headless + namespace: devtroncd labels: - helm.sh/chart: postgres-0.4.0 - app.kubernetes.io/name: postgres - app.kubernetes.io/instance: devtron - app.kubernetes.io/version: "14.5" + app: postgresql + release: "devtron" app.kubernetes.io/managed-by: Helm annotations: "helm.sh/resource-policy": keep spec: type: ClusterIP + clusterIP: None ports: - - port: 5432 - targetPort: postgres + - name: postgres + port: 5432 protocol: TCP - name: postgres + targetPort: postgres selector: app.kubernetes.io/name: postgres app.kubernetes.io/instance: devtron @@ -382,11 +49,10 @@ apiVersion: v1 kind: Service metadata: name: postgresql-postgresql-metrics + namespace: devtroncd labels: - helm.sh/chart: postgres-0.4.0 - app.kubernetes.io/name: postgres - app.kubernetes.io/instance: devtron - app.kubernetes.io/version: "14.5" + app: postgresql + release: "devtron" app.kubernetes.io/managed-by: Helm annotations: prometheus.io/port: "9187" @@ -402,30 +68,6 @@ spec: app.kubernetes.io/name: postgres app.kubernetes.io/instance: devtron --- -apiVersion: v1 -kind: Service -metadata: - name: postgresql-postgresql-headless - labels: - helm.sh/chart: postgres-0.4.0 - app.kubernetes.io/name: postgres - app.kubernetes.io/instance: devtron - app.kubernetes.io/version: "14.5" - app.kubernetes.io/managed-by: Helm - annotations: - "helm.sh/resource-policy": keep -spec: - type: ClusterIP - clusterIP: None - ports: - - port: 5432 - targetPort: postgres - protocol: TCP - name: postgres - selector: - app.kubernetes.io/name: postgres - app.kubernetes.io/instance: devtron ---- apiVersion: apps/v1 kind: StatefulSet metadata: @@ -467,7 +109,7 @@ spec: runAsGroup: 999 runAsNonRoot: true runAsUser: 999 - image: {{ include "common.image" (dict "component" $.Values.components.postgres "global" $.Values.global "extraImage" $.Values.components.postgres.armImage ) }} + image: {{ include "common.image" (dict "component" $.Values.components.postgres "global" $.Values.global "extraImage" $.Values.components.postgres.image ) }} imagePullPolicy: {{ .imagePullPolicy }} {{- if .initContainer }} {{- if .initContainer.resources }} @@ -497,7 +139,7 @@ spec: runAsGroup: 999 runAsNonRoot: true runAsUser: 999 - image: {{ include "common.image" (dict "component" $.Values.components.postgres "global" $.Values.global "extraImage" $.Values.components.postgres.armImage ) }} + image: {{ include "common.image" (dict "component" $.Values.components.postgres "global" $.Values.global "extraImage" $.Values.components.postgres.image ) }} imagePullPolicy: {{ .imagePullPolicy }} {{- if .resources }} resources: @@ -515,6 +157,10 @@ spec: secretKeyRef: key: postgresql-password name: postgresql-postgresql + - name: POSTGRES_HOST_AUTH_METHOD + value: "md5" + - name: POSTGRES_INITDB_ARGS + value: "--auth-local=md5" envFrom: - secretRef: name: postgresql-postgresql @@ -565,7 +211,7 @@ spec: - mountPath: /etc/postgresql name: configs - name: metrics - image: {{ include "common.image" (dict "component" $.Values.components.postgres.metrics "global" $.Values.global "extraImage" $.Values.components.postgres.metrics.armImage ) }} + image: {{ include "common.image" (dict "component" $.Values.components.postgres.metrics "global" $.Values.global "extraImage" $.Values.components.postgres.metrics.image ) }} imagePullPolicy: "IfNotPresent" env: - name: DATA_SOURCE_URI @@ -635,5 +281,82 @@ spec: resources: requests: storage: {{ .persistence.volumeSize }} -{{- end }} -{{- end }} +--- +# Source: devtron-operator/templates/postgresql.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgresql-postgresql-customscripts + namespace: devtroncd + labels: + app.kubernetes.io/name: postgres + app.kubernetes.io/instance: devtron + app.kubernetes.io/managed-by: Helm + annotations: + "helm.sh/hook": pre-install + "helm.sh/hook-weight": "-2" + "helm.sh/resource-policy": keep + "meta.helm.sh/release-name": devtron + "meta.helm.sh/release-namespace": devtroncd +data: + db_create.sql: | + create database casbin; + create database git_sensor; + create database lens; + create database clairv4; +--- +# Source: devtron-operator/templates/postgresql.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgresql-postgresql-scripts + namespace: devtroncd + labels: + helm.sh/chart: postgres-0.4.0 + app.kubernetes.io/name: postgres + app.kubernetes.io/instance: devtron + app.kubernetes.io/version: "14.5" + app.kubernetes.io/managed-by: Helm + annotations: + "helm.sh/hook": pre-install + "helm.sh/hook-weight": "-2" + "helm.sh/resource-policy": keep + "meta.helm.sh/release-name": devtron + "meta.helm.sh/release-namespace": devtroncd +data: + 01-init-userdb.sh: | + #!/bin/sh + create_user() + { + psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" -v USERDBNAME="$POSTGRES_DB" -v USERDBUSER="$USERDB_USER" -v USERDBPASSWORD="'$USERDB_PASSWORD'" <<-EOSQL + CREATE USER :USERDBUSER WITH PASSWORD :USERDBPASSWORD; + GRANT ALL PRIVILEGES ON DATABASE :USERDBNAME TO :USERDBUSER; + EOSQL + } + set -e + if [ ! -z "$POSTGRES_DB" ] && [ ! -z "$USERDB_USER" ] && [ ! -z "$USERDB_PASSWORD" ]; then + create_user + fi + init.sh: | + #!/bin/sh + echo "Start initialization" + echo "Copy init-userdb script" + cp /initscripts/01-init-userdb.sh /scripts + if [ -d /extrascripts ]; then + echo "Copy extra scripts" + cp /extrascripts/* /scripts + fi + if [ -d /customscripts ]; then + echo "Copy custom scripts" + cp /customscripts/* /scripts + fi + if [ -d /customconfig ]; then + echo "Create postgres config" + cat /customconfig/* >>/configs/postgresql.conf + fi + if [ -d /extraconfigs ]; then + echo "Add extra configs to postgres config" + cat /extraconfigs/* >>/configs/postgresql.conf + fi + echo "Initialization done." +{{- end }} \ No newline at end of file diff --git a/charts/devtron/values.yaml b/charts/devtron/values.yaml index 7e9dbe0565..c254e73d51 100644 --- a/charts/devtron/values.yaml +++ b/charts/devtron/values.yaml @@ -17,19 +17,18 @@ global: # value: "value1" # effect: "NoSchedule" # imagePullSecrets: - # - name: your-image-pull-secret - + # - name: your-image-pull-secret + nodeSelector: {} + tolerations: [] + imagePullSecrets: [] # Set the storage class to be used for PVCs (would use default sc if not specified) storageClass: "" # Add Proxy Configs to be propagated to all the Devtron Microservices. configs: {} - nodeSelector: {} - tolerations: [] - imagePullSecrets: [] extraManifests: [] installer: repo: "devtron-labs/devtron" - release: "v1.4.0" + release: "v1.5.0" registry: "" image: inception tag: 473deaa4-185-21582 @@ -81,16 +80,18 @@ components: FEATURE_STEP_WISE_LOGS_ENABLE: "true" FEATURE_USER_DEFINED_GITOPS_REPO_ENABLE: "true" ENABLE_RESOURCE_SCAN: "true" - FEATURE_CODE_MIRROR_ENABLE: "false" + FEATURE_CODE_MIRROR_ENABLE: "true" registry: "" - image: "dashboard:a400ce3c-690-31030" + image: "dashboard:0fc42ac3-690-32105" imagePullPolicy: IfNotPresent + healthPort: 8080 devtron: registry: "" - image: "hyperion:846c2d90-280-31082" - cicdImage: "devtron:846c2d90-434-31081" + image: "hyperion:e2daf69a-280-32104" + cicdImage: "devtron:e2daf69a-434-32096" imagePullPolicy: IfNotPresent customOverrides: {} + healthPort: 8080 podSecurityContext: fsGroup: 1001 runAsGroup: 1001 @@ -122,7 +123,7 @@ components: # - devtron.example.com ciRunner: registry: "" - image: "ci-runner:d79b15c6-138-31014" + image: "ci-runner:c49b4aa5-138-32101" argocdDexServer: registry: "" image: "dex:v2.30.2" @@ -131,8 +132,9 @@ components: authenticator: "authenticator:e414faff-393-13273" kubelink: registry: "" - image: "kubelink:ccd98a22-564-31008" + image: "kubelink:c49b4aa5-564-32098" imagePullPolicy: IfNotPresent + healthPort: 50052 podSecurityContext: fsGroup: 1001 runAsGroup: 1001 @@ -157,8 +159,9 @@ components: keyName: postgresql-password kubewatch: registry: "" - image: "kubewatch:34abb17d-419-31007" + image: "kubewatch:c49b4aa5-419-32097" imagePullPolicy: IfNotPresent + healthPort: 8080 configs: devtroncd_NAMESPACE: "devtron-ci" USE_CUSTOM_HTTP_TRANSPORT: "true" @@ -177,23 +180,22 @@ components: keyName: postgresql-password postgres: registry: "" - image: "postgres:11.9.0-debian-10-r26" - armImage: "postgres:11.9" + image: "postgres:14.9" initImage: "minideb:latest" imagePullPolicy: "IfNotPresent" metrics: - image: postgres_exporter:v0.4.7 - armImage: postgres_exporter:v0.10.1 + image: postgres_exporter:v0.10.1 persistence: volumeSize: "20Gi" gitsensor: registry: "" - image: "git-sensor:2b4b8363-200-31009" + image: "git-sensor:c49b4aa5-200-32099" imagePullPolicy: IfNotPresent serviceMonitor: enabled: false persistence: volumeSize: 2Gi + healthPort: 8080 configs: PG_ADDR: postgresql-postgresql.devtroncd PG_USER: postgres @@ -206,10 +208,11 @@ components: # Values for lens lens: registry: "" - image: "lens:34abb17d-333-31011" + image: "lens:c49b4aa5-333-32100" imagePullPolicy: IfNotPresent secrets: {} resources: {} + healthPort: 8080 configs: GIT_SENSOR_PROTOCOL: GRPC GIT_SENSOR_URL: git-sensor-service.devtroncd:90 @@ -254,7 +257,7 @@ components: DB_NAME: "lens" chartSync: registry: "" - image: chart-sync:34abb17d-836-31017 + image: chart-sync:c49b4aa5-836-32103 schedule: "0 19 * * *" extraConfigs: {} podSecurityContext: @@ -408,7 +411,8 @@ argo-cd: security: enabled: false imageScanner: - image: "image-scanner:34abb17d-141-31016" + image: "image-scanner:c49b4aa5-141-32102" + healthPort: 8080 configs: TRIVY_DB_REPOSITORY: mirror.gcr.io/aquasec/trivy-db TRIVY_JAVA_DB_REPOSITORY: mirror.gcr.io/aquasec/trivy-java-db @@ -426,7 +430,7 @@ security: notifier: enabled: false imagePullPolicy: IfNotPresent - image: "notifier:c2173311-372-31015" + image: "notifier:56798239-372-32072" configs: CD_ENVIRONMENT: PROD DB: orchestrator @@ -434,6 +438,7 @@ notifier: DB_PORT: "5432" DB_USER: postgres secrets: {} + healthPort: 3000 dbconfig: secretName: postgresql-postgresql keyName: postgresql-password @@ -484,6 +489,7 @@ devtronEnterprise: registry: "" image: "casbin:f6ff5f74-064b67e5-462-30822" imagePullPolicy: IfNotPresent + healthPort: 8080 configs: PG_ADDR: postgresql-postgresql.devtroncd PG_DATABASE: casbin diff --git a/devtron-images.txt.source b/devtron-images.txt.source index c1475bd3ed..6f420f5094 100644 --- a/devtron-images.txt.source +++ b/devtron-images.txt.source @@ -1,38 +1,37 @@ -quay.io/devtron/image-scanner:0dde3b1a-141-30093 +quay.io/devtron/image-scanner:c49b4aa5-141-32102 quay.io/devtron/inception:473deaa4-185-21582 -quay.io/devtron/hyperion:e67c3b76-280-30100 +quay.io/devtron/hyperion:e2daf69a-280-32104 public.ecr.aws/docker/library/redis:7.0.5-alpine quay.io/argoproj/argocd:v2.5.2 quay.io/argoproj/workflow-controller:v3.4.3 quay.io/devtron/authenticator:e414faff-393-13273 quay.io/devtron/bats:v1.4.1 quay.io/devtron/busybox:1.31.1 -quay.io/devtron/chart-sync:0dde3b1a-836-30095 +quay.io/devtron/chart-sync:c49b4aa5-836-32103 quay.io/devtron/curl:7.73.0 -quay.io/devtron/dashboard:1c40d516-690-30089 +quay.io/devtron/dashboard:0fc42ac3-690-32105 quay.io/devtron/devtron-utils:dup-chart-repo-v1.1.0 quay.io/devtron/devtron:e67c3b76-434-30101 -quay.io/devtron/ci-runner:0dde3b1a-138-30091 +quay.io/devtron/ci-runner:c49b4aa5-138-32101 quay.io/devtron/dex:v2.30.2 -quay.io/devtron/git-sensor:0dde3b1a-200-30085 +quay.io/devtron/git-sensor:c49b4aa5-200-32099 quay.io/devtron/grafana:7.3.1 quay.io/devtron/k8s-sidecar:1.1.0 quay.io/devtron/k8s-utils:tutum-curl quay.io/devtron/kubectl:latest -quay.io/devtron/kubelink:0dde3b1a-564-30082 -quay.io/devtron/kubewatch:0dde3b1a-419-30285 -quay.io/devtron/lens:0dde3b1a-333-30090 +quay.io/devtron/kubelink:c49b4aa5-564-32098 +quay.io/devtron/kubewatch:c49b4aa5-419-32097 +quay.io/devtron/lens:c49b4aa5-333-32100 quay.io/devtron/migrator:v4.16.2 quay.io/devtron/nats-box quay.io/devtron/nats-server-config-reloader:0.6.2 quay.io/devtron/nats:2.9.3-alpine -quay.io/devtron/notifier:5e9c010b-372-30094 -quay.io/devtron/postgres:11.9 +quay.io/devtron/notifier:56798239-372-32072 quay.io/devtron/postgres_exporter:v0.10.1 quay.io/devtron/prometheus-nats-exporter:0.9.0 quay.io/devtron/minio:RELEASE.2021-02-14T04-01-33Z quay.io/devtron/clair:4.3.6 -quay.io/devtron/postgres:11.9.0-debian-10-r26 quay.io/devtron/postgres_exporter:v0.4.7 quay.io/devtron/minio-mc:RELEASE.2021-02-14T04-28-06Z quay.io/devtron/minideb:latest +quay.io/devtron/postgres:14.9 diff --git a/manifests/install/devtron-installer.yaml b/manifests/install/devtron-installer.yaml index af83dea5ea..e7c5b98414 100644 --- a/manifests/install/devtron-installer.yaml +++ b/manifests/install/devtron-installer.yaml @@ -4,4 +4,4 @@ metadata: name: installer-devtron namespace: devtroncd spec: - url: https://raw.githubusercontent.com/devtron-labs/devtron/v1.4.0/manifests/installation-script + url: https://raw.githubusercontent.com/devtron-labs/devtron/v1.5.0/manifests/installation-script diff --git a/manifests/installation-script b/manifests/installation-script index 0648dd6e10..08922660ec 100644 --- a/manifests/installation-script +++ b/manifests/installation-script @@ -1,4 +1,4 @@ -LTAG="v1.4.0"; +LTAG="v1.5.0"; REPO_RAW_URL="https://raw.githubusercontent.com/devtron-labs/devtron/"; log("executed devtron setup installation"); diff --git a/manifests/release.txt b/manifests/release.txt index 51ee350e8f..7444c53000 100644 --- a/manifests/release.txt +++ b/manifests/release.txt @@ -1 +1 @@ -stable -1 v1.4.0 +stable -1 v1.5.0 diff --git a/manifests/version.txt b/manifests/version.txt index 0d0c52f84d..2e7bd91085 100644 --- a/manifests/version.txt +++ b/manifests/version.txt @@ -1 +1 @@ -v1.4.0 +v1.5.0 diff --git a/manifests/yamls/gitsensor.yaml b/manifests/yamls/gitsensor.yaml index 61e0afa6bd..b36dcd9149 100644 --- a/manifests/yamls/gitsensor.yaml +++ b/manifests/yamls/gitsensor.yaml @@ -67,7 +67,7 @@ spec: - /bin/sh - -c - mkdir -p /git-base/ssh-keys && chown -R devtron:devtron /git-base && chmod 777 /git-base/ssh-keys - image: "quay.io/devtron/git-sensor:2b4b8363-200-31009" + image: "quay.io/devtron/git-sensor:6d3037d9-200-32069" imagePullPolicy: IfNotPresent name: chown-git-base resources: {} @@ -80,7 +80,7 @@ spec: name: git-volume containers: - name: git-sensor - image: "quay.io/devtron/git-sensor:2b4b8363-200-31009" + image: "quay.io/devtron/git-sensor:6d3037d9-200-32069" securityContext: allowPrivilegeEscalation: false runAsUser: 1000 diff --git a/releasenotes.md b/releasenotes.md index bec1d0c5e4..c716ae1779 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,20 +1,36 @@ -## v1.4.0 + +====CRITICAL UPGRADE NOTICE - POSTGRES 11 TO 14==== -## Enhancements -- feat: Made ng labels env driven (#6438) -- feat: Link helm release (#6454) -- feat: access manager (#6377) -- feat: migrate external argo cd application (#6303) -- feat: Dark Mode v1 (#2348) -- feat: Dark Mode v2 (#2367) -- feat: Dark Mode v3 (#2484) -## Bugs -- fix: cluster update issue (#6465) -- fix: in CreateGrafanaDataSource (#6463) -- fix: onboard acd app (#6457) -- fix: prom client in chart-sync (#6442) -- fix: incorrect gitops metrics (#6444) -- fix: envId check in EventBuilder.go (#6436) -- fix: createDockerRepoIfNeeded error handling (#6433) +IMPORTANT: This upgrade requires planned downtime +Before proceeding with the upgrade to version 1.5.0, please: + +1. Review the [Upgrade Guide](https://docs.devtron.ai/upgrade/devtron-upgrade-1.5.0) for all prerequisites. + +2. Deploy the [Devtron-Backup Chart](https://docs.devtron.ai/install/devtron-backup). + +3. Verify at least one successful backup has been completed. +WARNING: Your Devtron will be unavailable during the entire prerequisite process until successful completion. +For questions or assistance, our team is available on [Discord](https://discord.devtron.ai/). + + +## v1.5.0 + +## Enhancements +- feat: Config Approval bypass v1 (for cm, cs and deployment template) (#6493) +- feat: Licensing changes (#6474) +## Bugs +- fix: Added support for IAM role S3 blob client (#6521) +- fix: Making tx independent of git sensor call (#6519) +- fix: Sql query memory issue (#6516) +- fix: Grafana data-source get API (#6503) +- fix: Made triggeredBy for CI & CD uniform (#6489) +- fix: HPA permission denied error (#6485) +- fix: Force abort for pre/post cd (#6475) +- fix: Optimisation in workflow status api (#6473) +- fix: Let user delete the container reg if the ref app was deleted (#6464) +## Others +- misc: Update the descriptions of env variables (#6499) +- misc: Patch api for user attribute (#6490) +- chore: Nil implementations fixed for user attribute in telemetry (#6497)