90 lines
3.3 KiB
Makefile
90 lines
3.3 KiB
Makefile
# ws_usernode Makefile —— build / test / dev 工作流
|
||
# 代理:容器构建无法继承 proxychains 注入,通过 --build-arg 显式传递
|
||
# 宿主机代理环境变量(HTTP_PROXY/HTTPS_PROXY/ALL_PROXY/NO_PROXY)。
|
||
|
||
# ---------- 代理参数(供 podman build 使用) ----------
|
||
HTTP_PROXY_ARG := $(if $(HTTP_PROXY),--build-arg HTTP_PROXY=$(HTTP_PROXY),)
|
||
HTTPS_PROXY_ARG := $(if $(HTTPS_PROXY),--build-arg HTTPS_PROXY=$(HTTPS_PROXY),)
|
||
ALL_PROXY_ARG := $(if $(ALL_PROXY),--build-arg ALL_PROXY=$(ALL_PROXY),)
|
||
NO_PROXY_ARG := $(if $(NO_PROXY),--build-arg NO_PROXY=$(NO_PROXY),)
|
||
PROXY_ARGS := $(HTTP_PROXY_ARG) $(HTTPS_PROXY_ARG) $(ALL_PROXY_ARG) $(NO_PROXY_ARG)
|
||
NET_HOST := --network=host
|
||
|
||
GO ?= go
|
||
PODMAN ?= podman
|
||
BIN := bin/usernode
|
||
VERSION ?= 0.3.0-m3
|
||
LDFLAGS := -s -w -X main.version=$(VERSION)
|
||
GOFLAGS := -trimpath
|
||
|
||
# ---------- 后端 ----------
|
||
|
||
.PHONY: build
|
||
build: ## 构建 Go 二进制(后端,不含前端产物)
|
||
$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BIN) ./cmd/usernode
|
||
|
||
.PHONY: test
|
||
test: ## 运行全部 Go 测试
|
||
$(GO) test ./...
|
||
|
||
.PHONY: vet
|
||
vet: ## 静态检查
|
||
$(GO) vet ./...
|
||
|
||
.PHONY: run
|
||
run: build ## 本地运行(默认 config.toml,缺失则用默认配置)
|
||
./$(BIN) serve
|
||
|
||
.PHONY: migrate
|
||
migrate: build ## 数据库迁移
|
||
./$(BIN) migrate
|
||
|
||
# ---------- 前端 ----------
|
||
|
||
.PHONY: web-install
|
||
web-install: ## 容器内安装前端依赖(node:20-alpine),并初始化 node_modules volume
|
||
$(PODMAN) build $(NET_HOST) $(PROXY_ARGS) -t ws-usernode-web-dev -f web/Containerfile.dev web/
|
||
$(PODMAN) run --rm $(NET_HOST) \
|
||
-v ws_usernode_node_modules:/app/node_modules \
|
||
ws-usernode-web-dev sh -c "ls node_modules >/dev/null && echo node_modules ready"
|
||
|
||
.PHONY: web-dev
|
||
web-dev: ## 前端 dev 容器(热开发,端口 5173;API 代理到 Go 后端)
|
||
$(PODMAN) run --rm -p 5173:5173 \
|
||
-v $(CURDIR)/web:/app \
|
||
-v ws_usernode_node_modules:/app/node_modules \
|
||
-e VITE_API_PROXY=http://host.containers.internal:8080 \
|
||
ws-usernode-web-dev
|
||
|
||
.PHONY: web-build
|
||
web-build: ## 容器内构建前端产物到 web/dist,并复制到 internal/webui/dist(供 go:embed)
|
||
$(PODMAN) build $(NET_HOST) $(PROXY_ARGS) -t ws-usernode-web-dev -f web/Containerfile.dev web/
|
||
$(PODMAN) run --rm $(NET_HOST) \
|
||
-v $(CURDIR)/web:/app \
|
||
-v ws_usernode_node_modules:/app/node_modules \
|
||
-v $(CURDIR)/internal/webui/dist:/embed/dist \
|
||
ws-usernode-web-dev sh -c "npm run build && cp -r dist/. /embed/dist/ && echo web-build ok"
|
||
|
||
# ---------- 镜像 / 分发 ----------
|
||
|
||
.PHONY: image
|
||
image: ## 构建单二进制容器镜像(deploy/Containerfile 多阶段)
|
||
$(PODMAN) build $(NET_HOST) $(PROXY_ARGS) -t ws-usernode:$(VERSION) -t ws-usernode:latest -f deploy/Containerfile .
|
||
|
||
.PHONY: build-embed
|
||
build-embed: web-build ## 构建含前端产物的 Go 二进制(web-build 后重新编译)
|
||
$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BIN) ./cmd/usernode
|
||
|
||
.PHONY: dev
|
||
dev: ## 开发提示
|
||
@echo "后端:make run 前端:make web-dev"
|
||
@echo "或:go run ./cmd/usernode serve --debug"
|
||
|
||
.PHONY: clean
|
||
clean: ## 清理构建产物
|
||
rm -rf bin web/dist
|
||
|
||
.PHONY: help
|
||
help: ## 显示帮助
|
||
@grep -E '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-14s\033[0m %s\n", $$1, $$2}'
|