# iotLCM 开源版 —— 常用构建入口 # # make build 编译全部 Go 服务 # make test 跑全部 Go 模块的单元测试 # make images 本地构建全部镜像(默认 tag 用 git describe) # make docs 本地构建文档站 # make clean 清理构建产物 # # 镜像仓库与版本可覆盖: # make images REGISTRY=registry.example.com/iotlcm/iotlcm VERSION=v1.0.4 REGISTRY ?= iotlcm VERSION ?= $(shell git describe --tags --abbrev=0 2>/dev/null || git rev-parse --short HEAD) BASE_REGISTRY ?= docker.io/library GO_MODULES := admin-svr/server app/server bot onelink-mock openapi sms upstream-chan upstream-proxy worker-svr # 目录|镜像名|构建上下文|Dockerfile IMAGE_MAP := \ admin-svr|iotlcm-admin-svr|admin-svr/server|build/Dockerfile \ admin-ui|iotlcm-admin-ui|admin-ui|vue/build/Dockerfile \ openapi|iotlcm-openapi|openapi|build/Dockerfile \ worker-svr|iotlcm-worker-svr|worker-svr|build/Dockerfile \ upstream-chan|iotlcm-upstream-chan|upstream-chan|build/Dockerfile \ upstream-proxy|iotlcm-upstream-proxy|upstream-proxy|build/Dockerfile \ app|iotlcm-app-server|app/server|Dockerfile \ app|iotlcm-app-web|app/app|Dockerfile \ sms|iotlcm-sms|sms|build/Dockerfile \ bot|iotlcm-bot|bot|Dockerfile \ docs|iotlcm-docs|docs|Dockerfile \ onelink-mock|iotlcm-onelink-mock|onelink-mock|Dockerfile .PHONY: help build test images docs clean help: @grep -E '^# make' Makefile | sed 's/^# //' build: @set -e; for m in $(GO_MODULES); do \ echo "==> go build ./... ($$m)"; \ ( cd "$$m" && go build ./... ); \ done @echo "✅ 全部 Go 服务编译通过" test: @set -e; for m in $(GO_MODULES); do \ echo "==> go test ./... ($$m)"; \ ( cd "$$m" && go test ./... ); \ done images: @set -e; echo "镜像前缀: $(REGISTRY) 版本: $(VERSION)"; \ echo "$(IMAGE_MAP)" | tr ' ' '\n' | while IFS='|' read -r dir img ctx df; do \ [ -z "$$dir" ] && continue; \ echo ""; echo "==> $$img:$$VERSION (context=$$ctx dockerfile=$$df)"; \ docker build -f "$$ctx/$$df" \ --build-arg BASE_REGISTRY="$(BASE_REGISTRY)" \ --build-arg BuildVersion="$(VERSION)" \ --build-arg CommitID="$$(git rev-parse --short=7 HEAD)" \ --build-arg BuildTime="$$(date -u +%FT%TZ)" \ -t "$(REGISTRY):$$img-$(VERSION)" "$$ctx"; \ done docs: cd docs && npm ci && npm run build @echo "✅ 文档站产物:docs/.vitepress/dist" clean: @rm -rf docs/.vitepress/dist docs/.vitepress/cache @echo "✅ 已清理"