diff --git a/README.md b/README.md index 88c6c04..ed646aa 100644 --- a/README.md +++ b/README.md @@ -53,9 +53,15 @@ go env GOPRIVATE ### 2. 安装模块 ```bash -go get git.toowon.com/jimmy/go-common +# 安装最新版本(推荐用于开发) +go get git.toowon.com/jimmy/go-common@latest + +# 安装特定版本(推荐用于生产) +go get git.toowon.com/jimmy/go-common@v1.0.0 ``` +**版本管理说明请参考 [VERSION.md](./VERSION.md)** + ## 使用示例 详细的使用说明请参考各模块的文档: @@ -216,7 +222,29 @@ logger.Info("Application started") 更多示例请查看 [examples](./examples/) 目录。 -## 版本 +## 版本管理 -v1.0.0 +当前版本:**v1.0.0** + +### 如何指定版本 + +在 `go.mod` 文件中指定版本: + +```go +require ( + git.toowon.com/jimmy/go-common v1.0.0 +) +``` + +或者使用命令行: + +```bash +# 使用最新版本 +go get git.toowon.com/jimmy/go-common@latest + +# 使用特定版本 +go get git.toowon.com/jimmy/go-common@v1.0.0 +``` + +**详细版本管理说明请参考 [VERSION.md](./VERSION.md)** diff --git a/VERSION.md b/VERSION.md new file mode 100644 index 0000000..43fc2b9 --- /dev/null +++ b/VERSION.md @@ -0,0 +1,131 @@ +# 版本管理说明 + +## 版本号规则 + +本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/) 规范: + +- **主版本号(MAJOR)**:当你做了不兼容的 API 修改 +- **次版本号(MINOR)**:当你做了向下兼容的功能性新增 +- **修订号(PATCH)**:当你做了向下兼容的问题修正 + +版本格式:`v主版本号.次版本号.修订号`,例如:`v1.0.0`、`v1.1.0`、`v2.0.0` + +## 发布新版本 + +### 方式1:使用发布脚本(推荐) + +```bash +# 使用发布脚本(会自动验证版本格式、检查未提交更改等) +./scripts/release.sh v1.0.0 "Release version 1.0.0" +``` + +### 方式2:手动创建标签 + +```bash +# 1. 确保所有更改已提交 +git add . +git commit -m "Prepare for release v1.0.0" + +# 2. 创建版本标签 +git tag -a v1.0.0 -m "Release version 1.0.0" + +# 3. 推送标签到远程仓库 +git push origin v1.0.0 + +# 或者一次性推送所有标签 +git push origin --tags +``` + +### 验证标签 + +```bash +# 查看所有标签 +git tag -l + +# 查看标签详情 +git show v1.0.0 + +# 查看标签列表(带注释) +git tag -l -n +``` + +## 调用方如何使用版本 + +### 方式1:使用最新版本(推荐用于开发) + +```bash +go get git.toowon.com/jimmy/go-common@latest +``` + +### 方式2:使用特定版本(推荐用于生产) + +```bash +# 使用具体版本号 +go get git.toowon.com/jimmy/go-common@v1.0.0 + +# 使用版本范围(自动选择最新版本) +go get git.toowon.com/jimmy/go-common@v1.0 +``` + +### 方式3:在 go.mod 中指定版本 + +```go +module your-project + +require ( + git.toowon.com/jimmy/go-common v1.0.0 +) +``` + +然后运行: +```bash +go mod tidy +``` + +### 方式4:更新到最新版本 + +```bash +# 更新到最新版本 +go get -u git.toowon.com/jimmy/go-common@latest + +# 更新到最新补丁版本(如从 v1.0.0 更新到 v1.0.1) +go get -u=patch git.toowon.com/jimmy/go-common + +# 更新到最新次版本(如从 v1.0.0 更新到 v1.1.0) +go get -u=minor git.toowon.com/jimmy/go-common +``` + +## 版本发布流程 + +1. **开发完成**:确保所有功能已实现并通过测试 +2. **更新版本号**:在 `README.md` 和 `VERSION.md` 中更新版本号 +3. **提交代码**:提交所有更改到 Git + ```bash + git add . + git commit -m "Prepare for release v1.0.0" + ``` +4. **创建并推送标签**: + ```bash + # 使用脚本(推荐) + ./scripts/release.sh v1.0.0 "Release version 1.0.0" + + # 或手动创建 + git tag -a v1.0.0 -m "Release version 1.0.0" + git push origin v1.0.0 + ``` +5. **验证**:在其他项目中测试是否能正确获取该版本 + ```bash + # 在新项目中测试 + go get git.toowon.com/jimmy/go-common@v1.0.0 + ``` + +## 当前版本 + +当前版本:**v1.0.0** + +## 版本历史 + +- **v1.0.0** (当前版本) + - 初始版本 + - 包含所有基础工具类:migration、datetime、http、middleware、config、storage、email、sms、factory、logger + diff --git a/scripts/release.sh b/scripts/release.sh new file mode 100755 index 0000000..63afa68 --- /dev/null +++ b/scripts/release.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +# 版本发布脚本 +# 使用方法: ./scripts/release.sh v1.0.0 "Release message" + +set -e + +VERSION=$1 +MESSAGE=$2 + +if [ -z "$VERSION" ]; then + echo "错误: 请提供版本号" + echo "使用方法: ./scripts/release.sh v1.0.0 \"Release message\"" + exit 1 +fi + +if [ -z "$MESSAGE" ]; then + MESSAGE="Release $VERSION" +fi + +# 验证版本号格式 (v主版本号.次版本号.修订号) +if ! [[ $VERSION =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "错误: 版本号格式不正确,应为 v主版本号.次版本号.修订号 (例如: v1.0.0)" + exit 1 +fi + +echo "准备发布版本: $VERSION" +echo "发布信息: $MESSAGE" +echo "" + +# 检查是否有未提交的更改 +if [ -n "$(git status --porcelain)" ]; then + echo "警告: 检测到未提交的更改" + read -p "是否继续? (y/n) " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi +fi + +# 检查标签是否已存在 +if git rev-parse "$VERSION" >/dev/null 2>&1; then + echo "错误: 版本标签 $VERSION 已存在" + exit 1 +fi + +# 创建标签 +echo "创建版本标签..." +git tag -a "$VERSION" -m "$MESSAGE" + +# 询问是否推送 +read -p "是否推送到远程仓库? (y/n) " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + echo "推送标签到远程仓库..." + git push origin "$VERSION" + echo "版本 $VERSION 已成功发布!" +else + echo "标签已创建,但未推送。使用以下命令推送:" + echo " git push origin $VERSION" +fi + +echo "" +echo "完成! 调用方现在可以使用以下命令安装此版本:" +echo " go get git.toowon.com/jimmy/go-common@$VERSION" +