forked from eosphoros-ai/DB-GPT
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
135 lines (109 loc) · 4.18 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
132
133
134
135
.DEFAULT_GOAL := help
SHELL=/bin/bash
VENV = .venv.make
# Detect the operating system and set the virtualenv bin directory
ifeq ($(OS),Windows_NT)
VENV_BIN=$(VENV)/Scripts
else
VENV_BIN=$(VENV)/bin
endif
setup: $(VENV)/bin/activate
$(VENV)/bin/activate: $(VENV)/.venv-timestamp
$(VENV)/.venv-timestamp: uv.lock
# Create new virtual environment if setup.py has changed
uv venv --python 3.11 $(VENV)
uv pip install --prefix $(VENV) ruff
uv pip install --prefix $(VENV) mypy
uv pip install --prefix $(VENV) pytest
touch $(VENV)/.venv-timestamp
testenv: $(VENV)/.testenv
$(VENV)/.testenv: $(VENV)/bin/activate
# check uv version and use appropriate parameters
if . $(VENV_BIN)/activate && uv sync --help | grep -q -- "--active"; then \
. $(VENV_BIN)/activate && uv sync --active --all-packages \
--extra "base" \
--extra "proxy_openai" \
--extra "rag" \
--extra "storage_chromadb" \
--extra "dbgpts" \
--link-mode=copy; \
else \
. $(VENV_BIN)/activate && uv sync --all-packages \
--extra "base" \
--extra "proxy_openai" \
--extra "rag" \
--extra "storage_chromadb" \
--extra "dbgpts" \
--link-mode=copy; \
fi
cp .devcontainer/dbgpt.pth $(VENV)/lib/python3.11/site-packages
touch $(VENV)/.testenv
.PHONY: fmt
fmt: setup ## Format Python code
# Format code
$(VENV_BIN)/ruff format packages
$(VENV_BIN)/ruff format --exclude="examples/notebook" examples
$(VENV_BIN)/ruff format i18n
# Sort imports
$(VENV_BIN)/ruff check --select I --fix packages
$(VENV_BIN)/ruff check --select I --fix --exclude="examples/notebook" examples
$(VENV_BIN)/ruff check --select I --fix i18n
$(VENV_BIN)/ruff check --fix packages \
--exclude="packages/dbgpt-serve/src/**"
$(VENV_BIN)/ruff check --fix packages/dbgpt-serve --ignore F811,F841
# Not need to check examples/notebook
#$(VENV_BIN)/ruff check --fix --exclude="examples/notebook" examples
.PHONY: fmt-check
fmt-check: setup ## Check Python code formatting and style without making changes
$(VENV_BIN)/ruff format --check packages
$(VENV_BIN)/ruff format --check --exclude="examples/notebook" examples
$(VENV_BIN)/ruff check --select I packages
$(VENV_BIN)/ruff check --select I --exclude="examples/notebook" examples
$(VENV_BIN)/ruff check --fix packages \
--exclude="packages/dbgpt-serve/src/**"
$(VENV_BIN)/ruff check --fix packages/dbgpt-serve --ignore F811,F841
.PHONY: pre-commit
pre-commit: fmt-check test test-doc mypy ## Run formatting and unit tests before committing
test: $(VENV)/.testenv ## Run unit tests
$(VENV_BIN)/pytest --pyargs dbgpt
.PHONY: test-doc
test-doc: $(VENV)/.testenv ## Run doctests
# -k "not test_" skips tests that are not doctests.
$(VENV_BIN)/pytest --doctest-modules -k "not test_" dbgpt/core
.PHONY: mypy
mypy: $(VENV)/.testenv ## Run mypy checks
# https://github.com/python/mypy
$(VENV_BIN)/mypy --config-file .mypy.ini --ignore-missing-imports packages/dbgpt-core/
# $(VENV_BIN)/mypy --config-file .mypy.ini dbgpt/rag/ dbgpt/datasource/ dbgpt/client/ dbgpt/agent/ dbgpt/vis/ dbgpt/experimental/
# rag depends on core and storage, so we not need to check it again.
# $(VENV_BIN)/mypy --config-file .mypy.ini dbgpt/storage/
# $(VENV_BIN)/mypy --config-file .mypy.ini dbgpt/core/
# TODO: More package checks with mypy.
.PHONY: coverage
coverage: setup ## Run tests and report coverage
$(VENV_BIN)/pytest --pyargs dbgpt --cov=dbgpt
.PHONY: clean
clean: ## Clean up the environment
rm -rf $(VENV)
find . -type f -name '*.pyc' -delete
find . -type d -name '__pycache__' -delete
# find . -type d -name '.pytest_cache' -delete
find . -type d -name '.coverage' -delete
.PHONY: clean-dist
clean-dist: ## Clean up the distribution
rm -rf dist/ *.egg-info build/
.PHONY: build
build: clean-dist ## Package the project for distribution
uv build --all-packages
rm -rf dist/dbgpt_app-*
rm -rf dist/dbgpt_serve-*
.PHONY: publish
publish: build ## Upload the package to PyPI
uv publish
.PHONY: publish-test
publish-test: build ## Upload the package to PyPI
uv publish --index testpypi
.PHONY: help
help: ## Display this help screen
@echo "Available commands:"
@grep -E '^[a-z.A-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-18s\033[0m %s\n", $$1, $$2}' | sort