@@ -32,6 +32,10 @@ ADD --checksum=sha256:db2938ce5fd422f2db7a07508452772c945135d99274004c462190c323
3232 https://dl.cloudsmith.io/public/mull-project/mull-stable/gpg.41DB35380DE6BD6F.key /mull.gpg.key
3333ADD --checksum=sha256:e36b020436228262731e3319ed013d84fcd7c4bd97a1b34dee33d170e9ae6bab \
3434 https://github.com/bats-core/bats-core/archive/refs/tags/v${BATS_VERSION}.tar.gz /bats-core.tar.gz
35+ ADD --checksum=sha256:a122d4080a26c1da986bd0e7202b1630eb661a624915ef244f496fdd306e85fb \
36+ https://www.cisco.com/security/pki/certs/ciscoumbrellaroot.pem /cisco-umbrella.crt
37+ ADD https://github.com/bats-core/bats-support#v0.3.0 /
38+ ADD https://github.com/bats-core/bats-assert#v2.1.0 /
3539
3640FROM ubuntu:24.04@sha256:6015f66923d7afbc53558d7ccffd325d43b4e249f41a6e93eef074c9505d2233 AS extractor
3741
@@ -63,55 +67,47 @@ HEALTHCHECK NONE
6367
6468SHELL ["/bin/bash" , "-o" , "pipefail" , "-c" ]
6569
66- # Add the Cisco Umbrella PKI Root
67- ADD --checksum=sha256:a122d4080a26c1da986bd0e7202b1630eb661a624915ef244f496fdd306e85fb \
68- https://www.cisco.com/security/pki/certs/ciscoumbrellaroot.pem /usr/local/share/ca-certificates/cisco-umbrella.crt
69-
70- # Add additional tools for bats testing framework
71- ADD https://github.com/bats-core/bats-support#v0.3.0 /usr/local
72- ADD https://github.com/bats-core/bats-assert#v2.1.0 /usr/local
70+ # Set default environment options for CMake, ccache, and CPM
71+ # and update the PATH to include the toolchain binaries
72+ ENV CMAKE_GENERATOR= "Ninja" \
73+ CMAKE_EXPORT_COMPILE_COMMANDS= "On" \
74+ CCACHE_DIR=/cache/.ccache \
75+ CPM_SOURCE_CACHE=/cache/.cpm-cache \
76+ PATH= "$PATH:/usr/lib/llvm-${CLANG_VERSION}/bin:/opt/gcc-arm-none-eabi/bin"
7377
7478# Install the base system with all tool dependencies
7579# Some tools are installed via pip to get more recent versions
7680# hadolint ignore=DL3008
7781RUN --mount=type=bind,source=.devcontainer/cpp/apt-requirements-base.json,target=/tmp/apt-requirements-base.json \
82+ --mount=type=bind,source=.devcontainer/cpp/apt-requirements-clang.json,target=/tmp/apt-requirements-clang.json \
7883 --mount=type=bind,source=.devcontainer/cpp/requirements.txt,target=/tmp/requirements.txt \
7984 --mount=type=cache,target=/var/cache/apt,sharing=locked \
8085 --mount=type=cache,target=/var/lib/apt,sharing=locked \
86+ --mount=from=downloader,target=/dl \
8187 --mount=from=extractor,target=/src \
8288 apt-get update && apt-get install -y --no-install-recommends jq \
8389 && jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements-base.json | \
8490 xargs apt-get install -y --no-install-recommends \
91+ && cp /dl/cisco-umbrella.crt /usr/local/share/ca-certificates/cisco-umbrella.crt \
8592 && update-ca-certificates \
8693 && python3 -m pip install --break-system-packages --require-hashes --no-cache-dir -r /tmp/requirements.txt \
87- && bash /src/bats-core/install.sh /usr/local
88-
89- # Set default environment options for CMake and ccache
90- ENV CMAKE_GENERATOR="Ninja"
91- ENV CMAKE_EXPORT_COMPILE_COMMANDS="On"
92- ENV CCACHE_DIR=/cache/.ccache
93- ENV CPM_SOURCE_CACHE=/cache/.cpm-cache
94-
95- # Install clang toolchain and mull mutation testing framework
96- # hadolint ignore=SC1091
97- RUN --mount=type=bind,source=.devcontainer/cpp/apt-requirements-clang.json,target=/tmp/apt-requirements-clang.json \
98- --mount=from=downloader,target=/keys \
99- cat /keys/llvm.gpg.key | gpg --dearmor -o /usr/share/keyrings/llvm-snapshot-keyring.gpg \
100- && cat /keys/mull.gpg.key | gpg --dearmor -o /usr/share/keyrings/mull-project-mull-stable-archive-keyring.gpg \
101- && UBUNTU_CODENAME=$(. /etc/os-release; echo "${UBUNTU_CODENAME/*, /}" ) \
94+ # Copy and install tools from the extractor stage
95+ && bash /src/bats-core/install.sh /usr/local \
96+ && cp -r /dl/bats-support /usr/local/bats-support \
97+ && cp -r /dl/bats-assert /usr/local/bats-assert \
98+ && cp /src/docker/docker /usr/local/bin \
99+ && cp /src/xwin /usr/local/bin/xwin \
100+ && cp -r /src/gcc-arm-none-eabi /opt/gcc-arm-none-eabi \
101+ # Install clang toolchain and mull mutation testing framework
102+ && cat /dl/llvm.gpg.key | gpg --dearmor -o /usr/share/keyrings/llvm-snapshot-keyring.gpg \
103+ && cat /dl/mull.gpg.key | gpg --dearmor -o /usr/share/keyrings/mull-project-mull-stable-archive-keyring.gpg \
104+ && UBUNTU_CODENAME=$(grep '^UBUNTU_CODENAME=' /etc/os-release | cut -d= -f2) \
102105 && 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 \
103106 && 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 \
104107 && echo -e 'Package: *\n Pin: origin "apt.llvm.org"\n Pin-Priority: 1000' > /etc/apt/preferences \
105108 && apt-get update \
106- && jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements-clang.json | xargs apt-get install -y --no-install-recommends \
107- && rm -rf /var/cache/apt/archives /var/lib/apt/lists/*
108- ENV PATH="$PATH:/usr/lib/llvm-${CLANG_VERSION}/bin"
109- ENV PATH="$PATH:/opt/gcc-arm-none-eabi/bin"
110-
111- # Copy tools from the extractor stage
112- COPY --from=extractor /docker/docker /usr/local/bin
113- COPY --from=extractor /xwin /usr/local/bin/xwin
114- COPY --from=extractor /gcc-arm-none-eabi /opt/gcc-arm-none-eabi
109+ && jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements-clang.json | \
110+ xargs apt-get install -y --no-install-recommends
115111
116112# Compile and install additional clang tools; often necessary as binary arm64 builds are lacking, or packages are out-of-date
117113# Install ccache from source for a recent version
0 commit comments