Skip to content

lifecycle

Version: 0.3.3 Type: application AppVersion: 0.1.3

A Helm umbrella chart for full Lifecycle stack

Installation

Prerequisites

Create a minimal values.yaml file with your domain configuration:

global:
  domain: YOUR-DOMAIN.com  # CHANGE THIS to your actual domain
  image:
    tag: 0.1.3

distribution:
  ingress:
    hostname: distribution.YOUR-DOMAIN.com  # CHANGE THIS to match your domain

buildkit:
  buildkitdToml: |
    debug = true
    [registry."distribution.YOUR-DOMAIN.com"]  # CHANGE THIS to match your domain
      http = true
      insecure = true
    [worker.oci]
      platforms = [ "linux/amd64" ]
      reservedSpace = "60%"
      maxUsedSpace = "80%"
      max-parallelism = 25

Important: Replace all instances of YOUR-DOMAIN.com with your actual domain name.

Install the Chart

helm upgrade -i lifecycle \
  oci://ghcr.io/goodrxoss/helm-charts/lifecycle \
  --version 0.3.3 \
  -f values.yaml \
  -n lifecycle-app \
  --create-namespace

Requirements

Repository Name Version
https://andrcuns.github.io/charts buildkit(buildkit-service) 0.10.0
https://charts.bitnami.com/bitnami postgres(postgresql) 15.5.19
https://charts.bitnami.com/bitnami redis(redis) 19.6.3
https://jouve.github.io/charts distribution(distribution) 0.1.7

Values

Key Type Default Description
buildkit.buildkitdToml string "debug = true\n[registry.\"distribution.example.com\"]\n http = true\n insecure = true\n[worker.oci]\n platforms = [ \"linux/amd64\" ]\n reservedSpace = \"60%\"\n maxUsedSpace = \"80%\"\n max-parallelism = 25\n"
buildkit.enabled bool true
buildkit.fullnameOverride string ""
buildkit.resources.requests.cpu string "500m"
buildkit.resources.requests.memory string "1Gi"
components.web.container.args list []
components.web.container.command list []
components.web.deployment.affinity object {}
components.web.deployment.envFrom object {}
components.web.deployment.extraEnv[0].name string "LIFECYCLE_MODE"
components.web.deployment.extraEnv[0].value string "web"
components.web.deployment.livenessProbe.failureThreshold int 6
components.web.deployment.livenessProbe.httpGet.path string "/api/health"
components.web.deployment.livenessProbe.httpGet.port string "http"
components.web.deployment.livenessProbe.initialDelaySeconds int 60
components.web.deployment.livenessProbe.periodSeconds int 10
components.web.deployment.nodeSelector object {}
components.web.deployment.ports[0].containerPort int 80
components.web.deployment.ports[0].name string "http"
components.web.deployment.ports[0].protocol string "TCP"
components.web.deployment.readinessProbe.failureThreshold int 3
components.web.deployment.readinessProbe.httpGet.path string "/api/health"
components.web.deployment.readinessProbe.httpGet.port string "http"
components.web.deployment.readinessProbe.periodSeconds int 5
components.web.deployment.replicaCount int 1
components.web.deployment.resources.requests.cpu string "200m"
components.web.deployment.resources.requests.memory string "200Mi"
components.web.deployment.startupProbe object {}
components.web.deployment.tolerations list []
components.web.deployment.volumeMounts list []
components.web.deployment.volumes list []
components.web.enabled bool true
components.web.extraLabels object {}
components.web.fullnameOverride string ""
components.web.ingress.annotations."cert-manager.io/cluster-issuer" string "letsencrypt"
components.web.ingress.defaultBackend object {}
components.web.ingress.enabled bool true
components.web.ingress.hosts list []
components.web.ingress.ingressClassName string "nginx"
components.web.service.enabled bool true
components.web.service.port int 80
components.web.service.targetPort int 80
components.web.service.type string "ClusterIP"
components.worker.container.args list []
components.worker.container.command list []
components.worker.deployment.affinity object {}
components.worker.deployment.envFrom object {}
components.worker.deployment.extraEnv[0].name string "LIFECYCLE_MODE"
components.worker.deployment.extraEnv[0].value string "job"
components.worker.deployment.extraEnv[1].name string "STAGE"
components.worker.deployment.extraEnv[1].value string "prod"
components.worker.deployment.extraEnv[2].name string "LOG_LEVEL"
components.worker.deployment.extraEnv[2].value string "info"
components.worker.deployment.extraEnv[3].name string "MAX_GITHUB_API_REQUEST"
components.worker.deployment.extraEnv[3].value string "33"
components.worker.deployment.extraEnv[4].name string "GITHUB_API_REQUEST_INTERVAL"
components.worker.deployment.extraEnv[4].value string "10000"
components.worker.deployment.livenessProbe.failureThreshold int 12
components.worker.deployment.livenessProbe.httpGet.path string "/api/health"
components.worker.deployment.livenessProbe.httpGet.port string "http"
components.worker.deployment.livenessProbe.initialDelaySeconds int 60
components.worker.deployment.livenessProbe.periodSeconds int 10
components.worker.deployment.livenessProbe.timeoutSeconds int 10
components.worker.deployment.nodeSelector object {}
components.worker.deployment.ports[0].containerPort int 80
components.worker.deployment.ports[0].name string "http"
components.worker.deployment.ports[0].protocol string "TCP"
components.worker.deployment.readinessProbe.failureThreshold int 3
components.worker.deployment.readinessProbe.httpGet.path string "/api/jobs"
components.worker.deployment.readinessProbe.httpGet.port string "http"
components.worker.deployment.readinessProbe.periodSeconds int 5
components.worker.deployment.replicaCount int 1
components.worker.deployment.resources.limits.cpu string "1000m"
components.worker.deployment.resources.limits.memory string "4000Mi"
components.worker.deployment.resources.requests.cpu string "200m"
components.worker.deployment.resources.requests.memory string "200Mi"
components.worker.deployment.startupProbe object {}
components.worker.deployment.tolerations list []
components.worker.deployment.volumeMounts list []
components.worker.deployment.volumes list []
components.worker.enabled bool true
components.worker.extraLabels object {}
components.worker.fullnameOverride string ""
components.worker.hpa.enabled bool false
components.worker.hpa.maxReplicas int 5
components.worker.hpa.metrics[0].resource.name string "cpu"
components.worker.hpa.metrics[0].resource.target.averageUtilization int 80
components.worker.hpa.metrics[0].resource.target.type string "Utilization"
components.worker.hpa.metrics[0].type string "Resource"
components.worker.hpa.minReplicas int 1
components.worker.ingress.enabled bool false
components.worker.networkPolicy.egress list []
components.worker.networkPolicy.enabled bool false
components.worker.networkPolicy.ingress list []
components.worker.pdb.enabled bool false
components.worker.pdb.minAvailable int 1
components.worker.service.clusterIP string ""
components.worker.service.enabled bool false
components.worker.service.externalTrafficPolicy string ""
config.annotations list []
config.enabled bool true
config.fullnameOverride string ""
distribution.enabled bool true
distribution.image.tag string "2.8.3"
distribution.ingress.annotations."nginx.ingress.kubernetes.io/proxy-body-size" string "0"
distribution.ingress.enabled bool true
distribution.ingress.hostname string "distribution.example.com"
distribution.ingress.ingressClassName string "nginx"
distribution.persistence.enabled bool true
distribution.persistence.size string "20Gi"
global.appSubDomain string "app"
global.domain string "example.com"
global.envFrom object {}
global.env[0].name string "JOB_VERSION"
global.env[0].value string "default"
global.env[1].name string "ENVIRONMENT"
global.env[1].value string "production"
global.env[2].name string "NODE_ENV"
global.env[2].value string "production"
global.env[3].name string "APP_ENV"
global.env[3].value string "production"
global.env[4].name string "PINO_PRETTY"
global.env[4].value string "false"
global.env[5].name string "PORT"
global.env[5].value string "80"
global.extraEnv list []
global.extraLabels object {}
global.image.pullPolicy string "IfNotPresent"
global.image.repository string "lifecycleoss/app"
global.image.tag string ""
global.imagePullSecrets list []
global.podSecurityContext.fsGroup int 2000
global.scope string "core"
global.securityContext.readOnlyRootFilesystem bool false
global.securityContext.runAsNonRoot bool false
global.serviceAccount.annotations list []
global.serviceAccount.create bool true
global.serviceAccount.name string ""
postgres.auth.database string "lifecycle"
postgres.auth.existingSecret string "{{ include \"..helper.postgresSecretName\" . }}"
postgres.auth.secretKeys.adminPasswordKey string "POSTGRES_ADMIN_PASSWORD"
postgres.auth.secretKeys.userPasswordKey string "POSTGRES_USER_PASSWORD"
postgres.auth.username string "lifecycle"
postgres.enabled bool true
postgres.fullnameOverride string ""
postgres.image.repository string "bitnamilegacy/postgresql"
postgres.primary.persistence.enabled bool true
postgres.primary.persistence.size string "11Gi"
rbac.create bool true
redis.architecture string "standalone"
redis.auth.enabled bool true
redis.auth.existingSecret string "{{ include \"..helper.redisSecretName\" . }}"
redis.auth.existingSecretPasswordKey string "REDIS_PASSWORD"
redis.auth.password string "password"
redis.enabled bool true
redis.fullnameOverride string ""
redis.image.repository string "bitnamilegacy/redis"
redis.master.persistence.enabled bool true
redis.master.persistence.size string "8Gi"
secrets.bootstrap.annotations list []
secrets.bootstrap.enabled bool true
secrets.bootstrap.fullnameOverride string ""
secrets.bootstrap.githubAppId string ""
secrets.bootstrap.githubClientId string ""
secrets.bootstrap.githubClientSecret string ""
secrets.bootstrap.githubInstallationId string ""
secrets.bootstrap.githubPrivateKey string ""
secrets.bootstrap.githubWebhookSecret string ""
secrets.common.annotations list []
secrets.common.enabled bool true
secrets.common.fullnameOverride string ""
secrets.postgres.annotations list []
secrets.postgres.enabled bool true
secrets.postgres.fullnameOverride string ""
secrets.postgres.postgresAdminPassword string ""
secrets.postgres.postgresUserPassword string ""
secrets.redis.annotations list []
secrets.redis.enabled bool true
secrets.redis.fullnameOverride string ""
secrets.redis.redisPassword string ""