mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-07-23 12:21:08 +00:00
feat(build):add vscode devcontainer config
This commit is contained in:
parent
11c544ef5d
commit
9e9308beaa
76
.devcontainer.json
Executable file
76
.devcontainer.json
Executable file
@ -0,0 +1,76 @@
|
|||||||
|
{
|
||||||
|
// Set container runtime user
|
||||||
|
"remoteUser": "work",
|
||||||
|
"build": {
|
||||||
|
"dockerfile": ".devcontainer/Dockerfile.dev",
|
||||||
|
"context": "./",
|
||||||
|
"args": {
|
||||||
|
"USER_UID": "${localEnv:UID:1001}",
|
||||||
|
"USER_GID": "${localEnv:GID:1001}",
|
||||||
|
"USER_NAME":"${localEnv:USER:work}"
|
||||||
|
},
|
||||||
|
"options": ["--no-cache"]
|
||||||
|
|
||||||
|
},
|
||||||
|
"name": "dbgpt",
|
||||||
|
"workspaceFolder": "/app",
|
||||||
|
"workspaceMount": "source=${localWorkspaceFolder},target=/app,type=bind",
|
||||||
|
"runArgs": [
|
||||||
|
"--network",
|
||||||
|
"host",
|
||||||
|
"--runtime=nvidia",
|
||||||
|
"--gpus",
|
||||||
|
"all",
|
||||||
|
"-e",
|
||||||
|
"LOCAL_DB_HOST=${localEnv:LOCAL_DB_HOST}",
|
||||||
|
"-e",
|
||||||
|
"LOCAL_DB_PASSWORD=${localEnv:LOCAL_DB_PASSWORD}",
|
||||||
|
"-e",
|
||||||
|
"MYSQL_ROOT_PASSWORD=${localEnv:MYSQL_ROOT_PASSWORD}",
|
||||||
|
"-e",
|
||||||
|
"LLM_MODEL=${localEnv:LLM_MODEL}",
|
||||||
|
"-e",
|
||||||
|
"LANGUAGE=${localEnv:LANGUAGE}",
|
||||||
|
"-e",
|
||||||
|
"PROXY_SERVER_URL=${localEnv:PROXY_SERVER_URL}",
|
||||||
|
"-e",
|
||||||
|
"HF_HOME=/app/models"
|
||||||
|
],
|
||||||
|
"mounts": [
|
||||||
|
// sharing-git-credentials see https://code.visualstudio.com/remote/advancedcontainers/sharing-git-credentials
|
||||||
|
"source=${localEnv:SSH_AUTH_SOCK},target=/run/host-services/ssh-auth.sock,type=bind",
|
||||||
|
// mount to local models
|
||||||
|
"source=${localWorkspaceFolder}/models/text2vec-large-chinese,target=/app/models/text2vec-large-chinese,type=bind"
|
||||||
|
],
|
||||||
|
"containerEnv": {
|
||||||
|
"SSH_AUTH_SOCK": "/run/host-services/ssh-auth.sock"
|
||||||
|
},
|
||||||
|
"postCreateCommand": "chmod +x /app/.devcontainer/post-create.sh && /app/.devcontainer/post-create.sh",
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"settings": {
|
||||||
|
"extensions.verifySignature": false,
|
||||||
|
"http.proxyStrictSSL": false,
|
||||||
|
"python.linting.flake8Enabled": true,
|
||||||
|
"python.languageServer": "Pylance",
|
||||||
|
"python.linting.enabled": true,
|
||||||
|
"terminal.integrated.defaultProfile.linux": "zsh",
|
||||||
|
"terminal.integrated.shell.linux": "/bin/zsh",
|
||||||
|
"python.linting.mypyEnabled": true,
|
||||||
|
"python.linting.provider": "ruff",
|
||||||
|
"python.formatting.provider": "ruff"
|
||||||
|
},
|
||||||
|
"extensions": [
|
||||||
|
"ms-python.python",
|
||||||
|
"ms-python.isort",
|
||||||
|
"ms-python.vscode-pylance",
|
||||||
|
"ms-python.autopep8",
|
||||||
|
"ms-vscode.makefile-tools",
|
||||||
|
"ms-python.flake8",
|
||||||
|
"ms-azuretools.vscode-docker",
|
||||||
|
"ms-python.mypy-type-checker",
|
||||||
|
"charliermarsh.ruff"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
40
.devcontainer/Dockerfile.dev
Normal file
40
.devcontainer/Dockerfile.dev
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
FROM eosphorosai/dbgpt:latest
|
||||||
|
ARG EXTRAS="proxy_openai,rag,storage_chromadb,quant_bnb,graph_rag"
|
||||||
|
ARG PYTHON_VERSION=3.10
|
||||||
|
ARG USER_UID=1001
|
||||||
|
ARG USER_GID=1001
|
||||||
|
ARG USER=work
|
||||||
|
ARG PIP_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple"
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
COPY . .
|
||||||
|
USER root
|
||||||
|
# Set the GID and UID of the container and
|
||||||
|
# add a user to prevent permission mismatches
|
||||||
|
# between the container user (root) and the host user,
|
||||||
|
# and to resolve the issue of the host user lacking write permissions.
|
||||||
|
RUN groupadd -g $USER_GID $USER && \
|
||||||
|
useradd -u $USER_UID -g $USER_GID -m $USER && \
|
||||||
|
chown -R $USER_UID:$USER_GID /app
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
git \
|
||||||
|
curl \
|
||||||
|
wget \
|
||||||
|
ssh zsh autojump curl git-flow vim sudo \
|
||||||
|
&& python${PYTHON_VERSION} -m pip install --upgrade pip \
|
||||||
|
&& python${PYTHON_VERSION} -m pip install --upgrade pipx \
|
||||||
|
&& pipx install uv --global \
|
||||||
|
&& chown -R $USER:$USER /opt/.uv.venv \
|
||||||
|
&& echo "$USER ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/$USER \
|
||||||
|
&& chmod 0440 /etc/sudoers.d/$USER
|
||||||
|
USER $USER
|
||||||
|
ENV UV_LINK_MODE=copy
|
||||||
|
RUN /opt/.uv.venv/bin/python3 -m pip install uv -i https://mirrors.aliyun.com/pypi/simple/ && \
|
||||||
|
extras=$(echo $EXTRAS | tr ',' '\n' | while read extra; do echo "--extra $extra"; done | tr '\n' ' ') && \
|
||||||
|
echo $extras && \
|
||||||
|
/opt/.uv.venv/bin/uv pip install -r pyproject.toml --all-extras && \
|
||||||
|
/opt/.uv.venv/bin/uv pip install -r requirements/dev-requirements.txt && \
|
||||||
|
/opt/.uv.venv/bin/uv pip install -r requirements/lint-requirements.txt && \
|
||||||
|
cp .devcontainer/dbgpt.pth /opt/.uv.venv/lib/python3.10/site-packages/dbgpt.pth && \
|
||||||
|
python -c "import dbgpt; print(dbgpt.__version__)"
|
8
.devcontainer/dbgpt.pth
Normal file
8
.devcontainer/dbgpt.pth
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/app/packages/dbgpt-app/src
|
||||||
|
/app/packages/dbgpt-accelerator
|
||||||
|
/app/packages/dbgpt-accelerator/src
|
||||||
|
/app/packages/dbgpt-core/src
|
||||||
|
/app/packages/dbgpt-client/src
|
||||||
|
/app/packages/dbgpt-ext/src
|
||||||
|
/app/packages/dbgpt-serve/src
|
||||||
|
/app/packages/dbgpt-app/src
|
54
.devcontainer/post-create.sh
Executable file
54
.devcontainer/post-create.sh
Executable file
@ -0,0 +1,54 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
cd /app
|
||||||
|
# Install Oh My Zsh
|
||||||
|
if [ ! -d ~/.oh-my-zsh ]; then
|
||||||
|
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install plugins
|
||||||
|
plugins=(
|
||||||
|
"zsh-users/zsh-autosuggestions"
|
||||||
|
"zsh-users/zsh-syntax-highlighting"
|
||||||
|
)
|
||||||
|
|
||||||
|
for plugin in "${plugins[@]}"; do
|
||||||
|
repo_name=$(basename $plugin)
|
||||||
|
if [ ! -d ~/.oh-my-zsh/custom/plugins/$repo_name ]; then
|
||||||
|
git clone --depth=1 https://github.com/$plugin.git ~/.oh-my-zsh/custom/plugins/$repo_name
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Install theme
|
||||||
|
if [ ! -d ~/.oh-my-zsh/custom/themes/powerlevel10k ]; then
|
||||||
|
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/.oh-my-zsh/custom/themes/powerlevel10k
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Apply custom configuration
|
||||||
|
if [ -f /workspace/.devcontainer/zshrc-config ]; then
|
||||||
|
cp /workspace/.devcontainer/zshrc-config ~/.zshrc
|
||||||
|
else
|
||||||
|
# Generate basic .zshrc if no custom configuration exists
|
||||||
|
cat << EOF > ~/.zshrc
|
||||||
|
export ZSH="\$HOME/.oh-my-zsh"
|
||||||
|
ZSH_THEME="robbyrussell"
|
||||||
|
plugins=(git zsh-autosuggestions zsh-syntax-highlighting autojump)
|
||||||
|
source \$ZSH/oh-my-zsh.sh
|
||||||
|
|
||||||
|
# Enable autojump
|
||||||
|
[[ -s /usr/share/autojump/autojump.sh ]] && source /usr/share/autojump/autojump.sh
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure autojump configuration is applied (even if custom configuration exists)
|
||||||
|
if ! grep -q "autojump.sh" ~/.zshrc; then
|
||||||
|
echo '[[ -s /usr/share/autojump/autojump.sh ]] && source /usr/share/autojump/autojump.sh' >> ~/.zshrc
|
||||||
|
fi
|
||||||
|
cat << EOF >> ~/.zshrc
|
||||||
|
# Add the following to ~/.zshrc
|
||||||
|
if [ -f /app/.env ]; then
|
||||||
|
export $(grep -vE '^#|^$' /app/.env | xargs)
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
rm -rf .venv.make
|
||||||
|
echo "Post-create setup completed!"
|
7
Makefile
7
Makefile
@ -24,13 +24,14 @@ $(VENV)/.venv-timestamp: uv.lock
|
|||||||
testenv: $(VENV)/.testenv
|
testenv: $(VENV)/.testenv
|
||||||
|
|
||||||
$(VENV)/.testenv: $(VENV)/bin/activate
|
$(VENV)/.testenv: $(VENV)/bin/activate
|
||||||
uv sync --all-packages \
|
. $(VENV_BIN)/activate && uv sync --active --all-packages \
|
||||||
--extra "base" \
|
--extra "base" \
|
||||||
--extra "proxy_openai" \
|
--extra "proxy_openai" \
|
||||||
--extra "rag" \
|
--extra "rag" \
|
||||||
--extra "storage_chromadb" \
|
--extra "storage_chromadb" \
|
||||||
--extra "dbgpts" \
|
--extra "dbgpts" \
|
||||||
--link-mode=copy
|
--link-mode=copy
|
||||||
|
cp .devcontainer/dbgpt.pth $(VENV)/lib/python3.11/site-packages
|
||||||
touch $(VENV)/.testenv
|
touch $(VENV)/.testenv
|
||||||
|
|
||||||
|
|
||||||
@ -69,7 +70,7 @@ fmt-check: setup ## Check Python code formatting and style without making change
|
|||||||
pre-commit: fmt-check test test-doc mypy ## Run formatting and unit tests before committing
|
pre-commit: fmt-check test test-doc mypy ## Run formatting and unit tests before committing
|
||||||
|
|
||||||
test: $(VENV)/.testenv ## Run unit tests
|
test: $(VENV)/.testenv ## Run unit tests
|
||||||
$(VENV_BIN)/pytest dbgpt
|
$(VENV_BIN)/pytest --pyargs dbgpt
|
||||||
|
|
||||||
.PHONY: test-doc
|
.PHONY: test-doc
|
||||||
test-doc: $(VENV)/.testenv ## Run doctests
|
test-doc: $(VENV)/.testenv ## Run doctests
|
||||||
@ -88,7 +89,7 @@ mypy: $(VENV)/.testenv ## Run mypy checks
|
|||||||
|
|
||||||
.PHONY: coverage
|
.PHONY: coverage
|
||||||
coverage: setup ## Run tests and report coverage
|
coverage: setup ## Run tests and report coverage
|
||||||
$(VENV_BIN)/pytest dbgpt --cov=dbgpt
|
$(VENV_BIN)/pytest --pyargs dbgpt --cov=dbgpt
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean: ## Clean up the environment
|
clean: ## Clean up the environment
|
||||||
|
@ -28,7 +28,7 @@ members = [
|
|||||||
"packages/dbgpt-core",
|
"packages/dbgpt-core",
|
||||||
"packages/dbgpt-ext",
|
"packages/dbgpt-ext",
|
||||||
"packages/dbgpt-serve",
|
"packages/dbgpt-serve",
|
||||||
"packages/dbgpt-accelerator/*"
|
"packages/dbgpt-accelerator/dbgpt-acc*"
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.uv]
|
[tool.uv]
|
||||||
|
Loading…
Reference in New Issue
Block a user