Add Helm chart and chart-release workflow

charts/terdut-server/ — Helm chart for Kubernetes deployment:
  - Deployment (replicas=1, /healthz probes, TERDUT_DB_PATH=/data/terdut.db)
  - Service (ClusterIP :8080)
  - PVC (1Gi, synology-iscsi) mounted at /data
  - HTTPRoute via envoy-main gateway

.github/workflows/chart-release.yml — packages and publishes the chart to
gh-pages branch on any push to main that touches charts/; repo URL will be
https://yeniklas.github.io/terdut-server once the repo is made public
This commit is contained in:
Niklas Ye
2026-05-21 15:26:11 +02:00
parent 17f09558cb
commit 591290e4ee
9 changed files with 198 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
.DS_Store
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
*.swp
*.bak
*.tmp
*.orig
*~
.project
.idea/
*.tmproj
.vscode/
+6
View File
@@ -0,0 +1,6 @@
apiVersion: v2
name: terdut-server
description: A Helm chart for Terminal Duty — on-call alert management server
type: application
version: 0.1.0
appVersion: "latest"
@@ -0,0 +1,34 @@
{{- define "terdut-server.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- define "terdut-server.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 }}
{{- define "terdut-server.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- define "terdut-server.labels" -}}
helm.sh/chart: {{ include "terdut-server.chart" . }}
{{ include "terdut-server.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{- define "terdut-server.selectorLabels" -}}
app.kubernetes.io/name: {{ include "terdut-server.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
@@ -0,0 +1,48 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "terdut-server.fullname" . }}
labels:
{{- include "terdut-server.labels" . | nindent 4 }}
spec:
replicas: 1
selector:
matchLabels:
{{- include "terdut-server.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "terdut-server.selectorLabels" . | nindent 8 }}
spec:
enableServiceLinks: false
containers:
- name: terdut-server
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.port }}
protocol: TCP
env:
- name: TERDUT_ADDR
value: ":{{ .Values.service.port }}"
- name: TERDUT_DB_PATH
value: "/data/terdut.db"
volumeMounts:
- name: data
mountPath: /data
livenessProbe:
httpGet:
path: /healthz
port: http
initialDelaySeconds: 5
readinessProbe:
httpGet:
path: /healthz
port: http
initialDelaySeconds: 5
volumes:
- name: data
persistentVolumeClaim:
claimName: {{ .Release.Name }}-data
@@ -0,0 +1,15 @@
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: {{ .Release.Name }}
spec:
hostnames:
- {{ .Values.networking.hostname | quote }}
parentRefs:
- name: envoy-main
namespace: envoy-gateway-system
rules:
- backendRefs:
- name: {{ include "terdut-server.fullname" . }}
port: {{ .Values.networking.servicePort }}
+13
View File
@@ -0,0 +1,13 @@
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Release.Name }}-data
namespace: {{ .Release.Namespace }}
spec:
storageClassName: {{ .Values.storage.storageClass | quote }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.storage.size }}
@@ -0,0 +1,16 @@
---
apiVersion: v1
kind: Service
metadata:
name: {{ include "terdut-server.fullname" . }}
labels:
{{- include "terdut-server.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "terdut-server.selectorLabels" . | nindent 4 }}
+16
View File
@@ -0,0 +1,16 @@
networking:
hostname: "terdut.example.com"
servicePort: 8080
image:
repository: ghcr.io/yeniklas/terdut-server
tag: "latest"
pullPolicy: IfNotPresent
storage:
size: 1Gi
storageClass: synology-iscsi
service:
type: ClusterIP
port: 8080