Skill · 整体架构概览
何时用:搞不清楚四个仓库都是干嘛的、谁推谁、谁渲染谁的时候。
解决什么:把 sbraveyoung 系博客生态的四个 GitHub 仓库以及它们之间的发布链路一次说清,作为后续所有 skill 的上下文锚点。
四个仓库,一句话各自的角色
| 仓库 | 角色 | 谁在维护 |
|---|---|---|
sbraveyoung/blog |
markdown 原始内容(唯一可信源) | 我(手写) |
sbraveyoung/gobog |
Go 写的渲染引擎 + 三套主题 | 我(手写) |
sbraveyoung/gobog-obsidian |
Obsidian 插件:双向同步 + 自动 front-matter + 微信草稿推送 + 本地预览 | 我(手写) |
sbraveyoung/sbraveyoung.github.io |
渲染后的 HTML,挂在 GitHub Pages 上 | 机器(CI 维护) |
关键约束:github.io 仓库不要手改——它的工作树会被 deploy workflow 整体替换。手改的东西下次 deploy 就没了。允许手改的只有 _gobog.json 和 .github/、scripts/。
数据流
本地 Obsidian vault
╱ Blog/
post/ ← 文章
pages/ ← /about、/contact 这种顶层页
resource/image/ ← 图片
│
│ gobog-obsidian 插件(双向)
│ • Pull:fetch + ff-only
│ • Push:stage → diff confirm → commit → push
│ • 新文件自动填 front-matter
▼
sbraveyoung/blog (GitHub)
│
│ push 到 master 触发
│ .github/workflows/deploy.yml → repository_dispatch
│ (event_type=blog-update) → 通知 github.io
▼
sbraveyoung/sbraveyoung.github.io 的 deploy.yml 跑起来:
1. checkout sbraveyoung/blog (markdown)
2. checkout sbraveyoung/gobog (渲染引擎)
3. go build ./_gobog/src (编译)
4. 读 _gobog.json 拼出 _gobog.toml (主题、评论、品牌)
5. gobog -config _gobog.toml -export _dist
6. scripts/check-export.sh _dist (死链 / 孤儿资源审计)
7. 用 _dist/ 替换工作树 + commit + push
▼
GitHub Pages 自动伺服 → sbrave.cn
唯一可信源 (source-of-truth) 规则
- 内容永远从 vault → blog → github.io 流,单向。github.io 上看到的内容,源头一定在
sbraveyoung/blog/source/。 - URL 由
front-matter url:锚定。一旦写过,gobog 永不会改。改一篇老文章的 URL = 对外的死链,慎重。 - 主题 + 品牌 + 评论开关住在
sbraveyoung.github.io/_gobog.json,不在 blog 里。改这些是在 github.io 仓库的提交,不是 blog。 - 代码逻辑(渲染、URL 生成、front-matter 默认填充)在
sbraveyoung/gobog。改这里要重新跑 deploy 才能在 github.io 上看到。
三种典型操作的"该改哪个仓库"
| 想做的事 | 改哪儿 |
|---|---|
| 写 / 改一篇文章 | vault 的 Blog/,插件 push 到 sbraveyoung/blog |
| 换主题、改站点标题、开评论 | sbraveyoung.github.io/_gobog.json |
| 改渲染逻辑、加 URL 路由 | sbraveyoung/gobog,再触发 github.io 的 deploy 才能看到效果 |
| 调插件行为(同步、模板等) | sbraveyoung/gobog-obsidian,本地 npm run build 后在 Obsidian 里 reload |
后续每个 skill 都默认你已经懂这张图。