From 33d902c0c99e5ac1974743d58adf20a1106a434a Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Wed, 14 Feb 2024 17:56:03 -0800 Subject: [PATCH 1/3] Windows 2019 docker image built with a 2019 tag --- .gitlab-ci.yml | 23 ++++++++++--------- .../packaging/release/gh-release-notes.sh | 6 ++--- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ad6a31704e..3cc2c4962e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -661,7 +661,7 @@ sign-linux-image: dependencies: - push-linux-image -build-push-windows-image: +build-push-windows2019-image: extends: .trigger-filter stage: release dependencies: @@ -679,10 +679,11 @@ build-push-windows-image: $ErrorActionPreference = 'Stop' if ($env:CI_COMMIT_TAG) { $IMAGE_NAME = "quay.io/signalfx/splunk-otel-collector-windows" - $IMAGE_TAG = $env:CI_COMMIT_TAG.TrimStart("v") + $tagNumber = $env:CI_COMMIT_TAG.TrimStart("v") + $IMAGE_TAG = "${tagNumber}-2019" } else { $IMAGE_NAME = "quay.io/signalfx/splunk-otel-collector-windows-dev" - $IMAGE_TAG = $env:CI_COMMIT_SHA + $IMAGE_TAG = "${env:CI_COMMIT_SHA}-2019" } $JMX_METRIC_GATHERER_RELEASE = $(Get-Content internal\buildscripts\packaging\jmx-metric-gatherer-release.txt) echo "Building ${IMAGE_NAME}:${IMAGE_TAG}" @@ -692,23 +693,23 @@ build-push-windows-image: echo "${IMAGE_NAME}:${IMAGE_TAG}" >> tags if ($env:CI_COMMIT_BRANCH -eq "main" -or $env:CI_COMMIT_TAG -match '^v\d+\.\d+\.\d+$') { # only push latest tag for main and stable releases; no need to sign them as signing is made for digest - echo "Tagging and pushing ${IMAGE_NAME}:latest" - docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:latest - docker push ${IMAGE_NAME}:latest + echo "Tagging and pushing ${IMAGE_NAME}:latest-2019" + docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:latest-2019 + docker push ${IMAGE_NAME}:latest-2019 } - - docker inspect --format='{{.RepoDigests}}' ${IMAGE_NAME}:${IMAGE_TAG} | Tee-Object -FilePath dist/windows_digest.txt + - docker inspect --format='{{.RepoDigests}}' ${IMAGE_NAME}:${IMAGE_TAG} | Tee-Object -FilePath dist/windows_2019_digest.txt - (Get-Content -Raw -Path tags) -replace "`r`n", "`n"| Set-Content -NoNewline tags_to_sign after_script: - docker image prune --all --force artifacts: paths: - - dist/windows_digest.txt + - dist/windows_2019_digest.txt - tags_to_sign -sign-windows-image: +sign-windows2019-image: extends: .sign-docker dependencies: - - build-push-windows-image + - build-push-windows2019-image build-push-windows2022-image: extends: .trigger-filter @@ -934,7 +935,7 @@ github-release: - sign-msi - sign-tar - push-linux-image - - build-push-windows-image + - build-push-windows2019-image - build-push-windows2022-image - choco-release - sign-agent-bundles diff --git a/internal/buildscripts/packaging/release/gh-release-notes.sh b/internal/buildscripts/packaging/release/gh-release-notes.sh index 67741d26bd..3c6f54d360 100755 --- a/internal/buildscripts/packaging/release/gh-release-notes.sh +++ b/internal/buildscripts/packaging/release/gh-release-notes.sh @@ -28,7 +28,7 @@ VERSION="$1" LINUX_AMD64_DIGEST="${2:-${REPO_DIR}/dist/linux_amd64_digest.txt}" LINUX_ARM64_DIGEST="${2:-${REPO_DIR}/dist/linux_arm64_digest.txt}" LINUX_PPC64LE_DIGEST="${2:-${REPO_DIR}/dist/linux_ppc64le_digest.txt}" -WINDOWS_DIGEST="${3:-${REPO_DIR}/dist/windows_digest.txt}" +WINDOWS_2019_DIGEST="${3:-${REPO_DIR}/dist/windows_2019_digest.txt}" WINDOWS_2022_DIGEST="${3:-${REPO_DIR}/dist/windows_2022_digest.txt}" CHANGELOG="${4:-${REPO_DIR}/CHANGELOG.md}" @@ -42,7 +42,7 @@ linux_amd64_digest="$( get_digest "$LINUX_AMD64_DIGEST" )" linux_arm64_digest="$( get_digest "$LINUX_ARM64_DIGEST" )" linux_ppc64le_digest="$( get_digest "$LINUX_PPC64LE_DIGEST" )" -windows_digest="$( get_digest "$WINDOWS_DIGEST" )" +windows_2019_digest="$( get_digest "$WINDOWS2019_DIGEST" )" windows_2022_digest="$( get_digest "$WINDOWS_2022_DIGEST" )" changes="""$changes @@ -51,7 +51,7 @@ changes="""$changes > - \`quay.io/signalfx/splunk-otel-collector:${VERSION#v}-amd64\` (digest: \`$linux_amd64_digest\`) > - \`quay.io/signalfx/splunk-otel-collector:${VERSION#v}-arm64\` (digest: \`$linux_arm64_digest\`) > - \`quay.io/signalfx/splunk-otel-collector:${VERSION#v}-ppc64le\` (digest: \`$linux_ppc64le_digest\`) -> - \`quay.io/signalfx/splunk-otel-collector-windows:${VERSION#v}\` (digest: \`$windows_digest\`) +> - \`quay.io/signalfx/splunk-otel-collector-windows:${VERSION#v}-2019\` (digest: \`$windows_2019_digest\`) > - \`quay.io/signalfx/splunk-otel-collector-windows:${VERSION#v}-2022\` (digest: \`$windows_2022_digest\`) """ From e8ee6e2df8b6b4168941cc64836df216c810b5e7 Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Wed, 14 Feb 2024 18:25:40 -0800 Subject: [PATCH 2/3] support creating a multiarch windows image --- .gitlab-ci.yml | 54 +++++++++++++++++++ .../packaging/release/gh-release-notes.sh | 3 ++ 2 files changed, 57 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3cc2c4962e..ff9784cfb8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -688,6 +688,8 @@ build-push-windows2019-image: $JMX_METRIC_GATHERER_RELEASE = $(Get-Content internal\buildscripts\packaging\jmx-metric-gatherer-release.txt) echo "Building ${IMAGE_NAME}:${IMAGE_TAG}" docker build -t ${IMAGE_NAME}:${IMAGE_TAG} --build-arg BASE_IMAGE=mcr.microsoft.com/windows/servercore:1809 --build-arg JMX_METRIC_GATHERER_RELEASE=${JMX_METRIC_GATHERER_RELEASE} -f .\cmd\otelcol\Dockerfile.windows .\cmd\otelcol\ + $os_version=$(docker manifest inspect mcr.microsoft.com/windows/servercore:1809 | jq '.manifests[0].platform."os.version"') + docker manifest annotate --os "windows" --arch "amd64" --os-version "$os_version" ${IMAGE_NAME}:${IMAGE_TAG} echo "Pushing ${IMAGE_NAME}:${IMAGE_TAG}" docker push ${IMAGE_NAME}:${IMAGE_TAG} echo "${IMAGE_NAME}:${IMAGE_TAG}" >> tags @@ -738,6 +740,8 @@ build-push-windows2022-image: $JMX_METRIC_GATHERER_RELEASE = $(Get-Content internal\buildscripts\packaging\jmx-metric-gatherer-release.txt) echo "Building ${IMAGE_NAME}:${IMAGE_TAG}" docker build -t ${IMAGE_NAME}:${IMAGE_TAG} --build-arg BASE_IMAGE=mcr.microsoft.com/windows/servercore:ltsc2022 --build-arg JMX_METRIC_GATHERER_RELEASE=${JMX_METRIC_GATHERER_RELEASE} -f .\cmd\otelcol\Dockerfile.windows .\cmd\otelcol\ + $os_version=$(docker manifest inspect mcr.microsoft.com/windows/servercore:ltsc2022 | jq '.manifests[0].platform."os.version"') + docker manifest annotate --os "windows" --arch "amd64" --os-version "$os_version" ${IMAGE_NAME}:${IMAGE_TAG} echo "Pushing ${IMAGE_NAME}:${IMAGE_TAG}" docker push ${IMAGE_NAME}:${IMAGE_TAG} echo "${IMAGE_NAME}:${IMAGE_TAG}" >> tags @@ -762,6 +766,55 @@ sign-windows2022-image: dependencies: - build-push-windows2022-image +build-push-windows-multiarch-image: + extends: .trigger-filter + stage: release + dependencies: + - build-push-windows2019-image + - build-push-windows2022-image + tags: + - windows2022 + retry: 2 + script: + - docker login -u $env:CIRCLECI_QUAY_USERNAME -p $env:CIRCLECI_QUAY_PASSWORD quay.io + - | + $ErrorActionPreference = 'Stop' + if ($env:CI_COMMIT_TAG) { + $IMAGE_NAME = "quay.io/signalfx/splunk-otel-collector-windows" + $tagNumber = $env:CI_COMMIT_TAG.TrimStart("v") + $IMAGE_TAG = "${tagNumber}" + } else { + $IMAGE_NAME = "quay.io/signalfx/splunk-otel-collector-windows-dev" + $IMAGE_TAG = "${env:CI_COMMIT_SHA}" + } + echo "Building ${IMAGE_NAME}:${IMAGE_TAG}" + docker pull ${IMAGE_NAME}:${IMAGE_TAG}-2019 + docker pull ${IMAGE_NAME}:${IMAGE_TAG}-2022 + docker manifest create ${IMAGE_NAME}:${IMAGE_TAG} --amend ${IMAGE_NAME}:${IMAGE_TAG}-2019 --amend ${IMAGE_NAME}:${IMAGE_TAG}-2022 + echo "Pushing ${IMAGE_NAME}:${IMAGE_TAG}" + docker manifest push ${IMAGE_NAME}:${IMAGE_TAG} + echo "${IMAGE_NAME}:${IMAGE_TAG}" >> tags + if ($env:CI_COMMIT_BRANCH -eq "main" -or $env:CI_COMMIT_TAG -match '^v\d+\.\d+\.\d+$') { + # only push latest tag for main and stable releases; no need to sign them as signing is made for digest + echo "Tagging and pushing ${IMAGE_NAME}:latest" + docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:latest + docker push ${IMAGE_NAME}:latest + } + - docker inspect --format='{{.RepoDigests}}' ${IMAGE_NAME}:${IMAGE_TAG} | Tee-Object -FilePath dist/windows_multiarch_digest.txt + - (Get-Content -Raw -Path tags) -replace "`r`n", "`n"| Set-Content -NoNewline tags_to_sign + after_script: + - docker image prune --all --force + - C:\Users\Administrator\Desktop\ops-scripts\docker-leak-check.exe -remove + artifacts: + paths: + - dist/windows_multiarch_digest.txt + - tags_to_sign + +sign-windows-multiarch-image: + extends: .sign-docker + dependencies: + - build-push-windows-multiarch-image + release-debs: extends: - .trigger-filter @@ -937,6 +990,7 @@ github-release: - push-linux-image - build-push-windows2019-image - build-push-windows2022-image + - build-push-windows-multiarch-image - choco-release - sign-agent-bundles script: diff --git a/internal/buildscripts/packaging/release/gh-release-notes.sh b/internal/buildscripts/packaging/release/gh-release-notes.sh index 3c6f54d360..2189c29b3b 100755 --- a/internal/buildscripts/packaging/release/gh-release-notes.sh +++ b/internal/buildscripts/packaging/release/gh-release-notes.sh @@ -30,6 +30,7 @@ LINUX_ARM64_DIGEST="${2:-${REPO_DIR}/dist/linux_arm64_digest.txt}" LINUX_PPC64LE_DIGEST="${2:-${REPO_DIR}/dist/linux_ppc64le_digest.txt}" WINDOWS_2019_DIGEST="${3:-${REPO_DIR}/dist/windows_2019_digest.txt}" WINDOWS_2022_DIGEST="${3:-${REPO_DIR}/dist/windows_2022_digest.txt}" +WINDOWS_MULTIARCH_DIGEST="${3:-${REPO_DIR}/dist/windows_multiarch_digest.txt}" CHANGELOG="${4:-${REPO_DIR}/CHANGELOG.md}" changes="$( awk -v version="$VERSION" '/^## / { if (p) { exit }; if ($2 == version) { p=1; next } } p && NF' "$CHANGELOG" )" @@ -44,6 +45,7 @@ linux_ppc64le_digest="$( get_digest "$LINUX_PPC64LE_DIGEST" )" windows_2019_digest="$( get_digest "$WINDOWS2019_DIGEST" )" windows_2022_digest="$( get_digest "$WINDOWS_2022_DIGEST" )" +windows_multiarch_digest="$( get_digest "$WINDOWS_MULTIARCH_DIGEST" )" changes="""$changes @@ -51,6 +53,7 @@ changes="""$changes > - \`quay.io/signalfx/splunk-otel-collector:${VERSION#v}-amd64\` (digest: \`$linux_amd64_digest\`) > - \`quay.io/signalfx/splunk-otel-collector:${VERSION#v}-arm64\` (digest: \`$linux_arm64_digest\`) > - \`quay.io/signalfx/splunk-otel-collector:${VERSION#v}-ppc64le\` (digest: \`$linux_ppc64le_digest\`) +> - \`quay.io/signalfx/splunk-otel-collector-windows:${VERSION#v}\` (digest: \`$windows_multiarch_digest\`) > - \`quay.io/signalfx/splunk-otel-collector-windows:${VERSION#v}-2019\` (digest: \`$windows_2019_digest\`) > - \`quay.io/signalfx/splunk-otel-collector-windows:${VERSION#v}-2022\` (digest: \`$windows_2022_digest\`) """ From 27165bf57282fa7e715123a2108a53e25bf522e5 Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Wed, 14 Feb 2024 23:00:41 -0800 Subject: [PATCH 3/3] Update internal/buildscripts/packaging/release/gh-release-notes.sh Co-authored-by: James Hughes (Splunk) --- internal/buildscripts/packaging/release/gh-release-notes.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/buildscripts/packaging/release/gh-release-notes.sh b/internal/buildscripts/packaging/release/gh-release-notes.sh index 2189c29b3b..19ddf49fea 100755 --- a/internal/buildscripts/packaging/release/gh-release-notes.sh +++ b/internal/buildscripts/packaging/release/gh-release-notes.sh @@ -43,7 +43,7 @@ linux_amd64_digest="$( get_digest "$LINUX_AMD64_DIGEST" )" linux_arm64_digest="$( get_digest "$LINUX_ARM64_DIGEST" )" linux_ppc64le_digest="$( get_digest "$LINUX_PPC64LE_DIGEST" )" -windows_2019_digest="$( get_digest "$WINDOWS2019_DIGEST" )" +windows_2019_digest="$( get_digest "$WINDOWS_2019_DIGEST" )" windows_2022_digest="$( get_digest "$WINDOWS_2022_DIGEST" )" windows_multiarch_digest="$( get_digest "$WINDOWS_MULTIARCH_DIGEST" )"