-
Notifications
You must be signed in to change notification settings - Fork 0
/
tasks.py
178 lines (138 loc) · 4.62 KB
/
tasks.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
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
174
175
176
177
178
import shutil
from invoke import task
@task
def check(c):
"""
Check the consistency of the project using various tools
"""
# print("🚀 Checking Poetry lock file consistency with 'pyproject.toml': Running poetry lock --check")
# c.run("poetry lock --check")
print("🚀 Linting code: Running pre-commit")
c.run("poetry run pre-commit run -a")
print("🚀 Static type checking: Running mypy")
c.run("poetry run mypy")
print("🚀 Checking for obsolete dependencies: Running deptry")
c.run("poetry run deptry .")
@task
def test(c, tox=False):
"""
Run the test suite
"""
print("🚀 Testing code: Running pytest")
c.run("poetry run pytest --cov --cov-config=pyproject.toml --cov-report=html")
# if tox:
# print("🚀 Testing code: Running pytest with all tests")
# c.run("tox")
# else:
# print("🚀 Testing code: Running pytest")
# c.run("poetry run pytest --cov --cov-config=pyproject.toml --cov-report=html")
@task
def bump(c, rule="patch"):
"""
Create a new git tag and push it to the remote repository.
.. note::
Specifying either "minor" or "release" as the rule will create a new tag and push it to the remote repository, triggering a new release to PyPI.
RULE BEFORE AFTER
major 1.3.0 2.0.0
minor 2.1.4 2.2.0
patch 4.1.1 4.1.2
premajor 1.0.2 2.0.0a0
preminor 1.0.2 1.1.0a0
prepatch 1.0.2 1.0.3a0
prerelease 1.0.2 1.0.3a0
prerelease 1.0.3a0 1.0.3a1
prerelease 1.0.3b0 1.0.3b1
"""
# 1. Bump and commit the version
vnum = c.run(f"poetry version {rule} -s", hide=True).stdout.strip()
c.run(f'git commit pyproject.toml -m "bump version v{vnum}"')
# 2. Get the current version number as a variable
# version = c.run("poetry version", hide=True).stdout.strip()
if rule in ["major", "minor"]:
# 3. create a tag and push it to the remote repository
c.run(f'git tag -a v{vnum} -m "{vnum}"')
c.run("git push --tags")
@task
def live_docs(c):
"""
Build the documentation and open it in a live browser
"""
c.run("sphinx-autobuild -b html --host 0.0.0.0 --port 9000 --watch . -c . . _build/html")
@task
def shell(c):
"""
Build the documentation and open it in a live browser
"""
c.run("docker compose -f local.yml run django python manage.py shell")
@task
def makemigrations(c):
"""
Build the documentation and open it in a live browser
"""
c.run("docker compose -f local.yml run django python manage.py makemigrations")
@task
def dumpdata(c):
c.run(
"docker compose -f local.yml run django python manage.py dumpdata users organizations contributors projects"
" datasets samples core --natural-foreign --natural-primary --output=geoluminate.json.gz"
)
@task
def loaddata(c):
c.run("docker compose -f local.yml run django python manage.py loaddata core --app geoluminate")
@task
def reset_db(c):
"""
Build the documentation and open it in a live browser
"""
c.run("docker compose run django python manage.py flush")
@task
def build_docker(c):
"""Build the core geoluminate docker images"""
c.run("poetry build")
@task
def build_assets(c):
"""Remove old asset files and rebuild"""
asset_dir = "./geoluminate/static/bundles/"
shutil.rmtree(asset_dir + "css/", ignore_errors=False, onerror=None)
shutil.rmtree(asset_dir + "js/", ignore_errors=False, onerror=None)
c.run("npm run build")
@task
def savedemo(c):
"""Save the initial data for the core geoluminate app"""
c.run(
" ".join(
[
"docker compose run",
"django python -Xutf8 manage.py dumpdata",
"--natural-foreign",
"--natural-primary",
# "-e users.User",
"-e contenttypes",
"-e auth.Permission",
"-o geoluminate/fixtures/demo.json.bz2",
]
)
)
@task
def docs(c):
"""
Build the documentation and open it in the browser
"""
# c.run("sphinx-apidoc -M -T -o docs/ project/schemas/* **/migrations/* -e --force -d 2")
c.run("sphinx-build -E -b html docs docs/_build")
# c.run("docker compose -f local.yml up docs")
@task
def update_deps(c):
"""
Update the project dependencies
"""
packages = [
"django-literature",
"django-jsonfield-toolkit",
"django-polymorphic-treebeard",
"django-account-management",
"geoluminate-docs",
"django-research-vocabs",
"django-setup-tools",
]
c.run(f"poetry update {' '.join(packages)}")