Skip to content

Commit d92864e

Browse files
committed
chore: reduce number of layers
1 parent 0e504ff commit d92864e

1 file changed

Lines changed: 27 additions & 31 deletions

File tree

.devcontainer/cpp/Dockerfile

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ ADD --checksum=sha256:db2938ce5fd422f2db7a07508452772c945135d99274004c462190c323
3232
https://dl.cloudsmith.io/public/mull-project/mull-stable/gpg.41DB35380DE6BD6F.key /mull.gpg.key
3333
ADD --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

3640
FROM ubuntu:24.04@sha256:6015f66923d7afbc53558d7ccffd325d43b4e249f41a6e93eef074c9505d2233 AS extractor
3741

@@ -63,55 +67,47 @@ HEALTHCHECK NONE
6367

6468
SHELL ["/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
7781
RUN --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: *\nPin: origin "apt.llvm.org"\nPin-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

Comments
 (0)