-
-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathMakefile
154 lines (120 loc) · 3.8 KB
/
Makefile
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
.PHONY: all
all: help
define BROWSER_PYSCRIPT
import os, webbrowser, sys
try:
from urllib import pathname2url
except:
from urllib.request import pathname2url
webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1])))
endef
export BROWSER_PYSCRIPT
define PRINT_HELP_PYSCRIPT
import re, sys
for line in sys.stdin:
match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line)
if match:
target, help = match.groups()
print("%-20s %s" % (target, help))
endef
export PRINT_HELP_PYSCRIPT
BROWSER := python3 -c "$$BROWSER_PYSCRIPT"
.PHONY: help
help: ## show this
@python3 -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST)
.PHONY: clean
clean: clean-build clean-pyc clean-test ## remove all build, test, coverage and Python artifacts
.PHONY: clean-build
clean-build: ## remove build artifacts
rm -fr build/
rm -fr dist/
rm -fr .eggs/
find . -name '*.egg-info' -exec rm -fr {} +
find . -name '*.egg' -exec rm -f {} +
.PHONY: clean-pyc
clean-pyc: ## remove Python file artifacts
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
find . -name '__pycache__' -exec rm -fr {} +
.PHONY: clean-test
clean-test: ## remove test and coverage artifacts
rm -fr .tox/
rm -f .coverage
rm -fr htmlcov/
rm -fr .pytest_cache
.PHONY: flake8
flake8: ## check format style with flake8
flake8 crackhash tests
.PHONY: test-lint
test-lint: clean-pyc flake8 ## test format style with flake8
autoflake:
autoflake -ir --remove-all-unused-imports --remove-unused-variables ./crackhash
autoflake -ir --remove-all-unused-imports --remove-unused-variables ./tests
autopep8:
autopep8 -ir --aggressive --max-line-length=120 ./crackhash
autopep8 -ir --aggressive --max-line-length=120 ./tests
.PHONY: auto-lint
auto-lint: autoflake autopep8 ## automatically remove all unused imports and variables and conform to the PEP 8 style guide
.PHONY: test
test: ## run tests quickly with the default Python
python3 setup.py test
.PHONY: test-all
test-all: ## run tests on every Python version with tox
tox
.PHONY: coverage
coverage: ## check code coverage quickly with the default Python
coverage run --source crackhash setup.py test
coverage report -m
coverage html
$(BROWSER) htmlcov/index.html
.PHONY: docs
docs: ## generate Sphinx HTML documentation, including API docs
rm -f docs/crackhash.rst
rm -f docs/modules.rst
sphinx-apidoc -o docs/ crackhash
$(MAKE) -C docs clean
$(MAKE) -C docs html
$(BROWSER) docs/_build/html/index.html
.PHONY: servedocs
servedocs: docs ## compile the docs watching for changes
watchmedo shell-command -p '*.rst' -c '$(MAKE) -C docs html' -R -D .
.PHONY: dist
dist: clean ## builds source and wheel package
python3 setup.py sdist
python3 setup.py bdist_wheel
ls -l dist
.PHONY: install
install: clean ## install the package to the active Python's site-packages
python3 setup.py install
.PHONY: bump-patch
bump-patch: ## bump the patch version
bump2version patch
.PHONY: bump-minor
bump-minor: ## bump the minor version
bump2version minor
.PHONY: bump-major
bump-major: ## bump the major version
bump2version major
define RELEASE_NOTES
import re, os
curtag = os.popen('git describe --tags --abbrev=0').read()
cmd = 'git log %s..HEAD --oneline' % curtag.rstrip()
output = os.popen(cmd).readlines()
print('Add the following to the history:\n')
for line in output:
if line == '' or line == '\n':
pass
match = re.sub(r'^[0-9a-fA-F]+\s', '', line.rstrip())
print('* %s' % match.capitalize())
endef
export RELEASE_NOTES
.PHONY: release-notes
release-notes: ## extract the latest commits to add to the changelog
python -c "$$RELEASE_NOTES"
.PHONY: release-test
release-test: dist ## package and upload a release
twine upload --repository testpypi dist/*
.PHONY: release
release: dist ## package and upload a release
twine upload --repository pypi --verbose dist/*