-
Notifications
You must be signed in to change notification settings - Fork 1
/
tasks.py
98 lines (74 loc) · 2.49 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
# noinspection PyUnresolvedReferences
import re
from pathlib import Path
from invoke import task # type: ignore
PACKAGE = "mintalib"
ROOT = Path(__file__).parent
@task
def install(ctx):
"""Install package with dev dependencies"""
ctx.run('python -mpip install -e ".[dev]"')
@task
def info(ctx):
"""Check package versions"""
ctx.run(f"python -mpip index versions {PACKAGE}")
@task
def clean(ctx):
"""Cleanup and remove dist folder"""
ctx.run("python setup.py clean")
ctx.run("rm -rf dist")
@task
def check(ctx):
"""Check package"""
ctx.run("python -mpip install -q ruff nbcheck")
ctx.run("nbcheck examples misc")
ctx.run("ruff check")
@task
def cython(ctx):
"""Cythonize *.pyx files"""
ctx.run("python -mpip install -q cython")
ctx.run("cythonize -f src/**/*.pyx")
@task(cython)
def make(ctx):
"""Compile extension with build_ext --inplace"""
ctx.run("python -mpip install -q ipython")
ctx.run("python setup.py build_ext --inplace")
with ctx.cd("scripts"):
ctx.run("ipython make-functions.ipynb")
ctx.run("ipython make-indicators.ipynb")
ctx.run("ipython update-readme.ipynb")
ctx.run("ipython update-docs.ipynb")
@task(clean)
def build(ctx):
"""Build project sdist"""
print("Bulding sdist ... (use compile to compile extension inplace)")
ctx.run("python -mpip install -q build")
ctx.run("python -mbuild --sdist")
@task
def dump(ctx):
"""Dump sdist contents"""
for file in ROOT.glob("dist/*.tar.gz"):
ctx.run(f"tar -tf {file}")
@task
def publish(ctx, testpypi=False):
"""Publish to PyPI with twine"""
repoarg = "--repository testpypi" if testpypi else ""
ctx.run("python -mpip install -q twine")
ctx.run(f"twine upload {repoarg} dist/*.tar.gz")
@task
def bump(ctx):
"""Bump patch version in pyproject"""
pyproject = Path(__file__).joinpath("../pyproject.toml").resolve(strict=True)
buffer = pyproject.read_text()
pattern = r"^version \s* = \s* \"(.+)\" \s*"
match = re.search(pattern, buffer, flags=re.VERBOSE | re.MULTILINE)
if not match:
raise ValueError("Could not find version setting")
version = tuple(int(i) for i in match.group(1).split("."))
version = version[:-1] + (version[-1] + 1,)
version = ".".join(str(v) for v in version)
print(f"Updating version to {version} ...")
output = re.sub(
pattern, f'version = "{version}"\n', buffer, flags=re.VERBOSE | re.MULTILINE
)
pyproject.write_text(output)