-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMakefile
More file actions
74 lines (53 loc) · 1.65 KB
/
Makefile
File metadata and controls
74 lines (53 loc) · 1.65 KB
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
.PHONY : all changed
SHELL := /bin/bash
ALL_IMAGES =
ALL_IMAGES += base
ALL_IMAGES += cpp python
ALL_IMAGES += java dotnet lisp ocaml dlang swift ruby javascript
ALL_IMAGES += ai gfx
REPO = mucsci
TAGS ?=
TAGS += $(shell date "+%Y-%m-%d")
TAGS += latest
ACTION ?= analyze
ifeq ($(ACTION), full)
CHANGED = $(ALL_IMAGES)
else
CHANGED ?= $(shell comm -1 <(echo $(ALL_IMAGES) | tr ' ' '\n' | sort) <(git diff --name-only HEAD HEAD~1 | grep Dockerfile | xargs -I{} dirname {} | xargs -I{} basename {} | tr ' ' '\n' | sort))
endif
changed : $(CHANGED)
all : $(ALL_IMAGES)
ifeq ($(ACTION), full)
arch :
docker pull archlinux/base
else
arch :
echo "Using predownloaded archlinux/base"
endif
ifeq ($(ACTION), full)
ai : python
gfx : cpp
java lisp dotnet python cpp ocaml dlang swift ruby javascript : base
base : arch
% :
$(eval NEW_ACTION=$(shell echo $(CHANGED) | gsed -r 's/\b/|/g' | grep -q "|$@|" && echo "build" || echo "pull"))
make MAKEFLAGS=$(MAKEFLAGS) ACTION=$(NEW_ACTION) $@
endif
ifeq ($(ACTION), analyze)
ai : python
gfx : cpp
java lisp dotnet python cpp ocaml dlang swift ruby javascript : base
base : arch
% :
$(eval NEW_ACTION=$(shell echo $(CHANGED) | gsed -r 's/\b/|/g' | grep -q "|$@|" && echo "build" || echo "pull"))
make MAKEFLAGS=$(MAKEFLAGS) ACTION=$(NEW_ACTION) $@
else ifeq ($(ACTION), build)
% :
DOCKER_BUILDKIT=1 docker build -t temporary_image -f ./docker/$@/Dockerfile ./docker/$@
$(foreach TAG, $(TAGS), docker tag temporary_image $(REPO)/$@:$(TAG) ; )
docker rmi temporary_image
$(foreach TAG, $(TAGS), docker push $(REPO)/$@:$(TAG) ; )
else ifeq ($(ACTION), pull)
% :
$(foreach REPO, $(REPOS), docker pull $(REPO)/$@:latest ; )
endif