Skip to content

Build native image#29

Merged
LowBudgetMan merged 12 commits into
mainfrom
graalvm
Jun 2, 2026
Merged

Build native image#29
LowBudgetMan merged 12 commits into
mainfrom
graalvm

Conversation

@LowBudgetMan

@LowBudgetMan LowBudgetMan commented May 17, 2026

Copy link
Copy Markdown
Owner

#13

Keycloak 22 is EOL; 26.6 brings hostname v2 with backchannel-dynamic
support. Postgres 13 is EOL and unsupported by Keycloak 26.

docker-compose.full.yml also gets hostname v2 config and parameterized
ports so the browser-facing issuer URL stays in sync.
UniversalJwtDecoder extracts the issuer from tokens and fetches JWKS
from that URL. In Docker, the browser-facing issuer (localhost:8010)
is unreachable from the API container. The new issuer-overrides config
maps external base URLs to internal Docker hostnames for JWKS fetching
while preserving the original issuer for token validation.
Pass -PbuildNative to produce a GraalVM native image via buildpacks.
Add build and launch cache volumes for faster repeat builds.
Builds both JVM and native Docker images on every push and PR.
Native images get -native suffix tags (e.g. beta-abc1234-native).
- Use withJwkSetUri when issuer override is active to avoid issuer
  mismatch between Docker hostnames (token says localhost, API resolves
  via internal hostname)
- Change JwtIssuerOverridesConfig from Map to List<IssuerOverride> to
  fix Spring Boot property binding with URL keys
- Replace manual resource-config.json with RuntimeHintsRegistrar for
  Liquibase native hints (avoids conflict with AOT-generated file)
- Make GraalVM plugin conditional (apply false + hasProperty check) so
  JVM builds use JRE instead of NIK
@LowBudgetMan LowBudgetMan merged commit 2b8f434 into main Jun 2, 2026
13 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants