-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMakefile
More file actions
116 lines (88 loc) · 3.35 KB
/
Copy pathMakefile
File metadata and controls
116 lines (88 loc) · 3.35 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
114
115
116
# All these variables are defaults, can be overridden by setting them on
# the command line or exporting them in the shell environment
BRANCH=master
MASTERDIR=/var/cfengine/masterfiles
LOCALDIR=/var/cfengine/git
PROJECTDIR=$(LOCALDIR)/$(PROJECT)
COMMONDIR=/dev/null
SERVER=_UNDEFINED_
RSYNC_USER=admin
RSYNC_PREPARE_OPTS=-aC --exclude cf_promises_validated --exclude .gitignore --exclude .vscode --include core
RSYNC_REMOTE_OPTS=--rsync-path='sudo rsync'
RSYNC_COMMON_OPTS=--delete --no-owner --no-group --no-perms --no-times --checksum
RSYNC_OPTS=$(RSYNC_PREPARE_OPTS) -vi $(RSYNC_COMMON_OPTS)
DIFF_OPTS=-r -w -N
TMP_BASE=/var/tmp
TMP_TEMPLATE=cf-deploy-tmp-XXXXXXXX
TMP_DIR:=$(shell /bin/mktemp -d --tmpdir=$(TMP_BASE) $(TMP_TEMPLATE))
DIFF_DIR:=$(shell /bin/mktemp -d --tmpdir=$(TMP_BASE) $(TMP_TEMPLATE))
usage:
@echo "Usage:"
@echo " make deploy PROJECT=projectname SERVER=servername"
@echo " make deploy_local PROJECT=projectname"
@echo ""
@echo " use BRANCH, MASTERDIR, LOCALDIR, PROJECT, RSYNC_USER to customise"
@echo ""
@echo " To preview a change, replace deploy with preview above"
@echo " (make preview ... / make preview_local ...)"
@echo ""
@echo " To get a diff of repository code against deployed code"
@echo " make diff/make diff_local (same options as above)"
@echo ""
@echo " To cleanup our leftovers in $(TMP_BASE)"
@echo " make distclean"
@echo ""
@echo " For a verbose explanation, use make display (same parms as deploy)"
@echo ""
# MAIN TARGETS #########################################################
deploy_local: prepare sync_local cleanup
deploy deploy_multi: prepare sync_multi cleanup
preview_local: prepare syncview_local cleanup
preview preview_multi: prepare syncview_multi cleanup
diff: prepare prepare_diff run_diff cleanup
diff_local: prepare run_diff_local cleanup
# HELPER TARGETS #######################################################
prepare: /bin/mktemp $(TMP_DIR) git_update
rsync $(RSYNC_PREPARE_OPTS) $(COMMONDIR)/ $(TMP_DIR)/
rsync $(RSYNC_PREPARE_OPTS) $(PROJECTDIR)/ $(TMP_DIR)/
cd $(PROJECTDIR) && echo "{ \"releaseId\": \"`git rev-parse HEAD`\" }" > $(TMP_DIR)/cf_promises_release_id
prepare_diff: $(DIFF_DIR)
rsync -z $(RSYNC_OPTS) $(RSYNC_USER)@$(SERVER):$(MASTERDIR)/ $(DIFF_DIR)/
run_diff:
-diff $(DIFF_OPTS) $(DIFF_DIR)/ $(TMP_DIR)/
run_diff_local:
-diff $(DIFF_OPTS) $(MASTERDIR) $(TMP_DIR)
cleanup: $(TMP_DIR)
rm -rf $(TMP_DIR)
rm -rf $(DIFF_DIR)
distclean:
-rm -rf $(TMP_BASE)/cf-deploy-tmp-*
git_update: $(PROJECTDIR)
-cd $(PROJECTDIR) && git fetch
cd $(PROJECTDIR) && git checkout $(BRANCH)
-cd $(PROJECTDIR) && git pull
sync_multi:
for SERVER in $(HUB_LIST) ; \
do \
echo "on $$SERVER" ; \
rsync -z $(RSYNC_OPTS) $(RSYNC_REMOTE_OPTS) $(TMP_DIR)/ $(RSYNC_USER)@$$SERVER:$(MASTERDIR)/ ; \
done
sync_local:
rsync $(RSYNC_OPTS) $(TMP_DIR)/ $(MASTERDIR)/
syncview_multi:
for SERVER in $(HUB_LIST) ; \
do \
echo "on $$SERVER" ; \
rsync -n $(RSYNC_REMOTE_OPTS) $(RSYNC_OPTS) $(TMP_DIR)/ $(RSYNC_USER)@$$SERVER:$(MASTERDIR)/ ; \
echo "" ; \
done
syncview_local:
rsync -n $(RSYNC_OPTS) $(TMP_DIR)/ $(MASTERDIR)/
not_supported:
@echo "The action you requested is not supported"
exit 1
/bin/mktemp:
@echo "Your system doesn't have mktemp"
@echo "Using this procedure without mktemp could seriously damage"
@echo "your system, bailing out"
exit 16