-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
130 lines (109 loc) · 4.13 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# check for build/shipkit and clone if not there, this should come first
SHIPKIT_DIR = build/shipkit
$(shell [ ! -e $(SHIPKIT_DIR) ] && git clone -b v2.0.12 https://github.com/yakworks/shipkit.git $(SHIPKIT_DIR) >/dev/null 2>&1)
# Shipkit.make first, which does all the lifting to create makefile.env for the BUILD_VARS
include $(SHIPKIT_DIR)/Shipkit.make
include $(SHIPKIT_DIR)/makefiles/circle.make
include $(SHIPKIT_DIR)/makefiles/vault.make
INCLUDE_DIRS = builder bullseye
DOCKERFILES = $(shell find $(INCLUDE_DIRS) -type f -name 'Dockerfile')
NAMES = $(subst /Dockerfile,,$(DOCKERFILES))
REGISTRY ?= yakworks
REGISTRY_BUILD ?= build/$(REGISTRY)
IMAGES = $(addprefix $(REGISTRY_BUILD)/,$(NAMES))
IMAGES_BUILD = $(addsuffix .build,$(IMAGES))
IMAGES_PUSH = $(addsuffix .push,$(IMAGES))
DEPENDS = .depends.mk
PLATFORMS ?= linux/arm64,linux/amd64
# bullseye_deps = $(shell awk '/^$(REGISTRY)\/bullseye/{ sub(/:$$/, "", $$1); print $$1 }' .depends.mk )
# bullseye_deps += bullseye\:jre11 bullseye\:postgres14-jdk11
print-%:
@echo '$*=$($*)'
clean:
rm -f $(DEPENDS)
rm -rf build
pull-base:
docker pull debian:bullseye-slim
docker pull alpine:3.16
grepdeps: $(DOCKERFILES)
$(logr) $@
grep '^FROM \$$REGISTRY/' $(DOCKERFILES)
.PHONY: $(DEPENDS)
# depends fires on every make call to build the .depends.mk, so needs to happen first before the others
$(DEPENDS): $(DOCKERFILES)
grep '^FROM \$$REGISTRY/' $(DOCKERFILES) | \
awk -F '/Dockerfile:FROM \\$$REGISTRY/' '{ print $$1 " " $$2 }' | \
sed 's@[:]@/@g' | \
awk '{ print "$(REGISTRY_BUILD)/" $$1 ".build: " "$(REGISTRY_BUILD)/" $$2 ".build"}' > $@
sinclude $(DEPENDS)
export DCMD ?= build
ifeq (pull,$(filter pull,$(MAKECMDGOALS)))
DCMD = pull
else ifeq (run,$(filter run,$(MAKECMDGOALS)))
DCMD = run
else ifeq (run-sh,$(filter run-sh,$(MAKECMDGOALS)))
DCMD = run-sh
else ifeq (push,$(filter push,$(MAKECMDGOALS)))
DCMD = push
endif
dummy_targets = run run-sh check pull push buildx checkrebuild
.PHONY: $(dummy_targets)
define SET_TAG_NAME =
TAG_NAME=$$(echo "$*" | sed -r 's|(.*)/|\1:|')
TAG_NAME="$(REGISTRY)/$$TAG_NAME"
$(logr) "TAG_NAME: $$TAG_NAME"
endef
# shortcut names so can call `make bullseye/base` for example
$(NAMES): %: $(REGISTRY_BUILD)/%.build
$(SET_TAG_NAME)
if [[ $(DCMD) = push ]]; then
$(MAKE) $(REGISTRY_BUILD)/$*.push
elif [[ $(DCMD) = run ]]; then
docker run --rm -it $$TAG_NAME
fi
# sets up the yakworks/image/tag.build targets
$(IMAGES_BUILD): $(REGISTRY_BUILD)/%.build: %/Dockerfile
$(SET_TAG_NAME)
docker build --build-arg REGISTRY=$(REGISTRY) -t $$TAG_NAME $*
# install used instead of touch as it creates the parent dirs see https://stackoverflow.com/a/24675139/6500859
ginstall -Dv /dev/null $@
$(logr.done) "$*"
# sets up the yakworks/image:tag.push targets
$(IMAGES_PUSH): $(REGISTRY_BUILD)/%.push:
$(SET_TAG_NAME)
# if the DOCKER_DEFAULT_PLATFORM is set then let it use that and dont use buildx
if [[ $${DOCKER_DEFAULT_PLATFORM:-} ]]; then
# assumes its built already
docker push "$$TAG_NAME"
else
docker buildx build --build-arg BUILDKIT_INLINE_CACHE=1 --build-arg REGISTRY=$(REGISTRY) \
--push --platform $(PLATFORMS) -t $$TAG_NAME $*
fi
ginstall -Dv /dev/null $@
$(logr.done) "$*"
## build all the debian bullseye targets
bullseye.build-all:
for t in base core helm jdk11 jre11 postgres14-jdk11 docker docker-jdk11; do
$(MAKE) bullseye/$$t
done
## builds and pushes all the debian bullseye targets
bullseye.push-all:
for t in base core helm jdk11 jre11 postgres14-jdk11 docker docker-jdk11 dev; do
$(MAKE) bullseye/$$t push
done
## the builder images are arm & amd for base and core, but java images only amd platform
builder.build-all:
# core will build base as well
$(MAKE) builder/core $(DMCD)
for t in jdk11 jre11; do
DOCKER_DEFAULT_PLATFORM=linux/amd64 $(MAKE) builder/$$t $(DMCD)
done
## no arm on alpine java images. Set DOCKER_DEFAULT_PLATFORM
builder.java11:
DOCKER_DEFAULT_PLATFORM=linux/amd64 $(MAKE) builder/java11 $(DMCD)
## playwright is special
builder.playwright:
DOCKER_DEFAULT_PLATFORM=linux/amd64 $(MAKE) builder/playwright $(DMCD)
## repo-job
builder.repo-job:
DOCKER_DEFAULT_PLATFORM=linux/amd64 $(MAKE) builder/repo-job $(DMCD)