docmd-io/deploy Action 会构建您的文档站点,并输出编译后资源的路径,可直接上传到 GitHub Pages 或任何其他托管目标。它在一个可组合的 Action 中处理 Node.js 安装、配置检测、依赖安装以及构建步骤。
请使用 入门模板 (Starter Template) — 它包含一份预配置的工作流文件和一个开箱即用的仓库结构。GitHub Action 最适合为已有的仓库添加 docmd 部署。
快速开始
将 Action 添加到仓库中的任意工作流文件:
# .github/workflows/docs.yml
name: Deploy Docs
on:
push:
branches: [main]
permissions:
contents: write
pages: write
id-token: write
jobs:
docs:
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deploy.outputs.page_url }}
steps:
- uses: actions/checkout@v4
- uses: docmd-io/deploy@v1
id: build
- uses: actions/upload-pages-artifact@v3
with:
path: ${{ steps.build.outputs.site-dir }}
- uses: actions/deploy-pages@v4
id: deploy
可复用工作流
若想精简到极致,可使用托管的可复用工作流。它在一个调用中处理权限、checkout、build、upload 和 deploy:
# .github/workflows/docs.yml
on:
push:
branches: [main]
jobs:
docs:
uses: docmd-io/deploy/.github/workflows/deploy.yml@v1
输入 (Inputs)
| 输入 | 默认值 | 说明 |
|---|---|---|
node |
20 |
构建期间使用的 Node.js 版本 |
输出 (Outputs)
| 输出 | 说明 |
|---|---|
site-dir |
编译后站点目录的相对路径(例如 site/) |
Action 的执行过程
该 Action 在内部会执行以下步骤:
- 设置 Node.js 使用指定的版本。
- 检测您的配置 — 在仓库目录树(最多向下两层)中查找
docmd.config.json、docmd.config.js或docmd.config.ts。完全支持子目录中的配置。 - 初始化 docmd — 如果未找到任何配置,会运行
npx @docmd/core init自动生成一份。 - 安装依赖 — 如果存在
package.json,则运行npm ci,否则直接安装@docmd/core。 - 构建站点 — 运行
npx @docmd/core build,并从您的配置中读取输出目录。 - 输出路径 — 暴露
site-dir,以便上传步骤知道从哪里取编译后的资源。
首次设置
GitHub Pages 必须配置为从 GitHub Actions 部署(而非从某个分支)。每个仓库只需执行一次:
- 在 GitHub 上打开您的仓库。
- 进入 Settings → Pages。
- 在 Source 下选择 GitHub Actions。
- 保存。
完成此设置后,每次推送到 main 都会自动触发一次部署。
嵌套配置支持
如果您的 docmd.config.json 位于子目录中 —— 例如 Monorepo 中的 packages/docs/docmd.config.json —— Action 会自动检测到它,并将 --cwd 传递给 docmd。无需手动配置路径。
自定义域名
要使用自定义域名:
- 在
docs/目录(或您配置的 assets 目录)中添加一个CNAME文件,内容为您的域名,例如docs.example.com。 - 将
docmd.config.json中的url字段设置为您的自定义域名,以确保站点地图和规范标签正确。 - 在 Settings → Pages → Custom domain 中配置域名。
固定 Action 版本
对于生产环境的文档站点,请固定到具体的发布标签,而不是 @v1:
- uses: docmd-io/deploy@v1.0.0
id: build
这样可以避免未来次要更新带来的意外行为。
故障排查
Error: Dependencies lock file is not found
当 actions/setup-node 配置了 cache: 'npm' 但仓库中不存在 package-lock.json 时会出现此错误。docmd-io/deploy Action 内部已处理缓存 —— 使用此 Action 时,请勿再额外添加带有 cache: 'npm' 的 actions/setup-node 步骤。
构建成功,但站点无法访问
请确保 GitHub Pages 被设置为从 GitHub Actions 部署,而非从某个分支部署。参见上方的 首次设置。
未检测到配置
Action 最多向下搜索两层目录。如果您的配置位于更深的层级,请在自定义工作流步骤中手动传递 --cwd,或者使用 Deployer 生成一份量身定制的工作流文件。