Skip to content

Commit

Permalink
feat: support bulding windows image in ci/build-push-multiplatform.sh
Browse files Browse the repository at this point in the history
Signed-off-by: Dominik Rosiek <drosiek@sumologic.com>
  • Loading branch information
Dominik Rosiek authored and sumo-drosiek committed Feb 27, 2024
1 parent 77adb36 commit 4e81aba
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 50 deletions.
4 changes: 3 additions & 1 deletion .github/workflows/pull_requests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,9 @@ jobs:
if: steps.changed-files.outputs.any_changed == 'true'
run: |
cp artifacts/otelcol-sumo-${{matrix.arch_os}}.exe otelcol-sumo.exe
make build-push-container-windows
make build-container-multiplatform \
PLATFORM=${{ matrix.arch_os }} \
DOCKERFILE=Dockerfile_windows
- name: Test built image
if: steps.changed-files.outputs.any_changed == 'true'
Expand Down
6 changes: 5 additions & 1 deletion Dockerfile_windows
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
FROM mcr.microsoft.com/windows/nanoserver:ltsc2022
FROM mcr.microsoft.com/windows/servercore:ltsc2019
ARG BUILD_TAG=latest
ENV TAG $BUILD_TAG

ADD /otelcol-sumo.exe /otelcol-sumo.exe
ENTRYPOINT ["/otelcol-sumo.exe"]
CMD ["--config", "/etc/otel/config.yaml"]
11 changes: 1 addition & 10 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -300,15 +300,6 @@ _build-container-multiplatform:
PLATFORM="$(PLATFORM)" \
./ci/build-push-multiplatform.sh $(PUSH)

.PHONY: _build-container-windows
_build-container-windows:
docker \
build \
-f $(DOCKERFILE) \
. \
-t ${REPO_URL}/${BUILD_TAG}-windows \
--platform="$(PLATFORM)"

.PHONY: build-container-multiplatform
build-container-multiplatform: _build-container-multiplatform

Expand All @@ -324,7 +315,7 @@ build-push-container-ubi: _build-container-multiplatform
.PHONY: build-push-container-windows
build-push-container-windows: PUSH = --push
build-push-container-windows: DOCKERFILE = Dockerfile_windows
build-push-container-windows: _build-container-windows
build-push-container-windows: _build-container-multiplatform

.PHONY: test-built-image
test-built-image:
Expand Down
115 changes: 81 additions & 34 deletions ci/build-push-multiplatform.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,29 @@

set -eo pipefail

while ! docker buildx ls; do
echo "Cannot connect to docker daemon"
sleep 1
done

DOCKER_BUILDX_LS_OUT=$(docker buildx ls <<-END
if echo "${PLATFORM}" | grep windows; then
echo ''
# while ! docker images; do
# echo "Cannot connect to docker daemon"
# sleep 1
# done
else
while ! docker buildx ls; do
echo "Cannot connect to docker daemon"
sleep 1
done

DOCKER_BUILDX_LS_OUT=$(docker buildx ls <<-END
END
)
readonly DOCKER_BUILDX_LS_OUT
)
readonly DOCKER_BUILDX_LS_OUT

# check for arm support only if we try to build it
if echo "${PLATFORM}" | grep -q arm && ! grep -q arm <<< "${DOCKER_BUILDX_LS_OUT}"; then
echo "Your Buildx seems to lack ARM architecture support"
echo "${DOCKER_BUILDX_LS_OUT}"
exit 1
# check for arm support only if we try to build it
if echo "${PLATFORM}" | grep -q arm && ! grep -q arm <<< "${DOCKER_BUILDX_LS_OUT}"; then
echo "Your Buildx seems to lack ARM architecture support"
echo "${DOCKER_BUILDX_LS_OUT}"
exit 1
fi
fi

if [[ -z "${BUILD_TAG}" ]]; then
Expand Down Expand Up @@ -57,14 +65,22 @@ function build_push() {
case "${PLATFORM}" in
"linux/amd64"|"linux_amd64")
readonly BUILD_ARCH="amd64"
readonly BUILD_PLATFORM="linux"
PLATFORM="linux/amd64"
;;

"linux/arm64"|"linux_arm64")
readonly BUILD_ARCH="arm64"
readonly BUILD_PLATFORM="linux"
PLATFORM="linux/arm64"
;;

"windows/amd64"|"windows_amd64")
readonly BUILD_ARCH="amd64"
readonly BUILD_PLATFORM="windows"
PLATFORM="windows/amd64"
;;

# Can't really enable it for now because:
# !shopify/sarama@v1.29.0/gssapi_kerberos.go:62:10: constant 4294967295 overflows int
# ref: https://github.com/SumoLogic/sumologic-otel-collector/runs/2805247906
Expand All @@ -82,33 +98,64 @@ function build_push() {
esac

local TAG
readonly TAG="${REPO_URL}:${BUILD_TAG}${BUILD_TYPE_SUFFIX}-${BUILD_ARCH}"
readonly TAG="${REPO_URL}:${BUILD_TAG}${BUILD_TYPE_SUFFIX}-${BUILD_PLATFORM}-${BUILD_ARCH}"
local LATEST_TAG
readonly LATEST_TAG="${REPO_URL}:latest${BUILD_TYPE_SUFFIX}-${BUILD_ARCH}"
readonly LATEST_TAG="${REPO_URL}:latest${BUILD_TYPE_SUFFIX}-${BUILD_PLATFORM}-${BUILD_ARCH}"

if [[ "${PUSH}" == true ]]; then
echo "Building tags: ${TAG}, ${LATEST_TAG}"
docker buildx build \
--push \
--file "${DOCKERFILE}" \
--build-arg BUILD_TAG="${BUILD_TAG}" \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--platform="${PLATFORM}" \
--tag "${LATEST_TAG}" \
--tag "${TAG}" \
.

if [[ "${BUILD_PLATFORM}" == "windows" ]]; then
docker build \
--file "${DOCKERFILE}" \
--build-arg BUILD_TAG="${BUILD_TAG}" \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--platform="${PLATFORM}" \
--tag "${LATEST_TAG}" \
.

docker tag "${LATEST_TAG}" "${TAG}"

docker push "${LATEST_TAG}"
docker push "${TAG}"
else
docker buildx build \
--push \
--file "${DOCKERFILE}" \
--build-arg BUILD_TAG="${BUILD_TAG}" \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--platform="${PLATFORM}" \
--tag "${LATEST_TAG}" \
--tag "${TAG}" \
.
fi
else
echo "Building tag: latest${BUILD_TYPE_SUFFIX}"
# load flag is needed so that docker loads this image
# for subsequent steps on github actions
docker buildx build \
--file "${DOCKERFILE}" \
--build-arg BUILD_TAG="latest${BUILD_TYPE_SUFFIX}" \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--platform="${PLATFORM}" \
--load \
--tag "${REPO_URL}:latest${BUILD_TYPE_SUFFIX}" \
.
if [[ "${BUILD_PLATFORM}" == "windows" ]]; then
docker build \
--file "${DOCKERFILE}" \
--build-arg BUILD_TAG="${BUILD_TAG}" \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--platform="${PLATFORM}" \
--tag "${REPO_URL}:latest${BUILD_TYPE_SUFFIX}" \
.

docker tag "${LATEST_TAG}" "${TAG}"

docker push "${LATEST_TAG}"
docker push "${TAG}"
else
# load flag is needed so that docker loads this image
# for subsequent steps on github actions
docker buildx build \
--file "${DOCKERFILE}" \
--build-arg BUILD_TAG="latest${BUILD_TYPE_SUFFIX}" \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--platform="${PLATFORM}" \
--load \
--tag "${REPO_URL}:latest${BUILD_TYPE_SUFFIX}" \
.
fi
fi
}

Expand Down
15 changes: 11 additions & 4 deletions ci/push_docker_multiplatform_manifest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -39,24 +39,31 @@ function push_manifest() {
echo "${platform}"
case "${platform}" in
"linux/amd64")
BUILD_ARCH="amd64"
readonly BUILD_ARCH="amd64"
readonly BUILD_PLATFORM="linux"
;;

"linux/arm64")
BUILD_ARCH="arm64"
readonly BUILD_ARCH="arm64"
readonly BUILD_PLATFORM="linux"
;;

"linux/arm/v7")
BUILD_ARCH="arm_v7"
readonly BUILD_ARCH="arm_v7"
readonly BUILD_PLATFORM="linux"
;;

"windows/amd64")
readonly BUILD_ARCH="amd64"
readonly BUILD_PLATFORM="windows"
;;
*)
echo "Unsupported platform ${platform}"
exit 1
;;
esac

TAGS_IN_MANIFEST+=("${REPO_URL}:${BUILD_TAG}-${BUILD_ARCH}")
TAGS_IN_MANIFEST+=("${REPO_URL}:${BUILD_TAG}-${BUILD_PLATFORM}-${BUILD_ARCH}")
done

echo "Tags in the manifest:"
Expand Down

0 comments on commit 4e81aba

Please sign in to comment.