From 80163b5e5715357c547cc738b20ad8576c4d565c Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Thu, 21 Mar 2024 18:04:27 -0700 Subject: [PATCH 01/12] Remove RHEL from official builds. RHEL 7 is going out of support entirely in June. Additionally, we are being required by internal partners to turn on a bunch of build system validation incapable of running on extremely old RHEL 7. This change replaces use of RHEL 7 with CBL-Mariner 2.0 ( https://github.com/microsoft/AzureLinux ), with a few dependent libraries from extremely old Ubuntu 16.04. This enables use of modern build tools and a modern host OS, consuming as little as possible from the ancient universe we must maintain to keep Linux binaries working for most of our customers. This infrastructure is largely walking in the footsteps of the .NET team, see their write-ups https://github.com/dotnet/dotnet-buildtools-prereqs-docker and https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/linux-instructions.md . However, we are not using their from-source clang implementation, instead using the gcc that comes with cbl-mariner. The contents of the new Dockerfile are largely based on https://github.com/dotnet/arcade/blob/main/eng/common/cross/build-rootfs.sh , and the toolchain is largely based on https://github.com/dotnet/arcade/blob/main/eng/common/cross/toolchain.cmake . I validated that the dependencies of vcpkg are the same before and after. From within the container: ```console root [ /build ]# curl -L -o before https://github.com/microsoft/vcpkg-tool/releases/download/2024-03-14/vcpkg-glibc % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 7005k 100 7005k 0 0 8620k 0 --:--:-- --:--:-- --:--:-- 47.5M root [ /build ]# ldd before ldd: warning: you do not have execution permission for `./before' linux-vdso.so.1 (0x00007ffd9155b000) libpthread.so.0 => /lib/libpthread.so.0 (0x00007faae0975000) libm.so.6 => /lib/libm.so.6 (0x00007faae088f000) libc.so.6 => /lib/libc.so.6 (0x00007faae068d000) /lib64/ld-linux-x86-64.so.2 (0x00007faae097f000) root [ /build ]# ldd vcpkg linux-vdso.so.1 (0x00007ffe62b71000) libm.so.6 => /lib/libm.so.6 (0x00007fe75e236000) libpthread.so.0 => /lib/libpthread.so.0 (0x00007fe75e231000) libc.so.6 => /lib/libc.so.6 (0x00007fe75e02f000) /lib64/ld-linux-x86-64.so.2 (0x00007fe75e996000) root [ /build ]# ``` This also uses docker a bit better than before. Rather than minting a whole new container image containing the sources, now we just mount the sources in the right place. --- azure-pipelines/vcpkg-linux/Dockerfile | 61 +++ .../vcpkg-linux/dimitri_john_ledkov.asc | 400 ++++++++++++++++++ azure-pipelines/vcpkg-linux/sources.list | 14 + azure-pipelines/vcpkg-linux/toolchain.cmake | 26 ++ 4 files changed, 501 insertions(+) create mode 100644 azure-pipelines/vcpkg-linux/Dockerfile create mode 100644 azure-pipelines/vcpkg-linux/dimitri_john_ledkov.asc create mode 100644 azure-pipelines/vcpkg-linux/sources.list create mode 100644 azure-pipelines/vcpkg-linux/toolchain.cmake diff --git a/azure-pipelines/vcpkg-linux/Dockerfile b/azure-pipelines/vcpkg-linux/Dockerfile new file mode 100644 index 0000000000..5fa90d39dd --- /dev/null +++ b/azure-pipelines/vcpkg-linux/Dockerfile @@ -0,0 +1,61 @@ +# This infrastructure is adapted from that the .NET team uses, see +# https://github.com/dotnet/dotnet-buildtools-prereqs-docker +# and +# https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/linux-instructions.md +FROM mcr.microsoft.com/cbl-mariner/base/core:2.0 + +RUN tdnf install -y \ + # Common utilities + ca-certificates \ + git \ + tar \ + curl \ + # Build tools + binutils \ + cmake \ + ninja-build \ + # Rootfs build dependencies + bzip2-devel \ + debootstrap \ + libarchive-devel \ + openssl-devel + +# Obtain ubuntu package signing key (for use by debootstrap) +# 1. Add public key used to sign the ubuntu keyring +COPY dimitri_john_ledkov.asc . +RUN gpg --output dimitri_john_ledkov.gpg --dearmor dimitri_john_ledkov.asc && \ + rm dimitri_john_ledkov.asc && \ +# 2. Download the ubuntu keyrings + curl -L -o ubuntu-keyring_2021.03.26.tar.gz https://mirrors.edge.kernel.org/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2021.03.26.tar.gz && \ + echo "492eed5c06408c6f632577adb0796130af5d6542013ef418f47187a209e49bb1 ubuntu-keyring_2021.03.26.tar.gz" | sha256sum -c && \ + tar xf ubuntu-keyring_2021.03.26.tar.gz && \ + rm ubuntu-keyring_2021.03.26.tar.gz && \ +# 3. Verify keyrings + pushd ubuntu-keyring-2021.03.26 && \ + gpg --keyring /dimitri_john_ledkov.gpg --output SHA512SUMS.txt --decrypt SHA512SUMS.txt.asc && \ + rm /dimitri_john_ledkov.gpg && \ + sha512sum -c SHA512SUMS.txt && \ +# 4. Install the needed keyring and delete the rest + mkdir -p /usr/share/keyrings && \ + mv keyrings/ubuntu-archive-keyring.gpg /usr/share/keyrings && \ + popd && \ + rm -r ubuntu-keyring-2021.03.26 + +# Build the 'crossrootfs' +# Note that we only need libstdc++-9-dev rather than all of g++-9, but choosing g++-9 +# gets other optional dependencies to agree with g++-9 rather than older gccs +RUN debootstrap "--variant=minbase" --force-check-gpg --arch amd64 xenial /crossrootfs/x64 http://archive.ubuntu.com/ubuntu/ +COPY sources.list . +RUN chroot /crossrootfs/x64 apt-get clean && \ + cp /etc/resolv.conf /crossrootfs/x64/etc/resolv.conf && \ + cp sources.list /crossrootfs/x64/etc/apt/sources.list && \ + chroot /crossrootfs/x64 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 60C317803A41BA51845E371A1E9377A2BA9EF27F && \ + chroot /crossrootfs/x64 apt-get update -o Acquire::CompressionTypes::Order::=gz + +# Repeated runs of apt-get install workaround 'hash sum mismatch' errors +# (This is also why these are a separate cache layer) +RUN chroot /crossrootfs/x64 apt-get install -y build-essential symlinks "g++-9" || \ + chroot /crossrootfs/x64 apt-get install -y build-essential symlinks "g++-9" || \ + chroot /crossrootfs/x64 apt-get install -y build-essential symlinks "g++-9" && \ + chroot /crossrootfs/x64 symlinks -cr /usr && \ + chroot /crossrootfs/x64 apt-get clean diff --git a/azure-pipelines/vcpkg-linux/dimitri_john_ledkov.asc b/azure-pipelines/vcpkg-linux/dimitri_john_ledkov.asc new file mode 100644 index 0000000000..c36cc66e75 --- /dev/null +++ b/azure-pipelines/vcpkg-linux/dimitri_john_ledkov.asc @@ -0,0 +1,400 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: Hockeypuck 2.1.0-189-g15ebf24 +Comment: Hostname: + +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 +WvrYM8oNhL8aJoiVU2Z5NeRPwfQ0ZZdzbwD2 +=Y9Bf +-----END PGP PUBLIC KEY BLOCK----- diff --git a/azure-pipelines/vcpkg-linux/sources.list b/azure-pipelines/vcpkg-linux/sources.list new file mode 100644 index 0000000000..bde48550c0 --- /dev/null +++ b/azure-pipelines/vcpkg-linux/sources.list @@ -0,0 +1,14 @@ +deb http://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu xenial main +deb-src http://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu xenial main + +deb http://archive.ubuntu.com/ubuntu/ xenial main restricted universe +deb-src http://archive.ubuntu.com/ubuntu/ xenial main restricted universe + +deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe +deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe + +deb http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted +deb-src http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted + +deb http://archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse +deb-src http://archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse diff --git a/azure-pipelines/vcpkg-linux/toolchain.cmake b/azure-pipelines/vcpkg-linux/toolchain.cmake new file mode 100644 index 0000000000..71d1596ce5 --- /dev/null +++ b/azure-pipelines/vcpkg-linux/toolchain.cmake @@ -0,0 +1,26 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(LINUX 1) +set(CMAKE_SYSTEM_VERSION 1) +set(CMAKE_SYSTEM_PROCESSOR x86_64) +set(CMAKE_SYSROOT "/crossrootfs/x64") +set(C_HEADER_ARGS "-B/crossrootfs/x64/usr/lib/x86_64-linux-gnu/ -isystem /crossrootfs/x64/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed -isystem /crossrootfs/x64/usr/lib/gcc/x86_64-linux-gnu/9/include -isystem /crossrootfs/x64/usr/include/x86_64-linux-gnu -isystem /crossrootfs/x64/usr/include") +set(CMAKE_C_FLAGS_INIT "${C_HEADER_ARGS} -static-libgcc -nostdinc") +set(CMAKE_CXX_FLAGS_INIT "-isystem /crossrootfs/x64/usr/include/x86_64-linux-gnu/c++/9 -isystem /crossrootfs/x64/usr/include/c++/9 ${C_HEADER_ARGS} -static-libgcc -nostdinc -static-libstdc++ -L/crossrootfs/x64/usr/lib/gcc/x86_64-linux-gnu/9/") +set(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN "/crossrootfs/x64/usr") +set(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN "/crossrootfs/x64/usr") +set(CMAKE_ASM_COMPILER_EXTERNAL_TOOLCHAIN "/crossrootfs/x64/usr") +function(add_toolchain_linker_flag Flag) + set("CMAKE_EXE_LINKER_FLAGS_INIT" "${CMAKE_EXE_LINKER_FLAGS_INIT} ${Flag}" PARENT_SCOPE) + set("CMAKE_SHARED_LINKER_FLAGS_INIT" "${CMAKE_SHARED_LINKER_FLAGS_INIT} ${Flag}" PARENT_SCOPE) +endfunction() + +add_toolchain_linker_flag("-Wl,--rpath-link=/crossrootfs/x64/lib/x86_64-linux-gnu") +add_toolchain_linker_flag("-Wl,--rpath-link=/crossrootfs/x64/usr/lib/x86_64-linux-gnu") + +set(CMAKE_C_COMPILER /usr/bin/gcc) +set(CMAKE_CXX_COMPILER /usr/bin/g++) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) From 594d7ba003a57d40cf8312a705be096b27e28d82 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Thu, 21 Mar 2024 18:55:23 -0700 Subject: [PATCH 02/12] WIP bindings --- azure-pipelines/signing.yml | 2 ++ azure-pipelines/vcpkg-alpine/Dockerfile | 16 +--------------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/azure-pipelines/signing.yml b/azure-pipelines/signing.yml index cc8ea6b9d0..125d1a281b 100644 --- a/azure-pipelines/signing.yml +++ b/azure-pipelines/signing.yml @@ -201,6 +201,7 @@ jobs: inputs: failOnStderr: true script: | + # CHANGE THIS TO USE vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-linux:2024-03-21 cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" "-DVCPKG_FMT_URL=$(fmt-tarball-url)" "-DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url)" "-DVCPKG_BASE_VERSION=$VCPKG_BASE_VERSION" "-DVCPKG_STANDALONE_BUNDLE_SHA=$VCPKG_STANDALONE_BUNDLE_SHA" -B "$(Build.BinariesDirectory)/build" 2>&1 make -j 8 -C "$(Build.BinariesDirectory)/build" zip -j "$(Build.ArtifactStagingDirectory)/vcpkg-macos.zip" "$(Build.BinariesDirectory)/build/vcpkg" @@ -251,6 +252,7 @@ jobs: inputs: failOnStderr: false script: | + # CHANGE THIS TO USE vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-alpine:3.16 docker build --build-arg "FMT_TARBALL_URL=$(fmt-tarball-url)" --build-arg "CMAKERC_TARBALL_URL=$(cmakerc-tarball-url)" --build-arg "VCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA)" --build-arg "VCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION)" -t vcpkg-muslc-image -f azure-pipelines/vcpkg-alpine/Dockerfile . || exit 1 docker create -ti --name vcpkg-muslc-container vcpkg-muslc-image sh || exit 1 docker cp vcpkg-muslc-container:/build/vcpkg "$(Build.ArtifactStagingDirectory)/vcpkg-muslc" || exit 1 diff --git a/azure-pipelines/vcpkg-alpine/Dockerfile b/azure-pipelines/vcpkg-alpine/Dockerfile index 514997424d..c8d127b014 100644 --- a/azure-pipelines/vcpkg-alpine/Dockerfile +++ b/azure-pipelines/vcpkg-alpine/Dockerfile @@ -1,17 +1,3 @@ -FROM vcpkgdockercontainers.azurecr.io/vcpkg/alpine:3.11 +FROM vcpkgdockercontainers.azurecr.io/vcpkg/alpine:3.16 RUN apk add alpine-sdk cmake ninja git curl tar gzip zip - -COPY . /source - -ARG FMT_TARBALL_URL - -ARG CMAKERC_TARBALL_URL - -ARG VCPKG_BASE_VERSION - -ARG VCPKG_STANDALONE_BUNDLE_SHA - -RUN cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_CXX_FLAGS="-static -s -static-libgcc -static-libstdc++" "-DVCPKG_BASE_VERSION=$VCPKG_BASE_VERSION" "-DVCPKG_STANDALONE_BUNDLE_SHA=$VCPKG_STANDALONE_BUNDLE_SHA" "-DVCPKG_FMT_URL=$FMT_TARBALL_URL" "-DVCPKG_CMAKERC_URL=$CMAKERC_TARBALL_URL" -S /source -B /build 2>&1 - -RUN ninja -C build From 2e0a02f65b51a5a54bf88adc8ff516c4620b47bc Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 25 Mar 2024 18:36:20 -0700 Subject: [PATCH 03/12] wip --- azure-pipelines/signing.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines/signing.yml b/azure-pipelines/signing.yml index 125d1a281b..e94907e06f 100644 --- a/azure-pipelines/signing.yml +++ b/azure-pipelines/signing.yml @@ -201,7 +201,6 @@ jobs: inputs: failOnStderr: true script: | - # CHANGE THIS TO USE vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-linux:2024-03-21 cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" "-DVCPKG_FMT_URL=$(fmt-tarball-url)" "-DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url)" "-DVCPKG_BASE_VERSION=$VCPKG_BASE_VERSION" "-DVCPKG_STANDALONE_BUNDLE_SHA=$VCPKG_STANDALONE_BUNDLE_SHA" -B "$(Build.BinariesDirectory)/build" 2>&1 make -j 8 -C "$(Build.BinariesDirectory)/build" zip -j "$(Build.ArtifactStagingDirectory)/vcpkg-macos.zip" "$(Build.BinariesDirectory)/build/vcpkg" @@ -225,6 +224,7 @@ jobs: inputs: failOnStderr: true script: | + # CHANGE THIS TO USE vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-linux:2024-03-21 scl enable devtoolset-9 'cmake3 -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_CXX_FLAGS="-static-libgcc -static-libstdc++" "-DVCPKG_FMT_URL=$(fmt-tarball-url)" "-DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url)" "-DVCPKG_BASE_VERSION=$VCPKG_BASE_VERSION" "-DVCPKG_STANDALONE_BUNDLE_SHA=$VCPKG_STANDALONE_BUNDLE_SHA" -B "$(Build.BinariesDirectory)/build"' 2>&1 make -j 4 -C "$(Build.BinariesDirectory)/build" mv "$(Build.BinariesDirectory)/build/vcpkg" "$(Build.ArtifactStagingDirectory)/vcpkg-glibc" From 4581a6773342608929e3efde2603ceebc8975bdc Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 25 Mar 2024 19:07:45 -0700 Subject: [PATCH 04/12] wip --- azure-pipelines/signing.yml | 47 ++++++++++----------- azure-pipelines/vcpkg-linux/toolchain.cmake | 4 +- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/azure-pipelines/signing.yml b/azure-pipelines/signing.yml index e94907e06f..2e14256f09 100644 --- a/azure-pipelines/signing.yml +++ b/azure-pipelines/signing.yml @@ -24,6 +24,7 @@ parameters: values: - 'GitHub and NuGet' - 'NuGet Only' + - 'None' variables: - group: vcpkg Terrapin URLs - name: TeamName @@ -214,7 +215,7 @@ jobs: dependsOn: - arch_independent pool: - name: 'vcpkg-rhel-7-5' + name: 'vcpkg-mariner-1espt' variables: VCPKG_STANDALONE_BUNDLE_SHA: $[ dependencies.arch_independent.outputs['shas.VCPKG_STANDALONE_BUNDLE_SHA'] ] VCPKG_BASE_VERSION: $[ dependencies.arch_independent.outputs['versions.VCPKG_BASE_VERSION'] ] @@ -224,10 +225,8 @@ jobs: inputs: failOnStderr: true script: | - # CHANGE THIS TO USE vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-linux:2024-03-21 - scl enable devtoolset-9 'cmake3 -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_CXX_FLAGS="-static-libgcc -static-libstdc++" "-DVCPKG_FMT_URL=$(fmt-tarball-url)" "-DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url)" "-DVCPKG_BASE_VERSION=$VCPKG_BASE_VERSION" "-DVCPKG_STANDALONE_BUNDLE_SHA=$VCPKG_STANDALONE_BUNDLE_SHA" -B "$(Build.BinariesDirectory)/build"' 2>&1 - make -j 4 -C "$(Build.BinariesDirectory)/build" - mv "$(Build.BinariesDirectory)/build/vcpkg" "$(Build.ArtifactStagingDirectory)/vcpkg-glibc" + docker run --rm --mount "type=bind,source=$(Build.Repository.LocalPath),target=/source,readonly" --mount "type=bind,source=$(Build.ArtifactStagingDirectory),target=/build" vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-linux:2024-03-21 sh -c "cmake -G Ninja -DCMAKE_TOOLCHAIN_FILE=/source/azure-pipelines/vcpkg-linux/toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url) -DVCPKG_FMT_URL=$(fmt-tarball-url) -DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA) -DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION) -S /source -B /build 2>&1 && ninja -C /build" + mv "$(Build.ArtifactStagingDirectory)/vcpkg" "$(Build.ArtifactStagingDirectory)/vcpkg-glibc" - task: PublishBuildArtifacts@1 displayName: "Publish Unsigned glibc Binary" inputs: @@ -236,7 +235,7 @@ jobs: - job: muslc_build displayName: 'muslc (Alpine) Build' pool: - name: 'vcpkg-mariner-docker-gen1' + name: 'vcpkg-mariner-1espt' dependsOn: - arch_independent variables: @@ -252,10 +251,8 @@ jobs: inputs: failOnStderr: false script: | - # CHANGE THIS TO USE vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-alpine:3.16 - docker build --build-arg "FMT_TARBALL_URL=$(fmt-tarball-url)" --build-arg "CMAKERC_TARBALL_URL=$(cmakerc-tarball-url)" --build-arg "VCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA)" --build-arg "VCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION)" -t vcpkg-muslc-image -f azure-pipelines/vcpkg-alpine/Dockerfile . || exit 1 - docker create -ti --name vcpkg-muslc-container vcpkg-muslc-image sh || exit 1 - docker cp vcpkg-muslc-container:/build/vcpkg "$(Build.ArtifactStagingDirectory)/vcpkg-muslc" || exit 1 + docker run --rm --mount "type=bind,source=$(Build.Repository.LocalPath),target=/source,readonly" --mount "type=bind,source=$(Build.ArtifactStagingDirectory),target=/build" vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-alpine:3.16 sh -c "cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_CXX_FLAGS=\"-static -s -static-libgcc -static-libstdc++\" -DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url) -DVCPKG_FMT_URL=$(fmt-tarball-url) -DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA) -DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION) -S /source -B /build 2>&1 && ninja -C /build" + mv "$(Build.ArtifactStagingDirectory)/vcpkg" "$(Build.ArtifactStagingDirectory)/vcpkg-muslc" - task: PublishBuildArtifacts@1 displayName: "Publish Unsigned muslc Binary" inputs: @@ -473,21 +470,23 @@ jobs: ArtifactName: 'Drop' publishLocation: 'Container' # Publish everything to VS Insertion - - task: NuGetCommand@2 - displayName: 'NuGet publish for VS Insertion' - condition: and(eq(variables.SignType, 'real'), succeeded()) - inputs: - command: push - packagesToPush: '$(Build.ArtifactStagingDirectory)/vs-insertion/drop/VS.Redist.Vcpkg.amd64.1.0.0-$(VCPKG_FULL_VERSION).nupkg' - publishVstsFeed: '97a41293-2972-4f48-8c0e-05493ae82010' + - ${{ if or(eq(parameters.PublishTo, 'GitHub and NuGet'),eq(parameters.PublishTo, 'NuGet Only')) }}: + - task: NuGetCommand@2 + displayName: 'NuGet publish for VS Insertion' + condition: and(eq(variables.SignType, 'real'), succeeded()) + inputs: + command: push + packagesToPush: '$(Build.ArtifactStagingDirectory)/vs-insertion/drop/VS.Redist.Vcpkg.amd64.1.0.0-$(VCPKG_FULL_VERSION).nupkg' + publishVstsFeed: '97a41293-2972-4f48-8c0e-05493ae82010' # Publish symbols - - task: MicroBuildArchiveSymbols@4 - displayName: 'Upload Symbols' - inputs: - SymbolsFeatureName: 'vcpkg' - SymbolsProject: 'VS' - SymbolsAgentPath: '$(Build.ArtifactStagingDirectory)\symbols' - azureSubscription: 'Symbols Upload (DevDiv)' + - ${{ if ne(parameters.PublishTo, 'None') }}: + - task: MicroBuildArchiveSymbols@4 + displayName: 'Upload Symbols' + inputs: + SymbolsFeatureName: 'vcpkg' + SymbolsProject: 'VS' + SymbolsAgentPath: '$(Build.ArtifactStagingDirectory)\symbols' + azureSubscription: 'Symbols Upload (DevDiv)' # Publish everything to a GitHub Release - ${{ if eq(parameters.PublishTo, 'GitHub and NuGet') }}: - task: DownloadSecureFile@1 diff --git a/azure-pipelines/vcpkg-linux/toolchain.cmake b/azure-pipelines/vcpkg-linux/toolchain.cmake index 71d1596ce5..98ba9a46aa 100644 --- a/azure-pipelines/vcpkg-linux/toolchain.cmake +++ b/azure-pipelines/vcpkg-linux/toolchain.cmake @@ -4,8 +4,8 @@ set(CMAKE_SYSTEM_VERSION 1) set(CMAKE_SYSTEM_PROCESSOR x86_64) set(CMAKE_SYSROOT "/crossrootfs/x64") set(C_HEADER_ARGS "-B/crossrootfs/x64/usr/lib/x86_64-linux-gnu/ -isystem /crossrootfs/x64/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed -isystem /crossrootfs/x64/usr/lib/gcc/x86_64-linux-gnu/9/include -isystem /crossrootfs/x64/usr/include/x86_64-linux-gnu -isystem /crossrootfs/x64/usr/include") -set(CMAKE_C_FLAGS_INIT "${C_HEADER_ARGS} -static-libgcc -nostdinc") -set(CMAKE_CXX_FLAGS_INIT "-isystem /crossrootfs/x64/usr/include/x86_64-linux-gnu/c++/9 -isystem /crossrootfs/x64/usr/include/c++/9 ${C_HEADER_ARGS} -static-libgcc -nostdinc -static-libstdc++ -L/crossrootfs/x64/usr/lib/gcc/x86_64-linux-gnu/9/") +set(CMAKE_C_FLAGS_INIT "${C_HEADER_ARGS} -static -s -static-libgcc -nostdinc") +set(CMAKE_CXX_FLAGS_INIT "-isystem /crossrootfs/x64/usr/include/x86_64-linux-gnu/c++/9 -isystem /crossrootfs/x64/usr/include/c++/9 ${C_HEADER_ARGS} -static -s -static-libgcc -nostdinc -static-libstdc++ -L/crossrootfs/x64/usr/lib/gcc/x86_64-linux-gnu/9/") set(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN "/crossrootfs/x64/usr") set(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN "/crossrootfs/x64/usr") set(CMAKE_ASM_COMPILER_EXTERNAL_TOOLCHAIN "/crossrootfs/x64/usr") From 3cd359bd5f982e5b3dc5896f739f5379d4aed4af Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 25 Mar 2024 19:12:34 -0700 Subject: [PATCH 05/12] Remove no longer used managed image json files. --- azure-pipelines/vcpkg-rhel-7-5.json | 29 ------------------- .../vcpkg-ubuntu-20-04-docker.json | 17 ----------- 2 files changed, 46 deletions(-) delete mode 100644 azure-pipelines/vcpkg-rhel-7-5.json delete mode 100644 azure-pipelines/vcpkg-ubuntu-20-04-docker.json diff --git a/azure-pipelines/vcpkg-rhel-7-5.json b/azure-pipelines/vcpkg-rhel-7-5.json deleted file mode 100644 index 2ba80175f6..0000000000 --- a/azure-pipelines/vcpkg-rhel-7-5.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "imageType": "Managed", - "baseImage": "/RedHat/RHEL/75-gen2/latest", - "artifacts": [ - { - "name": "linux-centos-yum-packages", - "parameters": { - "packages": "https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm" - } - }, - { - "name": "linux-centos7-install-git" - }, - { - "name": "linux-centos-yum-packages", - "parameters": { - "packages": "devtoolset-9-toolchain cmake3" - } - } - ], - "publishingProfile": { - "targetRegions": [ - { - "name": "southcentralus", - "replicas": 1 - } - ] - } -} diff --git a/azure-pipelines/vcpkg-ubuntu-20-04-docker.json b/azure-pipelines/vcpkg-ubuntu-20-04-docker.json deleted file mode 100644 index 945e24c213..0000000000 --- a/azure-pipelines/vcpkg-ubuntu-20-04-docker.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "imageType": "Managed", - "baseImage": "/Canonical/0001-com-ubuntu-server-focal/20_04-lts-gen2/latest", - "artifacts": [ - { - "name": "linux-install-docker" - } - ], - "publishingProfile": { - "targetRegions": [ - { - "name": "westus2", - "replicas": 1 - } - ] - } -} From 63774229329a8710080813de9a4515f54854b54b Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 25 Mar 2024 19:12:42 -0700 Subject: [PATCH 06/12] Remove RHEL references. --- azure-pipelines/signing.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure-pipelines/signing.yml b/azure-pipelines/signing.yml index 2e14256f09..952e8b0666 100644 --- a/azure-pipelines/signing.yml +++ b/azure-pipelines/signing.yml @@ -210,8 +210,8 @@ jobs: inputs: ArtifactName: 'staging' publishLocation: 'Container' - - job: rhel_build - displayName: 'glibc (RHEL) Build' + - job: glibc_build + displayName: 'glibc Build' dependsOn: - arch_independent pool: @@ -264,7 +264,7 @@ jobs: dependsOn: - arch_independent - macos_build - - rhel_build + - glibc_build - muslc_build pool: name: 'VSEngSS-MicroBuild2022-1ES' From d67ffa47ae73f22c451e0ec476aa540090e21847 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 25 Mar 2024 19:30:26 -0700 Subject: [PATCH 07/12] Name the managed identity. --- azure-pipelines/signing.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/azure-pipelines/signing.yml b/azure-pipelines/signing.yml index 952e8b0666..6295f9cf7a 100644 --- a/azure-pipelines/signing.yml +++ b/azure-pipelines/signing.yml @@ -220,8 +220,12 @@ jobs: VCPKG_STANDALONE_BUNDLE_SHA: $[ dependencies.arch_independent.outputs['shas.VCPKG_STANDALONE_BUNDLE_SHA'] ] VCPKG_BASE_VERSION: $[ dependencies.arch_independent.outputs['versions.VCPKG_BASE_VERSION'] ] steps: + - bash: | + az login --identity --username 29a4d3e7-c7d5-41c7-b5a0-fee8cf466371 + az acr login --name vcpkgdockercontainers + displayName: 'Set up managed identity' - task: CmdLine@2 - displayName: "Build vcpkg with CMake" + displayName: "Build vcpkg in Mariner with Ubuntu 16.04 Libraries" inputs: failOnStderr: true script: | @@ -243,7 +247,7 @@ jobs: VCPKG_BASE_VERSION: $[ dependencies.arch_independent.outputs['versions.VCPKG_BASE_VERSION'] ] steps: - bash: | - az login --identity + az login --identity --username 29a4d3e7-c7d5-41c7-b5a0-fee8cf466371 az acr login --name vcpkgdockercontainers displayName: 'Set up managed identity' - task: CmdLine@2 From 07373cedb5ed0b17de4318d171b783bff711c280 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 25 Mar 2024 19:44:55 -0700 Subject: [PATCH 08/12] Supply VCPKG_VERSION from the pipeline rather than asking git to do it. --- CMakeLists.txt | 30 +++++++++++++++++------------- azure-pipelines/signing.yml | 12 ++++++------ 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f3a7ebec12..ea82bc676e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,23 +54,27 @@ if(MSVC AND NOT COMMAND target_precompile_headers) endif() if(VCPKG_EMBED_GIT_SHA) - find_package(Git REQUIRED) - execute_process( - COMMAND "${GIT_EXECUTABLE}" status --porcelain=v1 - WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" - OUTPUT_VARIABLE VCPKG_GIT_STATUS - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - if(VCPKG_GIT_STATUS STREQUAL "") + if(DEFINED VCPKG_VERSION) + message(WARNING "Using supplied version SHA ${VCPKG_VERSION}.") + else() + find_package(Git REQUIRED) execute_process( - COMMAND "${GIT_EXECUTABLE}" rev-parse HEAD + COMMAND "${GIT_EXECUTABLE}" status --porcelain=v1 WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" - OUTPUT_VARIABLE VCPKG_VERSION + OUTPUT_VARIABLE VCPKG_GIT_STATUS OUTPUT_STRIP_TRAILING_WHITESPACE ) - else() - message(WARNING "Skipping embedding SHA due to local changes.") + + if(VCPKG_GIT_STATUS STREQUAL "") + execute_process( + COMMAND "${GIT_EXECUTABLE}" rev-parse HEAD + WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" + OUTPUT_VARIABLE VCPKG_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + else() + message(WARNING "Skipping embedding SHA due to local changes.") + endif() endif() endif() diff --git a/azure-pipelines/signing.yml b/azure-pipelines/signing.yml index 6295f9cf7a..224de6c46a 100644 --- a/azure-pipelines/signing.yml +++ b/azure-pipelines/signing.yml @@ -202,7 +202,7 @@ jobs: inputs: failOnStderr: true script: | - cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" "-DVCPKG_FMT_URL=$(fmt-tarball-url)" "-DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url)" "-DVCPKG_BASE_VERSION=$VCPKG_BASE_VERSION" "-DVCPKG_STANDALONE_BUNDLE_SHA=$VCPKG_STANDALONE_BUNDLE_SHA" -B "$(Build.BinariesDirectory)/build" 2>&1 + cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" "-DVCPKG_FMT_URL=$(fmt-tarball-url)" "-DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url)" "-DVCPKG_BASE_VERSION=$VCPKG_BASE_VERSION" "-DVCPKG_VERSION=$(Build.SourceVersion)" "-DVCPKG_STANDALONE_BUNDLE_SHA=$VCPKG_STANDALONE_BUNDLE_SHA" -B "$(Build.BinariesDirectory)/build" 2>&1 make -j 8 -C "$(Build.BinariesDirectory)/build" zip -j "$(Build.ArtifactStagingDirectory)/vcpkg-macos.zip" "$(Build.BinariesDirectory)/build/vcpkg" - task: PublishBuildArtifacts@1 @@ -227,9 +227,9 @@ jobs: - task: CmdLine@2 displayName: "Build vcpkg in Mariner with Ubuntu 16.04 Libraries" inputs: - failOnStderr: true + failOnStderr: false script: | - docker run --rm --mount "type=bind,source=$(Build.Repository.LocalPath),target=/source,readonly" --mount "type=bind,source=$(Build.ArtifactStagingDirectory),target=/build" vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-linux:2024-03-21 sh -c "cmake -G Ninja -DCMAKE_TOOLCHAIN_FILE=/source/azure-pipelines/vcpkg-linux/toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url) -DVCPKG_FMT_URL=$(fmt-tarball-url) -DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA) -DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION) -S /source -B /build 2>&1 && ninja -C /build" + docker run --rm --mount "type=bind,source=$(Build.Repository.LocalPath),target=/source,readonly" --mount "type=bind,source=$(Build.ArtifactStagingDirectory),target=/build" vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-linux:2024-03-21 sh -c "cmake -G Ninja -DCMAKE_TOOLCHAIN_FILE=/source/azure-pipelines/vcpkg-linux/toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url) -DVCPKG_FMT_URL=$(fmt-tarball-url) -DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA) -DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION) -DVCPKG_VERSION=$(Build.SourceVersion) -S /source -B /build 2>&1 && ninja -C /build" mv "$(Build.ArtifactStagingDirectory)/vcpkg" "$(Build.ArtifactStagingDirectory)/vcpkg-glibc" - task: PublishBuildArtifacts@1 displayName: "Publish Unsigned glibc Binary" @@ -255,7 +255,7 @@ jobs: inputs: failOnStderr: false script: | - docker run --rm --mount "type=bind,source=$(Build.Repository.LocalPath),target=/source,readonly" --mount "type=bind,source=$(Build.ArtifactStagingDirectory),target=/build" vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-alpine:3.16 sh -c "cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_CXX_FLAGS=\"-static -s -static-libgcc -static-libstdc++\" -DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url) -DVCPKG_FMT_URL=$(fmt-tarball-url) -DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA) -DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION) -S /source -B /build 2>&1 && ninja -C /build" + docker run --rm --mount "type=bind,source=$(Build.Repository.LocalPath),target=/source,readonly" --mount "type=bind,source=$(Build.ArtifactStagingDirectory),target=/build" vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-alpine:3.16 sh -c "cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_CXX_FLAGS=\"-static -s -static-libgcc -static-libstdc++\" -DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url) -DVCPKG_FMT_URL=$(fmt-tarball-url) -DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA) -DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION) -DVCPKG_VERSION=$(Build.SourceVersion) -S /source -B /build 2>&1 && ninja -C /build" mv "$(Build.ArtifactStagingDirectory)/vcpkg" "$(Build.ArtifactStagingDirectory)/vcpkg-muslc" - task: PublishBuildArtifacts@1 displayName: "Publish Unsigned muslc Binary" @@ -288,7 +288,7 @@ jobs: script: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=amd64 -host_arch=amd64 cmake.exe --version - cmake.exe -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_BUILD_TLS12_DOWNLOADER=ON -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON "-DVCPKG_FMT_URL=$(fmt-tarball-url)" "-DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url)" "-DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION)" "-DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA)" -B "$(Build.BinariesDirectory)\amd64" + cmake.exe -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_BUILD_TLS12_DOWNLOADER=ON -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON "-DVCPKG_FMT_URL=$(fmt-tarball-url)" "-DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url)" "-DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION)" "-DVCPKG_VERSION=$(Build.SourceVersion)" "-DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA)" -B "$(Build.BinariesDirectory)\amd64" ninja.exe -C "$(Build.BinariesDirectory)\amd64" - task: CmdLine@2 displayName: "Build vcpkg arm64 with CMake" @@ -297,7 +297,7 @@ jobs: script: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=arm64 -host_arch=amd64 cmake.exe --version - cmake.exe -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_BUILD_TLS12_DOWNLOADER=ON -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DVCPKG_PDB_SUFFIX="-arm64" "-DVCPKG_FMT_URL=$(fmt-tarball-url)" "-DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url)" "-DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION)" "-DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA)" -B "$(Build.BinariesDirectory)\arm64" + cmake.exe -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_BUILD_TLS12_DOWNLOADER=ON -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DVCPKG_PDB_SUFFIX="-arm64" "-DVCPKG_FMT_URL=$(fmt-tarball-url)" "-DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url)" "-DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION)" "-DVCPKG_VERSION=$(Build.SourceVersion)" "-DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA)" -B "$(Build.BinariesDirectory)\arm64" ninja.exe -C "$(Build.BinariesDirectory)\arm64" - task: CodeQL3000Finalize@0 displayName: 'CodeQL Finalize' From c5675bf0f49896e4d9613ef68fa008fa374f4a6b Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 25 Mar 2024 19:59:22 -0700 Subject: [PATCH 09/12] Don't upload temporary build bits. --- azure-pipelines/signing.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/azure-pipelines/signing.yml b/azure-pipelines/signing.yml index 224de6c46a..98791b2b04 100644 --- a/azure-pipelines/signing.yml +++ b/azure-pipelines/signing.yml @@ -229,8 +229,8 @@ jobs: inputs: failOnStderr: false script: | - docker run --rm --mount "type=bind,source=$(Build.Repository.LocalPath),target=/source,readonly" --mount "type=bind,source=$(Build.ArtifactStagingDirectory),target=/build" vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-linux:2024-03-21 sh -c "cmake -G Ninja -DCMAKE_TOOLCHAIN_FILE=/source/azure-pipelines/vcpkg-linux/toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url) -DVCPKG_FMT_URL=$(fmt-tarball-url) -DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA) -DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION) -DVCPKG_VERSION=$(Build.SourceVersion) -S /source -B /build 2>&1 && ninja -C /build" - mv "$(Build.ArtifactStagingDirectory)/vcpkg" "$(Build.ArtifactStagingDirectory)/vcpkg-glibc" + docker run --rm --mount "type=bind,source=$(Build.Repository.LocalPath),target=/source,readonly" --mount "type=bind,source=$(Agent.TempDirectory)/build,target=/build" vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-linux:2024-03-21 sh -c "cmake -G Ninja -DCMAKE_TOOLCHAIN_FILE=/source/azure-pipelines/vcpkg-linux/toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url) -DVCPKG_FMT_URL=$(fmt-tarball-url) -DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA) -DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION) -DVCPKG_VERSION=$(Build.SourceVersion) -S /source -B /build 2>&1 && ninja -C /build" + mv "$(Agent.TempDirectory)/build/vcpkg" "$(Build.ArtifactStagingDirectory)/vcpkg-glibc" - task: PublishBuildArtifacts@1 displayName: "Publish Unsigned glibc Binary" inputs: @@ -255,8 +255,8 @@ jobs: inputs: failOnStderr: false script: | - docker run --rm --mount "type=bind,source=$(Build.Repository.LocalPath),target=/source,readonly" --mount "type=bind,source=$(Build.ArtifactStagingDirectory),target=/build" vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-alpine:3.16 sh -c "cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_CXX_FLAGS=\"-static -s -static-libgcc -static-libstdc++\" -DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url) -DVCPKG_FMT_URL=$(fmt-tarball-url) -DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA) -DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION) -DVCPKG_VERSION=$(Build.SourceVersion) -S /source -B /build 2>&1 && ninja -C /build" - mv "$(Build.ArtifactStagingDirectory)/vcpkg" "$(Build.ArtifactStagingDirectory)/vcpkg-muslc" + docker run --rm --mount "type=bind,source=$(Build.Repository.LocalPath),target=/source,readonly" --mount "type=bind,source=$(Agent.TempDirectory)/build,target=/build" vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-alpine:3.16 sh -c "cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_CXX_FLAGS=\"-static -s -static-libgcc -static-libstdc++\" -DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url) -DVCPKG_FMT_URL=$(fmt-tarball-url) -DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA) -DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION) -DVCPKG_VERSION=$(Build.SourceVersion) -S /source -B /build 2>&1 && ninja -C /build" + mv "$(Agent.TempDirectory)/build/vcpkg" "$(Build.ArtifactStagingDirectory)/vcpkg-muslc" - task: PublishBuildArtifacts@1 displayName: "Publish Unsigned muslc Binary" inputs: From 7bdf375469ece247475d6c0d7b0c37e8eb8e8723 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 25 Mar 2024 20:36:52 -0700 Subject: [PATCH 10/12] Add mkdir p --- azure-pipelines/signing.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure-pipelines/signing.yml b/azure-pipelines/signing.yml index 98791b2b04..79325903ae 100644 --- a/azure-pipelines/signing.yml +++ b/azure-pipelines/signing.yml @@ -229,6 +229,7 @@ jobs: inputs: failOnStderr: false script: | + mkdir -p "$(Agent.TempDirectory)/build" docker run --rm --mount "type=bind,source=$(Build.Repository.LocalPath),target=/source,readonly" --mount "type=bind,source=$(Agent.TempDirectory)/build,target=/build" vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-linux:2024-03-21 sh -c "cmake -G Ninja -DCMAKE_TOOLCHAIN_FILE=/source/azure-pipelines/vcpkg-linux/toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url) -DVCPKG_FMT_URL=$(fmt-tarball-url) -DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA) -DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION) -DVCPKG_VERSION=$(Build.SourceVersion) -S /source -B /build 2>&1 && ninja -C /build" mv "$(Agent.TempDirectory)/build/vcpkg" "$(Build.ArtifactStagingDirectory)/vcpkg-glibc" - task: PublishBuildArtifacts@1 @@ -255,6 +256,7 @@ jobs: inputs: failOnStderr: false script: | + mkdir -p "$(Agent.TempDirectory)/build" docker run --rm --mount "type=bind,source=$(Build.Repository.LocalPath),target=/source,readonly" --mount "type=bind,source=$(Agent.TempDirectory)/build,target=/build" vcpkgdockercontainers.azurecr.io/vcpkg/vcpkg-alpine:3.16 sh -c "cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=ON -DVCPKG_WARNINGS_AS_ERRORS=ON -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_EMBED_GIT_SHA=ON -DVCPKG_OFFICIAL_BUILD=ON -DCMAKE_CXX_FLAGS=\"-static -s -static-libgcc -static-libstdc++\" -DVCPKG_CMAKERC_URL=$(cmakerc-tarball-url) -DVCPKG_FMT_URL=$(fmt-tarball-url) -DVCPKG_STANDALONE_BUNDLE_SHA=$(VCPKG_STANDALONE_BUNDLE_SHA) -DVCPKG_BASE_VERSION=$(VCPKG_BASE_VERSION) -DVCPKG_VERSION=$(Build.SourceVersion) -S /source -B /build 2>&1 && ninja -C /build" mv "$(Agent.TempDirectory)/build/vcpkg" "$(Build.ArtifactStagingDirectory)/vcpkg-muslc" - task: PublishBuildArtifacts@1 From 7fb383079bd68ace6fe669502d2e852989b433cd Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 25 Mar 2024 20:54:47 -0700 Subject: [PATCH 11/12] Reduce the using supplied SHA message to 'status' --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ea82bc676e..960e2b06ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,7 +55,7 @@ endif() if(VCPKG_EMBED_GIT_SHA) if(DEFINED VCPKG_VERSION) - message(WARNING "Using supplied version SHA ${VCPKG_VERSION}.") + message(STATUS "Using supplied version SHA ${VCPKG_VERSION}.") else() find_package(Git REQUIRED) execute_process( From 81f625c61a7773b76eb52b7a8fd00152d8decbc6 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 27 Mar 2024 18:10:51 -0700 Subject: [PATCH 12/12] Remove duplicate signature check and add more install retries. --- azure-pipelines/vcpkg-linux/Dockerfile | 19 +- .../vcpkg-linux/dimitri_john_ledkov.asc | 400 ------------------ 2 files changed, 8 insertions(+), 411 deletions(-) delete mode 100644 azure-pipelines/vcpkg-linux/dimitri_john_ledkov.asc diff --git a/azure-pipelines/vcpkg-linux/Dockerfile b/azure-pipelines/vcpkg-linux/Dockerfile index 5fa90d39dd..5dab74283d 100644 --- a/azure-pipelines/vcpkg-linux/Dockerfile +++ b/azure-pipelines/vcpkg-linux/Dockerfile @@ -21,21 +21,14 @@ RUN tdnf install -y \ openssl-devel # Obtain ubuntu package signing key (for use by debootstrap) -# 1. Add public key used to sign the ubuntu keyring -COPY dimitri_john_ledkov.asc . -RUN gpg --output dimitri_john_ledkov.gpg --dearmor dimitri_john_ledkov.asc && \ - rm dimitri_john_ledkov.asc && \ -# 2. Download the ubuntu keyrings - curl -L -o ubuntu-keyring_2021.03.26.tar.gz https://mirrors.edge.kernel.org/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2021.03.26.tar.gz && \ +# 1. Download the ubuntu keyrings +RUN curl -L -o ubuntu-keyring_2021.03.26.tar.gz https://mirrors.edge.kernel.org/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2021.03.26.tar.gz && \ +# 2. Check that they have the correct SHA echo "492eed5c06408c6f632577adb0796130af5d6542013ef418f47187a209e49bb1 ubuntu-keyring_2021.03.26.tar.gz" | sha256sum -c && \ tar xf ubuntu-keyring_2021.03.26.tar.gz && \ rm ubuntu-keyring_2021.03.26.tar.gz && \ -# 3. Verify keyrings +# 3. Install the needed keyring and delete the rest pushd ubuntu-keyring-2021.03.26 && \ - gpg --keyring /dimitri_john_ledkov.gpg --output SHA512SUMS.txt --decrypt SHA512SUMS.txt.asc && \ - rm /dimitri_john_ledkov.gpg && \ - sha512sum -c SHA512SUMS.txt && \ -# 4. Install the needed keyring and delete the rest mkdir -p /usr/share/keyrings && \ mv keyrings/ubuntu-archive-keyring.gpg /usr/share/keyrings && \ popd && \ @@ -55,6 +48,10 @@ RUN chroot /crossrootfs/x64 apt-get clean && \ # Repeated runs of apt-get install workaround 'hash sum mismatch' errors # (This is also why these are a separate cache layer) RUN chroot /crossrootfs/x64 apt-get install -y build-essential symlinks "g++-9" || \ + chroot /crossrootfs/x64 apt-get install -y build-essential symlinks "g++-9" || \ + chroot /crossrootfs/x64 apt-get install -y build-essential symlinks "g++-9" || \ + chroot /crossrootfs/x64 apt-get install -y build-essential symlinks "g++-9" || \ + chroot /crossrootfs/x64 apt-get install -y build-essential symlinks "g++-9" || \ chroot /crossrootfs/x64 apt-get install -y build-essential symlinks "g++-9" || \ chroot /crossrootfs/x64 apt-get install -y build-essential symlinks "g++-9" && \ chroot /crossrootfs/x64 symlinks -cr /usr && \ diff --git a/azure-pipelines/vcpkg-linux/dimitri_john_ledkov.asc b/azure-pipelines/vcpkg-linux/dimitri_john_ledkov.asc deleted file mode 100644 index c36cc66e75..0000000000 --- a/azure-pipelines/vcpkg-linux/dimitri_john_ledkov.asc +++ /dev/null @@ -1,400 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: Hockeypuck 2.1.0-189-g15ebf24 -Comment: Hostname: - -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 -WvrYM8oNhL8aJoiVU2Z5NeRPwfQ0ZZdzbwD2 -=Y9Bf ------END PGP PUBLIC KEY BLOCK-----