# Makefile for generating protobuf files # 设置变量 BUF := buf GEN_DIR := gen GO_MOD := git.0yue.com/shenxianhe/sdk GO_SDK_REPO := https://git.0yue.com/shenxianhe/sdk.git TS_PACKAGE_NAME := @shenxianhe/sdk TS_SDK_REPO := https://git.0yue.com/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 - 显示此帮助信息"