-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile.example
More file actions
116 lines (96 loc) · 3.04 KB
/
Copy pathMakefile.example
File metadata and controls
116 lines (96 loc) · 3.04 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
-include .env
APP=app_name
CONFIG_PATH=pyproject.toml
PACKAGE_MANAGER=uv
UV_VERSION=0.9.18
PRINT=python -c "import sys; print(str(sys.argv[1]))"
DOCUMENTATION=docs
DIAGRAMS_FORMAT=plantuml
TEST_FOLDER=./tests
TEST_SECRETS:=$(shell realpath $(TEST_FOLDER)/.secrets.*)
.PHONY: help
help:
$(PRINT) "Usage:"
$(PRINT) " help show this message"
$(PRINT) " dev_env_setup install manager for python env"
$(PRINT) " setup build virtual environment and install dependencies"
$(PRINT) " test_setup build virtual environment and install test dependencies"
$(PRINT) " dev_setup build virtual environment and install dev dependencies"
$(PRINT) " lint run dev utilities for code quality assurance"
$(PRINT) " format run dev utilities for code format assurance"
$(PRINT) " docs generate code documentation"
$(PRINT) " metrics evaluate source code quality"
$(PRINT) " test run test suite"
$(PRINT) " coverage run coverage analysis"
$(PRINT) " set_version set program version"
$(PRINT) " dist package application for distribution"
$(PRINT) " image build app docker image"
$(PRINT) " test_image run test suite in a container"
$(PRINT) " run_image run app docker image in a container"
.PHONY: dev_env_setup
dev_env_setup:
APP_VERSION=$(UV_VERSION) curl -LsSf https://astral.sh/uv/install.sh | sh
.PHONY: setup
setup:
$(PACKAGE_MANAGER) sync
.PHONY: test_setup
test_setup:
$(PACKAGE_MANAGER) sync --group dev
.PHONY: dev_setup
dev_setup:
$(PACKAGE_MANAGER) sync --group dev --group docs
.PHONY: update_deps
update_deps:
$(PACKAGE_MANAGER) lock --upgrade
.PHONY: check
check:
-$(PACKAGE_MANAGER) run ruff check .
.PHONY: format
format:
-$(PACKAGE_MANAGER) run ruff check --fix .
-$(PACKAGE_MANAGER) run ruff format .
.PHONY: vulture
vulture:
-$(PACKAGE_MANAGER) run vulture
.PHONY: metrics
metrics:
$(PACKAGE_MANAGER) run radon cc -a -s -o SCORE $(APP)
$(PACKAGE_MANAGER) run radon raw -s $(APP)
$(PACKAGE_MANAGER) run radon mi -s $(APP)
.PHONY: lint
lint: check vulture
.PHONY: test_secrets_file
test_secrets_file:
$(PACKAGE_MANAGER) run dynaconf write yaml -y -e test -p "$(TEST_FOLDER)" -s dummyvar=dummyvalue"
@echo $(TEST_SECRETS)
.PHONY: test
test:
if [ -f $(TEST_SECRETS) ]; then \
export SECRETS_FOR_DYNACONF=$(TEST_SECRETS) && $(PACKAGE_MANAGER) tool run pytest; \
else \
$(PACKAGE_MANAGER) tool run pytest; \
fi
.PHONY: coverage
coverage:
$(POETRY) run coverage report -m
.PHONY: docs
docs:
mkdir -p $(DOCUMENTATION)/_static $(DOCUMENTATION)/_diagrams/src
$(PACKAGE_MANAGER) run pyreverse -p $(APP) \
--colorized \
-o $(DIAGRAMS_FORMAT) \
-d $(DOCUMENTATION)/_diagrams/src $(APP)
$(PACKAGE_MANAGER) run make -C $(DOCUMENTATION) html
.PHONY: dist
dist:
$(PACKAGE_MANAGER) build
.PHONY: image
image: docs
docker buildx bake image
.PHONY: test_image
test_image:
docker buildx bake test
docker run --rm $(APP):test
.PHONY: run_image
run_image: image
docker run -d --name $(APP) --env-file .env $(IMAGE_TAG):latest