-
-
Notifications
You must be signed in to change notification settings - Fork 168
Expand file tree
/
Copy pathMakefile
More file actions
178 lines (149 loc) · 5.88 KB
/
Makefile
File metadata and controls
178 lines (149 loc) · 5.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# Registry configurations
DOCKER_REGISTRY ?= docker.io
GHCR_REGISTRY ?= ghcr.io
ALI_REGISTRY ?= registry.cn-hangzhou.aliyuncs.com
IMAGE ?= ghcr.io/amoylab/unla/allinone:latest
APISERVER_IMAGE ?= ghcr.io/amoylab/unla/apiserver:latest
MCP_GATEWAY_IMAGE ?= ghcr.io/amoylab/unla/mcp-gateway:latest
MOCK_USER_SVC_IMAGE ?= ghcr.io/amoylab/unla/mock-server:latest
WEB_IMAGE ?= ghcr.io/amoylab/unla/web:latest
# Project configurations
PROJECT_NAME ?= unla
IMAGE_TAG ?= $(shell cat pkg/version/VERSION)
# Service configurations
SERVICES = mcp-gateway mock-server web
# Build flags
LDFLAGS = -X main.version=$(VERSION)
# Test configurations
TEST_PACKAGES ?= ./...
TEST_FLAGS ?= -v
COVERAGE_FILE ?= coverage.out
COVERAGE_HTML ?= coverage.html
# Registry targets
.PHONY: docker ghcr ali
# Build all services
.PHONY: build
build:
@for service in $(SERVICES); do \
docker build -t $(PROJECT_NAME)-$$service:$(IMAGE_TAG) \
-f deploy/docker/multi/$$service/Dockerfile .; \
docker tag $(PROJECT_NAME)-$$service:$(IMAGE_TAG) $(PROJECT_NAME)-$$service:latest; \
done
docker build -t $(PROJECT_NAME)-allinone:$(IMAGE_TAG) \
-f deploy/docker/allinone/Dockerfile .
docker tag $(PROJECT_NAME)-allinone:$(IMAGE_TAG) $(PROJECT_NAME)-allinone:latest
# Build multi-container version
.PHONY: build-multi
build-multi:
@for service in $(SERVICES); do \
docker build -t $(PROJECT_NAME)-$$service:$(IMAGE_TAG) \
-f deploy/docker/multi/$$service/Dockerfile .; \
docker tag $(PROJECT_NAME)-$$service:$(IMAGE_TAG) $(PROJECT_NAME)-$$service:latest; \
done
# Build all-in-one version
.PHONY: build-allinone
build-allinone:
docker build -t $(PROJECT_NAME)-allinone:$(IMAGE_TAG) \
-f deploy/docker/allinone/Dockerfile .
docker tag $(PROJECT_NAME)-allinone:$(IMAGE_TAG) $(PROJECT_NAME)-allinone:latest
# Run multi-container version
.PHONY: run-multi
run-multi:
MCP_GATEWAY_IMAGE=$(MCP_GATEWAY_IMAGE) \
MOCK_USER_SVC_IMAGE=$(MOCK_USER_SVC_IMAGE) \
WEB_IMAGE=$(WEB_IMAGE) \
docker-compose --env-file .env.multi --project-directory . -f deploy/docker/multi/docker-compose.yml up -d
# Stop multi-container version
.PHONY: stop-multi
stop-multi:
docker-compose --env-file .env.multi --project-directory . -f deploy/docker/multi/docker-compose.yml stop
# Down multi-container version
.PHONY: down-multi
down-multi:
docker-compose --env-file .env.multi --project-directory . -f deploy/docker/multi/docker-compose.yml down -v
# Run all-in-one version
.PHONY: run-allinone
run-allinone:
IMAGE=$(IMAGE) docker-compose --env-file .env.allinone --project-directory . -f deploy/docker/allinone/docker-compose.yml up -d
# Stop all-in-one version
.PHONY: stop-allinone
stop-allinone:
docker-compose --env-file .env.allinone --project-directory . -f deploy/docker/allinone/docker-compose.yml stop
# Down all-in-one version
.PHONY: down-allinone
down-allinone:
docker-compose --env-file .env.allinone --project-directory . -f deploy/docker/allinone/docker-compose.yml down -v
# Push to Docker Hub
docker: build
@for service in $(SERVICES); do \
docker tag $(PROJECT_NAME)-$$service:$(IMAGE_TAG) \
$(DOCKER_REGISTRY)/$(PROJECT_NAME)/$$service:$(IMAGE_TAG); \
docker push $(DOCKER_REGISTRY)/$(PROJECT_NAME)/$$service:$(IMAGE_TAG); \
done
docker tag $(PROJECT_NAME)-allinone:$(IMAGE_TAG) \
$(DOCKER_REGISTRY)/$(PROJECT_NAME)/allinone:$(IMAGE_TAG)
docker push $(DOCKER_REGISTRY)/$(PROJECT_NAME)/allinone:$(IMAGE_TAG)
# Push to GitHub Container Registry
ghcr: build
@for service in $(SERVICES); do \
docker tag $(PROJECT_NAME)-$$service:$(IMAGE_TAG) \
$(GHCR_REGISTRY)/$(PROJECT_NAME)/$$service:$(IMAGE_TAG); \
docker push $(GHCR_REGISTRY)/$(PROJECT_NAME)/$$service:$(IMAGE_TAG); \
done
docker tag $(PROJECT_NAME)-allinone:$(IMAGE_TAG) \
$(GHCR_REGISTRY)/$(PROJECT_NAME)/allinone:$(IMAGE_TAG)
docker push $(GHCR_REGISTRY)/$(PROJECT_NAME)/allinone:$(IMAGE_TAG)
# Push to Alibaba Cloud Container Registry
ali: build
@for service in $(SERVICES); do \
docker tag $(PROJECT_NAME)-$$service:$(IMAGE_TAG) \
$(ALI_REGISTRY)/$(PROJECT_NAME)/$$service:$(IMAGE_TAG); \
docker push $(ALI_REGISTRY)/$(PROJECT_NAME)/$$service:$(IMAGE_TAG); \
done
docker tag $(PROJECT_NAME)-allinone:$(IMAGE_TAG) \
$(ALI_REGISTRY)/$(PROJECT_NAME)/allinone:$(IMAGE_TAG)
docker push $(ALI_REGISTRY)/$(PROJECT_NAME)/allinone:$(IMAGE_TAG)
# Test targets
.PHONY: test test-coverage test-race template-tester
# Run all tests
test:
go test $(TEST_FLAGS) $(TEST_PACKAGES)
# Run tests with coverage
test-coverage:
go test $(TEST_FLAGS) -coverprofile=$(COVERAGE_FILE) $(TEST_PACKAGES)
go tool cover -html=$(COVERAGE_FILE) -o $(COVERAGE_HTML)
go tool cover -func=$(COVERAGE_FILE)
# Run tests with race detection
test-race:
go test $(TEST_FLAGS) -race $(TEST_PACKAGES)
# Build template tester CLI tool
template-tester:
go build -o bin/template-tester cmd/template-tester/main.go
# Build template tester docker image
.PHONY: docker-template-tester
docker-template-tester:
docker build --platform=linux/amd64 \
-t $(PROJECT_NAME)-template-tester:$(IMAGE_TAG) \
-f deploy/docker/template-tester/Dockerfile .
docker tag $(PROJECT_NAME)-template-tester:$(IMAGE_TAG) $(PROJECT_NAME)-template-tester:latest
# Clean up test artifacts
clean-test:
rm -f $(COVERAGE_FILE) $(COVERAGE_HTML)
# Clean up local images
.PHONY: clean
clean:
@for service in $(SERVICES); do \
docker rmi $(PROJECT_NAME)-$$service:$(IMAGE_TAG) || true; \
docker rmi $(DOCKER_REGISTRY)/$(PROJECT_NAME)/$$service:$(IMAGE_TAG) || true; \
docker rmi $(GHCR_REGISTRY)/$(PROJECT_NAME)/$$service:$(IMAGE_TAG) || true; \
docker rmi $(ALI_REGISTRY)/$(PROJECT_NAME)/$$service:$(IMAGE_TAG) || true; \
done
docker rmi $(PROJECT_NAME)-allinone:$(IMAGE_TAG) || true
docker rmi $(DOCKER_REGISTRY)/$(PROJECT_NAME)/allinone:$(IMAGE_TAG) || true
docker rmi $(GHCR_REGISTRY)/$(PROJECT_NAME)/allinone:$(IMAGE_TAG) || true
docker rmi $(ALI_REGISTRY)/$(PROJECT_NAME)/allinone:$(IMAGE_TAG) || true
format:
gofmt -w .
goimports -w .
fmt: format
lint: format