Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 0 additions & 67 deletions .github/workflows/recover-pages-0.4.0.yml

This file was deleted.

8 changes: 5 additions & 3 deletions docs/maintenance.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ pnpm metrics:sync

## CI 与发布

[2026-10-23 repoctl 6.0.1 迁移与上线记录](repoctl-migration-2026-10-23.md) 记录历史 0.3.0 补发、nightly 首次真实发布、新发布身份验证、双站 main/PR 预览及线上验收,以及仍待完成的首次受管稳定部署。
[2026-10-23 repoctl 6.0.1 迁移与上线记录](repoctl-migration-2026-10-23.md) 记录历史 0.3.0 补发、nightly 首次真实发布、新发布身份验证、双站 main/PR 预览及线上验收、0.4.0 完整稳定包发布,以及 0.4.0 两站首次受管正式部署、线上验收、截图核对和无重复提交的恢复审计。

版本与发布由 repoctl 6.0.1 统一管理,底层继续使用 pnpm 12 原生 versioning。开发分支用 `pnpm change weapp --bump minor --summary "变更说明"` 记录功能(修复用 `patch`);`.changeset/*.md` 是 pnpm change intent,不使用 Changesets CLI/action。`pnpm release:plan --json` 只读预览,`pnpm change check` 检查 intent。`pnpm-workspace.yaml` 的 `versioning.ignore` 精确排除 root 与四个私有 workspace,新增私有包时同步名单。

Expand All @@ -74,13 +74,13 @@ CLI 命令与数据按需加载;QR core/SVG、semver、string-width、cross-sp

本地 `pnpm --filter weapp preflight` 只验证包身份、Node 18、public access、资源清单、bundle policy 和构建版本;`--artifact <tarball>` 还会安装并 smoke 测试指定 tarball、确认验证前后 SHA256 不变。这些检查不请求发布凭据。npm registry 状态、认证、上传、确认与恢复由 repoctl 管理,不保留另一套手写 OIDC 或 tag 发布实现。

npm trusted publisher 必须配置 owner `weappjs`、repository `weapp.dev`、workflow filename `release.yml`、空 environment;release/nightly/audit 都通过同一文件和 GitHub 托管 runner 使用 OIDC。历史 0.3.0 已用旧发布身份补齐 npm、canonical tag 和 GitHub Release;迁移及新 publisher 配置已完成。新身份已完成 OIDC audit 和首次 nightly 真实发布,npm 连接状态为 Valid;旧 `publish-weapp.yml` trusted publisher 连接已删除,仅保留 `release.yml`。后续更换发布身份时,也须等待新身份真实发布成功后再删除旧连接,不能只依赖 OIDC audit。新身份可用 `gh workflow run release.yml --ref main -f mode=oidc-audit` 审计;`npm publish --dry-run` 不证明 OIDC 可用。异常恢复使用受管 `reconcile` 或 `publish-unpublished` 模式并明确 package/version/source-sha,不另行手工上传。
npm trusted publisher 必须配置 owner `weappjs`、repository `weapp.dev`、workflow filename `release.yml`、空 environment;release/nightly/audit 都通过同一文件和 GitHub 托管 runner 使用 OIDC。历史 0.3.0 已用旧发布身份补齐 npm、canonical tag 和 GitHub Release;迁移及新 publisher 配置已完成。新身份已完成 OIDC audit、首次 nightly 和 0.4.0 稳定包真实发布,npm 连接状态为 Valid;旧 `publish-weapp.yml` trusted publisher 连接已删除,仅保留 `release.yml`。后续更换发布身份时,也须等待新身份真实发布成功后再删除旧连接,不能只依赖 OIDC audit。新身份可用 `gh workflow run release.yml --ref main -f mode=oidc-audit` 审计;`npm publish --dry-run` 不证明 OIDC 可用。异常恢复使用受管 `reconcile` 或 `publish-unpublished` 模式并明确 package/version/source-sha,不另行手工上传。

网站也由 repoctl 管理。`repoctl-docs.yml` 的 main push 为 `web` 和 `open-source` 分别部署固定 preview;正式网站由成功 release record 触发,或明确选择已完成的 release ID 重试。正式站不会因普通 main push 更新。`repoctl-docs-deploy.yml` 保持 `docs-<site>-<channel>` 环境与同名、不可取消的并发组;Cloudflare 与 Pages 分开授予权限。每个站在隔离源码中通过边界、lint、类型、单测、构建验证和桌面/移动 E2E 后,部署同一产物并核对部署身份。

商业正式站保留 Worker `weapp-dev`、`weapp.dev` 和 `www.weapp.dev` 以及现有 www Redirect Rule;固定预览使用独立 Worker `weapp-dev-preview`。开源正式站继续使用 GitHub Pages 和 `weapp.js.org`,固定预览使用 `weapp-open-source-preview`。预览产物包含 noindex、禁用生产统计、保留生产 canonical;Pages 正式产物继续包含 CNAME、兼容 `/weapp.dev/` 路径、不生成 `.nojekyll`。两个 preview Worker 先完成 main 预览部署,后续 PR 才能上传 Worker Version。当前固定预览入口为 [weapp.dev 预览](https://weapp-dev-preview.sonofmagic.workers.dev) 和 [开源站预览](https://weapp-open-source-preview.sonofmagic.workers.dev);PR 返回绑定该次源码 SHA 的固定版本 URL,具体回执见迁移记录。

Commercial CI 和 Open source CI 保留独立验证以及同仓 PR 的临时 Worker Version 预览。PR 构建完成后记录 site、PR head SHA、deployment ID,再执行 E2E;部署任务只下载并验证该产物,不重新构建。fork PR 只运行验证,不注入 Cloudflare 凭据。PR 关闭不会改变固定预览或正式流量。Cloudflare 凭据由 GitHub Actions 的 secret 上下文提供;当前仓库继承组织级 `CLOUDFLARE_ACCOUNT_ID` 和 `CLOUDFLARE_API_TOKEN`,main 与同仓 PR 均复用已有授权。核对凭据时同时检查组织、仓库和环境级设置,仓库级 secret 列表为空不代表没有继承凭据。GitHub Pages 的 `pages: write`、`id-token: write` 只授予开源正式部署 job;其 JavaScript action 将 artifact 服务环境传给 repoctl,避免独立 shell 丢失上传上下文。
Commercial CI 和 Open source CI 保留独立验证以及同仓 PR 的临时 Worker Version 预览。PR 构建完成后记录 site、PR head SHA、deployment ID,再执行 E2E;部署任务只下载并验证该产物,不重新构建。fork PR 只运行验证,不注入 Cloudflare 凭据。PR 关闭不会改变固定预览或正式流量。Cloudflare 凭据由 GitHub Actions 的 secret 上下文提供;当前仓库继承组织级 `CLOUDFLARE_ACCOUNT_ID` 和 `CLOUDFLARE_API_TOKEN`,main 与同仓 PR 均复用已有授权。核对凭据时同时检查组织、仓库和环境级设置,仓库级 secret 列表为空不代表没有继承凭据。GitHub Pages 的 `pages: write`、`id-token: write` 只授予开源正式部署 job;其 JavaScript action 将 artifact 服务环境传给 repoctl,避免独立 shell 丢失上传上下文。Pages API 的 `pages_build_version` 使用真实源码 SHA;完整 repoctl deployment ID 仍保存在平台回执和公开 `repoctl-deployment.json` 中,不用该 ID 替代 Git commit。

站点配置的 `releaseInputs` 除 `weapp` 本身外,也包含 CLI 打包所需的中立 catalog、Logo 与共享 UI 输入,以及根 `package.json`、锁文件、workspace 配置和 dependency patches。`patchPaths` 为空,尚不允许绕过正式发布追加文档修补提交。普通站点内容更新可先在 main preview 验收,正式上线绑定下一条已完成 release record。首条受管正式部署必须来自包含本次迁移配置、构建脚本和 adapter 的新版本 release record;补齐历史 0.3.0 发布只完成 npm 基线,不会把新部署代码加入历史源码。不要以旧 0.3.0 记录启动新网站部署,也不要修改旧 tag。双站互不导入,开源产物继续扫描商业文案、联系方式与私有资源。

Expand All @@ -92,6 +92,8 @@ Commercial CI 和 Open source CI 保留独立验证以及同仓 PR 的临时 Wor

PR 验证产物仍为 web-dist 和 open-source-dist;受管部署产物名称包含 site、channel、run ID 与 attempt,保存 30 天,测试和部署证据保存 7 天。发布前记录上一成功部署对应的运行号与提交;若接近保留期,先下载该运行的产物备份,再发布。

状态分支的跨文件更新发生 HTTP 409 时,仅在目标文件 revision 未变的情况下有限重试;同一文件已改变则停止,避免覆盖并发结果。Cloudflare 上传后仅轮询确认版本,不重复上传。Pages 已有平台 ID 时复用回执查询;结果未知时停止,不能再次提交。日志只保留状态、请求 ID 与发布身份,不记录凭据。

同一条失败或未完成的部署可按其 release ID 重试;repoctl 6 不允许较旧来源覆盖已完成的新来源,因此选择旧 release record 不能用于常规回滚。需要恢复旧行为时,在 main 提交 forward revert 并完成新的稳定发布,保留来源单调前进。紧急情况下可在 Cloudflare 回滚至上一 Worker Version,或把已归档的开源产物重新部署到 Pages;这属于平台直接恢复,必须记录实际版本、产物身份及与 repoctl 状态的差异,随后用新的稳定发布重新对齐。不要重新构建覆盖待回滚文件。两站可分别恢复;共享包回退前评估两站影响。

上线后核对中英文首页、项目目录、一个确认服务项目与规划中项目、隐私页、sitemap、静态资源和统计请求;开源站额外验证 /weapp.dev/ 子路径及历史跳转,商业站额外验证联系方式与赞助页面。只有真实部署后的检查通过,才能报告线上验收完成。
Loading