Skip to content

Commit

Permalink
update Makefile, make development simpler
Browse files Browse the repository at this point in the history
Signed-off-by: samzong <[email protected]>
  • Loading branch information
samzong committed Jan 19, 2025
1 parent a8c9b9e commit 8bd3850
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 38 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,6 @@ cmd/ops
#local db files
*.db
*.db-journal

# local api pid
.api.pid
169 changes: 131 additions & 38 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,58 +1,151 @@
# 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;\
target=$$(echo $(subst image-,,$@));\
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"

0 comments on commit 8bd3850

Please sign in to comment.