refactor: split backend into standalone server project
Remove embedded frontend and workflow editor assets, add standalone API deployment configuration, and retain the current backend service updates.
This commit is contained in:
@@ -1,219 +1,40 @@
|
||||
APP := agent-desk
|
||||
APP := agent-desk-server
|
||||
MAIN := ./cmd/server
|
||||
WEB_DIR := web
|
||||
DIST_DIR := dist
|
||||
FRONTEND_DIR ?= ../agent-desk-web
|
||||
|
||||
GO ?= go
|
||||
PNPM ?= pnpm
|
||||
GOOS ?= $(shell $(GO) env GOOS)
|
||||
GOARCH ?= $(shell $(GO) env GOARCH)
|
||||
DEV_PORT ?= 8083
|
||||
DEV_API_BASE_URL ?= http://127.0.0.1:$(DEV_PORT)
|
||||
DEV_SERVER_URL ?= $(DEV_API_BASE_URL)/api/health
|
||||
LANCEDB_VERSION ?= v0.1.2
|
||||
LANCEDB_DOWNLOAD_SCRIPT ?= https://raw.githubusercontent.com/lancedb/lancedb-go/main/scripts/download-artifacts.sh
|
||||
LANCEDB ?= 0
|
||||
|
||||
UNAME_S := $(shell uname -s)
|
||||
UNAME_M := $(shell uname -m)
|
||||
|
||||
ifeq ($(GOOS),windows)
|
||||
APP_EXT := .exe
|
||||
else
|
||||
APP_EXT :=
|
||||
endif
|
||||
|
||||
ifeq ($(LANCEDB),1)
|
||||
BUILD_NAME_SUFFIX := -lancedb
|
||||
BUILD_TAGS := -tags lancedb
|
||||
BUILD_CGO_ENABLED := 1
|
||||
else
|
||||
BUILD_NAME_SUFFIX :=
|
||||
BUILD_TAGS :=
|
||||
BUILD_CGO_ENABLED :=
|
||||
endif
|
||||
|
||||
BUILD_OUTPUT := $(DIST_DIR)/$(APP)$(BUILD_NAME_SUFFIX)$(APP_EXT)
|
||||
|
||||
ifeq ($(UNAME_M),x86_64)
|
||||
LANCEDB_ARCH := amd64
|
||||
else ifeq ($(UNAME_M),amd64)
|
||||
LANCEDB_ARCH := amd64
|
||||
else ifeq ($(UNAME_M),arm64)
|
||||
LANCEDB_ARCH := arm64
|
||||
else ifeq ($(UNAME_M),aarch64)
|
||||
LANCEDB_ARCH := arm64
|
||||
else
|
||||
LANCEDB_ARCH := unsupported
|
||||
endif
|
||||
|
||||
ifeq ($(UNAME_S),Darwin)
|
||||
LANCEDB_PLATFORM := darwin
|
||||
LANCEDB_SYSTEM_LDFLAGS := -framework Security -framework CoreFoundation
|
||||
else ifeq ($(UNAME_S),Linux)
|
||||
LANCEDB_PLATFORM := linux
|
||||
LANCEDB_SYSTEM_LDFLAGS := -lm -ldl -lpthread
|
||||
else ifneq (,$(findstring MINGW,$(UNAME_S)))
|
||||
LANCEDB_PLATFORM := windows
|
||||
LANCEDB_ARCH := amd64
|
||||
LANCEDB_SYSTEM_LDFLAGS :=
|
||||
else ifneq (,$(findstring MSYS,$(UNAME_S)))
|
||||
LANCEDB_PLATFORM := windows
|
||||
LANCEDB_ARCH := amd64
|
||||
LANCEDB_SYSTEM_LDFLAGS :=
|
||||
else ifneq (,$(findstring CYGWIN,$(UNAME_S)))
|
||||
LANCEDB_PLATFORM := windows
|
||||
LANCEDB_ARCH := amd64
|
||||
LANCEDB_SYSTEM_LDFLAGS :=
|
||||
else
|
||||
LANCEDB_PLATFORM := unsupported
|
||||
LANCEDB_SYSTEM_LDFLAGS :=
|
||||
endif
|
||||
|
||||
LANCEDB_PLATFORM_ARCH := $(LANCEDB_PLATFORM)_$(LANCEDB_ARCH)
|
||||
LANCEDB_NATIVE_LIB := $(CURDIR)/lib/$(LANCEDB_PLATFORM_ARCH)/liblancedb_go.a
|
||||
LANCEDB_CGO_CFLAGS := -I$(CURDIR)/include
|
||||
LANCEDB_CGO_LDFLAGS := $(LANCEDB_NATIVE_LIB) $(LANCEDB_SYSTEM_LDFLAGS)
|
||||
|
||||
.DEFAULT_GOAL := build
|
||||
|
||||
.PHONY: help dev build release generator enums \
|
||||
_web-build-spa _web-dev _prepare-dist _lancedb-artifacts _lancedb-check _lancedb-release-check
|
||||
.PHONY: help dev build test generator enums clean
|
||||
|
||||
help:
|
||||
@echo "Available targets:"
|
||||
@echo " make dev Start backend and frontend development servers"
|
||||
@echo " make build Build the current system into dist/"
|
||||
@echo " make build LANCEDB=1"
|
||||
@echo " Build the current-platform LanceDB binary into dist/"
|
||||
@echo " make release Build linux/darwin/windows release binaries into dist/"
|
||||
@echo " make release LANCEDB=1"
|
||||
@echo " Build LanceDB release binaries into dist/"
|
||||
@echo " make generator Run code generation"
|
||||
@echo " make enums Generate frontend enums"
|
||||
@echo " make help Show this help"
|
||||
@echo " make dev Start the API server on port $(DEV_PORT)"
|
||||
@echo " make build Build the API binary into $(DIST_DIR)/"
|
||||
@echo " make test Run all Go tests"
|
||||
@echo " make generator Run backend code generation"
|
||||
@echo " make enums Generate frontend enums into $(FRONTEND_DIR)"
|
||||
@echo " make clean Remove backend build output"
|
||||
|
||||
dev: _lancedb-check
|
||||
@AGENT_DESK_SERVER_PORT="$(DEV_PORT)" CGO_ENABLED=1 CGO_CFLAGS="$(LANCEDB_CGO_CFLAGS)" CGO_LDFLAGS="$(LANCEDB_CGO_LDFLAGS)" \
|
||||
$(GO) run -tags "dev lancedb" $(MAIN) & \
|
||||
server_pid=$$!; \
|
||||
trap 'kill $$server_pid 2>/dev/null || true' EXIT INT TERM; \
|
||||
echo "Waiting for server at $(DEV_SERVER_URL)..."; \
|
||||
until curl -fsS "$(DEV_SERVER_URL)" >/dev/null 2>&1; do \
|
||||
if ! kill -0 $$server_pid 2>/dev/null; then \
|
||||
wait $$server_pid; \
|
||||
exit $$?; \
|
||||
fi; \
|
||||
sleep 1; \
|
||||
done; \
|
||||
echo "Server is ready; starting web dev server..."; \
|
||||
$(MAKE) _web-dev
|
||||
dev:
|
||||
@AGENT_DESK_SERVER_PORT="$(DEV_PORT)" $(GO) run -tags dev $(MAIN)
|
||||
|
||||
ifeq ($(LANCEDB),1)
|
||||
build: _lancedb-check _prepare-dist _web-build-spa
|
||||
else
|
||||
build: _prepare-dist _web-build-spa
|
||||
endif
|
||||
@echo "Building $(BUILD_OUTPUT)..."
|
||||
ifeq ($(LANCEDB),1)
|
||||
@CGO_ENABLED=$(BUILD_CGO_ENABLED) CGO_CFLAGS="$(LANCEDB_CGO_CFLAGS)" CGO_LDFLAGS="$(LANCEDB_CGO_LDFLAGS)" \
|
||||
$(GO) build $(BUILD_TAGS) -v -o $(BUILD_OUTPUT) $(MAIN)
|
||||
else
|
||||
@$(GO) build -v -o $(BUILD_OUTPUT) $(MAIN)
|
||||
endif
|
||||
build:
|
||||
@mkdir -p $(DIST_DIR)
|
||||
@$(GO) build -v -o $(DIST_DIR)/$(APP) $(MAIN)
|
||||
|
||||
ifeq ($(LANCEDB),1)
|
||||
release: _lancedb-release-check _prepare-dist _web-build-spa
|
||||
else
|
||||
release: _prepare-dist _web-build-spa
|
||||
endif
|
||||
@echo "Building release binaries in $(DIST_DIR)..."
|
||||
@if [ "$(LANCEDB)" = "1" ]; then \
|
||||
set -e; \
|
||||
if [ ! -f "$(CURDIR)/include/lancedb.h" ]; then \
|
||||
echo "Missing LanceDB header: $(CURDIR)/include/lancedb.h"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
build_lancedb() { \
|
||||
platform="$$1"; \
|
||||
arch="$$2"; \
|
||||
ext="$$3"; \
|
||||
system_ldflags="$$4"; \
|
||||
native_lib="$(CURDIR)/lib/$${platform}_$${arch}/liblancedb_go.a"; \
|
||||
output="$(DIST_DIR)/$(APP)-lancedb-$${platform}-$${arch}$${ext}"; \
|
||||
if [ ! -f "$$native_lib" ]; then \
|
||||
echo "Missing LanceDB native library for $${platform}/$${arch}: $$native_lib"; \
|
||||
echo "LanceDB release builds require matching native artifacts and a CGO-capable toolchain for each target platform."; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
echo "Building $$output..."; \
|
||||
CGO_ENABLED=1 CGO_CFLAGS="-I$(CURDIR)/include" CGO_LDFLAGS="$$native_lib $$system_ldflags" \
|
||||
GOOS="$$platform" GOARCH="$$arch" $(GO) build -tags lancedb -v -o "$$output" $(MAIN); \
|
||||
}; \
|
||||
build_lancedb linux amd64 "" "-lm -ldl -lpthread"; \
|
||||
build_lancedb linux arm64 "" "-lm -ldl -lpthread"; \
|
||||
build_lancedb darwin amd64 "" "-framework Security -framework CoreFoundation"; \
|
||||
build_lancedb darwin arm64 "" "-framework Security -framework CoreFoundation"; \
|
||||
build_lancedb windows amd64 ".exe" ""; \
|
||||
else \
|
||||
GOOS=linux GOARCH=amd64 $(GO) build -v -o $(DIST_DIR)/$(APP)-linux-amd64 $(MAIN); \
|
||||
GOOS=linux GOARCH=arm64 $(GO) build -v -o $(DIST_DIR)/$(APP)-linux-arm64 $(MAIN); \
|
||||
GOOS=darwin GOARCH=amd64 $(GO) build -v -o $(DIST_DIR)/$(APP)-darwin-amd64 $(MAIN); \
|
||||
GOOS=darwin GOARCH=arm64 $(GO) build -v -o $(DIST_DIR)/$(APP)-darwin-arm64 $(MAIN); \
|
||||
GOOS=windows GOARCH=amd64 $(GO) build -v -o $(DIST_DIR)/$(APP)-windows-amd64.exe $(MAIN); \
|
||||
fi
|
||||
test:
|
||||
@$(GO) test ./...
|
||||
|
||||
generator:
|
||||
@$(GO) run ./cmd/generator/generator.go
|
||||
|
||||
enums:
|
||||
@$(GO) run ./cmd/enums/generator.go
|
||||
@$(GO) run ./cmd/enums/generator.go -output "$(FRONTEND_DIR)/lib/generated/enums.ts"
|
||||
|
||||
_web-build-spa:
|
||||
@cd $(WEB_DIR) && $(PNPM) build:sdk && $(PNPM) build
|
||||
|
||||
_web-dev:
|
||||
@cd $(WEB_DIR) && NEXT_PUBLIC_API_BASE_URL="" NEXT_API_BASE_URL="$(DEV_API_BASE_URL)" $(PNPM) dev
|
||||
|
||||
_prepare-dist:
|
||||
@mkdir -p $(DIST_DIR)
|
||||
|
||||
_lancedb-artifacts:
|
||||
@if [ "$(LANCEDB_PLATFORM)" = "unsupported" ] || [ "$(LANCEDB_ARCH)" = "unsupported" ]; then \
|
||||
echo "Unsupported LanceDB platform: $(UNAME_S)/$(UNAME_M)"; \
|
||||
exit 1; \
|
||||
fi
|
||||
@if [ -f "$(LANCEDB_NATIVE_LIB)" ] && [ -f "$(CURDIR)/include/lancedb.h" ]; then \
|
||||
echo "LanceDB native artifacts already exist for $(LANCEDB_PLATFORM_ARCH)."; \
|
||||
else \
|
||||
echo "Downloading LanceDB native artifacts $(LANCEDB_VERSION) for $(LANCEDB_PLATFORM_ARCH)..."; \
|
||||
curl -sSL "$(LANCEDB_DOWNLOAD_SCRIPT)" | bash -s "$(LANCEDB_VERSION)"; \
|
||||
fi
|
||||
|
||||
_lancedb-check: _lancedb-artifacts
|
||||
@if [ ! -f "$(LANCEDB_NATIVE_LIB)" ]; then \
|
||||
echo "Missing LanceDB native library: $(LANCEDB_NATIVE_LIB)"; \
|
||||
exit 1; \
|
||||
fi
|
||||
@if [ ! -f "$(CURDIR)/include/lancedb.h" ]; then \
|
||||
echo "Missing LanceDB header: $(CURDIR)/include/lancedb.h"; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
_lancedb-release-check:
|
||||
@if [ ! -f "$(CURDIR)/include/lancedb.h" ]; then \
|
||||
echo "Missing LanceDB header: $(CURDIR)/include/lancedb.h"; \
|
||||
exit 1; \
|
||||
fi
|
||||
@missing=0; \
|
||||
for target in linux_amd64 linux_arm64 darwin_amd64 darwin_arm64 windows_amd64; do \
|
||||
native_lib="$(CURDIR)/lib/$${target}/liblancedb_go.a"; \
|
||||
if [ ! -f "$$native_lib" ]; then \
|
||||
echo "Missing LanceDB native library: $$native_lib"; \
|
||||
missing=1; \
|
||||
fi; \
|
||||
done; \
|
||||
if [ "$$missing" = "1" ]; then \
|
||||
echo "LanceDB release builds require matching native artifacts and a CGO-capable toolchain for each target platform."; \
|
||||
exit 1; \
|
||||
fi
|
||||
clean:
|
||||
@$(GO) clean
|
||||
@find $(DIST_DIR) -mindepth 1 -maxdepth 1 -type f -delete 2>/dev/null || true
|
||||
|
||||
Reference in New Issue
Block a user