CesiumJS 月度发布火车:发布排期表、负责人轮换机制及其与发布流程的衔接
【免费下载链接】cesiumAn open-source JavaScript library for world-class 3D globes and maps :earth_americas:项目地址: https://gitcode.com/GitHub_Trending/ce/cesium
本文围绕 CesiumJS 仓库中的发布排期文件 ReleaseSchedule.md 展开:完整解读该文件记录的 2025 年 11 月至 2026 年 12 月的月度发布排期表,结合 CesiumJS Release Guide 说明"每月第一个工作日发版"的排期规则、社区共享发布职责(release ownership)的轮换设计,以及如何从仓库当前状态(版本号文件、CHANGES.md 变更记录)验证排期表的实际执行情况。
一、排期表在 CesiumJS 发布体系中的定位
CesiumJS 的发布流程集中维护在 ReleaseGuide 目录下,该目录由三份文档构成:
- Release Schedule(本文主体):ReleaseSchedule.md,记录即将到来的每次月度发布及其负责开发者(release manager);
- Patch Release Guide:PatchReleases/README.md,说明在正式发布之外如何提前发布补丁版本(如出现重大回归或已发布依赖版本出现问题时);
- Prerelease Guide:Prereleases/README.md,说明如何在正式发布之前发布带 dist-tag 的预发布版本(通常用于内部测试)。
排期表本身非常精简,就是一张"日期 + 负责人"的映射表。它的价值不在于文档篇幅,而在于它是整个发布体系的操作入口:任何一位 committer 都可以领取某个月份的发布职责,排期表就是这次"交接"的公开记录。
二、完整的月度发布排期(2025-11 至 2026-12)
以下为 ReleaseSchedule.md 中的全部排期条目,完整保留原文档的 14 个月度发布计划,并补充了星期信息(依据日期推算,经逐一核验均为工作日):
| 排期日期 | 星期 | 负责开发者 |
|---|---|---|
| 2025-11-03 | 周一 | @jjspace |
| 2025-12-01 | 周一 | @mzschwartz5 |
| 2026-01-05 | 周一 | @mzschwartz5 |
| 2026-02-02 | 周一 | @ggetz |
| 2026-03-02 | 周一 | @jjhembd |
| 2026-04-01 | 周三 | @lukemckinstry |
| 2026-05-01 | 周五 | @jjspace |
| 2026-06-01 | 周一 | @lukemckinstry |
| 2026-07-01 | 周三 | @ggetz |
| 2026-08-03 | 周一 | @jjhembd |
| 2026-09-01 | 周二 | @mzschwartz5 |
| 2026-10-01 | 周四 | @lukemckinstry |
| 2026-11-02 | 周一 | @ggetz |
| 2026-12-01 | 周二 | @jjhembd |
从源码结构看,这份排期由五位核心贡献者(jjspace、mzschwartz5、ggetz、jjhembd、lukemckinstry)轮流承担,每人平均负责约 2~3 个月度版本,职责在时间轴上交错分布,而非连续包月。
三、排期规则:每月第一个工作日发版
Release Guide 开篇明确写道:
"We release CesiumJS on the first workday of every month."(我们在每月第一个工作日发布 CesiumJS。)
将上表中的 14 个日期与该规则逐一比对,可以验证排期表完全遵循这一规则:
- 所有日期都落在周一至周五:如 2026-04-01(周三)、2026-07-01(周三)、2026-10-01(周四)等,日期为当月 1 日且当天是工作日的月份,直接定在 1 日。
- 遇到周末则顺延到下一个工作日:
- 2025-11-01 是周六、11-02 是周日,因此定在 11-03(周一);
- 2026-02-01、2026-03-01、2026-08-01 均为周日,分别定在 02-02、03-02、08-03(周一);
- 2026-09-01 是周二、2026-12-01 是周二,当天即为工作日,直接采用。
- 遇到节假日同样顺延:2026 年 1 月 1 日为元旦假期、1 月 2 日又是周四之后紧接着的周末,排期表将 1 月发布定在 2026-01-05(周一),符合"第一个工作日"的口径。
这套规则的实际意义在于:下游用户可以在每个月的月初形成稳定的升级预期(例如月初运行npm outdated/ 升级 CesiumJS 依赖),而 CesiumJS 的 Patch Release Guide 也明确将月度发布称为 "monthly train releases"(月度发布火车),补丁版和预发布版都是在"火车班次"之外的补充机制。
四、共享发布职责:没有专职 Release Manager
排期表中"User"一列体现的不是普通分工,而是 CesiumJS 有意的治理设计。Release Guide 在 Motivation 一节解释了这一机制:
- 项目不设唯一的发布经理,发布职责由社区共享,任何 committer 都可以创建某月的发布;
- 负责人在任何时点都可以将职责移交给其他人,也可以由他人主动申请接手;
- 这样做的目的是"传播知识、避免层级化、避免单点故障"(原文:spreads knowledge, avoids stratification, avoids a single point of failure)。
换句话说,排期表本身就是一个"值班表":表格更新即完成交接,交接过程被文档化、可追溯。这也解释了为什么 ReleaseGuide 其余部分被描述为"使共享的发布所有权清晰、可重复、低压力"(make that shared release ownership clear, repeatable, and low-stress)——排期表告诉团队"这个月归谁",而 Guide 正文告诉这个月的负责人"具体做什么"。
五、排期表如何落到仓库的发布产物上
排期日期并非孤立的日历数字,它会直接体现在仓库的三类产物中,可以从当前仓库状态得到印证:
1. 版本号文件
CesiumJS 仓库采用 npm workspaces 组织四个发布单元,根 package.json 声明了packages/engine、packages/widgets、packages/sandcastle三个 workspace。当前仓库状态下:
- 根包
cesium版本为1.145.0(package.json 第 3 行); @cesium/engine版本为26.3.0(packages/engine/package.json);@cesium/widgets版本为16.2.0(packages/widgets/package.json)。
三个工作区维护各自独立的语义化版本号,发布时按 Release Guide 的版本规则分别用npm version <bump> -w <workspace> --no-git-tag-version提升,例如根文档给出的示例命令:
npm version minor -w @cesium/engine --no-git-tag-version npm version minor --no-git-tag-version # 根包,版本号需与 CHANGES.md 一致2. CHANGES.md 的日期头
CHANGES.md 中每个版本段落都以## <版本> - <日期>开头。当前仓库状态可以清晰看到排期表与变更记录的对应关系:
## 1.145 - 2026-09-02:9 月版本。值得注意的是,排期表原定 9 月发布日为 2026-09-01,而 CHANGES.md 记录的日期是 09-02——可见实际发布日期允许相对排期日小幅顺延,排期日更接近"计划日";## 1.146 - 2026-10-01:10 月版本的段落头,日期与排期表中@lukemckinstry负责的 2026-10-01 完全一致。
这一状态(根包仍是 1.145.0、CHANGES.md 已带 1.146 段落头)正对应 Release Guide 中 "Prepare release updates" 阶段的中间态:负责人已在main上校对并排好CHANGES.md、准备执行版本提升,但尚未完成npm version与提交。
3. 发布前的排期核对动作
排期表所支撑的日期,会在正式发布当天被逐项核对。Release Guide 要求:校对CHANGES.md时"Verify the date of the release"(核对该次发布的日期),随后创建并推送与版本一致的 tag(如git tag -a 1.121 -m "1.121 release"),最后在cesium.com分支上合并该 tag 触发 CI 部署。排期表的意义正在于让"这个月的版本号该是多少、日期该写什么、该找谁"这三个问题都有唯一答案。
六、月度排期之外的补充发布通道
排期表只覆盖"火车班次"本身。当出现以下情况时,会走两条补充通道,它们同样记录在 ReleaseGuide 目录中:
- 补丁发布(Patch release):见 PatchReleases/README.md。适用于重大回归或已发布依赖版本兼容性问题;流程是从上一个发布 tag(如
1.123)拉出分支、cherry-pick 修复提交、用npm version patch --ws --no-git-tag-version提升各工作区版本、更新CHANGES.md后发布。补丁版遵循语义化版本,npm 用户下次npm install时通常无需显式选择即可拿到。 - 预发布(Prerelease):见 Prereleases/README.md,以 npm dist-tag 形式发布,通常用于内部测试,不进入正式版本线。
这两条通道与月度排期表互不冲突:补丁版不占用排期表中任何月份的名额,预发布版则完全独立于正式版本号线。
七、排期规则小结与延伸阅读
| 规则 | 依据 |
|---|---|
| 每月第一个工作日发版(周末、节假日顺延) | ReleaseGuide 开篇说明;ReleaseSchedule.md 全部 14 条日期均符合该规则 |
| 每月由排期表指定的一位开发者负责,可中途交接 | ReleaseSchedule.md 的 User 列;Release Guide "Motivation" 一节 |
| 实际发布日期可能相对排期日小幅顺延 | 排期表中 9 月为 2026-09-01,而 CHANGES.md 记录## 1.145 - 2026-09-02 |
| 版本提升按工作区独立进行,根包版本须与 CHANGES.md 一致 | ReleaseGuide "Prepare release updates";当前根包1.145.0(package.json) |
| 排期之外的紧急修复走 patch/pre-release 通道 | PatchReleases/README.md、Prereleases/README.md |
延伸阅读路径(均为仓库内相对路径):
- Release Schedule 原文
- CesiumJS Release Guide(月度发布完整流程)
- Patch Releases / Prereleases
- 测试指南(e2e 快照要求),发布前需按其中方法用
npm run test-e2e-update针对上一发布 tag 生成有效快照 - CHANGES.md、根 package.json、packages/engine/package.json、packages/widgets/package.json
【免费下载链接】cesiumAn open-source JavaScript library for world-class 3D globes and maps :earth_americas:项目地址: https://gitcode.com/GitHub_Trending/ce/cesium
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考