Add Helm chart scaffold with Chart.yaml, values.yaml, and helpers

This commit is contained in:
Flea Flicker
2026-03-27 17:24:01 +00:00
parent 619ff204d1
commit 35d2dd8c03
4 changed files with 287 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
.DS_Store
*.swp
*.bak
*.tmp
*.orig
*~
.project
.idea/
*.tmproj
.vscode/
+22
View File
@@ -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
+121
View File
@@ -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 }}
+134
View File
@@ -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: ""