From d79ca938488be2f9e83a3366fd1e9710809d0d94 Mon Sep 17 00:00:00 2001 From: Krzysztof Kanas Date: Mon, 9 Nov 2026 11:09:51 +0100 Subject: [PATCH 1/7] cmake: telemetry 1sdk requires old cmake, breaks with cmake >= v4 Address this by forcing version compatibility in external cmake Signed-off-by: Krzysztof Kanas --- src/common/telemetry/lib/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/telemetry/lib/CMakeLists.txt b/src/common/telemetry/lib/CMakeLists.txt index 8cfa25db..ee2cfef6 100644 --- a/src/common/telemetry/lib/CMakeLists.txt +++ b/src/common/telemetry/lib/CMakeLists.txt @@ -36,6 +36,7 @@ ExternalProject_Add( CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} # use the same toolchain -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DBUILD_FUNC_TESTS=OFF From efc84f3a46b19563792102a961ca4ae6583d78b7 Mon Sep 17 00:00:00 2001 From: Krzysztof Kanas Date: Mon, 9 Nov 2026 11:17:03 +0100 Subject: [PATCH 2/7] telemetry: 1dsdk patch build fails due missing header file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -- Building static SDK library -- Library will be installed to 1ds_install/lib -- Configuring done (0.2s) -- Generating done (0.0s) -- Build files have been written to: 1dscpplib-prefix/src/1dscpplib-build [4/18] Performing build step for '1dscpplib' FAILED: [code=1] lib/1dscpplib-prefix/src/1dscpplib-stamp/1dscpplib-build 1ds_install/lib/libmat.a 1dscpplib-prefix/src/1dscpplib-stamp/1dscpplib-build 1dscpplib-prefix/src/1dscpplib-build && /usr/bin/cmake --build . && /usr/bin/cmake -E touch 1dscpplib-prefix/src/1dscpplib-stamp/1dscpplib-build [1/2] Building CXX object lib/CMakeFiles/mat.dir/modules/cds/CdsFactory.cpp.o FAILED: [code=1] lib/CMakeFiles/mat.dir/modules/cds/CdsFactory.cpp.o In file included from 1dscpplib-prefix/src/1dscpplib/lib/modules/cds/CdsFactory.hpp:9, from 1dscpplib-prefix/src/1dscpplib/lib/modules/cds/CdsFactory.cpp:1: 1dscpplib-prefix/src/1dscpplib/lib/include/public/ICdsFactory.hpp:57:25: error: ‘uint8_t’ was not declared in this scope 57 | virtual std::vector CollectAndGetDataStream(const std::string& sessionId, const Config& config) noexcept = 0; | ^~~~~~~ 1dscpplib-prefix/src/1dscpplib/lib/include/public/ICdsFactory.hpp:15:1: note: ‘uint8_t’ is defined in header ‘’; this is probably fixable by adding ‘#include ’ 14 | #include +++ |+#include 15 | 1dscpplib-prefix/src/1dscpplib/lib/include/public/ICdsFactory.hpp:57:32: error: template argument 1 is invalid 57 | virtual std::vector CollectAndGetDataStream(const std::string& sessionId, const Config& config) noexcept = 0; | ^ 1dscpplib-prefix/src/1dscpplib/lib/include/public/ICdsFactory.hpp:57:32: error: template argument 2 is invalid 1dscpplib-prefix/src/1dscpplib/lib/modules/cds/CdsFactory.cpp: In member function ‘virtual bool Microsoft::Applications::Events::CommonDiagnosticSystem::DoCollectAndUpload(const std::string&, const Microsoft::Applications::Events::DiagnosticConfig&)’: 1dscpplib-prefix/src/1dscpplib/lib/modules/cds/CdsFactory.cpp:48:71: error: conversion from ‘int’ to non-scalar type ‘std::vector’ requested 48 | std::vector data = collector->CollectAndGetDataStream(sessionID, config.collectorConfig); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ At global scope: cc1plus: note: unrecognized command-line option ‘-Wno-unknown-warning-option’ may have been intended to silence earlier diagnostics Signed-off-by: Krzysztof Kanas Co-authored-by: GitHub Copilot --- src/common/telemetry/lib/CMakeLists.txt | 3 +++ src/common/telemetry/lib/Patch1dsSdk.cmake | 14 ++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 src/common/telemetry/lib/Patch1dsSdk.cmake diff --git a/src/common/telemetry/lib/CMakeLists.txt b/src/common/telemetry/lib/CMakeLists.txt index ee2cfef6..dac99440 100644 --- a/src/common/telemetry/lib/CMakeLists.txt +++ b/src/common/telemetry/lib/CMakeLists.txt @@ -33,6 +33,9 @@ ExternalProject_Add( ${ONEDS_CPP_SDK_VERSION} GIT_SUBMODULES "" # This disables submodule checkout + PATCH_COMMAND + ${CMAKE_COMMAND} -DSDK_SOURCE_DIR= + -P ${CMAKE_CURRENT_SOURCE_DIR}/Patch1dsSdk.cmake CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} # use the same toolchain -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} diff --git a/src/common/telemetry/lib/Patch1dsSdk.cmake b/src/common/telemetry/lib/Patch1dsSdk.cmake new file mode 100644 index 00000000..03b6e393 --- /dev/null +++ b/src/common/telemetry/lib/Patch1dsSdk.cmake @@ -0,0 +1,14 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +set(header "${SDK_SOURCE_DIR}/lib/include/public/ICdsFactory.hpp") +file(READ "${header}" content) + +# Older SDK releases rely on transitive includes for uint8_t. +if(NOT content MATCHES "#include[ \t]*[<\"]cstdint[>\"]") + if(NOT content MATCHES "#include ") + message(FATAL_ERROR "Cannot patch ${header}: expected include not found") + endif() + string(REPLACE "#include " "#include \n#include " content "${content}") + file(WRITE "${header}" "${content}") +endif() From 459da020060db034b94afa34757b8acf3ea1d07e Mon Sep 17 00:00:00 2001 From: Krzysztof Kanas Date: Mon, 9 Nov 2026 10:58:01 +0100 Subject: [PATCH 3/7] devops: bump cmake versio to vcpkg cmake version Signed-off-by: Krzysztof Kanas --- .github/workflows/build-containers.yml | 2 ++ devops/README.md | 14 ++++++++++++++ devops/docker/almalinux-9-amd64/Dockerfile | 10 ++++++---- devops/docker/azurelinux-3-amd64/Dockerfile | 11 +++++++++++ devops/docker/debian-12-amd64/Dockerfile | 9 ++++++--- devops/docker/oraclelinux-8-amd64/Dockerfile | 10 ++++++---- devops/docker/rhel-8-amd64/Dockerfile | 10 ++++++---- devops/docker/rhel-9-amd64/Dockerfile | 10 ++++++---- devops/docker/rockylinux-9-amd64/Dockerfile | 10 ++++++---- devops/docker/sles-15-amd64/Dockerfile | 10 ++++++---- devops/docker/ubuntu-20.04-amd64/Dockerfile | 9 ++++++--- devops/docker/ubuntu-22.04-amd64/Dockerfile | 9 ++++++--- devops/docker/ubuntu-24.04-amd64/Dockerfile | 9 ++++++--- 13 files changed, 87 insertions(+), 36 deletions(-) diff --git a/.github/workflows/build-containers.yml b/.github/workflows/build-containers.yml index c11cfdd6..dd4dbafd 100644 --- a/.github/workflows/build-containers.yml +++ b/.github/workflows/build-containers.yml @@ -4,6 +4,7 @@ on: pull_request: paths: - devops/docker/**/Dockerfile + - external/vcpkg - .github/workflows/build-containers.yml push: branches: @@ -11,6 +12,7 @@ on: - main paths: - devops/docker/**/Dockerfile + - external/vcpkg - .github/workflows/build-containers.yml workflow_dispatch: inputs: diff --git a/devops/README.md b/devops/README.md index 97c4a1ec..5bca14ef 100644 --- a/devops/README.md +++ b/devops/README.md @@ -17,6 +17,20 @@ This folder contains the artifacts and scripts used by our engineering systems ( - `rpm` - RPM packaging scripts ## Updating Build contaienrs used for CI builds +All build containers read the Linux amd64 CMake version from +[`external/vcpkg/scripts/vcpkg-tools.json`](../external/vcpkg/scripts/vcpkg-tools.json) +and build that version from source. The build verifies that `cmake` on `PATH` +reports the selected version before installing vcpkg dependencies. No manual +`CMAKE_VERSION` build argument is needed. Build images from the repository root +with the vcpkg submodule initialized, for example: + +```bash +git submodule update --init --recursive +docker build -f devops/docker/ubuntu-24.04-amd64/Dockerfile . +``` + +Updating the vcpkg submodule also triggers the build-container workflow. + The `docker/-` - Build containers are used by ci [ci.yml](.github/workflows/ci.yml) Their version(digest's) are stored inside [test-matrix.json](.github/test-matrix.json) The [build-containers.yml](.github/workflows/build-contains.yml) is ran whenever any Build Containers dockerfile is changed. diff --git a/devops/docker/almalinux-9-amd64/Dockerfile b/devops/docker/almalinux-9-amd64/Dockerfile index a9160279..7da13168 100644 --- a/devops/docker/almalinux-9-amd64/Dockerfile +++ b/devops/docker/almalinux-9-amd64/Dockerfile @@ -1,8 +1,6 @@ # TODO: Add mcr.io retagged images FROM almalinux:9@sha256:245f8aab832fe800aa42bdab5fad75ebbd8e0b4c9f24820a83c638b177857ae2 -ARG CMAKE_VERSION=v3.30.1 - RUN dnf install -y \ autoconf \ gcc \ @@ -26,8 +24,12 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -RUN git clone https://github.com/Kitware/CMake --recursive -b ${CMAKE_VERSION} -RUN cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && rm -rf /git/CMake +COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json +RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ + git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ + cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ + cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ + rm -rf /git/CMake && rm /git/vcpkg-tools.json # Run vcpkg to install build depends diff --git a/devops/docker/azurelinux-3-amd64/Dockerfile b/devops/docker/azurelinux-3-amd64/Dockerfile index 43c536eb..939aa2e5 100644 --- a/devops/docker/azurelinux-3-amd64/Dockerfile +++ b/devops/docker/azurelinux-3-amd64/Dockerfile @@ -9,6 +9,7 @@ RUN tdnf install -y \ file \ git \ jq \ + openssl-devel \ perl \ perl-IPC-Cmd \ python3 \ @@ -29,6 +30,16 @@ RUN tdnf upgrade -y && \ RUN python3 -m venv /opt/kompli-venv ENV PATH="/opt/kompli-venv/bin:${PATH}" +WORKDIR /git + +# CMake +COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json +RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ + git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ + cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ + cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ + rm -rf /git/CMake && rm /git/vcpkg-tools.json + COPY . /src WORKDIR /src RUN (cd external/vcpkg && ./bootstrap-vcpkg.sh) && (cd src && ../external/vcpkg/vcpkg install) && rm -rf /src diff --git a/devops/docker/debian-12-amd64/Dockerfile b/devops/docker/debian-12-amd64/Dockerfile index 28d977a4..2b36ed04 100644 --- a/devops/docker/debian-12-amd64/Dockerfile +++ b/devops/docker/debian-12-amd64/Dockerfile @@ -1,6 +1,5 @@ FROM mcr.microsoft.com/mirror/docker/library/debian:bookworm@sha256:d74df7598108a173a621eda4d58a2adbf850b2d9a9d81bc2cca1a6c21174a880 -ARG CMAKE_VERSION=v3.30.1 ARG DEBIAN_FRONTEND=noninteractive RUN apt -y update && apt-get -y install software-properties-common @@ -29,8 +28,12 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -RUN git clone https://github.com/Kitware/CMake --recursive -b ${CMAKE_VERSION} -RUN cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && rm -rf /git/CMake +COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json +RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ + git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ + cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ + cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ + rm -rf /git/CMake && rm /git/vcpkg-tools.json COPY . /src WORKDIR /src diff --git a/devops/docker/oraclelinux-8-amd64/Dockerfile b/devops/docker/oraclelinux-8-amd64/Dockerfile index ea406212..dd173723 100644 --- a/devops/docker/oraclelinux-8-amd64/Dockerfile +++ b/devops/docker/oraclelinux-8-amd64/Dockerfile @@ -1,8 +1,6 @@ # TODO: Add mcr.io retagged images FROM oraclelinux:8@sha256:1f74281d8cc37c6e4adef0559f4c583022193dcfa8562d2e4a87161b6cd54df8 -ARG CMAKE_VERSION=v3.30.1 - RUN yum install -y \ autoconf \ gcc \ @@ -23,8 +21,12 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -RUN git clone https://github.com/Kitware/CMake --recursive -b ${CMAKE_VERSION} -RUN cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && rm -rf /git/CMake +COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json +RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ + git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ + cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ + cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ + rm -rf /git/CMake && rm /git/vcpkg-tools.json COPY . /src WORKDIR /src diff --git a/devops/docker/rhel-8-amd64/Dockerfile b/devops/docker/rhel-8-amd64/Dockerfile index bb914daf..2fb5c41e 100644 --- a/devops/docker/rhel-8-amd64/Dockerfile +++ b/devops/docker/rhel-8-amd64/Dockerfile @@ -1,8 +1,6 @@ # TODO: Add mcr.io retagged images FROM registry.access.redhat.com/ubi8/ubi@sha256:c322aa68f2d630b36b9faab64094357f62720be2f56f7099376ca2d6c4fe389b -ARG CMAKE_VERSION=v3.30.1 - RUN yum install -y --disableplugin=subscription-manager \ autoconf \ curl \ @@ -27,8 +25,12 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -RUN git clone https://github.com/Kitware/CMake --recursive -b ${CMAKE_VERSION} -RUN cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && rm -rf /git/CMake +COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json +RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ + git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ + cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ + cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ + rm -rf /git/CMake && rm /git/vcpkg-tools.json COPY . /src WORKDIR /src diff --git a/devops/docker/rhel-9-amd64/Dockerfile b/devops/docker/rhel-9-amd64/Dockerfile index 40e3fe65..6fdc895e 100644 --- a/devops/docker/rhel-9-amd64/Dockerfile +++ b/devops/docker/rhel-9-amd64/Dockerfile @@ -1,8 +1,6 @@ # TODO: Add mcr.io retagged images FROM registry.access.redhat.com/ubi9/ubi@sha256:8f989cc9270da6abec0144c22846ed1e6e92e462dc7768ce0981c4ac1d574733 -ARG CMAKE_VERSION=v3.30.1 - RUN yum install -y --disableplugin=subscription-manager \ autoconf \ gcc \ @@ -26,8 +24,12 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -RUN git clone https://github.com/Kitware/CMake --recursive -b ${CMAKE_VERSION} -RUN cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && rm -rf /git/CMake +COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json +RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ + git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ + cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ + cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ + rm -rf /git/CMake && rm /git/vcpkg-tools.json COPY . /src diff --git a/devops/docker/rockylinux-9-amd64/Dockerfile b/devops/docker/rockylinux-9-amd64/Dockerfile index 9ec9110c..2aeafa83 100644 --- a/devops/docker/rockylinux-9-amd64/Dockerfile +++ b/devops/docker/rockylinux-9-amd64/Dockerfile @@ -1,8 +1,6 @@ # TODO: Add mcr.io retagged images FROM rockylinux:9@sha256:d7be1c094cc5845ee815d4632fe377514ee6ebcf8efaed6892889657e5ddaaa6 -ARG CMAKE_VERSION=v3.30.1 - RUN yum install -y \ autoconf \ gcc \ @@ -26,8 +24,12 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -RUN git clone https://github.com/Kitware/CMake --recursive -b ${CMAKE_VERSION} -RUN cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && rm -rf /git/CMake +COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json +RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ + git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ + cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ + cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ + rm -rf /git/CMake && rm /git/vcpkg-tools.json COPY . /src WORKDIR /src diff --git a/devops/docker/sles-15-amd64/Dockerfile b/devops/docker/sles-15-amd64/Dockerfile index 3374f24a..00abb0a3 100644 --- a/devops/docker/sles-15-amd64/Dockerfile +++ b/devops/docker/sles-15-amd64/Dockerfile @@ -1,8 +1,6 @@ # TODO: Add mcr.io retagged images FROM registry.suse.com/bci/bci-base:15.7@sha256:a1bff75c7ab3d66c8423e3f2370838d5dbed077a4133e9f38a98d7525a630958 -ARG CMAKE_VERSION=v3.30.1 - RUN zypper install -y \ autoconf \ curl \ @@ -32,8 +30,12 @@ RUN printf '%s\n' \ WORKDIR /git # CMake -RUN git clone https://github.com/Kitware/CMake --recursive -b ${CMAKE_VERSION} -RUN cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && rm -rf /git/CMake +COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json +RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ + git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ + cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ + cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ + rm -rf /git/CMake && rm /git/vcpkg-tools.json COPY . /src WORKDIR /src diff --git a/devops/docker/ubuntu-20.04-amd64/Dockerfile b/devops/docker/ubuntu-20.04-amd64/Dockerfile index d5d737c3..784b07d6 100644 --- a/devops/docker/ubuntu-20.04-amd64/Dockerfile +++ b/devops/docker/ubuntu-20.04-amd64/Dockerfile @@ -1,6 +1,5 @@ FROM mcr.microsoft.com/mirror/docker/library/ubuntu:20.04@sha256:8feb4d8ca5354def3d8fce243717141ce31e2c428701f6682bd2fafe15388214 -ARG CMAKE_VERSION=v3.30.1 ARG DEBIAN_FRONTEND=noninteractive RUN apt -y update && apt-get -y install software-properties-common @@ -37,8 +36,12 @@ RUN apt-get update && apt-get install -y dotnet-sdk-5.0 WORKDIR /git # CMake -RUN git clone https://github.com/Kitware/CMake --recursive -b ${CMAKE_VERSION} -RUN cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && rm -rf /git/CMake +COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json +RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ + git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ + cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ + cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ + rm -rf /git/CMake && rm /git/vcpkg-tools.json COPY . /src WORKDIR /src diff --git a/devops/docker/ubuntu-22.04-amd64/Dockerfile b/devops/docker/ubuntu-22.04-amd64/Dockerfile index 66ec2cfc..64a6d953 100644 --- a/devops/docker/ubuntu-22.04-amd64/Dockerfile +++ b/devops/docker/ubuntu-22.04-amd64/Dockerfile @@ -1,6 +1,5 @@ FROM mcr.microsoft.com/mirror/docker/library/ubuntu:22.04@sha256:104ae83764a5119017b8e8d6218fa0832b09df65aae7d5a6de29a85d813da2fb -ARG CMAKE_VERSION=v3.30.1 ARG DEBIAN_FRONTEND=noninteractive RUN apt -y update && apt-get -y install software-properties-common @@ -35,8 +34,12 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -RUN git clone https://github.com/Kitware/CMake --recursive -b ${CMAKE_VERSION} -RUN cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && rm -rf /git/CMake +COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json +RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ + git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ + cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ + cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ + rm -rf /git/CMake && rm /git/vcpkg-tools.json COPY . /src WORKDIR /src diff --git a/devops/docker/ubuntu-24.04-amd64/Dockerfile b/devops/docker/ubuntu-24.04-amd64/Dockerfile index 58a49f88..2722b8ce 100644 --- a/devops/docker/ubuntu-24.04-amd64/Dockerfile +++ b/devops/docker/ubuntu-24.04-amd64/Dockerfile @@ -1,6 +1,5 @@ FROM mcr.microsoft.com/mirror/docker/library/ubuntu:24.04@sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54 -ARG CMAKE_VERSION=v3.30.1 ARG DEBIAN_FRONTEND=noninteractive RUN apt -y update && apt-get -y install software-properties-common @@ -36,8 +35,12 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -RUN git clone https://github.com/Kitware/CMake --recursive -b ${CMAKE_VERSION} -RUN cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && rm -rf /git/CMake +COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json +RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ + git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ + cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ + cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ + rm -rf /git/CMake && rm /git/vcpkg-tools.json COPY . /src WORKDIR /src From 9a57b799f39a92cd0b1ed2144c267e39e6517734 Mon Sep 17 00:00:00 2001 From: Krzysztof Kanas Date: Mon, 9 Nov 2026 11:07:28 +0100 Subject: [PATCH 4/7] cmake: bump to v4.4.2 to unify required version VCPKG uses external/vcpkg/scripts/vcpkg-tools.json for cmake version which is 4.4.2 at the moment. Unify cmake version requirement to have single version Signed-off-by: Krzysztof Kanas --- src/CMakeLists.txt | 2 +- src/common/telemetry/CMakeLists.txt | 2 +- src/common/telemetry/bin/tests/CMakeLists.txt | 2 +- src/tests/fuzzer/CMakeLists.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 65a5ea43..840797cb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -116,7 +116,7 @@ else() message(STATUS "Skipping initial vcpkg install (dependencies already up to date).") endif() -cmake_minimum_required(VERSION 3.21) +cmake_minimum_required(VERSION 4.4.2) project(kompli) set (CMAKE_C_STANDARD 11) diff --git a/src/common/telemetry/CMakeLists.txt b/src/common/telemetry/CMakeLists.txt index 1d82eb72..061bef3f 100644 --- a/src/common/telemetry/CMakeLists.txt +++ b/src/common/telemetry/CMakeLists.txt @@ -1,7 +1,7 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. -cmake_minimum_required(VERSION 3.21) +cmake_minimum_required(VERSION 4.4.2) project(telemetry) if(BUILD_EXTERNAL) diff --git a/src/common/telemetry/bin/tests/CMakeLists.txt b/src/common/telemetry/bin/tests/CMakeLists.txt index a127d562..d520af15 100644 --- a/src/common/telemetry/bin/tests/CMakeLists.txt +++ b/src/common/telemetry/bin/tests/CMakeLists.txt @@ -3,7 +3,7 @@ project(telemetryexetests) -cmake_minimum_required(VERSION 3.2.0) +cmake_minimum_required(VERSION 4.4.2) add_compile_options("-Wall;-Wextra;-Wunused;-Werror;-Wformat;-Wformat-security;-Wno-unused-result;-Wno-unused-parameter") include(GoogleTest) diff --git a/src/tests/fuzzer/CMakeLists.txt b/src/tests/fuzzer/CMakeLists.txt index f99f126c..070147cc 100644 --- a/src/tests/fuzzer/CMakeLists.txt +++ b/src/tests/fuzzer/CMakeLists.txt @@ -1,7 +1,7 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. -cmake_minimum_required(VERSION 3.21) +cmake_minimum_required(VERSION 4.4.2) # Set the project name and version project(kompli-fuzzer) From e0f18e239e1f2f8ccfcc49d1809ef692f08e5abe Mon Sep 17 00:00:00 2001 From: Krzysztof Kanas Date: Mon, 9 Nov 2026 14:52:35 +0100 Subject: [PATCH 5/7] devops: use vcpkg to Preload container dependencies for offline project builds - Cache manifest dependencies, helper tools, and binary packages in all 11 images - Preserve registry locks to prevent fresh builds from fetching Git HEAD - Reuse the prepared vcpkg tree and remove redundant CI bootstrapping - Use a SHA512-verified Lua mirror during dependency preparation - Require a network-disabled configure/build before publishing images - Update rebuild triggers, documentation, and regression tests Validated the Ubuntu 24.04 image with Podman, including its offline build. All 11 regression tests pass. Signed-off-by: Krzysztof Kanas Co-authored-by: GitHub Copilot --- .dockerignore | 3 ++ .github/workflows/build-containers.yml | 13 +++++ .github/workflows/ci.yml | 1 - devops/README.md | 47 +++++++++++++++---- devops/docker/almalinux-9-amd64/Dockerfile | 23 +++++++-- devops/docker/azurelinux-3-amd64/Dockerfile | 22 +++++++-- devops/docker/debian-12-amd64/Dockerfile | 22 +++++++-- devops/docker/oraclelinux-8-amd64/Dockerfile | 28 +++++++++-- devops/docker/rhel-8-amd64/Dockerfile | 22 +++++++-- devops/docker/rhel-9-amd64/Dockerfile | 22 +++++++-- devops/docker/rockylinux-9-amd64/Dockerfile | 22 +++++++-- devops/docker/sles-15-amd64/Dockerfile | 22 +++++++-- devops/docker/ubuntu-20.04-amd64/Dockerfile | 22 +++++++-- devops/docker/ubuntu-22.04-amd64/Dockerfile | 22 +++++++-- devops/docker/ubuntu-24.04-amd64/Dockerfile | 22 +++++++-- devops/scripts/download-vcpkg-asset.sh | 18 +++++++ .../scripts/prepare-container-dependencies.sh | 17 +++++++ src/CMakeLists.txt | 18 ++++++- 18 files changed, 321 insertions(+), 45 deletions(-) create mode 100644 devops/scripts/download-vcpkg-asset.sh create mode 100644 devops/scripts/prepare-container-dependencies.sh diff --git a/.dockerignore b/.dockerignore index 421841b6..0d7798be 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,9 +11,12 @@ **/*.a **/*.so **/*.log +/build*/ +/src/vcpkg_installed # vcpkg artifacts external/vcpkg/buildtrees external/vcpkg/packages external/vcpkg/downloads external/vcpkg/installed +external/vcpkg/vcpkg diff --git a/.github/workflows/build-containers.yml b/.github/workflows/build-containers.yml index dd4dbafd..811c5553 100644 --- a/.github/workflows/build-containers.yml +++ b/.github/workflows/build-containers.yml @@ -4,7 +4,14 @@ on: pull_request: paths: - devops/docker/**/Dockerfile + - devops/scripts/prepare-container-dependencies.sh + - devops/scripts/download-vcpkg-asset.sh + - devops/scripts/tests/test_container_dependencies.py - external/vcpkg + - src/vcpkg*.json + - src/CMakeLists.txt + - src/ports-overlay/** + - src/triplets/** - .github/workflows/build-containers.yml push: branches: @@ -12,7 +19,13 @@ on: - main paths: - devops/docker/**/Dockerfile + - devops/scripts/prepare-container-dependencies.sh + - devops/scripts/download-vcpkg-asset.sh - external/vcpkg + - src/vcpkg*.json + - src/CMakeLists.txt + - src/ports-overlay/** + - src/triplets/** - .github/workflows/build-containers.yml workflow_dispatch: inputs: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ebb02759..043afad5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -73,7 +73,6 @@ jobs: with: container: ${{ steps.container.outputs.id }} cmd: | - (cd external/vcpkg && sed -e "s/\"2\\.7\\.4\"/\"1\\.0\\.0\"/g" -i scripts/vcpkg-tools.json && ./bootstrap-vcpkg.sh) mkdir build && cd build if [ "${{ matrix.target.name }}" = "ubuntu-14.04" ]; then cmake ../src -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -Duse_prov_client=ON -Dhsm_type_symm_key=ON -DCOMPILE_WITH_STRICTNESS=ON -DBUILD_TESTS=ON -DBUILD_SAMPLES=ON -DBUILD_ADAPTERS=ON -Duse_default_uuid=ON -DVCPKG_OVERLAY_TRIPLETS=../src/triplets -DVCPKG_TARGET_TRIPLET=x64-linux-gcc5 -DVCPKG_OVERLAY_PORTS=../src/ports-overlay diff --git a/devops/README.md b/devops/README.md index 5bca14ef..f93dba68 100644 --- a/devops/README.md +++ b/devops/README.md @@ -16,22 +16,53 @@ This folder contains the artifacts and scripts used by our engineering systems ( - `terraform` - terraform modules for provisioning Azure resources for E2E tests - `rpm` - RPM packaging scripts -## Updating Build contaienrs used for CI builds +## Updating build containers used for CI builds All build containers read the Linux amd64 CMake version from [`external/vcpkg/scripts/vcpkg-tools.json`](../external/vcpkg/scripts/vcpkg-tools.json) and build that version from source. The build verifies that `cmake` on `PATH` reports the selected version before installing vcpkg dependencies. No manual `CMAKE_VERSION` build argument is needed. Build images from the repository root -with the vcpkg submodule initialized, for example: +with Podman (or Docker with BuildKit enabled) and the vcpkg submodule initialized, +for example: ```bash git submodule update --init --recursive -docker build -f devops/docker/ubuntu-24.04-amd64/Dockerfile . +docker build --layers -f devops/docker/ubuntu-24.04-amd64/Dockerfile . ``` -Updating the vcpkg submodule also triggers the build-container workflow. +The images install all dependencies from [`src/vcpkg.json`](../src/vcpkg.json), +including Lua, while network access is available. The bootstrapped vcpkg tree, +downloaded source archives and helper tools, binary packages, and registry cache +are retained under `/opt/kompli`. `KOMPLI_VCPKG_ROOT` selects that bootstrapped +tree for CMake; builds outside these images still use a build-local vcpkg tree. +Each build restores dependencies into its own `build/vcpkg_installed` directory. +The image also retains the registry lock and seeds it into fresh build trees, +preventing vcpkg from fetching registry HEAD when no installation exists yet. +The images block vcpkg origin downloads after dependency preparation, so a +missing asset fails explicitly instead of downloading during the project build. +During dependency preparation, the asset helper retrieves Lua archives from the +MacPorts mirror; vcpkg still verifies the SHA512 from the selected port. Other +assets use their upstream URLs. The helper is disabled for offline builds. -The `docker/-` - Build containers are used by ci [ci.yml](.github/workflows/ci.yml) -Their version(digest's) are stored inside [test-matrix.json](.github/test-matrix.json) -The [build-containers.yml](.github/workflows/build-contains.yml) is ran whenever any Build Containers dockerfile is changed. -The [build-containers.yml](.github/workflows/build-contains.yml) produces new-test-matrix.json that can be copted to [test-matrix.json](.github/test-matrix.json) and commited. Then next [ci.yml](.github/workflows/ci.yml) will use updated containers to run builds & tests. +Every image must pass a fresh Release configure and build with tests enabled, +telemetry disabled, and `RUN --network=none`. This checks the actual project +without network access before the image can be published. Optional telemetry +uses an external SDK outside the vcpkg manifest and is not covered by this +offline check. + +Changes to the manifest, registry configuration, vcpkg submodule, overlays, +triplets, dependency preparation script, root CMake configuration, or Dockerfiles +trigger the [build-container workflow](../.github/workflows/build-containers.yml). +Rebuild images when these dependency inputs change; do not enable downloads in +the later project build to work around stale images. + +Run the container setup regression tests locally with: + +```bash +python3 -m unittest discover -s devops/scripts/tests +``` + +The images are used by [CI](../.github/workflows/ci.yml), with pinned digests in +[`test-matrix.json`](../.github/test-matrix.json). After rebuilding, copy the +workflow's `new-test-matrix.json` artifact into that file and commit it so later +builds use the new images. diff --git a/devops/docker/almalinux-9-amd64/Dockerfile b/devops/docker/almalinux-9-amd64/Dockerfile index 7da13168..959d5843 100644 --- a/devops/docker/almalinux-9-amd64/Dockerfile +++ b/devops/docker/almalinux-9-amd64/Dockerfile @@ -32,7 +32,22 @@ RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux rm -rf /git/CMake && rm /git/vcpkg-tools.json -# Run vcpkg to install build depends -COPY . /src -WORKDIR /src -RUN (cd external/vcpkg && ./bootstrap-vcpkg.sh) && (cd src && ../external/vcpkg/vcpkg install) && rm -rf /src +ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ + VCPKG_DOWNLOADS=/opt/kompli/downloads \ + VCPKG_DEFAULT_BINARY_CACHE=/opt/kompli/binary-cache \ + X_VCPKG_REGISTRIES_CACHE=/opt/kompli/registries \ + VCPKG_DISABLE_METRICS=1 +COPY external/vcpkg /opt/kompli/vcpkg +COPY devops/scripts/download-vcpkg-asset.sh /usr/local/bin/download-vcpkg-asset.sh +COPY devops/scripts/prepare-container-dependencies.sh /usr/local/bin/prepare-container-dependencies +RUN --mount=type=bind,source=src,target=/src \ + bash /usr/local/bin/prepare-container-dependencies /src + +ENV X_VCPKG_ASSET_SOURCES="clear;x-block-origin" +RUN --network=none --mount=type=bind,source=src,target=/source/src \ + cp -a /source /tmp/kompli-offline && \ + cmake -S /tmp/kompli-offline/src -B /tmp/kompli-offline/build \ + -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON -DBUILD_TELEMETRY=OFF && \ + cmake --build /tmp/kompli-offline/build --parallel "$(nproc)" && \ + rm -rf /tmp/kompli-offline +WORKDIR /kompli diff --git a/devops/docker/azurelinux-3-amd64/Dockerfile b/devops/docker/azurelinux-3-amd64/Dockerfile index 939aa2e5..70817334 100644 --- a/devops/docker/azurelinux-3-amd64/Dockerfile +++ b/devops/docker/azurelinux-3-amd64/Dockerfile @@ -40,6 +40,22 @@ RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ rm -rf /git/CMake && rm /git/vcpkg-tools.json -COPY . /src -WORKDIR /src -RUN (cd external/vcpkg && ./bootstrap-vcpkg.sh) && (cd src && ../external/vcpkg/vcpkg install) && rm -rf /src +ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ + VCPKG_DOWNLOADS=/opt/kompli/downloads \ + VCPKG_DEFAULT_BINARY_CACHE=/opt/kompli/binary-cache \ + X_VCPKG_REGISTRIES_CACHE=/opt/kompli/registries \ + VCPKG_DISABLE_METRICS=1 +COPY external/vcpkg /opt/kompli/vcpkg +COPY devops/scripts/download-vcpkg-asset.sh /usr/local/bin/download-vcpkg-asset.sh +COPY devops/scripts/prepare-container-dependencies.sh /usr/local/bin/prepare-container-dependencies +RUN --mount=type=bind,source=src,target=/src \ + bash /usr/local/bin/prepare-container-dependencies /src + +ENV X_VCPKG_ASSET_SOURCES="clear;x-block-origin" +RUN --network=none --mount=type=bind,source=src,target=/source/src \ + cp -a /source /tmp/kompli-offline && \ + cmake -S /tmp/kompli-offline/src -B /tmp/kompli-offline/build \ + -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON -DBUILD_TELEMETRY=OFF && \ + cmake --build /tmp/kompli-offline/build --parallel "$(nproc)" && \ + rm -rf /tmp/kompli-offline +WORKDIR /kompli diff --git a/devops/docker/debian-12-amd64/Dockerfile b/devops/docker/debian-12-amd64/Dockerfile index 2b36ed04..535e7bb7 100644 --- a/devops/docker/debian-12-amd64/Dockerfile +++ b/devops/docker/debian-12-amd64/Dockerfile @@ -35,6 +35,22 @@ RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ rm -rf /git/CMake && rm /git/vcpkg-tools.json -COPY . /src -WORKDIR /src -RUN (cd external/vcpkg && ./bootstrap-vcpkg.sh) && (cd src && ../external/vcpkg/vcpkg install) && rm -rf /src +ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ + VCPKG_DOWNLOADS=/opt/kompli/downloads \ + VCPKG_DEFAULT_BINARY_CACHE=/opt/kompli/binary-cache \ + X_VCPKG_REGISTRIES_CACHE=/opt/kompli/registries \ + VCPKG_DISABLE_METRICS=1 +COPY external/vcpkg /opt/kompli/vcpkg +COPY devops/scripts/download-vcpkg-asset.sh /usr/local/bin/download-vcpkg-asset.sh +COPY devops/scripts/prepare-container-dependencies.sh /usr/local/bin/prepare-container-dependencies +RUN --mount=type=bind,source=src,target=/src \ + bash /usr/local/bin/prepare-container-dependencies /src + +ENV X_VCPKG_ASSET_SOURCES="clear;x-block-origin" +RUN --network=none --mount=type=bind,source=src,target=/source/src \ + cp -a /source /tmp/kompli-offline && \ + cmake -S /tmp/kompli-offline/src -B /tmp/kompli-offline/build \ + -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON -DBUILD_TELEMETRY=OFF && \ + cmake --build /tmp/kompli-offline/build --parallel "$(nproc)" && \ + rm -rf /tmp/kompli-offline +WORKDIR /kompli diff --git a/devops/docker/oraclelinux-8-amd64/Dockerfile b/devops/docker/oraclelinux-8-amd64/Dockerfile index dd173723..9ff3aa2e 100644 --- a/devops/docker/oraclelinux-8-amd64/Dockerfile +++ b/devops/docker/oraclelinux-8-amd64/Dockerfile @@ -3,6 +3,7 @@ FROM oraclelinux:8@sha256:1f74281d8cc37c6e4adef0559f4c583022193dcfa8562d2e4a8716 RUN yum install -y \ autoconf \ + curl \ gcc \ gcc-c++ \ git \ @@ -13,7 +14,10 @@ RUN yum install -y \ perl \ perl-IPC-Cmd \ python38 \ - rpm-build + rpm-build \ + tar \ + unzip \ + zip RUN python3.8 -m venv /opt/kompli-venv ENV PATH="/opt/kompli-venv/bin:${PATH}" @@ -28,6 +32,22 @@ RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ rm -rf /git/CMake && rm /git/vcpkg-tools.json -COPY . /src -WORKDIR /src -RUN (cd external/vcpkg && ./bootstrap-vcpkg.sh) && (cd src && ../external/vcpkg/vcpkg install) && rm -rf /src +ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ + VCPKG_DOWNLOADS=/opt/kompli/downloads \ + VCPKG_DEFAULT_BINARY_CACHE=/opt/kompli/binary-cache \ + X_VCPKG_REGISTRIES_CACHE=/opt/kompli/registries \ + VCPKG_DISABLE_METRICS=1 +COPY external/vcpkg /opt/kompli/vcpkg +COPY devops/scripts/download-vcpkg-asset.sh /usr/local/bin/download-vcpkg-asset.sh +COPY devops/scripts/prepare-container-dependencies.sh /usr/local/bin/prepare-container-dependencies +RUN --mount=type=bind,source=src,target=/src \ + bash /usr/local/bin/prepare-container-dependencies /src + +ENV X_VCPKG_ASSET_SOURCES="clear;x-block-origin" +RUN --network=none --mount=type=bind,source=src,target=/source/src \ + cp -a /source /tmp/kompli-offline && \ + cmake -S /tmp/kompli-offline/src -B /tmp/kompli-offline/build \ + -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON -DBUILD_TELEMETRY=OFF && \ + cmake --build /tmp/kompli-offline/build --parallel "$(nproc)" && \ + rm -rf /tmp/kompli-offline +WORKDIR /kompli diff --git a/devops/docker/rhel-8-amd64/Dockerfile b/devops/docker/rhel-8-amd64/Dockerfile index 2fb5c41e..1382898e 100644 --- a/devops/docker/rhel-8-amd64/Dockerfile +++ b/devops/docker/rhel-8-amd64/Dockerfile @@ -32,6 +32,22 @@ RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ rm -rf /git/CMake && rm /git/vcpkg-tools.json -COPY . /src -WORKDIR /src -RUN (cd external/vcpkg && ./bootstrap-vcpkg.sh) && (cd src && ../external/vcpkg/vcpkg install) && rm -rf /src +ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ + VCPKG_DOWNLOADS=/opt/kompli/downloads \ + VCPKG_DEFAULT_BINARY_CACHE=/opt/kompli/binary-cache \ + X_VCPKG_REGISTRIES_CACHE=/opt/kompli/registries \ + VCPKG_DISABLE_METRICS=1 +COPY external/vcpkg /opt/kompli/vcpkg +COPY devops/scripts/download-vcpkg-asset.sh /usr/local/bin/download-vcpkg-asset.sh +COPY devops/scripts/prepare-container-dependencies.sh /usr/local/bin/prepare-container-dependencies +RUN --mount=type=bind,source=src,target=/src \ + bash /usr/local/bin/prepare-container-dependencies /src + +ENV X_VCPKG_ASSET_SOURCES="clear;x-block-origin" +RUN --network=none --mount=type=bind,source=src,target=/source/src \ + cp -a /source /tmp/kompli-offline && \ + cmake -S /tmp/kompli-offline/src -B /tmp/kompli-offline/build \ + -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON -DBUILD_TELEMETRY=OFF && \ + cmake --build /tmp/kompli-offline/build --parallel "$(nproc)" && \ + rm -rf /tmp/kompli-offline +WORKDIR /kompli diff --git a/devops/docker/rhel-9-amd64/Dockerfile b/devops/docker/rhel-9-amd64/Dockerfile index 6fdc895e..da5b457c 100644 --- a/devops/docker/rhel-9-amd64/Dockerfile +++ b/devops/docker/rhel-9-amd64/Dockerfile @@ -32,6 +32,22 @@ RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux rm -rf /git/CMake && rm /git/vcpkg-tools.json -COPY . /src -WORKDIR /src -RUN (cd external/vcpkg && ./bootstrap-vcpkg.sh) && (cd src && ../external/vcpkg/vcpkg install) && rm -rf /src +ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ + VCPKG_DOWNLOADS=/opt/kompli/downloads \ + VCPKG_DEFAULT_BINARY_CACHE=/opt/kompli/binary-cache \ + X_VCPKG_REGISTRIES_CACHE=/opt/kompli/registries \ + VCPKG_DISABLE_METRICS=1 +COPY external/vcpkg /opt/kompli/vcpkg +COPY devops/scripts/download-vcpkg-asset.sh /usr/local/bin/download-vcpkg-asset.sh +COPY devops/scripts/prepare-container-dependencies.sh /usr/local/bin/prepare-container-dependencies +RUN --mount=type=bind,source=src,target=/src \ + bash /usr/local/bin/prepare-container-dependencies /src + +ENV X_VCPKG_ASSET_SOURCES="clear;x-block-origin" +RUN --network=none --mount=type=bind,source=src,target=/source/src \ + cp -a /source /tmp/kompli-offline && \ + cmake -S /tmp/kompli-offline/src -B /tmp/kompli-offline/build \ + -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON -DBUILD_TELEMETRY=OFF && \ + cmake --build /tmp/kompli-offline/build --parallel "$(nproc)" && \ + rm -rf /tmp/kompli-offline +WORKDIR /kompli diff --git a/devops/docker/rockylinux-9-amd64/Dockerfile b/devops/docker/rockylinux-9-amd64/Dockerfile index 2aeafa83..f34773be 100644 --- a/devops/docker/rockylinux-9-amd64/Dockerfile +++ b/devops/docker/rockylinux-9-amd64/Dockerfile @@ -31,6 +31,22 @@ RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ rm -rf /git/CMake && rm /git/vcpkg-tools.json -COPY . /src -WORKDIR /src -RUN (cd external/vcpkg && ./bootstrap-vcpkg.sh) && (cd src && ../external/vcpkg/vcpkg install) && rm -rf /src +ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ + VCPKG_DOWNLOADS=/opt/kompli/downloads \ + VCPKG_DEFAULT_BINARY_CACHE=/opt/kompli/binary-cache \ + X_VCPKG_REGISTRIES_CACHE=/opt/kompli/registries \ + VCPKG_DISABLE_METRICS=1 +COPY external/vcpkg /opt/kompli/vcpkg +COPY devops/scripts/download-vcpkg-asset.sh /usr/local/bin/download-vcpkg-asset.sh +COPY devops/scripts/prepare-container-dependencies.sh /usr/local/bin/prepare-container-dependencies +RUN --mount=type=bind,source=src,target=/src \ + bash /usr/local/bin/prepare-container-dependencies /src + +ENV X_VCPKG_ASSET_SOURCES="clear;x-block-origin" +RUN --network=none --mount=type=bind,source=src,target=/source/src \ + cp -a /source /tmp/kompli-offline && \ + cmake -S /tmp/kompli-offline/src -B /tmp/kompli-offline/build \ + -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON -DBUILD_TELEMETRY=OFF && \ + cmake --build /tmp/kompli-offline/build --parallel "$(nproc)" && \ + rm -rf /tmp/kompli-offline +WORKDIR /kompli diff --git a/devops/docker/sles-15-amd64/Dockerfile b/devops/docker/sles-15-amd64/Dockerfile index 00abb0a3..a5d0c3c5 100644 --- a/devops/docker/sles-15-amd64/Dockerfile +++ b/devops/docker/sles-15-amd64/Dockerfile @@ -37,6 +37,22 @@ RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ rm -rf /git/CMake && rm /git/vcpkg-tools.json -COPY . /src -WORKDIR /src -RUN (cd external/vcpkg && ./bootstrap-vcpkg.sh) && (cd src && ../external/vcpkg/vcpkg install) && rm -rf /src +ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ + VCPKG_DOWNLOADS=/opt/kompli/downloads \ + VCPKG_DEFAULT_BINARY_CACHE=/opt/kompli/binary-cache \ + X_VCPKG_REGISTRIES_CACHE=/opt/kompli/registries \ + VCPKG_DISABLE_METRICS=1 +COPY external/vcpkg /opt/kompli/vcpkg +COPY devops/scripts/download-vcpkg-asset.sh /usr/local/bin/download-vcpkg-asset.sh +COPY devops/scripts/prepare-container-dependencies.sh /usr/local/bin/prepare-container-dependencies +RUN --mount=type=bind,source=src,target=/src \ + bash /usr/local/bin/prepare-container-dependencies /src + +ENV X_VCPKG_ASSET_SOURCES="clear;x-block-origin" +RUN --network=none --mount=type=bind,source=src,target=/source/src \ + cp -a /source /tmp/kompli-offline && \ + cmake -S /tmp/kompli-offline/src -B /tmp/kompli-offline/build \ + -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON -DBUILD_TELEMETRY=OFF && \ + cmake --build /tmp/kompli-offline/build --parallel "$(nproc)" && \ + rm -rf /tmp/kompli-offline +WORKDIR /kompli diff --git a/devops/docker/ubuntu-20.04-amd64/Dockerfile b/devops/docker/ubuntu-20.04-amd64/Dockerfile index 784b07d6..fc18c14e 100644 --- a/devops/docker/ubuntu-20.04-amd64/Dockerfile +++ b/devops/docker/ubuntu-20.04-amd64/Dockerfile @@ -43,6 +43,22 @@ RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ rm -rf /git/CMake && rm /git/vcpkg-tools.json -COPY . /src -WORKDIR /src -RUN (cd external/vcpkg && ./bootstrap-vcpkg.sh) && (cd src && ../external/vcpkg/vcpkg install) && rm -rf /src +ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ + VCPKG_DOWNLOADS=/opt/kompli/downloads \ + VCPKG_DEFAULT_BINARY_CACHE=/opt/kompli/binary-cache \ + X_VCPKG_REGISTRIES_CACHE=/opt/kompli/registries \ + VCPKG_DISABLE_METRICS=1 +COPY external/vcpkg /opt/kompli/vcpkg +COPY devops/scripts/download-vcpkg-asset.sh /usr/local/bin/download-vcpkg-asset.sh +COPY devops/scripts/prepare-container-dependencies.sh /usr/local/bin/prepare-container-dependencies +RUN --mount=type=bind,source=src,target=/src \ + bash /usr/local/bin/prepare-container-dependencies /src + +ENV X_VCPKG_ASSET_SOURCES="clear;x-block-origin" +RUN --network=none --mount=type=bind,source=src,target=/source/src \ + cp -a /source /tmp/kompli-offline && \ + cmake -S /tmp/kompli-offline/src -B /tmp/kompli-offline/build \ + -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON -DBUILD_TELEMETRY=OFF && \ + cmake --build /tmp/kompli-offline/build --parallel "$(nproc)" && \ + rm -rf /tmp/kompli-offline +WORKDIR /kompli diff --git a/devops/docker/ubuntu-22.04-amd64/Dockerfile b/devops/docker/ubuntu-22.04-amd64/Dockerfile index 64a6d953..f09fd1e4 100644 --- a/devops/docker/ubuntu-22.04-amd64/Dockerfile +++ b/devops/docker/ubuntu-22.04-amd64/Dockerfile @@ -41,6 +41,22 @@ RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ rm -rf /git/CMake && rm /git/vcpkg-tools.json -COPY . /src -WORKDIR /src -RUN (cd external/vcpkg && ./bootstrap-vcpkg.sh) && (cd src && ../external/vcpkg/vcpkg install) && rm -rf /src +ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ + VCPKG_DOWNLOADS=/opt/kompli/downloads \ + VCPKG_DEFAULT_BINARY_CACHE=/opt/kompli/binary-cache \ + X_VCPKG_REGISTRIES_CACHE=/opt/kompli/registries \ + VCPKG_DISABLE_METRICS=1 +COPY external/vcpkg /opt/kompli/vcpkg +COPY devops/scripts/download-vcpkg-asset.sh /usr/local/bin/download-vcpkg-asset.sh +COPY devops/scripts/prepare-container-dependencies.sh /usr/local/bin/prepare-container-dependencies +RUN --mount=type=bind,source=src,target=/src \ + bash /usr/local/bin/prepare-container-dependencies /src + +ENV X_VCPKG_ASSET_SOURCES="clear;x-block-origin" +RUN --network=none --mount=type=bind,source=src,target=/source/src \ + cp -a /source /tmp/kompli-offline && \ + cmake -S /tmp/kompli-offline/src -B /tmp/kompli-offline/build \ + -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON -DBUILD_TELEMETRY=OFF && \ + cmake --build /tmp/kompli-offline/build --parallel "$(nproc)" && \ + rm -rf /tmp/kompli-offline +WORKDIR /kompli diff --git a/devops/docker/ubuntu-24.04-amd64/Dockerfile b/devops/docker/ubuntu-24.04-amd64/Dockerfile index 2722b8ce..9109a9db 100644 --- a/devops/docker/ubuntu-24.04-amd64/Dockerfile +++ b/devops/docker/ubuntu-24.04-amd64/Dockerfile @@ -42,6 +42,22 @@ RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ rm -rf /git/CMake && rm /git/vcpkg-tools.json -COPY . /src -WORKDIR /src -RUN (cd external/vcpkg && ./bootstrap-vcpkg.sh) && (cd src && ../external/vcpkg/vcpkg install) && rm -rf /src +ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ + VCPKG_DOWNLOADS=/opt/kompli/downloads \ + VCPKG_DEFAULT_BINARY_CACHE=/opt/kompli/binary-cache \ + X_VCPKG_REGISTRIES_CACHE=/opt/kompli/registries \ + VCPKG_DISABLE_METRICS=1 +COPY external/vcpkg /opt/kompli/vcpkg +COPY devops/scripts/download-vcpkg-asset.sh /usr/local/bin/download-vcpkg-asset.sh +COPY devops/scripts/prepare-container-dependencies.sh /usr/local/bin/prepare-container-dependencies +RUN --mount=type=bind,source=src,target=/src \ + bash /usr/local/bin/prepare-container-dependencies /src + +ENV X_VCPKG_ASSET_SOURCES="clear;x-block-origin" +RUN --network=none --mount=type=bind,source=src,target=/source/src \ + cp -a /source /tmp/kompli-offline && \ + cmake -S /tmp/kompli-offline/src -B /tmp/kompli-offline/build \ + -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON -DBUILD_TELEMETRY=OFF && \ + cmake --build /tmp/kompli-offline/build --parallel "$(nproc)" && \ + rm -rf /tmp/kompli-offline +WORKDIR /kompli diff --git a/devops/scripts/download-vcpkg-asset.sh b/devops/scripts/download-vcpkg-asset.sh new file mode 100644 index 00000000..e016bd42 --- /dev/null +++ b/devops/scripts/download-vcpkg-asset.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +set -euo pipefail + +url="$1" +destination="$2" + +# vcpkg checks the downloaded file against the port's SHA512 before using it. +if [[ "$url" =~ ^https://www\.lua\.org/ftp/(lua-[0-9.]+\.tar\.gz)$ ]]; then + curl --fail --location --retry 3 --connect-timeout 15 --max-time 120 \ + "https://distfiles.macports.org/lua/${BASH_REMATCH[1]}" \ + --output "$destination" +else + # A cache miss lets vcpkg use the original URL. + exit 1 +fi diff --git a/devops/scripts/prepare-container-dependencies.sh b/devops/scripts/prepare-container-dependencies.sh new file mode 100644 index 00000000..8288eac8 --- /dev/null +++ b/devops/scripts/prepare-container-dependencies.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +set -euo pipefail + +manifest_root="$1" +install_root="$(mktemp -d)" +trap 'rm -rf -- "$install_root"' EXIT + +mkdir -p "$VCPKG_DOWNLOADS" "$VCPKG_DEFAULT_BINARY_CACHE" "$X_VCPKG_REGISTRIES_CACHE" +bash "$KOMPLI_VCPKG_ROOT/bootstrap-vcpkg.sh" -disableMetrics +"$KOMPLI_VCPKG_ROOT/vcpkg" install \ + "--x-asset-sources=x-script,bash /usr/local/bin/download-vcpkg-asset.sh {url} {dst}" \ + --x-manifest-root="$manifest_root" \ + --x-install-root="$install_root" +cp "$install_root/vcpkg/vcpkg-lock.json" "$KOMPLI_VCPKG_ROOT/vcpkg-lock.json" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 840797cb..c297f7cd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,6 +8,22 @@ endif() set(VCPKG_SOURCE_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../external/vcpkg") set(VCPKG_ROOT_DIR "${CMAKE_CURRENT_BINARY_DIR}/vcpkg_root") +if(DEFINED ENV{KOMPLI_VCPKG_ROOT}) + set(VCPKG_ROOT_DIR "$ENV{KOMPLI_VCPKG_ROOT}") + if(NOT EXISTS "${VCPKG_ROOT_DIR}/vcpkg" OR NOT EXISTS "${VCPKG_ROOT_DIR}/scripts/buildsystems/vcpkg.cmake") + message(FATAL_ERROR "KOMPLI_VCPKG_ROOT must point to a bootstrapped vcpkg tree; rebuild the build container") + endif() + if(NOT EXISTS "${VCPKG_ROOT_DIR}/vcpkg-lock.json") + message(FATAL_ERROR "Missing cached vcpkg registry lock; rebuild the build container") + endif() + if(NOT EXISTS "${CMAKE_BINARY_DIR}/vcpkg_installed/vcpkg/vcpkg-lock.json") + configure_file( + "${VCPKG_ROOT_DIR}/vcpkg-lock.json" + "${CMAKE_BINARY_DIR}/vcpkg_installed/vcpkg/vcpkg-lock.json" + COPYONLY + ) + endif() +endif() set(VCPKG_TOOLCHAIN_FILE_PATH "${VCPKG_ROOT_DIR}/scripts/buildsystems/vcpkg.cmake") set(VCPKG_EXECUTABLE_PATH "${VCPKG_ROOT_DIR}/vcpkg") @@ -104,7 +120,7 @@ endif() if (RUN_VCPKG_INSTALL) message(STATUS "Running vcpkg install (first run or manifest changed).") execute_process( - COMMAND ${VCPKG_EXECUTABLE_PATH} install + COMMAND ${VCPKG_EXECUTABLE_PATH} install "--x-install-root=${CMAKE_BINARY_DIR}/vcpkg_installed" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RESULT_VARIABLE VCPKG_INSTALL_RESULT ) From f39a71169fb213ed010678713fa76fcb4cca50f5 Mon Sep 17 00:00:00 2001 From: Krzysztof Kanas Date: Mon, 9 Nov 2026 20:50:12 +0100 Subject: [PATCH 6/7] devops: bootstrap container CMake and vcpkg dependencies like OpenSSL, lua, sqlite3 Build CMake 3.30.1 against system libraries to bootstrap dependencies on older distributions, then build vcpkg's required CMake version against static vcpkg OpenSSL. - Share CMake installation and version checks across all build images - Fetch Ninja before installing dependencies with bootstrap tools - Refresh package ABIs and binary caches with the final CMake - Update container documentation and workflow triggers Signed-off-by: Krzysztof Kanas --- .github/workflows/build-containers.yml | 4 ++ devops/README.md | 28 ++++++++--- devops/docker/almalinux-9-amd64/Dockerfile | 9 ++-- devops/docker/azurelinux-3-amd64/Dockerfile | 9 ++-- devops/docker/debian-12-amd64/Dockerfile | 9 ++-- devops/docker/oraclelinux-8-amd64/Dockerfile | 9 ++-- devops/docker/rhel-8-amd64/Dockerfile | 9 ++-- devops/docker/rhel-9-amd64/Dockerfile | 9 ++-- devops/docker/rockylinux-9-amd64/Dockerfile | 9 ++-- devops/docker/sles-15-amd64/Dockerfile | 9 ++-- devops/docker/ubuntu-20.04-amd64/Dockerfile | 9 ++-- devops/docker/ubuntu-22.04-amd64/Dockerfile | 9 ++-- devops/docker/ubuntu-24.04-amd64/Dockerfile | 9 ++-- devops/scripts/install-container-cmake.sh | 46 +++++++++++++++++++ .../scripts/prepare-container-dependencies.sh | 33 +++++++++++-- 15 files changed, 135 insertions(+), 75 deletions(-) create mode 100644 devops/scripts/install-container-cmake.sh diff --git a/.github/workflows/build-containers.yml b/.github/workflows/build-containers.yml index 811c5553..04f2ed1a 100644 --- a/.github/workflows/build-containers.yml +++ b/.github/workflows/build-containers.yml @@ -4,9 +4,11 @@ on: pull_request: paths: - devops/docker/**/Dockerfile + - devops/scripts/install-container-cmake.sh - devops/scripts/prepare-container-dependencies.sh - devops/scripts/download-vcpkg-asset.sh - devops/scripts/tests/test_container_dependencies.py + - devops/scripts/tests/test_container_cmake.py - external/vcpkg - src/vcpkg*.json - src/CMakeLists.txt @@ -19,8 +21,10 @@ on: - main paths: - devops/docker/**/Dockerfile + - devops/scripts/install-container-cmake.sh - devops/scripts/prepare-container-dependencies.sh - devops/scripts/download-vcpkg-asset.sh + - devops/scripts/tests/test_container_cmake.py - external/vcpkg - src/vcpkg*.json - src/CMakeLists.txt diff --git a/devops/README.md b/devops/README.md index f93dba68..e57b509f 100644 --- a/devops/README.md +++ b/devops/README.md @@ -17,11 +17,27 @@ This folder contains the artifacts and scripts used by our engineering systems ( - `rpm` - RPM packaging scripts ## Updating build containers used for CI builds -All build containers read the Linux amd64 CMake version from -[`external/vcpkg/scripts/vcpkg-tools.json`](../external/vcpkg/scripts/vcpkg-tools.json) -and build that version from source. The build verifies that `cmake` on `PATH` -reports the selected version before installing vcpkg dependencies. No manual -`CMAKE_VERSION` build argument is needed. Build images from the repository root +All build containers use a two-stage CMake source build: + +1. `ARG CMAKE_VERSION=v3.30.1` selects the bootstrap CMake tag. This version + supports the system OpenSSL 1.1 development libraries on Oracle Linux 8, + RHEL 8, and Ubuntu 20.04. +2. The bootstrap CMake installs the dependencies from + [`src/vcpkg.json`](../src/vcpkg.json), including OpenSSL 3.6 or newer. vcpkg + acquires Ninja first, then uses the bootstrap tools without downloading a + newer CMake binary. +3. The final CMake version is selected from the Linux amd64 entry in + [`external/vcpkg/scripts/vcpkg-tools.json`](../external/vcpkg/scripts/vcpkg-tools.json) + and built from source against the static OpenSSL libraries installed by + vcpkg. Static linking keeps the final tools usable after the temporary + dependency installation is removed. Headers, libraries, and pkg-config + metadata all come from that same OpenSSL prefix. +4. The manifest is installed again with the final CMake to refresh package ABIs + and populate the binary cache used by subsequent offline project builds. + +Both CMake builds verify the installed `cmake`, `ctest`, and `cpack` versions. +`--build-arg CMAKE_VERSION=v3.30.1` can override the bootstrap tag only; the +final version always follows vcpkg's tool metadata. Build images from the repository root with Podman (or Docker with BuildKit enabled) and the vcpkg submodule initialized, for example: @@ -51,7 +67,7 @@ uses an external SDK outside the vcpkg manifest and is not covered by this offline check. Changes to the manifest, registry configuration, vcpkg submodule, overlays, -triplets, dependency preparation script, root CMake configuration, or Dockerfiles +triplets, CMake installation script, dependency preparation script, root CMake configuration, or Dockerfiles trigger the [build-container workflow](../.github/workflows/build-containers.yml). Rebuild images when these dependency inputs change; do not enable downloads in the later project build to work around stale images. diff --git a/devops/docker/almalinux-9-amd64/Dockerfile b/devops/docker/almalinux-9-amd64/Dockerfile index 959d5843..ebf6251a 100644 --- a/devops/docker/almalinux-9-amd64/Dockerfile +++ b/devops/docker/almalinux-9-amd64/Dockerfile @@ -24,12 +24,9 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json -RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ - git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ - cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ - cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ - rm -rf /git/CMake && rm /git/vcpkg-tools.json +ARG CMAKE_VERSION=v3.30.1 +COPY devops/scripts/install-container-cmake.sh /usr/local/bin/install-container-cmake +RUN bash /usr/local/bin/install-container-cmake "$CMAKE_VERSION" /usr/local ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ diff --git a/devops/docker/azurelinux-3-amd64/Dockerfile b/devops/docker/azurelinux-3-amd64/Dockerfile index 70817334..4bc33c28 100644 --- a/devops/docker/azurelinux-3-amd64/Dockerfile +++ b/devops/docker/azurelinux-3-amd64/Dockerfile @@ -33,12 +33,9 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json -RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ - git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ - cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ - cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ - rm -rf /git/CMake && rm /git/vcpkg-tools.json +ARG CMAKE_VERSION=v3.30.1 +COPY devops/scripts/install-container-cmake.sh /usr/local/bin/install-container-cmake +RUN bash /usr/local/bin/install-container-cmake "$CMAKE_VERSION" /usr/local ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ VCPKG_DOWNLOADS=/opt/kompli/downloads \ diff --git a/devops/docker/debian-12-amd64/Dockerfile b/devops/docker/debian-12-amd64/Dockerfile index 535e7bb7..ef0d0992 100644 --- a/devops/docker/debian-12-amd64/Dockerfile +++ b/devops/docker/debian-12-amd64/Dockerfile @@ -28,12 +28,9 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json -RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ - git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ - cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ - cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ - rm -rf /git/CMake && rm /git/vcpkg-tools.json +ARG CMAKE_VERSION=v3.30.1 +COPY devops/scripts/install-container-cmake.sh /usr/local/bin/install-container-cmake +RUN bash /usr/local/bin/install-container-cmake "$CMAKE_VERSION" /usr/local ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ VCPKG_DOWNLOADS=/opt/kompli/downloads \ diff --git a/devops/docker/oraclelinux-8-amd64/Dockerfile b/devops/docker/oraclelinux-8-amd64/Dockerfile index 9ff3aa2e..ded5980c 100644 --- a/devops/docker/oraclelinux-8-amd64/Dockerfile +++ b/devops/docker/oraclelinux-8-amd64/Dockerfile @@ -25,12 +25,9 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json -RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ - git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ - cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ - cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ - rm -rf /git/CMake && rm /git/vcpkg-tools.json +ARG CMAKE_VERSION=v3.30.1 +COPY devops/scripts/install-container-cmake.sh /usr/local/bin/install-container-cmake +RUN bash /usr/local/bin/install-container-cmake "$CMAKE_VERSION" /usr/local ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ VCPKG_DOWNLOADS=/opt/kompli/downloads \ diff --git a/devops/docker/rhel-8-amd64/Dockerfile b/devops/docker/rhel-8-amd64/Dockerfile index 1382898e..e053b2b0 100644 --- a/devops/docker/rhel-8-amd64/Dockerfile +++ b/devops/docker/rhel-8-amd64/Dockerfile @@ -25,12 +25,9 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json -RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ - git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ - cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ - cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ - rm -rf /git/CMake && rm /git/vcpkg-tools.json +ARG CMAKE_VERSION=v3.30.1 +COPY devops/scripts/install-container-cmake.sh /usr/local/bin/install-container-cmake +RUN bash /usr/local/bin/install-container-cmake "$CMAKE_VERSION" /usr/local ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ VCPKG_DOWNLOADS=/opt/kompli/downloads \ diff --git a/devops/docker/rhel-9-amd64/Dockerfile b/devops/docker/rhel-9-amd64/Dockerfile index da5b457c..40d561d0 100644 --- a/devops/docker/rhel-9-amd64/Dockerfile +++ b/devops/docker/rhel-9-amd64/Dockerfile @@ -24,12 +24,9 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json -RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ - git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ - cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ - cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ - rm -rf /git/CMake && rm /git/vcpkg-tools.json +ARG CMAKE_VERSION=v3.30.1 +COPY devops/scripts/install-container-cmake.sh /usr/local/bin/install-container-cmake +RUN bash /usr/local/bin/install-container-cmake "$CMAKE_VERSION" /usr/local ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ diff --git a/devops/docker/rockylinux-9-amd64/Dockerfile b/devops/docker/rockylinux-9-amd64/Dockerfile index f34773be..c87c7f9d 100644 --- a/devops/docker/rockylinux-9-amd64/Dockerfile +++ b/devops/docker/rockylinux-9-amd64/Dockerfile @@ -24,12 +24,9 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json -RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ - git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ - cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ - cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ - rm -rf /git/CMake && rm /git/vcpkg-tools.json +ARG CMAKE_VERSION=v3.30.1 +COPY devops/scripts/install-container-cmake.sh /usr/local/bin/install-container-cmake +RUN bash /usr/local/bin/install-container-cmake "$CMAKE_VERSION" /usr/local ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ VCPKG_DOWNLOADS=/opt/kompli/downloads \ diff --git a/devops/docker/sles-15-amd64/Dockerfile b/devops/docker/sles-15-amd64/Dockerfile index a5d0c3c5..414bfe28 100644 --- a/devops/docker/sles-15-amd64/Dockerfile +++ b/devops/docker/sles-15-amd64/Dockerfile @@ -30,12 +30,9 @@ RUN printf '%s\n' \ WORKDIR /git # CMake -COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json -RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ - git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ - cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ - cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ - rm -rf /git/CMake && rm /git/vcpkg-tools.json +ARG CMAKE_VERSION=v3.30.1 +COPY devops/scripts/install-container-cmake.sh /usr/local/bin/install-container-cmake +RUN bash /usr/local/bin/install-container-cmake "$CMAKE_VERSION" /usr/local ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ VCPKG_DOWNLOADS=/opt/kompli/downloads \ diff --git a/devops/docker/ubuntu-20.04-amd64/Dockerfile b/devops/docker/ubuntu-20.04-amd64/Dockerfile index fc18c14e..9d00cb8a 100644 --- a/devops/docker/ubuntu-20.04-amd64/Dockerfile +++ b/devops/docker/ubuntu-20.04-amd64/Dockerfile @@ -36,12 +36,9 @@ RUN apt-get update && apt-get install -y dotnet-sdk-5.0 WORKDIR /git # CMake -COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json -RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ - git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ - cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ - cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ - rm -rf /git/CMake && rm /git/vcpkg-tools.json +ARG CMAKE_VERSION=v3.30.1 +COPY devops/scripts/install-container-cmake.sh /usr/local/bin/install-container-cmake +RUN bash /usr/local/bin/install-container-cmake "$CMAKE_VERSION" /usr/local ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ VCPKG_DOWNLOADS=/opt/kompli/downloads \ diff --git a/devops/docker/ubuntu-22.04-amd64/Dockerfile b/devops/docker/ubuntu-22.04-amd64/Dockerfile index f09fd1e4..060cf190 100644 --- a/devops/docker/ubuntu-22.04-amd64/Dockerfile +++ b/devops/docker/ubuntu-22.04-amd64/Dockerfile @@ -34,12 +34,9 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json -RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ - git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ - cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ - cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ - rm -rf /git/CMake && rm /git/vcpkg-tools.json +ARG CMAKE_VERSION=v3.30.1 +COPY devops/scripts/install-container-cmake.sh /usr/local/bin/install-container-cmake +RUN bash /usr/local/bin/install-container-cmake "$CMAKE_VERSION" /usr/local ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ VCPKG_DOWNLOADS=/opt/kompli/downloads \ diff --git a/devops/docker/ubuntu-24.04-amd64/Dockerfile b/devops/docker/ubuntu-24.04-amd64/Dockerfile index 9109a9db..f4a14885 100644 --- a/devops/docker/ubuntu-24.04-amd64/Dockerfile +++ b/devops/docker/ubuntu-24.04-amd64/Dockerfile @@ -35,12 +35,9 @@ ENV PATH="/opt/kompli-venv/bin:${PATH}" WORKDIR /git # CMake -COPY external/vcpkg/scripts/vcpkg-tools.json /git/vcpkg-tools.json -RUN CMAKE_VERSION=$(jq -er '.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64") | .version' /git/vcpkg-tools.json) && \ - git clone https://github.com/Kitware/CMake --recursive -b "v${CMAKE_VERSION}" && \ - cd CMake && ./bootstrap && make -j$(nproc) && make install && hash -r && \ - cmake --version | grep -Fx "cmake version ${CMAKE_VERSION}" && \ - rm -rf /git/CMake && rm /git/vcpkg-tools.json +ARG CMAKE_VERSION=v3.30.1 +COPY devops/scripts/install-container-cmake.sh /usr/local/bin/install-container-cmake +RUN bash /usr/local/bin/install-container-cmake "$CMAKE_VERSION" /usr/local ENV KOMPLI_VCPKG_ROOT=/opt/kompli/vcpkg \ VCPKG_DOWNLOADS=/opt/kompli/downloads \ diff --git a/devops/scripts/install-container-cmake.sh b/devops/scripts/install-container-cmake.sh new file mode 100644 index 00000000..d7c0c663 --- /dev/null +++ b/devops/scripts/install-container-cmake.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +set -euo pipefail + +version="${1#v}" +prefix="$2" +openssl_root="${3:-}" +jobs="$(nproc)" + +build_root="$(mktemp -d)" +trap 'rm -rf -- "$build_root"' EXIT + +git clone --depth 1 --recursive --branch "v$version" \ + https://github.com/Kitware/CMake "$build_root/source" +cd "$build_root/source" + +cmake_options=() +if [[ -n "$openssl_root" ]]; then + cmake_options+=("-DOPENSSL_ROOT_DIR=$openssl_root" -DOPENSSL_USE_STATIC_LIBS=TRUE) + export PKG_CONFIG_PATH="$openssl_root/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" +fi +./bootstrap --prefix="$prefix" --parallel="$jobs" -- "${cmake_options[@]}" + +if [[ -n "$openssl_root" ]]; then + for entry in \ + "OPENSSL_INCLUDE_DIR:PATH=$openssl_root/include" \ + "OPENSSL_SSL_LIBRARY:FILEPATH=$openssl_root/lib/libssl.a" \ + "OPENSSL_CRYPTO_LIBRARY:FILEPATH=$openssl_root/lib/libcrypto.a"; do + if ! grep -Fx "$entry" CMakeCache.txt; then + echo "CMake did not select the static vcpkg OpenSSL installation: $entry" >&2 + exit 1 + fi + done +fi + +make -j"$jobs" +make install +for executable in cmake ctest cpack; do + actual_version="$("$prefix/bin/$executable" --version)" + if ! printf '%s\n' "$actual_version" | grep -Fx "$executable version $version"; then + echo "$executable does not match the requested CMake version ($version)" >&2 + exit 1 + fi +done diff --git a/devops/scripts/prepare-container-dependencies.sh b/devops/scripts/prepare-container-dependencies.sh index 8288eac8..b29c85aa 100644 --- a/devops/scripts/prepare-container-dependencies.sh +++ b/devops/scripts/prepare-container-dependencies.sh @@ -10,8 +10,35 @@ trap 'rm -rf -- "$install_root"' EXIT mkdir -p "$VCPKG_DOWNLOADS" "$VCPKG_DEFAULT_BINARY_CACHE" "$X_VCPKG_REGISTRIES_CACHE" bash "$KOMPLI_VCPKG_ROOT/bootstrap-vcpkg.sh" -disableMetrics -"$KOMPLI_VCPKG_ROOT/vcpkg" install \ - "--x-asset-sources=x-script,bash /usr/local/bin/download-vcpkg-asset.sh {url} {dst}" \ - --x-manifest-root="$manifest_root" \ + +final_version="$(jq -er ' + [.tools[] | select(.name == "cmake" and .os == "linux" and .arch == "amd64")] + | if length == 1 then .[0].version else error("Expected one Linux amd64 CMake tool") end +' "$KOMPLI_VCPKG_ROOT/scripts/vcpkg-tools.json")" + +if ninja="$("$KOMPLI_VCPKG_ROOT/vcpkg" fetch ninja --x-stderr-status)"; then + if [[ ! -x "$ninja" ]]; then + echo "vcpkg did not return an executable Ninja tool: $ninja" >&2 + exit 1 + fi +else + status="$?" + printf '%s\n' "$ninja" >&2 + exit "$status" +fi +export PATH="$(dirname "$ninja"):$PATH" + +install_arguments=( + "--x-asset-sources=x-script,bash /usr/local/bin/download-vcpkg-asset.sh {url} {dst}" + --triplet=x64-linux + --x-manifest-root="$manifest_root" --x-install-root="$install_root" +) +VCPKG_FORCE_SYSTEM_BINARIES=1 "$KOMPLI_VCPKG_ROOT/vcpkg" install "${install_arguments[@]}" + +bash "$(dirname "${BASH_SOURCE[0]}")/install-container-cmake" \ + "v$final_version" /usr/local "$install_root/x64-linux" + +# Refresh package ABIs and binary caches with the final CMake toolchain. +"$KOMPLI_VCPKG_ROOT/vcpkg" install "${install_arguments[@]}" cp "$install_root/vcpkg/vcpkg-lock.json" "$KOMPLI_VCPKG_ROOT/vcpkg-lock.json" From 45349116f56f29a18944453e51bb93443977e607 Mon Sep 17 00:00:00 2001 From: Krzysztof Kanas Date: Mon, 9 Nov 2026 22:49:57 +0100 Subject: [PATCH 7/7] ci: update docker matrix with prebuild dependencies cmake, sqlite3 etc Signed-off-by: Krzysztof Kanas --- .github/test-matrix.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/test-matrix.json b/.github/test-matrix.json index 10a86591..1ba144f1 100644 --- a/.github/test-matrix.json +++ b/.github/test-matrix.json @@ -1,13 +1,13 @@ [ -{ "name": "almalinux-9", "arch": "amd64", "tag": "@sha256:27aba382812a4ad52f32589bc35dad62bc1bec966df6c3ca34e15eea83dfb6cd", "git_label": "ghcr.io/microsoft/kompli/almalinux-9-amd64:git-db3dcdd446c78630f9d77b6ae3a471bb8f0acfdb"}, -{ "name": "azurelinux-3", "arch": "amd64", "tag": "@sha256:5e972f22e641d609dbf490f2116ddb0eb6f232bb5e7d9ac48e0fb827d93d9566", "git_label": "ghcr.io/microsoft/kompli/azurelinux-3-amd64:git-db3dcdd446c78630f9d77b6ae3a471bb8f0acfdb"}, -{ "name": "debian-12", "arch": "amd64", "tag": "@sha256:eeb284231a1c4035cab7bdddc36af1e2e5fa5cbfb7d0e9888aed8ad4101d7eef", "git_label": "ghcr.io/microsoft/kompli/debian-12-amd64:git-db3dcdd446c78630f9d77b6ae3a471bb8f0acfdb"}, -{ "name": "oraclelinux-8", "arch": "amd64", "tag": "@sha256:fbd141a63c80f05c18cd78a69ceede010e67f06ef74faf915d5d4a12c040c496", "git_label": "ghcr.io/microsoft/kompli/oraclelinux-8-amd64:git-db3dcdd446c78630f9d77b6ae3a471bb8f0acfdb"}, -{ "name": "rhel-8", "arch": "amd64", "tag": "@sha256:4d527bf8eb9a71a745f7f8d965c50d3a1e9b26a5c49c778a139479e4d54626a2", "git_label": "ghcr.io/microsoft/kompli/rhel-8-amd64:git-db3dcdd446c78630f9d77b6ae3a471bb8f0acfdb"}, -{ "name": "rhel-9", "arch": "amd64", "tag": "@sha256:493edc77899a9e5c034561179a1b7ef1d813778bee5dc2c453356436dc33153b", "git_label": "ghcr.io/microsoft/kompli/rhel-9-amd64:git-db3dcdd446c78630f9d77b6ae3a471bb8f0acfdb"}, -{ "name": "rockylinux-9", "arch": "amd64", "tag": "@sha256:a0f2b6c70b6d47c9d3ee81ec3d7a9fc2e3122cf1ac893fee2087946ee9078b99", "git_label": "ghcr.io/microsoft/kompli/rockylinux-9-amd64:git-db3dcdd446c78630f9d77b6ae3a471bb8f0acfdb"}, -{ "name": "sles-15", "arch": "amd64", "tag": "@sha256:c264c47e8772060f5a5a9b26ee62ad646cc984d719e32576688d19af4953da21", "git_label": "ghcr.io/microsoft/kompli/sles-15-amd64:git-db3dcdd446c78630f9d77b6ae3a471bb8f0acfdb"}, -{ "name": "ubuntu-20.04", "arch": "amd64", "tag": "@sha256:326f92ee417a0810e3d282b83542683d3beb65b297836529979705e9331fc213", "git_label": "ghcr.io/microsoft/kompli/ubuntu-20.04-amd64:git-db3dcdd446c78630f9d77b6ae3a471bb8f0acfdb"}, -{ "name": "ubuntu-22.04", "arch": "amd64", "tag": "@sha256:93793e1d5981e4abf256988afabe289807ef6f710714b394b51e5baf6d9a77e5", "git_label": "ghcr.io/microsoft/kompli/ubuntu-22.04-amd64:git-db3dcdd446c78630f9d77b6ae3a471bb8f0acfdb"}, -{ "name": "ubuntu-24.04", "arch": "amd64", "tag": "@sha256:e34558434b4814ac851460033ee210fb93f2e57f40f9f15d169d728ed910e4e8", "git_label": "ghcr.io/microsoft/kompli/ubuntu-24.04-amd64:git-db3dcdd446c78630f9d77b6ae3a471bb8f0acfdb"} +{ "name": "almalinux-9", "arch": "amd64", "tag": "@sha256:f9aaafc6cdd213e8f46b6eceefb0ff69934257f0c6b131833ef1cebb96256591", "git_label": "ghcr.io/microsoft/kompli/almalinux-9-amd64:git-805a020d5adc3f989785111b86b2d5c5b880421e"}, +{ "name": "azurelinux-3", "arch": "amd64", "tag": "@sha256:ebe0dddc9dd6c4fbd182361b9e091cbd7019493f3f5bc4f48657c07585da437f", "git_label": "ghcr.io/microsoft/kompli/azurelinux-3-amd64:git-805a020d5adc3f989785111b86b2d5c5b880421e"}, +{ "name": "debian-12", "arch": "amd64", "tag": "@sha256:15a82dbf1bef6a64b4d2dd2bf17134171cbc6592f09459fa3026d7af06ea8d35", "git_label": "ghcr.io/microsoft/kompli/debian-12-amd64:git-805a020d5adc3f989785111b86b2d5c5b880421e"}, +{ "name": "oraclelinux-8", "arch": "amd64", "tag": "@sha256:c620433633301aad9070f9abca1afd7c228fae7adb85c2c2a8fa639435b1eb8f", "git_label": "ghcr.io/microsoft/kompli/oraclelinux-8-amd64:git-805a020d5adc3f989785111b86b2d5c5b880421e"}, +{ "name": "rhel-8", "arch": "amd64", "tag": "@sha256:f3f55330dfa9abf1e65d0d860a2d8ee34d9cb16de03bd3a8c17b10bfd1370bf8", "git_label": "ghcr.io/microsoft/kompli/rhel-8-amd64:git-805a020d5adc3f989785111b86b2d5c5b880421e"}, +{ "name": "rhel-9", "arch": "amd64", "tag": "@sha256:35469313bbd24b0278f67856f840f2b88f04229fee3a11597283f0b85f826776", "git_label": "ghcr.io/microsoft/kompli/rhel-9-amd64:git-805a020d5adc3f989785111b86b2d5c5b880421e"}, +{ "name": "rockylinux-9", "arch": "amd64", "tag": "@sha256:43716d4a8228cec119c5dfed68f7439f4a8438fd789812a2c7b05d1a2c925131", "git_label": "ghcr.io/microsoft/kompli/rockylinux-9-amd64:git-805a020d5adc3f989785111b86b2d5c5b880421e"}, +{ "name": "sles-15", "arch": "amd64", "tag": "@sha256:f751cb29f8bb7cf47e6e32f149d30215d48128d624d469f8a1db87e188d5f766", "git_label": "ghcr.io/microsoft/kompli/sles-15-amd64:git-805a020d5adc3f989785111b86b2d5c5b880421e"}, +{ "name": "ubuntu-20.04", "arch": "amd64", "tag": "@sha256:472472246488377d526d05218df5bc96ddbdf9080638155bf2cc421b6105937f", "git_label": "ghcr.io/microsoft/kompli/ubuntu-20.04-amd64:git-805a020d5adc3f989785111b86b2d5c5b880421e"}, +{ "name": "ubuntu-22.04", "arch": "amd64", "tag": "@sha256:ff9492087fda67081afee9fff170d3ab0636eec5cac54afc5c315382ce33d253", "git_label": "ghcr.io/microsoft/kompli/ubuntu-22.04-amd64:git-805a020d5adc3f989785111b86b2d5c5b880421e"}, +{ "name": "ubuntu-24.04", "arch": "amd64", "tag": "@sha256:6347babfa21715a5bad7146a0a25c52e14a651941176d6196e6a6543afee9ca5", "git_label": "ghcr.io/microsoft/kompli/ubuntu-24.04-amd64:git-805a020d5adc3f989785111b86b2d5c5b880421e"} ]