feat: 新增 d8d-skills-sync 技能 #3
100
.claude/skills/d8d-skills-sync/SKILL.md
Normal file
100
.claude/skills/d8d-skills-sync/SKILL.md
Normal file
@@ -0,0 +1,100 @@
|
||||
---
|
||||
name: d8d-skills-sync
|
||||
description: '将项目中 .claude/skills/ 下所有 d8d-* 技能目录(d8d-dev、d8d-requirements、d8d-prototype、d8d-skills-sync 等)的修改同步到 bmad-method-template 模板仓库并创建 PR。使用场景:修改了 .claude/skills/ 下任何 d8d-* 目录的文件后,需要将改动同步到上游模板仓库时触发。触发词:同步技能、提PR、sync skill、更新模板。'
|
||||
---
|
||||
|
||||
# D8D Skills Sync — 技能变更同步到模板仓库
|
||||
|
||||
将项目 `.claude/skills/` 下所有 `d8d-*` 目录的修改同步到 `https://gitea.d8d.fun/d8dfun/bmad-method-template` 并创建 PR。
|
||||
|
||||
同步范围:所有匹配 `d8d-*/` 的技能目录(包括 d8d-dev、d8d-requirements、d8d-prototype、d8d-skills-sync 自身等)
|
||||
|
||||
## 配置
|
||||
|
||||
```
|
||||
TEMPLATE_REPO_URL: https://gitea.d8d.fun/d8dfun/bmad-method-template.git
|
||||
TEMPLATE_REPO_API: https://gitea.d8d.fun/api/v1/repos/d8dfun/bmad-method-template
|
||||
LOCAL_CLONE_PATH: /tmp/bmad-method-template
|
||||
SYNC_PATTERNS: .claude/skills/d8d-*/
|
||||
```
|
||||
|
||||
Gitea 认证信息从项目 git remote URL 提取(oauth2 token 在 remote URL 中)。
|
||||
|
||||
## 工作流程
|
||||
|
||||
### Step 1: 准备模板仓库
|
||||
|
||||
```bash
|
||||
if [ -d /tmp/bmad-method-template ]; then
|
||||
cd /tmp/bmad-method-template && git pull
|
||||
else
|
||||
git clone https://gitea.d8d.fun/d8dfun/bmad-method-template.git /tmp/bmad-method-template
|
||||
fi
|
||||
```
|
||||
|
||||
### Step 2: 检测变更
|
||||
|
||||
对每个 `d8d-*` 技能目录逐一对比(自动发现,不硬编码):
|
||||
|
||||
```bash
|
||||
# 动态扫描项目中所有 d8d-* 技能目录
|
||||
for skill_dir in {PROJECT_ROOT}/.claude/skills/d8d-*/; do
|
||||
skill=$(basename $skill_dir)
|
||||
diff -rq $skill_dir /tmp/bmad-method-template/.claude/skills/$skill/ 2>/dev/null || true
|
||||
done
|
||||
```
|
||||
|
||||
- 如果无差异 → 告知用户"所有 d8d-* 技能文件已是最新,无需同步"
|
||||
- 如果有差异 → 列出变更文件清单,继续 Step 3
|
||||
|
||||
### Step 3: 创建分支并同步
|
||||
|
||||
```bash
|
||||
cd /tmp/bmad-method-template
|
||||
BRANCH_NAME="sync/d8d-skills-$(date +%Y%m%d-%H%M%S)"
|
||||
git checkout master && git pull
|
||||
git checkout -b $BRANCH_NAME
|
||||
|
||||
# 同步所有 d8d-* 技能目录(自动发现)
|
||||
for skill_dir in {PROJECT_ROOT}/.claude/skills/d8d-*/; do
|
||||
skill=$(basename $skill_dir)
|
||||
mkdir -p .claude/skills/$skill/
|
||||
cp -r $skill_dir* .claude/skills/$skill/
|
||||
done
|
||||
```
|
||||
|
||||
### Step 4: 提交
|
||||
|
||||
```bash
|
||||
git add .claude/skills/d8d-*/
|
||||
git commit -m "sync: {简要描述变更内容}"
|
||||
```
|
||||
|
||||
提交消息格式:`sync: {变更摘要}`,摘要从实际 diff 内容提炼。
|
||||
|
||||
### Step 5: 推送并创建 PR
|
||||
|
||||
```bash
|
||||
git push -u origin $BRANCH_NAME
|
||||
```
|
||||
|
||||
通过 Gitea API 创建 PR:
|
||||
|
||||
```bash
|
||||
TOKEN=$(git -C {PROJECT_ROOT} remote get-url origin | sed 's|https://oauth2:\([^@]*\)@.*|\1|')
|
||||
|
||||
curl -X POST "${TEMPLATE_REPO_API}/pulls" \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"head\": \"$BRANCH_NAME\",
|
||||
\"base\": \"master\",
|
||||
\"title\": \"sync: {变更摘要}\",
|
||||
\"body\": \"## 变更内容\\n\\n{变更文件列表和说明}\\n\\n## 测试\\n\\n- [ ] 在新项目中运行 SETUP 阶段验证\"
|
||||
}"
|
||||
```
|
||||
|
||||
### Step 6: 验证
|
||||
|
||||
- 确认 API 返回 `html_url`(PR 链接)
|
||||
- 输出 PR URL 给用户
|
||||
Reference in New Issue
Block a user