本文档概述 Excel2Object 项目的自动化发布系统,包括 Copilot 指令、版本管理和发布流程。
This document provides an overview of the Excel2Object project's automated release system, including Copilot instructions, version management, and release workflows.
文件位置 / File Location: .github/copilot-instructions.md
内容概要 / Summary:
- 项目简介和核心功能
- 技术栈和依赖
- 编码规范和命名约定
- 开发指南和测试要求
- 提交和 PR 规范
- 常见问题解答
适用对象 / Target Audience: 所有使用 GitHub Copilot 进行开发的贡献者
文件位置 / File Location: .github/VERSIONING.md
内容概要 / Summary:
- 语义化版本(SemVer)说明
- 版本号递增规则
- 主版本号 (Major): 不兼容的 API 变更
- 次版本号 (Minor): 向后兼容的功能新增
- 修订号 (Patch): 向后兼容的问题修正
- 版本管理流程
- 预发布版本规范
适用对象 / Target Audience: 维护者和发布管理员
关键规则 / Key Rules:
Bug 修复 → Patch +1 (2.0.2 → 2.0.3)
新功能 → Minor +1 (2.0.3 → 2.1.0)
破坏性变更 → Major +1 (2.1.0 → 3.0.0)
文件位置 / File Location: .github/RELEASE_GUIDE.md
内容概要 / Summary:
- 自动化发布流程详解
- 发布步骤说明
- 准备阶段:版本号更新、发布说明编写
- 发布阶段:Tag 创建、自动化监控
- 预发布版本处理
- 配置要求(Secrets、Environments)
- 故障排查和回滚指南
- 最佳实践建议
适用对象 / Target Audience: 发布管理员
文件位置 / File Location: .github/workflows/release.yml
触发条件 / Trigger: 推送 v* 格式的 Git Tag(例如 v2.0.3)
工作流程 / Workflow Steps:
graph TD
A[推送 Tag v2.0.3] --> B[验证版本号]
B --> C{版本格式正确?}
C -->|否| D[流程终止]
C -->|是| E{Tag 与 csproj 一致?}
E -->|否| D
E -->|是| F[多平台构建和测试]
F --> G{测试通过?}
G -->|否| D
G -->|是| H[打包 NuGet]
H --> I[发布到 NuGet.org]
H --> J[创建 GitHub Release]
I --> K[完成]
J --> K
作业清单 / Jobs:
- ✓
validate-version: 验证版本号格式和一致性 - ✓
build-and-test: 在 Ubuntu 和 Windows 上构建和测试 - ✓
pack-nuget: 打包 NuGet 包 - ✓
publish-nuget: 发布到 NuGet.org - ✓
create-release: 创建 GitHub Release - ✓
notify-success: 发布成功通知
一键发布 / One-Click Release:
# Windows
.\release.ps1 -Version 2.0.4
# Linux/macOS (需要 PowerShell Core)
pwsh ./release.ps1 -Version 2.0.4该脚本会自动完成以下所有步骤 / This script automatically completes all the following steps:
- ✓ 更新 csproj 版本号 / Update csproj version
- ✓ 提交代码 / Commit changes
- ✓ 创建 Tag / Create tag
- ✓ 推送到远程仓库 / Push to remote
详细参数和用法请参阅 工具和脚本 章节。
See Tools and Scripts section for detailed parameters and usage.
步骤 / Steps:
-
更新版本号 / Update Version Number
# 编辑 Chsword.Excel2Object/Chsword.Excel2Object.csproj # <Version>2.0.3</Version>
-
更新发布说明 / Update Release Notes
# 在 README.md 和 README_EN.md 中添加版本信息 -
提交并推送 / Commit and Push
git add . git commit -m "chore: bump version to 2.0.3" git push origin main
-
创建并推送 Tag / Create and Push Tag
git tag v2.0.3 git push origin v2.0.3
-
监控发布 / Monitor Release
- 访问 GitHub Actions: https://github.com/chsword/Excel2Object/actions
- 等待约 5-10 分钟
- 验证 NuGet 和 GitHub Release
必需配置 / Required:
| Secret 名称 | 描述 | 获取方式 |
|---|---|---|
NUGET_API_KEY |
NuGet.org API 密钥 | 登录 NuGet.org → Account Settings → API Keys |
配置路径 / Configuration Path:
GitHub 仓库 → Settings → Secrets and variables → Actions → New repository secret
可选环境 / Optional Environment: nuget-production
用途 / Purpose:
- 提供发布前的审批流程
- 控制 NuGet 发布权限
配置路径 / Configuration Path:
GitHub 仓库 → Settings → Environments → New environment
项目使用 MSBuild 和 .NET SDK 的标准版本管理机制:
-
手动版本号管理 / Manual Version Management
- 版本号在
.csproj文件的<Version>标签中手动维护 - 当前格式:
主版本.次版本.修订版(例如:2.0.2)
- 版本号在
-
自动程序集版本 / Automatic Assembly Version
- 编译时,NuGet 包版本自动从
<Version>标签读取 - 程序集版本 (AssemblyVersion) 和文件版本 (FileVersion) 自动生成
- 编译时,NuGet 包版本自动从
-
版本号验证 / Version Validation
- GitHub Actions 在发布时自动验证版本号:
- ✓ SemVer 格式验证
- ✓ Tag 版本与 csproj 版本一致性检查
- ✓ 防止重复发布相同版本
- GitHub Actions 在发布时自动验证版本号:
| 变更类型 | 示例 | 版本递增 | 示例版本 |
|---|---|---|---|
| 修复 Bug | 修复空值异常 | Patch +1 | 2.0.2 → 2.0.3 |
| 性能优化 | 提升导出速度 | Patch +1 | 2.0.3 → 2.0.4 |
| 新增功能 | 支持新的 Excel 格式 | Minor +1 | 2.0.4 → 2.1.0 |
| 新增框架支持 | 支持 .NET 10.0 | Minor +1 | 2.1.0 → 2.2.0 |
| API 破坏性变更 | 删除废弃方法 | Major +1 | 2.2.0 → 3.0.0 |
| 架构重构 | 重写核心引擎 | Major +1 | 3.0.0 → 4.0.0 |
| 阶段 | 版本格式 | 用途 |
|---|---|---|
| Alpha | 2.1.0-alpha.1 |
早期开发版本,功能不完整 |
| Beta | 2.1.0-beta.1 |
功能完整,可能有 Bug |
| RC | 2.1.0-rc.1 |
候选发布版,准备正式发布 |
发布前请确认 / Before Release, Please Confirm:
- 所有单元测试通过
- 代码已经过 Code Review
- 版本号已更新(csproj)
- 发布说明已更新(README.md + README_EN.md)
- 示例代码与新版本兼容
- 文档已同步更新
- 破坏性变更已明确标注
- 在本地测试了 NuGet 包的构建
发布后检查 / After Release, Verify:
- NuGet.org 上可以搜索到新版本
- GitHub Release 已创建
- Release 包含正确的发布说明
- NuGet 包可以正常安装和使用
脚本位置 / Script Location: release.ps1
详细指南 / Detailed Guide: 📖 RELEASE_SCRIPT_GUIDE.md
这是一个 PowerShell 脚本,可以一键完成版本更新、代码提交和 Tag 创建的全部流程。
This is a PowerShell script that automates the entire process of version update, code commit, and tag creation.
基本用法 / Basic Usage:
# Windows
.\release.ps1 -Version 2.0.4
# Linux/macOS (需要安装 PowerShell Core)
pwsh ./release.ps1 -Version 2.0.4参数说明 / Parameters:
| 参数 | 必需 | 说明 |
|---|---|---|
-Version |
是 | 新版本号,格式:主版本.次版本.修订版 (例如: 2.0.3) |
-SkipPush |
否 | 仅创建本地提交和标签,不推送到远程仓库 |
-Force |
否 | 强制执行,跳过所有确认提示 |
使用示例 / Examples:
# 发布新版本 2.0.4(会提示确认)
.\release.ps1 -Version 2.0.4
# 仅本地提交,不推送到远程
.\release.ps1 -Version 2.1.0 -SkipPush
# 强制执行,跳过确认提示
.\release.ps1 -Version 3.0.0 -Force
# 组合参数使用
.\release.ps1 -Version 2.0.5 -SkipPush -Force脚本执行流程 / Script Workflow:
- ✓ 验证版本号格式(必须符合语义化版本)
- ✓ 检查 Git 仓库状态
- ✓ 检查 Tag 是否已存在
- ✓ 更新
Chsword.Excel2Object.csproj中的版本号 - ✓ 提交代码:
git commit -m "chore: bump version to X.Y.Z" - ✓ 创建 Git Tag:
git tag vX.Y.Z - ✓ 推送到远程仓库(除非使用
-SkipPush)
注意事项 / Notes:
- 脚本会自动检查工作目录是否有未提交的更改
- 如果 Tag 已存在,脚本会报错并提示如何删除
- 推送后会自动触发 GitHub Actions 的发布流程
- Windows 用户可能需要设置 PowerShell 执行策略:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 清理之前的构建
dotnet clean
# 恢复依赖
dotnet restore
# 构建 Release 版本
dotnet build --configuration Release
# 打包 NuGet
dotnet pack --configuration Release --output ./artifacts
# 查看生成的包
ls -lh ./artifacts/*.nupkg# 提取 csproj 中的版本号
CSPROJ_VERSION=$(grep -oP '(?<=<Version>)[^<]+' Chsword.Excel2Object/Chsword.Excel2Object.csproj)
echo "Project Version: $CSPROJ_VERSION"
# 如果计划发布,确保创建匹配的 tag
# git tag v$CSPROJ_VERSION- 遵循 SemVer: 严格按照语义化版本规范管理版本号
- 及时更新文档: 每次发布前更新 README 和发布说明
- 充分测试: 发布前在所有支持的框架上运行测试
- 保持一致性: 确保 Tag 版本、csproj 版本和发布说明一致
- 小步快跑: 频繁发布小的改进,而不是积累大量变更
- 向后兼容: 尽可能保持 API 向后兼容,减少破坏性变更
- 清晰沟通: 在发布说明中清楚说明所有变更和破坏性改动
如有问题或建议,请通过以下方式联系:
For questions or suggestions, please contact via:
- GitHub Issues: https://github.com/chsword/Excel2Object/issues
- GitHub Discussions: https://github.com/chsword/Excel2Object/discussions
- Email: chsword@126.com
最后更新 / Last Updated: 2025-10-11