ADR-0001:托管文档平台
状态与日期
已接受 — 2026-08-02。
背景
ViewCompose 需要一套统一的公开文档系统,承载框架原理、教程、Compose 迁移、Android Studio 工具和自动生成的 Kotlin/Java API Reference。公开 Maven 制品各自拥有独立版本,因此模块手册 和 API Reference 不能假设整个仓库共用一条发布列车。
描述代码的文档必须与代码在同一 PR 中修改。生成的 HTML 不提交到仓库;托管层必须可以替换, 且替换时不改变公共 URL。初始方案除现有域名外不应产生持续基础设施成本。
决策
- 手写文档源继续放在仓库
docs/目录。 - Docusaurus 3 从该目录构建公开站点,提供导航、国际化内容、版本化文档和可扩展 UI 组件。
- Dokka 2 按 Maven 制品和版本生成 Kotlin/Java API Reference。每个模块版本绑定完整且不可变
的源码提交,使生成的行链接永远不跟随
main。托管格式为 Dokka HTML,生成结果不入库。 - GitHub Actions 验证 PR 并组装生产产物,只有
main可以部署。 - GitHub Pages 在
docs.viewcompose.com托管静态结果。 - 站点源码放在
website/;生成的 API 输出放在被忽略的构建或生成目录。 - 已发布制品元数据与
docs/modules/README.md驱动模块导航,站点配置不复制模块注册表。 - 公共路由遵循文档治理规范中的生成器无关契约。
- 搜索先使用可本地静态运行的方案;生产域名可用后,可切换到免费的 Algolia DocSearch。
评估过的替代方案
VitePress 方案
VitePress 构建更轻量,内置本地搜索且国际化体验良好。但独立文档版本需要更大的自定义子系统, 因此未选择。
Material for MkDocs 方案
Material for MkDocs 写作体验和浏览器搜索都很优秀,但版本化与多语言模型依赖额外项目和工具, 会增加独立模块版本之间的协调成本。
专用托管文档服务
托管服务可以降低初始搭建成本,但会把文档变化与代码审查分离,引入服务专属存储和计费,并 削弱对模块版本模型的控制。
结果与取舍
- 仓库在 Gradle 之外增加一套 Node 站点工具链。
- 站点构建必须保持在 GitHub Pages 的部署与体积限制内。
- Dokka 输出需要缓存或增量生成,普通文档变化不应重建所有历史 API 版本。
- Docusaurus 模块配置必须从权威目录生成,不能手工复制。
- 自定义域名让未来的托管迁移对读者透明。
- 不支持动态服务端功能,部署产物始终是静态站点。
受影响的模块与契约
gradle/viewcompose-publishing.properties 中登记的所有制品都参与 API Reference 生成。文档
结构、发布工作流和源码注释质量门禁也受到影响。
验证与落地
- 在本地和 PR 上构建 Docusaurus 站点。
- 先为选定制品生成 Dokka HTML,再覆盖完整发布目录。
- 验证不可变版本路由、
current/稳定版latest别名、源码链接、完整模块目录一致性和站点体积。 - 仅允许
main部署 Pages。 - 第一次 Pages 部署成功后配置并验证
docs.viewcompose.com。 - 当前文档站稳定后加入逐模块发布快照和 API 历史保留。