-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
113 lines (98 loc) · 3.15 KB
/
Makefile
File metadata and controls
113 lines (98 loc) · 3.15 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
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
# COMMANDS
################################################################################
RM := rm -f
RMRF := rm -rf
CD := cd
MKDIR := mkdir
DOCKER := docker
DOCKERIMG := docker image
DCOMPOSE := docker compose
REPLACE := sed -i
ECHO := echo
TOUCH := touch
CHMOD := chmod
AWK := awk
CAT := cat
# SOURCES
################################################################################
ENVFILE = .env
HOSTS := /etc/hosts
DCOMPOSEFILE = docker-compose.yml
# EXECUTABLES & LIBRARIES
################################################################################
NAME := .done
# DIRECTORIES
################################################################################
SRCS := ./srcs
DATABIND := /home/twagner/data
MKBINDS = $(MKDIR) -p $(DATABIND) $(DATABIND)/wordpress $(DATABIND)/db
# FLAGS
################################################################################
FLAGENV := --env-file
FLAGFILE := -f
UP := up -d
DOWN := down
REMOVEALL := --rmi all --remove-orphans -v
# DNS
################################################################################
ADDRESS := 127.0.0.1
DOMAINNAME := twagner.42.fr
HOST_UPDATED = $(shell [ -e .host_updated ] && echo 1 || echo 0 )
ifeq ($(NOHOSTUPDATE), true)
HOST_UPDATED = 1
endif
# USER & GROUP
################################################################################
UID := $(shell id -u ${USER})
GID := $(shell id -g ${USER})
# RULES
################################################################################
$(NAME):
@touch $(NAME)
.PHONY: all
all:
# Create bind folders only if they don't already exists
$(MKBINDS)
# Update /etc/hosts file to map 127.0.0.1 with dns
ifeq ($(HOST_UPDATED), 0)
sudo $(CHMOD) 646 $(HOSTS)
$(ECHO) "$(ADDRESS) $(DOMAINNAME)" >> $(HOSTS)
$(ECHO) "$(ADDRESS) adminer.$(DOMAINNAME)" >> $(HOSTS)
$(TOUCH) .host_updated
endif
# Update .env file
$(REPLACE) "s|.*USER_ID.*|USER_ID=$(UID)|g" $(SRCS)/$(ENVFILE)
$(REPLACE) "s|.*GROUP_ID.*|GROUP_ID=$(GID)|g" $(SRCS)/$(ENVFILE)
$(REPLACE) "s|.*DATABIND=.*|DATABIND=$(DATABIND)|g" $(SRCS)/$(ENVFILE)
# Build images and run containers
$(CD) $(SRCS) && $(DCOMPOSE) -f $(DCOMPOSEFILE) $(FLAGENV) $(ENVFILE) $(UP)
.PHONY: clean
clean:
# Clean all : stops containers and remove images + volumes
$(CD) $(SRCS) && $(DCOMPOSE) $(DOWN) $(REMOVEALL)
$(RM) .done
.PHONY: fclean
fclean: clean cleanbinds
# Clean all : stops containers, remove images, volumes, network
$(DOCKER) system prune --all --force --volumes
$(DOCKER) network prune --force
$(DOCKER) volume prune --force
$(DOCKER) image prune --force
.PHONY: cleanbinds
cleanbinds:
# Remove binded folders and data in them
$(RMRF) $(DATABIND)
.PHONY: cleanhosts
cleanhosts:
# Remove the additionnal line from /etc/hosts and restore rights
sudo $(CHMOD) 646 $(HOSTS)
$(AWK) '!/$(DOMAINNAME)/' $(HOSTS) > .tmp \
&& $(CAT) .tmp > $(HOSTS) \
&& $(RM) .tmp
sudo $(CHMOD) 644 $(HOSTS)
$(RM) .host_updated
.PHONY: bonus
bonus: DCOMPOSEFILE = docker-compose.bonus.yml
bonus: all
.PHONY: re
re: fclean all