Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
142 lines (115 loc) · 4.7 KB
/
Copy pathMakefile
File metadata and controls
142 lines (115 loc) · 4.7 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
.DEFAULT_GOAL := lint
package_dir := aiogram
tests_dir := tests
scripts_dir := scripts
examples_dir := examples
code_dir := $(package_dir) $(tests_dir) $(scripts_dir) $(examples_dir)
reports_dir := reports
redis_connection := redis://localhost:6379
mongo_connection := mongodb://mongo:mongo@localhost:27017
# =================================================================================================
# Environment
# =================================================================================================
.PHONY: clean
clean:
rm -rf `find . -name __pycache__`
rm -f `find . -type f -name '*.py[co]' `
rm -f `find . -type f -name '*~' `
rm -f `find . -type f -name '.*~' `
rm -rf `find . -name .pytest_cache`
rm -rf *.egg-info
rm -f report.html
rm -f .coverage
rm -rf {build,dist,site,.cache,.mypy_cache,.ruff_cache,reports}
.PHONY: install
install: clean
uv sync --locked --all-extras --group dev --group test
uv run pre-commit install
# =================================================================================================
# Code quality
# =================================================================================================
.PHONY: lint
lint:
uv run ruff format --check --diff $(package_dir) $(tests_dir) $(scripts_dir) $(examples_dir)
uv run ruff check --show-fixes --preview $(package_dir) $(examples_dir)
uv run mypy --native-parser --num-workers 8 $(package_dir)
# aiogram/types/custom.py has a `sys.platform == "win32"` branch that mypy prunes as
# unreachable on Linux; this second pass type-checks it.
uv run mypy --native-parser --num-workers 8 --platform win32 $(package_dir)
uv run pre-commit run --all-files --show-diff-on-failure
.PHONY: lint-workflows
lint-workflows:
uv run scripts/check_action_refs.py
uvx zizmor --config .github/zizmor.yml .
uvx --from actionlint-py actionlint
.PHONY: reformat
reformat:
uv run ruff format $(code_dir)
uv run ruff check --fix $(code_dir)
# =================================================================================================
# Tests
# =================================================================================================
.PHONY: test-run-services
test-run-services:
@#docker-compose -f tests/docker-compose.yml -p aiogram3-dev up -d
.PHONY: test
test: test-run-services
uv run pytest --cov=aiogram tests/ --redis $(redis_connection) --mongo $(mongo_connection)
.PHONY: test-coverage
test-coverage: test-run-services
mkdir -p $(reports_dir)/tests/
uv run pytest --cov=aiogram --html=$(reports_dir)/tests/index.html tests/ --redis $(redis_connection) --mongo $(mongo_connection)
uv run coverage html -d $(reports_dir)/coverage
.PHONY: test-coverage-view
test-coverage-view:
uv run coverage html -d $(reports_dir)/coverage
uv run python -c "import webbrowser; webbrowser.open('file://$(shell pwd)/reports/coverage/index.html')"
# =================================================================================================
# Docs
# =================================================================================================
locales := uk_UA
locale_targets := $(addprefix docs-serve-, $(locales))
locales_pot := _build/gettext
docs_dir := docs
docs-gettext:
uv run --extra docs bash -c 'cd $(docs_dir) && make gettext'
uv run --extra docs bash -c 'cd $(docs_dir) && sphinx-intl update -p $(locales_pot) $(addprefix -l , $(locales))'
.PHONY: docs-gettext
docs-serve:
uv run --extra docs sphinx-autobuild --watch aiogram/ --watch CHANGES.rst --watch README.rst docs/ docs/_build/ $(OPTS)
.PHONY: docs-serve
$(locale_targets): docs-serve-%:
$(MAKE) docs-serve OPTS="-D language=$(subst docs-serve-,,$@)"
.PHONY: $(locale_targets)
# =================================================================================================
# Project
# =================================================================================================
.PHONY: build
build: clean
uv build
.PHONY: bump
bump:
uv run python scripts/bump_version.py $(args)
uv run python scripts/bump_versions.py
update-api:
uv run --extra cli butcher parse
uv run --extra cli butcher refresh
uv run --extra cli butcher apply all
@$(MAKE) bump
.PHONY: towncrier-build
towncrier-build:
uv run --extra docs towncrier build --yes
.PHONY: towncrier-draft
towncrier-draft:
uv run --extra docs towncrier build --draft
.PHONY: towncrier-draft-github
towncrier-draft-github:
mkdir -p dist
uv run --extra docs towncrier build --draft | pandoc - -o dist/release.md
.PHONY: prepare-release
prepare-release: bump towncrier-build
.PHONY: release
release:
git add .
git commit -m "Release $(shell uv run python -c 'from aiogram import __version__; print(__version__)')"
git tag v$(shell uv run python -c 'from aiogram import __version__; print(__version__)')