Skip to content

Commit 30b2726

Browse files
authored
feat: extract common base image (#1078)
* feat: extract common base image * refactor: remove unnecessary environment variables * test: update jq query to merge added json file * ci: remove unnecessary quotes in workflow files as per review comment * ci: sync build and release build
1 parent f5056e1 commit 30b2726

23 files changed

Lines changed: 229 additions & 157 deletions

.devcontainer/base/Dockerfile

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# syntax=docker/dockerfile:1
2+
3+
FROM ubuntu:24.04@sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54 AS extractor
4+
5+
ARG BATS_CORE_VERSION=1.12.0
6+
ARG BATS_SUPPORT_VERSION=0.3.0
7+
ARG BATS_ASSERT_VERSION=2.1.0
8+
9+
ADD --checksum=sha256:e36b020436228262731e3319ed013d84fcd7c4bd97a1b34dee33d170e9ae6bab \
10+
https://github.com/bats-core/bats-core/archive/refs/tags/v${BATS_CORE_VERSION}.tar.gz /bats-core.tar.gz
11+
ADD --checksum=sha256:7815237aafeb42ddcc1b8c698fc5808026d33317d8701d5ec2396e9634e2918f \
12+
https://github.com/bats-core/bats-support/archive/refs/tags/v${BATS_SUPPORT_VERSION}.tar.gz /bats-support.tar.gz
13+
ADD --checksum=sha256:98ca3b685f8b8993e48ec057565e6e2abcc541034ed5b0e81f191505682037fd \
14+
https://github.com/bats-core/bats-assert/archive/refs/tags/v${BATS_ASSERT_VERSION}.tar.gz /bats-assert.tar.gz
15+
16+
RUN tar xzf /bats-core.tar.gz && mv bats-core-*/ bats-core \
17+
&& tar xzf /bats-support.tar.gz && mv bats-support-*/ bats-support \
18+
&& tar xzf /bats-assert.tar.gz && mv bats-assert-*/ bats-assert
19+
20+
FROM ubuntu:24.04@sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54
21+
22+
ARG DEBIAN_FRONTEND=noninteractive
23+
24+
HEALTHCHECK NONE
25+
26+
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
27+
28+
# Install the base system with all tool dependencies
29+
# hadolint ignore=DL3008
30+
RUN --mount=type=bind,source=.devcontainer/base/apt-requirements.json,target=/tmp/apt-requirements.json \
31+
--mount=type=cache,target=/var/cache/apt,sharing=locked \
32+
--mount=type=cache,target=/var/lib/apt,sharing=locked \
33+
--mount=type=cache,target=/var/log,sharing=locked \
34+
apt-get update && apt-get install -y --no-install-recommends jq \
35+
&& jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements.json | xargs apt-get install -y --no-install-recommends
36+
37+
# Include the Cisco Umbrella PKI Root
38+
RUN wget --no-hsts -qO /usr/local/share/ca-certificates/Cisco_Umbrella_Root_CA.crt https://www.cisco.com/security/pki/certs/ciscoumbrellaroot.pem \
39+
&& update-ca-certificates
40+
41+
# Install bats
42+
RUN --mount=from=extractor,target=/src \
43+
bash /src/bats-core/install.sh /usr/local \
44+
&& cp -r /src/bats-support /usr/local/bats-support \
45+
&& cp -r /src/bats-assert /usr/local/bats-assert
46+
47+
# Update all tool alternatives to the correct version
48+
# and patch root's bashrc to include bash-completion
49+
RUN --mount=type=cache,target=/var/log,sharing=locked \
50+
update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-14 20 \
51+
&& cp /etc/skel/.bashrc /root/.bashrc

.devcontainer/rust/apt-requirements-base.json renamed to .devcontainer/base/apt-requirements.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
"g++-14": "14.2.0-4ubuntu2~24.04",
55
"git": "1:2.43.0-1ubuntu7.3",
66
"gnupg2": "2.4.4-2ubuntu17.4",
7-
"rustup": "1.26.0-5build1",
87
"udev": "255.4-1ubuntu8.12",
98
"wget": "1.21.4-1ubuntu4.1",
109
"xz-utils": "5.6.1+really5.4.5-1ubuntu0.2"
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"build": {
3+
"dockerfile": "Dockerfile",
4+
"context": "../.."
5+
},
6+
"remoteEnv": {
7+
"CONTAINER_FLAVOR": "base"
8+
}
9+
}

.devcontainer/cpp/Dockerfile

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,7 @@
11
# syntax=docker/dockerfile:1
22

3-
FROM ubuntu:24.04@sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54 AS extractor
4-
5-
ARG BATS_CORE_VERSION=1.12.0
6-
ARG BATS_SUPPORT_VERSION=0.3.0
7-
ARG BATS_ASSERT_VERSION=2.1.0
8-
9-
ADD --checksum=sha256:e36b020436228262731e3319ed013d84fcd7c4bd97a1b34dee33d170e9ae6bab \
10-
https://github.com/bats-core/bats-core/archive/refs/tags/v${BATS_CORE_VERSION}.tar.gz /bats-core.tar.gz
11-
ADD --checksum=sha256:7815237aafeb42ddcc1b8c698fc5808026d33317d8701d5ec2396e9634e2918f \
12-
https://github.com/bats-core/bats-support/archive/refs/tags/v${BATS_SUPPORT_VERSION}.tar.gz /bats-support.tar.gz
13-
ADD --checksum=sha256:98ca3b685f8b8993e48ec057565e6e2abcc541034ed5b0e81f191505682037fd \
14-
https://github.com/bats-core/bats-assert/archive/refs/tags/v2.1.0.tar.gz /bats-assert.tar.gz
15-
16-
RUN tar xzf /bats-core.tar.gz && mv bats-core-*/ bats-core \
17-
&& tar xzf /bats-support.tar.gz && mv bats-support-*/ bats-support \
18-
&& tar xzf /bats-assert.tar.gz && mv bats-assert-*/ bats-assert
19-
20-
FROM ubuntu:24.04@sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54
3+
ARG BASE_IMAGE=ghcr.io/philips-software/amp-devcontainer-base:edge
4+
FROM ${BASE_IMAGE}
215

226
ARG CCACHE_VERSION=4.12
237
ARG CLANG_VERSION=19
@@ -48,12 +32,8 @@ RUN --mount=type=bind,source=.devcontainer/cpp/apt-requirements-base.json,target
4832
--mount=type=cache,target=/var/cache/apt,sharing=locked \
4933
--mount=type=cache,target=/var/lib/apt,sharing=locked \
5034
--mount=type=cache,target=/var/log,sharing=locked \
51-
apt-get update && apt-get install -y --no-install-recommends jq \
52-
&& jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements-base.json | \
53-
xargs apt-get install -y --no-install-recommends \
54-
# Include the Cisco Umbrella PKI Root
55-
&& wget --no-hsts -qO /usr/local/share/ca-certificates/Cisco_Umbrella_Root_CA.crt https://www.cisco.com/security/pki/certs/ciscoumbrellaroot.pem \
56-
&& update-ca-certificates \
35+
apt-get update \
36+
&& jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements-base.json | xargs apt-get install -y --no-install-recommends \
5737
# Install some tools via pip to get more recent versions, clean up afterwards
5838
&& python3 -m pip install --break-system-packages --require-hashes --no-cache-dir --no-compile -r /tmp/requirements.txt \
5939
&& find / -regex '^.*\(__pycache__\|\.py[co]\)$' -delete \
@@ -77,12 +57,6 @@ RUN --mount=type=bind,source=.devcontainer/cpp/apt-requirements-clang.json,targe
7757
RUN mkdir /opt/gcc-arm-none-eabi \
7858
&& wget --no-hsts -qO - "https://developer.arm.com/-/media/Files/downloads/gnu/14.2.rel1/binrel/arm-gnu-toolchain-14.2.rel1-$(uname -m)-arm-none-eabi.tar.xz" | tar --exclude='*arm-none-eabi-gdb*' --exclude='share' --strip-components=1 -xJC /opt/gcc-arm-none-eabi
7959

80-
# Install bats
81-
RUN --mount=from=extractor,target=/src \
82-
bash /src/bats-core/install.sh /usr/local \
83-
&& cp -r /src/bats-support /usr/local/bats-support \
84-
&& cp -r /src/bats-assert /usr/local/bats-assert
85-
8660
# Install xwin and ccache
8761
RUN wget --no-hsts -qO - "https://github.com/Jake-Shadle/xwin/releases/download/${XWIN_VERSION}/xwin-${XWIN_VERSION}-$(uname -m)-unknown-linux-musl.tar.gz" | tar -xzv -C /usr/local/bin --strip-components=1 "xwin-${XWIN_VERSION}-$(uname -m)-unknown-linux-musl/xwin" \
8862
&& wget --no-hsts -qO - "https://github.com/ccache/ccache/releases/download/v${CCACHE_VERSION}/ccache-${CCACHE_VERSION}-linux-$(uname -m).tar.xz" | tar -xJ -C /usr/local/bin --strip-components=1 "ccache-${CCACHE_VERSION}-linux-$(uname -m)/ccache"
Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
11
{
2-
"bash-completion": "1:2.11-8",
3-
"ca-certificates": "20240203",
4-
"g++-14": "14.2.0-4ubuntu2~24.04",
52
"gdb-multiarch": "15.0.50.20240403-0ubuntu1",
6-
"git": "1:2.43.0-1ubuntu7.3",
7-
"gnupg2": "2.4.4-2ubuntu17.4",
83
"ninja-build": "1.11.1-2",
94
"python3-pip": "24.0+dfsg-1ubuntu1.3",
10-
"udev": "255.4-1ubuntu8.12",
115
"unzip": "6.0-28ubuntu4.1",
12-
"wget": "1.21.4-1ubuntu4.1",
13-
"xsltproc": "1.1.39-0exp1ubuntu0.24.04.3",
14-
"xz-utils": "5.6.1+really5.4.5-1ubuntu0.2"
6+
"xsltproc": "1.1.39-0exp1ubuntu0.24.04.3"
157
}

.devcontainer/cpp/devcontainer.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
{
2+
"initializeCommand": "docker build -f .devcontainer/base/Dockerfile -t amp-devcontainer-base:local .",
23
"build": {
34
"dockerfile": "Dockerfile",
4-
"context": "../.."
5+
"context": "../..",
6+
"args": {
7+
"BASE_IMAGE": "amp-devcontainer-base:local"
8+
}
59
},
610
"forwardPorts": [
711
6080

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-24.04"
2+
"image": "ghcr.io/philips-software/amp-devcontainer-base"
33
}

.devcontainer/rust/Dockerfile

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

3-
FROM ubuntu:24.04@sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54 AS extractor
4-
5-
ARG BATS_CORE_VERSION=1.12.0
6-
ARG BATS_SUPPORT_VERSION=0.3.0
7-
ARG BATS_ASSERT_VERSION=2.1.0
8-
9-
ADD --checksum=sha256:e36b020436228262731e3319ed013d84fcd7c4bd97a1b34dee33d170e9ae6bab \
10-
https://github.com/bats-core/bats-core/archive/refs/tags/v${BATS_CORE_VERSION}.tar.gz /bats-core.tar.gz
11-
ADD --checksum=sha256:7815237aafeb42ddcc1b8c698fc5808026d33317d8701d5ec2396e9634e2918f \
12-
https://github.com/bats-core/bats-support/archive/refs/tags/v${BATS_SUPPORT_VERSION}.tar.gz /bats-support.tar.gz
13-
ADD --checksum=sha256:98ca3b685f8b8993e48ec057565e6e2abcc541034ed5b0e81f191505682037fd \
14-
https://github.com/bats-core/bats-assert/archive/refs/tags/v2.1.0.tar.gz /bats-assert.tar.gz
15-
16-
RUN tar xzf /bats-core.tar.gz && mv bats-core-*/ bats-core \
17-
&& tar xzf /bats-support.tar.gz && mv bats-support-*/ bats-support \
18-
&& tar xzf /bats-assert.tar.gz && mv bats-assert-*/ bats-assert
19-
20-
FROM ubuntu:24.04@sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54
3+
ARG BASE_IMAGE=ghcr.io/philips-software/amp-devcontainer-base:edge
4+
FROM ${BASE_IMAGE}
215

226
ARG CARGO_BINSTALL_VERSION=1.15.11
237
ARG RUST_VERSION=1.91.1
@@ -30,40 +14,25 @@ SHELL ["/bin/bash", "-o", "pipefail", "-c"]
3014

3115
# Install the base system with all tool dependencies
3216
# hadolint ignore=DL3008
33-
RUN --mount=type=bind,source=.devcontainer/rust/apt-requirements-base.json,target=/tmp/apt-requirements-base.json \
17+
RUN --mount=type=bind,source=.devcontainer/rust/apt-requirements.json,target=/tmp/apt-requirements.json \
3418
--mount=type=cache,target=/var/cache/apt,sharing=locked \
3519
--mount=type=cache,target=/var/lib/apt,sharing=locked \
3620
--mount=type=cache,target=/var/log,sharing=locked \
37-
apt-get update && apt-get install -y --no-install-recommends jq \
38-
&& jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements-base.json | xargs apt-get install -y --no-install-recommends
39-
40-
# Include the Cisco Umbrella PKI Root
41-
RUN wget -qO /usr/local/share/ca-certificates/Cisco_Umbrella_Root_CA.crt https://www.cisco.com/security/pki/certs/ciscoumbrellaroot.pem \
42-
&& update-ca-certificates
21+
apt-get update \
22+
&& jq -r 'to_entries | .[] | .key + "=" + .value' /tmp/apt-requirements.json | xargs apt-get install -y --no-install-recommends
4323

4424
# Install rust
4525
ENV BINSTALL_DISABLE_TELEMETRY=true \
4626
CARGO_HOME=/usr/local/cargo \
4727
RUSTUP_HOME=/usr/local/rustup \
4828
PATH=/usr/local/cargo/bin:"$PATH"
29+
4930
RUN rustup set profile minimal \
5031
&& rustup default ${RUST_VERSION} \
5132
&& rustup component add clippy llvm-tools rustfmt \
5233
&& rustup target add thumbv7em-none-eabi \
5334
&& rustup target add thumbv7em-none-eabihf
5435

55-
# Install bats
56-
RUN --mount=from=extractor,target=/src \
57-
bash /src/bats-core/install.sh /usr/local \
58-
&& cp -r /src/bats-support /usr/local/bats-support \
59-
&& cp -r /src/bats-assert /usr/local/bats-assert
60-
61-
# Update all tool alternatives to the correct version
62-
# and patch root's bashrc to include bash-completion
63-
RUN --mount=type=cache,target=/var/log,sharing=locked \
64-
update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-14 20 \
65-
&& cp /etc/skel/.bashrc /root/.bashrc
66-
6736
# Install additional rust tools
6837
RUN wget -qO - "https://github.com/cargo-bins/cargo-binstall/releases/download/v${CARGO_BINSTALL_VERSION}/cargo-binstall-$(uname -m)-unknown-linux-gnu.tgz" | tar xz -C "/usr/bin" \
6938
&& cargo-binstall -y --locked cargo-binutils@0.3.6 cargo-mutants@25.3.1 flip-link@0.1.12 probe-rs-tools@0.30.0
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"rustup": "1.26.0-5build1"
3+
}

.devcontainer/rust/devcontainer.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
{
2+
"initializeCommand": "docker build -f .devcontainer/base/Dockerfile -t amp-devcontainer-base:local .",
23
"build": {
34
"dockerfile": "Dockerfile",
4-
"context": "../.."
5+
"context": "../..",
6+
"args": {
7+
"BASE_IMAGE": "amp-devcontainer-base:local"
8+
}
59
},
610
"privileged": true,
711
"remoteEnv": {

0 commit comments

Comments
 (0)