Files
PromptX/docs/snapshot-release-system.md

184 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Snapshot 发布系统
## 概述
PromptX 使用自动化的 snapshot 发布系统,为每次 develop 分支的推送自动生成和发布 snapshot 版本,让开发者能够快速测试最新功能。
## 版本号生成规则
### 格式
```
{base-version}-snapshot.{timestamp}.{commit-hash}
```
### 示例
```
0.0.2-snapshot.20250602095731.a1f704f
```
### 组成部分
- **base-version**: 基础版本号(从 package.json 中提取)
- **snapshot**: 标识这是一个 snapshot 版本
- **timestamp**: 14位时间戳 (YYYYMMDDHHMMSS)
- **commit-hash**: 7位短 commit hash
## 自动发布流程
### 触发条件
- 推送到 `develop` 分支
- 所有测试通过
### 发布步骤
1. **环境准备**: 配置 Node.js 和 pnpm
2. **测试验证**: 运行完整测试套件
3. **版本生成**: 使用时间戳和 commit hash 生成唯一版本号
4. **NPM 发布**: 发布到 NPM registry标签为 `snapshot`
5. **PR 通知**: 自动在相关 PR 中添加评论
### CI 配置文件
`.github/workflows/snapshot.yml`
## 使用方法
### 安装和使用 Snapshot 版本
#### 方式1使用具体版本号
```bash
npx dpml-prompt@0.0.2-snapshot.20250602095731.a1f704f hello
npx dpml-prompt@0.0.2-snapshot.20250602095731.a1f704f init
```
#### 方式2使用 snapshot 标签(最新 snapshot
```bash
npx dpml-prompt@snapshot hello
npx dpml-prompt@snapshot init
```
### 查看当前 snapshot 版本
```bash
npm view dpml-prompt@snapshot version
```
### 查看所有 snapshot 版本
```bash
npm view dpml-prompt versions --json | grep snapshot
```
## 开发流程
### 开发者工作流
1. **开发功能**: 在 feature 分支开发
2. **合并到 develop**: 创建 PR 合并到 develop
3. **自动发布**: 推送到 develop 后自动触发 snapshot 发布
4. **测试验证**: 使用 snapshot 版本测试功能
5. **反馈修复**: 根据测试结果进行调整
### 测试新功能
```bash
# 获取最新 snapshot 版本
npx dpml-prompt@snapshot hello
# 测试修复的功能
npx dpml-prompt@snapshot init
npx dpml-prompt@snapshot learn assistant
```
## 版本管理
### Snapshot vs Release
- **Snapshot**: 开发中的预览版本,频繁更新
- **Release**: 稳定的正式版本,经过充分测试
### 版本生命周期
```
feature branch → develop (snapshot) → main (release)
```
### 清理旧版本
NPM 会保留所有发布的版本,但可以通过以下方式管理:
```bash
# 查看所有版本
npm view dpml-prompt versions --json
# 删除特定版本(需要维护者权限)
npm unpublish dpml-prompt@0.0.2-snapshot.xxx
```
## 优势
### 1. 零冲突发布
- 每次发布使用唯一版本号
- 避免版本冲突导致的发布失败
- 支持并行开发和测试
### 2. 可追溯性
- 版本号包含时间戳和 commit hash
- 容易追溯到具体的代码变更
- 便于问题定位和调试
### 3. 快速反馈
- 推送后立即可用
- 无需手动发布流程
- 支持快速迭代
## 故障排除
### 常见问题
#### 1. 发布失败
检查 CI 日志中的错误信息:
- NPM 认证问题
- 测试失败
- 网络连接问题
#### 2. 版本号重复
新的系统避免了这个问题,但如果遇到:
- 检查时间戳生成逻辑
- 确认 commit hash 正确
#### 3. 安装失败
```bash
# 清除 npm 缓存
npm cache clean --force
# 尝试最新 snapshot
npx dpml-prompt@snapshot hello
```
### 调试工具
#### 本地测试版本生成
```bash
./scripts/test-snapshot-version.sh
```
#### 检查发布状态
```bash
# 查看 NPM 上的最新版本
npm view dpml-prompt@snapshot
# 查看发布历史
npm view dpml-prompt versions --json
```
## 最新改进
### v2024.12 更新
- ✅ 修复了 Windows 平台 platform-folders 兼容性问题
- ✅ 解决了协议路径警告问题
- ✅ 使用 env-paths 替代 platform-folders提升跨平台兼容性
- ✅ 完善的 e2e 测试覆盖
### 测试验证
所有改进都通过了完整的测试套件验证:
- Platform-folders 兼容性测试19/19 ✅
- 协议路径警告测试:全部通过 ✅
- 跨平台兼容性测试Windows/macOS/Linux ✅
## 相关文档
- [CI/CD 配置](.github/workflows/snapshot.yml)
- [测试套件](../src/tests/issues/)
- [版本测试脚本](../scripts/test-snapshot-version.sh)
- [项目主文档](../README.md)