@@ -14,21 +14,21 @@ HEALTHCHECK NONE
1414SHELL ["/bin/bash" , "-o" , "pipefail" , "-c" ]
1515
1616# Install the base system with all tool dependencies
17- COPY .devcontainer/cpp/apt-requirements-base.json /tmp/apt-requirements-base.json
1817# hadolint ignore=DL3008
19- RUN apt-get update && apt-get install -y --no-install-recommends jq \
20- && jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements-base.json | xargs apt-get install -y --no-install-recommends \
21- && rm /tmp/apt-requirements-base.json \
22- && rm -rf /var/lib/apt/lists/*
18+ RUN --mount=type=bind,source=.devcontainer/cpp/apt-requirements-base.json,target=/tmp/apt-requirements-base.json \
19+ --mount=type=cache,target=/var/cache/apt,sharing=locked \
20+ --mount=type=cache,target=/var/lib/apt,sharing=locked \
21+ --mount=type=cache,target=/var/log,sharing=locked \
22+ apt-get update && apt-get install -y --no-install-recommends jq \
23+ && jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements-base.json | xargs apt-get install -y --no-install-recommends
2324
2425# Include the Cisco Umbrella PKI Root
2526RUN wget -qO /usr/local/share/ca-certificates/Cisco_Umbrella_Root_CA.crt https://www.cisco.com/security/pki/certs/ciscoumbrellaroot.pem \
2627 && update-ca-certificates
2728
2829# Install some tools via pip to get more recent versions
29- COPY .devcontainer/cpp/requirements.txt /tmp/requirements.txt
30- RUN python3 -m pip install --break-system-packages --require-hashes --no-cache-dir -r /tmp/requirements.txt \
31- && rm -rf /tmp/requirements.txt
30+ RUN --mount=type=bind,source=.devcontainer/cpp/requirements.txt,target=/tmp/requirements.txt \
31+ python3 -m pip install --break-system-packages --require-hashes --no-cache-dir -r /tmp/requirements.txt
3232
3333# Set default environment options for CMake and ccache
3434ENV CCACHE_DIR=/cache/.ccache \
@@ -38,18 +38,19 @@ ENV CCACHE_DIR=/cache/.ccache \
3838 CPM_SOURCE_CACHE=/cache/.cpm-cache
3939
4040# Install clang toolchain and mull mutation testing framework
41- COPY .devcontainer/cpp/apt-requirements-clang.json /tmp/apt-requirements-clang.json
42- # hadolint ignore=SC1091
43- RUN wget -qO - https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /usr/share/keyrings/llvm-snapshot-keyring.gpg \
41+ RUN --mount=type=bind,source=.devcontainer/cpp/apt-requirements-clang.json,target=/tmp/apt-requirements-clang.json \
42+ --mount=type=cache,target=/var/cache/apt,sharing=locked \
43+ --mount=type=cache,target=/var/lib/apt,sharing=locked \
44+ --mount=type=cache,target=/var/log,sharing=locked \
45+ --mount=type=cache,target=/tmp,sharing=locked,mode=1777 \
46+ wget -qO - https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /usr/share/keyrings/llvm-snapshot-keyring.gpg \
4447 && wget -qO - https://dl.cloudsmith.io/public/mull-project/mull-stable/gpg.41DB35380DE6BD6F.key | gpg --dearmor -o /usr/share/keyrings/mull-project-mull-stable-archive-keyring.gpg \
45- && UBUNTU_CODENAME=$(. /etc/os-release; echo "${UBUNTU_CODENAME/*, /}" ) \
48+ && UBUNTU_CODENAME=$(grep '^UBUNTU_CODENAME=' /etc/os-release | cut -d= -f2 ) \
4649 && echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot-keyring.gpg] http://apt.llvm.org/${UBUNTU_CODENAME}/ llvm-toolchain-${UBUNTU_CODENAME}-${CLANG_VERSION} main" | tee /etc/apt/sources.list.d/llvm.list > /dev/null \
4750 && echo "deb [signed-by=/usr/share/keyrings/mull-project-mull-stable-archive-keyring.gpg] https://dl.cloudsmith.io/public/mull-project/mull-stable/deb/ubuntu ${UBUNTU_CODENAME} main" | tee /etc/apt/sources.list.d/mull-project-mull-stable.list > /dev/null \
4851 && echo -e 'Package: *\n Pin: origin "apt.llvm.org"\n Pin-Priority: 1000' > /etc/apt/preferences \
4952 && apt-get update \
50- && jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements-clang.json | xargs apt-get install -y --no-install-recommends \
51- && rm /tmp/apt-requirements* \
52- && rm -rf /var/lib/apt/lists/*
53+ && jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements-clang.json | xargs apt-get install -y --no-install-recommends
5354ENV PATH="$PATH:/usr/lib/llvm-${CLANG_VERSION}/bin"
5455
5556# Install arm-gcc toolchain
@@ -78,19 +79,21 @@ RUN wget -qO - https://github.com/ccache/ccache/archive/refs/tags/v${CCACHE_VERS
7879# Install include-what-you-use (iwyu) from source
7980# hadolint ignore=DL3008
8081RUN --mount=type=cache,target=/root/.ccache,sharing=locked \
82+ --mount=type=cache,target=/var/cache/apt,sharing=locked \
83+ --mount=type=cache,target=/var/lib/apt,sharing=locked \
8184 apt-get update && apt-get install -y --no-install-recommends libclang-${CLANG_VERSION}-dev llvm-${CLANG_VERSION}-dev \
8285 && wget -qO - https://github.com/include-what-you-use/include-what-you-use/archive/refs/tags/${INCLUDE_WHAT_YOU_USE_VERSION}.tar.gz | tar xz -C /tmp \
8386 && CC=clang CXX=clang++ cmake -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -S /tmp/include-what-you-use-${INCLUDE_WHAT_YOU_USE_VERSION} -B /tmp/include-what-you-use-${INCLUDE_WHAT_YOU_USE_VERSION}/build \
8487 && cmake --build /tmp/include-what-you-use-${INCLUDE_WHAT_YOU_USE_VERSION}/build --target install \
8588 && rm -rf /tmp/include-what-you-use-${INCLUDE_WHAT_YOU_USE_VERSION} \
86- && apt-get purge -y libclang-${CLANG_VERSION}-dev llvm-${CLANG_VERSION}-dev libsqlite3-dev \
89+ && apt-get purge -y libclang-${CLANG_VERSION}-dev llvm-${CLANG_VERSION}-dev \
8790 && apt-get autoremove -y \
88- && apt-get clean \
89- && rm -rf /var/lib/apt/lists/*
91+ && apt-get clean
9092
9193# Update all tool alternatives to the correct version
9294# and patch root's bashrc to include bash-completion
93- RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 10 \
95+ RUN --mount=type=cache,target=/var/log,sharing=locked \
96+ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 10 \
9497 --slave /usr/bin/g++ g++ /usr/bin/g++-14 \
9598 --slave /usr/bin/gcov gcov /usr/bin/gcov-14 \
9699 && update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-14 10 \
0 commit comments