Skip to content

Commit 0e504ff

Browse files
committed
chore: hoist-up bats installation
1 parent a448ac3 commit 0e504ff

1 file changed

Lines changed: 17 additions & 15 deletions

File tree

.devcontainer/cpp/Dockerfile

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# syntax=docker/dockerfile:1
22

3+
ARG BATS_VERSION=1.12.0
34
ARG DOCKER_VERSION=28.2.2
45
ARG XWIN_VERSION=0.6.5
56

@@ -24,30 +25,33 @@ ADD --checksum=sha256:5e131007fad7c5f30d2f41090b49937fb8f16a787e5a95b4b3140e88d1
2425
https://github.com/Jake-Shadle/xwin/releases/download/${XWIN_VERSION}/xwin-${XWIN_VERSION}-aarch64-unknown-linux-musl.tar.gz /xwin.tar.gz
2526

2627
FROM downloader-$TARGETARCH AS downloader
28+
ARG BATS_VERSION
2729
ADD --checksum=sha256:ce6eee4130298f79b0e0f09a89f93c1bc711cd68e7e3182d37c8e96c5227e2f0 \
2830
https://apt.llvm.org/llvm-snapshot.gpg.key /llvm.gpg.key
2931
ADD --checksum=sha256:db2938ce5fd422f2db7a07508452772c945135d99274004c462190c323fefcf1 \
3032
https://dl.cloudsmith.io/public/mull-project/mull-stable/gpg.41DB35380DE6BD6F.key /mull.gpg.key
33+
ADD --checksum=sha256:e36b020436228262731e3319ed013d84fcd7c4bd97a1b34dee33d170e9ae6bab \
34+
https://github.com/bats-core/bats-core/archive/refs/tags/v${BATS_VERSION}.tar.gz /bats-core.tar.gz
3135

3236
FROM ubuntu:24.04@sha256:6015f66923d7afbc53558d7ccffd325d43b4e249f41a6e93eef074c9505d2233 AS extractor
3337

3438
ARG XWIN_VERSION
3539

36-
WORKDIR /tmp
40+
WORKDIR /
3741

3842
# hadolint ignore=DL3008
3943
RUN --mount=from=downloader,target=/dl \
4044
--mount=type=cache,target=/var/cache/apt,sharing=locked \
4145
--mount=type=cache,target=/var/lib/apt,sharing=locked \
4246
apt-get update && apt-get install -y --no-install-recommends xz-utils \
47+
&& tar xzf /dl/bats-core.tar.gz && mv bats-core-*/ bats-core \
4348
&& tar xzf /dl/docker.tgz \
4449
&& tar xzf /dl/xwin.tar.gz --strip-components=1 "xwin-${XWIN_VERSION}-$(uname -m)-unknown-linux-musl/xwin" \
4550
&& tar xJf /dl/arm-gnu-toolchain.tar.xz --exclude='*arm-none-eabi-gdb*' --exclude='share' \
4651
&& mv arm-gnu-toolchain-*/ gcc-arm-none-eabi
4752

4853
FROM ubuntu:24.04@sha256:6015f66923d7afbc53558d7ccffd325d43b4e249f41a6e93eef074c9505d2233
4954

50-
ARG BATS_VERSION=1.11.0
5155
ARG CCACHE_VERSION=4.11
5256
ARG CLANG_VERSION=18
5357
ARG CPM_VERSION=0.40.2
@@ -59,22 +63,28 @@ HEALTHCHECK NONE
5963

6064
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
6165

62-
# Include the Cisco Umbrella PKI Root
66+
# Add the Cisco Umbrella PKI Root
6367
ADD --checksum=sha256:a122d4080a26c1da986bd0e7202b1630eb661a624915ef244f496fdd306e85fb \
6468
https://www.cisco.com/security/pki/certs/ciscoumbrellaroot.pem /usr/local/share/ca-certificates/cisco-umbrella.crt
6569

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
73+
6674
# Install the base system with all tool dependencies
6775
# Some tools are installed via pip to get more recent versions
6876
# hadolint ignore=DL3008
6977
RUN --mount=type=bind,source=.devcontainer/cpp/apt-requirements-base.json,target=/tmp/apt-requirements-base.json \
7078
--mount=type=bind,source=.devcontainer/cpp/requirements.txt,target=/tmp/requirements.txt \
7179
--mount=type=cache,target=/var/cache/apt,sharing=locked \
7280
--mount=type=cache,target=/var/lib/apt,sharing=locked \
81+
--mount=from=extractor,target=/src \
7382
apt-get update && apt-get install -y --no-install-recommends jq \
7483
&& jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements-base.json | \
7584
xargs apt-get install -y --no-install-recommends \
7685
&& update-ca-certificates \
77-
&& python3 -m pip install --break-system-packages --require-hashes --no-cache-dir -r /tmp/requirements.txt
86+
&& 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
7888

7989
# Set default environment options for CMake and ccache
8090
ENV CMAKE_GENERATOR="Ninja"
@@ -99,17 +109,9 @@ ENV PATH="$PATH:/usr/lib/llvm-${CLANG_VERSION}/bin"
99109
ENV PATH="$PATH:/opt/gcc-arm-none-eabi/bin"
100110

101111
# Copy tools from the extractor stage
102-
COPY --from=extractor /tmp/docker/docker /usr/local/bin
103-
COPY --from=extractor /tmp/xwin /usr/local/bin/xwin
104-
COPY --from=extractor /tmp/gcc-arm-none-eabi /opt/gcc-arm-none-eabi
105-
106-
# Install bats
107-
RUN batstmp="$(mktemp -d /tmp/bats-core-${BATS_VERSION}.XXXX)" \
108-
&& wget -qO - https://github.com/bats-core/bats-core/archive/refs/tags/v${BATS_VERSION}.tar.gz | tar xz -C "${batstmp}" \
109-
&& bash "${batstmp}/bats-core-${BATS_VERSION}/install.sh" /usr/local \
110-
&& rm -rf "${batstmp}" \
111-
&& git -C /usr/local clone -b v0.3.0 https://github.com/bats-core/bats-support.git \
112-
&& git -C /usr/local clone -b v2.1.0 https://github.com/bats-core/bats-assert.git
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
113115

114116
# Compile and install additional clang tools; often necessary as binary arm64 builds are lacking, or packages are out-of-date
115117
# Install ccache from source for a recent version

0 commit comments

Comments
 (0)