From ccd9d2806569de1949f1c900e33c03e6029fdab7 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Wed, 8 Jul 2026 14:28:39 +0000 Subject: [PATCH] Bump SQL server JDK from Temurin 20 (EOL) to 21 LTS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Temurin/OpenJDK 20 is a non-LTS release and no longer receives security updates. Move the SKDB SQL server Java toolchain to Temurin 21 LTS: - eclipse-temurin:20 → :21 in the server core and dev images - temurin-20-jdk → temurin-21-jdk (Adoptium apt) + JAVA_HOME in sql/Dockerfile - Gradle toolchain languageVersion 20 → 21 in the core and pg modules - CodeQL workflow's Kotlin analysis JDK 20 → 21 The Gradle wrapper (8.1.1) runs fine on JDK 21; verified locally by building the server-core and dev images and confirming temurin-21-jdk installs from the Adoptium noble repo at the expected JAVA_HOME path. The .sdkman sentinel version in sql/Dockerfile and sql/ts/tests/ service_common.mk is intentionally left at 20.0.2-tem: it is a build-time marker that lets the Makefile skip its SDKMAN install (the real JDK comes from apt), and it must match the already-published image, which the skdb-wasm CI job runs against. A comment now records this. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/codeql.yml | 4 ++-- sql/Dockerfile | 10 +++++++--- sql/server/core/Dockerfile | 2 +- sql/server/core/build.gradle.kts | 2 +- sql/server/dev/Dockerfile | 4 ++-- sql/server/pg/build.gradle.kts | 2 +- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index a7bbc7c40..4d81b9c8f 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -33,12 +33,12 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Set up JDK 20 + - name: Set up JDK 21 if: matrix.language == 'java-kotlin' uses: actions/setup-java@v4 with: distribution: temurin - java-version: '20' + java-version: '21' - name: Install clang-20 if: matrix.language == 'c-cpp' diff --git a/sql/Dockerfile b/sql/Dockerfile index 089e14d90..407d2c451 100644 --- a/sql/Dockerfile +++ b/sql/Dockerfile @@ -2,7 +2,11 @@ FROM skiplabs/skip AS base ARG TARGETARCH -# Install system deps, Java 20 (Adoptium Temurin), and Gradle 9.3.1 +# Install system deps, Java 21 (Adoptium Temurin), and Gradle 9.3.1. +# The .sdkman stub dirs below are a build-time sentinel that lets +# sql/ts/tests/service_common.mk skip its SDKMAN install (Java here comes +# from apt above). Its version string only has to match that Makefile — it +# does not track the JDK version and is intentionally left at 20.0.2-tem. RUN --mount=type=cache,id=apt-cache-$TARGETARCH,target=/var/cache/apt,sharing=locked \ --mount=type=cache,id=apt-lists-$TARGETARCH,target=/var/lib/apt/lists,sharing=locked \ --mount=type=cache,target=/root/.npm,sharing=locked \ @@ -11,7 +15,7 @@ RUN --mount=type=cache,id=apt-cache-$TARGETARCH,target=/var/cache/apt,sharing=lo echo "deb [signed-by=/etc/apt/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(. /etc/os-release && echo $VERSION_CODENAME) main" \ > /etc/apt/sources.list.d/adoptium.list && \ apt-get update && \ - apt-get install -q -y --no-install-recommends curl sqlite3 unzip zip temurin-20-jdk && \ + apt-get install -q -y --no-install-recommends curl sqlite3 unzip zip temurin-21-jdk && \ npm install -g bun && \ npx playwright install-deps && \ curl -sL https://services.gradle.org/distributions/gradle-9.3.1-bin.zip -o /tmp/gradle.zip && \ @@ -23,7 +27,7 @@ RUN --mount=type=cache,id=apt-cache-$TARGETARCH,target=/var/cache/apt,sharing=lo /root/.sdkman/candidates/gradle && \ touch /root/.sdkman/bin/sdkman-init.sh -ENV JAVA_HOME=/usr/lib/jvm/temurin-20-jdk-${TARGETARCH} +ENV JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-${TARGETARCH} FROM base AS skdb diff --git a/sql/server/core/Dockerfile b/sql/server/core/Dockerfile index 3e5ee7fb6..512c6d2fb 100644 --- a/sql/server/core/Dockerfile +++ b/sql/server/core/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:20 +FROM eclipse-temurin:21 # Copy Gradle wrapper and build configs first (changes rarely) COPY sql/server/gradlew sql/server/gradle.properties /skdb/sql/server/ diff --git a/sql/server/core/build.gradle.kts b/sql/server/core/build.gradle.kts index 8a52cea41..f5e5f3910 100644 --- a/sql/server/core/build.gradle.kts +++ b/sql/server/core/build.gradle.kts @@ -27,7 +27,7 @@ dependencies { } // Apply a specific Java toolchain to ease working on different environments. -java { toolchain { languageVersion.set(JavaLanguageVersion.of(20)) } } +java { toolchain { languageVersion.set(JavaLanguageVersion.of(21)) } } tasks.named("test") { // Use JUnit Platform for unit tests. diff --git a/sql/server/dev/Dockerfile b/sql/server/dev/Dockerfile index 3f4eec718..ac9a30953 100644 --- a/sql/server/dev/Dockerfile +++ b/sql/server/dev/Dockerfile @@ -1,5 +1,5 @@ FROM skiplabs/skdb AS skdb -FROM eclipse-temurin:20 AS skgw +FROM eclipse-temurin:21 AS skgw # Copy Gradle wrapper and build configs first (changes rarely) COPY sql/server/gradlew sql/server/gradle.properties /skdb/sql/server/ @@ -26,7 +26,7 @@ RUN --mount=type=cache,target=/root/.gradle,sharing=locked \ # Build the development image by copying out artifacts ################################################################################ -FROM eclipse-temurin:20 AS dev +FROM eclipse-temurin:21 AS dev WORKDIR /skdb diff --git a/sql/server/pg/build.gradle.kts b/sql/server/pg/build.gradle.kts index a19548246..792d0be8a 100644 --- a/sql/server/pg/build.gradle.kts +++ b/sql/server/pg/build.gradle.kts @@ -24,7 +24,7 @@ dependencies { } // Apply a specific Java toolchain to ease working on different environments. -java { toolchain { languageVersion.set(JavaLanguageVersion.of(20)) } } +java { toolchain { languageVersion.set(JavaLanguageVersion.of(21)) } } spotless { kotlin { ktfmt("0.49") } }