audit-core/deploy/migrate-job.yaml
tegwick fa6665f819
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
deploy(AUDIT-WP-0008): pin sender-expiry image
Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a025c2-407a-7a32-b40a-f37a52f03f62
2026-08-22 12:01:08 +02:00

70 lines
2.1 KiB
YAML

# One-shot schema apply (AUDIT-WP-0005-T02).
#
# Uses the migration lease, not the runtime lease. The runtime Deployment
# sets AUDIT_CORE_AUTO_MIGRATE=0 so a leaked app credential cannot change
# the schema. Re-apply after deleting the previous Job when a new migration
# ships (Jobs are immutable).
#
# Image digest must match deploy/audit-core.yaml.
---
apiVersion: batch/v1
kind: Job
metadata:
name: audit-core-migrate
namespace: audit-core
labels:
app.kubernetes.io/name: audit-core
app.kubernetes.io/component: migrate
spec:
backoffLimit: 6
ttlSecondsAfterFinished: 86400
template:
metadata:
labels:
app.kubernetes.io/name: audit-core
app.kubernetes.io/component: migrate
spec:
restartPolicy: OnFailure
securityContext:
runAsNonRoot: true
runAsUser: 10001
fsGroup: 10001
seccompProfile:
type: RuntimeDefault
containers:
- name: migrate
image: forgejo.coulomb.social/coulomb/audit-core@sha256:c2fe39a0185b99be3fc0cb14d2de69772b8e66e20490097c9d11d90cc39719a6
imagePullPolicy: IfNotPresent
command: ["python", "-m", "audit_core", "migrate"]
env:
- name: AUDIT_CORE_CREDENTIAL_DIR
value: /etc/audit-core/db
- name: AUDIT_CORE_DATABASE_SCHEMA
value: audit_core
- name: AUDIT_CORE_MIGRATE_ROLE
value: audit_core_migrate
resources:
requests:
cpu: 25m
memory: 64Mi
limits:
cpu: 250m
memory: 128Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
readOnlyRootFilesystem: true
volumeMounts:
- name: tmp
mountPath: /tmp
- name: database-credential
mountPath: /etc/audit-core/db
readOnly: true
volumes:
- name: tmp
emptyDir: {}
- name: database-credential
secret:
secretName: audit-core-database-migrate
defaultMode: 0440