-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
155 lines (129 loc) · 4.18 KB
/
Copy pathMakefile
File metadata and controls
155 lines (129 loc) · 4.18 KB
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
VENV_NAME=.venv
VENV_BIN=${VENV_NAME}/bin
VENV_ACTIVATE=${VENV_BIN}/activate
PYTHON=${VENV_BIN}/python3
PIP=${VENV_BIN}/pip
SYSPYTHON=/usr/bin/python3
ROOT_PATH:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
PROJECT:=$(shell basename ${ROOT_PATH})
RPM_INSTALL_DIR:=/opt/acme/${PROJECT}
RPM_BUILD_ROOT:=${ROOT_PATH}/build
RPM_BUILD_HOME:=${RPM_BUILD_ROOT}${RPM_INSTALL_DIR}
RPM_PIP:=${RPM_BUILD_HOME}/bin/pip
BRANCH:=$(shell git rev-parse --abbrev-ref HEAD)
HASH:=$(shell git rev-parse HEAD)
FPM:=/usr/local/bin/fpm
include meta
WHEEL_FILE=${PROJECT}-${VERSION}-py3-none-any.whl
RMP_FILE=${PROJECT}-${VERSION}-1.x86_64.rpm
default:
@echo "Makefile for $(PROJECT)"
@echo
@echo 'Usage:'
@echo
@echo ' make venv install the package in a virtual environment'
@echo ' make test test with coverage report'
@echo ' make safety look for security vulnerabilities'
@echo ' make pylint linter'
@echo ' make cc show cyclomatic complexity (McCabe)'
@echo ' make mi show maintainability index score'
@echo ' make rpm create RPM package with embedded python binaries'
@echo ' make clean cleanup all temporary files'
@echo ' make clean-venv delete local venv'
@echo ' make clean-build cleanup artifacts (rpms, wheels)'
@echo ' make clean-pyc cleanup python bn files (pyc, pyo) files'
@echo
@echo ' . ${VENV_ACTIVATE} activate venv'
@echo
venv: ${VENV_ACTIVATE}
${VENV_ACTIVATE}: requirements.txt
test -d ${VENV_NAME} || ${SYSPYTHON} -m venv ${VENV_NAME}
${PIP} install --upgrade pip
${PIP} install -Ur requirements.txt
${PIP} install -Ur requirements-dev.txt
${PIP} install -e .
touch ${VENV_ACTIVATE}
test: venv ${VENV_BIN}/coverage
${VENV_BIN}/coverage run --include=$(PROJECT)/*.py -m unittest discover -s tests/; \
${VENV_BIN}/coverage report;
${VENV_BIN}/coverage:
${PIP} install coverage
safety: venv ${VENV_BIN}/safety
${VENV_BIN}/safety check
${VENV_BIN}/safety:
${PIP} install safety
pylint: venv ${VENV_BIN}/pylint
${VENV_BIN}/pylint --disable=C ${PROJECT}
${VENV_BIN}/pylint:
${PIP} install pylint
cc: venv ${VENV_BIN}/radon
radon cc -n D -a -s ${PROJECT}/*.py
mi: venv ${VENV_BIN}/radon
radon mi ${PROJECT}/*.py
${VENV_BIN}/radon:
${PIP} install radon
quality: test pylint cc mi
clean-venv:
rm -Rf ${VENV_NAME}
clean: clean-build clean-pyc clean-test
clean-build:
rm -fr build/
rm -fr dist/
rm -fr .eggs/
find . -name '*.egg-info' -exec rm -fr {} +
find . -name '*.egg' -exec rm -f {} +
rm -f ${PROJECT}*.rpm
rm -f ${PROJECT}/meta
clean-pyc:
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
find . -name '__pycache__' -exec rm -fr {} +
clean-test:
rm -fr .tox/
rm -f .coverage
rm -fr htmlcov/
wheel: venv ${VENV_BIN}/wheel
@echo make wheel
cp meta ${PROJECT}/
${PYTHON} setup.py bdist_wheel
rm -f ${PROJECT}/meta
${VENV_BIN}/wheel:
@echo install wheel
${PIP} install wheel
rpm: wheel
echo ${USER}
# add makes dependency to dist/*.rpm
rm -Rf ${RPM_BUILD_ROOT}
mkdir -p ${RPM_BUILD_ROOT}
mkdir -p ${RPM_BUILD_HOME}/etc
# use --copies to avoid symb links in the venv
${SYSPYTHON} -m venv --copies ${RPM_BUILD_HOME}
${RPM_PIP} install --upgrade pip
${RPM_PIP} install -r requirements.txt
${RPM_PIP} install "$(shell ls -t -d -1 dist/* | head -n 1)"
# pip can be removed in the installation pkg
${RPM_PIP} uninstall -y pip
# make absolute paths local to root installation dir e.g. /opt/acme/, workaround to do not use virtaulenv(3)_tools
find ${RPM_BUILD_ROOT} -type f -exec sed -i "s@${RPM_BUILD_ROOT}@@g" {} \;
find ${RPM_BUILD_ROOT} -iname *.pyc -exec rm {} \;
find ${RPM_BUILD_ROOT} -iname *.pyo -exec rm {} \;
rm -f ${PROJECT}*.rpm
# add --summary <== readme: https://github.com/jordansissel/fpm/issues/1536
fpm \
-t rpm \
-s dir \
-n ${PROJECT} \
-C ${RPM_BUILD_ROOT} \
--verbose \
-d python36 \
--rpm-user ${USER} \
--rpm-group ${USER} \
--version ${VERSION} \
--url ${URL} \
--license "${LICENSE}" \
--maintainer "${AUTHOR}" \
--description "${DESCRIPTION}" \
--before-install rpm/preinst \
--after-remove rpm/postrm \
.