diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2020-02-29 22:03:12 +0300 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2020-03-01 01:46:51 +0300 |
commit | a013de68e095651fdc66692621b25ecde7a1a767 (patch) | |
tree | 1dc4d16ba2af84fc5c5e8ad717b01fa56a9c731a /Makefile | |
parent | README: update (diff) | |
download | cgitize-a013de68e095651fdc66692621b25ecde7a1a767.tar.gz cgitize-a013de68e095651fdc66692621b25ecde7a1a767.zip |
build & publish multi-arch Docker images
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5e1d538 --- /dev/null +++ b/Makefile @@ -0,0 +1,87 @@ +# Various one-liners which I'm too lazy to remember. +# Basically a collection of really small shell scripts. + +MAKEFLAGS += --warn-undefined-variables +SHELL := bash +.SHELLFLAGS := -eu -o pipefail -c +.DEFAULT_GOAL := all +.SUFFIXES: + +PROJECT := cgit-repos +# Enable buildx support: +export DOCKER_CLI_EXPERIMENTAL := enabled +# Target platforms (used by buildx): +platforms := linux/amd64,linux/armhf +# Docker Hub credentials: +DOCKER_USERNAME := egortensin + +.PHONY: all +all: build + +.PHONY: login +login: +ifndef DOCKER_PASSWORD + $(error Please define DOCKER_PASSWORD) +endif + @echo "$(DOCKER_PASSWORD)" | docker login --username "$(DOCKER_USERNAME)" --password-stdin + +.PHONY: build +# Build natively by default. +build: docker/build + +.PHONY: clean +clean: + docker system prune --all --force --volumes + +.PHONY: push +# Push multi-arch images by default. +push: buildx/push + +.PHONY: check-build +check-build: +ifndef FORCE + $(warning Going to build natively; consider `docker buildx build` instead) +endif + +.PHONY: check-push +check-push: +ifndef FORCE + $(error Please use `docker buildx build --push` instead) +endif + +.PHONY: docker/build +# `docker build` has week support for multiarch repos (you need to use multiple +# Dockerfile's, create a manifest manually, etc.), so it's only here for +# testing purposes, and native builds. +docker/build: check-build + docker build -t "$(DOCKER_USERNAME)/$(PROJECT)" . + +.PHONY: docker/push +# `docker push` would replace the multiarch repo with a single image by default +# (you'd have to create a manifest and push it instead), so it's only here for +# testing purposes. +docker/push: check-push docker/build + docker push "$(DOCKER_USERNAME)/$(PROJECT)" + +# The simple way to build multiarch repos is `docker buildx`. + +.PHONY: fix-binfmt +# Re-register binfmt_misc formats with the F flag (required e.g. on Bionic): +fix-binfmt: + docker run --rm --privileged docker/binfmt:66f9012c56a8316f9244ffd7622d7c21c1f6f28d + +.PHONY: buildx/create +buildx/create: fix-binfmt + docker buildx create --use --name "$(PROJECT)_builder" + +.PHONY: buildx/rm +buildx/rm: + docker buildx rm "$(PROJECT)_builder" + +.PHONY: buildx/build +buildx/build: + docker buildx build -t "$(DOCKER_USERNAME)/$(PROJECT)" --platform "$(platforms)" --progress plain . + +.PHONY: buildx/push +buildx/push: + docker buildx build -t "$(DOCKER_USERNAME)/$(PROJECT)" --platform "$(platforms)" --progress plain --push . |