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