From f89177da6607ad5cf1f775c40b0525937cb508db Mon Sep 17 00:00:00 2001 From: Dominik Rosiek Date: Thu, 29 Feb 2024 08:54:37 +0100 Subject: [PATCH] chore: build multiple windows images Signed-off-by: Dominik Rosiek --- .github/workflows/dev_builds.yml | 12 ++++++---- .github/workflows/pull_requests.yml | 19 +++++----------- .github/workflows/release_builds.yml | 10 +++++--- Dockerfile_windows | 3 ++- Makefile | 12 ++++++++-- ci/build-push-multiplatform.sh | 29 ++++++++++++++++++++++-- ci/push_docker_multiplatform_manifest.sh | 11 +++++++-- 7 files changed, 69 insertions(+), 27 deletions(-) diff --git a/.github/workflows/dev_builds.yml b/.github/workflows/dev_builds.yml index 51628892c1..6b1c4f50f1 100644 --- a/.github/workflows/dev_builds.yml +++ b/.github/workflows/dev_builds.yml @@ -199,7 +199,11 @@ jobs: - build strategy: matrix: - arch_os: [ 'windows_amd64'] + include: + - arch_os: windows_amd64 + base_image_tag: ltsc2022 + - arch_os: windows_amd64 + base_image_tag: ltsc2019 steps: - uses: actions/checkout@v4 @@ -227,12 +231,12 @@ jobs: name: otelcol-sumo-${{matrix.arch_os}}.exe path: artifacts/ - - name: Build and push image to Open Source ECR + - name: Build and push images to Open Source ECR run: | cp artifacts/otelcol-sumo-${{matrix.arch_os}}.exe otelcol-sumo.exe make build-push-container-windows-dev \ BUILD_TAG=${{ steps.extract_tag.outputs.tag }} \ - PLATFORM=${{ matrix.arch_os }} + PLATFORM=${{ matrix.arch_os }}_${{ matrix.base_image_tag }} push-docker-manifest: name: Push joint container manifest @@ -284,7 +288,7 @@ jobs: run: | make push-container-manifest-dev \ BUILD_TAG=${{ steps.extract_tag.outputs.tag }} \ - PLATFORMS="linux/amd64 linux/arm64 windows/amd64" + PLATFORMS="linux/amd64 linux/arm64 windows/amd64/ltsc2022 windows/amd64/ltsc2019" - name: Push joint UBI-based container manifest for all platforms to Open Source ECR run: | diff --git a/.github/workflows/pull_requests.yml b/.github/workflows/pull_requests.yml index 849c571ed1..f99f02c591 100644 --- a/.github/workflows/pull_requests.yml +++ b/.github/workflows/pull_requests.yml @@ -367,7 +367,11 @@ jobs: - build strategy: matrix: - arch_os: [ 'windows_amd64'] + include: + - arch_os: windows_amd64 + base_image_tag: ltsc2022 + - arch_os: windows_amd64 + base_image_tag: ltsc2019 steps: - uses: actions/checkout@v4 @@ -397,21 +401,10 @@ jobs: run: | cp artifacts/otelcol-sumo-${{matrix.arch_os}}.exe otelcol-sumo.exe make build-container-windows \ - PLATFORM=${{ matrix.arch_os }} + PLATFORM=${{ matrix.arch_os }}_${{ matrix.base_image_tag }} - name: Test built image if: steps.changed-files.outputs.any_changed == 'true' run: make test-built-image # ToDo: build windows FIPS image - # - name: Build the FIPS container image - # if: steps.changed-files.outputs.any_changed == 'true' - # run: | - # cp artifacts/otelcol-sumo-fips-${{matrix.arch_os}}.exe otelcol-sumo.exe - # make build-container-windows \ - # PLATFORM=${{ matrix.arch_os }} - # BUILD_TYPE_SUFFIX="-fips" - - # - name: Test built FIPS image - # if: steps.changed-files.outputs.any_changed == 'true' - # run: make test-built-image BUILD_TAG="latest-fips" diff --git a/.github/workflows/release_builds.yml b/.github/workflows/release_builds.yml index ed523162b6..7db1328448 100644 --- a/.github/workflows/release_builds.yml +++ b/.github/workflows/release_builds.yml @@ -392,7 +392,11 @@ jobs: - build strategy: matrix: - arch_os: [ 'windows_amd64'] + include: + - arch_os: windows_amd64 + base_image_tag: ltsc2022 + - arch_os: windows_amd64 + base_image_tag: ltsc2019 steps: - uses: actions/checkout@v4 @@ -425,7 +429,7 @@ jobs: cp artifacts/otelcol-sumo-${{matrix.arch_os}}.exe otelcol-sumo.exe make build-push-container-windows \ BUILD_TAG=${{ steps.extract_tag.outputs.tag }} \ - PLATFORM=${{ matrix.arch_os }} + PLATFORM=${{ matrix.arch_os }}_${{ matrix.base_image_tag }} push-docker-manifest: name: Push joint container manifest @@ -480,7 +484,7 @@ jobs: run: | make push-container-manifest \ BUILD_TAG=${{ steps.extract_tag.outputs.tag }} \ - PLATFORMS="linux/amd64 linux/arm64 windows/amd64" + PLATFORMS="linux/amd64 linux/arm64 windows/amd64/ltsc2022 windows/amd64/ltsc2019" - name: Push joint UBI-based container manifest for all platforms to Open Source ECR run: | diff --git a/Dockerfile_windows b/Dockerfile_windows index 14ada642d9..87887b953a 100644 --- a/Dockerfile_windows +++ b/Dockerfile_windows @@ -1,4 +1,5 @@ -FROM mcr.microsoft.com/windows/servercore:ltsc2022 +ARG BASE_IMAGE_TAG=ltsc2022 +FROM mcr.microsoft.com/windows/servercore:${BASE_IMAGE_TAG} ARG BUILD_TAG=latest ENV TAG $BUILD_TAG diff --git a/Makefile b/Makefile index d5e8dc0313..2c2c9c228e 100644 --- a/Makefile +++ b/Makefile @@ -243,6 +243,7 @@ OPENSOURCE_ECR_URL = public.ecr.aws/sumologic OPENSOURCE_REPO_URL = $(OPENSOURCE_ECR_URL)/$(IMAGE_NAME) OPENSOURCE_REPO_URL_DEV = $(OPENSOURCE_ECR_URL)/$(IMAGE_NAME_DEV) REPO_URL = $(OPENSOURCE_REPO_URL) +BASE_IMAGE_TAG ?= "" DOCKERFILE = Dockerfile @@ -302,14 +303,21 @@ _build-container-multiplatform: REPO_URL="$(REPO_URL)" \ DOCKERFILE="$(DOCKERFILE)" \ PLATFORM="$(PLATFORM)" \ + BASE_IMAGE_TAG="${BASE_IMAGE_TAG}" \ ./ci/build-push-multiplatform.sh $(PUSH) .PHONY: build-container-multiplatform build-container-multiplatform: _build-container-multiplatform .PHONY: build-container-windows -build-container-windows: DOCKERFILE = Dockerfile_windows -build-container-windows: _build-container-multiplatform +build-container-windows: + $(MAKE) _build-container-multiplatform \ + DOCKERFILE=Dockerfile_windows \ + BASE_IMAGE_TAG=ltsc2022 + + $(MAKE) _build-container-multiplatform \ + DOCKERFILE=Dockerfile_windows \ + BASE_IMAGE_TAG=ltsc2019 .PHONY: build-push-container-windows build-push-container-windows: PUSH = --push diff --git a/ci/build-push-multiplatform.sh b/ci/build-push-multiplatform.sh index 1d7c1d2b0d..8fac78389e 100755 --- a/ci/build-push-multiplatform.sh +++ b/ci/build-push-multiplatform.sh @@ -40,6 +40,10 @@ if [[ -z "${REPO_URL}" ]]; then exit 1 fi +if [[ ! -z "${BASE_IMAGE_TAG}" ]]; then + BASE_IMAGE_TAG="-${BASE_IMAGE_TAG}" +fi + if [[ -z "${PLATFORM}" ]]; then echo "No PLATFORM passed in" exit 1 @@ -59,6 +63,7 @@ fi # linux/arm/v7, linux/arm/v6 function build_push() { local BUILD_ARCH + local BASE_IMAGE_TAG_SUFFIX set -x case "${PLATFORM}" in @@ -75,8 +80,24 @@ function build_push() { ;; "windows/amd64"|"windows_amd64") + readonly BUILD_ARCH="amd64" + readonly BASE_IMAGE_TAG_SUFFIX="windows" + PLATFORM="windows/amd64" + ;; + + "windows/amd64/ltsc2022"|"windows_amd64_ltsc2022") + readonly BUILD_ARCH="amd64" + readonly BUILD_PLATFORM="windows" + readonly BASE_IMAGE_TAG_SUFFIX="-ltsc2022" + readonly BASE_IMAGE_TAG="ltsc2022" + PLATFORM="windows/amd64" + ;; + + "windows/amd64/ltsc2019"|"windows_amd64_ltsc2019") readonly BUILD_ARCH="amd64" readonly BUILD_PLATFORM="windows" + readonly BASE_IMAGE_TAG_SUFFIX="-ltsc2019" + readonly BASE_IMAGE_TAG="ltsc2019" PLATFORM="windows/amd64" ;; @@ -97,9 +118,9 @@ function build_push() { esac local TAG - readonly TAG="${REPO_URL}:${BUILD_TAG}${BUILD_TYPE_SUFFIX}-${BUILD_PLATFORM}-${BUILD_ARCH}" + readonly TAG="${REPO_URL}:${BUILD_TAG}${BUILD_TYPE_SUFFIX}-${BUILD_PLATFORM}-${BUILD_ARCH}${BASE_IMAGE_TAG_SUFFIX}" local LATEST_TAG - readonly LATEST_TAG="${REPO_URL}:latest${BUILD_TYPE_SUFFIX}-${BUILD_PLATFORM}-${BUILD_ARCH}" + readonly LATEST_TAG="${REPO_URL}:latest${BUILD_TYPE_SUFFIX}-${BUILD_PLATFORM}-${BUILD_ARCH}${BASE_IMAGE_TAG_SUFFIX}" # --provenance=false for docker buildx ensures that we create manifest instead of manifest list if [[ "${PUSH}" == true ]]; then @@ -109,6 +130,7 @@ function build_push() { docker build \ --file "${DOCKERFILE}" \ --build-arg BUILD_TAG="${BUILD_TAG}" \ + --build-arg BASE_IMAGE_TAG="${BASE_IMAGE_TAG}" \ --build-arg BUILDKIT_INLINE_CACHE=1 \ --platform="${PLATFORM}" \ --tag "${LATEST_TAG}" \ @@ -123,6 +145,7 @@ function build_push() { --push \ --file "${DOCKERFILE}" \ --build-arg BUILD_TAG="${BUILD_TAG}" \ + --build-arg BASE_IMAGE_TAG="${BASE_IMAGE_TAG}" \ --build-arg BUILDKIT_INLINE_CACHE=1 \ --platform="${PLATFORM}" \ --tag "${LATEST_TAG}" \ @@ -136,6 +159,7 @@ function build_push() { docker build \ --file "${DOCKERFILE}" \ --build-arg BUILD_TAG="latest${BUILD_TYPE_SUFFIX}" \ + --build-arg BASE_IMAGE_TAG="${BASE_IMAGE_TAG}" \ --build-arg BUILDKIT_INLINE_CACHE=1 \ --platform="${PLATFORM}" \ --tag "${REPO_URL}:latest${BUILD_TYPE_SUFFIX}" \ @@ -146,6 +170,7 @@ function build_push() { docker buildx build \ --file "${DOCKERFILE}" \ --build-arg BUILD_TAG="latest${BUILD_TYPE_SUFFIX}" \ + --build-arg BASE_IMAGE_TAG="${BASE_IMAGE_TAG}" \ --build-arg BUILDKIT_INLINE_CACHE=1 \ --platform="${PLATFORM}" \ --load \ diff --git a/ci/push_docker_multiplatform_manifest.sh b/ci/push_docker_multiplatform_manifest.sh index 7c802114c5..d495b4cfa2 100755 --- a/ci/push_docker_multiplatform_manifest.sh +++ b/ci/push_docker_multiplatform_manifest.sh @@ -53,9 +53,16 @@ function push_manifest() { BUILD_PLATFORM="linux" ;; - "windows/amd64") + "windows/amd64/ltsc2022") BUILD_ARCH="amd64" BUILD_PLATFORM="windows" + BASE_IMAGE_TAG_SUFFIX="-ltsc2022" + ;; + + "windows/amd64/ltsc2019") + BUILD_ARCH="amd64" + BUILD_PLATFORM="windows" + BASE_IMAGE_TAG_SUFFIX="-ltsc2019" ;; *) echo "Unsupported platform ${platform}" @@ -63,7 +70,7 @@ function push_manifest() { ;; esac - TAGS_IN_MANIFEST+=("${REPO_URL}:${BUILD_TAG}${BUILD_TYPE_SUFFIX}-${BUILD_PLATFORM}-${BUILD_ARCH}") + TAGS_IN_MANIFEST+=("${REPO_URL}:${BUILD_TAG}${BUILD_TYPE_SUFFIX}-${BUILD_PLATFORM}-${BUILD_ARCH}${BASE_IMAGE_TAG_SUFFIX}") done echo "Tags in the manifest:"