-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtasks.py
More file actions
112 lines (80 loc) · 3.44 KB
/
tasks.py
File metadata and controls
112 lines (80 loc) · 3.44 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
# -*- coding: utf-8 -*-
import functools
import os
import invoke
def _out(name, message):
print('[\033[1;37m{}\033[0m] {}'.format(name, message))
@invoke.task(name='test')
def development_test(verbose=True, coverage=False, **kwargs):
out = functools.partial(_out, 'development.test')
hide = 'out' if not verbose else None
pytest = 'py.test tests/'
if coverage:
out('Running tests (with Coverage report).')
invoke.run('coverage run --branch --source base -m %s' % pytest, pty=True, hide=hide)
invoke.run('coverage html', pty=True, hide=hide)
invoke.run('open htmlcov/index.html')
else:
out('Running tests.')
invoke.run('%s' % pytest, pty=True, hide=hide)
@invoke.task(name='deploy', pre=[development_test])
def deploy(verbose=False, migrate=False, **kwargs):
out = functools.partial(_out, 'project.deploy')
hide = 'out' if not verbose else None
# Ready? Let's go.
if migrate:
out('Snapshotting the production database.')
invoke.run('heroku pgbackups:capture --expire', hide=hide)
out('The migrations flag has been triggered, disable preboot.')
invoke.run('heroku labs:disable preboot', hide=hide)
out('Deploying project to Heroku.')
invoke.run('git push heroku master')
if migrate:
out('Deploy to Heroku complete. Migrating...')
invoke.run('heroku run python manage.py migrate')
out('Re-enabling preboot.')
invoke.run('heroku labs:enable preboot', hide=hide)
# Done!
out('All done~!')
@invoke.task(name='flake')
def development_flake(**kwargs):
invoke.run('flake8 --max-complexity 6 > flake8.txt')
@invoke.task(name='server')
def development_server(**kwargs):
# Use Foreman to start all the development processes.
invoke.run('foreman start -f Procfile.dev', pty=True)
@invoke.task(name='capture')
def heroku_capture(verbose=False, **kwargs):
out = functools.partial(_out, 'heroku.capture')
hide = 'out' if not verbose else None
out('Snapshotting the production database.')
invoke.run('heroku pgbackups:capture --expire', hide=hide)
@invoke.task(name='imagekit')
def heroku_imagekit(verbose=False, **kwargs):
out = functools.partial(_out, 'heroku.imagekit')
hide = 'out' if not verbose else None
invoke.run('heroku run python manage.py generateimages', hide=hide)
out('Thumbnails successfully generated by ImageKit.')
@invoke.task(name='migrate')
def heroku_migrate(app='', **kwargs):
invoke.run('heroku run python manage.py migrate %s' % app)
@invoke.task(name='pull')
def heroku_pull(verbose=False, database='hello-base', **kwargs):
out = functools.partial(_out, 'heroku.pull')
hide = 'out' if not verbose else None
# Fetch the latest database dump.
invoke.run('curl -o latest.dump `heroku pgbackups:url`', hide=hide)
out('Latest database dump (latest.dump) grabbed via curl.')
# Restore it.
invoke.run('pg_restore --verbose --clean --no-acl --no-owner -h localhost -d %s latest.dump' % database, hide=hide)
invoke.run('rm latest.dump', hide=hide)
out('Restored latest production dump to local database.')
@invoke.task(name='syncdb')
def heroku_syncdb(**kwargs):
invoke.run('heroku run python manage.py syncdb')
ns = invoke.Collection(
deploy, development_flake, development_server, development_test,
heroku=invoke.Collection(
heroku_capture, heroku_imagekit, heroku_migrate, heroku_pull, heroku_syncdb,
)
)