diff --git a/eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml b/eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml index 7c48e63bd..f86edb835 100644 --- a/eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml +++ b/eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml @@ -24,3 +24,6 @@ stages: parameters: internalProjectName: ${{ variables.internalProjectName }} publicProjectName: ${{ variables.publicProjectName }} + linuxAmdBuildJobTimeout: 360 + customBuildInitSteps: + - template: /eng/pipelines/steps/install-cross-build-prereqs.yml diff --git a/eng/pipelines/dotnet-buildtools-prereqs-mariner.yml b/eng/pipelines/dotnet-buildtools-prereqs-mariner.yml index a7fe22798..480468014 100644 --- a/eng/pipelines/dotnet-buildtools-prereqs-mariner.yml +++ b/eng/pipelines/dotnet-buildtools-prereqs-mariner.yml @@ -24,3 +24,6 @@ stages: parameters: internalProjectName: ${{ variables.internalProjectName }} publicProjectName: ${{ variables.publicProjectName }} + linuxAmdBuildJobTimeout: 360 + customBuildInitSteps: + - template: /eng/pipelines/steps/install-cross-build-prereqs.yml diff --git a/src/cbl-mariner/1.0/helix/amd64/Dockerfile b/src/cbl-mariner/1.0/helix/amd64/Dockerfile index 0a636340f..426bfebaa 100644 --- a/src/cbl-mariner/1.0/helix/amd64/Dockerfile +++ b/src/cbl-mariner/1.0/helix/amd64/Dockerfile @@ -1,4 +1,4 @@ -FROM cblmariner.azurecr.io/base/core:1.0 +FROM mcr.microsoft.com/cbl-mariner/base/core:1.0 # Install Helix Dependencies diff --git a/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile new file mode 100644 index 000000000..69a574000 --- /dev/null +++ b/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile @@ -0,0 +1,10 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local AS builder +ARG ROOTFS_DIR=/crossrootfs/x64 + +RUN /scripts/eng/common/cross/build-rootfs.sh x64 alpine3.13 --skipunmount + + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local +ARG ROOTFS_DIR=/crossrootfs/x64 + +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/cbl-mariner/2.0/cross/amd64/Dockerfile b/src/cbl-mariner/2.0/cross/amd64/Dockerfile new file mode 100644 index 000000000..ac52987cf --- /dev/null +++ b/src/cbl-mariner/2.0/cross/amd64/Dockerfile @@ -0,0 +1,14 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local AS builder +ARG ROOTFS_DIR=/crossrootfs/x64 + +RUN /scripts/eng/common/cross/build-rootfs.sh x64 xenial --skipunmount + + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local +ARG ROOTFS_DIR=/crossrootfs/x64 + +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR + +RUN LLVM_VERSION=12.0.1 LLVM_VERSION_MAJOR="${LLVM_VERSION%%.*}" && \ + mkdir -p $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ && \ + cp /usr/lib/clang/${LLVM_VERSION}/lib/linux/libclang_rt.profile-x86_64.a $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ diff --git a/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile new file mode 100644 index 000000000..3dd593c46 --- /dev/null +++ b/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile @@ -0,0 +1,10 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local AS builder +ARG ROOTFS_DIR=/crossrootfs/arm64 + +RUN /scripts/eng/common/cross/build-rootfs.sh arm64 alpine3.13 --skipunmount + + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local +ARG ROOTFS_DIR=/crossrootfs/arm64 + +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/cbl-mariner/2.0/cross/arm64/Dockerfile b/src/cbl-mariner/2.0/cross/arm64/Dockerfile new file mode 100644 index 000000000..b9d48ccab --- /dev/null +++ b/src/cbl-mariner/2.0/cross/arm64/Dockerfile @@ -0,0 +1,38 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local AS builder +ARG ROOTFS_DIR=/crossrootfs/arm64 + +RUN /scripts/eng/common/cross/build-rootfs.sh arm64 xenial --skipunmount + +# Build compiler-rt profile library for PGO instrumentation +RUN mkdir compiler-rt_build && cd compiler-rt_build && \ + BUILD_FLAGS="-v --sysroot=$ROOTFS_DIR" \ + TARGET_TRIPLE=aarch64-linux-gnu && \ + cmake ../llvm-project.src/compiler-rt \ + -DCOMPILER_RT_BUILD_PROFILE=ON \ + -DCOMPILER_RT_BUILD_BUILTINS=OFF \ + -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ + -DCOMPILER_RT_BUILD_XRAY=OFF \ + -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ + \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \ + -DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE} \ + -DCMAKE_CXX_COMPILER_TARGET=${TARGET_TRIPLE} \ + -DLLVM_CONFIG_PATH=llvm-config \ + -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$ROOTFS_DIR/usr \ + -DCMAKE_C_FLAGS="${BUILD_FLAGS}" \ + -DCMAKE_CXX_FLAGS="${BUILD_FLAGS}" && \ + make -j $(getconf _NPROCESSORS_ONLN) + +RUN LLVM_VERSION=12.0.1 LLVM_VERSION_MAJOR="${LLVM_VERSION%%.*}" && \ + mkdir -p $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ && \ + cp compiler-rt_build/lib/linux/libclang_rt.profile-aarch64.a $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ + + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local +ARG ROOTFS_DIR=/crossrootfs/arm64 + +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/cbl-mariner/2.0/cross/x86/Dockerfile b/src/cbl-mariner/2.0/cross/x86/Dockerfile new file mode 100644 index 000000000..4e40dc702 --- /dev/null +++ b/src/cbl-mariner/2.0/cross/x86/Dockerfile @@ -0,0 +1,43 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local AS builder +ARG ROOTFS_DIR=/crossrootfs/x86 + +# Provides LLVMConfig.cmake, needed to build compiler-rt. Only needed on x86. +# x64 doesn't need this because we use compiler-rt from the mariner package. +# arm/arm64 don't need this because LLVMConfig.cmake is provided by the LLVM we build from source. +RUN tdnf install -y llvm-devel + +RUN /scripts/eng/common/cross/build-rootfs.sh x86 xenial --skipunmount + +# Build compiler-rt profile library for PGO instrumentation +RUN mkdir compiler-rt_build && cd compiler-rt_build && \ + BUILD_FLAGS="-v --sysroot=$ROOTFS_DIR" \ + TARGET_TRIPLE=i386-linux-gnu && \ + cmake ../llvm-project.src/compiler-rt \ + -DCOMPILER_RT_BUILD_PROFILE=ON \ + -DCOMPILER_RT_BUILD_BUILTINS=OFF \ + -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ + -DCOMPILER_RT_BUILD_XRAY=OFF \ + -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ + \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \ + -DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE} \ + -DCMAKE_CXX_COMPILER_TARGET=${TARGET_TRIPLE} \ + -DLLVM_CONFIG_PATH=llvm-config \ + -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$ROOTFS_DIR/usr \ + -DCMAKE_C_FLAGS="${BUILD_FLAGS}" \ + -DCMAKE_CXX_FLAGS="${BUILD_FLAGS}" && \ + make -j $(getconf _NPROCESSORS_ONLN) + +RUN LLVM_VERSION=12.0.1 LLVM_VERSION_MAJOR="${LLVM_VERSION%%.*}" && \ + mkdir -p $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ && \ + cp compiler-rt_build/lib/linux/libclang_rt.profile-i386.a $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ + + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local +ARG ROOTFS_DIR=/crossrootfs/x86 + +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile b/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile new file mode 100644 index 000000000..9a115b3ed --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile @@ -0,0 +1,6 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local + +RUN tdnf install -y \ + clang \ + lld \ + compiler-rt diff --git a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile new file mode 100644 index 000000000..d4f93732a --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile @@ -0,0 +1,6 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local AS builder + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local + +# Install LLVM that we built from source +COPY --from=builder /usr/local /usr/local diff --git a/src/cbl-mariner/2.0/crossdeps-builder/Dockerfile b/src/cbl-mariner/2.0/crossdeps-builder/Dockerfile new file mode 100644 index 000000000..5d3a7bac8 --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps-builder/Dockerfile @@ -0,0 +1,64 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local + +# TODO: remove this once debootstrap is available in the base repos. +COPY mariner-extended.repo /etc/yum.repos.d/ + +RUN tdnf install -y \ + # Rootfs build dependencies + debootstrap \ + # LLVM build dependencies + texinfo \ + diffutils \ + binutils + +# 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 + wget 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 + +# 1. Obtain signing keys used to sign llvm sources +RUN wget https://releases.llvm.org/release-keys.asc && \ + echo "f181a90697e3ea4b7782f1ee48314a570aef058505b4f3a0ab0611094ec13241 release-keys.asc" | sha256sum -c && \ + gpg --output release-keys.gpg --dearmor release-keys.asc && \ + rm release-keys.asc && \ +# 2. Download llvm sources and signature, and verify signature + LLVM_VERSION=12.0.1 && \ + wget -O llvm-project.src.tar.xz.sig https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz.sig && \ + echo "6cc956d622a7d3d746de0d71d8ca616a6c291e2c561703ac7a9535f38b999955 llvm-project.src.tar.xz.sig" | sha256sum -c && \ + wget -O llvm-project.src.tar.xz https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz && \ + echo "129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e llvm-project.src.tar.xz" | sha256sum -c && \ + gpg --keyring /release-keys.gpg --verify llvm-project.src.tar.xz.sig && \ + rm llvm-project.src.tar.xz.sig + +# Build LLVM cross-toolchain (with support for targeting arm architectures) +RUN mkdir llvm-project.src && \ + tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ + rm llvm-project.src.tar.xz && \ + mkdir build && cd build && \ + cmake ../llvm-project.src/llvm \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_TARGETS_TO_BUILD="host;AArch64;ARM" \ + -Wno-dev \ + -DLLVM_ENABLE_PROJECTS="clang;lld" && \ + make -j $(getconf _NPROCESSORS_ONLN) && \ + make install + +# Obtain arcade scripts used to build rootfs +RUN git config --global user.email builder@dotnet-buildtools-prereqs-docker && \ + git clone --depth 1 --single-branch https://github.com/dotnet/arcade /scripts diff --git a/src/cbl-mariner/2.0/crossdeps-builder/dimitri_john_ledkov.asc b/src/cbl-mariner/2.0/crossdeps-builder/dimitri_john_ledkov.asc new file mode 100644 index 000000000..c36cc66e7 --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps-builder/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/src/cbl-mariner/2.0/crossdeps-builder/mariner-extended.repo b/src/cbl-mariner/2.0/crossdeps-builder/mariner-extended.repo new file mode 100644 index 000000000..c45e4a74b --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps-builder/mariner-extended.repo @@ -0,0 +1,29 @@ +[mariner-official-extended] +name=CBL-Mariner Official Extended $releasever $basearch +baseurl=https://packages.microsoft.com/cbl-mariner/$releasever/prod/extended/$basearch +gpgkey=file:///etc/pki/rpm-gpg/MICROSOFT-RPM-GPG-KEY file:///etc/pki/rpm-gpg/MICROSOFT-METADATA-GPG-KEY +gpgcheck=1 +repo_gpgcheck=1 +enabled=1 +skip_if_unavailable=True +sslverify=1 + +[mariner-official-extended-debuginfo] +name=CBL-Mariner Official Extended $releasever $basearch Debuginfo +baseurl=https://packages.microsoft.com/cbl-mariner/$releasever/prod/extended/debuginfo/$basearch +gpgkey=file:///etc/pki/rpm-gpg/MICROSOFT-RPM-GPG-KEY file:///etc/pki/rpm-gpg/MICROSOFT-METADATA-GPG-KEY +gpgcheck=1 +repo_gpgcheck=1 +enabled=0 +skip_if_unavailable=True +sslverify=1 + +[mariner-official-extended-source] +name=CBL-Mariner Official Extended $releasever Source +baseurl=https://packages.microsoft.com/cbl-mariner/$releasever/prod/extended/srpms +gpgkey=file:///etc/pki/rpm-gpg/MICROSOFT-RPM-GPG-KEY file:///etc/pki/rpm-gpg/MICROSOFT-METADATA-GPG-KEY +gpgcheck=1 +repo_gpgcheck=1 +enabled=0 +skip_if_unavailable=True +sslverify=1 diff --git a/src/cbl-mariner/2.0/crossdeps/Dockerfile b/src/cbl-mariner/2.0/crossdeps/Dockerfile new file mode 100644 index 000000000..a571bc173 --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps/Dockerfile @@ -0,0 +1,16 @@ +FROM mcr.microsoft.com/cbl-mariner/base/core:2.0 + +RUN tdnf update -y && \ + tdnf install -y \ + wget \ + ca-certificates \ + git \ + # Common runtime build dependencies + cmake \ + awk \ + icu \ + tar \ + # Crosscomponents build dependencies + glibc-devel \ + lttng-ust-devel \ + kernel-headers diff --git a/src/cbl-mariner/manifest.json b/src/cbl-mariner/manifest.json index 7ea93c4da..bd76c7b5b 100644 --- a/src/cbl-mariner/manifest.json +++ b/src/cbl-mariner/manifest.json @@ -42,6 +42,135 @@ } ] }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/crossdeps", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-crossdeps-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-crossdeps$(FloatingTagSuffix)": {}, + "cbl-mariner-2.0-crossdeps-local": { + "isLocal": true + } + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/crossdeps-builder", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-crossdeps-builder-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-crossdeps-builder$(FloatingTagSuffix)": {}, + "cbl-mariner-2.0-crossdeps-builder-local": { + "isLocal": true + } + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/crossdeps-amd64", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-crossdeps-amd64-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-crossdeps-amd64$(FloatingTagSuffix)": {}, + "cbl-mariner-2.0-crossdeps-amd64-local": { + "isLocal": true + } + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/crossdeps-arm", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-crossdeps-arm-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-crossdeps-arm$(FloatingTagSuffix)": {}, + "cbl-mariner-2.0-crossdeps-arm-local": { + "isLocal": true + } + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/cross/amd64", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-cross-amd64-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-cross-amd64$(FloatingTagSuffix)": {} + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/cross/amd64-alpine", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-cross-amd64-alpine-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-cross-amd64-alpine$(FloatingTagSuffix)": {} + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/cross/arm64", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-cross-arm64-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-cross-arm64$(FloatingTagSuffix)": {} + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/cross/arm64-alpine", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-cross-arm64-alpine-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-cross-arm64-alpine$(FloatingTagSuffix)": {} + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/cross/x86", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-cross-x86-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-cross-x86$(FloatingTagSuffix)": {} + } + } + ] + }, { "platforms": [ {