From cd6ad04203c18802dc2d928d405fe547c685868f Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 12 Feb 2026 17:09:11 +0000 Subject: [PATCH 1/9] skiplang/Dockerfile: use BuildKit cache mounts for apt Replace explicit apt cache cleanup with --mount=type=cache. Cache volumes persist between builds for faster rebuilds but are never included in image layers. Also add ca-certificates explicitly since --no-install-recommends skips it, and it's needed for HTTPS access to apt.llvm.org. Co-Authored-By: Claude Opus 4.6 --- skiplang/Dockerfile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/skiplang/Dockerfile b/skiplang/Dockerfile index 7fc4aabae..c76080538 100644 --- a/skiplang/Dockerfile +++ b/skiplang/Dockerfile @@ -10,15 +10,16 @@ ARG LLVM_VERSION=20 # Install LLVM via apt repository directly # Note: [trusted=yes] is needed because apt.llvm.org's GPG key uses SHA1 signatures # which modern Debian rejects since Feb 2026. This is an upstream LLVM issue. -RUN apt-get update --quiet && \ - apt-get install --quiet --yes make wget && \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update --quiet && \ + apt-get install --quiet --yes --no-install-recommends ca-certificates make wget && \ echo "deb [trusted=yes] http://apt.llvm.org/bookworm/ llvm-toolchain-bookworm-${LLVM_VERSION} main" > /etc/apt/sources.list.d/llvm.list && \ apt-get update --quiet && \ - apt-get install --quiet --yes \ + apt-get install --quiet --yes --no-install-recommends \ clang-${LLVM_VERSION} \ llvm-${LLVM_VERSION} \ lld-${LLVM_VERSION} && \ - apt-get clean && rm -rf /var/lib/apt/lists/* && \ update-alternatives \ --install /usr/bin/clang clang /usr/bin/clang-${LLVM_VERSION} 101 \ --slave /usr/bin/clang++ clang++ /usr/bin/clang++-${LLVM_VERSION} \ From 172d1a07445382b5c82cda2d64adcd1a366ad105 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 12 Feb 2026 17:09:15 +0000 Subject: [PATCH 2/9] sql/Dockerfile: use BuildKit cache mounts for apt, npm, SDKMAN Replace explicit cache cleanup with --mount=type=cache for apt, npm, and SDKMAN archives. Co-Authored-By: Claude Opus 4.6 --- sql/Dockerfile | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/sql/Dockerfile b/sql/Dockerfile index e798a9e6c..f1cf3e051 100644 --- a/sql/Dockerfile +++ b/sql/Dockerfile @@ -1,16 +1,17 @@ FROM skiplabs/skip AS base -RUN apt-get update && apt-get install -q -y curl sqlite3 unzip zip && \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + --mount=type=cache,target=/root/.npm,sharing=locked \ + apt-get update && apt-get install -q -y --no-install-recommends curl sqlite3 unzip zip && \ npm install -g bun && \ - npx playwright install-deps && \ - apt-get clean && rm -rf /var/lib/apt/lists/* && \ - npm cache clean --force + npx playwright install-deps RUN sh -c 'curl -s "https://get.sdkman.io?rcupdate=false" | bash' -RUN bash -c "source $HOME/.sdkman/bin/sdkman-init.sh && \ +RUN --mount=type=cache,target=/root/.sdkman/archives,sharing=locked \ + bash -c "source $HOME/.sdkman/bin/sdkman-init.sh && \ sdk install gradle && \ - sdk install java 20.0.2-tem && \ - rm -rf $HOME/.sdkman/archives/*" + sdk install java 20.0.2-tem" FROM base AS skdb From f774a7bdd6c80168d9608b3dcbbb71542c568fea Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 12 Feb 2026 17:09:19 +0000 Subject: [PATCH 3/9] Dockerfile: use BuildKit cache mounts for apt, npm, pip Replace explicit cache cleanup with --mount=type=cache for apt, npm, and pip caches. Co-Authored-By: Claude Opus 4.6 --- Dockerfile | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 91f6d8dfa..bb0cfee6f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,8 +2,9 @@ FROM ubuntu:22.04 AS skiplang-base ENV DEBIAN_FRONTEND=noninteractive RUN --mount=type=bind,source=./bin/apt-install.sh,target=/tmp/apt-install.sh \ - /tmp/apt-install.sh skiplang-build-deps && \ - apt-get clean && rm -rf /var/lib/apt/lists/* + --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + /tmp/apt-install.sh skiplang-build-deps ENV CC=clang ENV CXX=clang++ @@ -24,6 +25,8 @@ FROM skiplang AS skip RUN --mount=type=bind,source=./bin/apt-install.sh,target=/tmp/apt-install.sh \ --mount=type=bind,source=./requirements-dev.txt,target=/tmp/requirements-dev.txt \ - /tmp/apt-install.sh skipruntime-deps other-CI-tools other-dev-tools && \ - apt-get clean && rm -rf /var/lib/apt/lists/* && \ - pip cache purge && npm cache clean --force + --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + --mount=type=cache,target=/root/.npm,sharing=locked \ + --mount=type=cache,target=/root/.cache/pip,sharing=locked \ + /tmp/apt-install.sh skipruntime-deps other-CI-tools other-dev-tools From 91d154f68437ad0a8101ec2ba5a1bcc1b5ec19a6 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 12 Feb 2026 17:09:23 +0000 Subject: [PATCH 4/9] sql/server: use BuildKit cache mounts for Gradle Replace explicit Gradle cache cleanup with --mount=type=cache. Co-Authored-By: Claude Opus 4.6 --- sql/server/core/Dockerfile | 4 ++-- sql/server/dev/Dockerfile | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sql/server/core/Dockerfile b/sql/server/core/Dockerfile index 7ffa0ab9d..984bdadcb 100644 --- a/sql/server/core/Dockerfile +++ b/sql/server/core/Dockerfile @@ -2,5 +2,5 @@ FROM eclipse-temurin:20 COPY . /skdb WORKDIR /skdb/sql/server/core -RUN ../gradlew build --no-daemon --console plain && \ - rm -rf ~/.gradle/caches ~/.gradle/wrapper +RUN --mount=type=cache,target=/root/.gradle,sharing=locked \ + ../gradlew build --no-daemon --console plain diff --git a/sql/server/dev/Dockerfile b/sql/server/dev/Dockerfile index abce52463..a2f3b75c0 100644 --- a/sql/server/dev/Dockerfile +++ b/sql/server/dev/Dockerfile @@ -4,7 +4,8 @@ FROM eclipse-temurin:20 AS skgw COPY . /skdb WORKDIR /skdb/sql/server/dev -RUN ../gradlew jar --no-daemon --console plain +RUN --mount=type=cache,target=/root/.gradle,sharing=locked \ + ../gradlew jar --no-daemon --console plain ################################################################################ # Build the development image by copying out artifacts From e21299068c1cf37e858d438887f2af2147bd3e50 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 12 Feb 2026 17:09:28 +0000 Subject: [PATCH 5/9] skipruntime-ts/tests: use BuildKit cache mounts for apt, npm Replace explicit cache cleanup with --mount=type=cache for apt and npm caches. Co-Authored-By: Claude Opus 4.6 --- skipruntime-ts/tests/native_addon/Dockerfile | 20 +++++++++---------- .../tests/native_addon_unreleased/Dockerfile | 20 +++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/skipruntime-ts/tests/native_addon/Dockerfile b/skipruntime-ts/tests/native_addon/Dockerfile index 0fb3c9299..e791e504d 100644 --- a/skipruntime-ts/tests/native_addon/Dockerfile +++ b/skipruntime-ts/tests/native_addon/Dockerfile @@ -1,14 +1,14 @@ FROM ubuntu:latest # install dependencies needed to build the node addon -RUN apt-get update --quiet \ - && apt-get install --quiet --yes g++ make python3 wget \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + --mount=type=cache,target=/root/.npm,sharing=locked \ + apt-get update --quiet \ + && apt-get install --quiet --yes --no-install-recommends g++ make python3 wget \ && wget --quiet --output-document=- https://deb.nodesource.com/setup_22.x | bash - \ - && apt-get install --quiet --yes nodejs \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* \ - && npm install --global typescript \ - && npm cache clean --force + && apt-get install --quiet --yes --no-install-recommends nodejs npm \ + && npm install --global typescript # copy the test code COPY package.json test.ts /work/ @@ -29,9 +29,9 @@ RUN VERSION=$(npm install --dry-run @skipruntime/native | grep native | cut -d' && npm install @skipruntime/native # build the test -RUN npm install \ - && tsc --module node16 test.ts \ - && npm cache clean --force +RUN --mount=type=cache,target=/root/.npm,sharing=locked \ + npm install \ + && tsc --module node16 test.ts # set LD_LIBRARY_PATH so node can find the native addon's shared object file ENV LD_LIBRARY_PATH=${PREFIX}/lib diff --git a/skipruntime-ts/tests/native_addon_unreleased/Dockerfile b/skipruntime-ts/tests/native_addon_unreleased/Dockerfile index 7b14ad5ae..96b85edf4 100644 --- a/skipruntime-ts/tests/native_addon_unreleased/Dockerfile +++ b/skipruntime-ts/tests/native_addon_unreleased/Dockerfile @@ -1,14 +1,14 @@ FROM ubuntu:latest # install dependencies needed to build the node addon -RUN apt-get update --quiet \ - && apt-get install --quiet --yes g++ make python3 wget \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + --mount=type=cache,target=/root/.npm,sharing=locked \ + apt-get update --quiet \ + && apt-get install --quiet --yes --no-install-recommends g++ make python3 wget \ && wget --quiet --output-document=- https://deb.nodesource.com/setup_22.x | bash - \ - && apt-get install --quiet --yes nodejs \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* \ - && npm install --global typescript \ - && npm cache clean --force + && apt-get install --quiet --yes --no-install-recommends nodejs npm \ + && npm install --global typescript # copy the npm pack archives, libskipruntime.so files, and install_runtime.sh COPY build /work/build @@ -34,9 +34,9 @@ RUN VERSION=$(npm install --dry-run @skipruntime/native | grep native | cut -d' && npm install @skipruntime/native # build the test -RUN npm install \ - && tsc --module node16 test.ts \ - && npm cache clean --force +RUN --mount=type=cache,target=/root/.npm,sharing=locked \ + npm install \ + && tsc --module node16 test.ts # set LD_LIBRARY_PATH so node can find the native addon's shared object file ENV LD_LIBRARY_PATH=${PREFIX}/lib From 6b5a85440b4ac33d986ecb53d59e4994e5ca22d5 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Fri, 13 Feb 2026 09:28:45 +0000 Subject: [PATCH 6/9] skipruntime-ts/tests: remove conflicting Ubuntu npm package Nodesource's nodejs package bundles npm. Installing Ubuntu's separate npm package alongside it causes conflicts. Remove the explicit npm from apt-get install. Co-Authored-By: Claude Opus 4.6 --- skipruntime-ts/tests/native_addon/Dockerfile | 2 +- skipruntime-ts/tests/native_addon_unreleased/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/skipruntime-ts/tests/native_addon/Dockerfile b/skipruntime-ts/tests/native_addon/Dockerfile index e791e504d..09cd94957 100644 --- a/skipruntime-ts/tests/native_addon/Dockerfile +++ b/skipruntime-ts/tests/native_addon/Dockerfile @@ -7,7 +7,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update --quiet \ && apt-get install --quiet --yes --no-install-recommends g++ make python3 wget \ && wget --quiet --output-document=- https://deb.nodesource.com/setup_22.x | bash - \ - && apt-get install --quiet --yes --no-install-recommends nodejs npm \ + && apt-get install --quiet --yes --no-install-recommends nodejs \ && npm install --global typescript # copy the test code diff --git a/skipruntime-ts/tests/native_addon_unreleased/Dockerfile b/skipruntime-ts/tests/native_addon_unreleased/Dockerfile index 96b85edf4..0d8518975 100644 --- a/skipruntime-ts/tests/native_addon_unreleased/Dockerfile +++ b/skipruntime-ts/tests/native_addon_unreleased/Dockerfile @@ -7,7 +7,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update --quiet \ && apt-get install --quiet --yes --no-install-recommends g++ make python3 wget \ && wget --quiet --output-document=- https://deb.nodesource.com/setup_22.x | bash - \ - && apt-get install --quiet --yes --no-install-recommends nodejs npm \ + && apt-get install --quiet --yes --no-install-recommends nodejs \ && npm install --global typescript # copy the npm pack archives, libskipruntime.so files, and install_runtime.sh From d46c3df3a21ce126522f0b589e1c9841ce7d2c1b Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Fri, 13 Feb 2026 10:37:01 +0000 Subject: [PATCH 7/9] skipruntime-ts/tests: add ca-certificates for HTTPS apt repos With --no-install-recommends, ca-certificates is not pulled in automatically. Without it, wget can't fetch the nodesource setup script over HTTPS, causing apt to fall back to Ubuntu's nodejs 18 which doesn't include npm. Co-Authored-By: Claude Opus 4.6 --- skipruntime-ts/tests/native_addon/Dockerfile | 2 +- skipruntime-ts/tests/native_addon_unreleased/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/skipruntime-ts/tests/native_addon/Dockerfile b/skipruntime-ts/tests/native_addon/Dockerfile index 09cd94957..cdd9e2c1f 100644 --- a/skipruntime-ts/tests/native_addon/Dockerfile +++ b/skipruntime-ts/tests/native_addon/Dockerfile @@ -5,7 +5,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ --mount=type=cache,target=/root/.npm,sharing=locked \ apt-get update --quiet \ - && apt-get install --quiet --yes --no-install-recommends g++ make python3 wget \ + && apt-get install --quiet --yes --no-install-recommends ca-certificates g++ make python3 wget \ && wget --quiet --output-document=- https://deb.nodesource.com/setup_22.x | bash - \ && apt-get install --quiet --yes --no-install-recommends nodejs \ && npm install --global typescript diff --git a/skipruntime-ts/tests/native_addon_unreleased/Dockerfile b/skipruntime-ts/tests/native_addon_unreleased/Dockerfile index 0d8518975..b318bf19a 100644 --- a/skipruntime-ts/tests/native_addon_unreleased/Dockerfile +++ b/skipruntime-ts/tests/native_addon_unreleased/Dockerfile @@ -5,7 +5,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ --mount=type=cache,target=/root/.npm,sharing=locked \ apt-get update --quiet \ - && apt-get install --quiet --yes --no-install-recommends g++ make python3 wget \ + && apt-get install --quiet --yes --no-install-recommends ca-certificates g++ make python3 wget \ && wget --quiet --output-document=- https://deb.nodesource.com/setup_22.x | bash - \ && apt-get install --quiet --yes --no-install-recommends nodejs \ && npm install --global typescript From 3354ac1151d84f40e2ff8e1a8a8181291c5cd053 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Fri, 13 Feb 2026 11:09:35 +0000 Subject: [PATCH 8/9] skipruntime-ts/tests: separate apt cache per architecture Use TARGETARCH in cache mount IDs to prevent cross-architecture contamination when building for multiple platforms sequentially. Co-Authored-By: Claude Opus 4.6 --- skipruntime-ts/tests/native_addon/Dockerfile | 6 ++++-- skipruntime-ts/tests/native_addon_unreleased/Dockerfile | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/skipruntime-ts/tests/native_addon/Dockerfile b/skipruntime-ts/tests/native_addon/Dockerfile index cdd9e2c1f..d3523ed74 100644 --- a/skipruntime-ts/tests/native_addon/Dockerfile +++ b/skipruntime-ts/tests/native_addon/Dockerfile @@ -1,8 +1,10 @@ FROM ubuntu:latest +ARG TARGETARCH + # install dependencies needed to build the node addon -RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ - --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ +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 \ apt-get update --quiet \ && apt-get install --quiet --yes --no-install-recommends ca-certificates g++ make python3 wget \ diff --git a/skipruntime-ts/tests/native_addon_unreleased/Dockerfile b/skipruntime-ts/tests/native_addon_unreleased/Dockerfile index b318bf19a..766c68db2 100644 --- a/skipruntime-ts/tests/native_addon_unreleased/Dockerfile +++ b/skipruntime-ts/tests/native_addon_unreleased/Dockerfile @@ -1,8 +1,10 @@ FROM ubuntu:latest +ARG TARGETARCH + # install dependencies needed to build the node addon -RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ - --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ +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 \ apt-get update --quiet \ && apt-get install --quiet --yes --no-install-recommends ca-certificates g++ make python3 wget \ From daf402d04c3a440be6a77fac625a07ddeb019a9c Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Fri, 13 Feb 2026 11:50:31 +0000 Subject: [PATCH 9/9] separate apt/SDKMAN caches per architecture in all Dockerfiles release_docker.sh builds these images for both amd64 and arm64. Use TARGETARCH in cache mount IDs to prevent cross-architecture contamination of apt and SDKMAN caches. Co-Authored-By: Claude Opus 4.6 --- Dockerfile | 10 ++++++---- skiplang/Dockerfile | 5 +++-- sql/Dockerfile | 8 +++++--- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index bb0cfee6f..110f17f1a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,11 @@ FROM ubuntu:22.04 AS skiplang-base +ARG TARGETARCH + ENV DEBIAN_FRONTEND=noninteractive RUN --mount=type=bind,source=./bin/apt-install.sh,target=/tmp/apt-install.sh \ - --mount=type=cache,target=/var/cache/apt,sharing=locked \ - --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + --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 \ /tmp/apt-install.sh skiplang-build-deps ENV CC=clang @@ -25,8 +27,8 @@ FROM skiplang AS skip RUN --mount=type=bind,source=./bin/apt-install.sh,target=/tmp/apt-install.sh \ --mount=type=bind,source=./requirements-dev.txt,target=/tmp/requirements-dev.txt \ - --mount=type=cache,target=/var/cache/apt,sharing=locked \ - --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + --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 \ --mount=type=cache,target=/root/.cache/pip,sharing=locked \ /tmp/apt-install.sh skipruntime-deps other-CI-tools other-dev-tools diff --git a/skiplang/Dockerfile b/skiplang/Dockerfile index c76080538..71d2c441c 100644 --- a/skiplang/Dockerfile +++ b/skiplang/Dockerfile @@ -6,12 +6,13 @@ FROM debian:bookworm-20250113-slim AS base ARG LLVM_VERSION=20 +ARG TARGETARCH # Install LLVM via apt repository directly # Note: [trusted=yes] is needed because apt.llvm.org's GPG key uses SHA1 signatures # which modern Debian rejects since Feb 2026. This is an upstream LLVM issue. -RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ - --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ +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 \ apt-get update --quiet && \ apt-get install --quiet --yes --no-install-recommends ca-certificates make wget && \ echo "deb [trusted=yes] http://apt.llvm.org/bookworm/ llvm-toolchain-bookworm-${LLVM_VERSION} main" > /etc/apt/sources.list.d/llvm.list && \ diff --git a/sql/Dockerfile b/sql/Dockerfile index f1cf3e051..7b350d0df 100644 --- a/sql/Dockerfile +++ b/sql/Dockerfile @@ -1,14 +1,16 @@ FROM skiplabs/skip AS base -RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ - --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ +ARG TARGETARCH + +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 \ apt-get update && apt-get install -q -y --no-install-recommends curl sqlite3 unzip zip && \ npm install -g bun && \ npx playwright install-deps RUN sh -c 'curl -s "https://get.sdkman.io?rcupdate=false" | bash' -RUN --mount=type=cache,target=/root/.sdkman/archives,sharing=locked \ +RUN --mount=type=cache,id=sdkman-$TARGETARCH,target=/root/.sdkman/archives,sharing=locked \ bash -c "source $HOME/.sdkman/bin/sdkman-init.sh && \ sdk install gradle && \ sdk install java 20.0.2-tem"