From 218525e9b7c330d0f01decf5f7ab2e051125849a Mon Sep 17 00:00:00 2001 From: sfasching Date: Sun, 14 Jun 2026 21:41:16 -0500 Subject: [PATCH] feat: add opt-in gitops mode for deterministic rendering (plane-enterprise + plane-ce) Adds a gitops.enabled flag (default false) to both charts. When false they render byte-for-byte as today. When true, the per-render timestamp pod annotation is omitted and migration Job names are keyed to planeVersion (instead of a wall-clock timestamp in plane-enterprise / .Release.Revision in plane-ce), so Argo CD/Flux get a deterministic render: no perpetual drift and no immutable-Job patch errors. Relates to #158, #206, #207. Co-Authored-By: Claude Opus 4.8 --- charts/plane-ce/templates/workloads/admin.deployment.yaml | 2 ++ charts/plane-ce/templates/workloads/api.deployment.yaml | 2 ++ .../templates/workloads/beat-worker.deployment.yaml | 2 ++ charts/plane-ce/templates/workloads/live.deployment.yaml | 2 ++ charts/plane-ce/templates/workloads/migrator.job.yaml | 4 +++- charts/plane-ce/templates/workloads/minio.stateful.yaml | 2 +- charts/plane-ce/templates/workloads/space.deployment.yaml | 2 ++ charts/plane-ce/templates/workloads/web.deployment.yaml | 2 ++ .../plane-ce/templates/workloads/worker.deployment.yaml | 2 ++ charts/plane-ce/values.yaml | 8 ++++++++ .../templates/workloads/admin.deployment.yaml | 2 ++ .../templates/workloads/api.deployment.yaml | 2 ++ .../workloads/automation-consumer.deployment.yaml | 2 ++ .../templates/workloads/beat-worker.deployment.yaml | 2 ++ .../templates/workloads/email.deployment.yaml | 2 ++ .../templates/workloads/iframely.deployment.yaml | 2 ++ .../templates/workloads/live.deployment.yaml | 2 ++ .../templates/workloads/migrator.job.yaml | 4 +++- .../templates/workloads/minio.stateful.yaml | 2 +- .../templates/workloads/monitor.stateful.yaml | 2 ++ .../templates/workloads/outbox-poller.deployment.yaml | 2 ++ .../templates/workloads/pi-api.deployment.yaml | 2 ++ .../templates/workloads/pi-beat.deployment.yaml | 2 ++ .../templates/workloads/pi-migrator.job.yaml | 4 +++- .../templates/workloads/pi-worker.deployment.yaml | 2 ++ .../templates/workloads/runner.deployment.yaml | 2 ++ .../templates/workloads/silo.deployment.yaml | 2 ++ .../templates/workloads/space.deployment.yaml | 2 ++ .../templates/workloads/web.deployment.yaml | 2 ++ .../templates/workloads/worker.deployment.yaml | 2 ++ charts/plane-enterprise/values.yaml | 8 ++++++++ 31 files changed, 75 insertions(+), 5 deletions(-) diff --git a/charts/plane-ce/templates/workloads/admin.deployment.yaml b/charts/plane-ce/templates/workloads/admin.deployment.yaml index 04b94520..a624c99f 100644 --- a/charts/plane-ce/templates/workloads/admin.deployment.yaml +++ b/charts/plane-ce/templates/workloads/admin.deployment.yaml @@ -37,7 +37,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-admin annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: containers: - name: {{ .Release.Name }}-admin diff --git a/charts/plane-ce/templates/workloads/api.deployment.yaml b/charts/plane-ce/templates/workloads/api.deployment.yaml index 7fc444f2..3369ee1b 100644 --- a/charts/plane-ce/templates/workloads/api.deployment.yaml +++ b/charts/plane-ce/templates/workloads/api.deployment.yaml @@ -37,7 +37,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-api annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: containers: - name: {{ .Release.Name }}-api diff --git a/charts/plane-ce/templates/workloads/beat-worker.deployment.yaml b/charts/plane-ce/templates/workloads/beat-worker.deployment.yaml index 09838b38..b77aedc2 100644 --- a/charts/plane-ce/templates/workloads/beat-worker.deployment.yaml +++ b/charts/plane-ce/templates/workloads/beat-worker.deployment.yaml @@ -15,7 +15,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-beat-worker annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: containers: - name: {{ .Release.Name }}-beat-worker diff --git a/charts/plane-ce/templates/workloads/live.deployment.yaml b/charts/plane-ce/templates/workloads/live.deployment.yaml index 60b75380..85f4750f 100644 --- a/charts/plane-ce/templates/workloads/live.deployment.yaml +++ b/charts/plane-ce/templates/workloads/live.deployment.yaml @@ -37,7 +37,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-live annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: containers: - name: {{ .Release.Name }}-live diff --git a/charts/plane-ce/templates/workloads/migrator.job.yaml b/charts/plane-ce/templates/workloads/migrator.job.yaml index f42e4663..3d465b19 100644 --- a/charts/plane-ce/templates/workloads/migrator.job.yaml +++ b/charts/plane-ce/templates/workloads/migrator.job.yaml @@ -3,7 +3,7 @@ apiVersion: batch/v1 kind: Job metadata: namespace: {{ .Release.Namespace }} - name: {{ .Release.Name }}-api-migrate-{{ .Release.Revision }} + name: {{ .Release.Name }}-api-migrate-{{ if $.Values.gitops.enabled }}{{ .Values.planeVersion | replace "." "-" | replace "+" "-" | lower }}{{ else }}{{ .Release.Revision }}{{ end }} {{- template "plane.labelsAndAnnotations" .Values.api }} spec: backoffLimit: 3 @@ -12,7 +12,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-api-migrate annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: containers: - name: {{ .Release.Name }}-api-migrate diff --git a/charts/plane-ce/templates/workloads/minio.stateful.yaml b/charts/plane-ce/templates/workloads/minio.stateful.yaml index 9ebc6d3f..2dbe7d99 100644 --- a/charts/plane-ce/templates/workloads/minio.stateful.yaml +++ b/charts/plane-ce/templates/workloads/minio.stateful.yaml @@ -85,7 +85,7 @@ apiVersion: batch/v1 kind: Job metadata: namespace: {{ .Release.Namespace }} - name: {{ .Release.Name }}-minio-bucket-{{ .Release.Revision }} + name: {{ .Release.Name }}-minio-bucket-{{ if $.Values.gitops.enabled }}{{ .Values.planeVersion | replace "." "-" | replace "+" "-" | lower }}{{ else }}{{ .Release.Revision }}{{ end }} {{- template "plane.labelsAndAnnotations" .Values.minio }} spec: backoffLimit: 6 diff --git a/charts/plane-ce/templates/workloads/space.deployment.yaml b/charts/plane-ce/templates/workloads/space.deployment.yaml index 04ee4037..e1aaaac6 100644 --- a/charts/plane-ce/templates/workloads/space.deployment.yaml +++ b/charts/plane-ce/templates/workloads/space.deployment.yaml @@ -37,7 +37,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-space annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: containers: - name: {{ .Release.Name }}-space diff --git a/charts/plane-ce/templates/workloads/web.deployment.yaml b/charts/plane-ce/templates/workloads/web.deployment.yaml index 763fcc08..b9de11e9 100644 --- a/charts/plane-ce/templates/workloads/web.deployment.yaml +++ b/charts/plane-ce/templates/workloads/web.deployment.yaml @@ -37,7 +37,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-web annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: containers: - name: {{ .Release.Name }}-web diff --git a/charts/plane-ce/templates/workloads/worker.deployment.yaml b/charts/plane-ce/templates/workloads/worker.deployment.yaml index 8746eb3b..7dd72964 100644 --- a/charts/plane-ce/templates/workloads/worker.deployment.yaml +++ b/charts/plane-ce/templates/workloads/worker.deployment.yaml @@ -15,7 +15,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-worker annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: containers: - name: {{ .Release.Name }}-worker diff --git a/charts/plane-ce/values.yaml b/charts/plane-ce/values.yaml index e145f15e..5aaf950d 100644 --- a/charts/plane-ce/values.yaml +++ b/charts/plane-ce/values.yaml @@ -1,5 +1,13 @@ planeVersion: v1.2.0 +# GitOps mode: render deterministically for declarative tools (Argo CD / Flux). When true, +# the per-render `timestamp` rollout annotation is omitted and migration Job names are keyed +# to `planeVersion` instead of `.Release.Revision`, so repeated renders of an unchanged +# release are byte-identical (no perpetual drift, no immutable-Job patch errors). Default +# false preserves the existing imperative `helm upgrade` behavior exactly. +gitops: + enabled: false + dockerRegistry: enabled: false host: "index.docker.io/v1/" diff --git a/charts/plane-enterprise/templates/workloads/admin.deployment.yaml b/charts/plane-enterprise/templates/workloads/admin.deployment.yaml index 4aaef095..ad4af5da 100644 --- a/charts/plane-enterprise/templates/workloads/admin.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/admin.deployment.yaml @@ -38,7 +38,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-admin annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.admin }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/api.deployment.yaml b/charts/plane-enterprise/templates/workloads/api.deployment.yaml index d2c6ea00..ec8e204b 100644 --- a/charts/plane-enterprise/templates/workloads/api.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/api.deployment.yaml @@ -38,7 +38,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-api annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.api }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/automation-consumer.deployment.yaml b/charts/plane-enterprise/templates/workloads/automation-consumer.deployment.yaml index 17c98969..b7b3e44e 100644 --- a/charts/plane-enterprise/templates/workloads/automation-consumer.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/automation-consumer.deployment.yaml @@ -16,7 +16,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-automation-consumer annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.automation_consumer }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/beat-worker.deployment.yaml b/charts/plane-enterprise/templates/workloads/beat-worker.deployment.yaml index b79a1da0..ff244fb7 100644 --- a/charts/plane-enterprise/templates/workloads/beat-worker.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/beat-worker.deployment.yaml @@ -15,7 +15,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-beat-worker annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.beatworker }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/email.deployment.yaml b/charts/plane-enterprise/templates/workloads/email.deployment.yaml index 26c4bc7b..1400689e 100644 --- a/charts/plane-enterprise/templates/workloads/email.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/email.deployment.yaml @@ -44,7 +44,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-email-app annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.email_service }} containers: diff --git a/charts/plane-enterprise/templates/workloads/iframely.deployment.yaml b/charts/plane-enterprise/templates/workloads/iframely.deployment.yaml index 9efa6cdb..3387c939 100644 --- a/charts/plane-enterprise/templates/workloads/iframely.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/iframely.deployment.yaml @@ -35,7 +35,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-iframely annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.iframely }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/live.deployment.yaml b/charts/plane-enterprise/templates/workloads/live.deployment.yaml index a95657f6..a561a532 100644 --- a/charts/plane-enterprise/templates/workloads/live.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/live.deployment.yaml @@ -38,7 +38,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-live annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.live }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/migrator.job.yaml b/charts/plane-enterprise/templates/workloads/migrator.job.yaml index c0ae84de..8e080add 100644 --- a/charts/plane-enterprise/templates/workloads/migrator.job.yaml +++ b/charts/plane-enterprise/templates/workloads/migrator.job.yaml @@ -3,7 +3,7 @@ apiVersion: batch/v1 kind: Job metadata: namespace: {{ .Release.Namespace }} - name: {{ .Release.Name }}-api-migrate-{{ now | date "20060102-150405" }} + name: {{ .Release.Name }}-api-migrate-{{ if $.Values.gitops.enabled }}{{ .Values.planeVersion | replace "." "-" | replace "+" "-" | lower }}{{ else }}{{ now | date "20060102-150405" }}{{ end }} {{- include "plane.labelsAndAnnotations" .Values.services.api }} spec: backoffLimit: 3 @@ -12,7 +12,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-api-migrate annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.api }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/minio.stateful.yaml b/charts/plane-enterprise/templates/workloads/minio.stateful.yaml index aea2e041..b47044e8 100644 --- a/charts/plane-enterprise/templates/workloads/minio.stateful.yaml +++ b/charts/plane-enterprise/templates/workloads/minio.stateful.yaml @@ -85,7 +85,7 @@ apiVersion: batch/v1 kind: Job metadata: namespace: {{ .Release.Namespace }} - name: {{ .Release.Name }}-minio-bucket-{{ now | date "20060102-150405" }} + name: {{ .Release.Name }}-minio-bucket-{{ if $.Values.gitops.enabled }}{{ .Values.planeVersion | replace "." "-" | replace "+" "-" | lower }}{{ else }}{{ now | date "20060102-150405" }}{{ end }} {{- include "plane.labelsAndAnnotations" .Values.services.minio }} spec: backoffLimit: 6 diff --git a/charts/plane-enterprise/templates/workloads/monitor.stateful.yaml b/charts/plane-enterprise/templates/workloads/monitor.stateful.yaml index 86487757..9c75376b 100644 --- a/charts/plane-enterprise/templates/workloads/monitor.stateful.yaml +++ b/charts/plane-enterprise/templates/workloads/monitor.stateful.yaml @@ -35,7 +35,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-monitor annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.monitor }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/outbox-poller.deployment.yaml b/charts/plane-enterprise/templates/workloads/outbox-poller.deployment.yaml index e7c3dc2f..84e00e81 100644 --- a/charts/plane-enterprise/templates/workloads/outbox-poller.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/outbox-poller.deployment.yaml @@ -16,7 +16,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-outbox-poller annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.outbox_poller }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/pi-api.deployment.yaml b/charts/plane-enterprise/templates/workloads/pi-api.deployment.yaml index be50d203..db204795 100644 --- a/charts/plane-enterprise/templates/workloads/pi-api.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/pi-api.deployment.yaml @@ -39,7 +39,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-pi-api annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.pi }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/pi-beat.deployment.yaml b/charts/plane-enterprise/templates/workloads/pi-beat.deployment.yaml index 7f64ae1e..97495a5e 100644 --- a/charts/plane-enterprise/templates/workloads/pi-beat.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/pi-beat.deployment.yaml @@ -16,7 +16,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-pi-beat annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.pi_beat_worker }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/pi-migrator.job.yaml b/charts/plane-enterprise/templates/workloads/pi-migrator.job.yaml index b4cfff7a..563f9f37 100644 --- a/charts/plane-enterprise/templates/workloads/pi-migrator.job.yaml +++ b/charts/plane-enterprise/templates/workloads/pi-migrator.job.yaml @@ -4,7 +4,7 @@ apiVersion: batch/v1 kind: Job metadata: namespace: {{ .Release.Namespace }} - name: {{ .Release.Name }}-pi-api-migrate-{{ now | date "20060102-150405" }} + name: {{ .Release.Name }}-pi-api-migrate-{{ if $.Values.gitops.enabled }}{{ .Values.planeVersion | replace "." "-" | replace "+" "-" | lower }}{{ else }}{{ now | date "20060102-150405" }}{{ end }} spec: backoffLimit: 3 template: @@ -12,7 +12,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-pi-api-migrate annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.pi }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/pi-worker.deployment.yaml b/charts/plane-enterprise/templates/workloads/pi-worker.deployment.yaml index 599c747f..fdad9faf 100644 --- a/charts/plane-enterprise/templates/workloads/pi-worker.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/pi-worker.deployment.yaml @@ -16,7 +16,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-pi-worker annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.pi_worker }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/runner.deployment.yaml b/charts/plane-enterprise/templates/workloads/runner.deployment.yaml index 1c2e7940..e76f86bb 100644 --- a/charts/plane-enterprise/templates/workloads/runner.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/runner.deployment.yaml @@ -39,7 +39,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-runner annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.runner }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/silo.deployment.yaml b/charts/plane-enterprise/templates/workloads/silo.deployment.yaml index 93467553..31e6e063 100644 --- a/charts/plane-enterprise/templates/workloads/silo.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/silo.deployment.yaml @@ -39,7 +39,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-silo annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.silo }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/space.deployment.yaml b/charts/plane-enterprise/templates/workloads/space.deployment.yaml index 861e2b8e..183d1746 100644 --- a/charts/plane-enterprise/templates/workloads/space.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/space.deployment.yaml @@ -38,7 +38,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-space annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.space }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/web.deployment.yaml b/charts/plane-enterprise/templates/workloads/web.deployment.yaml index 2c40b97a..b63ef979 100644 --- a/charts/plane-enterprise/templates/workloads/web.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/web.deployment.yaml @@ -38,7 +38,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-web annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.web }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/templates/workloads/worker.deployment.yaml b/charts/plane-enterprise/templates/workloads/worker.deployment.yaml index 8a7531a6..84667b46 100644 --- a/charts/plane-enterprise/templates/workloads/worker.deployment.yaml +++ b/charts/plane-enterprise/templates/workloads/worker.deployment.yaml @@ -15,7 +15,9 @@ spec: labels: app.name: {{ .Release.Namespace }}-{{ .Release.Name }}-worker annotations: + {{- if not $.Values.gitops.enabled }} timestamp: {{ now | quote }} + {{- end }} spec: {{- include "plane.podScheduling" .Values.services.worker }} {{- include "plane.podSecurityContext" . }} diff --git a/charts/plane-enterprise/values.yaml b/charts/plane-enterprise/values.yaml index 46f00247..b96a1dfc 100644 --- a/charts/plane-enterprise/values.yaml +++ b/charts/plane-enterprise/values.yaml @@ -1,5 +1,13 @@ planeVersion: v2.6.2 +# GitOps mode: render deterministically for declarative tools (Argo CD / Flux). When true, +# the per-render `timestamp` rollout annotation is omitted and migration Job names are keyed +# to `planeVersion` instead of a wall-clock timestamp, so repeated renders of an unchanged +# release are byte-identical (no perpetual drift, no immutable-Job patch errors). Default +# false preserves the existing imperative `helm upgrade` behavior exactly. +gitops: + enabled: false + dockerRegistry: enabled: false registry: 'index.docker.io/v1/'