--- name: webspatial-release description: | WebSpatial SDK 仓库的版本发布与 Changesets 使用规范。 当你需要给 @webspatial/* 包发版、准备 stable 发布、做 alpha 预发布、或排查发版失败时使用。 Release workflow & Changesets guide for WebSpatial SDK. Use this when you need to publish @webspatial/*, prepare a stable release, do an alpha pre-release, or troubleshoot release failures. --- # WebSpatial 版本发布(Changesets) 本仓库是 `pnpm` workspace,多包发布由 `changesets` 统一驱动。 ## English quick guide - **Release branch: `stable`**. Publishing workflow runs on pushes to `stable`. - **Fixed version group**: core/react/builder/platform packages are versioned together. - **Commands**: `pnpm changeset`, `pnpm ci:publish`, `pnpm changeset:pre-enter`, `pnpm changeset:pre-exit`. - **After publish**: CI tags `v` and creates a sync PR from `stable` to `main`. ## 关键约定(务必先读) - **发布主分支是 `stable`**:Changesets 发布工作流仅在 push 到 `stable` 时触发(`.changeset/config.json` 里的 `baseBranch` 也是 `stable`)。 - **一组包固定同版本**:`@webspatial/core-sdk`、`@webspatial/react-sdk`、`@webspatial/builder`、`@webspatial/platform-visionos` 属于 `fixed` 组,发布时会一起涨版本。 - **主分支 `main` 会被自动同步**:stable 发布成功后,CI 会自动创建 “Merge stable into main” 的同步 PR(见 `.github/workflows/changesets.yml`)。 ## 什么时候需要 Changeset 以下情况 **必须** 加 `.changeset/*.md`: - 修改了任何 `packages/*` 中的可发布内容(对外 API、类型、行为、构建产物)。 - 修复 bug / 新增特性 / 性能优化,且会影响用户。 以下情况 **可以不加**(但要确认不影响发布包): - 仅改 demo(`apps/test-server`)、仅改测试(不影响发布包)、仅改 CI。 - 纯内部重构且不改变对外行为(建议仍加 patch,避免漏发)。 ## Changeset 如何写(建议模板) 在仓库根目录执行: ```bash pnpm changeset ``` 选择要发布的包与版本类型: - **patch**:bugfix、小改动、兼容性增强(新增可选字段、修复边界条件)。 - **minor**:向后兼容的新能力(新增 API、默认行为不变但能力增强)。 - **major**:破坏性变更(删除/重命名 API、行为不兼容、强制迁移)。 正文建议包含: - 变更点一句话(what) - 影响与原因(why) - 迁移说明(如有) ## 发布前自检(发版人/合入前都应做) 在仓库根目录: ```bash pnpm install pnpm run buildPackages pnpm test ``` 如果你改动涉及 React/事件/类型: - 确认类型导出路径与 `exports` 没破坏(尤其是 `packages/react/package.json`)。 - 对事件新增字段,优先做“向后兼容”(新增可选字段),并补单测覆盖。 ## 正式发布流程(stable 发布) 1. 确保本次要发布的改动都已在 PR 中合入,并且 changeset 已齐全。 2. 将 `main` 的发布内容合入 `stable`(团队按既定流程:merge / cherry-pick / PR)。 3. 当 `stable` 有新的 push: - GitHub Actions `Changesets` 工作流会自动运行(`.github/workflows/changesets.yml`)。 - 它会先尝试创建 “chore: update versions” 的版本 PR; - 合并后会执行 `changeset publish`(脚本 `pnpm ci:publish`),并推送 `v` tag; - 发布成功后会自动创建 stable → main 的同步 PR。 ### 发布结果确认(建议) - 在 GitHub Release / Tags 中确认出现 `v`。 - 在 npm 上确认 `@webspatial/*` 对应版本已更新。 - 如使用 Preview Release,确认临时包已失效或无误。 ## 预发布(alpha) 仓库提供了 alpha 预发布命令: ```bash pnpm changeset:pre-enter pnpm changeset:pre-exit ``` 建议用法: - 当需要给少量用户验证变更时,进入 `alpha` 预发布模式,生成 alpha 版本号,验证后退出。 - 注意:预发布仍应遵循 Changeset 规范,避免出现“发了 alpha 但忘记写 changeset”的情况。 ## 预览发布(PR/分支的临时包) 仓库有 Preview release 工作流(`.github/workflows/preview-release.yml`),用于在 PR 上产出临时包。 - 触发方式:给 PR 打上标签 `trigger: preview`(或 push 到 `main/stable` 时满足条件)。 - 作用:把 `./packages/*` 发布成临时可安装版本,便于联调验证(通过 `pkg-pr-new`)。 ## 常见故障排查 ### 1) stable push 后没有触发发布 - 确认目标分支是 `stable`(不是 `main`)。 - 确认 GitHub Actions 工作流是否被禁用。 ### 2) 发布没有产出新版本 - 大概率是本次合入没有 changeset,或 changeset 被误删。 - 检查 `.changeset/` 目录是否存在本次变更对应的 md 文件。 ### 3) fixed 组版本不一致 - 本仓库配置为 fixed 组,理论上不应不一致。 - 若出现,检查 `.changeset/config.json` 的 `fixed` 配置是否被误改,或是否存在手动改版本号的提交。 ### 4) 版本 PR 生成了但 publish 失败 - 先看 CI 日志里 `pnpm run setup` 是否成功(构建失败会导致 publish 失败)。 - 再看 npm 鉴权/权限问题(工作流使用 OIDC,相关问题需要在 CI 侧修复)。