|
|
@@ -20,6 +20,22 @@ RESET=\033[0m
|
|
|
# Build
|
|
|
build:
|
|
|
@echo "$(GREEN)Building project...$(RESET)"
|
|
|
+ @$(MAKE) -s check-dependencies
|
|
|
+ @$(MAKE) -s pull-docker-image
|
|
|
+ @$(MAKE) -s install-python-dependencies
|
|
|
+ @$(MAKE) -s install-frontend-dependencies
|
|
|
+ @$(MAKE) -s install-precommit-hooks
|
|
|
+ @echo "$(GREEN)Build completed successfully.$(RESET)"
|
|
|
+
|
|
|
+check-dependencies:
|
|
|
+ @echo "$(YELLOW)Checking dependencies...$(RESET)"
|
|
|
+ @$(MAKE) -s check-python
|
|
|
+ @$(MAKE) -s check-npm
|
|
|
+ @$(MAKE) -s check-docker
|
|
|
+ @$(MAKE) -s check-poetry
|
|
|
+ @echo "$(GREEN)Dependencies checked successfully.$(RESET)"
|
|
|
+
|
|
|
+check-python:
|
|
|
@echo "$(YELLOW)Checking Python installation...$(RESET)"
|
|
|
@if command -v python3 > /dev/null; then \
|
|
|
echo "$(BLUE)$(shell python3 --version) is already installed.$(RESET)"; \
|
|
|
@@ -27,6 +43,8 @@ build:
|
|
|
echo "$(RED)Python 3 is not installed. Please install Python 3 to continue.$(RESET)"; \
|
|
|
exit 1; \
|
|
|
fi
|
|
|
+
|
|
|
+check-npm:
|
|
|
@echo "$(YELLOW)Checking npm installation...$(RESET)"
|
|
|
@if command -v npm > /dev/null; then \
|
|
|
echo "$(BLUE)npm $(shell npm --version) is already installed.$(RESET)"; \
|
|
|
@@ -34,6 +52,8 @@ build:
|
|
|
echo "$(RED)npm is not installed. Please install Node.js to continue.$(RESET)"; \
|
|
|
exit 1; \
|
|
|
fi
|
|
|
+
|
|
|
+check-docker:
|
|
|
@echo "$(YELLOW)Checking Docker installation...$(RESET)"
|
|
|
@if command -v docker > /dev/null; then \
|
|
|
echo "$(BLUE)$(shell docker --version) is already installed.$(RESET)"; \
|
|
|
@@ -41,20 +61,35 @@ build:
|
|
|
echo "$(RED)Docker is not installed. Please install Docker to continue.$(RESET)"; \
|
|
|
exit 1; \
|
|
|
fi
|
|
|
- @echo "$(GREEN)Installing Python dependencies...$(RESET)"
|
|
|
+
|
|
|
+check-poetry:
|
|
|
+ @echo "$(YELLOW)Checking Poetry installation...$(RESET)"
|
|
|
@if command -v poetry > /dev/null; then \
|
|
|
- echo "$(BLUE)Poetry is already installed.$(RESET)"; \
|
|
|
+ echo "$(BLUE)$(shell poetry --version) is already installed.$(RESET)"; \
|
|
|
else \
|
|
|
- echo "$(YELLOW)Poetry is not installed. You can install poetry by running the following command, then adding Poetry to your PATH:"; \
|
|
|
- echo "$(YELLOW) curl -sSL https://install.python-poetry.org | python3 -$(RESET)"; \
|
|
|
- echo "$(YELLOW)More detail here: https://python-poetry.org/docs/#installing-with-the-official-installer$(RESET)"; \
|
|
|
+ echo "$(RED)Poetry is not installed. You can install poetry by running the following command, then adding Poetry to your PATH:"; \
|
|
|
+ echo "$(RED) curl -sSL https://install.python-poetry.org | python3 -$(RESET)"; \
|
|
|
+ echo "$(RED)More detail here: https://python-poetry.org/docs/#installing-with-the-official-installer$(RESET)"; \
|
|
|
exit 1; \
|
|
|
fi
|
|
|
- @echo "$(GREEN)Pulling Docker image...$(RESET)"
|
|
|
+
|
|
|
+pull-docker-image:
|
|
|
+ @echo "$(YELLOW)Pulling Docker image...$(RESET)"
|
|
|
@docker pull $(DOCKER_IMAGE)
|
|
|
+ @echo "$(GREEN)Docker image pulled successfully.$(RESET)"
|
|
|
+
|
|
|
+install-python-dependencies:
|
|
|
+ @echo "$(GREEN)Installing Python dependencies...$(RESET)"
|
|
|
+ @if [ "$(shell uname)" = "Darwin" ]; then \
|
|
|
+ echo "$(BLUE)Installing `chroma-hnswlib`...$(RESET)"; \
|
|
|
+ export HNSWLIB_NO_NATIVE=1; \
|
|
|
+ poetry run pip install chroma-hnswlib; \
|
|
|
+ fi
|
|
|
@poetry install --without evaluation
|
|
|
- @echo "$(GREEN)Activating Poetry shell...$(RESET)"
|
|
|
- @echo "$(GREEN)Setting up frontend environment...$(RESET)"
|
|
|
+ @echo "$(GREEN)Python dependencies installed successfully.$(RESET)"
|
|
|
+
|
|
|
+install-frontend-dependencies:
|
|
|
+ @echo "$(YELLOW)Setting up frontend environment...$(RESET)"
|
|
|
@echo "$(YELLOW)Detect Node.js version...$(RESET)"
|
|
|
@cd frontend && node ./scripts/detect-node-version.js
|
|
|
@cd frontend && \
|
|
|
@@ -62,29 +97,33 @@ build:
|
|
|
npm install && \
|
|
|
echo "$(BLUE)Running make-i18n with npm...$(RESET)" && \
|
|
|
npm run make-i18n
|
|
|
- @echo "$(GREEN)Installing pre-commit hooks...$(RESET)"
|
|
|
+ @echo "$(GREEN)Frontend dependencies installed successfully.$(RESET)"
|
|
|
+
|
|
|
+install-precommit-hooks:
|
|
|
+ @echo "$(YELLOW)Installing pre-commit hooks...$(RESET)"
|
|
|
@git config --unset-all core.hooksPath || true
|
|
|
@poetry run pre-commit install --config $(PRECOMMIT_CONFIG_PATH)
|
|
|
- @echo "$(GREEN)Build completed successfully.$(RESET)"
|
|
|
+ @echo "$(GREEN)Pre-commit hooks installed successfully.$(RESET)"
|
|
|
|
|
|
# Start backend
|
|
|
start-backend:
|
|
|
- @echo "$(GREEN)Starting backend...$(RESET)"
|
|
|
+ @echo "$(YELLOW)Starting backend...$(RESET)"
|
|
|
@poetry run uvicorn opendevin.server.listen:app --port $(BACKEND_PORT)
|
|
|
|
|
|
# Start frontend
|
|
|
start-frontend:
|
|
|
- @echo "$(GREEN)Starting frontend...$(RESET)"
|
|
|
+ @echo "$(YELLOW)Starting frontend...$(RESET)"
|
|
|
@cd frontend && BACKEND_HOST=$(BACKEND_HOST) FRONTEND_PORT=$(FRONTEND_PORT) npm run start
|
|
|
|
|
|
# Run the app
|
|
|
run:
|
|
|
- @echo "$(GREEN)Running the app...$(RESET)"
|
|
|
+ @echo "$(YELLOW)Running the app...$(RESET)"
|
|
|
@if [ "$(OS)" = "Windows_NT" ]; then \
|
|
|
echo "$(RED)`make run` is not supported on Windows. Please run `make start-frontend` and `make start-backend` separately.$(RESET)"; \
|
|
|
exit 1; \
|
|
|
fi
|
|
|
@mkdir -p logs
|
|
|
+ @echo "$(YELLOW)Starting backend server...$(RESET)"
|
|
|
@poetry run nohup uvicorn opendevin.server.listen:app --port $(BACKEND_PORT) > logs/backend_$(shell date +'%Y%m%d_%H%M%S').log 2>&1 &
|
|
|
@echo "$(YELLOW)Waiting for the backend to start...$(RESET)"
|
|
|
@until nc -z localhost $(BACKEND_PORT); do sleep 0.1; done
|
|
|
@@ -94,7 +133,12 @@ run:
|
|
|
|
|
|
# Setup config.toml
|
|
|
setup-config:
|
|
|
- @echo "$(GREEN)Setting up config.toml...$(RESET)"
|
|
|
+ @echo "$(YELLOW)Setting up config.toml...$(RESET)"
|
|
|
+ @$(MAKE) setup-config-prompts
|
|
|
+ @mv $(CONFIG_FILE).tmp $(CONFIG_FILE)
|
|
|
+ @echo "$(GREEN)Config.toml setup completed.$(RESET)"
|
|
|
+
|
|
|
+setup-config-prompts:
|
|
|
@read -p "Enter your LLM Model name (see https://docs.litellm.ai/docs/providers for full list) [default: $(DEFAULT_MODEL)]: " llm_model; \
|
|
|
llm_model=$${llm_model:-$(DEFAULT_MODEL)}; \
|
|
|
echo "LLM_MODEL=\"$$llm_model\"" > $(CONFIG_FILE).tmp
|
|
|
@@ -124,22 +168,18 @@ setup-config:
|
|
|
workspace_dir=$${workspace_dir:-$(DEFAULT_WORKSPACE_DIR)}; \
|
|
|
echo "WORKSPACE_DIR=\"$$workspace_dir\"" >> $(CONFIG_FILE).tmp
|
|
|
|
|
|
- @mv $(CONFIG_FILE).tmp $(CONFIG_FILE)
|
|
|
- @echo "$(GREEN)Config.toml setup completed.$(RESET)"
|
|
|
-
|
|
|
# Help
|
|
|
help:
|
|
|
@echo "$(BLUE)Usage: make [target]$(RESET)"
|
|
|
@echo "Targets:"
|
|
|
@echo " $(GREEN)build$(RESET) - Build project, including environment setup and dependencies."
|
|
|
- @echo " $(GREEN)build-eval$(RESET) - Build project evaluation pipeline, including environment setup and dependencies."
|
|
|
+ @echo " $(GREEN)setup-config$(RESET) - Setup the configuration for OpenDevin by providing LLM API key,"
|
|
|
+ @echo " LLM Model name, and workspace directory."
|
|
|
@echo " $(GREEN)start-backend$(RESET) - Start the backend server for the OpenDevin project."
|
|
|
@echo " $(GREEN)start-frontend$(RESET) - Start the frontend server for the OpenDevin project."
|
|
|
@echo " $(GREEN)run$(RESET) - Run the OpenDevin application, starting both backend and frontend servers."
|
|
|
@echo " Backend Log file will be stored in the 'logs' directory."
|
|
|
- @echo " $(GREEN)setup-config$(RESET) - Setup the configuration for OpenDevin by providing LLM API key,"
|
|
|
- @echo " LLM Model name, and workspace directory."
|
|
|
@echo " $(GREEN)help$(RESET) - Display this help message, providing information on available targets."
|
|
|
|
|
|
# Phony targets
|
|
|
-.PHONY: build build-eval start-backend start-frontend run setup-config help
|
|
|
+.PHONY: build check-dependencies check-python check-npm check-docker check-poetry pull-docker-image install-python-dependencies install-frontend-dependencies install-precommit-hooks start-backend start-frontend run setup-config setup-config-prompts help
|