用途:以交互方式走完 Shiny for Python 完整发布链,逐阶段推进,每阶段必须等用户确认后才进入下一阶段;用户说“skip”则标记该阶段完成并继续。
主要能力:13 个阶段覆盖发布前置(HTML 依赖变更时更新 shinyswatch)、依次发布 py-htmltools、py-shiny、py-shinyswatch、py-shinywidgets,更新 shinylive(JS)仓库、py-shinylive、r-shinylive,bump py-shiny 文档版本、更新 py-shiny-site、conda-forge、Huggingface,最后发布博客。通用包发布流程包括:检出 rc-vX.Y.Z 分支、确认 pyproject.toml 无 git 依赖、更新版本与 changelog、提 PR 等 CI、执行发布前 gate 获用户确认、squash merge、打 tag、创建 GH Release、等待 PyPI 发布。使用 gh CLI 处理 PR、release 和 tag,用 TodoWrite 清单跟踪进度。
发布前 gate:打 tag、创建 GH Release 或推送 tag 之前必须展示发布摘要(包名版本、RC 分支与 PR 链接、CI 状态、changelog、依赖检查、TODO: release 标记扫描结果、py-shiny 的 shinylive 示例测试结果),并要求用户明确回复 yes 才继续。
关键约束:每阶段结束前关闭该阶段启动的长驻进程,如 Phase 6 的 make serve(端口 3000)和 Playwright 的 _shinylive webServer(端口 8100),并用 lsof、kill、curl 确认端口关闭。用 grep -rn "TODO: release" . 扫描发布阻塞标记,未解决前不得完成发布。PyPI 发布后索引可能滞后数分钟,应轮询 PyPI 而非只看工作流。管道(如 make all 2>&1 | tail -60)会使退出码来自 tail,需用 set -o pipefail 或检查产物。不要用 head 截断 CI 检查列表,应聚合后仅列出非通过项。下游仓库应克隆到 py-shiny 工作树之外。失败时 PyPI 需删除 tag 与 GH Release 后重试;CI 用 gh run view 查日志。具体各阶段步骤需阅读 references/release-phases.md,本次资料未提供其内容。