Files
proto/Makefile
2025-08-30 00:30:47 +08:00

123 lines
4.1 KiB
Makefile
Raw Permalink 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.

# Makefile for generating protobuf files
# 设置变量
BUF := buf
GEN_DIR := gen
GO_MOD := git.shenxianhe.cn/shenxianhe/sdk
GO_SDK_REPO := https://git.shenxianhe.cn/shenxianhe/sdk.git
TS_PACKAGE_NAME := @connect/sdk
TS_SDK_REPO := https://git.shenxianhe.cn/shenxianhe/sdk-ts.git
# 默认目标 - 显示帮助信息
.DEFAULT_GOAL := help
# 生成pb文件的主目标 - 包含公共处理部分和各语言私有处理部分
.PHONY: generate
generate: common-gen language-gen
# 公共处理部分
.PHONY: common-gen
common-gen: lint clean generate-pb
# 语言特定处理部分
.PHONY: language-gen
language-gen: init-go generate-go-readme init-ts generate-ts-readme
# 执行buf lint检查
.PHONY: lint
lint:
@echo "运行buf lint检查..."
$(BUF) lint
# 清理gen目录
.PHONY: clean
clean:
@echo "清理$(GEN_DIR)目录..."
@if [ -d "$(GEN_DIR)" ]; then rm -rf $(GEN_DIR); fi
# 执行buf generate生成pb文件
.PHONY: generate-pb
generate-pb:
@echo "生成protobuf文件..."
$(BUF) generate
# Go语言特定初始化
.PHONY: init-go
init-go:
@echo "$(GEN_DIR)/go目录初始化go module..."
cd $(GEN_DIR)/go && go mod init $(GO_MOD) && go mod tidy
# TypeScript特定初始化
.PHONY: init-ts
init-ts:
@echo "$(GEN_DIR)/ts目录初始化npm项目..."
@mkdir -p $(GEN_DIR)/ts
@echo "创建package.json文件..."
@VERSION=$$(cat version.txt) && \
sed -e "s|{{TS_PACKAGE_NAME}}|$(TS_PACKAGE_NAME)|g" \
-e "s|{{VERSION}}|$$VERSION|g" \
-e "s|{{TS_SDK_REPO}}|$(TS_SDK_REPO)|g" \
templates/ts-package.json.tpl > $(GEN_DIR)/ts/package.json
@echo "创建tsconfig.json文件..."
@echo '{"compilerOptions":{"target":"ES2019","module":"CommonJS","strict":true,"esModuleInterop":true,"skipLibCheck":true,"forceConsistentCasingInFileNames":true},"include":["./"]}' > $(GEN_DIR)/ts/tsconfig.json
@echo "安装必要的依赖..."
@cd $(GEN_DIR)/ts && npm install
# 发布命令
.PHONY: publish
publish:
@echo "开始发布流程..."
# 确保版本号管理脚本可执行
@chmod +x script/get_next_version.sh
# 调用版本号管理脚本获取新版本号
@echo "正在生成新版本号..."
@script/get_next_version.sh
# 调用各个语言的发布目标
@$(MAKE) publish-go publish-ts
# Go语言代码发布子命令
.PHONY: publish-go
publish-go: generate
@echo "发布生成的代码到 $(GO_SDK_REPO)..."
# 确保git发布脚本可执行并调用git发布脚本内部会自己获取版本号
chmod +x script/publish-git.sh && script/publish-git.sh "$(GO_SDK_REPO)" "$(GEN_DIR)/go"
# TypeScript代码发布子命令
.PHONY: publish-ts
publish-ts: generate
@echo "准备发布TypeScript SDK到npm仓库..."
# 获取版本号
@VERSION=$$(cat version.txt) && \
chmod +x script/publish-npm.sh && \
script/publish-npm.sh "$(TS_PACKAGE_NAME)" "$$VERSION" "$(GEN_DIR)/ts"
# 生成Go SDK的README文件
.PHONY: generate-go-readme
generate-go-readme:
@echo "生成Go SDK的README文件..."
@mkdir -p $(GEN_DIR)/go
@cp templates/go-sdk-readme.md $(GEN_DIR)/go/README.md
# 生成TypeScript SDK的README文件
.PHONY: generate-ts-readme
generate-ts-readme:
@echo "生成TypeScript SDK的README文件..."
@mkdir -p $(GEN_DIR)/ts
@cp templates/ts-sdk-readme.md $(GEN_DIR)/ts/README.md
# 帮助信息
.PHONY: help
help:
@echo "可用的目标:"
@echo " generate - 生成 protobuf 文件"
@echo " lint - 运行 $(BUF) lint 检查 proto 文件是否有问题"
@echo " clean - 删除 $(GEN_DIR) 目录"
@echo " generate-pb - 使用 $(BUF) generate 生成 protobuf 文件"
@echo " init-go - 在 $(GEN_DIR)/go 目录初始化go module"
@echo " init-ts - 在 $(GEN_DIR)/ts 目录初始化npm项目"
@echo " generate-go-readme - 生成Go SDK的README文件包含使用示例和版本说明"
@echo " generate-ts-readme - 生成TypeScript SDK的README文件包含使用示例和版本说明"
@echo " publish - 发布生成的 protobuf 代码Go和TypeScript"
@echo " publish-go - 发布go语言代码到 $(GO_SDK_REPO) 仓库并自动打tag"
@echo " publish-ts - 发布TypeScript SDK到npm仓库需先设置NPM_AUTH_TOKEN环境变量"
@echo " help - 显示此帮助信息"