Skip to content

Commit 49b5a6d

Browse files
authored
Merge pull request #171 from samzong/makefile
update Makefile, make development simpler
2 parents a8c9b9e + a295921 commit 49b5a6d

File tree

2 files changed

+161
-38
lines changed

2 files changed

+161
-38
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,6 @@ cmd/ops
3232
#local db files
3333
*.db
3434
*.db-journal
35+
36+
# local api pid
37+
.api.pid

Makefile

Lines changed: 158 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,178 @@
1+
# Basic variables
12
GOOS ?= $(shell go env GOOS)
23
GOARCH ?= $(shell go env GOARCH)
34
VERSION ?= $(shell hack/version.sh)
4-
# Images management
5-
REGISTRY ?= "docker.io/karmada"
6-
REGISTRY_USER_NAME ?= ""
7-
REGISTRY_PASSWORD ?= ""
8-
REGISTRY_SERVER_ADDRESS ?= ""
95

6+
# Default target when just running 'make'
7+
.DEFAULT_GOAL := all
8+
9+
# Build targets
1010
TARGETS := karmada-dashboard-api \
11-
karmada-dashboard-web \
12-
13-
14-
# Build binary.
15-
#
16-
# Args:
17-
# GOOS: OS to build.
18-
# GOARCH: Arch to build.
19-
#
20-
# Example:
21-
# make
22-
# make all
23-
# make karmada-dashboard-api GOOS=linux
11+
karmada-dashboard-web
12+
13+
# Docker image related variables
14+
REGISTRY ?= docker.io/karmada
15+
REGISTRY_USER_NAME ?=
16+
REGISTRY_PASSWORD ?=
17+
REGISTRY_SERVER_ADDRESS ?=
18+
IMAGE_TARGET := $(addprefix image-, $(TARGETS))
19+
20+
# Development server variables
21+
KARMADA_CTX ?= karmada-apiserver
22+
HOST_CTX ?= karmada-host
23+
API_PORT ?= 8000
24+
API_HOST ?= http://localhost:8000
25+
SKIP_TLS_VERIFY ?= false
26+
KUBECONFIG ?= $(HOME)/.kube/karmada.config
27+
28+
###################
29+
# Build Targets #
30+
###################
31+
32+
# Build all binaries (alias for build)
33+
.PHONY: all
34+
all: build
35+
36+
# Build all binaries
37+
.PHONY: build
38+
build: $(TARGETS)
39+
40+
# Build specific binary
2441
.PHONY: $(TARGETS)
2542
$(TARGETS):
2643
BUILD_PLATFORMS=$(GOOS)/$(GOARCH) hack/build.sh $@
2744

28-
.PHONY: all
29-
all: $(TARGETS)
30-
31-
# Build image.
32-
#
33-
# Args:
34-
# GOARCH: Arch to build.
35-
# OUTPUT_TYPE: Destination to save image(docker/registry).
36-
#
37-
# Example:
38-
# make images
39-
# make image-karmada-dashboard-api
40-
# make image-karmada-dashboard-api GOARCH=arm64
41-
IMAGE_TARGET=$(addprefix image-, $(TARGETS))
45+
###################
46+
# Docker Images #
47+
###################
48+
49+
# Build all images
50+
.PHONY: images
51+
images: $(IMAGE_TARGET)
52+
53+
# Build specific image
4254
.PHONY: $(IMAGE_TARGET)
4355
$(IMAGE_TARGET):
4456
set -e;\
4557
target=$$(echo $(subst image-,,$@));\
4658
make $$target GOOS=linux;\
4759
VERSION=$(VERSION) REGISTRY=$(REGISTRY) BUILD_PLATFORMS=linux/$(GOARCH) hack/docker.sh $$target
4860

61+
###################
62+
# UI Building #
63+
###################
4964

65+
.PHONY: bundle-ui-dashboard
5066
bundle-ui-dashboard:
5167
cd ui && pnpm run dashboard:build
52-
bin-karmada-dashboard-web:
53-
BUILD_PLATFORMS=$(GOOS)/$(GOARCH) hack/build.sh karmada-dashboard-web
54-
image-karmada-dashboard-web:
55-
BUILD_PLATFORMS=linux/$(GOARCH) hack/build.sh karmada-dashboard-web
56-
cp -R ui/apps/dashboard/dist _output/bin/linux/$(GOARCH)/dist
57-
DOCKER_FILE="build-web.Dockerfile" VERSION=$(VERSION) REGISTRY=$(REGISTRY) BUILD_PLATFORMS=linux/$(GOARCH) hack/docker.sh karmada-dashboard-web
5868

69+
###################
70+
# Dependencies #
71+
###################
72+
73+
# Install Go dependencies
74+
.PHONY: install-deps
75+
install-deps:
76+
go mod tidy
77+
go mod verify
78+
79+
# Install UI dependencies
80+
.PHONY: install-ui-deps
81+
install-ui-deps:
82+
cd ui && pnpm install
83+
84+
# Install all dependencies
85+
.PHONY: install
86+
install: install-deps install-ui-deps
87+
88+
###################
89+
# Development #
90+
###################
91+
92+
# Run both API and Web server
93+
.PHONY: run
94+
run:
95+
ifndef KUBECONFIG
96+
$(error KUBECONFIG is required. Please specify the path to karmada kubeconfig)
97+
endif
98+
@echo "Starting API server..."
99+
@_output/bin/$(GOOS)/$(GOARCH)/karmada-dashboard-api \
100+
--karmada-kubeconfig=$(KUBECONFIG) \
101+
--karmada-context=$(KARMADA_CTX) \
102+
--kubeconfig=$(KUBECONFIG) \
103+
--context=$(HOST_CTX) \
104+
--insecure-port=$(API_PORT) \
105+
$(if $(filter true,$(SKIP_TLS_VERIFY)),--skip-karmada-apiserver-tls-verify) & echo $$! > .api.pid
106+
@echo "Starting Web server..."
107+
@cd ui && VITE_API_HOST=$(API_HOST) pnpm run dashboard:dev || (kill `cat .api.pid` && rm .api.pid)
108+
@if [ -f .api.pid ]; then kill `cat .api.pid` && rm .api.pid; fi
109+
110+
# Run API server only
111+
.PHONY: run-api
112+
run-api: build
113+
ifndef KUBECONFIG
114+
$(error KUBECONFIG is required. Please specify the path to karmada kubeconfig)
115+
endif
116+
_output/bin/$(GOOS)/$(GOARCH)/karmada-dashboard-api \
117+
--karmada-kubeconfig=$(KUBECONFIG) \
118+
--karmada-context=$(KARMADA_CTX) \
119+
--kubeconfig=$(KUBECONFIG) \
120+
--context=$(HOST_CTX) \
121+
--insecure-port=$(API_PORT) \
122+
$(if $(filter true,$(SKIP_TLS_VERIFY)),--skip-karmada-apiserver-tls-verify)
123+
124+
# Run Web server only
125+
.PHONY: run-web
126+
run-web: install-ui-deps build
127+
cd ui && VITE_API_HOST=$(API_HOST) pnpm run dashboard:dev
128+
129+
# Generate JWT token for dashboard login
130+
.PHONY: gen-token
131+
gen-token:
132+
ifndef KUBECONFIG
133+
$(error KUBECONFIG is required. Please specify the path to karmada kubeconfig)
134+
endif
135+
@echo "Switching to karmada-apiserver context..."
136+
@kubectl config use-context $(KARMADA_CTX)
137+
@echo "Creating service account..."
138+
@kubectl apply -f artifacts/dashboard/karmada-dashboard-sa.yaml
139+
@echo "Getting JWT token..."
140+
@kubectl -n karmada-system get secret/karmada-dashboard-secret -o go-template="{{.data.token | base64decode}}"
141+
@echo
142+
143+
###################
144+
# Help #
145+
###################
146+
147+
# Show help
148+
.PHONY: help
149+
help:
150+
@echo "Karmada Dashboard Makefile"
151+
@echo ""
152+
@echo "Usage:"
153+
@echo " make - Build all binaries (same as 'make all')"
154+
@echo " make all - Build all binaries"
155+
@echo " make install - Install all dependencies"
156+
@echo " make run - Run both API and Web servers"
157+
@echo " make images - Build all Docker images"
158+
@echo ""
159+
@echo "Development Commands:"
160+
@echo " make run-api - Run API server only"
161+
@echo " make run-web - Run Web server only"
162+
@echo " make install-deps - Install Go dependencies"
163+
@echo " make install-ui-deps - Install UI dependencies"
164+
@echo " make gen-token - Generate JWT token for dashboard login"
165+
@echo ""
166+
@echo "Build Commands:"
167+
@echo " make build - Build all binaries"
168+
@echo " make images - Build all Docker images"
169+
@echo ""
170+
@echo "Variables:"
171+
@echo " KUBECONFIG - Path to karmada kubeconfig file (default: $(HOME)/.kube/karmada.config)"
172+
@echo " KARMADA_CTX - Karmada API server context (default: karmada-apiserver)"
173+
@echo " HOST_CTX - Host cluster context (default: karmada-host)"
174+
@echo " API_PORT - API server port (default: 8000)"
175+
@echo " API_HOST - API server host (default: http://localhost:8000)"
176+
@echo " GOOS - Target OS for build"
177+
@echo " GOARCH - Target architecture for build"
178+
@echo " SKIP_TLS_VERIFY - Skip TLS verification for Karmada API server (default: false)"

0 commit comments

Comments
 (0)