版本发布管理Skill releasing-versions

这是一个用于软件版本发布管理的专业技能,提供完整的发布工作流指南。包含发布前验证、版本号更新、文档检查、安全扫描、构建验证和Git操作等关键步骤。适用于软件开发团队进行标准化发布流程管理,确保软件质量和发布安全。关键词:版本发布、软件发布流程、发布管理、DevOps、持续集成、软件测试、安全扫描、文档管理、Git操作、Python包发布

DevOps 0 次安装 0 次浏览 更新于 3/2/2026

name: 版本发布管理 description: 管理发布准备工作,包括验证、版本号更新、文档验证和安全检查。

版本发布管理

使用时机

  • 准备新版本发布
  • 版本号更新
  • 发布前验证
  • 发布前文档验证

发布工作流概览

阶段 目的 是否阻塞?
1. 发布前验证 测试、安全检查
2. 版本号更新 更新版本字符串
3. 文档验证 验证/更新文档 警告
4. 模板同步 Cookiecutter对齐 警告
5. 构建验证 包构建
6. Git操作 提交和打标签

阶段1:发布前验证

1.1 验证迭代任务完成

# 检查未完成任务
bpsai-pair task list --status in_progress
bpsai-pair task list --status blocked

# 检查当前状态
bpsai-pair status

阻塞项:所有任务必须完成或移至下一个迭代。

1.2 运行完整测试套件

# 所有测试必须通过
pytest tests/ -v --tb=short

# 检查覆盖率是否达到目标(80%)
pytest tests/ --cov=bpsai_pair --cov-report=term-missing --cov-fail-under=80

阻塞项:如果测试失败,则无法继续发布。

1.3 安全扫描

# 扫描意外提交的密钥
bpsai-pair security scan-secrets

# 扫描依赖项中的已知漏洞
bpsai-pair security scan-deps

阻塞项:检测到密钥 = 无法发布。 警告:依赖项漏洞应进行审查,但可能不会阻塞发布。

阶段2:版本号更新

定位版本文件

grep -E "^version|__version__" tools/cli/pyproject.toml tools/cli/bpsai_pair/__init__.py

更新两个文件

文件 格式
pyproject.toml version = "X.Y.Z"
__init__.py __version__ = "X.Y.Z"

注意:文件中的版本号没有’v’前缀。Git标签使用’v’前缀。

需要更新的相关文件

文件 更新内容
capabilities.yaml version: "X.Y.Z"
config.yaml version: "X.Y.Z"

阶段3:文档验证

3.1 必需文档

# 检查CHANGELOG是否有此版本的条目
grep -A 20 "## \[X.Y.Z\]" CHANGELOG.md

# 检查README是否提及当前功能
head -100 README.md

# 检查FEATURE_MATRIX是否最新
head -50 .paircoder/docs/FEATURE_MATRIX.md

3.2 文档新鲜度

# 检查修改日期
git log -1 --format="%ci" -- README.md
git log -1 --format="%ci" -- CHANGELOG.md
git log -1 --format="%ci" -- .paircoder/docs/FEATURE_MATRIX.md

警告:如果任何必需文档超过7天未更新 - 可能需要更新。

3.3 CHANGELOG条目格式

如果缺失,请按照Keep a Changelog格式创建条目:

## [X.Y.Z] - YYYY-MM-DD

### 新增
- 功能1
- 功能2

### 变更
- 变更1

### 修复
- 修复1

### 移除
- (如适用)

从归档任务生成内容:

bpsai-pair task changelog-preview --since <last-version>

阶段4:模板同步(仅PairCoder)

验证cookiecutter模板与当前版本匹配:

# 检查模板是否存在
ls -la tools/cli/bpsai_pair/data/cookiecutter-paircoder/

# 比较关键文件
diff .paircoder/config.yaml \
  tools/cli/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/config.yaml

diff CLAUDE.md \
  tools/cli/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/CLAUDE.md

应保持同步的关键文件:

  • config.yaml 结构(非值)
  • CLAUDE.md 说明
  • capabilities.yaml 格式
  • 技能文件

阶段5:构建验证

# 清理旧构建
rm -rf tools/cli/dist/ tools/cli/build/ tools/cli/*.egg-info

# 构建包
cd tools/cli && pip install build && python -m build

# 验证干净安装
pip install dist/*.whl --force-reinstall

# 验证版本是否正确
bpsai-pair --version

阶段6:发布检查清单

  • [ ] 所有迭代任务完成
  • [ ] 测试通过(100%)
  • [ ] 覆盖率 ≥ 80%
  • [ ] 代码库中没有密钥
  • [ ] pyproject.toml中的版本号已更新
  • [ ] init.py中的版本号已更新
  • [ ] capabilities.yaml中的版本号已更新
  • [ ] config.yaml中的版本号已更新
  • [ ] CHANGELOG已更新
  • [ ] README最新
  • [ ] FEATURE_MATRIX已更新
  • [ ] Cookiecutter模板已同步(如适用)
  • [ ] 包构建成功
  • [ ] 包安装干净

阶段7:Git操作

# 暂存所有更改
git add -A

# 提交发布消息
git commit -m "发布 vX.Y.Z"

# 创建带注释的标签
git tag -a "vX.Y.Z" -m "发布 vX.Y.Z"

# 显示将要推送的内容
git log --oneline -5
git tag -l | tail -5

暂时不要推送 - 让用户审查并确认。

阶段8:报告摘要

📦 **发布已准备就绪**:vX.Y.Z

**发布前检查**:
- ✅ 所有任务完成
- ✅ 测试:XXX通过
- ✅ 覆盖率:XX%
- ✅ 安全:干净

**文档**:
- ✅ CHANGELOG:已更新
- ✅ README:最新
- ✅ FEATURE_MATRIX:已更新
- ⚠️ 用户指南:X天前最后更新(建议审查)

**Cookiecutter**:
- ✅ 模板已同步

**构建**:
- ✅ 包已构建:bpsai_pair-X.Y.Z-py3-none-any.whl
- ✅ 安装干净
- ✅ 版本已验证

**准备发布**:
```bash
git push origin main
git push origin vX.Y.Z

然后发布到PyPI:

cd tools/cli && twine upload dist/*

## 错误恢复

### 测试失败
1. 不要继续发布
2. 修复失败的测试
3. 从阶段1重新运行

### 检测到密钥
1. 不要继续发布
2. 从历史记录中删除密钥(git filter-branch或BFG)
3. 轮换任何暴露的凭据
4. 重新运行安全扫描

### 文档过时
1. 警告,非阻塞项
2. 用户可以选择更新或继续
3. 记录决定

### Cookiecutter不同
1. 确定差异是否是有意的
2. 如果模板应该更新,请更新
3. 如果差异是项目特定的,请记录原因

## 配置参考

`config.yaml`中的发布配置:

```yaml
release:
  version_source: tools/cli/pyproject.toml
  documentation:
    - CHANGELOG.md
    - README.md
    - .paircoder/docs/FEATURE_MATRIX.md
  cookie_cutter:
    template_path: tools/cli/bpsai_pair/data/cookiecutter-paircoder
    sync_required: true
  freshness_days: 7

版本格式参考

位置 格式 示例
pyproject.toml X.Y.Z 2.9.0
init.py X.Y.Z 2.9.0
Git标签 vX.Y.Z v2.9.0
CHANGELOG [X.Y.Z] [2.9.0]