From 3c2a4d48a9fa86bce603020b81dd152c122c874b Mon Sep 17 00:00:00 2001 From: William Sciaroni Date: Tue, 31 Mar 2026 06:20:31 -0500 Subject: [PATCH] Update Dockerfile and Devcontainer. (#1360) * Print test names at test time (#1343) * Remove python3-cogapp from Dockerfile Removed python3-cogapp from the Dockerfile installation. * Update .devcontainer/Dockerfile Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Change base image and update Python package installation * Change container to use cpp devcontainer version 2 * Point to specific version of the devcontainer * Update devcontainer to use debian snapshot for reproducability * Fetch sources via https * Make devcontainer more robust for debian_snapshot * Make fetch non-https for snapshot * Install CMake from apt * Update devcontainers to remove CMake version * Change Clang version from 22 to 21 * Apply suggestion from @rolandreichweinbmw --------- Co-authored-by: Roland Reichwein Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: John Wellbelove --- .devcontainer/Dockerfile | 63 ++++++++++++++++++++----- .devcontainer/clang10/devcontainer.json | 3 +- .devcontainer/clang11/devcontainer.json | 3 +- .devcontainer/clang12/devcontainer.json | 3 +- .devcontainer/clang13/devcontainer.json | 3 +- .devcontainer/clang14/devcontainer.json | 3 +- .devcontainer/clang15/devcontainer.json | 3 +- .devcontainer/clang16/devcontainer.json | 3 +- .devcontainer/clang17/devcontainer.json | 3 +- .devcontainer/clang18/devcontainer.json | 3 +- .devcontainer/clang19/devcontainer.json | 3 +- .devcontainer/clang20/devcontainer.json | 3 +- .devcontainer/clang21/devcontainer.json | 13 +++++ .devcontainer/clang7/devcontainer.json | 3 +- .devcontainer/clang8/devcontainer.json | 3 +- .devcontainer/clang9/devcontainer.json | 3 +- .devcontainer/devcontainer.json | 3 +- .devcontainer/gcc09/devcontainer.json | 3 +- .devcontainer/gcc10/devcontainer.json | 3 +- .devcontainer/gcc11/devcontainer.json | 3 +- .devcontainer/gcc12/devcontainer.json | 3 +- .devcontainer/gcc13/devcontainer.json | 3 +- .devcontainer/gcc14/devcontainer.json | 3 +- .devcontainer/gcc15/devcontainer.json | 3 +- 24 files changed, 109 insertions(+), 33 deletions(-) create mode 100644 .devcontainer/clang21/devcontainer.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 090b5302..f51b1a16 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,20 +1,61 @@ -ARG BASE_IMAGE_NAME="clang:latest" +ARG BASE_IMAGE_NAME="mcr.microsoft.com/devcontainers/cpp:2@sha256:a5eb5a1e9109af88bf82ebb0f71903608a68144851ed1e4b852e31b251ac59c6" FROM ${BASE_IMAGE_NAME} -ARG REINSTALL_CMAKE_VERSION_FROM_SOURCE="3.31.7" +ARG DEBIAN_SNAPSHOT="20260223T000000Z" -# Optionally install the cmake for vcpkg -COPY ./reinstall-cmake.sh /tmp/ +SHELL ["/bin/bash", "-o", "pipefail", "-c"] -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ +ENV LANG=C.UTF-8 \ + LC_ALL=C.UTF-8 \ + TZ=UTC + +RUN set -eux \ + && export DEBIAN_FRONTEND=noninteractive \ + && if [[ "${DEBIAN_SNAPSHOT}" != "none" ]]; then \ + snapshot_main="http://snapshot.debian.org/archive/debian/${DEBIAN_SNAPSHOT}"; \ + snapshot_security="http://snapshot.debian.org/archive/debian-security/${DEBIAN_SNAPSHOT}"; \ + if [[ -f /etc/apt/sources.list.d/debian.sources ]]; then \ + sed -ri "s|^URIs: https?://deb.debian.org/debian$|URIs: ${snapshot_main}|g" /etc/apt/sources.list.d/debian.sources; \ + sed -ri "s|^URIs: https?://deb.debian.org/debian-security$|URIs: ${snapshot_security}|g" /etc/apt/sources.list.d/debian.sources; \ + elif [[ -f /etc/apt/sources.list ]] || compgen -G "/etc/apt/sources.list.d/*.list" > /dev/null; then \ + for list_file in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; do \ + [[ -f "${list_file}" ]] || continue; \ + sed -ri "s|https?://deb.debian.org/debian|${snapshot_main}|g" "${list_file}"; \ + sed -ri "s|https?://security.debian.org/debian-security|${snapshot_security}|g" "${list_file}"; \ + sed -ri "s|https?://deb.debian.org/debian-security|${snapshot_security}|g" "${list_file}"; \ + done; \ + else \ + echo "ERROR: DEBIAN_SNAPSHOT='${DEBIAN_SNAPSHOT}' is set, but no supported apt source files were found."; \ + echo "Expected /etc/apt/sources.list.d/debian.sources or one or more .list files under /etc/apt/."; \ + exit 1; \ + fi; \ + printf 'Acquire::Check-Valid-Until "false";\n' > /etc/apt/apt.conf.d/99snapshot; \ + fi \ + && apt-get update \ && apt-get -y install --no-install-recommends \ + python3-full \ + python3-pip \ git \ wget \ - python3-cogapp \ - && rm -rf /var/lib/apt/lists/* + cmake \ + && rm -rf /var/lib/apt/lists/* \ + && if pip help install | grep -q '\-\-break-system-packages'; then \ + pip install --no-cache-dir --break-system-packages cogapp; \ + else \ + pip install --no-cache-dir cogapp; \ + fi -RUN if [ "${REINSTALL_CMAKE_VERSION_FROM_SOURCE}" != "none" ]; then \ - chmod +x /tmp/reinstall-cmake.sh && /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \ - fi \ - && rm -f /tmp/reinstall-cmake.sh +RUN set -eux \ + && echo "Pip version: " \ + && pip --version \ + && echo "Cogapp version: " \ + && pip show cogapp \ + && echo "Git version: " \ + && git --version \ + && echo "Wget version: " \ + && wget --version \ + && echo "Cmake version: " \ + && cmake --version \ + && echo "Make version: " \ + && make --version diff --git a/.devcontainer/clang10/devcontainer.json b/.devcontainer/clang10/devcontainer.json index d34b0411..d62c3ce3 100644 --- a/.devcontainer/clang10/devcontainer.json +++ b/.devcontainer/clang10/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:10" + "BASE_IMAGE_NAME": "silkeh/clang:10", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang11/devcontainer.json b/.devcontainer/clang11/devcontainer.json index 6727e497..e83ec9f4 100644 --- a/.devcontainer/clang11/devcontainer.json +++ b/.devcontainer/clang11/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:11" + "BASE_IMAGE_NAME": "silkeh/clang:11", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang12/devcontainer.json b/.devcontainer/clang12/devcontainer.json index 26ab72ca..6a6407cf 100644 --- a/.devcontainer/clang12/devcontainer.json +++ b/.devcontainer/clang12/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:12" + "BASE_IMAGE_NAME": "silkeh/clang:12", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang13/devcontainer.json b/.devcontainer/clang13/devcontainer.json index 309ced68..46197161 100644 --- a/.devcontainer/clang13/devcontainer.json +++ b/.devcontainer/clang13/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:13" + "BASE_IMAGE_NAME": "silkeh/clang:13", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang14/devcontainer.json b/.devcontainer/clang14/devcontainer.json index ecdf0ad9..13512eff 100644 --- a/.devcontainer/clang14/devcontainer.json +++ b/.devcontainer/clang14/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:14" + "BASE_IMAGE_NAME": "silkeh/clang:14", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang15/devcontainer.json b/.devcontainer/clang15/devcontainer.json index 35a1ccef..42051a63 100644 --- a/.devcontainer/clang15/devcontainer.json +++ b/.devcontainer/clang15/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:15" + "BASE_IMAGE_NAME": "silkeh/clang:15", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang16/devcontainer.json b/.devcontainer/clang16/devcontainer.json index aa9b25ee..8284ae3a 100644 --- a/.devcontainer/clang16/devcontainer.json +++ b/.devcontainer/clang16/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:16" + "BASE_IMAGE_NAME": "silkeh/clang:16", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang17/devcontainer.json b/.devcontainer/clang17/devcontainer.json index deb08dbb..ca9747fa 100644 --- a/.devcontainer/clang17/devcontainer.json +++ b/.devcontainer/clang17/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:17" + "BASE_IMAGE_NAME": "silkeh/clang:17", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang18/devcontainer.json b/.devcontainer/clang18/devcontainer.json index d7954145..5ff70469 100644 --- a/.devcontainer/clang18/devcontainer.json +++ b/.devcontainer/clang18/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:18-bullseye" + "BASE_IMAGE_NAME": "silkeh/clang:18-bullseye", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang19/devcontainer.json b/.devcontainer/clang19/devcontainer.json index 7c525acf..bc617a36 100644 --- a/.devcontainer/clang19/devcontainer.json +++ b/.devcontainer/clang19/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:19-bullseye" + "BASE_IMAGE_NAME": "silkeh/clang:19-bullseye", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang20/devcontainer.json b/.devcontainer/clang20/devcontainer.json index 0dadc10b..5522774f 100644 --- a/.devcontainer/clang20/devcontainer.json +++ b/.devcontainer/clang20/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:20-bullseye" + "BASE_IMAGE_NAME": "silkeh/clang:20-bullseye", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang21/devcontainer.json b/.devcontainer/clang21/devcontainer.json new file mode 100644 index 00000000..e09e5c3a --- /dev/null +++ b/.devcontainer/clang21/devcontainer.json @@ -0,0 +1,13 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/cpp +{ + "name": "Clang 21", + "build": { + "dockerfile": "../Dockerfile", + "args": { + "BASE_IMAGE_NAME": "silkeh/clang:21-bullseye", + "DEBIAN_SNAPSHOT": "none" + }, + "context": "../context" + } +} diff --git a/.devcontainer/clang7/devcontainer.json b/.devcontainer/clang7/devcontainer.json index 09a67efa..87d7c7e1 100644 --- a/.devcontainer/clang7/devcontainer.json +++ b/.devcontainer/clang7/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:7" + "BASE_IMAGE_NAME": "silkeh/clang:7", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang8/devcontainer.json b/.devcontainer/clang8/devcontainer.json index 99a853e5..c29c069c 100644 --- a/.devcontainer/clang8/devcontainer.json +++ b/.devcontainer/clang8/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:8" + "BASE_IMAGE_NAME": "silkeh/clang:8", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/clang9/devcontainer.json b/.devcontainer/clang9/devcontainer.json index b77d4f2b..308f8ba2 100644 --- a/.devcontainer/clang9/devcontainer.json +++ b/.devcontainer/clang9/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "silkeh/clang:9" + "BASE_IMAGE_NAME": "silkeh/clang:9", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 161faeec..5daf6034 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "./Dockerfile", "args": { - "BASE_IMAGE_NAME": "mcr.microsoft.com/devcontainers/cpp:debian-12" + "BASE_IMAGE_NAME": "mcr.microsoft.com/devcontainers/cpp:2@sha256:a5eb5a1e9109af88bf82ebb0f71903608a68144851ed1e4b852e31b251ac59c6", + "DEBIAN_SNAPSHOT": "20260223T000000Z" }, "context": "./context" } diff --git a/.devcontainer/gcc09/devcontainer.json b/.devcontainer/gcc09/devcontainer.json index ab5e64ee..d72b5f3c 100644 --- a/.devcontainer/gcc09/devcontainer.json +++ b/.devcontainer/gcc09/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "gcc:9" + "BASE_IMAGE_NAME": "gcc:9", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/gcc10/devcontainer.json b/.devcontainer/gcc10/devcontainer.json index 03bf117e..698402b8 100644 --- a/.devcontainer/gcc10/devcontainer.json +++ b/.devcontainer/gcc10/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "gcc:10" + "BASE_IMAGE_NAME": "gcc:10", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/gcc11/devcontainer.json b/.devcontainer/gcc11/devcontainer.json index 9d837fad..c8235db7 100644 --- a/.devcontainer/gcc11/devcontainer.json +++ b/.devcontainer/gcc11/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "gcc:11" + "BASE_IMAGE_NAME": "gcc:11", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/gcc12/devcontainer.json b/.devcontainer/gcc12/devcontainer.json index 9c07a79f..bee6541e 100644 --- a/.devcontainer/gcc12/devcontainer.json +++ b/.devcontainer/gcc12/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "gcc:12" + "BASE_IMAGE_NAME": "gcc:12", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/gcc13/devcontainer.json b/.devcontainer/gcc13/devcontainer.json index 4b9767e8..7434b808 100644 --- a/.devcontainer/gcc13/devcontainer.json +++ b/.devcontainer/gcc13/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "gcc:13" + "BASE_IMAGE_NAME": "gcc:13", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/gcc14/devcontainer.json b/.devcontainer/gcc14/devcontainer.json index 374ff299..33e043b9 100644 --- a/.devcontainer/gcc14/devcontainer.json +++ b/.devcontainer/gcc14/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "gcc:14" + "BASE_IMAGE_NAME": "gcc:14", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" } diff --git a/.devcontainer/gcc15/devcontainer.json b/.devcontainer/gcc15/devcontainer.json index 498a6fe8..143d5b16 100644 --- a/.devcontainer/gcc15/devcontainer.json +++ b/.devcontainer/gcc15/devcontainer.json @@ -5,7 +5,8 @@ "build": { "dockerfile": "../Dockerfile", "args": { - "BASE_IMAGE_NAME": "gcc:15" + "BASE_IMAGE_NAME": "gcc:15", + "DEBIAN_SNAPSHOT": "none" }, "context": "../context" }