16e8c6c865
Release / release (push) Successful in 5m28s
- release.yml: bump Helm v3.16.2 → v4.1.4; replace --wait with --rollback-on-failure (Helm 4 rename, implies --wait) - Dockerfile: backend builder rust:1.95-slim-bookworm → rust:1.95-alpine3.23 (adds cmake/g++/perl/nasm/sqlite-dev for aws-lc-rs + sqlx); runtime debian:trixie-slim → alpine:3.23 (adds sqlite-libs, uses adduser -D) - cronjob-backup: gate on backup.enabled, pin image to alpine:3.23 - values.yaml: backup.enabled default true - values_override.yaml: backup.enabled: false (disabled until tested) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
45 lines
1.4 KiB
YAML
45 lines
1.4 KiB
YAML
{{- if .Values.backup.enabled }}
|
|
apiVersion: batch/v1
|
|
kind: CronJob
|
|
metadata:
|
|
name: {{ include "tutortool.fullname" . }}-backup
|
|
namespace: {{ .Release.Namespace }}
|
|
labels:
|
|
{{- include "tutortool.labels" . | nindent 4 }}
|
|
spec:
|
|
schedule: "0 3 * * *"
|
|
concurrencyPolicy: Forbid
|
|
successfulJobsHistoryLimit: 1
|
|
failedJobsHistoryLimit: 1
|
|
jobTemplate:
|
|
spec:
|
|
activeDeadlineSeconds: 900
|
|
template:
|
|
spec:
|
|
restartPolicy: OnFailure
|
|
affinity:
|
|
podAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
- labelSelector:
|
|
matchLabels:
|
|
{{- include "tutortool.selectorLabels" . | nindent 22 }}
|
|
topologyKey: kubernetes.io/hostname
|
|
containers:
|
|
- name: backup
|
|
image: alpine:3.23
|
|
command:
|
|
- /bin/sh
|
|
- -c
|
|
- |
|
|
apk add --no-cache sqlite
|
|
sqlite3 /data/attendance.db "VACUUM INTO '/data/backup-$(date +%F).sqlite'"
|
|
find /data -name "backup-*.sqlite" -mtime +7 -delete
|
|
volumeMounts:
|
|
- name: data
|
|
mountPath: /data
|
|
volumes:
|
|
- name: data
|
|
persistentVolumeClaim:
|
|
claimName: {{ include "tutortool.fullname" . }}-data
|
|
{{- end }}
|