Commit 854a4a9
authored
feat(MOC-52): Code Graph 自动生成器 + GitHub Pages Actions 部署 (#298)
* feat(MOC-52): code graph 自动生成器 + GitHub Pages Actions 部署
tools/code-graph/gen.py:从 `cargo metadata` 自动推导 workspace crate 节点 +
内部依赖边(ground truth + 每 crate .rs 文件数),渲染自包含交互式 index.html
—— D3 force graph,深空仪表盘视觉(渐变 mesh 背景 + 发光球体节点 + 玻璃拟态
面板 + Syne / JetBrains Mono 字体)。点节点高亮邻居 + 看 path/version/files/deps,
支持 zoom/drag。
.github/workflows/code-graph.yml:push main(任意 Cargo.toml / 生成器 / workflow
本身)+ workflow_dispatch → 生成 → configure-pages(自动把 Pages Source 切到
GitHub Actions)→ deploy-pages。产物不提交任何分支:main 纯源码、无 bot commit、
无 force-push、gh-pages 分支随之作废。
替换 Codex 之前手工硬编码且 diff 标记损坏的 gh-pages 快照(289/395 行带 `+`
前缀 → `<script>` 从 `+const` 开始 = JS 语法错误,交互全失效)。生成器输出经
本地 + Playwright 浏览器实测(9 crates / 15 edges 准确、交互正常、self-contained)。
Refs #297
* feat(MOC-52): 并入下载量趋势图 — Pages 站点同时出 code graph + 下载图
download-stats 折叠进站点 workflow(用户定:不另开分支、不碰 main):
- tools/download-stats/gen_chart.py:读回 Pages 上已发布的 downloads.json 历史 +
今日 release 总下载数 → upsert 今日点 → 写合并 json + 渲染自包含深色 SVG 折线图。
GitHub 不暴露下载历史,故每日快照累积;数据存 Pages 部署本身(每次 run 从 live
URL 读回 append),无需额外分支、无需 commit main。
- code-graph.yml → name "Project Site":加每日 cron + download-stats step
(curl 读回 downloads.json → gh api 求 release 总下载 → gen_chart.py →
_site/{downloads.json,downloads.svg} 连同 index.html 一起 deploy)。
配合 #297 README 底部嵌入 downloads.svg + star-history 双图。
Refs #297
* fix(MOC-52): review 修复 — 单遍 token 替换 + 显式切 Pages 到 Actions
- code-graph/gen.py:多遍 str.replace 改单遍 regex sub。否则若某 crate 描述/名/
路径含 __TOKEN__ 字面量,会被后续 pass 覆盖污染 JSON(Devin review BUG)
- code-graph.yml:deploy 前显式 `gh api PUT pages build_type=workflow`(idempotent)。
configure-pages 不会把已存在的 legacy(gh-pages 分支)Pages 切到 Actions,首次
deploy 否则无法替换旧的损坏快照(chatgpt-codex-connector P1)
* fix(MOC-52): 下载数据 fetch 失败只在 404 重置,其他错误 abort 保历史
chatgpt-codex-connector P2:`curl ... || echo '[]'` 把任何 fetch 失败(网络超时 /
5xx / TLS)都当 404,会用单点序列覆盖部署 → 永久截断下载历史(历史只存在已部署的
downloads.json)。改为按 HTTP 状态码区分:200 用 body、404(首跑/未发布)才从 []
起、其他状态 exit 1 不部署,保住上次的历史。
* fix(MOC-52): README 图表按反馈调整 + 下载 fetch 失败不截断历史
按用户反馈:
- Code Graph 从「能做什么」功能列表移到顶部导航(简体中文 / English / Changelog /
Code Graph),纯文字链接 —— 它是 README 展示入口而非项目功能
- 删掉下载图图注的「(每日自动刷新)」—— 刷新机制不该写进图注
- star + 下载图统一白底(star 去 theme=dark、下载 SVG 改浅色主题)—— 嵌入图与
点击跳转的 star-history 页(白底)一致,消除黑底/白底不一致的困惑
chatgpt-codex-connector P2:download-stats step 加 `set -eo pipefail` + 拆开
gh api 与 awk —— 否则 gh api 失败时 awk 仍输出 0,会发布今日=0 覆盖持久化历史。
* fix(MOC-52): 下载历史 prev.json 解析失败/非 list 时 fail,不静默重置
chatgpt-codex-connector P2:load_series 对 malformed 200 body(坏的旧部署 / 手动
误改 / 200 返 HTML 错误页)静默返 [] 会用单点序列覆盖唯一持久化历史。改为 raise
(被 set -e fail job,保住历史);workflow 首跑写的合法 "[]" 仍正常解析为空序列。1 parent 33d9940 commit 854a4a9
6 files changed
Lines changed: 680 additions & 8 deletions
File tree
- .github/workflows
- tools
- code-graph
- download-stats
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
97 | 97 | | |
98 | 98 | | |
99 | 99 | | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
| 16 | + | |
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
| |||
75 | 76 | | |
76 | 77 | | |
77 | 78 | | |
78 | | - | |
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
| |||
302 | 302 | | |
303 | 303 | | |
304 | 304 | | |
305 | | - | |
| 305 | + | |
306 | 306 | | |
307 | 307 | | |
308 | | - | |
| 308 | + | |
309 | 309 | | |
310 | 310 | | |
311 | 311 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
| 16 | + | |
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
| |||
75 | 76 | | |
76 | 77 | | |
77 | 78 | | |
78 | | - | |
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
| |||
301 | 301 | | |
302 | 302 | | |
303 | 303 | | |
304 | | - | |
| 304 | + | |
305 | 305 | | |
306 | 306 | | |
307 | | - | |
| 307 | + | |
308 | 308 | | |
309 | 309 | | |
310 | 310 | | |
| |||
0 commit comments