Deployment & Settings Changes - v1.72.0

Release: v1.72.0 Date: 2026-08-28


Summary

Impact Level: LOW

Action Required: NO for image consumers; YES for operators running a CDN in front of the client services, and for anyone building from source.

Backward Compatible: YES

Every new setting in this release ships with a default that preserves current behaviour. An operator who changes nothing gets the same runtime they have today. Two items still want a look: a CDN in front of editor-client or booking-client must honour the revalidation headers those images now send, and a build from source needs JDK 25.


Quick Decision Matrix

This table provides a comprehensive at-a-glance view of all deployment changes, risks, and required actions for quick decision-making.

Component/Area Change Type Risk Level Action Required Impact
Environment Variables New LOW NO One new variable on editor-service and booking-service, defaulted off
Database Schema New LOW YES (restricted DB roles only) One data migration, V117, applied automatically on editor-service startup; a restricted migration role must hold UPDATE on organization and tenant
Database Modules No changes NONE NO -
JooQ Configuration Modified LOW NO Code generation restored on a newer plugin; build-time only
Docker Images Modified LOW NO All service images rebuilt on a newer Java runtime
Kubernetes/Helm Config LOW NO Two new values, raised limits on the optional datastore metrics sidecars, one ingress path added, one new conditional template
Runtime Dependencies Updated MEDIUM NO Java 21 to 25 LTS and Spring Boot 4.1 across the Java services
Build Dependencies Updated MEDIUM YES (developers only) Gradle 8.5 to 9.7.0; JDK 25 required to build from source
Monitoring/Logging No changes NONE NO No health-check or metric-endpoint changes
Static Asset Caching Modified LOW YES (CDN operators) The client images now set revalidation headers on their entry documents

Deployment Decision

Overall Risk: LOW

Recommended Action: APPROVE

Downtime Required: NO - Zero-downtime supported

Rollback Risk: SAFE - V117 changes no table structure, so a previous image can be redeployed directly

Special Considerations: Operators who build from source rather than consuming published images must move to JDK 25 first. Operators consuming published images need no action. Separately, deployments that run editor-service under a restricted database role should confirm the role may UPDATE the organization and tenant tables before upgrading.


Configuration Changes

Environment Variables

New Variables

Variable Required Default Description Example
SEATMAP_ORPHANPREVENTION_ENABLED No false Enables orphan-seat prevention, which blocks selections that would strand a single unsellable seat. Set on both editor-service and booking-service from the shared Helm value global.orphanPrevention.enabled. true
SEATMAP_SECURITY_SSO_CODETTLSECONDS No 60 Lifetime in seconds of the single-use session code the autologin endpoint issues when the request sets responseType to "code". Set on editor-service. 120

Leaving this unset preserves current behaviour. Organisation-level and event-level configuration is managed from the editor once the flag is on.

No Modified Variables

All existing environment variables remain unchanged.

No Deprecated Variables

No deprecations in this release.


Database Changes

Migrations

New Migrations: YES

Version Script Type Tables Action Required
V117 V117__reset_json_null_config.sql Data organization, tenant NO

V117 sets config to NULL on any organization or tenant row whose stored config is not a JSON object, so those rows read the same way a row that never carried a configuration does. It runs automatically when editor-service starts, in a single transaction, and touches only rows that are already unusable as configuration. Deployments that run editor-service under a restricted database role should confirm the role holds UPDATE on both tables before upgrading.

Note: No table, column or index is created or altered. A duplicate-version check across the migration directory reports no collisions; the highest migration version moves from V116 to V117.

Restricted database roles: the migration role needs UPDATE on organization and tenant. Deployments that run migrations as a table-owner role while the services connect as a separate lower-privileged role already satisfy this. Deployments where the migration role itself is restricted per-table must confirm that grant before the upgrade, or editor-service will fail to start.


JooQ Configuration Changes

Extended Configuration

What Changed: The jOOQ Gradle plugin was raised to 10.2.1 and the generator library to 3.21.7, restoring code generation on the current toolchain.

Location: products/booking-service/jooq.gradle

Action Required: NO

  • Build-time only. Generated sources remain committed, so no consumer of the published images is affected.
  • The generated API surface is unchanged by this release.

Docker & Container Changes

Docker Images

Modified Images

Image Changes Breaking
editor-service Rebuilt on the Java 25 runtime No
booking-service Rebuilt on the Java 25 runtime No
editor-client Rebuilt No
booking-client Rebuilt No
converter-service Rebuilt No

All images are published to registry.gitlab.com/seatmap.pro/seatmap/ at tag 1.72.0.


Kubernetes / Helm Changes

Helm Chart

App Version: v1.72.0

Values Changes

New Values:

global:
  orphanPrevention:
    enabled: false

converter:
  ingress:
    photoAllowSourceRange: ''

global.orphanPrevention.enabled propagates to both Java services as SEATMAP_ORPHANPREVENTION_ENABLED.

converter.ingress.photoAllowSourceRange is optional. Left empty, the converter photo route is not published and the chart renders exactly as it does today. When set to one or more CIDR ranges, the chart renders an additional Ingress that publishes the route restricted to those ranges.

Modified Values:

booking:
  ingress:
    apiPaths:
      - /api
      - /swagger-ui
      - /custom # added in this release
      - /scalar
      - /scalar.html
      - /scalar-v1.html

Operators running the bundled chart pick this up automatically. Operators who maintain their own ingress definitions instead of using booking.ingress.apiPaths must add /custom to the paths routed to booking-service, or requests to it will not reach the service.

datastoreMetrics:
  postgres:
    resources:
      limits:
        cpu: 200m # raised from 100m
  redis:
    resources:
      limits:
        cpu: 200m # raised from 100m

These limits apply only when datastoreMetrics.enabled is set; the feature remains off by default. Operators who override these limits in their own values files should adopt the new values.

Removed Values: none.

New Templates

Template Rendered when Purpose
converter/ingress.yaml converter.ingress.photoAllowSourceRange is non-empty Publishes the converter photo route restricted to the configured source ranges

Secrets

No new keys are required in seatmap-helm-secrets. The key set required by this release is unchanged from the currently deployed release.


Static Asset Caching

What Changed: editor-client and booking-client now send Cache-Control headers from their bundled nginx configuration. Entry documents and unversioned paths are served no-cache, so a browser revalidates them on each load and picks up a new release as soon as the page is reloaded. Content-hashed asset paths (/assets/, /playground/assets/) are served public, max-age=31536000, immutable.

Action Required: YES, for operators running a CDN or caching proxy in front of the client services.

  • no-cache means “revalidate”, not “do not store”. A cache that honours it returns 304 Not Modified when the build has not moved, so this adds no download to the common case.
  • A CDN configured to override origin cache headers on the entry document will continue to serve the previous build until its own TTL expires. Confirm the CDN forwards the revalidation, or shorten its TTL for the entry document.
  • Operators with no CDN in front of these services need no action; the change is inside the published images.

Dependencies

Runtime Dependencies

Updated Dependencies

Dependency Old Version New Version Breaking Changes
Java runtime 21 LTS 25 LTS No
Spring Boot 3.4.4 4.1.0 No
jOOQ 3.20.4 3.21.7 No

These are internal to the published images. An operator deploying the published images inherits them with no action.

No New Dependencies

No new dependencies added in this release.

Build Dependencies

Gradle and Toolchain

What Changed: The Gradle wrapper moved from 8.5 to 9.7.0, and the Java toolchain from 21 to 25 LTS.

Impact: Build-time only.

Action Required: YES, for anyone building from source.

  • A JDK 25 installation must be available to the build. Builds on JDK 21 will fail to resolve the toolchain.
  • The Gradle wrapper is committed, so no separate Gradle installation is needed.
  • Operators consuming the published container images are unaffected.

System Requirements

Minimum Versions

PostgreSQL and Redis requirements are unchanged by this release.

Component Minimum Version Recommended Notes
Java 25 25 LTS Build-time only; the published images bundle their own runtime
Node.js 22 22 LTS Build-time only

CI/CD Deployment

Automated Deployment via GitLab CI/CD

Deployment Flow:

  1. Merge to dev: auto-deploys to the stage environment.
  2. Merge to main: manual trigger to deploy to production.

Zero-Downtime: Fully supported. V117 alters no table structure and takes no long-lived lock, and no new configuration is required, so rolling replacement is safe.

Action Required: NONE


Rollback

Rollback Support: Automated via GitLab CI/CD

Database Rollback: Not required. V117 changes no table structure, so an earlier image runs against the migrated database unchanged. The migration is not reversed by a rollback: rows it normalized keep a NULL configuration, which every release reads as no configuration.

Procedure: Redeploy the previous image tag; as described above, V117 requires no database step. If global.orphanPrevention.enabled was turned on during the upgrade, set it back to false in the same operation.


Monitoring & Health Checks

New Metrics

No new metrics in this release

Health Checks

No changes to health check endpoints


Known Issues

None - No known deployment issues


Release Notes Summary

What Changed

  1. Orphan-seat prevention: a new, default-off setting on both Java services, surfaced as a single Helm value.
  2. Platform baseline: the Java services moved to Java 25 LTS and Spring Boot 4.1, with Gradle 9.7.0 and a restored jOOQ code-generation path behind them.
  3. Ingress routing: booking-service gained the /custom API path, and the converter chart gained an optional restricted route for the photo endpoint.
  4. Configuration normalization: migration V117 clears organization and tenant configurations that are not JSON objects, so they read as no configuration.
  5. Static asset caching: the client images send revalidation headers, so a release reaches a browser on the next page load.
  6. Autologin session codes: the autologin endpoint can issue a single-use, short-lived session code that the Editor exchanges for a session on load; per-request opt-in, token responses stay the default.

What Didn’t Change

  • No schema changes: no table, column or index is created or altered.
  • No new or renamed secret keys.
  • No health-check endpoint or response changes.
  • No changes to existing environment variables.
  • No breaking changes to any published API contract.

Support

Questions

Escalation

Standard escalation procedures apply - no special considerations for this release.


Sign-Off

Deployment Risk: LOW

Rollback Safety: SAFE

Downtime Required: NO

Special Steps: NONE for image consumers, beyond confirming a CDN in front of the client services honours revalidation. Source builders must move to JDK 25.


This release is a low-risk deployment with no schema changes, no new secrets, and every new setting defaulted to preserve current behaviour. Its one migration is a data normalization that runs automatically on startup.