4.3 KiB
4.3 KiB
TODO
基于当前仓库现状整理的最小落地清单。当前项目定位已经明确为:
静态站点 + 构建时数据同步层
目标不是加长期在线后端,而是补齐:
- 构建时从 Gitea / Seafile 主动拉数据
- 生成站点内部统一消费的只读数据
- 提供稳定的重建入口与失败兜底
当前已具备
- Astro 静态站骨架
- 首页、项目页、分享页、日志列表页、日志详情页
src/config.ts站点基础配置src/content/logs/*.md日志内容集合- 项目 / 分享静态种子数据入口(当前仍为手工 JSON)
npm run build静态构建命令
P0:先补齐可运行的数据同步链
1. 增加内容同步脚本
- 新建
scripts/fetch-gitea.ts - 新建
scripts/fetch-seafile.ts - 新建
scripts/sync-content.ts - 约定职责:
fetch-gitea.ts:拉取贡献热力图、最近活动、选定仓库摘要fetch-seafile.ts:拉取特定目录 / 特定文件元数据与分享链接sync-content.ts:统一清洗、转换、校验、写入站点数据文件
2. 明确生成数据写入位置
- 改为统一输出到:
src/data/generated/projects.jsonsrc/data/generated/shares.jsonsrc/data/generated/gitea-activity.json
- 页面层统一只读最终生成数据,不直接处理上游原始响应
3. 增加环境变量约定
- 新建
.env.example - 至少定义:
GITEA_BASE_URL=GITEA_TOKEN=GITEA_USERNAME=SEAFILE_BASE_URL=SEAFILE_TOKEN=SYNC_OUTPUT_DIR=
- 如需镜像下载文件,再补:
SEAFILE_MIRROR_DOWNLOADS=DOWNLOADS_OUTPUT_DIR=
- 确保 token 只在服务端构建环境 / AstrBot 环境中使用
4. 增加 package scripts
- 在
package.json中补充:content:syncrebuild
- 推荐执行链:
npm run content:syncnpm run build
5. 明确失败策略
- 约定 Gitea / Seafile 拉取失败时如何处理:
- 默认保留上次成功数据继续构建
- 必要时可通过参数切换为严格失败
- 在同步脚本里输出明确日志,便于 Astrbot 告警
P1:强烈建议尽快补上
6. 给 JSON 数据加校验
- 为 projects 数据建立 schema 校验
- 为 shares 数据建立 schema 校验
- 为 gitea activity 数据建立 schema 校验
- 在构建前先校验数据格式,避免远程脏数据直接打爆页面
7. 增加同步元数据
- 生成
updatedAt - 生成
source - 生成
itemCount - 前端可显示“数据更新时间”
8. 增加变更检测
- 数据无变化时跳过部署
- 可通过 hash / diff / 序列化比较实现
9. 增加日志与通知
- Astrbot 每日 00:00 触发同步与重建
- 成功时发送通知
- 失败时发送告警
- 支持手动补跑一次
P2:后续完善项
10. 把 Gitea Activity 从静态占位改成真实数据
- 当前
src/components/GiteaActivity.astro仍是静态示例数据 - 改为读取
src/data/generated/gitea-activity.json - 再决定是否需要客户端渲染热力图
11. 仓库数据与页面映射收口
- 明确“哪些仓库进入 projects”
- 明确“哪些仓库只用于 activity 不进入 projects”
- 决定项目封面图是继续本地维护,还是允许远程字段补充
12. Seafile 下载策略收口
- 首版默认只展示元数据 + 下载链接
- 评估是否需要构建时同步特定打包文件到
public/downloads/ - 如同步文件本体,补充大小限制、覆盖策略、清理策略
13. 补部署文件
- 增加
Dockerfile - 增加
docker-compose.yml - 明确静态产物部署方式
14. 补文档
- 在 README 或单独文档里写清:
- AstrBot / cron 如何触发
- 环境变量如何配置
- 同步脚本职责
- 构建失败如何排查
推荐最小闭环
- AstrBot 每天 00:00 触发
- 执行
npm run content:sync - 执行
npm run build - 部署静态产物
- 发送成功/失败通知
实施顺序建议
- 先补
.env.example - 再补
scripts/sync-content.ts - 再补
fetch-gitea.ts/fetch-seafile.ts - 再补
package.jsonscripts - 再补 projects / shares / activity schema 校验
- 最后接 AstrBot 定时任务