Files
proto/Makefile

123 lines
4.1 KiB
Makefile
Raw Normal View History

2025-08-20 22:37:07 +08:00
# Makefile for generating protobuf files
# 设置变量
BUF := buf
GEN_DIR := gen
2025-08-30 00:30:47 +08:00
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
2025-08-20 22:37:07 +08:00
# 默认目标 - 显示帮助信息
.DEFAULT_GOAL := help
# 生成pb文件的主目标 - 包含公共处理部分和各语言私有处理部分
.PHONY: generate
generate: common-gen language-gen
# 公共处理部分
.PHONY: common-gen
common-gen: lint clean generate-pb
2025-08-21 04:36:13 +08:00
# 语言特定处理部分
2025-08-20 22:37:07 +08:00
.PHONY: language-gen
2025-08-21 04:36:13 +08:00
language-gen: init-go generate-go-readme init-ts generate-ts-readme
2025-08-20 22:37:07 +08:00
# 执行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
2025-08-21 04:36:13 +08:00
# 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
# 发布命令
2025-08-20 22:37:07 +08:00
.PHONY: publish
publish:
@echo "开始发布流程..."
# 确保版本号管理脚本可执行
@chmod +x script/get_next_version.sh
# 调用版本号管理脚本获取新版本号
@echo "正在生成新版本号..."
@script/get_next_version.sh
# 调用各个语言的发布目标
2025-08-21 04:36:13 +08:00
@$(MAKE) publish-go publish-ts
2025-08-20 22:37:07 +08:00
# 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"
2025-08-21 04:36:13 +08:00
# 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"
2025-08-20 22:37:07 +08:00
# 生成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
2025-08-21 04:36:13 +08:00
# 生成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
2025-08-20 22:37:07 +08:00
# 帮助信息
.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"
2025-08-21 04:36:13 +08:00
@echo " init-ts - 在 $(GEN_DIR)/ts 目录初始化npm项目"
2025-08-20 22:37:07 +08:00
@echo " generate-go-readme - 生成Go SDK的README文件包含使用示例和版本说明"
2025-08-21 04:36:13 +08:00
@echo " generate-ts-readme - 生成TypeScript SDK的README文件包含使用示例和版本说明"
@echo " publish - 发布生成的 protobuf 代码Go和TypeScript"
2025-08-20 22:37:07 +08:00
@echo " publish-go - 发布go语言代码到 $(GO_SDK_REPO) 仓库并自动打tag"
2025-08-21 04:36:13 +08:00
@echo " publish-ts - 发布TypeScript SDK到npm仓库需先设置NPM_AUTH_TOKEN环境变量"
2025-08-20 22:37:07 +08:00
@echo " help - 显示此帮助信息"