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-cachemeans “revalidate”, not “do not store”. A cache that honours it returns304 Not Modifiedwhen 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:
- Merge to
dev: auto-deploys to the stage environment. - 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
Deployment-Related
None - No known deployment issues
Release Notes Summary
What Changed
- Orphan-seat prevention: a new, default-off setting on both Java services, surfaced as a single Helm value.
- 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.
- Ingress routing: booking-service gained the
/customAPI path, and the converter chart gained an optional restricted route for the photo endpoint. - Configuration normalization: migration V117 clears organization and tenant configurations that are not JSON objects, so they read as no configuration.
- Static asset caching: the client images send revalidation headers, so a release reaches a browser on the next page load.
- 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
- Platform team: support@seatmap.pro
- Documentation: https://seatmap.pro/knowledge-base/
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.