From 5294b7bab2f96c55a2fa9ff98f48e430e0e5b6ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=CC=81s=CC=8C=20Ludvik?= Date: Mon, 7 Sep 2026 12:55:47 +0200 Subject: [PATCH 1/4] added Gotenberg service for gift voucher PDF rendering Runs gotenberg/gotenberg (headless Chromium) as an internal service so the application can render the gift voucher PDF from HTML via sensiolabs/gotenberg-bundle. Adds the Deployment + Service, a GOTENBERG_VERSION variable, and registers them in the migrate-application kustomizations alongside redis/rabbitmq. The app reaches it at http://gotenberg:3000 (GOTENBERG_DSN). --- deploy/parts/kubernetes-variables.sh | 6 +++ kubernetes/deployments/gotenberg.yaml | 44 +++++++++++++++++++ .../continuous-deploy/kustomization.yaml | 2 + .../kustomization.yaml | 2 + .../first-deploy/kustomization.yaml | 2 + kubernetes/services/gotenberg.yaml | 13 ++++++ 6 files changed, 69 insertions(+) create mode 100644 kubernetes/deployments/gotenberg.yaml create mode 100644 kubernetes/services/gotenberg.yaml diff --git a/deploy/parts/kubernetes-variables.sh b/deploy/parts/kubernetes-variables.sh index f3cfd07..cfc3bbc 100644 --- a/deploy/parts/kubernetes-variables.sh +++ b/deploy/parts/kubernetes-variables.sh @@ -13,6 +13,12 @@ fi VARS+=(REDIS_VERSION) +if [ -z ${GOTENBERG_VERSION} ]; then + GOTENBERG_VERSION='gotenberg/gotenberg:8' +fi + +VARS+=(GOTENBERG_VERSION) + if [ -z ${ADMIN_URL} ]; then ADMIN_URL='admin' fi diff --git a/kubernetes/deployments/gotenberg.yaml b/kubernetes/deployments/gotenberg.yaml new file mode 100644 index 0000000..8def0d2 --- /dev/null +++ b/kubernetes/deployments/gotenberg.yaml @@ -0,0 +1,44 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: gotenberg +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: "gotenberg" + project/environment: "{{PROJECT_ENVIRONMENT}}" + project/name: "{{NAME_OF_PROJECT}}" + labels: + app: gotenberg + spec: + containers: + - name: gotenberg + image: "{{GOTENBERG_VERSION}}" + ports: + - name: http + containerPort: 3000 + protocol: TCP + livenessProbe: + initialDelaySeconds: 10 + timeoutSeconds: 5 + httpGet: + path: /health + port: 3000 + readinessProbe: + initialDelaySeconds: 5 + timeoutSeconds: 5 + httpGet: + path: /health + port: 3000 + resources: + limits: + memory: "1Gi" + requests: + cpu: "50m" + memory: "512Mi" diff --git a/kubernetes/kustomize/migrate-application/continuous-deploy/kustomization.yaml b/kubernetes/kustomize/migrate-application/continuous-deploy/kustomization.yaml index a89a153..069fd73 100644 --- a/kubernetes/kustomize/migrate-application/continuous-deploy/kustomization.yaml +++ b/kubernetes/kustomize/migrate-application/continuous-deploy/kustomization.yaml @@ -6,6 +6,8 @@ resources: - ../../../configmap/redis-health.yaml - ../../../deployments/rabbitmq.yaml - ../../../services/rabbitmq.yaml + - ../../../deployments/gotenberg.yaml + - ../../../services/gotenberg.yaml - ./migrate-application.yaml namespace: "{{PROJECT_NAME}}" configMapGenerator: diff --git a/kubernetes/kustomize/migrate-application/first-deploy-with-demo-data/kustomization.yaml b/kubernetes/kustomize/migrate-application/first-deploy-with-demo-data/kustomization.yaml index a89a153..069fd73 100644 --- a/kubernetes/kustomize/migrate-application/first-deploy-with-demo-data/kustomization.yaml +++ b/kubernetes/kustomize/migrate-application/first-deploy-with-demo-data/kustomization.yaml @@ -6,6 +6,8 @@ resources: - ../../../configmap/redis-health.yaml - ../../../deployments/rabbitmq.yaml - ../../../services/rabbitmq.yaml + - ../../../deployments/gotenberg.yaml + - ../../../services/gotenberg.yaml - ./migrate-application.yaml namespace: "{{PROJECT_NAME}}" configMapGenerator: diff --git a/kubernetes/kustomize/migrate-application/first-deploy/kustomization.yaml b/kubernetes/kustomize/migrate-application/first-deploy/kustomization.yaml index a89a153..069fd73 100644 --- a/kubernetes/kustomize/migrate-application/first-deploy/kustomization.yaml +++ b/kubernetes/kustomize/migrate-application/first-deploy/kustomization.yaml @@ -6,6 +6,8 @@ resources: - ../../../configmap/redis-health.yaml - ../../../deployments/rabbitmq.yaml - ../../../services/rabbitmq.yaml + - ../../../deployments/gotenberg.yaml + - ../../../services/gotenberg.yaml - ./migrate-application.yaml namespace: "{{PROJECT_NAME}}" configMapGenerator: diff --git a/kubernetes/services/gotenberg.yaml b/kubernetes/services/gotenberg.yaml new file mode 100644 index 0000000..ef14e5a --- /dev/null +++ b/kubernetes/services/gotenberg.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: gotenberg + labels: + app: gotenberg +spec: + selector: + app: gotenberg + ports: + - name: http + port: 3000 + targetPort: 3000 From c972a264585c02bef2b17855e8cce68e371fe269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=CC=81s=CC=8C=20Ludvik?= Date: Wed, 9 Sep 2026 10:26:06 +0200 Subject: [PATCH 2/4] update expected manifests with gotenberg service --- .../expected/migrate-continuous-deploy.yaml | 61 +++++++++++++++++++ .../migrate-first-deploy-with-demo-data.yaml | 61 +++++++++++++++++++ .../expected/migrate-first-deploy.yaml | 61 +++++++++++++++++++ .../expected/migrate-continuous-deploy.yaml | 61 +++++++++++++++++++ .../migrate-first-deploy-with-demo-data.yaml | 61 +++++++++++++++++++ .../expected/migrate-first-deploy.yaml | 61 +++++++++++++++++++ .../expected/migrate-continuous-deploy.yaml | 61 +++++++++++++++++++ .../migrate-first-deploy-with-demo-data.yaml | 61 +++++++++++++++++++ .../expected/migrate-first-deploy.yaml | 61 +++++++++++++++++++ .../expected/migrate-continuous-deploy.yaml | 61 +++++++++++++++++++ .../migrate-first-deploy-with-demo-data.yaml | 61 +++++++++++++++++++ .../expected/migrate-first-deploy.yaml | 61 +++++++++++++++++++ .../expected/migrate-continuous-deploy.yaml | 61 +++++++++++++++++++ .../migrate-first-deploy-with-demo-data.yaml | 61 +++++++++++++++++++ .../expected/migrate-first-deploy.yaml | 61 +++++++++++++++++++ 15 files changed, 915 insertions(+) diff --git a/tests/scenarios/basic-production/expected/migrate-continuous-deploy.yaml b/tests/scenarios/basic-production/expected/migrate-continuous-deploy.yaml index 79076f9..47704ba 100644 --- a/tests/scenarios/basic-production/expected/migrate-continuous-deploy.yaml +++ b/tests/scenarios/basic-production/expected/migrate-continuous-deploy.yaml @@ -58,6 +58,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: myproject-production +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -217,6 +232,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: myproject-production +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: production + project/name: myproject + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: myproject-production diff --git a/tests/scenarios/basic-production/expected/migrate-first-deploy-with-demo-data.yaml b/tests/scenarios/basic-production/expected/migrate-first-deploy-with-demo-data.yaml index bf040b1..b5fdc79 100644 --- a/tests/scenarios/basic-production/expected/migrate-first-deploy-with-demo-data.yaml +++ b/tests/scenarios/basic-production/expected/migrate-first-deploy-with-demo-data.yaml @@ -58,6 +58,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: myproject-production +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -217,6 +232,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: myproject-production +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: production + project/name: myproject + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: myproject-production diff --git a/tests/scenarios/basic-production/expected/migrate-first-deploy.yaml b/tests/scenarios/basic-production/expected/migrate-first-deploy.yaml index 7b9ec6c..79a3c69 100644 --- a/tests/scenarios/basic-production/expected/migrate-first-deploy.yaml +++ b/tests/scenarios/basic-production/expected/migrate-first-deploy.yaml @@ -58,6 +58,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: myproject-production +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -217,6 +232,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: myproject-production +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: production + project/name: myproject + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: myproject-production diff --git a/tests/scenarios/development-single-domain/expected/migrate-continuous-deploy.yaml b/tests/scenarios/development-single-domain/expected/migrate-continuous-deploy.yaml index 0e74d2e..0cbf961 100644 --- a/tests/scenarios/development-single-domain/expected/migrate-continuous-deploy.yaml +++ b/tests/scenarios/development-single-domain/expected/migrate-continuous-deploy.yaml @@ -56,6 +56,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: myproject-dev +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -98,6 +113,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: myproject-dev +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: dev + project/name: myproject + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: myproject-dev diff --git a/tests/scenarios/development-single-domain/expected/migrate-first-deploy-with-demo-data.yaml b/tests/scenarios/development-single-domain/expected/migrate-first-deploy-with-demo-data.yaml index 76dc46e..8b80ea6 100644 --- a/tests/scenarios/development-single-domain/expected/migrate-first-deploy-with-demo-data.yaml +++ b/tests/scenarios/development-single-domain/expected/migrate-first-deploy-with-demo-data.yaml @@ -56,6 +56,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: myproject-dev +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -98,6 +113,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: myproject-dev +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: dev + project/name: myproject + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: myproject-dev diff --git a/tests/scenarios/development-single-domain/expected/migrate-first-deploy.yaml b/tests/scenarios/development-single-domain/expected/migrate-first-deploy.yaml index a047f20..d7425cc 100644 --- a/tests/scenarios/development-single-domain/expected/migrate-first-deploy.yaml +++ b/tests/scenarios/development-single-domain/expected/migrate-first-deploy.yaml @@ -56,6 +56,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: myproject-dev +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -98,6 +113,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: myproject-dev +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: dev + project/name: myproject + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: myproject-dev diff --git a/tests/scenarios/development-with-cloudflare/expected/migrate-continuous-deploy.yaml b/tests/scenarios/development-with-cloudflare/expected/migrate-continuous-deploy.yaml index ec5983f..b8e06c0 100644 --- a/tests/scenarios/development-with-cloudflare/expected/migrate-continuous-deploy.yaml +++ b/tests/scenarios/development-with-cloudflare/expected/migrate-continuous-deploy.yaml @@ -56,6 +56,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: myproject-cloudflare-dev +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -98,6 +113,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: myproject-cloudflare-dev +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: cloudflare + project/name: myproject + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: myproject-cloudflare-dev diff --git a/tests/scenarios/development-with-cloudflare/expected/migrate-first-deploy-with-demo-data.yaml b/tests/scenarios/development-with-cloudflare/expected/migrate-first-deploy-with-demo-data.yaml index 7794e10..a56d468 100644 --- a/tests/scenarios/development-with-cloudflare/expected/migrate-first-deploy-with-demo-data.yaml +++ b/tests/scenarios/development-with-cloudflare/expected/migrate-first-deploy-with-demo-data.yaml @@ -56,6 +56,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: myproject-cloudflare-dev +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -98,6 +113,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: myproject-cloudflare-dev +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: cloudflare + project/name: myproject + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: myproject-cloudflare-dev diff --git a/tests/scenarios/development-with-cloudflare/expected/migrate-first-deploy.yaml b/tests/scenarios/development-with-cloudflare/expected/migrate-first-deploy.yaml index 0578e35..cdd5ecf 100644 --- a/tests/scenarios/development-with-cloudflare/expected/migrate-first-deploy.yaml +++ b/tests/scenarios/development-with-cloudflare/expected/migrate-first-deploy.yaml @@ -56,6 +56,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: myproject-cloudflare-dev +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -98,6 +113,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: myproject-cloudflare-dev +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: cloudflare + project/name: myproject + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: myproject-cloudflare-dev diff --git a/tests/scenarios/escaping-env/expected/migrate-continuous-deploy.yaml b/tests/scenarios/escaping-env/expected/migrate-continuous-deploy.yaml index 340088c..9bd1ee7 100644 --- a/tests/scenarios/escaping-env/expected/migrate-continuous-deploy.yaml +++ b/tests/scenarios/escaping-env/expected/migrate-continuous-deploy.yaml @@ -58,6 +58,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: myproject-production +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -219,6 +234,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: myproject-production +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: production + project/name: myproject + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: myproject-production diff --git a/tests/scenarios/escaping-env/expected/migrate-first-deploy-with-demo-data.yaml b/tests/scenarios/escaping-env/expected/migrate-first-deploy-with-demo-data.yaml index b81c351..0cb1e49 100644 --- a/tests/scenarios/escaping-env/expected/migrate-first-deploy-with-demo-data.yaml +++ b/tests/scenarios/escaping-env/expected/migrate-first-deploy-with-demo-data.yaml @@ -58,6 +58,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: myproject-production +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -219,6 +234,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: myproject-production +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: production + project/name: myproject + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: myproject-production diff --git a/tests/scenarios/escaping-env/expected/migrate-first-deploy.yaml b/tests/scenarios/escaping-env/expected/migrate-first-deploy.yaml index 62b915e..0c86f47 100644 --- a/tests/scenarios/escaping-env/expected/migrate-first-deploy.yaml +++ b/tests/scenarios/escaping-env/expected/migrate-first-deploy.yaml @@ -58,6 +58,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: myproject-production +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -219,6 +234,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: myproject-production +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: production + project/name: myproject + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: myproject-production diff --git a/tests/scenarios/production-with-cloudflare/expected/migrate-continuous-deploy.yaml b/tests/scenarios/production-with-cloudflare/expected/migrate-continuous-deploy.yaml index c4225cb..832dc28 100644 --- a/tests/scenarios/production-with-cloudflare/expected/migrate-continuous-deploy.yaml +++ b/tests/scenarios/production-with-cloudflare/expected/migrate-continuous-deploy.yaml @@ -58,6 +58,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: shop-production +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -334,6 +349,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: shop-production +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: production + project/name: shop + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: shop-production diff --git a/tests/scenarios/production-with-cloudflare/expected/migrate-first-deploy-with-demo-data.yaml b/tests/scenarios/production-with-cloudflare/expected/migrate-first-deploy-with-demo-data.yaml index 780ffd8..dc4a2a0 100644 --- a/tests/scenarios/production-with-cloudflare/expected/migrate-first-deploy-with-demo-data.yaml +++ b/tests/scenarios/production-with-cloudflare/expected/migrate-first-deploy-with-demo-data.yaml @@ -58,6 +58,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: shop-production +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -334,6 +349,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: shop-production +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: production + project/name: shop + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: shop-production diff --git a/tests/scenarios/production-with-cloudflare/expected/migrate-first-deploy.yaml b/tests/scenarios/production-with-cloudflare/expected/migrate-first-deploy.yaml index 3e0da2b..7d3185a 100644 --- a/tests/scenarios/production-with-cloudflare/expected/migrate-first-deploy.yaml +++ b/tests/scenarios/production-with-cloudflare/expected/migrate-first-deploy.yaml @@ -58,6 +58,21 @@ metadata: --- apiVersion: v1 kind: Service +metadata: + labels: + app: gotenberg + name: gotenberg + namespace: shop-production +spec: + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app: gotenberg +--- +apiVersion: v1 +kind: Service metadata: labels: app: rabbitmq @@ -334,6 +349,52 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: gotenberg + namespace: shop-production +spec: + replicas: 1 + selector: + matchLabels: + app: gotenberg + template: + metadata: + annotations: + logging/enabled: "false" + project/app: gotenberg + project/environment: production + project/name: shop + labels: + app: gotenberg + spec: + containers: + - image: gotenberg/gotenberg:8 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 10 + timeoutSeconds: 5 + name: gotenberg + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + memory: 1Gi + requests: + cpu: 50m + memory: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: redis namespace: shop-production From 904581589b26f2f06d711a3e2a678464fc18ec15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=CC=81s=CC=8C=20Ludvik?= Date: Wed, 9 Sep 2026 10:35:00 +0200 Subject: [PATCH 3/4] quote version variables in defaulting checks to avoid word-splitting --- deploy/parts/kubernetes-variables.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/parts/kubernetes-variables.sh b/deploy/parts/kubernetes-variables.sh index cfc3bbc..411938d 100644 --- a/deploy/parts/kubernetes-variables.sh +++ b/deploy/parts/kubernetes-variables.sh @@ -7,13 +7,13 @@ assertVariable "CONFIGURATION_TARGET_PATH" assertVariable "S3_ENDPOINT" assertVariable "PROJECT_NAME" -if [ -z ${REDIS_VERSION} ]; then +if [ -z "${REDIS_VERSION}" ]; then REDIS_VERSION='redis:7.4-alpine' fi VARS+=(REDIS_VERSION) -if [ -z ${GOTENBERG_VERSION} ]; then +if [ -z "${GOTENBERG_VERSION}" ]; then GOTENBERG_VERSION='gotenberg/gotenberg:8' fi From fdfa5e9c76dfe77bc90beabb9b6076db297f0e9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=CC=81s=CC=8C=20Ludvik?= Date: Wed, 9 Sep 2026 11:24:44 +0200 Subject: [PATCH 4/4] add upgrade notes for gotenberg service --- UPGRADE.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/UPGRADE.md b/UPGRADE.md index ad454a0..6fee1d6 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -10,6 +10,11 @@ 2. Run `composer update shopsys/deployment` 3. Check files in mentioned pull requests and if you have any of them extended in your project, apply changes manually +## Upgrade from v5.3.0 to v5.4.0 + +- added Gotenberg service for gift voucher PDF rendering ([#83](https://github.com/shopsys/deployment/pull/83)) + - if you override the `continuous-deploy`, `first-deploy` or `first-deploy-with-demo-data` kustomizations in your project, add the `gotenberg` deployment and service references to them manually + ## Upgrade from v5.2.0 to v5.3.0 - set `MCP_IP_WHITELIST` to a comma-separated list of VPN egress IP addresses or CIDR ranges to restrict access to the MCP ingress; an empty value preserves the current publicly reachable MCP ingress