This repository has been archived by the owner on Aug 26, 2022. It is now read-only.
/
update_site.py
executable file
·143 lines (124 loc) · 4.38 KB
/
update_site.py
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
#!/usr/bin/env python
"""
Usage: update_site.py [options]
Updates a server's sources, vendor libraries, packages CSS/JS
assets, migrates the database, and other nifty deployment tasks.
Options:
-h, --help show this help message and exit
-e ENVIRONMENT,
--environment=ENVIRONMENT
Type of environment. One of
(dev|stage|prod|mdn_dev|mdn_stage|mdn_prod)
Example:
update_site.py -e stage
-v, --verbose Echo actions before taking them.
"""
import os
import sys
from textwrap import dedent
from optparse import OptionParser
# Constants
PROJECT = 0
ENV_BRANCH = {
# 'env': 'git branch'
# kuma-stage is set to 'stage'
'dev': 'master',
'stage': 'master',
'mdn_dev': 'master',
# developer-stage9 is set to 'mdn_stage'
'mdn_stage': 'next',
'mdn_prod': 'next',
}
PIP_INSTALL_COMPILED = "pip install -q -r requirements/compiled.txt"
RM_SETTINGS_PYC = "rm -f settings*.pyc"
GIT_PULL = "git pull -q origin %(branch)s"
GIT_RESET_HARD = "git reset --hard HEAD"
GIT_SUBMODULE_SYNC = "git submodule sync"
GIT_SUBMODULE_UPDATE = "git submodule update --init -q"
SVN_REVERT = "svn revert -R ."
SVN_UP = "svn update"
COMPILE_PO = "./compile-mo.sh ."
EXEC = 'exec'
CHDIR = 'chdir'
def update_site(env, debug):
"""Run through commands to update this site."""
error_updating = False
here = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
project_branch = {'branch': ENV_BRANCH[env]}
commands = [
(CHDIR, here),
(EXEC, RM_SETTINGS_PYC),
(EXEC, GIT_RESET_HARD),
(EXEC, GIT_PULL % project_branch),
(EXEC, GIT_SUBMODULE_SYNC),
(EXEC, GIT_SUBMODULE_UPDATE),
]
# Update locale dir if applicable
if os.path.exists(os.path.join(here, 'locale', '.svn')):
commands += [
(CHDIR, os.path.join(here, 'locale')),
(EXEC, SVN_REVERT),
(EXEC, SVN_UP),
(EXEC, COMPILE_PO),
(CHDIR, here),
]
elif os.path.exists(os.path.join(here, 'locale', '.git')):
commands += [
(CHDIR, os.path.join(here, 'locale')),
(EXEC, GIT_PULL % 'master'),
(CHDIR, here),
]
commands += [
(CHDIR, os.path.join(here, 'vendor')),
# This seems like a bad idea - it pulls from master, while the web app
# itself has a submodule pointing at a specific vendor-lib commit ID
(EXEC, GIT_RESET_HARD),
(EXEC, GIT_SUBMODULE_SYNC),
(EXEC, GIT_SUBMODULE_UPDATE),
(CHDIR, os.path.join(here)),
(EXEC, 'python2.6 vendor/src/schematic/schematic migrations/'),
(EXEC, 'python2.6 manage.py migrate'),
(EXEC, 'python2.6 manage.py compress_assets'),
]
for cmd, cmd_args in commands:
if CHDIR == cmd:
if debug:
sys.stdout.write("cd %s\n" % cmd_args)
os.chdir(cmd_args)
elif EXEC == cmd:
if debug:
sys.stdout.write("%s\n" % cmd_args)
if not 0 == os.system(cmd_args):
error_updating = True
break
else:
raise Exception("Unknown type of command %s" % cmd)
if error_updating:
sys.stderr.write("There was an error while updating. Please try again "
"later. Aborting.\n")
def main():
""" Handels command line args. """
debug = False
usage = dedent("""\
%prog [options]
Updates a server's sources, vendor libraries, packages CSS/JS
assets, migrates the database, and other nifty deployment tasks.
""".rstrip())
options = OptionParser(usage=usage)
e_help = "Type of environment. One of (%s) Example: update_site.py \
-e stage" % '|'.join(ENV_BRANCH.keys())
options.add_option("-e", "--environment", help=e_help)
options.add_option("-v", "--verbose",
help="Echo actions before taking them.",
action="store_true", dest="verbose")
(opts, _) = options.parse_args()
if opts.verbose:
debug = True
if opts.environment in ENV_BRANCH.keys():
update_site(opts.environment, debug)
else:
sys.stderr.write("Invalid environment!\n")
options.print_help(sys.stderr)
sys.exit(1)
if __name__ == '__main__':
main()