From c097a06fbec29853185810854359cd0e69b20209 Mon Sep 17 00:00:00 2001 From: Jason Wang <56037774+JasonW404@users.noreply.github.com> Date: Tue, 25 Nov 2025 17:37:28 +0800 Subject: [PATCH] feat: Improve makefile readability, Add user control on volume keep at uninstallation, Add Label Studio install and uninstall via Make. (#106) * feature: Add label studio installation and uninstallation commands to Makefile * feature: Enhance Makefile with detailed help commands and improve install/uninstall targets for services * feature: Update Makefile help commands to clarify usage of local images * feature: Improve error handling in Makefile for build, install, and uninstall targets * feature: Enhance uninstall process in Makefile to prompt for volume deletion and update README with usage details --------- Co-authored-by: Jason Wang --- .gitignore | 3 + Makefile | 494 ++++++++++++++++++++++++++++++++------------------- README-zh.md | 8 + README.md | 8 + 4 files changed, 333 insertions(+), 180 deletions(-) diff --git a/.gitignore b/.gitignore index 0136fb7..c0906e8 100644 --- a/.gitignore +++ b/.gitignore @@ -187,3 +187,6 @@ Thumbs.db .vscode/ *.sublime-project *.sublime-workspace + +# Milvus +deployment/docker/milvus/volumes/ \ No newline at end of file diff --git a/Makefile b/Makefile index 4c86514..5b20247 100644 --- a/Makefile +++ b/Makefile @@ -3,30 +3,81 @@ MAKEFLAGS += --no-print-directory WITH_MINERU ?= false # 默认不构建mineru VERSION ?= latest NAMESPACE ?= datamate -REGISTRY ?= "ghcr.io/modelengine-group/" + +# Registry configuration: use --dev for local images, otherwise use GitHub registry +ifdef dev + REGISTRY := +else + REGISTRY ?= ghcr.io/modelengine-group/ +endif ifdef COMSPEC - # Windows 环境 + # Windows MAKE := "C:/Program Files (x86)/GnuWin32/bin/make" else - # Linux/Mac 环境 + # Linux/Mac MAKE := make endif -.PHONY: build-% -build-%: - $(MAKE) $*-docker-build +# ========== Help ========== -.PHONY: build -build: database-docker-build backend-docker-build frontend-docker-build runtime-docker-build backend-python-docker-build +.PHONY: help +help: + @echo "DataMate Makefile - Available Commands" + @echo "" + @echo "Usage: make [options]" + @echo "" + @echo "Options:" + @echo " dev=true Use local images instead of registry (empty REGISTRY)" + @echo " VERSION= Set image version (default: latest)" + @echo " NAMESPACE= Set Kubernetes namespace (default: datamate)" + @echo " INSTALLER= Set installer type: docker or k8s" + @echo "" + @echo "Build Commands:" + @echo " make build Build all core images" + @echo " make -docker-build Build specific service image" + @echo " Valid services: backend, database, frontend, runtime," + @echo " backend-python, deer-flow, mineru" + @echo "" + @echo "Install Commands:" + @echo " make install Install datamate + milvus (prompts for method)" + @echo " make install INSTALLER=docker Install using Docker Compose" + @echo " make install INSTALLER=k8s Install using Kubernetes/Helm" + @echo " make install- Install specific component (prompts)" + @echo " make -docker-install Install component via Docker" + @echo " make -k8s-install Install component via Kubernetes" + @echo " Valid components: datamate, milvus, deer-flow, mineru" + @echo " Valid services: backend, frontend, runtime, label-studio" + @echo "" + @echo "Uninstall Commands:" + @echo " make uninstall Uninstall datamate + milvus (prompts)" + @echo " make uninstall INSTALLER=docker Uninstall using Docker Compose" + @echo " make uninstall INSTALLER=k8s Uninstall using Kubernetes/Helm" + @echo " make uninstall- Uninstall specific component (prompts)" + @echo " make -docker-uninstall Uninstall component via Docker" + @echo " make -k8s-uninstall Uninstall component via Kubernetes" + @echo " Note: Docker uninstall will prompt whether to delete volumes" + @echo "" + @echo "Upgrade Commands:" + @echo " make datamate-docker-upgrade Upgrade datamate deployment" + @echo "" + @echo "Utility Commands:" + @echo " make create-namespace Create Kubernetes namespace" + @echo " make help Show this help message" + @echo "" + @echo "Examples:" + @echo " make build dev=true Build all images for local development" + @echo " make install INSTALLER=docker Install via Docker Compose" + @echo " make install dev=true Install using local images" + @echo " make datamate-docker-upgrade Upgrade running datamate services" + @echo "" -.PHONY: create-namespace -create-namespace: - kubectl get namespace $(NAMESPACE) > /dev/null 2>&1 || kubectl create namespace $(NAMESPACE) +.DEFAULT_GOAL := help -.PHONY: install-% -install-%: -ifeq ($(origin INSTALLER), undefined) +# ========== Functions ========== + +# Prompt user to choose installer if not specified +define prompt-installer @echo "Choose a deployment method:" @echo "1. Docker/Docker-Compose" @echo "2. Kubernetes/Helm" @@ -37,7 +88,99 @@ ifeq ($(origin INSTALLER), undefined) 2) INSTALLER=k8s ;; \ *) echo "Invalid choice" && exit 1 ;; \ esac; \ - $(MAKE) $*-$$INSTALLER-install + $(MAKE) $(1) +endef + +# Prompt user to choose installer and volume deletion for uninstall +define prompt-uninstaller + @echo "Choose a deployment method:" + @echo "1. Docker/Docker-Compose" + @echo "2. Kubernetes/Helm" + @echo -n "Enter choice: " + @read installer_choice; \ + case $$installer_choice in \ + 1) INSTALLER=docker ;; \ + 2) INSTALLER=k8s ;; \ + *) echo "Invalid choice" && exit 1 ;; \ + esac; \ + if [ "$$INSTALLER" = "docker" ]; then \ + echo "Delete volumes? (This will remove all data)"; \ + echo "1. Yes - Delete volumes"; \ + echo "2. No - Keep volumes"; \ + echo -n "Enter choice (default: 2): "; \ + read DELETE_VOLUMES_CHOICE; \ + $(MAKE) $(1) DELETE_VOLUMES_CHOICE=$$DELETE_VOLUMES_CHOICE; \ + else \ + $(MAKE) $(1); \ + fi +endef + +# Generic docker build function +# Usage: $(call docker-build,service-name,image-name) +define docker-build + docker build -t $(2):$(VERSION) . -f scripts/images/$(1)/Dockerfile +endef + +# Generic docker compose service action +# Usage: $(call docker-compose-service,service-name,action,compose-dir) +define docker-compose-service + cd $(3) && docker compose $(2) $(1) +endef + +# Prompt user to choose whether to delete volumes +define prompt-volume-deletion + @echo "Delete volumes? (This will remove all data)" + @echo "1. Yes - Delete volumes" + @echo "2. No - Keep volumes" + @echo -n "Enter choice (default: 2): " + @read choice; \ + case $$choice in \ + 1) echo "-v" ;; \ + *) echo "" ;; \ + esac +endef + +# ========== Build Targets ========== + +# Valid build targets +VALID_BUILD_TARGETS := backend database frontend runtime backend-python deer-flow mineru + +# Generic docker build target with service name as parameter +# Automatically prefixes image names with "datamate-" unless it's deer-flow +.PHONY: %-docker-build +%-docker-build: + @if ! echo " $(VALID_BUILD_TARGETS) " | grep -q " $* "; then \ + echo "Error: Unknown build target '$*'"; \ + echo "Valid build targets are:"; \ + for target in $(VALID_BUILD_TARGETS); do \ + echo " - $$target"; \ + done; \ + exit 1; \ + fi + @if [ "$*" = "deer-flow" ]; then \ + cp -n runtime/deer-flow/.env.example runtime/deer-flow/.env; \ + cp -n runtime/deer-flow/conf.yaml.example runtime/deer-flow/conf.yaml; \ + $(call docker-build,deer-flow-backend,deer-flow-backend); \ + $(call docker-build,deer-flow-frontend,deer-flow-frontend); \ + else \ + $(call docker-build,$*,datamate-$*); \ + fi + +.PHONY: build +build: database-docker-build backend-docker-build frontend-docker-build runtime-docker-build backend-python-docker-build + +# ========== Utility Targets ========== + +.PHONY: create-namespace +create-namespace: + kubectl get namespace $(NAMESPACE) > /dev/null 2>&1 || kubectl create namespace $(NAMESPACE) + +# ========== Generic Install/Uninstall Targets (Redirect to prompt-installer) ========== + +.PHONY: install-% +install-%: +ifeq ($(origin INSTALLER), undefined) + $(call prompt-installer,$*-$$INSTALLER-install) else $(MAKE) $*-$(INSTALLER)-install endif @@ -45,37 +188,16 @@ endif .PHONY: install install: ifeq ($(origin INSTALLER), undefined) - @echo "Choose a deployment method:" - @echo "1. Docker/Docker-Compose" - @echo "2. Kubernetes/Helm" - @echo -n "Enter choice: " - @read choice; \ - case $$choice in \ - 1) INSTALLER=docker ;; \ - 2) INSTALLER=k8s ;; \ - *) echo "Invalid choice" && exit 1 ;; \ - esac; \ - $(MAKE) datamate-$$INSTALLER-install; \ - $(MAKE) milvus-$$INSTALLER-install + $(call prompt-installer,datamate-$$INSTALLER-install milvus-$$INSTALLER-install) else - $(MAKE) datamate-$(INSTALLER)-install; \ + $(MAKE) datamate-$(INSTALLER)-install $(MAKE) milvus-$(INSTALLER)-install endif .PHONY: uninstall-% uninstall-%: ifeq ($(origin INSTALLER), undefined) - @echo "Choose a deployment method:" - @echo "1. Docker/Docker-Compose" - @echo "2. Kubernetes/Helm" - @echo -n "Enter choice: " - @read choice; \ - case $$choice in \ - 1) INSTALLER=docker ;; \ - 2) INSTALLER=k8s ;; \ - *) echo "Invalid choice" && exit 1 ;; \ - esac; \ - $(MAKE) $*-$$INSTALLER-uninstall + $(call prompt-uninstaller,$*-$$INSTALLER-uninstall) else $(MAKE) $*-$(INSTALLER)-uninstall endif @@ -83,157 +205,169 @@ endif .PHONY: uninstall uninstall: ifeq ($(origin INSTALLER), undefined) - @echo "Choose a deployment method:" - @echo "1. Docker/Docker-Compose" - @echo "2. Kubernetes/Helm" - @echo -n "Enter choice: " - @read choice; \ - case $$choice in \ - 1) INSTALLER=docker ;; \ - 2) INSTALLER=k8s ;; \ - *) echo "Invalid choice" && exit 1 ;; \ - esac; \ - $(MAKE) milvus-$$INSTALLER-uninstall; \ - $(MAKE) datamate-$$INSTALLER-uninstall + $(call prompt-uninstaller,milvus-$$INSTALLER-uninstall label-studio-$$INSTALLER-uninstall datamate-$$INSTALLER-uninstall) else - $(MAKE) milvus-$(INSTALLER)-uninstall; \ - $(MAKE) datamate-$(INSTALLER)-uninstall + @echo "Delete volumes? (This will remove all data)"; \ + echo "1. Yes - Delete volumes"; \ + echo "2. No - Keep volumes"; \ + echo -n "Enter choice (default: 2): "; \ + read DELETE_VOLUMES_CHOICE; \ + export DELETE_VOLUMES_CHOICE; \ + $(MAKE) milvus-$(INSTALLER)-uninstall DELETE_VOLUMES_CHOICE=$$DELETE_VOLUMES_CHOICE; \ + $(MAKE) label-studio-$(INSTALLER)-uninstall DELETE_VOLUMES_CHOICE=$$DELETE_VOLUMES_CHOICE; \ + $(MAKE) datamate-$(INSTALLER)-uninstall DELETE_VOLUMES_CHOICE=$$DELETE_VOLUMES_CHOICE endif -# build -.PHONY: backend-docker-build -backend-docker-build: - docker build -t datamate-backend:$(VERSION) . -f scripts/images/backend/Dockerfile +# ========== Docker Install/Uninstall Targets ========== -.PHONY: database-docker-build -database-docker-build: - docker build -t datamate-database:$(VERSION) . -f scripts/images/database/Dockerfile +# Valid service targets for docker install/uninstall +VALID_SERVICE_TARGETS := datamate backend frontend runtime mineru "deer-flow" milvus "label-studio" -.PHONY: frontend-docker-build -frontend-docker-build: - docker build -t datamate-frontend:$(VERSION) . -f scripts/images/frontend/Dockerfile - -.PHONY: runtime-docker-build -runtime-docker-build: - docker build -t datamate-runtime:$(VERSION) . -f scripts/images/runtime/Dockerfile - -.PHONY: backend-python-docker-build -backend-python-docker-build: - docker build -t datamate-backend-python:$(VERSION) . -f scripts/images/backend-python/Dockerfile - -.PHONY: deer-flow-docker-build -deer-flow-docker-build: - cp -n runtime/deer-flow/.env.example runtime/deer-flow/.env - cp -n runtime/deer-flow/conf.yaml.example runtime/deer-flow/conf.yaml - docker build -t deer-flow-backend:$(VERSION) . -f scripts/images/deer-flow-backend/Dockerfile - docker build -t deer-flow-frontend:$(VERSION) . -f scripts/images/deer-flow-frontend/Dockerfile - -.PHONY: mineru-docker-build -mineru-docker-build: - docker build -t datamate-mineru:$(VERSION) . -f scripts/images/mineru/Dockerfile - -.PHONY: backend-docker-install -backend-docker-install: - cd deployment/docker/datamate && docker compose up -d backend - -.PHONY: backend-docker-uninstall -backend-docker-uninstall: - cd deployment/docker/datamate && docker compose down backend - -.PHONY: frontend-docker-install -frontend-docker-install: - cd deployment/docker/datamate && docker compose up -d frontend - -.PHONY: frontend-docker-uninstall -frontend-docker-uninstall: - cd deployment/docker/datamate && docker compose down frontend - -.PHONY: runtime-docker-install -runtime-docker-install: - cd deployment/docker/datamate && docker compose up -d runtime - -.PHONY: runtime-docker-uninstall -runtime-docker-uninstall: - cd deployment/docker/datamate && docker compose down runtime - -.PHONY: mineru-docker-install -mineru-docker-install: - cd deployment/docker/datamate && export REGISTRY=$(REGISTRY) && docker compose up -d datamate-mineru - -.PHONY: mineru-docker-uninstall -mineru-docker-uninstall: - cd deployment/docker/datamate && docker compose down datamate-mineru - -.PHONY: mineru-k8s-install -mineru-k8s-install: create-namespace - kubectl apply -f deployment/kubernetes/mineru/deploy.yaml -n $(NAMESPACE) - -.PHONY: mineru-k8s-uninstall -mineru-k8s-uninstall: - kubectl delete -f deployment/kubernetes/mineru/deploy.yaml -n $(NAMESPACE) - -.PHONY: datamate-docker-install -datamate-docker-install: - @if docker compose ls --filter name=deer-flow | grep -q deer-flow; then \ +# Generic docker service install target +.PHONY: %-docker-install +%-docker-install: + @if ! echo " $(VALID_SERVICE_TARGETS) " | grep -q " $* "; then \ + echo "Error: Unknown service target '$*'"; \ + echo "Valid service targets are:"; \ + for target in $(VALID_SERVICE_TARGETS); do \ + echo " - $$target"; \ + done; \ + exit 1; \ + fi + @if [ "$*" = "label-studio" ]; then \ + $(call docker-compose-service,label-studio,up -d,deployment/docker/label-studio); \ + elif [ "$*" = "mineru" ]; then \ + cd deployment/docker/datamate && export REGISTRY=$(REGISTRY) && docker compose up -d datamate-mineru; \ + elif [ "$*" = "datamate" ]; then \ + if docker compose ls --filter name=deer-flow | grep -q deer-flow; then \ + (cd deployment/docker/datamate && NGINX_CONF="./backend-with-deer-flow.conf" REGISTRY=$(REGISTRY) docker compose -f docker-compose.yml up -d) && \ + $(MAKE) label-studio-docker-install; \ + else \ + (cd deployment/docker/datamate && REGISTRY=$(REGISTRY) docker compose -f docker-compose.yml up -d) && \ + $(MAKE) label-studio-docker-install; \ + fi; \ + elif [ "$*" = "deer-flow" ]; then \ cd deployment/docker/datamate && export NGINX_CONF="./backend-with-deer-flow.conf" && export REGISTRY=$(REGISTRY) && docker compose -f docker-compose.yml up -d; \ + cp -n runtime/deer-flow/.env.example runtime/deer-flow/.env; \ + cp -n runtime/deer-flow/conf.yaml.example runtime/deer-flow/conf.yaml; \ + cp runtime/deer-flow/.env deployment/docker/deer-flow/.env; \ + cp runtime/deer-flow/conf.yaml deployment/docker/deer-flow/conf.yaml; \ + cd deployment/docker/deer-flow && export REGISTRY=$(REGISTRY) && docker compose -f docker-compose.yml up -d; \ + elif [ "$*" = "milvus" ]; then \ + cd deployment/docker/milvus && docker compose -f docker-compose.yml up -d; \ else \ - cd deployment/docker/datamate && export REGISTRY=$(REGISTRY) && docker compose -f docker-compose.yml up -d; \ + $(call docker-compose-service,$*,up -d,deployment/docker/datamate); \ fi -.PHONY: datamate-docker-uninstall -datamate-docker-uninstall: - cd deployment/docker/datamate && docker compose -f docker-compose.yml --profile mineru down -v - -.PHONY: deer-flow-docker-install -deer-flow-docker-install: - cd deployment/docker/datamate && export NGINX_CONF="./backend-with-deer-flow.conf" && export REGISTRY=$(REGISTRY) && docker compose -f docker-compose.yml up -d - cp -n runtime/deer-flow/.env.example runtime/deer-flow/.env - cp -n runtime/deer-flow/conf.yaml.example runtime/deer-flow/conf.yaml - cp runtime/deer-flow/.env deployment/docker/deer-flow/.env - cp runtime/deer-flow/conf.yaml deployment/docker/deer-flow/conf.yaml - cd deployment/docker/deer-flow && export REGISTRY=$(REGISTRY) && docker compose -f docker-compose.yml up -d - -.PHONY: deer-flow-docker-uninstall -deer-flow-docker-uninstall: - @if docker compose ls --filter name=datamate | grep -q datamate; then \ - cd deployment/docker/datamate && export REGISTRY=$(REGISTRY) && docker compose -f docker-compose.yml up -d; \ +# Generic docker service uninstall target +.PHONY: %-docker-uninstall +%-docker-uninstall: + @if ! echo " $(VALID_SERVICE_TARGETS) " | grep -q " $* "; then \ + echo "Error: Unknown service target '$*'"; \ + echo "Valid service targets are:"; \ + for target in $(VALID_SERVICE_TARGETS); do \ + echo " - $$target"; \ + done; \ + exit 1; \ fi - cd deployment/docker/deer-flow && docker compose -f docker-compose.yml down - -.PHONY: milvus-docker-install -milvus-docker-install: - cd deployment/docker/milvus && docker compose -f docker-compose.yml up -d - -.PHONY: milvus-docker-uninstall -milvus-docker-uninstall: - cd deployment/docker/milvus && docker compose -f docker-compose.yml down - -.PHONY: datamate-k8s-install -datamate-k8s-install: create-namespace - helm upgrade datamate deployment/helm/datamate/ -n $(NAMESPACE) --install --set global.image.repository=$(REGISTRY) - -.PHONY: datamate-k8s-uninstall -datamate-k8s-uninstall: - helm uninstall datamate -n $(NAMESPACE) --ignore-not-found - -.PHONY: deer-flow-k8s-install -deer-flow-k8s-install: - helm upgrade datamate deployment/helm/datamate/ -n $(NAMESPACE) --install --set global.deerFlow.enable=true --set global.image.repository=$(REGISTRY) - cp runtime/deer-flow/.env deployment/helm/deer-flow/charts/public/.env - cp runtime/deer-flow/conf.yaml deployment/helm/deer-flow/charts/public/conf.yaml - helm upgrade deer-flow deployment/helm/deer-flow -n $(NAMESPACE) --install --set global.image.repository=$(REGISTRY) - -.PHONY: deer-flow-k8s-uninstall -deer-flow-k8s-uninstall: - helm uninstall deer-flow -n $(NAMESPACE) --ignore-not-found - @if helm ls -n $(NAMESPACE) --filter datamate | grep -q datamate; then \ - helm upgrade datamate deployment/helm/datamate/ -n $(NAMESPACE) --set global.deerFlow.enable=false; \ + @if [ "$*" = "label-studio" ]; then \ + if [ "$(DELETE_VOLUMES_CHOICE)" = "1" ]; then \ + cd deployment/docker/label-studio && docker compose down -v; \ + else \ + cd deployment/docker/label-studio && docker compose down; \ + fi; \ + elif [ "$*" = "mineru" ]; then \ + $(call docker-compose-service,datamate-mineru,down,deployment/docker/datamate); \ + elif [ "$*" = "datamate" ]; then \ + if [ "$(DELETE_VOLUMES_CHOICE)" = "1" ]; then \ + cd deployment/docker/datamate && docker compose -f docker-compose.yml --profile mineru down -v; \ + else \ + cd deployment/docker/datamate && docker compose -f docker-compose.yml --profile mineru down; \ + fi; \ + elif [ "$*" = "deer-flow" ]; then \ + if docker compose ls --filter name=datamate | grep -q datamate; then \ + cd deployment/docker/datamate && export REGISTRY=$(REGISTRY) && docker compose -f docker-compose.yml up -d; \ + fi; \ + cd deployment/docker/deer-flow && docker compose -f docker-compose.yml down; \ + elif [ "$*" = "milvus" ]; then \ + if [ "$(DELETE_VOLUMES_CHOICE)" = "1" ]; then \ + cd deployment/docker/milvus && docker compose -f docker-compose.yml down -v; \ + else \ + cd deployment/docker/milvus && docker compose -f docker-compose.yml down; \ + fi; \ + else \ + $(call docker-compose-service,$*,down,deployment/docker/datamate); \ fi -.PHONY: milvus-k8s-install -milvus-k8s-install: - helm upgrade milvus deployment/helm/milvus -n $(NAMESPACE) --install +# ========== Kubernetes Install/Uninstall Targets ========== -.PHONY: milvus-k8s-uninstall -milvus-k8s-uninstall: - helm uninstall milvus -n $(NAMESPACE) --ignore-not-found \ No newline at end of file +# Valid k8s targets +VALID_K8S_TARGETS := mineru datamate deer-flow milvus + +# Generic k8s install target +.PHONY: %-k8s-install +%-k8s-install: create-namespace + @if ! echo " $(VALID_K8S_TARGETS) " | grep -q " $* "; then \ + echo "Error: Unknown k8s target '$*'"; \ + echo "Valid k8s targets are:"; \ + for target in $(VALID_K8S_TARGETS); do \ + echo " - $$target"; \ + done; \ + exit 1; \ + fi + @if [ "$*" = "mineru" ]; then \ + kubectl apply -f deployment/kubernetes/mineru/deploy.yaml -n $(NAMESPACE); \ + elif [ "$*" = "datamate" ]; then \ + helm upgrade datamate deployment/helm/datamate/ -n $(NAMESPACE) --install --set global.image.repository=$(REGISTRY); \ + elif [ "$*" = "deer-flow" ]; then \ + helm upgrade datamate deployment/helm/datamate/ -n $(NAMESPACE) --install --set global.deerFlow.enable=true --set global.image.repository=$(REGISTRY); \ + cp runtime/deer-flow/.env deployment/helm/deer-flow/charts/public/.env; \ + cp runtime/deer-flow/conf.yaml deployment/helm/deer-flow/charts/public/conf.yaml; \ + helm upgrade deer-flow deployment/helm/deer-flow -n $(NAMESPACE) --install --set global.image.repository=$(REGISTRY); \ + elif [ "$*" = "milvus" ]; then \ + helm upgrade milvus deployment/helm/milvus -n $(NAMESPACE) --install; \ + fi + +# Generic k8s uninstall target +.PHONY: %-k8s-uninstall +%-k8s-uninstall: + @if ! echo " $(VALID_K8S_TARGETS) " | grep -q " $* "; then \ + echo "Error: Unknown k8s target '$*'"; \ + echo "Valid k8s targets are:"; \ + for target in $(VALID_K8S_TARGETS); do \ + echo " - $$target"; \ + done; \ + exit 1; \ + fi + @if [ "$*" = "mineru" ]; then \ + kubectl delete -f deployment/kubernetes/mineru/deploy.yaml -n $(NAMESPACE); \ + elif [ "$*" = "datamate" ]; then \ + helm uninstall datamate -n $(NAMESPACE) --ignore-not-found; \ + elif [ "$*" = "deer-flow" ]; then \ + helm uninstall deer-flow -n $(NAMESPACE) --ignore-not-found; \ + if helm ls -n $(NAMESPACE) --filter datamate | grep -q datamate; then \ + helm upgrade datamate deployment/helm/datamate/ -n $(NAMESPACE) --set global.deerFlow.enable=false; \ + fi; \ + elif [ "$*" = "milvus" ]; then \ + helm uninstall milvus -n $(NAMESPACE) --ignore-not-found; \ + fi + +# ========== Upgrade Targets ========== + +# Valid upgrade targets +VALID_UPGRADE_TARGETS := datamate + +# Generic docker upgrade target +.PHONY: %-docker-upgrade +%-docker-upgrade: + @if ! echo " $(VALID_UPGRADE_TARGETS) " | grep -q " $* "; then \ + echo "Error: Unknown upgrade target '$*'"; \ + echo "Valid upgrade targets are:"; \ + for target in $(VALID_UPGRADE_TARGETS); do \ + echo " - $$target"; \ + done; \ + exit 1; \ + fi + @if [ "$*" = "datamate" ]; then \ + cd deployment/docker/datamate && docker compose -f docker-compose.yml --profile mineru up -d --force-recreate --remove-orphans; \ + fi \ No newline at end of file diff --git a/README-zh.md b/README-zh.md index 921a3de..673b133 100644 --- a/README-zh.md +++ b/README-zh.md @@ -42,6 +42,8 @@ Choose a deployment method: Enter choice: ``` +在运行 `make uninstall` 时,卸载流程会只询问一次是否删除卷(数据),该选择会应用到所有组件。卸载顺序为:milvus -> label-studio -> datamate,确保在移除 datamate 网络前,所有使用该网络的服务已先停止。 + ### 拉取代码 ```bash @@ -55,6 +57,12 @@ cd DataMate make install ``` +要查看所有可用的 Make 目标、选项和帮助信息,请运行: + +```bash +make help +``` + ### 构建并部署Mineru增强pdf处理 ```bash make build-mineru diff --git a/README.md b/README.md index 16f1d49..e209af3 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,8 @@ Choose a deployment method: Enter choice: ``` +When running make uninstall, the installer will prompt once whether to delete volumes; that single choice is applied to all components. The uninstall order is: milvus -> label-studio -> datamate, which ensures the datamate network is removed cleanly after services that use it have stopped. + ### Clone the Code ```bash @@ -58,6 +60,12 @@ cd DataMate make install ``` +To list all available Make targets, flags and help text, run: + +```bash +make help +``` + ### Build and deploy Mineru Enhanced PDF Processing ```bash make build-mineru