11# syntax=docker/dockerfile:1
22
3+ ARG BATS_VERSION=1.12.0
34ARG DOCKER_VERSION=28.2.2
45ARG 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
2627FROM downloader-$TARGETARCH AS downloader
28+ ARG BATS_VERSION
2729ADD --checksum=sha256:ce6eee4130298f79b0e0f09a89f93c1bc711cd68e7e3182d37c8e96c5227e2f0 \
2830 https://apt.llvm.org/llvm-snapshot.gpg.key /llvm.gpg.key
2931ADD --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
3236FROM ubuntu:24.04@sha256:6015f66923d7afbc53558d7ccffd325d43b4e249f41a6e93eef074c9505d2233 AS extractor
3337
3438ARG XWIN_VERSION
3539
36- WORKDIR /tmp
40+ WORKDIR /
3741
3842# hadolint ignore=DL3008
3943RUN --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
4853FROM ubuntu:24.04@sha256:6015f66923d7afbc53558d7ccffd325d43b4e249f41a6e93eef074c9505d2233
4954
50- ARG BATS_VERSION=1.11.0
5155ARG CCACHE_VERSION=4.11
5256ARG CLANG_VERSION=18
5357ARG CPM_VERSION=0.40.2
@@ -59,22 +63,28 @@ HEALTHCHECK NONE
5963
6064SHELL ["/bin/bash" , "-o" , "pipefail" , "-c" ]
6165
62- # Include the Cisco Umbrella PKI Root
66+ # Add the Cisco Umbrella PKI Root
6367ADD --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
6977RUN --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
8090ENV CMAKE_GENERATOR="Ninja"
@@ -99,17 +109,9 @@ ENV PATH="$PATH:/usr/lib/llvm-${CLANG_VERSION}/bin"
99109ENV 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