From ee0b8daeee3ddb89c2fc63e0bb5d727071568e7e Mon Sep 17 00:00:00 2001 From: yourname Date: Wed, 8 Apr 2026 02:25:49 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20d8d-skills-sync=20?= =?UTF-8?q?=E6=8A=80=E8=83=BD=20=E2=80=94=20=E8=87=AA=E5=8A=A8=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=20d8d-*=20=E6=8A=80=E8=83=BD=E5=88=B0=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E4=BB=93=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新技能 d8d-skills-sync,自动检测项目中所有 d8d-* 技能目录与模板仓库的差异, 创建分支、同步文件、推送并创建 PR。包含自身在内。 Co-Authored-By: Claude Opus 4.6 --- .claude/skills/d8d-skills-sync/SKILL.md | 100 ++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 .claude/skills/d8d-skills-sync/SKILL.md diff --git a/.claude/skills/d8d-skills-sync/SKILL.md b/.claude/skills/d8d-skills-sync/SKILL.md new file mode 100644 index 0000000..4189595 --- /dev/null +++ b/.claude/skills/d8d-skills-sync/SKILL.md @@ -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 给用户