Files
usernode/Makefile
T

90 lines
3.3 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-m5
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}'