summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: e61571c537d472f8ee56e3e3b430da22a8fea8f0 (plain)
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
179
180
181
182
183
184
185
186
187
188
189
# IMPORTANT: for compatibility with `python -m pymake [alias]`, ensure:
# 1. Every alias is preceded by @[+]make (eg: @make alias)
# 2. A maximum of one @make alias or command per line
# see: https://github.com/tqdm/py-make/issues/1

.PHONY:
	alltests
	all
	flake8
	test
	pytest
	testsetup
	testnb
	testcoverage
	testperf
	testtimer
	distclean
	coverclean
	prebuildclean
	clean
	toxclean
	install_dev
	install
	build
	buildupload
	pypi
	snap
	docker
	help
	none
	run

help:
	@python -m pymake -p

alltests:
	@+make testcoverage
	@+make testperf
	@+make flake8
	@+make testsetup

all:
	@+make alltests
	@+make build

flake8:
	@+pre-commit run -a flake8
	@+pre-commit run -a nbstripout

test:
	TOX_SKIP_ENV=perf tox --skip-missing-interpreters -p all
	tox -e perf

pytest:
	pytest

testsetup:
	@make README.rst
	@make tqdm/tqdm.1
	@make tqdm/completion.sh
	@make help

testnb:
	pytest tests_notebook.ipynb --cov=tqdm.notebook --cov-report=term -W=ignore --nbval --nbval-current-env --nbval-sanitize-with=.meta/nbval.ini

testcoverage:
	@make coverclean
	pytest tests_notebook.ipynb --cov=tqdm --cov-report= -W=ignore --nbval --nbval-current-env --nbval-sanitize-with=.meta/nbval.ini
	pytest -k "not perf" --cov=tqdm --cov-report=xml --cov-report=term --cov-append --cov-fail-under=80

testperf:
	# do not use coverage (which is extremely slow)
	pytest -k perf

testtimer:
	pytest

# another performance test, to check evolution across commits
testasv:
	# Test only the last 3 commits (quick test)
	asv run -j 8 HEAD~3..HEAD
	@make viewasv

testasvfull:
	# Test all the commits since the beginning (full test)
	asv run --skip-existing-commits -j 8 v1.0.0..HEAD
	@make testasv

viewasv:
	asv publish
	asv preview

tqdm/tqdm.1: .meta/.tqdm.1.md tqdm/cli.py tqdm/std.py
	# TODO: add to mkdocs.py
	python -m tqdm --help | tail -n+5 |\
    sed -r -e 's/\\/\\\\/g' \
      -e 's/^  (--.*)=<(.*)>  : (.*)$$/\n\\\1=*\2*\n: \3./' \
      -e 's/^  (--.*)  : (.*)$$/\n\\\1\n: \2./' \
      -e 's/  (-.*, )(--.*)  /\n\1\\\2\n: /' |\
    cat "$<" - |\
    pandoc -o "$@" -s -t man

tqdm/completion.sh: .meta/mkcompletion.py tqdm/std.py tqdm/cli.py
	@python .meta/mkcompletion.py

README.rst: .meta/.readme.rst tqdm/std.py tqdm/cli.py
	@python .meta/mkdocs.py

snapcraft.yaml: .meta/mksnap.py
	@python .meta/mksnap.py

.dockerignore:
	@+python -c "fd=open('.dockerignore', 'w'); fd.write('*\n!dist/*.whl\n')"

Dockerfile:
	@+python -c 'fd=open("Dockerfile", "w"); fd.write("FROM python:3.8-alpine\nCOPY dist/*.whl .\nRUN pip install -U $$(ls ./*.whl) && rm ./*.whl\nENTRYPOINT [\"tqdm\"]\n")'

distclean:
	@+make coverclean
	@+make prebuildclean
	@+make clean
prebuildclean:
	@+python -c "import shutil; shutil.rmtree('build', True)"
	@+python -c "import shutil; shutil.rmtree('dist', True)"
	@+python -c "import shutil; shutil.rmtree('tqdm.egg-info', True)"
	@+python -c "import shutil; shutil.rmtree('.eggs', True)"
	@+python -c "import os; os.remove('tqdm/_dist_ver.py') if os.path.exists('tqdm/_dist_ver.py') else None"
coverclean:
	@+python -c "import os; os.remove('.coverage') if os.path.exists('.coverage') else None"
	@+python -c "import os, glob; [os.remove(i) for i in glob.glob('.coverage.*')]"
	@+python -c "import shutil; shutil.rmtree('tests/__pycache__', True)"
	@+python -c "import shutil; shutil.rmtree('benchmarks/__pycache__', True)"
	@+python -c "import shutil; shutil.rmtree('tqdm/__pycache__', True)"
	@+python -c "import shutil; shutil.rmtree('tqdm/contrib/__pycache__', True)"
	@+python -c "import shutil; shutil.rmtree('tqdm/examples/__pycache__', True)"
clean:
	@+python -c "import os, glob; [os.remove(i) for i in glob.glob('*.py[co]')]"
	@+python -c "import os, glob; [os.remove(i) for i in glob.glob('tests/*.py[co]')]"
	@+python -c "import os, glob; [os.remove(i) for i in glob.glob('benchmarks/*.py[co]')]"
	@+python -c "import os, glob; [os.remove(i) for i in glob.glob('examples/*.py[co]')]"
	@+python -c "import os, glob; [os.remove(i) for i in glob.glob('tqdm/*.py[co]')]"
	@+python -c "import os, glob; [os.remove(i) for i in glob.glob('tqdm/contrib/*.py[co]')]"
toxclean:
	@+python -c "import shutil; shutil.rmtree('.tox', True)"


submodules:
	git clone git@github.com:tqdm/tqdm.wiki wiki
	git clone git@github.com:tqdm/tqdm.github.io docs
	git clone git@github.com:conda-forge/tqdm-feedstock feedstock
	cd feedstock && git remote add autotick-bot git@github.com:regro-cf-autotick-bot/tqdm-feedstock

install:
	python -m pip install .
install_dev:
	python -m pip install -e .
install_build:
	python -m pip install -r .meta/requirements-build.txt
install_test:
	python -m pip install -r .meta/requirements-test.txt
	pre-commit install

build:
	@make prebuildclean
	@make testsetup
	python -m build
	python -m twine check dist/*

pypi:
	python -m twine upload dist/*

buildupload:
	@make build
	@make pypi

snap:
	@make -B snapcraft.yaml
	snapcraft
docker:
	@make build
	@make .dockerignore
	@make Dockerfile
	docker build . -t tqdm/tqdm
	docker tag tqdm/tqdm:latest tqdm/tqdm:$(shell docker run -i --rm tqdm/tqdm -v)
none:
	# used for unit testing

run:
	python -Om tqdm --help