Add Helm chart scaffold with Chart.yaml, values.yaml, and helpers
This commit is contained in:
@@ -0,0 +1,10 @@
|
|||||||
|
.DS_Store
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: groombook
|
||||||
|
description: Open source pet grooming business management & CRM
|
||||||
|
type: application
|
||||||
|
version: 0.1.0
|
||||||
|
appVersion: "2026.03.19-ea54506"
|
||||||
|
home: https://groombook.github.io
|
||||||
|
sources:
|
||||||
|
- https://github.com/groombook/groombook
|
||||||
|
maintainers:
|
||||||
|
- name: GroomBook
|
||||||
|
url: https://github.com/groombook
|
||||||
|
keywords:
|
||||||
|
- groombook
|
||||||
|
- pet-grooming
|
||||||
|
- scheduling
|
||||||
|
- crm
|
||||||
|
dependencies:
|
||||||
|
- name: postgresql
|
||||||
|
version: "16.x.x"
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
condition: postgresql.integrated.enabled
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "groombook.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
*/}}
|
||||||
|
{{- define "groombook.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 "groombook.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "groombook.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "groombook.chart" . }}
|
||||||
|
{{ include "groombook.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "groombook.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "groombook.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Component labels (extends common labels with component name)
|
||||||
|
*/}}
|
||||||
|
{{- define "groombook.componentLabels" -}}
|
||||||
|
{{ include "groombook.labels" . }}
|
||||||
|
app.kubernetes.io/component: {{ .component }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Component selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "groombook.componentSelectorLabels" -}}
|
||||||
|
{{ include "groombook.selectorLabels" . }}
|
||||||
|
app.kubernetes.io/component: {{ .component }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Service account name
|
||||||
|
*/}}
|
||||||
|
{{- define "groombook.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
{{- default (include "groombook.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else }}
|
||||||
|
{{- default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
API image reference
|
||||||
|
*/}}
|
||||||
|
{{- define "groombook.apiImage" -}}
|
||||||
|
{{- printf "%s:%s" .Values.api.image.repository (default .Chart.AppVersion .Values.api.image.tag) }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Web image reference
|
||||||
|
*/}}
|
||||||
|
{{- define "groombook.webImage" -}}
|
||||||
|
{{- printf "%s:%s" .Values.web.image.repository (default .Chart.AppVersion .Values.web.image.tag) }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Migrate image reference
|
||||||
|
*/}}
|
||||||
|
{{- define "groombook.migrateImage" -}}
|
||||||
|
{{- printf "%s:%s" .Values.migrate.image.repository (default .Chart.AppVersion .Values.migrate.image.tag) }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Database URL — differs by postgresql.mode
|
||||||
|
Integrated: construct from Bitnami subchart values
|
||||||
|
Operator: read from credentialsSecret
|
||||||
|
*/}}
|
||||||
|
{{- define "groombook.databaseSecretName" -}}
|
||||||
|
{{- if eq .Values.postgresql.mode "operator" }}
|
||||||
|
{{- required "postgresql.operator.credentialsSecret is required in operator mode" .Values.postgresql.operator.credentialsSecret }}
|
||||||
|
{{- else }}
|
||||||
|
{{- include "groombook.fullname" . }}-db-credentials
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Database URL secret key
|
||||||
|
*/}}
|
||||||
|
{{- define "groombook.databaseSecretKey" -}}
|
||||||
|
{{- if eq .Values.postgresql.mode "operator" -}}
|
||||||
|
uri
|
||||||
|
{{- else -}}
|
||||||
|
database-url
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
# -- API deployment
|
||||||
|
api:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/groombook/api
|
||||||
|
tag: "" # defaults to chart appVersion
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
replicas: 1
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 512Mi
|
||||||
|
env:
|
||||||
|
nodeEnv: production
|
||||||
|
authDisabled: false
|
||||||
|
corsOrigin: ""
|
||||||
|
oidcIssuer: ""
|
||||||
|
oidcAudience: groombook
|
||||||
|
port: "3000"
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 3000
|
||||||
|
|
||||||
|
# -- Web deployment (nginx)
|
||||||
|
web:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/groombook/web
|
||||||
|
tag: "" # defaults to chart appVersion
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
replicas: 1
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 50m
|
||||||
|
memory: 64Mi
|
||||||
|
limits:
|
||||||
|
cpu: 200m
|
||||||
|
memory: 128Mi
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 80
|
||||||
|
|
||||||
|
# -- Database migration job (runs as pre-install/pre-upgrade hook)
|
||||||
|
migrate:
|
||||||
|
enabled: true
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/groombook/api
|
||||||
|
tag: "" # same image as api
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
backoffLimit: 3
|
||||||
|
|
||||||
|
# -- PostgreSQL configuration
|
||||||
|
postgresql:
|
||||||
|
# Choose deployment mode: 'integrated' uses Bitnami subchart, 'operator' creates a CNPG Cluster CR
|
||||||
|
mode: integrated
|
||||||
|
integrated:
|
||||||
|
enabled: true # set to false if mode is 'operator'
|
||||||
|
auth:
|
||||||
|
database: groombook
|
||||||
|
username: groombook
|
||||||
|
password: "" # auto-generated if empty
|
||||||
|
existingSecret: ""
|
||||||
|
primary:
|
||||||
|
persistence:
|
||||||
|
size: 8Gi
|
||||||
|
operator:
|
||||||
|
instances: 3
|
||||||
|
storage:
|
||||||
|
size: 10Gi
|
||||||
|
storageClass: ""
|
||||||
|
bootstrap:
|
||||||
|
database: groombook
|
||||||
|
owner: groombook
|
||||||
|
credentialsSecret: "" # must pre-exist with key 'uri'
|
||||||
|
monitoring:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# -- DragonflyDB (cache/pub-sub) — optional, disabled by default
|
||||||
|
dragonfly:
|
||||||
|
enabled: false
|
||||||
|
# Choose deployment mode: 'integrated' deploys a StatefulSet, 'operator' creates a Dragonfly CR
|
||||||
|
mode: integrated
|
||||||
|
integrated:
|
||||||
|
image:
|
||||||
|
repository: docker.dragonflydb.io/dragonflydb/dragonfly
|
||||||
|
tag: latest
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
replicas: 1
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 512Mi
|
||||||
|
storage:
|
||||||
|
size: 1Gi
|
||||||
|
storageClass: ""
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 6379
|
||||||
|
operator:
|
||||||
|
replicas: 1
|
||||||
|
resources: {}
|
||||||
|
|
||||||
|
# -- Ingress configuration
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
className: ""
|
||||||
|
annotations: {}
|
||||||
|
hosts:
|
||||||
|
- host: groombook.example.com
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
service: web
|
||||||
|
- path: /api
|
||||||
|
pathType: Prefix
|
||||||
|
service: api
|
||||||
|
tls: []
|
||||||
|
|
||||||
|
# -- Service account
|
||||||
|
serviceAccount:
|
||||||
|
create: true
|
||||||
|
name: ""
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
|
# -- Global image pull secrets
|
||||||
|
imagePullSecrets: []
|
||||||
|
|
||||||
|
# -- Override chart name
|
||||||
|
nameOverride: ""
|
||||||
|
fullnameOverride: ""
|
||||||
Reference in New Issue
Block a user