Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 3s
214 lines
7.4 KiB
Smarty
214 lines
7.4 KiB
Smarty
{{- define "twenty.name" -}}
|
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
|
{{- end -}}
|
|
|
|
{{- define "twenty.fullname" -}}
|
|
{{- if .Values.fullnameOverride -}}
|
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
|
{{- else -}}
|
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- define "twenty.namespace" -}}
|
|
{{ .Release.Namespace }}
|
|
{{- end -}}
|
|
|
|
{{/* Server image fields merged with globals */}}
|
|
{{- define "twenty.server.image" -}}
|
|
{{- $repo := default $.Values.image.repository (index $.Values.server.image "repository" | default "") -}}
|
|
{{- $tag := default (default $.Chart.AppVersion $.Values.image.tag) (index $.Values.server.image "tag" | default "") -}}
|
|
{{- $pp := default $.Values.image.pullPolicy (index $.Values.server.image "pullPolicy" | default "") -}}
|
|
{{- printf "%s:%s|%s" $repo $tag $pp -}}
|
|
{{- end -}}
|
|
|
|
{{/* Worker image fields merged with globals */}}
|
|
{{- define "twenty.worker.image" -}}
|
|
{{- $repo := default $.Values.image.repository (index $.Values.worker.image "repository" | default "") -}}
|
|
{{- $tag := default (default $.Chart.AppVersion $.Values.image.tag) (index $.Values.worker.image "tag" | default "") -}}
|
|
{{- $pp := default $.Values.image.pullPolicy (index $.Values.worker.image "pullPolicy" | default "") -}}
|
|
{{- printf "%s:%s|%s" $repo $tag $pp -}}
|
|
{{- end -}}
|
|
|
|
{{/* Extract parts of image helper */}}
|
|
{{- define "twenty.image.repository" -}}
|
|
{{- regexFind "^([^:|]+)" . -}}
|
|
{{- end -}}
|
|
{{- define "twenty.image.tag" -}}
|
|
{{- regexFind ":([^|]+)" . | trimPrefix ":" -}}
|
|
{{- end -}}
|
|
{{- define "twenty.image.pullPolicy" -}}
|
|
{{- regexFind "\\|(.+)$" . | trimPrefix "|" -}}
|
|
{{- end -}}
|
|
|
|
{{/* Check if using external secret for database password */}}
|
|
{{- define "twenty.db.useExternalSecret" -}}
|
|
{{- if and (not .Values.db.enabled) .Values.db.external.secretName .Values.db.external.passwordKey -}}
|
|
true
|
|
{{- else -}}
|
|
false
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Database URL secret name */}}
|
|
{{- define "twenty.dbUrl.secretName" -}}
|
|
{{- printf "%s-db-url" (include "twenty.fullname" .) -}}
|
|
{{- end -}}
|
|
|
|
{{/* Database password secret name */}}
|
|
{{- define "twenty.dbPassword.secretName" -}}
|
|
{{- if eq (include "twenty.db.useExternalSecret" .) "true" -}}
|
|
{{- .Values.db.external.secretName -}}
|
|
{{- else -}}
|
|
{{- include "twenty.dbUrl.secretName" . -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Database password secret key */}}
|
|
{{- define "twenty.dbPassword.secretKey" -}}
|
|
{{- if eq (include "twenty.db.useExternalSecret" .) "true" -}}
|
|
{{- .Values.db.external.passwordKey -}}
|
|
{{- else if .Values.db.enabled -}}
|
|
appPassword
|
|
{{- else -}}
|
|
password
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Database URL template for external secret (will be evaluated at runtime) */}}
|
|
{{- define "twenty.dbUrl.template" -}}
|
|
{{- if eq (include "twenty.db.useExternalSecret" .) "true" -}}
|
|
{{- $scheme := "postgres" -}}
|
|
{{- $host := .Values.db.external.host -}}
|
|
{{- $port := .Values.db.external.port | default 5432 -}}
|
|
{{- $user := .Values.db.external.user | default "postgres" -}}
|
|
{{- $db := .Values.db.external.database | default "twenty" -}}
|
|
{{- $qs := ternary "?sslmode=require" "" (eq .Values.db.external.ssl true) -}}
|
|
{{- printf "%s://%s:$(DB_PASSWORD)@%s:%v/%s%s" $scheme $user $host $port $db $qs -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Check if using external secret for redis password */}}
|
|
{{- define "twenty.redis.useExternalSecret" -}}
|
|
{{- if and (not .Values.redisInternal.enabled) .Values.redis.external.secretName .Values.redis.external.passwordKey -}}
|
|
true
|
|
{{- else -}}
|
|
false
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Compose Redis URL */}}
|
|
{{- define "twenty.redisUrl" -}}
|
|
{{- if .Values.server.env.REDIS_URL -}}
|
|
{{- .Values.server.env.REDIS_URL -}}
|
|
{{- else if .Values.redisInternal.enabled -}}
|
|
{{- $host := printf "%s-redis" (include "twenty.fullname" .) -}}
|
|
{{- printf "redis://%s.%s.svc.cluster.local:6379" $host (include "twenty.namespace" .) -}}
|
|
{{- else -}}
|
|
{{- $host := .Values.redis.external.host | default "redis" -}}
|
|
{{- $port := .Values.redis.external.port | default 6379 -}}
|
|
{{- if or (eq (include "twenty.redis.useExternalSecret" .) "true") (.Values.redis.external.password) -}}
|
|
{{- $auth := ":$(REDIS_PASSWORD)@" -}}
|
|
{{- printf "redis://%s%s:%v" $auth $host $port -}}
|
|
{{- else -}}
|
|
{{- printf "redis://%s:%v" $host $port -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Compose Server URL from override, ingress, or service */}}
|
|
{{- define "twenty.serverUrl" -}}
|
|
{{- if .Values.server.env.SERVER_URL -}}
|
|
{{- .Values.server.env.SERVER_URL -}}
|
|
{{- else if and .Values.server.ingress.enabled (gt (len .Values.server.ingress.hosts) 0) -}}
|
|
{{- $host := (index .Values.server.ingress.hosts 0).host -}}
|
|
{{- $tls := gt (len .Values.server.ingress.tls) 0 -}}
|
|
{{- $scheme := ternary "https" "http" $tls -}}
|
|
{{- $port := ternary 443 80 $tls -}}
|
|
{{- printf "%s://%s:%v" $scheme $host $port -}}
|
|
{{- else -}}
|
|
{{- $svc := printf "%s-server" (include "twenty.fullname" .) -}}
|
|
{{- $ns := include "twenty.namespace" . -}}
|
|
{{- $port := .Values.server.service.port | default 3000 -}}
|
|
{{- printf "http://%s.%s.svc.cluster.local:%v" $svc $ns $port -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Tokens secret name */}}
|
|
{{- define "twenty.secret.tokens.name" -}}
|
|
{{- .Values.secrets.tokens.name | default "tokens" -}}
|
|
{{- end -}}
|
|
|
|
{{/* Access token value: reuse existing secret if present, else provided value, else generated */}}
|
|
{{- define "twenty.secret.tokens.access" -}}
|
|
{{- $name := include "twenty.secret.tokens.name" . -}}
|
|
{{- $ns := include "twenty.namespace" . -}}
|
|
{{- $existing := lookup "v1" "Secret" $ns $name -}}
|
|
{{- if and $existing $existing.data.accessToken -}}
|
|
{{- b64dec $existing.data.accessToken -}}
|
|
{{- else if .Values.secrets.tokens.accessToken -}}
|
|
{{- .Values.secrets.tokens.accessToken -}}
|
|
{{- else -}}
|
|
{{- randAlphaNum 32 -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Server container port */}}
|
|
{{- define "twenty.server.containerPort" -}}
|
|
{{- .Values.server.service.port | default 3000 -}}
|
|
{{- end -}}
|
|
|
|
{{/* Storage type: prefer top-level storage.type, else legacy server.env.STORAGE_TYPE, else local */}}
|
|
{{- define "twenty.storageType" -}}
|
|
{{- if .Values.storage.type -}}
|
|
{{- .Values.storage.type -}}
|
|
{{- else if .Values.server.env.STORAGE_TYPE -}}
|
|
{{- .Values.server.env.STORAGE_TYPE -}}
|
|
{{- else -}}
|
|
local
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Additional storage env vars (e.g., S3) */}}
|
|
{{- define "twenty.storageEnv" -}}
|
|
{{- if eq (include "twenty.storageType" .) "s3" -}}
|
|
{{- with .Values.storage.s3.bucket }}
|
|
- name: STORAGE_S3_NAME
|
|
value: {{ . | quote }}
|
|
{{- end }}
|
|
{{- with .Values.storage.s3.region }}
|
|
- name: STORAGE_S3_REGION
|
|
value: {{ . | quote }}
|
|
{{- end }}
|
|
{{- with .Values.storage.s3.endpoint }}
|
|
- name: STORAGE_S3_ENDPOINT
|
|
value: {{ . | quote }}
|
|
{{- end }}
|
|
{{- if and .Values.storage.s3.secretName .Values.storage.s3.accessKeyIdKey }}
|
|
- name: STORAGE_S3_ACCESS_KEY_ID
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ .Values.storage.s3.secretName | quote }}
|
|
key: {{ .Values.storage.s3.accessKeyIdKey | quote }}
|
|
{{- else }}
|
|
{{- with .Values.storage.s3.accessKeyId }}
|
|
- name: STORAGE_S3_ACCESS_KEY_ID
|
|
value: {{ . | quote }}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- if and .Values.storage.s3.secretName .Values.storage.s3.secretAccessKeyKey }}
|
|
- name: STORAGE_S3_SECRET_ACCESS_KEY
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ .Values.storage.s3.secretName | quote }}
|
|
key: {{ .Values.storage.s3.secretAccessKeyKey | quote }}
|
|
{{- else }}
|
|
{{- with .Values.storage.s3.secretAccessKey }}
|
|
- name: STORAGE_S3_SECRET_ACCESS_KEY
|
|
value: {{ . | quote }}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- end -}}
|
|
{{- end -}}
|