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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
# Copyright (C) 2012 Canonical Ltd.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
include buildout.mk
MANAGE=$(PY) django_project/manage.py
TEST_COMMAND=$(MANAGE) test revtracker
YUIRELEASES := http://yui.zenfs.com/releases/yui3/
YUI := yui_3.15.0.zip
JS_BUILD_PATH = build/revtracker/js/
JS_META_SCRIPT = $(PY) scripts/js/generate_meta.py
REVTRACKER_JS = revtracker/static/
DEV_JS_FILES := $(wildcard $(REVTRACKER_JS)/*.js)
BUILD_JS_FILES := $(patsubst $(REVTRACKER_JS)/%.js,$(JS_BUILD_PATH)/i/%.js,$(DEV_JS_FILES))
GUNICORN := bin/gunicorn
TMP_DIR = tmp
DB_DIR = $(TMP_DIR)/db
export PGHOST=$(DB_DIR)
export PGDATA=$(DB_DIR)/data
PG_BIN_DIR = /usr/lib/postgresql/9.1/bin
SUPERVISOR_CONFIG = $(PWD)/dev_config/supervisor.conf
SUPERVISORD = bin/supervisord
SUPERVISORCTL = bin/supervisorctl -c $(SUPERVISOR_CONFIG)
SUPERVISORD_SOCK = tmp/supervisord.sock
js: js_dirs jsmin $(JS_BUILD_PATH)/i/meta.js
js_dirs: $(JS_BUILD_PATH)/i $(JS_BUILD_PATH)/y
$(JS_BUILD_PATH)/i:
mkdir -p $(JS_BUILD_PATH)/i
$(JS_BUILD_PATH)/y: build/yui
mkdir -p $(JS_BUILD_PATH)/y
cp -r build/yui/build/* $(JS_BUILD_PATH)/y
build/yui:
mkdir -p build/yui
wget $(YUIRELEASES)$(YUI) -O /tmp/$(YUI)
unzip /tmp/$(YUI) -d build
jsmin: $(BUILD_JS_FILES)
rm $(JS_BUILD_PATH)/i/meta.js || true
$(PY) scripts/js/jsmin_all.py $(JS_BUILD_PATH)/i
$(BUILD_JS_FILES): $(DEV_JS_FILES)
cp $(REVTRACKER_JS)/$(@F) $@
$(JS_BUILD_PATH)/i/meta.js: $(BUILD_JS_FILES)
$(JS_META_SCRIPT) -n YUI_MODULES -s $(JS_BUILD_PATH)/i/ \
-o $(JS_BUILD_PATH)/i/meta.js \
-x -min.js$
clean_js:
rm -rf $(JS_BUILD_PATH)/* || true
rm -rf jsdoc || true
run: run_db run_combo run_app run_celeryd run_gorun
start: run
run_combo: $(SUPERVISORD_SOCK)
$(SUPERVISORCTL) start combo
run_app: $(SUPERVISORD_SOCK)
$(SUPERVISORCTL) start appserver
run_celeryd: $(SUPERVISORD_SOCK)
$(SUPERVISORCTL) start celeryd
run_gorun: $(SUPERVISORD_SOCK)
$(SUPERVISORCTL) start gorun
run_db:
scripts/start-database.sh
$(MANAGE) syncdb --noinput
$(MANAGE) migrate --noinput
$(SUPERVISORD_SOCK):
$(SUPERVISORD) -c $(SUPERVISOR_CONFIG)
stop: stop_combo stop_app stop_db stop_celeryd stop_gorun stop_supervisord
stop_combo: $(SUPERVISORD_SOCK)
$(SUPERVISORCTL) stop combo
stop_app: $(SUPERVISORD_SOCK)
$(SUPERVISORCTL) stop appserver
stop_celeryd: $(SUPERVISORD_SOCK)
$(SUPERVISORCTL) stop celeryd
stop_gorun: $(SUPERVISORD_SOCK)
$(SUPERVISORCTL) stop gorun
stop_db:
$(PG_BIN_DIR)/pg_ctl status > /dev/null && $(PG_BIN_DIR)/pg_ctl stop -t 60 -w -m fast
stop_supervisord:
$(SUPERVISORCTL) shutdown
restart_app: stop_app run_app
reload_supervisord:
$(SUPERVISORCTL) reread
.PHONY: js js_dirs jsmin clean_js run_combo run run_combo run_app run_db run_gorun stop stop_combo stop_app stop_db stop_gorun run_supervisord stop_supervisord reload_supervisord
prod: $(PY) js $(JS_BUILD_PATH)/combo $(JS_BUILD_PATH)/revno js_revno_link
$(JS_BUILD_PATH)/combo:
# Because we have to strip out the prefix that
# convoy sees because it's not at the root
ln -sf . $(JS_BUILD_PATH)/combo
$(JS_BUILD_PATH)/revno:
bzr log $(REVTRACKER_JS) --limit 1 | head -n2 | tail -n1 | sed 's/[^0-9]*//' > $(JS_BUILD_PATH)/revno
js_revno_link: $(JS_BUILD_PATH)/revno
ln -sf . $(JS_BUILD_PATH)/rev-$$(cat $(JS_BUILD_PATH)/revno)
REVNO = $(shell bzr revno)
DIRNAME = isitdeployable-$(REVNO)
TARBALL = $(DIRNAME).tar.bz2
BASEDIR = /srv/isitdeployable.net/production/
CODE_DIR = $(BASEDIR)/$(DIRNAME)
HOST ?= isitdeployable.net
push: prod
tar --exclude 'download-cache/*' --exclude 'build/yui/*' -cjf $(TARBALL) * .bzr .bzrignore
scp $(TARBALL) $(HOST):
ssh $(HOST) 'sudo mkdir -p $(CODE_DIR) && sudo chown ubuntu $(CODE_DIR) && \
sudo apt-get install -y puppet && \
tar xf /home/ubuntu/$(TARBALL) -C $(CODE_DIR) && \
(rm $(CODE_DIR)/download-cache && mkdir -p $(CODE_DIR)/download-cache/dist) && \
(cd $(CODE_DIR) && ./bin/buildout)'
remote_prod_deploy:
ssh $(HOST) 'sudo /etc/init.d/deploy-tracker-celeryd stop && \
$(CODE_DIR)/dev_config/apply && \
sudo chown deploytracker:deploytracker -R $(CODE_DIR) && \
sudo -u deploytracker $(CODE_DIR)/bin/deploy collectstatic --noinput && \
sudo -u deploytracker $(CODE_DIR)/bin/deploy syncdb --noinput && \
sudo -u deploytracker $(CODE_DIR)/bin/deploy migrate --noinput && \
sudo /etc/init.d/deploy-tracker-celeryd start && \
(sudo stop deploy-tracker-combo || true) && \
sudo start deploy-tracker-combo && \
(sudo stop squid3 || true) && \
sudo start squid3 && \
sudo /etc/init.d/apache2 reload && \
sudo ln -snf $(CODE_DIR) $(BASEDIR)/isitdeployable-current'
for i in seq 4; do wget -O/dev/null -q http://$(HOST); done
deploy: push remote_prod_deploy
.PHONY: prod push remote_prod_deploy deploy js_revno_link
|