@@ -102,9 +102,11 @@ controller_tag = $(REGISTRY)/agones-controller:$(VERSION)
102102sidecar_tag = $(REGISTRY ) /agones-sdk:$(VERSION )
103103
104104ifeq ($(WITH_WINDOWS ) , 1)
105- sidecar_linux_amd64_tag = $(sidecar_tag ) -linux_amd64
105+ sidecar_linux_amd64_tag = $(REGISTRY ) /agones-sdk:$(VERSION ) -linux-amd64
106+ sidecar_linux_arm64_tag = $(REGISTRY ) /agones-sdk:$(VERSION ) -linux-arm64
106107else
107- sidecar_linux_amd64_tag = $(sidecar_tag )
108+ sidecar_linux_amd64_tag = $(REGISTRY ) /agones-sdk:$(VERSION ) -amd64
109+ sidecar_linux_arm64_tag = $(REGISTRY ) /agones-sdk:$(VERSION ) -arm64
108110endif
109111
110112ping_tag = $(REGISTRY ) /agones-ping:$(VERSION )
@@ -230,9 +232,6 @@ build: build-images build-sdks
230232
231233# build the docker images
232234build-images : build-controller-image build-agones-sdk-image build-ping-image build-allocator-image
233- ifeq ($(WITH_WINDOWS ) , 1)
234- build-images : build-agones-sdk-image-windows
235- endif
236235
237236# package the current agones helm chart
238237build-chart : RELEASE_VERSION ?= $(base_version )
@@ -360,7 +359,6 @@ uninstall: $(ensure-build-image)
360359 $(DOCKER_RUN ) \
361360 helm uninstall agones --namespace=agones-system
362361
363-
364362# Build a static binary for the gameserver controller
365363ifeq ($(WITH_ARM64 ) , 1)
366364build-controller-binary : $(ensure-build-image ) build-controller-binary-linux-amd64 build-controller-binary-linux-arm64
@@ -428,34 +426,28 @@ build-agones-sdk-binary-windows: $(ensure-build-image)
428426 -o $(go_build_base_path ) /cmd/sdk-server/bin/sdk-server.windows.amd64.exe $(go_rebuild_flags ) $(go_version_flags ) $(agones_package ) /cmd/sdk-server
429427
430428ensure-windows-buildx :
431- # TODO: Remove `--use` and specify `--builder` for each buildx command once Docker 19.03.13 is available.
432- # `--use` sets the global default buildx context to $(BUILDX_WINDOWS_BUILDER).
433- #
434- # Windows image builds must be directed to a specific buildx context.
435- # The default context does not support building cross platform images.
436- -DOCKER_CLI_EXPERIMENTAL=enabled docker buildx create --name=$(BUILDX_WINDOWS_BUILDER ) --use
429+ -docker buildx create --name=$(BUILDX_WINDOWS_BUILDER )
437430
438431# Build the image for the gameserver sidecar and SDK binaries
439- build-agones-sdk-image : $(ensure-build-image ) build-agones-sdk-binary build-licenses build-required-src-dist
432+ build-agones-sdk-image : $(ensure-build-image ) build-agones-sdk-binary build-licenses build-required-src-dist build-agones-sdk-image-amd64
433+ ifeq ($(WITH_ARM64 ) , 1)
434+ build-agones-sdk-image : build-agones-sdk-image-arm64
435+ endif
436+ ifeq ($(WITH_WINDOWS ) , 1)
437+ build-agones-sdk-image : build-agones-sdk-image-windows
438+ endif
439+
440+ build-agones-sdk-image-amd64 : $(ensure-build-image ) build-agones-sdk-binary
440441 docker build $(agones_path ) /cmd/sdk-server/ --tag=$(sidecar_linux_amd64_tag ) $(DOCKER_BUILD_ARGS )
442+ build-agones-sdk-image-arm64 : $(ensure-build-image ) build-agones-sdk-binary
443+ docker buildx build --platform linux/arm64 --build-arg ARCH=arm64 $(agones_path ) /cmd/sdk-server/ --tag=$(sidecar_linux_arm64_tag ) $(DOCKER_BUILD_ARGS )
441444
445+ build-agones-sdk-image-windows : build-agones-sdk-binary
442446build-agones-sdk-image-windows : $(foreach winver, $(WINDOWS_VERSIONS ) , build-agones-sdk-image-windows-$(winver ) )
443447
444448# Build the image for the gameserver sidecar and SDK binaries
445449build-agones-sdk-image-windows-% : $(ensure-build-image ) build-agones-sdk-binary build-licenses build-required-src-dist ensure-windows-buildx
446- # TODO: Use `--builder $(BUILDX_WINDOWS_BUILDER)` later once Docker 19.03.13 is the build target. Cloud Build has 19.03.08 https://cloud.google.com/cloud-build/release-notes
447- DOCKER_CLI_EXPERIMENTAL=enabled docker buildx build --platform windows/amd64 -f $(agones_path ) /cmd/sdk-server/Dockerfile.windows --tag=$(sidecar_tag ) -windows_amd64-$* --build-arg WINDOWS_VERSION=$* $(DOCKER_BUILD_ARGS ) $(agones_path ) /cmd/sdk-server/ $(WINDOWS_DOCKER_PUSH_ARGS )
448-
449- # Build sidecar image only
450- build-agones-sdk-server-image : $(ensure-build-image ) build-agones-sdk-binary-linux build-licenses build-required-src-dist
451- docker build $(agones_path ) /cmd/sdk-server/ --tag=$(sidecar_linux_amd64_tag ) $(DOCKER_BUILD_ARGS )
452-
453- build-agones-sdk-server-image-windows : $(foreach winver, $(WINDOWS_VERSIONS ) , build-agones-sdk-server-image-windows-$(winver ) )
454-
455- # Build sidecar image only
456- build-agones-sdk-server-image-windows-% : $(ensure-build-image ) build-agones-sdk-binary-linux build-licenses build-required-src-dist ensure-windows-buildx
457- # TODO: Use `--builder $(BUILDX_WINDOWS_BUILDER)` later once Docker 19.03.13 is the build target. Cloud Build has 19.03.08 https://cloud.google.com/cloud-build/release-notes
458- DOCKER_CLI_EXPERIMENTAL=enabled docker buildx build $(agones_path ) /cmd/sdk-server/ -f $(agones_path ) /cmd/sdk-server/Dockerfile.windows --platform windows/amd64 --tag=$(sidecar_tag ) -windows_amd64-$* --build-arg WINDOWS_VERSION=$* $(DOCKER_BUILD_ARGS ) $(WINDOWS_DOCKER_PUSH_ARGS )
450+ docker buildx build --platform windows/amd64 --builder $(BUILDX_WINDOWS_BUILDER ) -f $(agones_path ) /cmd/sdk-server/Dockerfile.windows --tag=$(sidecar_tag ) -windows_amd64-$* --build-arg WINDOWS_VERSION=$* $(DOCKER_BUILD_ARGS ) $(agones_path ) /cmd/sdk-server/ $(WINDOWS_DOCKER_PUSH_ARGS )
459451
460452# Build a static binary for the ping service
461453build-ping-binary : $(ensure-build-image )
@@ -495,23 +487,37 @@ push-allocator-image: $(ensure-build-image)
495487build-allocator-image : $(ensure-build-image ) build-allocator-binary build-licenses build-required-src-dist
496488 docker build $(agones_path ) /cmd/allocator/ --tag=$(allocator_tag ) $(DOCKER_BUILD_ARGS )
497489
490+ # build list of images to include in the manifest for the sidecar image.
491+ push_manifest = $(sidecar_linux_amd64_tag )
498492ifeq ($(WITH_WINDOWS ) , 1)
493+ push_manifest += $(foreach windows_version, $(WINDOWS_VERSIONS ) , $(sidecar_tag ) -windows_amd64-$(windows_version ) )
494+ endif
495+ ifeq ($(WITH_ARM64 ) , 1)
496+ push_manifest += $(sidecar_linux_arm64_tag )
497+ endif
498+
499499# push the gameservers sidecar image
500- push-agones-sdk-image : push-agones-sdk-linux-image
500+ push-agones-sdk-image : push-agones-sdk-linux-image-amd64
501+ ifeq ($(WITH_WINDOWS ) , 1)
502+ push-agones-sdk-image : push-agones-sdk-windows
503+ endif
504+ ifeq ($(WITH_ARM64 ) , 1)
505+ push-agones-sdk-image : push-agones-sdk-linux-image-arm64
506+ endif
501507 # Ensure that the sidecar manifest is removed before creating a new one.
502508 -DOCKER_CLI_EXPERIMENTAL=enabled docker manifest rm $(sidecar_tag)
509+ DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create $(sidecar_tag) $(push_manifest)
510+ DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push $(sidecar_tag)
511+
512+ push-agones-sdk-windows :
503513 # Using docker buildx with foreign OSes is a bit awkward. Since the layers but not the tag
504514 # was cached we have to rebuild the image (which should be fast since it's cached).
505515 $(MAKE ) WINDOWS_DOCKER_PUSH_ARGS=--push build-agones-sdk-image-windows
506- # Agones should start using the -linux_amd64 suffix for Linux images. This allows multi-arch support in the future.
507- DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create $(sidecar_tag ) $(sidecar_linux_amd64_tag ) $(foreach windows_version, $(WINDOWS_VERSIONS ) , $(sidecar_tag ) -windows_amd64-$(windows_version ) )
508- DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push $(sidecar_tag )
509- else
510- push-agones-sdk-image : push-agones-sdk-linux-image
511- endif
512516
513- # push the gameservers sidecar image
514- push-agones-sdk-linux-image : $(ensure-build-image )
517+ push-agones-sdk-linux-image-arm64 : $(ensure-build-image )
518+ $(MAKE ) DOCKER_BUILD_ARGS=--push build-agones-sdk-image-arm64
519+
520+ push-agones-sdk-linux-image-amd64 : $(ensure-build-image )
515521 docker push $(sidecar_linux_amd64_tag )
516522
517523# Generate the Embedded CRD openapi
0 commit comments