-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
129 lines (80 loc) · 3.24 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
#############################################################################
## MAKEFILE FOR LINTING AND RUNNING TESTS OF PLOTS ##
#############################################################################
###############
## VARIABLES ##
###############
# The name of the package to build.
PACKAGE_NAME = crillab-autograph
MODULE_NAME = autograph
# The version of the package to build.
VERSION = 0.1.0
# The directory of the unit tests for the package to build.
TESTS = tests
# The directory where to put build files.
OUTDIR = build
#############
## TARGETS ##
#############
# Declares non-file targets.
.PHONY: test pylint sonar register package upload clean help
##################
## Test Targets ##
##################
# Executes unit tests with code coverage.
test: $(OUTDIR)/nosetests.xml $(OUTDIR)/coverage.xml
# Stores unit tests and code coverage results into files.
$(OUTDIR)/nosetests.xml $(OUTDIR)/coverage.xml: $(OUTDIR) $(MODULE_NAME)/*.py $(TESTS)/*/test*.py
nosetests --with-xunit --with-coverage --cover-package $(MODULE_NAME) --cover-xml $(TESTS)/*/test*.py
mv nosetests.xml .coverage coverage.xml $(OUTDIR)
#####################
## Linting Targets ##
#####################
# Executes the Pylint static analysis.
pylint: $(OUTDIR)/pylint.out
# Stores the result of the Pylint analysis into a file.
$(OUTDIR)/pylint.out: $(OUTDIR) $(MODULE_NAME)/*.py $(TESTS)/*/*.py
pylint $(MODULE_NAME) $(TESTS) -r n --msg-template="{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}" | tee $(OUTDIR)/pylint.out
# Executes the SonarQube static analysis.
sonar: test pylint
if test -z "$$SONAR_ORGA"; then sonar-scanner -Dsonar.host.url=${SONAR_HOST} -Dsonar.login=${SONAR_TOKEN} -Dsonar.projectKey=${SONAR_KEY};else sonar-scanner -Dsonar.host.url=${SONAR_HOST} -Dsonar.login=${SONAR_TOKEN} -Dsonar.projectKey=${SONAR_KEY} -Dsonar.organization=${SONAR_ORGA}; fi
##################
## PyPI Targets ##
##################
# Registers the project on PyPI.
register:
python3 setup.py register
# Packages the project to upload it on PyPI.
package: dist/$(PACKAGE_NAME)-$(VERSION).tar.gz
# Packages the project into a gzipped-tarball archive.
dist/$(PACKAGE_NAME)-$(VERSION).tar.gz:
python3 -m build
# Uploads the project on PyPI.
upload:
twine upload dist/*
deploy: clean package upload
#####################
## Utility Targets ##
#####################
# Creates the directory where to put build files.
$(OUTDIR):
mkdir $(OUTDIR)
# Deletes the build files.
clean:
rm -rf $(OUTDIR) *.egg *.egg-info dist
# Displays a message describing the available targets.
help:
@echo
@echo "Linting and Running Tests of Metrics"
@echo "===================================="
@echo
@echo "Available targets are:"
@echo " - test (default) -> executes unit tests with code coverage"
@echo " - pylint -> executes the Pylint static analysis"
@echo " - sonar -> executes the SonarQube static analysis"
@echo " - register -> registers the project on PyPI"
@echo " - package -> packages the project to upload it on PyPI"
@echo " - upload -> uploads the project on PyPI"
@echo " - clean -> deletes the build files"
@echo " - help -> displays this message"
@echo