From a72bf212ec99b9d677007f61efdc8150d89cb112 Mon Sep 17 00:00:00 2001 From: Radostin Stoyanov Date: Tue, 3 Mar 2026 21:24:56 +0000 Subject: [PATCH] scripts: improve layer caching of container builds The scripts installing dependencies are now copied and executed before copying the full source tree. This allows to cache the dependency installation layers as long as these scripts remain unchanged. Previously, copying the entire repository invalidated the cache on every source change. While our CI intentionally doesn't preserve cached layers across independent runs, the changes in this patch help with local testing when investigating issues. Examples: - sudo -E make -C scripts/ci alpine GCC=1 - sudo -E make -C scripts/ci alpine CLANG=1 Suggested-by: Andrei Vagin Signed-off-by: Radostin Stoyanov --- scripts/build/Dockerfile.alpine | 5 +++-- scripts/build/Dockerfile.archlinux | 5 +++-- scripts/build/Dockerfile.fedora.tmpl | 7 +++++-- scripts/build/Dockerfile.hotspot-alpine | 5 +++-- scripts/build/Dockerfile.hotspot-ubuntu | 6 ++++-- scripts/build/Dockerfile.linux32.tmpl | 6 ++++-- scripts/build/Dockerfile.openj9-ubuntu | 8 +++++--- scripts/build/Dockerfile.riscv64-stable-cross.tmpl | 6 ++++-- scripts/build/Dockerfile.stable-cross.tmpl | 6 ++++-- scripts/build/Dockerfile.tmpl | 10 ++++++---- scripts/build/Dockerfile.unstable-cross.tmpl | 6 ++++-- 11 files changed, 45 insertions(+), 25 deletions(-) diff --git a/scripts/build/Dockerfile.alpine b/scripts/build/Dockerfile.alpine index ed883f300..166b681d0 100644 --- a/scripts/build/Dockerfile.alpine +++ b/scripts/build/Dockerfile.alpine @@ -1,11 +1,12 @@ FROM alpine ARG CC=gcc +COPY contrib/dependencies/apk-packages.sh /criu/contrib/dependencies/apk-packages.sh +RUN apk add --no-cache "$CC" && /criu/contrib/dependencies/apk-packages.sh + COPY . /criu WORKDIR /criu -RUN apk add --no-cache "$CC" && /criu/contrib/dependencies/apk-packages.sh - RUN make mrproper && date && make -j $(nproc) CC="$CC" && date # The rpc test cases are running as user #1000, let's add the user diff --git a/scripts/build/Dockerfile.archlinux b/scripts/build/Dockerfile.archlinux index 261bd2d79..812ad8978 100644 --- a/scripts/build/Dockerfile.archlinux +++ b/scripts/build/Dockerfile.archlinux @@ -5,10 +5,11 @@ ARG CC=gcc # Initialize machine ID RUN systemd-machine-id-setup -COPY . /criu +COPY contrib/dependencies/pacman-packages.sh /criu/contrib/dependencies/pacman-packages.sh WORKDIR /criu +RUN pacman -Syu --noconfirm "$CC" && /criu/contrib/dependencies/pacman-packages.sh -RUN pacman -Syu --noconfirm "$CC" && contrib/dependencies/pacman-packages.sh +COPY . /criu RUN make mrproper && date && make -j $(nproc) CC="$CC" && date diff --git a/scripts/build/Dockerfile.fedora.tmpl b/scripts/build/Dockerfile.fedora.tmpl index c26a5fd57..51349fb24 100644 --- a/scripts/build/Dockerfile.fedora.tmpl +++ b/scripts/build/Dockerfile.fedora.tmpl @@ -1,9 +1,12 @@ ARG CC=gcc -COPY . /criu +COPY contrib/dependencies/dnf-packages.sh /criu/contrib/dependencies/dnf-packages.sh +COPY scripts/ci/prepare-for-fedora-rawhide.sh /criu/scripts/ci/prepare-for-fedora-rawhide.sh +# prepare-for-fedora-rawhide.sh assumes we are in the criu directory WORKDIR /criu +RUN dnf install -y "$CC" && /criu/scripts/ci/prepare-for-fedora-rawhide.sh -RUN dnf install -y "$CC" && scripts/ci/prepare-for-fedora-rawhide.sh +COPY . /criu RUN make mrproper && date && make -j $(nproc) CC="$CC" && date diff --git a/scripts/build/Dockerfile.hotspot-alpine b/scripts/build/Dockerfile.hotspot-alpine index cd632dddf..0aab3c02e 100644 --- a/scripts/build/Dockerfile.hotspot-alpine +++ b/scripts/build/Dockerfile.hotspot-alpine @@ -1,10 +1,11 @@ FROM docker.io/library/eclipse-temurin:11-alpine ARG CC=gcc -COPY . /criu +COPY contrib/dependencies/apk-packages.sh /criu/contrib/dependencies/apk-packages.sh WORKDIR /criu +RUN apk add --no-cache maven "$CC" && /criu/contrib/dependencies/apk-packages.sh -RUN apk add --no-cache maven "$CC" && contrib/dependencies/apk-packages.sh +COPY . /criu RUN make mrproper && make -j $(nproc) CC="$CC" diff --git a/scripts/build/Dockerfile.hotspot-ubuntu b/scripts/build/Dockerfile.hotspot-ubuntu index a459e1ec7..ef06d1598 100644 --- a/scripts/build/Dockerfile.hotspot-ubuntu +++ b/scripts/build/Dockerfile.hotspot-ubuntu @@ -1,10 +1,12 @@ FROM docker.io/library/eclipse-temurin:11-jammy ARG CC=gcc -COPY . /criu +COPY contrib/dependencies/apt-packages.sh /criu/contrib/dependencies/apt-packages.sh +COPY contrib/apt-install /criu/contrib/apt-install WORKDIR /criu +RUN /criu/contrib/apt-install maven "$CC" && contrib/dependencies/apt-packages.sh -RUN contrib/apt-install maven "$CC" && contrib/dependencies/apt-packages.sh +COPY . /criu RUN make mrproper && make -j $(nproc) CC="$CC" diff --git a/scripts/build/Dockerfile.linux32.tmpl b/scripts/build/Dockerfile.linux32.tmpl index a37f16e49..ac089229a 100644 --- a/scripts/build/Dockerfile.linux32.tmpl +++ b/scripts/build/Dockerfile.linux32.tmpl @@ -1,9 +1,11 @@ ARG CC=gcc -COPY . /criu +COPY contrib/dependencies/apt-cross-packages.sh /criu/contrib/dependencies/apt-cross-packages.sh +COPY contrib/apt-install /criu/contrib/apt-install WORKDIR /criu +RUN /criu/contrib/apt-install "$CC" && /criu/contrib/dependencies/apt-packages.sh -RUN contrib/apt-install "$CC" && contrib/dependencies/apt-packages.sh +COPY . /criu RUN uname -m && setarch linux32 uname -m && setarch --list diff --git a/scripts/build/Dockerfile.openj9-ubuntu b/scripts/build/Dockerfile.openj9-ubuntu index 18664f100..d78e3cfb4 100644 --- a/scripts/build/Dockerfile.openj9-ubuntu +++ b/scripts/build/Dockerfile.openj9-ubuntu @@ -1,11 +1,13 @@ FROM docker.io/library/ibm-semeru-runtimes:open-11-jdk-jammy ARG CC=gcc +COPY contrib/dependencies/apt-packages.sh /criu/contrib/dependencies/apt-packages.sh +COPY contrib/apt-install /criu/contrib/apt-install +WORKDIR /criu +RUN /criu/contrib/apt-install maven "$CC" && /criu/contrib/dependencies/apt-packages.sh + RUN mkdir -p /etc/criu && echo 'ghost-limit 16777216' > /etc/criu/default.conf COPY . /criu -WORKDIR /criu - -RUN contrib/apt-install maven "$CC" && contrib/dependencies/apt-packages.sh RUN make mrproper && make -j $(nproc) CC="$CC" diff --git a/scripts/build/Dockerfile.riscv64-stable-cross.tmpl b/scripts/build/Dockerfile.riscv64-stable-cross.tmpl index 8933a6c82..ee1ea2fa5 100644 --- a/scripts/build/Dockerfile.riscv64-stable-cross.tmpl +++ b/scripts/build/Dockerfile.riscv64-stable-cross.tmpl @@ -23,9 +23,11 @@ ENV CROSS_COMPILE=${CROSS_TRIPLET}- \ ENV PATH="${PATH}:${CROSS_ROOT}/bin" \ PKG_CONFIG_PATH=/usr/lib/${CROSS_TRIPLET}/pkgconfig -COPY . /criu +COPY contrib/dependencies/apt-cross-packages.sh /criu/contrib/dependencies/apt-cross-packages.sh +COPY contrib/apt-install /criu/contrib/apt-install WORKDIR /criu +RUN /criu/contrib/dependencies/apt-cross-packages.sh -RUN contrib/dependencies/apt-cross-packages.sh +COPY . /criu RUN make mrproper && date && make -j $(nproc) zdtm && date diff --git a/scripts/build/Dockerfile.stable-cross.tmpl b/scripts/build/Dockerfile.stable-cross.tmpl index 56104081f..feb551203 100644 --- a/scripts/build/Dockerfile.stable-cross.tmpl +++ b/scripts/build/Dockerfile.stable-cross.tmpl @@ -15,10 +15,12 @@ ENV CROSS_COMPILE=${CROSS_TRIPLET}- \ ENV PATH="${PATH}:${CROSS_ROOT}/bin" \ PKG_CONFIG_PATH=/usr/lib/${CROSS_TRIPLET}/pkgconfig -COPY . /criu +COPY contrib/dependencies/apt-cross-packages.sh /criu/contrib/dependencies/apt-cross-packages.sh +COPY contrib/apt-install /criu/contrib/apt-install WORKDIR /criu +RUN /criu/contrib/dependencies/apt-cross-packages.sh -RUN contrib/dependencies/apt-cross-packages.sh +COPY . /criu # amdgpu_plugin with armv7 is not supported RUN make mrproper && date && \ diff --git a/scripts/build/Dockerfile.tmpl b/scripts/build/Dockerfile.tmpl index 498b99be9..fa7fa3a04 100644 --- a/scripts/build/Dockerfile.tmpl +++ b/scripts/build/Dockerfile.tmpl @@ -1,11 +1,13 @@ ARG CC=gcc -COPY . /criu -WORKDIR /criu - # On Ubuntu, kernel modules such as ip_tables and xt_mark may not be loaded by default # We need to install kmod to enable iptables to load these modules for us. -RUN contrib/apt-install "$CC" && contrib/dependencies/apt-packages.sh +COPY contrib/dependencies/apt-packages.sh /criu/contrib/dependencies/apt-packages.sh +COPY contrib/apt-install /criu/contrib/apt-install +WORKDIR /criu +RUN /criu/contrib/apt-install "$CC" && /criu/contrib/dependencies/apt-packages.sh + +COPY . /criu RUN git clean -dfx && date && \ # Check single object build diff --git a/scripts/build/Dockerfile.unstable-cross.tmpl b/scripts/build/Dockerfile.unstable-cross.tmpl index 7edb289b6..4aa009f22 100644 --- a/scripts/build/Dockerfile.unstable-cross.tmpl +++ b/scripts/build/Dockerfile.unstable-cross.tmpl @@ -15,9 +15,11 @@ ENV CROSS_COMPILE=${CROSS_TRIPLET}- \ ENV PATH="${PATH}:${CROSS_ROOT}/bin" \ PKG_CONFIG_PATH=/usr/lib/${CROSS_TRIPLET}/pkgconfig -COPY . /criu +COPY contrib/dependencies/apt-cross-packages.sh /criu/contrib/dependencies/apt-cross-packages.sh +COPY contrib/apt-install /criu/contrib/apt-install WORKDIR /criu +RUN /criu/contrib/dependencies/apt-cross-packages.sh -RUN contrib/dependencies/apt-cross-packages.sh +COPY . /criu RUN make mrproper && date && make -j $(nproc) zdtm && date