✨ 更新snapshot.yml:新增npx dpml-prompt@${version} action <roleId>命令,简化使用说明,强调测试最新develop分支功能。
This commit is contained in:
6
.github/workflows/snapshot.yml
vendored
6
.github/workflows/snapshot.yml
vendored
@ -94,12 +94,10 @@ jobs:
|
|||||||
\`\`\`bash
|
\`\`\`bash
|
||||||
npx dpml-prompt@${version} hello
|
npx dpml-prompt@${version} hello
|
||||||
npx dpml-prompt@${version} init
|
npx dpml-prompt@${version} init
|
||||||
|
npx dpml-prompt@${version} action <roleId>
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
||||||
你可以使用这个snapshot版本测试最新功能。包含以下改进:
|
💡 你可以使用这个snapshot版本测试最新的develop分支功能。`;
|
||||||
- ✅ 修复了Windows平台platform-folders兼容性问题
|
|
||||||
- ✅ 解决了协议路径警告问题
|
|
||||||
- 🔧 使用env-paths替代platform-folders,提升跨平台兼容性`;
|
|
||||||
|
|
||||||
// 为每个相关PR添加评论
|
// 为每个相关PR添加评论
|
||||||
for (const pr of prs) {
|
for (const pr of prs) {
|
||||||
|
|||||||
184
docs/snapshot-release-system.md
Normal file
184
docs/snapshot-release-system.md
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
# 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)
|
||||||
44
scripts/test-snapshot-version.sh
Executable file
44
scripts/test-snapshot-version.sh
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 测试snapshot版本生成逻辑
|
||||||
|
|
||||||
|
echo "🔍 测试Snapshot版本号生成逻辑"
|
||||||
|
echo "================================"
|
||||||
|
|
||||||
|
# 获取当前时间戳和短commit hash
|
||||||
|
TIMESTAMP=$(date +%Y%m%d%H%M%S)
|
||||||
|
SHORT_COMMIT=$(git rev-parse --short HEAD)
|
||||||
|
|
||||||
|
# 读取当前版本,移除任何现有的snapshot标识
|
||||||
|
CURRENT_VERSION=$(node -p "require('./package.json').version.split('-')[0]")
|
||||||
|
|
||||||
|
# 生成唯一的snapshot版本号:base-snapshot.timestamp.commit
|
||||||
|
SNAPSHOT_VERSION="${CURRENT_VERSION}-snapshot.${TIMESTAMP}.${SHORT_COMMIT}"
|
||||||
|
|
||||||
|
echo "📦 当前基础版本: $CURRENT_VERSION"
|
||||||
|
echo "⏰ 时间戳: $TIMESTAMP"
|
||||||
|
echo "🔗 短commit hash: $SHORT_COMMIT"
|
||||||
|
echo "🚀 生成的snapshot版本: $SNAPSHOT_VERSION"
|
||||||
|
|
||||||
|
# 验证版本号格式
|
||||||
|
if [[ $SNAPSHOT_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+-snapshot\.[0-9]{14}\.[a-f0-9]{7}$ ]]; then
|
||||||
|
echo "✅ 版本号格式正确"
|
||||||
|
else
|
||||||
|
echo "❌ 版本号格式不正确"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 模拟设置版本号
|
||||||
|
echo ""
|
||||||
|
echo "🔧 模拟设置版本号..."
|
||||||
|
npm version $SNAPSHOT_VERSION --no-git-tag-version
|
||||||
|
|
||||||
|
echo "📋 更新后的package.json版本:"
|
||||||
|
node -p "require('./package.json').version"
|
||||||
|
|
||||||
|
# 恢复原始版本
|
||||||
|
echo ""
|
||||||
|
echo "🔄 恢复原始版本..."
|
||||||
|
npm version $CURRENT_VERSION --no-git-tag-version
|
||||||
|
|
||||||
|
echo "✅ 测试完成!snapshot版本生成逻辑工作正常"
|
||||||
Reference in New Issue
Block a user