diff --git a/.gitignore b/.gitignore index fecdd60..cdd25c8 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,6 @@ cmd/ops #local db files *.db *.db-journal + +# local api pid +.api.pid diff --git a/Makefile b/Makefile index f37a33b..05c4dbe 100644 --- a/Makefile +++ b/Makefile @@ -1,44 +1,50 @@ +# Basic variables GOOS ?= $(shell go env GOOS) GOARCH ?= $(shell go env GOARCH) VERSION ?= $(shell hack/version.sh) -# Images management -REGISTRY ?= "docker.io/karmada" -REGISTRY_USER_NAME ?= "" -REGISTRY_PASSWORD ?= "" -REGISTRY_SERVER_ADDRESS ?= "" +# Default target when just running 'make' +.DEFAULT_GOAL := build + +# Build targets TARGETS := karmada-dashboard-api \ - karmada-dashboard-web \ - - -# Build binary. -# -# Args: -# GOOS: OS to build. -# GOARCH: Arch to build. -# -# Example: -# make -# make all -# make karmada-dashboard-api GOOS=linux + karmada-dashboard-web + +# Docker image related variables +REGISTRY ?= docker.io/karmada +REGISTRY_USER_NAME ?= +REGISTRY_PASSWORD ?= +REGISTRY_SERVER_ADDRESS ?= +IMAGE_TARGET := $(addprefix image-, $(TARGETS)) + +# Development server variables +KARMADA_CTX ?= karmada-apiserver +HOST_CTX ?= karmada-host +API_PORT ?= 8000 +API_HOST ?= http://localhost:8000 + +################### +# Build Targets # +################### + +# Build all binaries (default target) +.PHONY: build +build: $(TARGETS) + +# Build specific binary .PHONY: $(TARGETS) $(TARGETS): BUILD_PLATFORMS=$(GOOS)/$(GOARCH) hack/build.sh $@ -.PHONY: all -all: $(TARGETS) - -# Build image. -# -# Args: -# GOARCH: Arch to build. -# OUTPUT_TYPE: Destination to save image(docker/registry). -# -# Example: -# make images -# make image-karmada-dashboard-api -# make image-karmada-dashboard-api GOARCH=arm64 -IMAGE_TARGET=$(addprefix image-, $(TARGETS)) +################### +# Docker Images # +################### + +# Build all images +.PHONY: images +images: $(IMAGE_TARGET) + +# Build specific image .PHONY: $(IMAGE_TARGET) $(IMAGE_TARGET): set -e;\ @@ -46,13 +52,100 @@ $(IMAGE_TARGET): make $$target GOOS=linux;\ VERSION=$(VERSION) REGISTRY=$(REGISTRY) BUILD_PLATFORMS=linux/$(GOARCH) hack/docker.sh $$target +################### +# UI Building # +################### +.PHONY: bundle-ui-dashboard bundle-ui-dashboard: cd ui && pnpm run dashboard:build -bin-karmada-dashboard-web: - BUILD_PLATFORMS=$(GOOS)/$(GOARCH) hack/build.sh karmada-dashboard-web -image-karmada-dashboard-web: - BUILD_PLATFORMS=linux/$(GOARCH) hack/build.sh karmada-dashboard-web - cp -R ui/apps/dashboard/dist _output/bin/linux/$(GOARCH)/dist - DOCKER_FILE="build-web.Dockerfile" VERSION=$(VERSION) REGISTRY=$(REGISTRY) BUILD_PLATFORMS=linux/$(GOARCH) hack/docker.sh karmada-dashboard-web +################### +# Dependencies # +################### + +# Install Go dependencies +.PHONY: install-deps +install-deps: + go mod tidy + go mod verify + +# Install UI dependencies +.PHONY: install-ui-deps +install-ui-deps: + cd ui && pnpm install + +# Install all dependencies +.PHONY: install +install: install-deps install-ui-deps + +################### +# Development # +################### + +# Run both API and Web server +.PHONY: run +run: +ifndef KUBECONFIG + $(error KUBECONFIG is required. Please specify the path to karmada kubeconfig) +endif + @echo "Starting API server..." + @_output/bin/$(GOOS)/$(GOARCH)/karmada-dashboard-api \ + --karmada-kubeconfig=$(KUBECONFIG) \ + --karmada-context=$(KARMADA_CTX) \ + --kubeconfig=$(KUBECONFIG) \ + --context=$(HOST_CTX) \ + --insecure-port=$(API_PORT) & echo $$! > .api.pid + @echo "Starting Web server..." + @cd ui && VITE_API_HOST=$(API_HOST) pnpm run dashboard:dev || (kill `cat .api.pid` && rm .api.pid) + @if [ -f .api.pid ]; then kill `cat .api.pid` && rm .api.pid; fi + +# Run API server only +.PHONY: run-api +run-api: +ifndef KUBECONFIG + $(error KUBECONFIG is required. Please specify the path to karmada kubeconfig) +endif + _output/bin/$(GOOS)/$(GOARCH)/karmada-dashboard-api \ + --karmada-kubeconfig=$(KUBECONFIG) \ + --karmada-context=$(KARMADA_CTX) \ + --kubeconfig=$(KUBECONFIG) \ + --context=$(HOST_CTX) \ + --insecure-port=$(API_PORT) + +# Run Web server only +.PHONY: run-web +run-web: + cd ui && VITE_API_HOST=$(API_HOST) pnpm run dashboard:dev + +################### +# Help # +################### + +# Show help +.PHONY: help +help: + @echo "Karmada Dashboard Makefile" + @echo "" + @echo "Usage:" + @echo " make - Build all binaries" + @echo " make install - Install all dependencies" + @echo " make run - Run both API and Web servers" + @echo " make images - Build all Docker images" + @echo "" + @echo "Development Commands:" + @echo " make run-api - Run API server only" + @echo " make run-web - Run Web server only" + @echo " make install-deps - Install Go dependencies" + @echo " make install-ui-deps - Install UI dependencies" + @echo "" + @echo "Build Commands:" + @echo " make build - Build all binaries" + @echo " make images - Build all Docker images" + @echo "" + @echo "Variables:" + @echo " KUBECONFIG - Path to karmada kubeconfig file" + @echo " API_PORT - API server port (default: 8000)" + @echo " API_HOST - API server host (default: http://localhost:8000)" + @echo " GOOS - Target OS for build" + @echo " GOARCH - Target architecture for build" \ No newline at end of file