-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
201 lines (183 loc) · 10.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
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
190
191
192
193
194
195
196
197
198
199
200
201
################################################################################
# #
# Makefile #
# #
# A collection of commands to help simplify and streamline development. #
# #
################################################################################
# Set the default to help if make is called with no target.
.DEFAULT_GOAL := help
# Set the default python version to run against for the env target.
PYTHON_VERSION := python3.7
################################################################################
# #
# Print a help message showing all supported make recipes with a brief #
# explanation of each. #
# #
################################################################################
.PHONY: help
help:
@printf '****************************** SUPPORTED COMMANDS ******************************\n'
@printf '$$ make help Print this message and exit.\n'
@printf '$$ make env Construct a virtual env with dependencies.\n'
@printf '$$ make lint Lint all the code using pylint.\n'
@printf '$$ make test Unit test SPaG using pytest and generate a report.\n'
@printf '$$ make distro Build varying distributions of SPaG.\n'
@printf '$$ make install Install SPaG from source.\n'
@printf '$$ make clean Remove compiled, temp, and any installed files.\n'
@printf '$$ make sanity Perform the linting and testing targets.\n'
@printf '$$ make test3.5 Perform sanity with python3.5.\n'
@printf '$$ make test3.6 Perform sanity with python3.6.\n'
@printf '$$ make test3.7 Perform sanity with python3.7.\n'
@printf '$$ make all Perform sanity on all SPaG supported python versions.\n'
@printf '$$ make test_upload Test repository upload with test PyPI.\n'
@printf '$$ make upload Upload built distributions to PyPI.\n'
@printf '$$ make test_download Test SPaG download and install from test PyPI.\n'
@printf '$$ make download Download and install SPaG from PyPI.\n'
################################################################################
# #
# Construct a virtual environment with all the required dependencies for #
# testing installed. #
# #
################################################################################
.PHONY: env
env: requirements.txt
pip install virtualenv
virtualenv --python=${PYTHON_VERSION} testing_venv
. testing_venv/bin/activate; \
pip install -r requirements.txt; \
make install; \
deactivate
################################################################################
# #
# Lint the python code using pytest and the defined .pylintrc specification #
# located at the root of the repository. #
# #
################################################################################
.PHONY: lint
lint: .pylintrc
find spag tests setup.py -name '*.py' -exec pylint --rcfile=.pylintrc '{}' +
################################################################################
# #
# Test the python code using pytest and the configuration file (pytest.ini) #
# present at the root of the repository. #
# #
################################################################################
.PHONY: test
test: pytest.ini
@export PYTHON_VERSION=${PYTHON_VERSION}; pytest -c pytest.ini
################################################################################
# #
# Create distributions from the current source. #
# #
################################################################################
.PHONY: distro
distro: setup.py
python setup.py sdist bdist_wheel
################################################################################
# #
# Install the project from source. #
# #
################################################################################
.PHONY: install
install: distro
pip install dist/*.whl
################################################################################
# #
# Remove and delete any temporary or compiled files as well as testing #
# artifacts. #
# #
################################################################################
.PHONY: clean
clean:
\rm -rf testing_venv/ SPaG.egg-info/ build/ dist/
\find . -type f -name '*~' -delete
\find . -type f -name '*.o' -delete
\find . -type f -name '*.swp' -delete
\find . -type f -name 'out_*' -delete
\find . -type f -name '.spagrc' -delete
\find . -type f -name '*.py[cod]' -delete
\find . -type f -name '.coverage' -delete
\find . -type d -name '__pycache__' -exec rm -rf '{}' +
\find . -type d -name '.pytest_cache' -exec rm -rf '{}' +
################################################################################
# #
# Run sanity testing on the code with the help of other recipes. #
# #
################################################################################
.PHONY: sanity
sanity: env
-. testing_venv/bin/activate; make lint && make test; deactivate
$(MAKE) clean
################################################################################
# #
# Run sanity with python version 3.5 with the help of other recipes. #
# #
################################################################################
.PHONY: test3.5
test3.5:
-$(MAKE) sanity -e PYTHON_VERSION=python3.5
mv test_report.html test_report_py3.5.html
################################################################################
# #
# Run sanity with python version 3.6 with the help of other recipes. #
# #
################################################################################
.PHONY: test3.6
test3.6:
-$(MAKE) sanity -e PYTHON_VERSION=python3.6
mv test_report.html test_report_py3.6.html
################################################################################
# #
# Run sanity with python version 3.7 with the help of other recipes. #
# #
################################################################################
.PHONY: test3.7
test3.7:
-$(MAKE) sanity -e PYTHON_VERSION=python3.7
mv test_report.html test_report_py3.7.html
################################################################################
# #
# Run sanity on all supported python versions with the help of other recipes. #
# #
################################################################################
.PHONY: all
all:
-$(MAKE) test3.5
-$(MAKE) test3.6
-$(MAKE) test3.7
################################################################################
# #
# Test built SPaG package distributions are uploaded properly by pushing them #
# to the test PyPI repository. #
# NOTE: Requires authentication. Must be an authorized maintainer. #
# #
################################################################################
.PHONY: test_upload
test_upload: distro
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
################################################################################
# #
# Upload built SPaG package distributions to the PyPI repository. #
# NOTE: Requires authentication. Must be an authorized maintainer. #
# #
################################################################################
.PHONY: upload
upload: distro
twine upload dist/*
################################################################################
# #
# Test SPaG package download and installation from the test PyPI repository. #
# #
################################################################################
.PHONY: test_download
test_download:
pip install --index-url https://test.pypi.org/simple/ SPaG
################################################################################
# #
# Download and install the SPaG package distribution from the PyPI repository. #
# #
################################################################################
.PHONY: download
download:
pip install SPaG