-
Notifications
You must be signed in to change notification settings - Fork 1
/
defs-miking.mk
105 lines (86 loc) · 3.37 KB
/
defs-miking.mk
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
.PHONY: build push run rmi rmi-latest-version rmi-latest rmi-all
# Imports the following variables:
# - LATEST_VERSION
# - LATEST_ALIAS
# - MIKING_GIT_REMOTE
# - MIKING_GIT_COMMIT
# - MIKING_IMAGENAME
# - MIKING_IMAGEVERSION
# - BASELINE_IMAGENAME
# - BASELINE_IMAGEVERSION
# - BUILD_LOGDIR
# - VALIDATE_ARCH_SCRIPT
# - VALIDATE_IMAGE_SCRIPT
include ../defs-common.mk
# NOTE: The ../ is because this file is imported from a child directory
IMAGENAME=$(MIKING_IMAGENAME)
VERSION=$(MIKING_IMAGEVERSION)
# The subfolder's makefile shall set the following variables:
# - DOCKERFILE
build:
@echo -e "\033[1;31mSpecify the platform you are building for with \033[1;37mmake build/<arch>\033[0m"
build/%:
$(eval UID := $(shell if [[ -z "$$SUDO_UID" ]]; then id -u; else echo "$$SUDO_UID"; fi))
$(eval GID := $(shell if [[ -z "$$SUDO_GID" ]]; then id -g; else echo "$$SUDO_GID"; fi))
$(eval LOGFILE := $(BUILD_LOGDIR)/$(shell date "+miking_%Y-%m-%d_%H.%M.%S.log"))
$(VALIDATE_ARCH_SCRIPT) $*
mkdir -p $(BUILD_LOGDIR)
touch $(LOGFILE)
chown $(UID):$(GID) $(BUILD_LOGDIR) $(LOGFILE)
docker build --tag $(IMAGENAME):$(VERSION)-$* \
--force-rm \
--progress=plain \
--build-arg "TARGETPLATFORM=linux/$*" \
--build-arg "BASELINE_IMAGE=$(BASELINE_IMAGENAME):$(BASELINE_IMAGEVERSION)-$*" \
--build-arg "MIKING_GIT_REMOTE=$(MIKING_GIT_REMOTE)" \
--build-arg "MIKING_GIT_COMMIT=$(MIKING_GIT_COMMIT)" \
--file $(DOCKERFILE) \
.. 2>&1 | tee -a $(LOGFILE)
$(VALIDATE_IMAGE_SCRIPT) --arch=$* $(IMAGENAME):$(VERSION)-$*
test-gpu/%:
docker run --rm -it --gpus all \
--name miking-test-gpu \
--hostname miking-test-gpu \
$(IMAGENAME):$(VERSION)-$* \
make -C /src/miking install test-accelerate
push:
@echo -e "\033[1;31mSpecify the platform you are pushing for with \033[1;37mmake push/<arch>\033[0m"
push/%:
$(VALIDATE_ARCH_SCRIPT) $*
docker push $(IMAGENAME):$(VERSION)-$*
push-manifests:
$(eval AMENDMENTS := $(shell \
if [[ "$(VERSION_SUFFIX)" == "alpine" ]]; then \
echo "$(foreach a,amd64 arm64,--amend $(IMAGENAME):$(VERSION)-$a)"; \
else \
echo "--amend $(IMAGENAME):$(VERSION)-amd64"; \
fi \
))
echo $(AMENDMENTS)
# Using the || true since there is no -f option to `manifest rm`
docker manifest rm $(IMAGENAME):$(VERSION) || true
docker manifest rm $(IMAGENAME):$(LATEST_VERSION) || true
docker manifest create $(IMAGENAME):$(VERSION) $(AMENDMENTS)
docker manifest create $(IMAGENAME):$(LATEST_VERSION) $(AMENDMENTS)
docker manifest push --purge $(IMAGENAME):$(VERSION)
docker manifest push --purge $(IMAGENAME):$(LATEST_VERSION)
if [[ "$(LATEST_VERSION)" == "$(LATEST_ALIAS)" ]]; then \
docker manifest rm $(IMAGENAME):latest || true; \
docker manifest create $(IMAGENAME):latest $(AMENDMENTS); \
docker manifest push --purge $(IMAGENAME):latest; \
fi
run:
@echo -e "\033[1;31mSpecify the platform you are running on with \033[1;37mmake run/<arch>\033[0m"
run/%:
docker run --rm -it \
--name miking \
--hostname miking \
$(IMAGENAME):$(VERSION)-$* \
bash
rmi:
docker rmi $(IMAGENAME):$(VERSION)-$* $(IMAGENAME):$(VERSION)
rmi-latest-version:
docker rmi $(IMAGENAME):$(LATEST_VERSION)
rmi-latest:
docker rmi $(IMAGENAME):latest
rmi-all: rmi rmi-latest-version rmi-latest