From 03e5a20d007d5bfd36aba590234400efea19aa7b Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Sun, 4 Sep 2022 12:40:24 +0200 Subject: [PATCH] Shared build targets Signed-off-by: CrazyMax --- Makefile | 2 +- README.md | 6 +- common/build.mk | 55 +++++++++++++++++++ packages.hcl => common/packages.hcl | 0 packages.mk => common/packages.mk | 0 .../release.Dockerfile | 0 vars.mk => common/vars.mk | 5 -- pkg/buildx/Makefile | 44 ++------------- pkg/buildx/docker-bake.hcl | 3 +- pkg/compose/Makefile | 44 ++------------- pkg/compose/docker-bake.hcl | 3 +- pkg/credential-helpers/Makefile | 44 ++------------- pkg/credential-helpers/docker-bake.hcl | 3 +- pkg/docker-cli/Makefile | 44 ++------------- pkg/docker-cli/docker-bake.hcl | 3 +- 15 files changed, 83 insertions(+), 173 deletions(-) create mode 100644 common/build.mk rename packages.hcl => common/packages.hcl (100%) rename packages.mk => common/packages.mk (100%) rename release.Dockerfile => common/release.Dockerfile (100%) rename vars.mk => common/vars.mk (88%) diff --git a/Makefile b/Makefile index 58ab7844..926a38d3 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -include vars.mk +include common/vars.mk pkgs := $(notdir $(shell find "pkg/" -maxdepth 1 -type d)) diff --git a/README.md b/README.md index d9b9302d..56bd8ead 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ and are published as a Docker image on Docker Hub. ## Usage -`vars.mk` contains variables that will be used by the main `Makefile` and -also across projects in [pkg](pkg) folder. It contains the list of apk, -deb and rpm releases to produce and repos with current versions of projects. +`common` folder contains helpers that will be used by the main `Makefile` and +also across projects in [pkg](pkg) folder like the list of supported apk, deb +and rpm releases to produce and repos with current versions of projects. `Makefile` contains targets to build specific or all packages and will output to `./bin` folder: diff --git a/common/build.mk b/common/build.mk new file mode 100644 index 00000000..f31877ed --- /dev/null +++ b/common/build.mk @@ -0,0 +1,55 @@ +# Copyright 2022 Docker Packaging authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +define run_bake + @PKG_RELEASE=$(1) DESTDIR=$(2) docker buildx bake $(3) $(4) --print + $(eval $@_TMP_OUT := $(shell mktemp -d -t docker-packaging.XXXXXXXXXX)) + PKG_RELEASE=$(1) DESTDIR=$($@_TMP_OUT) docker buildx bake $(3) $(4) + mkdir -p $(2) + find $($@_TMP_OUT) -mindepth 2 -maxdepth 2 -type d -exec cp -rf {} $(2)/ ';' + find $(2) -type d -empty -delete + rm -rf "$($@_TMP_OUT)" +endef + +.PHONY: pkg +pkg: + $(MAKE) $(foreach pkg,$(PKG_LIST),pkg-$(pkg)) + +.PHONY: pkg-% +pkg-%: pkg-%-releases + $(MAKE) $(foreach release,$(PKG_RELEASES),build-$(release)) + +.PHONY: pkg-static +pkg-static: + $(MAKE) build-static + +.PHONY: pkg-cross +pkg-cross: + $(MAKE) $(foreach pkg,$(PKG_LIST),pkg-cross-$(pkg)) + +.PHONY: pkg-% +pkg-cross-%: pkg-%-releases + $(MAKE) $(foreach release,$(PKG_RELEASES),build-cross-$(release)) + +.PHONY: pkg-cross-static +pkg-cross-static: + $(MAKE) build-cross-static + +.PHONY: build-% +build-%: pkg-info-% + $(call run_bake,$*,$(DESTDIR),$(BAKE_DEFINITIONS),pkg) + +.PHONY: build-cross-% +build-cross-%: pkg-info-% + $(call run_bake,$*,$(DESTDIR),$(BAKE_DEFINITIONS),pkg-cross) diff --git a/packages.hcl b/common/packages.hcl similarity index 100% rename from packages.hcl rename to common/packages.hcl diff --git a/packages.mk b/common/packages.mk similarity index 100% rename from packages.mk rename to common/packages.mk diff --git a/release.Dockerfile b/common/release.Dockerfile similarity index 100% rename from release.Dockerfile rename to common/release.Dockerfile diff --git a/vars.mk b/common/vars.mk similarity index 88% rename from vars.mk rename to common/vars.mk index 852b382a..1051cb10 100644 --- a/vars.mk +++ b/common/vars.mk @@ -29,8 +29,3 @@ export DOCKER_CLI_VERSION ?= v20.10.17 export BUILDX_VERSION ?= v0.9.1 export COMPOSE_VERSION ?= v2.10.2 export CREDENTIAL_HELPERS_VERSION ?= v0.7.0-beta.1 - -define run_bake - @PKG_RELEASE=$(1) DESTDIR=$(2) docker buildx bake $(3) $(4) --print - PKG_RELEASE=$(1) DESTDIR=$(2) docker buildx bake $(3) $(4) -endef diff --git a/pkg/buildx/Makefile b/pkg/buildx/Makefile index 80387f97..9a6f66e1 100644 --- a/pkg/buildx/Makefile +++ b/pkg/buildx/Makefile @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -include ../../vars.mk +include ../../common/vars.mk DESTDIR ?= $(BASEDIR)/bin -BAKE_DEFINITIONS ?= -f docker-bake.hcl -f ../../packages.hcl +BAKE_DEFINITIONS ?= -f docker-bake.hcl -f ../../common/packages.hcl PKG_LIST ?= apk deb rpm static DEFAULT_RULE ?= pkg-cross @@ -31,41 +31,5 @@ all-%: $(DEFAULT_RULE)-% version: @echo $(BUILDX_VERSION) -include ../../packages.mk - -.PHONY: pkg -pkg: - $(MAKE) $(foreach pkg,$(PKG_LIST),pkg-$(pkg)) - -.PHONY: pkg-% -pkg-%: pkg-%-releases - $(MAKE) $(foreach release,$(PKG_RELEASES),build-$(release)) - -.PHONY: pkg-static -pkg-static: - $(MAKE) build-static - -.PHONY: pkg -pkg-cross: - $(MAKE) $(foreach pkg,$(PKG_LIST),pkg-cross-$(pkg)) - -.PHONY: pkg-% -pkg-cross-%: pkg-%-releases - $(MAKE) $(foreach release,$(PKG_RELEASES),build-cross-$(release)) - -.PHONY: pkg-cross-static -pkg-cross-static: - $(MAKE) build-cross-static - -.PHONY: build-% -build-%: pkg-info-% - $(call run_bake,$*,$(DESTDIR),$(BAKE_DEFINITIONS),pkg) - -.PHONY: build-cross-% -build-cross-%: pkg-info-% - $(eval $@_TMP_OUT := $(shell mktemp -d -t docker-packaging.XXXXXXXXXX)) - $(call run_bake,$*,$($@_TMP_OUT),$(BAKE_DEFINITIONS),pkg-cross) - mkdir -p $(DESTDIR) - find $($@_TMP_OUT) -mindepth 2 -maxdepth 2 -type d -exec cp -rf {} $(DESTDIR)/ ';' - find $(DESTDIR) -type d -empty -delete - rm -rf "$($@_TMP_OUT)" +include ../../common/packages.mk +include ../../common/build.mk diff --git a/pkg/buildx/docker-bake.hcl b/pkg/buildx/docker-bake.hcl index c7807d0e..223265b3 100644 --- a/pkg/buildx/docker-bake.hcl +++ b/pkg/buildx/docker-bake.hcl @@ -83,6 +83,7 @@ group "default" { target "_common" { inherits = ["_pkg-${PKG_RELEASE}"] args = { + BUILDKIT_MULTI_PLATFORM = 1 BUILDX_REPO = BUILDX_REPO BUILDX_VERSION = BUILDX_VERSION PKG_NAME = PKG_NAME @@ -127,7 +128,7 @@ group "pkg-cross" { # $ docker buildx bake release --push --set *.tags=docker/packaging:build-v0.9.1 target "release" { inherits = ["meta-helper", "_platforms"] - dockerfile = "../../release.Dockerfile" + dockerfile = "../../common/release.Dockerfile" target = "release" contexts = { bin-folder = "./bin" diff --git a/pkg/compose/Makefile b/pkg/compose/Makefile index 51f06119..a24453d2 100644 --- a/pkg/compose/Makefile +++ b/pkg/compose/Makefile @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -include ../../vars.mk +include ../../common/vars.mk DESTDIR ?= $(BASEDIR)/bin -BAKE_DEFINITIONS ?= -f docker-bake.hcl -f ../../packages.hcl +BAKE_DEFINITIONS ?= -f docker-bake.hcl -f ../../common/packages.hcl PKG_LIST ?= apk deb rpm static DEFAULT_RULE ?= pkg-cross @@ -31,41 +31,5 @@ all-%: $(DEFAULT_RULE)-% version: @echo $(COMPOSE_VERSION) -include ../../packages.mk - -.PHONY: pkg -pkg: - $(MAKE) $(foreach pkg,$(PKG_LIST),pkg-$(pkg)) - -.PHONY: pkg-% -pkg-%: pkg-%-releases - $(MAKE) $(foreach release,$(PKG_RELEASES),build-$(release)) - -.PHONY: pkg-static -pkg-static: - $(MAKE) build-static - -.PHONY: pkg -pkg-cross: - $(MAKE) $(foreach pkg,$(PKG_LIST),pkg-cross-$(pkg)) - -.PHONY: pkg-% -pkg-cross-%: pkg-%-releases - $(MAKE) $(foreach release,$(PKG_RELEASES),build-cross-$(release)) - -.PHONY: pkg-cross-static -pkg-cross-static: - $(MAKE) build-cross-static - -.PHONY: build-% -build-%: pkg-info-% - $(call run_bake,$*,$(DESTDIR),$(BAKE_DEFINITIONS),pkg) - -.PHONY: build-cross-% -build-cross-%: pkg-info-% - $(eval $@_TMP_OUT := $(shell mktemp -d -t docker-packaging.XXXXXXXXXX)) - $(call run_bake,$*,$($@_TMP_OUT),$(BAKE_DEFINITIONS),pkg-cross) - mkdir -p $(DESTDIR) - find $($@_TMP_OUT) -mindepth 2 -maxdepth 2 -type d -exec cp -rf {} $(DESTDIR)/ ';' - find $(DESTDIR) -type d -empty -delete - rm -rf "$($@_TMP_OUT)" +include ../../common/packages.mk +include ../../common/build.mk diff --git a/pkg/compose/docker-bake.hcl b/pkg/compose/docker-bake.hcl index 98ce4053..52e01766 100644 --- a/pkg/compose/docker-bake.hcl +++ b/pkg/compose/docker-bake.hcl @@ -83,6 +83,7 @@ group "default" { target "_common" { inherits = ["_pkg-${PKG_RELEASE}"] args = { + BUILDKIT_MULTI_PLATFORM = 1 COMPOSE_REPO = COMPOSE_REPO COMPOSE_VERSION = COMPOSE_VERSION PKG_NAME = PKG_NAME @@ -127,7 +128,7 @@ group "pkg-cross" { # $ docker buildx bake release --push --set *.tags=docker/packaging:compose-v2.10.2 target "release" { inherits = ["meta-helper", "_platforms"] - dockerfile = "../../release.Dockerfile" + dockerfile = "../../common/release.Dockerfile" target = "release" contexts = { bin-folder = "./bin" diff --git a/pkg/credential-helpers/Makefile b/pkg/credential-helpers/Makefile index 39abd96b..085a1649 100644 --- a/pkg/credential-helpers/Makefile +++ b/pkg/credential-helpers/Makefile @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -include ../../vars.mk +include ../../common/vars.mk DESTDIR ?= $(BASEDIR)/bin -BAKE_DEFINITIONS ?= -f docker-bake.hcl -f ../../packages.hcl +BAKE_DEFINITIONS ?= -f docker-bake.hcl -f ../../common/packages.hcl PKG_LIST ?= deb rpm static DEFAULT_RULE ?= pkg @@ -31,41 +31,5 @@ all-%: $(DEFAULT_RULE)-% version: @echo $(CREDENTIAL_HELPERS_VERSION) -include ../../packages.mk - -.PHONY: pkg -pkg: - $(MAKE) $(foreach pkg,$(PKG_LIST),pkg-$(pkg)) - -.PHONY: pkg-% -pkg-%: pkg-%-releases - $(MAKE) $(foreach release,$(PKG_RELEASES),build-$(release)) - -.PHONY: pkg-static -pkg-static: - $(MAKE) build-static - -.PHONY: pkg-cross -pkg-cross: - $(MAKE) $(foreach pkg,$(PKG_LIST),pkg-cross-$(pkg)) - -.PHONY: pkg-% -pkg-cross-%: pkg-%-releases - $(call run_bake,$*,$(DESTDIR),$(BAKE_DEFINITIONS),pkg) - -.PHONY: pkg-cross-static -pkg-cross-static: - $(MAKE) build-cross-static - -.PHONY: build-% -build-%: pkg-info-% - PKG_RELEASE=$* DESTDIR=$(DESTDIR) docker buildx bake $(BAKE_DEFINITIONS) pkg - -.PHONY: build-cross-% -build-cross-%: pkg-info-% - $(eval $@_TMP_OUT := $(shell mktemp -d -t docker-packaging.XXXXXXXXXX)) - $(call run_bake,$*,$($@_TMP_OUT),$(BAKE_DEFINITIONS),pkg-cross) - mkdir -p $(DESTDIR) - find $($@_TMP_OUT) -mindepth 2 -maxdepth 2 -type d -exec cp -rf {} $(DESTDIR)/ ';' - find $(DESTDIR) -type d -empty -delete - rm -rf "$($@_TMP_OUT)" +include ../../common/packages.mk +include ../../common/build.mk diff --git a/pkg/credential-helpers/docker-bake.hcl b/pkg/credential-helpers/docker-bake.hcl index faee2ac7..d5de7e7e 100644 --- a/pkg/credential-helpers/docker-bake.hcl +++ b/pkg/credential-helpers/docker-bake.hcl @@ -102,6 +102,7 @@ group "default" { target "_common" { inherits = ["_pkg-${PKG_RELEASE}"] args = { + BUILDKIT_MULTI_PLATFORM = 1 CREDENTIAL_HELPERS_REPO = CREDENTIAL_HELPERS_REPO CREDENTIAL_HELPERS_VERSION = CREDENTIAL_HELPERS_VERSION GO_IMAGE = GO_IMAGE @@ -155,7 +156,7 @@ target "meta-helper" { # $ docker buildx bake release --push --set *.tags=docker/packaging:credential-helpers-v0.7.0-beta.1 target "release" { inherits = ["meta-helper", "_platforms"] - dockerfile = "../../release.Dockerfile" + dockerfile = "../../common/release.Dockerfile" target = "release" contexts = { bin-folder = "./bin" diff --git a/pkg/docker-cli/Makefile b/pkg/docker-cli/Makefile index efc9d972..46b58b94 100644 --- a/pkg/docker-cli/Makefile +++ b/pkg/docker-cli/Makefile @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -include ../../vars.mk +include ../../common/vars.mk DESTDIR ?= $(BASEDIR)/bin -BAKE_DEFINITIONS ?= -f docker-bake.hcl -f ../../packages.hcl +BAKE_DEFINITIONS ?= -f docker-bake.hcl -f ../../common/packages.hcl PKG_LIST ?= deb rpm static DEFAULT_RULE ?= pkg @@ -34,41 +34,5 @@ all-%: $(DEFAULT_RULE)-% version: @echo $(DOCKER_CLI_VERSION) -include ../../packages.mk - -.PHONY: pkg -pkg: - $(MAKE) $(foreach pkg,$(PKG_LIST),pkg-$(pkg)) - -.PHONY: pkg-% -pkg-%: pkg-%-releases - $(MAKE) $(foreach release,$(PKG_RELEASES),build-$(release)) - -.PHONY: pkg-static -pkg-static: - $(MAKE) build-static - -.PHONY: pkg-cross -pkg-cross: - $(MAKE) $(foreach pkg,$(PKG_LIST),pkg-cross-$(pkg)) - -.PHONY: pkg-% -pkg-cross-%: pkg-%-releases - $(MAKE) $(foreach release,$(PKG_RELEASES),build-cross-$(release)) - -.PHONY: pkg-cross-static -pkg-cross-static: - $(MAKE) build-cross-static - -.PHONY: build-% -build-%: pkg-info-% - $(call run_bake,$*,$(DESTDIR),$(BAKE_DEFINITIONS),pkg) - -.PHONY: build-cross-% -build-cross-%: pkg-info-% - $(eval $@_TMP_OUT := $(shell mktemp -d -t docker-packaging.XXXXXXXXXX)) - $(call run_bake,$*,$($@_TMP_OUT),$(BAKE_DEFINITIONS),pkg-cross) - mkdir -p $(DESTDIR) - find $($@_TMP_OUT) -mindepth 2 -maxdepth 2 -type d -exec cp -rf {} $(DESTDIR)/ ';' - find $(DESTDIR) -type d -empty -delete - rm -rf "$($@_TMP_OUT)" +include ../../common/packages.mk +include ../../common/build.mk diff --git a/pkg/docker-cli/docker-bake.hcl b/pkg/docker-cli/docker-bake.hcl index b8d1f97b..e95344ae 100644 --- a/pkg/docker-cli/docker-bake.hcl +++ b/pkg/docker-cli/docker-bake.hcl @@ -102,6 +102,7 @@ group "default" { target "_common" { inherits = ["_pkg-${PKG_RELEASE}"] args = { + BUILDKIT_MULTI_PLATFORM = 1 DOCKER_CLI_REPO = DOCKER_CLI_REPO DOCKER_CLI_VERSION = DOCKER_CLI_VERSION GO_IMAGE = GO_IMAGE @@ -155,7 +156,7 @@ target "meta-helper" { # $ docker buildx bake release --push --set *.tags=docker/packaging:docker-cli-v20.10.17 target "release" { inherits = ["meta-helper", "_platforms"] - dockerfile = "../../release.Dockerfile" + dockerfile = "../../common/release.Dockerfile" target = "release" contexts = { bin-folder = "./bin"