-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
131 lines (105 loc) · 3.39 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
#* Variables
SHELL := /usr/bin/env bash
PYTHON := python
#* Docker variables
IMAGE := phrase_api
VERSION := latest
#* Poetry
.PHONY: poetry-download
poetry-download:
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | $(PYTHON) -
.PHONY: poetry-remove
poetry-remove:
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | $(PYTHON) - --uninstall
#* Installation
.PHONY: install
install:
poetry lock -n && poetry export --without-hashes > requirements.txt
poetry install -n
.PHONY: pre-commit-install
pre-commit-install:
poetry run pre-commit install
#* Formatters
.PHONY: codestyle
codestyle:
poetry run pyupgrade --exit-zero-even-if-changed --py38-plus **/*.py
poetry run isort phrase_api/*.py --settings-path pyproject.toml ./
poetry run black phrase_api/*.py --config pyproject.toml ./
.PHONY: formatting
formatting: codestyle
#* Linting
.PHONY: test
test:
poetry run pytest -c pyproject.toml --cov-report=html --cov=phrase_api tests/
.PHONY: extrabadges
extrabadges:
$(SHELL) -c 'chmod u+x+r+w .shell/*.sh'
$(SHELL) -c 'chmod u+x+r+w .shell/badges.sh; . .shell/badges.sh'
.PHONY: release
release:
$(SHELL) -c 'chmod u+x+r+w .shell/release.sh; . .shell/release.sh'
.PHONY: coverage
coverage:
poetry run coverage report --rcfile pyproject.toml
.PHONY: coverage-badge
coverage-badge:
coverage-badge -o assets/images/coverage.svg -f
.PHONY: check-codestyle
check-codestyle:
poetry run isort --diff --check-only --settings-path pyproject.toml phrase_api/*.py phrase_api/*/*.py tests/*.py
poetry run black --diff --check --config pyproject.toml phrase_api/*.py phrase_api/*/*.py tests/*.py
poetry run darglint --verbosity 2 phrase_api tests
.PHONY: change-codestyle
change-codestyle:
poetry run isort --settings-path pyproject.toml phrase_api/*.py phrase_api/*/*.py tests/*.py
poetry run black --config pyproject.toml phrase_api/*.py phrase_api/*/*.py tests/*.py
.PHONY: mypy
mypy:
poetry run mypy --install-types --non-interactive --config-file pyproject.toml ./
.PHONY: check-safety
check-safety:
poetry check
poetry run safety check --full-report
poetry run bandit -ll --recursive phrase_api tests
.PHONY: lint
lint: test check-codestyle mypy check-safety
#* Docker
# Example: make docker VERSION=latest
# Example: make docker IMAGE=some_name VERSION=0.1.0
.PHONY: docker-build
docker-build:
@echo Building docker $(IMAGE):$(VERSION) ...
docker build \
-t $(IMAGE):$(VERSION) . \
-f ./docker/Dockerfile --no-cache
# Example: make clean_docker VERSION=latest
# Example: make clean_docker IMAGE=some_name VERSION=0.1.0
.PHONY: docker-remove
docker-remove:
@echo Removing docker $(IMAGE):$(VERSION) ...
docker rmi -f $(IMAGE):$(VERSION)
#* Cleaning
.PHONY: pycache-remove
pycache-remove:
find . | grep -E "(__pycache__|\.pyc|\.pyo$$)" | xargs rm -rf
.PHONY: build-remove
build-remove:
rm -rf build/
.PHONY: clean-all
clean-all: pycache-remove build-remove docker-remove
.PHONY: complexity
complexity:
poetry run radon cc phrase_api --total-average
.PHONY: maintainability
maintainability:
poetry run radon mi phrase_api
.PHONY: interrogate
interrogate:
poetry run interrogate -v phrase_api
.PHONY: precommit
precommit:
pre-commit run --all-files
.PHONY: cov-badge
cov-badge:
PYTHONPATH=$(PYTHONPATH) poetry run pytest -c pyproject.toml --cov-report=html --cov=phrase_api tests/
poetry run coverage-badge -o assets/images/coverage.svg -f