werkator build succeeded after 00:38
Co-authored-by: claude-code <claude-code@javagil.de>
126 lines
5.0 KiB
Markdown
126 lines
5.0 KiB
Markdown
# Temurin 25 as JDK and Runtime of All werk Repositories
|
|
|
|
**Status:**
|
|
- proposed: 2026-10-11
|
|
- accepted: 2026-10-11
|
|
- rejected: -
|
|
- superseded: -
|
|
- revised: 2026-10-11, see "Revision of 2026-10-11"
|
|
|
|
**Decision [accepted]:** All werk repositories build with Temurin 25, and each service runs on a runtime jlinked from it;
|
|
Werkator's build environment provides Temurin 25, so no build downloads a JDK.
|
|
|
|
## Context and Problem Statement
|
|
|
|
Each werk repository chose its JDK and its runtime on its own (state on 2026-10-11):
|
|
|
|
| Repository | JDK | Vendor | Download | Gradle | Kotlin | Runtime on the host |
|
|
|---|---|---|---|---|---|---|
|
|
| werkator | 21 | Temurin | Foojay 0.8.0 | 8.14.5 | 2.2.0 | jlinked, mih09 |
|
|
| werkregie | 21 | Temurin | Foojay 1.0.0 | 9.8.1 | 2.4.21 | jlinked |
|
|
| werkrevisor, statistics | 21 | Temurin | Foojay 0.8.0 | 8.14.5 | 2.2.0 | jar on mih09 |
|
|
| werkcrappit | 21 | any | - | 9.8.0 | - | none, a Gradle plugin |
|
|
| werkbaum, backend | 21 | any | - | 9.1.0 | 2.2.20 | full Temurin JDK 21 in the home, mih00 |
|
|
| werkprobe | any, bytecode 17 | any | - | 9.6.0 | - | Java 17 of the managed webspaces |
|
|
|
|
`mi` wants one choice for all of them.
|
|
|
|
### Technical Background
|
|
|
|
- jlink compiles nothing; it copies the vendor's binaries, so the vendor's build platform sets the glibc floor of a runtime
|
|
(Werkator ADR 0006, Werkator PR#62).
|
|
- Measured over all shared libraries: Temurin 21 needs `GLIBC_2.15`, Temurin 25 `GLIBC_2.17`,
|
|
a distribution's OpenJDK the glibc of its distribution, e.g. `GLIBC_2.38` for Ubuntu 24.04's OpenJDK 21.
|
|
- mih09 and mih00 run Debian 12 with glibc 2.36.
|
|
- Werkator's build environment has Debian's OpenJDK 21; a repository that pins Temurin downloads it with Foojay in each build.
|
|
|
|
## Considered Options
|
|
|
|
* Temurin 25 everywhere
|
|
* Temurin 21 everywhere
|
|
* Any JDK for compiling, Temurin only where a runtime is jlinked
|
|
|
|
### Temurin 25 Everywhere
|
|
|
|
Java 25 is the current LTS release.
|
|
A test build on 2026-10-11, of a copy of each `main` with the toolchain set to 25, showed:
|
|
|
|
- werkregie, werkcrappit and werkprobe build unchanged; the jlinked runtimes report Temurin 25.0.4.
|
|
- werkator, werkbaum and the statistics service of werkrevisor need Kotlin 2.4.21:
|
|
Kotlin 2.2.0 and 2.2.20 have no JVM 25 target.
|
|
With Kotlin 2.4.21 they build, and werkator's runtime bundle reports Temurin 25.0.4.
|
|
- PIT 1.30, JaCoCo 0.8.13 and 0.8.15, Spring Boot 4.0, Trixnity, sqlite-jdbc and H2 work with 25.
|
|
- Only tests that need a git checkout or werkdock's sandbox failed, and they fail with JDK 21 as well.
|
|
|
|
#### Advantages
|
|
|
|
- One JDK and one runtime for all repositories, with the longest support of an LTS release.
|
|
- A runtime jlinked from Temurin 25 starts on every Hostsharing host with glibc 2.17 or newer.
|
|
|
|
#### Disadvantages
|
|
|
|
- Three repositories must raise Kotlin to 2.4.21 first.
|
|
- Gradle 8.14 does not run on JDK 25; werkator and werkrevisor need Gradle 9 and Foojay 1.0.0, as werkregie.
|
|
- werkprobe stays on Java 17 bytecode: the managed webspaces bring their own Java 17.
|
|
|
|
### Temurin 21 Everywhere
|
|
|
|
#### Advantages
|
|
|
|
- No Kotlin and no Gradle upgrade.
|
|
|
|
#### Disadvantages
|
|
|
|
- A move to 25 is still due later, with the same work.
|
|
|
|
### Any JDK for Compiling, Temurin Only Where a Runtime Is jlinked
|
|
|
|
The state of 2026-10-11.
|
|
|
|
#### Advantages
|
|
|
|
- No change.
|
|
|
|
#### Disadvantages
|
|
|
|
- What the CI tests is not what runs on the hosts.
|
|
- Two Foojay versions and downloads in each build stay.
|
|
|
|
## Decision Outcome
|
|
|
|
Temurin 25 everywhere, decided by `mi` on 2026-10-11:
|
|
|
|
- Each repository builds with the toolchain `JavaLanguageVersion.of(25)` and the vendor `JvmVendorSpec.ADOPTIUM`.
|
|
werkprobe keeps `options.release = 17` for the webspaces.
|
|
- Werkator's build environment provides Temurin 25; Foojay stays only as a fallback.
|
|
- Each service runs on a runtime jlinked from Temurin 25, werkbaum included; the full JDK in its home goes.
|
|
|
|
The rollout, in this order:
|
|
|
|
1. werkator: its build environment gets Temurin 25 beside OpenJDK 21, so no build breaks.
|
|
2. One PR per repository switches it to 25, with Kotlin 2.4.21 and Gradle 9 where needed.
|
|
3. OpenJDK 21 leaves the build environment.
|
|
|
|
## Consequences
|
|
|
|
- A new repository builds with Temurin 25 from the start.
|
|
- The module list of each jlinked runtime is checked again with jdeps when its dependencies change.
|
|
- The next LTS release gets a decision of its own.
|
|
|
|
## Revision of 2026-10-11
|
|
|
|
The build environment does not get Temurin 25; Foojay provides it, decided by `mi` on 2026-10-11 (werkregie PR#22).
|
|
|
|
- The reason above, "so that no build downloads a JDK", is wrong.
|
|
The builds on mih09 share one Gradle home, and Foojay downloads a JDK into it only once;
|
|
Temurin 21 lies there since 2026-09-17.
|
|
- Werkator PR#62 had already rejected a Temurin baked into the rootfs:
|
|
each Java update would mean a new archive of about 425 MB, uploaded by hand.
|
|
|
|
What changes:
|
|
|
|
- Each repository pins Temurin 25 with `JvmVendorSpec.ADOPTIUM` and loads it with Foojay 1.0.0.
|
|
- Werkator's build environment stays as it is; its OpenJDK 21 runs Gradle.
|
|
- The rollout is one PR per repository, with Kotlin 2.4.21 and Gradle 9 where needed;
|
|
steps 1 and 3 above are dropped.
|