infra/helm/tuist/README.md
This chart deploys the Tuist server, cache service, and processor, with support for either embedded or external infrastructure dependencies.
postgresqlclickhouseobjectStorageobservabilityEach dependency defaults to embedded (deployed within the chart). To use an external provider instead, set its mode to external and configure the connection details under the corresponding section in values.yaml.
Render manifests:
helm template tuist infra/helm/tuist
Install into a local kind cluster:
kind create cluster --name tuist
helm install tuist infra/helm/tuist
Lint the chart:
helm lint infra/helm/tuist
The global block contains shared settings that apply across workloads rendered by the chart.
global.commonLabels adds extra labels to chart resources.global.podLabels adds extra labels to pod templates.global.imagePullSecrets configures registry credentials for every pod in the chart.global.nodeSelector and global.tolerations let you steer pods onto specific node pools.Example:
global:
podLabels:
environment: production
imagePullSecrets:
- name: ghcr-pull-secret
nodeSelector:
nodepool: apps
tolerations:
- key: dedicated
operator: Equal
value: apps
effect: NoSchedule
Use per-workload service accounts when you need Kubernetes RBAC or cloud workload identity for a specific Tuist component.
cache:
serviceAccount:
create: true
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/tuist-cache
The chart keeps service accounts scoped to the application workloads that need them:
server.serviceAccount applies to the Tuist server deployment and migration job.cache.serviceAccount applies to the cache deployment.Embedded PostgreSQL, ClickHouse, and MinIO continue to use the namespace default service account unless you customize them separately.
Some cluster-specific fixes are intentionally opt-in:
cache.podSecurityContext is empty by default. Set fsGroup only if your storage class needs it.clickhouse.embedded.service.nativePort defaults to ClickHouse's standard 9000 service port and can be overridden for mesh or port-allocation conflicts.Example:
cache:
podSecurityContext:
fsGroup: 990
clickhouse:
embedded:
service:
nativePort: 9100