自动检查与发布
工作流分工
| 文件 | 触发与职责 |
|---|---|
.github/workflows/ci.yml | 主分支提交、拉取请求、合并队列和手动检查;验证并构建 |
.github/workflows/deploy.yml | 被检查工作流调用;迁移与部署应用 |
.github/workflows/infra.yml | 手动规划与应用基础设施变更 |
.github/workflows/pr-title.yml | 检查拉取请求标题 |
实际条件以工作流源码为准。模板携带这些流程,不代表你的仓库已配置所需变量、环境权限和秘密。
检查与构建
检查安装锁定依赖,运行格式、静态检查、基础设施验证、类型检查、Astro 检查、测试、应用和文档构建。基础设施验证用 init -backend=false -lockfile=readonly,不读取远程状态,也不创建资源。
应用构建产物供部署任务复用,避免检查一个版本又部署另一个未经检查的产物。产物恢复到 apps,邮件包也需要存在,因为接口引用它。
启用应用发布
部署默认通过仓库变量 DEPLOY_ENABLED 控制,只有明确设为 true 才启用。主分支提交可发布预发布;手动运行并选择生产发布时,必须从主分支发起,配置不满足会失败。
在 GitHub 配置 staging 和 production 环境,各自保存 Cloudflare 发布凭据、数据库管理连接及所需应用秘密,字段以 deploy.yml 为准。使用环境级秘密与主分支规则,避免未审查分支接触发布凭据。
发布步骤与失败处理
任务先检查构建产物,再迁移目标数据库,然后调用 scripts/deploy.ts 依次更新接口、工作台和公开入口。统一脚本本身不执行迁移,手动发布需要先单独完成。
这不是原子事务。中途失败可能出现部分 Worker 已更新,数据库也可能已迁移。修复时先确认各服务实际版本和迁移记录,再补齐发布;不要无条件取消、回滚数据库或重做破坏性迁移。
数据库变更采用分阶段兼容:增加新结构、发布新代码、后续清理旧结构。发布任务不取消正在执行的发布,拉取请求检查可取消过时运行。
基础设施工作流
基础设施只手动执行,每个环境串行。规划任务保存计划并写入运行摘要;应用任务应用同一份已保存计划,不重新计算。无变更时跳过应用。
规划与应用使用不同 GitHub 环境:infra-staging-plan、infra-production-plan、infra-staging-apply、infra-production-apply。规划使用专用令牌,应用令牌按环境对应的 HCP 工作区隔离。生产审批规则是否可用取决于仓库可配置能力,必须到设置中核实;若不可用,保留规划,在可信机器执行明确审查过的操作。
规划不是对不可信代码的沙箱,远程配置可接触工作区凭据。两个任务都限制主分支,环境分支规则是工作流自身不能绕过的约束。基础设施凭据与应用发布凭据分别管理。
复制新站后检查
更新仓库变量、环境名、主分支规则、资源名称、远程状态工作区与秘密。确认实际检查结果及发布目标;一次绿色运行也可能只有检查,没有发布,要查看被跳过的任务与条件。
修改工作流时保留固定提交版本的第三方 Actions、最小权限和不持久保存的检出凭据。不要把密钥或完整环境值写入运行日志和摘要。