mirror of
https://github.com/sourcebot-dev/sourcebot.git
synced 2025-12-11 20:05:25 +00:00
Add Sourcebot Helm Chart (#370)
* feat: add helm chart Signed-off-by: Andre Nogueira <andre.nogueira@mollie.com> * feat: add sts support to use internal DB and improve values docs Signed-off-by: Andre Nogueira <andre.nogueira@mollie.com> * fix: include postgresql extra dependency Signed-off-by: Andre Nogueira <andre.nogueira@mollie.com> * fix: remove autoscaler Signed-off-by: Andre Nogueira <andre.nogueira@mollie.com> * fix: remove sts Signed-off-by: Andre Nogueira <andre.nogueira@mollie.com> * fix: add more suggestive env var example Signed-off-by: Andre Nogueira <andre.nogueira@mollie.com> * fix: add chart dependency lock Signed-off-by: Andre Nogueira <andre.nogueira@mollie.com> * fix: add host infer to the chart docs Signed-off-by: Andre Nogueira <andre.nogueira@mollie.com> --------- Signed-off-by: Andre Nogueira <andre.nogueira@mollie.com>
This commit is contained in:
parent
c10010eb99
commit
9c8224e39f
14 changed files with 1205 additions and 0 deletions
23
kubernetes/chart/.helmignore
Normal file
23
kubernetes/chart/.helmignore
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
||||||
6
kubernetes/chart/Chart.lock
Normal file
6
kubernetes/chart/Chart.lock
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
dependencies:
|
||||||
|
- name: postgresql
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
version: 16.7.27
|
||||||
|
digest: sha256:ab3541612e8857c2d08d46f83cab79fa87b6ae6148e2d64d7d2b06729a520ce1
|
||||||
|
generated: "2025-09-25T12:57:56.528976+01:00"
|
||||||
20
kubernetes/chart/Chart.yaml
Normal file
20
kubernetes/chart/Chart.yaml
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
apiVersion: v2
|
||||||
|
type: application
|
||||||
|
name: sourcebot
|
||||||
|
version: 0.1.0
|
||||||
|
appVersion: v4.5.1
|
||||||
|
description: The open source Sourcegraph alternative. Sourcebot gives you a powerful interface to search though all your repos and branches across multiple code hosts.
|
||||||
|
icon: https://raw.githubusercontent.com/sourcebot-dev/sourcebot/ebf6721836b8f878d42bb8c1e844bdc7867a74fe/packages/web/public/logo_512.png
|
||||||
|
keywords:
|
||||||
|
- code-search
|
||||||
|
- code-intelligence
|
||||||
|
- sourcebot
|
||||||
|
home: https://sourcebot.dev/
|
||||||
|
sources:
|
||||||
|
- https://github.com/sourcebot-dev/sourcebot
|
||||||
|
- https://github.com/sourcebot-dev/sourcebot/kubernetes/chart
|
||||||
|
dependencies:
|
||||||
|
- name: postgresql
|
||||||
|
version: 16.7.27
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
condition: postgresql.enabled
|
||||||
92
kubernetes/chart/README.md
Normal file
92
kubernetes/chart/README.md
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
# sourcebot
|
||||||
|
|
||||||
|
  
|
||||||
|
|
||||||
|
The open source Sourcegraph alternative. Sourcebot gives you a powerful interface to search though all your repos and branches across multiple code hosts.
|
||||||
|
|
||||||
|
**Homepage:** <https://sourcebot.dev/>
|
||||||
|
|
||||||
|
## Source Code
|
||||||
|
|
||||||
|
* <https://github.com/sourcebot-dev/sourcebot>
|
||||||
|
* <https://github.com/sourcebot-dev/sourcebot/kubernetes/chart>
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
| Repository | Name | Version |
|
||||||
|
|------------|------|---------|
|
||||||
|
| https://charts.bitnami.com/bitnami | postgresql | 16.7.27 |
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Key | Type | Default | Description |
|
||||||
|
|-----|------|---------|-------------|
|
||||||
|
| additionalLabels | object | `{}` | Add extra labels to all resources. |
|
||||||
|
| affinity | object | `{}` | Set affinity rules for pod scheduling. Defaults to soft anti-affinity if not set. See: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ |
|
||||||
|
| args | list | `[]` | Override the default arguments of the container. |
|
||||||
|
| command | list | `[]` | Override the default command of the container. |
|
||||||
|
| config | object | `{"$schema":"https://raw.githubusercontent.com/sourcebot-dev/sourcebot/main/schemas/v3/index.json","connections":{},"settings":{}}` | Configure Sourcebot-specific application settings. |
|
||||||
|
| containerSecurityContext | object | `{}` | Set the container-level security context. |
|
||||||
|
| database | object | `{}` | Configure the database secret by providing database.secretName and database.secretKey to use a Kubernetes secret. |
|
||||||
|
| envSecrets | list | `[]` | Set environment variables from Kubernetes secrets. |
|
||||||
|
| envs | list | `[]` | Set additional environment variables. |
|
||||||
|
| fullnameOverride | string | `""` | Override the full name of the chart. |
|
||||||
|
| image | object | `{"pullPolicy":"IfNotPresent","repository":"ghcr.io/sourcebot-dev/sourcebot"}` | Configure the container image. |
|
||||||
|
| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy. |
|
||||||
|
| image.repository | string | `"ghcr.io/sourcebot-dev/sourcebot"` | Container image repository. |
|
||||||
|
| imagePullSecrets | list | `[]` | Configure image pull secrets for private registries. |
|
||||||
|
| ingress | object | `{"annotations":{},"className":"","enabled":false,"hosts":[],"tls":[]}` | Configure ingress for Sourcebot. |
|
||||||
|
| ingress.annotations | object | `{}` | Ingress annotations. |
|
||||||
|
| ingress.className | string | `""` | Ingress class name. |
|
||||||
|
| ingress.enabled | bool | `false` | Enable or disable ingress. |
|
||||||
|
| ingress.hosts | list | `[]` | List of hostnames and paths for ingress rules. The first host will be used as the default host. |
|
||||||
|
| ingress.tls | list | `[]` | TLS settings for ingress. |
|
||||||
|
| initContainers | list | `[]` | Configure init containers to run before the main container. |
|
||||||
|
| license | object | `{}` | Configure the enterprise license key secret by providing license.secretName and license.secretKey to use a Kubernetes secret. |
|
||||||
|
| livenessProbe | object | `{"failureThreshold":5,"httpGet":{"path":"/","port":"http"},"initialDelaySeconds":10,"periodSeconds":10}` | Liveness probe to check if the container is alive. |
|
||||||
|
| livenessProbe.failureThreshold | int | `5` | Number of consecutive failures before marking the container as unhealthy. |
|
||||||
|
| livenessProbe.httpGet | object | `{"path":"/","port":"http"}` | Http GET request to check if the container is alive. |
|
||||||
|
| livenessProbe.httpGet.path | string | `"/"` | Path to check. |
|
||||||
|
| livenessProbe.httpGet.port | string | `"http"` | Port to check. |
|
||||||
|
| livenessProbe.initialDelaySeconds | int | `10` | Initial delay before the first probe. |
|
||||||
|
| livenessProbe.periodSeconds | int | `10` | Frequency of the probe. |
|
||||||
|
| nameOverride | string | `""` | Override the name of the chart. |
|
||||||
|
| nodeSelector | object | `{}` | Set node selector constraints. See: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector |
|
||||||
|
| podAnnotations | object | `{}` | Add annotations to the pod metadata. |
|
||||||
|
| podDisruptionBudget | object | `{"enabled":true,"maxUnavailable":1,"minAvailable":1}` | Configure Pod Disruption Budget. |
|
||||||
|
| podDisruptionBudget.enabled | bool | `true` | Enable Pod Disruption Budget. |
|
||||||
|
| podDisruptionBudget.maxUnavailable | int | `1` | Maximum number of pods that can be unavailable. |
|
||||||
|
| podDisruptionBudget.minAvailable | int | `1` | Minimum number of pods that must be available. |
|
||||||
|
| podSecurityContext | object | `{}` | Set the pod-level security context. |
|
||||||
|
| postgresql | object | `{"enabled":false}` | Configure the Bitnami PostgreSQL sub-chart. See: https://artifacthub.io/packages/helm/bitnami/postgresql |
|
||||||
|
| priorityClassName | string | `""` | Set the priority class name for pods. See: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/ |
|
||||||
|
| readinessProbe | object | `{"failureThreshold":5,"httpGet":{"path":"/","port":"http"},"initialDelaySeconds":10,"periodSeconds":10}` | Readiness probe to check if the container is ready to serve traffic. |
|
||||||
|
| readinessProbe.failureThreshold | int | `5` | Number of consecutive failures before marking the container as not ready. |
|
||||||
|
| readinessProbe.httpGet | object | `{"path":"/","port":"http"}` | Http GET request to check if the container is ready. |
|
||||||
|
| readinessProbe.httpGet.path | string | `"/"` | Path to check. |
|
||||||
|
| readinessProbe.httpGet.port | string | `"http"` | Port to check. |
|
||||||
|
| readinessProbe.initialDelaySeconds | int | `10` | Initial delay before the first probe. |
|
||||||
|
| readinessProbe.periodSeconds | int | `10` | Frequency of the probe. |
|
||||||
|
| redis | object | `{}` | Configure the Redis secret by providing redis.secretName and redis.secretKey to use a Kubernetes secret. |
|
||||||
|
| replicaCount | int | `1` | Set the number of replicas for the deployment. |
|
||||||
|
| resources | object | `{}` | Configure resource requests and limits for the container. |
|
||||||
|
| service | object | `{"annotations":{},"containerPort":3000,"port":3000,"type":"ClusterIP"}` | Configure the Sourcebot Kubernetes service. |
|
||||||
|
| service.annotations | object | `{}` | Service annotations. |
|
||||||
|
| service.containerPort | int | `3000` | Internal container port. |
|
||||||
|
| service.port | int | `3000` | External service port. |
|
||||||
|
| service.type | string | `"ClusterIP"` | Type of the Kubernetes service (e.g., ClusterIP, NodePort, LoadBalancer). |
|
||||||
|
| serviceAccount | object | `{"annotations":{},"automount":false,"create":true,"name":""}` | Configure the ServiceAccount. |
|
||||||
|
| serviceAccount.annotations | object | `{}` | Add annotations to the ServiceAccount. |
|
||||||
|
| serviceAccount.automount | bool | `false` | Enable or disable automatic ServiceAccount mounting. |
|
||||||
|
| serviceAccount.create | bool | `true` | Create a new ServiceAccount. |
|
||||||
|
| serviceAccount.name | string | `""` | Use an existing ServiceAccount (if set). |
|
||||||
|
| startupProbe | object | `{"failureThreshold":30,"httpGet":{"path":"/","port":"http"},"periodSeconds":30}` | Startup probe to check if the container has started successfully. |
|
||||||
|
| startupProbe.failureThreshold | int | `30` | Number of seconds to wait before starting the probe. |
|
||||||
|
| startupProbe.httpGet | object | `{"path":"/","port":"http"}` | Http GET request to check if the container has started. |
|
||||||
|
| startupProbe.httpGet.path | string | `"/"` | Path to check. |
|
||||||
|
| startupProbe.httpGet.port | string | `"http"` | Port to check. |
|
||||||
|
| startupProbe.periodSeconds | int | `30` | Initial delay before the first probe. |
|
||||||
|
| tolerations | list | `[]` | Set tolerations for pod scheduling. See: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ |
|
||||||
|
| volumeMounts | list | `[]` | Define volume mounts for the container. See: https://kubernetes.io/docs/concepts/storage/volumes/ |
|
||||||
|
| volumes | list | `[]` | Define additional volumes. See: https://kubernetes.io/docs/concepts/storage/volumes/ |
|
||||||
|
|
||||||
22
kubernetes/chart/templates/NOTES.txt
Normal file
22
kubernetes/chart/templates/NOTES.txt
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
1. Get the application URL by running these commands:
|
||||||
|
{{- if $.Values.ingress.enabled }}
|
||||||
|
{{- range $host := $.Values.ingress.hosts }}
|
||||||
|
{{- range .paths }}
|
||||||
|
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else if contains "NodePort" $.Values.service.type }}
|
||||||
|
export NODE_PORT=$(kubectl get --namespace {{ $.Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "sourcebot.fullname" $ }})
|
||||||
|
export NODE_IP=$(kubectl get nodes --namespace {{ $.Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||||
|
echo http://$NODE_IP:$NODE_PORT
|
||||||
|
{{- else if contains "LoadBalancer" $.Values.service.type }}
|
||||||
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||||
|
You can watch its status by running 'kubectl get --namespace {{ $.Release.Namespace }} svc -w {{ include "sourcebot.fullname" $ }}'
|
||||||
|
export SERVICE_IP=$(kubectl get svc --namespace {{ $.Release.Namespace }} {{ include "sourcebot.fullname" $ }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
|
||||||
|
echo http://$SERVICE_IP:{{ $.Values.service.port }}
|
||||||
|
{{- else if contains "ClusterIP" $.Values.service.type }}
|
||||||
|
export POD_NAME=$(kubectl get pods --namespace {{ $.Release.Namespace }} -l "app.kubernetes.io/name={{ include "sourcebot.name" $ }},app.kubernetes.io/instance={{ $.Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||||
|
export CONTAINER_PORT=$(kubectl get pod --namespace {{ $.Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
|
||||||
|
echo "Visit http://127.0.0.1:3000 to use Sourcebot after forwarding"
|
||||||
|
kubectl --namespace {{ $.Release.Namespace }} port-forward $POD_NAME 3000:$CONTAINER_PORT
|
||||||
|
{{- end }}
|
||||||
78
kubernetes/chart/templates/_helpers.tpl
Normal file
78
kubernetes/chart/templates/_helpers.tpl
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "sourcebot.name" -}}
|
||||||
|
{{- default $.Chart.Name $.Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "sourcebot.fullname" -}}
|
||||||
|
{{- if $.Values.fullnameOverride }}
|
||||||
|
{{- $.Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $name := default $.Chart.Name $.Values.nameOverride }}
|
||||||
|
{{- if contains $name $.Release.Name }}
|
||||||
|
{{- $.Release.Name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- printf "%s-%s" $.Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "sourcebot.chart" -}}
|
||||||
|
{{- printf "%s-%s" $.Chart.Name $.Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "sourcebot.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "sourcebot.chart" $ }}
|
||||||
|
{{ include "sourcebot.selectorLabels" $ }}
|
||||||
|
{{- if $.Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ $.Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ $.Release.Service }}
|
||||||
|
{{- with $.Values.additionalLabels }}
|
||||||
|
{{ toYaml . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "sourcebot.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "sourcebot.name" $ }}
|
||||||
|
app.kubernetes.io/instance: {{ $.Release.Name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the image to use for the container.
|
||||||
|
*/}}
|
||||||
|
{{- define "sourcebot.image" -}}
|
||||||
|
{{- if $.Values.image.digest -}}
|
||||||
|
"{{ $.Values.image.repository }}@{{ $.Values.image.digest }}"
|
||||||
|
{{- else if $.Values.image.tag -}}
|
||||||
|
"{{ $.Values.image.repository }}:{{ $.Values.image.tag }}"
|
||||||
|
{{- else -}}
|
||||||
|
"{{ $.Values.image.repository }}:{{ $.Chart.AppVersion }}"
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use
|
||||||
|
*/}}
|
||||||
|
{{- define "sourcebot.serviceAccountName" -}}
|
||||||
|
{{- if $.Values.serviceAccount.create }}
|
||||||
|
{{- default (include "sourcebot.fullname" $) $.Values.serviceAccount.name }}
|
||||||
|
{{- else }}
|
||||||
|
{{- default "default" $.Values.serviceAccount.name }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
10
kubernetes/chart/templates/config.yaml
Normal file
10
kubernetes/chart/templates/config.yaml
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ include "sourcebot.fullname" $ }}
|
||||||
|
labels:
|
||||||
|
{{- include "sourcebot.labels" $ | nindent 4 }}
|
||||||
|
data:
|
||||||
|
config.json: |
|
||||||
|
{{- toJson $.Values.config | nindent 4 }}
|
||||||
142
kubernetes/chart/templates/deployment.yaml
Normal file
142
kubernetes/chart/templates/deployment.yaml
Normal file
|
|
@ -0,0 +1,142 @@
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "sourcebot.fullname" $ }}
|
||||||
|
labels:
|
||||||
|
{{- include "sourcebot.labels" $ | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ $.Values.replicaCount }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "sourcebot.selectorLabels" $ | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- with $.Values.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "sourcebot.labels" $ | nindent 8 }}
|
||||||
|
{{- with $.Values.podLabels }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- with $.Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ include "sourcebot.serviceAccountName" $ }}
|
||||||
|
{{- with $.Values.podSecurityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.initContainers }}
|
||||||
|
initContainers:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}
|
||||||
|
{{- with $.Values.containerSecurityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
image: {{ include "sourcebot.image" $ }}
|
||||||
|
imagePullPolicy: {{ $.Values.image.pullPolicy }}
|
||||||
|
{{- with $.Values.command }}
|
||||||
|
command: {{ toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.args }}
|
||||||
|
args: {{ toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
env:
|
||||||
|
{{- if and $.Values.ingress.enabled (gt len ($.Values.ingress.hosts) 0) }}
|
||||||
|
- name: AUTH_URL
|
||||||
|
value: {{ (index $.Values.ingress.hosts 0).host | printf "https://%s" }}
|
||||||
|
{{- end }}
|
||||||
|
- name: CONFIG_PATH
|
||||||
|
value: /etc/sourcebot/config.json
|
||||||
|
{{- if $.Values.license }}
|
||||||
|
- name: SOURCEBOT_EE_LICENSE_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ $.Values.license.secretName }}
|
||||||
|
key: {{ $.Values.license.secretKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $.Values.database }}
|
||||||
|
- name: DATABASE_URL
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ $.Values.database.secretName }}
|
||||||
|
key: {{ $.Values.database.secretKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $.Values.redis }}
|
||||||
|
- name: REDIS_URL
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ $.Values.redis.secretName }}
|
||||||
|
key: {{ $.Values.redis.secretKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $.Values.envSecrets }}
|
||||||
|
- name: {{ .envName }}
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .secretName }}
|
||||||
|
key: {{ .secretKey }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.envs }}
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: {{ $.Values.service.containerPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- with $.Values.livenessProbe }}
|
||||||
|
livenessProbe:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.readinessProbe }}
|
||||||
|
readinessProbe:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.startupProbe }}
|
||||||
|
startupProbe:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.resources }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: sourcebot-config
|
||||||
|
mountPath: /etc/sourcebot/config.json
|
||||||
|
subPath: config.json
|
||||||
|
readOnly: true
|
||||||
|
{{- with $.Values.volumeMounts }}
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.priorityClassName }}
|
||||||
|
priorityClassName: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- name: sourcebot-config
|
||||||
|
configMap:
|
||||||
|
name: {{ include "sourcebot.fullname" $ }}
|
||||||
|
items:
|
||||||
|
- key: config.json
|
||||||
|
path: config.json
|
||||||
|
{{- with $.Values.volumes }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
44
kubernetes/chart/templates/ingress.yaml
Normal file
44
kubernetes/chart/templates/ingress.yaml
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
{{- if $.Values.ingress.enabled -}}
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ include "sourcebot.fullname" $ }}
|
||||||
|
labels:
|
||||||
|
{{- include "sourcebot.labels" $ | nindent 4 }}
|
||||||
|
{{- with $.Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- with $.Values.ingress.className }}
|
||||||
|
ingressClassName: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $.Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range $.Values.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
{{- range .hosts }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range $.Values.ingress.hosts }}
|
||||||
|
- host: {{ .host | quote }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
{{- range .paths }}
|
||||||
|
- path: {{ .path }}
|
||||||
|
{{- with .pathType }}
|
||||||
|
pathType: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: {{ include "sourcebot.fullname" $ }}
|
||||||
|
port:
|
||||||
|
number: {{ $.Values.service.port }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
18
kubernetes/chart/templates/pdb.yaml
Normal file
18
kubernetes/chart/templates/pdb.yaml
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{{- if and $.Values.podDisruptionBudget.enabled (gt (int $.Values.replicaCount) 1) }}
|
||||||
|
apiVersion: {{ include "common.capabilities.policy.apiVersion" . }}
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: {{ include "sourcebot.fullname" $ }}
|
||||||
|
labels:
|
||||||
|
{{- include "sourcebot.labels" $ | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
{{- if $.Values.podDisruptionBudget.minAvailable }}
|
||||||
|
minAvailable: {{ $.Values.podDisruptionBudget.minAvailable }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $.Values.podDisruptionBudget.maxUnavailable }}
|
||||||
|
maxUnavailable: {{ $.Values.podDisruptionBudget.maxUnavailable }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "sourcebot.selectorLabels" $ | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
16
kubernetes/chart/templates/service.yaml
Normal file
16
kubernetes/chart/templates/service.yaml
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "sourcebot.fullname" $ }}
|
||||||
|
labels:
|
||||||
|
{{- include "sourcebot.labels" $ | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
type: {{ $.Values.service.type }}
|
||||||
|
ports:
|
||||||
|
- port: {{ $.Values.service.port }}
|
||||||
|
targetPort: http
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
{{- include "sourcebot.selectorLabels" $ | nindent 4 }}
|
||||||
14
kubernetes/chart/templates/serviceaccount.yaml
Normal file
14
kubernetes/chart/templates/serviceaccount.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{{- if $.Values.serviceAccount.create -}}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: {{ include "sourcebot.serviceAccountName" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "sourcebot.labels" . | nindent 4 }}
|
||||||
|
{{- with $.Values.serviceAccount.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
automountServiceAccountToken: {{ $.Values.serviceAccount.automount }}
|
||||||
|
{{- end }}
|
||||||
460
kubernetes/chart/values.schema.json
Normal file
460
kubernetes/chart/values.schema.json
Normal file
|
|
@ -0,0 +1,460 @@
|
||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Sourcebot Helm Chart Values Schema",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"nameOverride": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"fullnameOverride": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"replicaCount": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"repository": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"digest": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pullPolicy": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"Always",
|
||||||
|
"IfNotPresent",
|
||||||
|
"Never"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"repository"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"imagePullSecrets": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"command": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"args": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"database": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"redis": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"license": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"envSecrets": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"secretName": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretKey": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"envName": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretName",
|
||||||
|
"secretKey",
|
||||||
|
"envName"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"envs": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"value"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"connections": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"serviceAccount": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"create": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"automount": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"podSecurityContext": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"runAsUser": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"runAsGroup": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"runAsNonRoot": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"fsGroup": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"containerSecurityContext": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"allowPrivilegeEscalation": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"privileged": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"readOnlyRootFilesystem": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"runAsUser": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"runAsGroup": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"capabilities": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"drop": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"seccompProfile": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"RuntimeDefault",
|
||||||
|
"Unconfined",
|
||||||
|
"Localhost"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"service": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"ClusterIP",
|
||||||
|
"NodePort",
|
||||||
|
"LoadBalancer",
|
||||||
|
"ExternalName"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"containerPort": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ingress": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"className": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"hosts": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"paths": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pathType": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"ImplementationSpecific",
|
||||||
|
"Exact",
|
||||||
|
"Prefix"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tls": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"secretName": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"hosts": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretName",
|
||||||
|
"hosts"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"initContainers": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"args": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"resources": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"limits": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"cpu": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requests": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"cpu": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"livenessProbe": {
|
||||||
|
"$ref": "#/definitions/probe"
|
||||||
|
},
|
||||||
|
"readinessProbe": {
|
||||||
|
"$ref": "#/definitions/probe"
|
||||||
|
},
|
||||||
|
"startupProbe": {
|
||||||
|
"$ref": "#/definitions/probe"
|
||||||
|
},
|
||||||
|
"volumes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"volumeMounts": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"mountPath": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"readOnly": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"podDisruptionBudget": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"minAvailable": {
|
||||||
|
"type": [
|
||||||
|
"integer",
|
||||||
|
"string"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"maxUnavailable": {
|
||||||
|
"type": [
|
||||||
|
"integer",
|
||||||
|
"string"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"podAnnotations": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"additionalLabels": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"nodeSelector": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"tolerations": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"affinity": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"priorityClassName": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"postgresql": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"enabled"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"definitions": {
|
||||||
|
"probe": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"httpGet": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"integer"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"path",
|
||||||
|
"port"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"initialDelaySeconds": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"periodSeconds": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"timeoutSeconds": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"successThreshold": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"failureThreshold": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
260
kubernetes/chart/values.yaml
Normal file
260
kubernetes/chart/values.yaml
Normal file
|
|
@ -0,0 +1,260 @@
|
||||||
|
# -- Sourcebot Helm Chart Values
|
||||||
|
|
||||||
|
# -- Override the name of the chart.
|
||||||
|
nameOverride: ""
|
||||||
|
|
||||||
|
# -- Override the full name of the chart.
|
||||||
|
fullnameOverride: ""
|
||||||
|
|
||||||
|
# -- Set the number of replicas for the deployment.
|
||||||
|
replicaCount: 1
|
||||||
|
|
||||||
|
# -- Configure the container image.
|
||||||
|
image:
|
||||||
|
# -- Container image repository.
|
||||||
|
repository: ghcr.io/sourcebot-dev/sourcebot
|
||||||
|
# -- Container image tag.
|
||||||
|
# tag: ""
|
||||||
|
# -- Container image digest (used instead of tag if set).
|
||||||
|
# digest: ""
|
||||||
|
# -- Image pull policy.
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
# -- Configure image pull secrets for private registries.
|
||||||
|
imagePullSecrets: []
|
||||||
|
|
||||||
|
# -- Override the default command of the container.
|
||||||
|
command: []
|
||||||
|
|
||||||
|
# -- Override the default arguments of the container.
|
||||||
|
args: []
|
||||||
|
|
||||||
|
# -- Configure the database secret by providing database.secretName and database.secretKey to use a Kubernetes secret.
|
||||||
|
database: {}
|
||||||
|
# secretName: sourcebot-database-url
|
||||||
|
# secretKey: url
|
||||||
|
|
||||||
|
# -- Configure the Redis secret by providing redis.secretName and redis.secretKey to use a Kubernetes secret.
|
||||||
|
redis: {}
|
||||||
|
# secretName: sourcebot-redis-url
|
||||||
|
# secretKey: url
|
||||||
|
|
||||||
|
# -- Configure the enterprise license key secret by providing license.secretName and license.secretKey to use a Kubernetes secret.
|
||||||
|
license: {}
|
||||||
|
# secretName: sourcebot-ee-license-key
|
||||||
|
# secretKey: key
|
||||||
|
|
||||||
|
# -- Set environment variables from Kubernetes secrets.
|
||||||
|
envSecrets: []
|
||||||
|
# - secretName: sourcebot-github-token
|
||||||
|
# secretKey: token
|
||||||
|
# envName: GITHUB_TOKEN
|
||||||
|
|
||||||
|
# -- Set additional environment variables.
|
||||||
|
envs: []
|
||||||
|
# # Disable sourcebot telemetry.
|
||||||
|
# - name: SOURCEBOT_TELEMETRY_DISABLED
|
||||||
|
# value: "1"
|
||||||
|
|
||||||
|
# -- Configure Sourcebot-specific application settings.
|
||||||
|
config:
|
||||||
|
# Schema version of the Sourcebot configuration.
|
||||||
|
$schema: https://raw.githubusercontent.com/sourcebot-dev/sourcebot/main/schemas/v3/index.json
|
||||||
|
connections: {}
|
||||||
|
# github-repos:
|
||||||
|
# type: github
|
||||||
|
# token:
|
||||||
|
# env: GITHUB_TOKEN
|
||||||
|
# repos:
|
||||||
|
# - sourcebot/sourcebot
|
||||||
|
# - sourcebot/sourcebot-plugins
|
||||||
|
settings: {}
|
||||||
|
# reindexIntervalMs: 86400000
|
||||||
|
# enablePublicAccess: true
|
||||||
|
|
||||||
|
# -- Configure the ServiceAccount.
|
||||||
|
serviceAccount:
|
||||||
|
# -- Create a new ServiceAccount.
|
||||||
|
create: true
|
||||||
|
# -- Use an existing ServiceAccount (if set).
|
||||||
|
name: ""
|
||||||
|
# -- Add annotations to the ServiceAccount.
|
||||||
|
annotations: {}
|
||||||
|
# -- Enable or disable automatic ServiceAccount mounting.
|
||||||
|
automount: false
|
||||||
|
|
||||||
|
# -- Set the pod-level security context.
|
||||||
|
podSecurityContext: {}
|
||||||
|
# runAsUser: 1000
|
||||||
|
# runAsGroup: 1000
|
||||||
|
# runAsNonRoot: true
|
||||||
|
# fsGroup: 1000
|
||||||
|
|
||||||
|
# -- Set the container-level security context.
|
||||||
|
containerSecurityContext: {}
|
||||||
|
# allowPrivilegeEscalation: false
|
||||||
|
# privileged: false
|
||||||
|
# readOnlyRootFilesystem: true
|
||||||
|
# runAsUser: 1000
|
||||||
|
# runAsGroup: 1000
|
||||||
|
# capabilities:
|
||||||
|
# drop:
|
||||||
|
# - ALL
|
||||||
|
# seccompProfile:
|
||||||
|
# type: RuntimeDefault
|
||||||
|
|
||||||
|
# -- Configure the Sourcebot Kubernetes service.
|
||||||
|
service:
|
||||||
|
# -- Type of the Kubernetes service (e.g., ClusterIP, NodePort, LoadBalancer).
|
||||||
|
type: ClusterIP
|
||||||
|
# -- Internal container port.
|
||||||
|
containerPort: 3000
|
||||||
|
# -- External service port.
|
||||||
|
port: 3000
|
||||||
|
# -- Service annotations.
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
|
# -- Configure ingress for Sourcebot.
|
||||||
|
ingress:
|
||||||
|
# -- Enable or disable ingress.
|
||||||
|
enabled: false
|
||||||
|
# -- Ingress class name.
|
||||||
|
className: ""
|
||||||
|
# -- Ingress annotations.
|
||||||
|
annotations: {}
|
||||||
|
# kubernetes.io/ingress.class: nginx
|
||||||
|
# kubernetes.io/tls-acme: "true"
|
||||||
|
|
||||||
|
# -- List of hostnames and paths for ingress rules. The first host will be used as the default host.
|
||||||
|
hosts: []
|
||||||
|
# - host: chart-example.local
|
||||||
|
# paths:
|
||||||
|
# - path: /
|
||||||
|
# pathType: ImplementationSpecific
|
||||||
|
|
||||||
|
# -- TLS settings for ingress.
|
||||||
|
tls: []
|
||||||
|
# - hosts:
|
||||||
|
# - chart-example.local
|
||||||
|
# secretName: chart-example-tls
|
||||||
|
|
||||||
|
# -- Configure init containers to run before the main container.
|
||||||
|
initContainers: []
|
||||||
|
# - name: sleeper
|
||||||
|
# image: busybox
|
||||||
|
# args:
|
||||||
|
# - sleep
|
||||||
|
# - "10"
|
||||||
|
|
||||||
|
# -- Configure resource requests and limits for the container.
|
||||||
|
resources: {}
|
||||||
|
## It is recommended to set resources explicitly in production environments.
|
||||||
|
# limits:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
# requests:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
|
||||||
|
# -- Liveness probe to check if the container is alive.
|
||||||
|
livenessProbe:
|
||||||
|
# -- Http GET request to check if the container is alive.
|
||||||
|
httpGet:
|
||||||
|
# -- Path to check.
|
||||||
|
path: /
|
||||||
|
# -- Port to check.
|
||||||
|
port: http
|
||||||
|
# -- Initial delay before the first probe.
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
# -- Frequency of the probe.
|
||||||
|
periodSeconds: 10
|
||||||
|
# -- Number of consecutive failures before marking the container as unhealthy.
|
||||||
|
failureThreshold: 5
|
||||||
|
|
||||||
|
# -- Readiness probe to check if the container is ready to serve traffic.
|
||||||
|
readinessProbe:
|
||||||
|
# -- Http GET request to check if the container is ready.
|
||||||
|
httpGet:
|
||||||
|
# -- Path to check.
|
||||||
|
path: /
|
||||||
|
# -- Port to check.
|
||||||
|
port: http
|
||||||
|
# -- Initial delay before the first probe.
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
# -- Frequency of the probe.
|
||||||
|
periodSeconds: 10
|
||||||
|
# -- Number of consecutive failures before marking the container as not ready.
|
||||||
|
failureThreshold: 5
|
||||||
|
|
||||||
|
# -- Startup probe to check if the container has started successfully.
|
||||||
|
startupProbe:
|
||||||
|
# -- Http GET request to check if the container has started.
|
||||||
|
httpGet:
|
||||||
|
# -- Path to check.
|
||||||
|
path: /
|
||||||
|
# -- Port to check.
|
||||||
|
port: http
|
||||||
|
# -- Number of seconds to wait before starting the probe.
|
||||||
|
failureThreshold: 30
|
||||||
|
# -- Initial delay before the first probe.
|
||||||
|
periodSeconds: 30
|
||||||
|
|
||||||
|
# -- Define additional volumes.
|
||||||
|
# See: https://kubernetes.io/docs/concepts/storage/volumes/
|
||||||
|
volumes: []
|
||||||
|
# - name: foo
|
||||||
|
# secret:
|
||||||
|
# secretName: mysecret
|
||||||
|
# optional: false
|
||||||
|
|
||||||
|
# -- Define volume mounts for the container.
|
||||||
|
# See: https://kubernetes.io/docs/concepts/storage/volumes/
|
||||||
|
volumeMounts: []
|
||||||
|
# - name: foo
|
||||||
|
# mountPath: "/etc/foo"
|
||||||
|
# readOnly: true
|
||||||
|
|
||||||
|
# -- Configure Pod Disruption Budget.
|
||||||
|
podDisruptionBudget:
|
||||||
|
# -- Enable Pod Disruption Budget.
|
||||||
|
enabled: true
|
||||||
|
# -- Minimum number of pods that must be available.
|
||||||
|
minAvailable: 1
|
||||||
|
# -- Maximum number of pods that can be unavailable.
|
||||||
|
maxUnavailable: 1
|
||||||
|
|
||||||
|
# -- Add annotations to the pod metadata.
|
||||||
|
podAnnotations: {}
|
||||||
|
# prometheus.io/scrape: "true"
|
||||||
|
# prometheus.io/path: "/metrics"
|
||||||
|
# prometheus.io/port: "9102"
|
||||||
|
|
||||||
|
# -- Add extra labels to all resources.
|
||||||
|
additionalLabels: {}
|
||||||
|
# team: sourcebot
|
||||||
|
|
||||||
|
# -- Set node selector constraints.
|
||||||
|
# See: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
# -- Set tolerations for pod scheduling.
|
||||||
|
# See: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
|
||||||
|
tolerations: []
|
||||||
|
# - effect: NoSchedule
|
||||||
|
# key: "key"
|
||||||
|
# operator: Equal
|
||||||
|
# value: "value"
|
||||||
|
|
||||||
|
# -- Set affinity rules for pod scheduling.
|
||||||
|
# Defaults to soft anti-affinity if not set.
|
||||||
|
# See: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
|
||||||
|
affinity: {}
|
||||||
|
|
||||||
|
# -- Set the priority class name for pods.
|
||||||
|
# See: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/
|
||||||
|
priorityClassName: ""
|
||||||
|
|
||||||
|
# -- Configure the Bitnami PostgreSQL sub-chart.
|
||||||
|
# See: https://artifacthub.io/packages/helm/bitnami/postgresql
|
||||||
|
postgresql:
|
||||||
|
enabled: false
|
||||||
Loading…
Reference in a new issue