用途
该技能用于发布 Remotion 的新版本,面向 Remotion 仓库的维护者,提供从发布前检查到最终 GitHub Release 的完整操作流程。
主要能力
- 发布前环境检查:终止可能运行的 turbo 进程;通过
gcloud auth print-access-token >/dev/null验证 gcloud 登录,失败则运行gcloud auth login并重试;检查 npm 登录状态(npm whoami),必要时执行npm login;在 Codex 环境下确保 rbenv 的 Ruby 优先于 macOS 系统 Ruby,使用PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"运行可能调用 Ruby/Bundler 的命令,并用ruby --version验证。 - 凭据管理:使用 1Password 获取 npm 密码与一次性验证码,命令为
op item get "Npmjs" --fields password --reveal --account remotiondev.1password.com和op item get "Npmjs" --otp --account remotiondev.1password.com;创建带 2FA 绕过的 npm 发布令牌,命令为npm token create --name="PublishRemotionXXXXXX" --packages "remotion" --packages "create-video" --packages-and-scopes-permission read-write --bypass-2fa --scopes "@remotion" --otp=<otp>,并强调不要使用--json,需将普通输出重定向到文件并用grep -oE 'npm_[A-Za-z0-9]{20,}'提取令牌,绝不打印令牌。 - 构建与版本递增:运行
bun i、bun run build,用npm view remotion version获取当前版本,再运行bun set-version.ts <version>将版本加 1;若退出码非 0 立即中止整个发布流程,且不要管道输出(zsh 下$PIPESTATUS不可用),应重定向到日志文件并确认 v<version> 提交与标签存在。 - 发布公共包:先运行
cd packages/example && sh runlambda.sh && cd ../..,失败则中止;随后在临时 npm dist-tag 下发布公共包,待所有包可安装后再提升 latest。流程包括从仓库根目录生成发布清单(bun publish.ts --list > "$releaseManifest")、记录每个包之前的 latest 标签以便回滚、检查是否有首次发布的包(Bun 会给首次发布也加上 latest,需单独处理)、使用NPM_CONFIG_TOKEN=<token> bun publish.ts --tag="$releaseTag"发布,并对失败包使用--only=<package>单独恢复,不盲目重跑整个清单。 - 可安装性校验与提升:对清单中每个包要求
npm view <package>@<version> version --json和npm pack <package>@<version> --pack-destination <临时目录>成功;使用while read -r p; do ( ... ) & done < "$releaseManifest"; wait并行检查;发布后约三分之一包可能仍处于 validating,可能耗时约 15 分钟,需编写轮询脚本后台运行并约每分钟轮询一次,可使用 npm 生命周期状态 APIGET https://registry.npmjs.org/-/package/<encoded-package-name>/version/<version>/status(需 URL 编码作用域名,如@remotion%2Fwhisper-web,并避免凭据进入日志)。若包在一小时后仍 validating,则报告发布待定并保留旧 latest 标签;blocked、rejected、manual-review、missing、unknown 等状态同样停止提升并需排查。全部可安装后,使用发布令牌运行npm dist-tag add <package>@<version> latest,注意 npm CLI 忽略NPM_CONFIG_TOKEN,需用env "npm_config_//registry.npmjs.org/:_authToken=$TOKEN" npm dist-tag add ...;逐包验证npm view <package> dist-tags.latest --prefer-online等于发布版本,并行检查可能返回缓存旧标签,需顺序复查;若提升中途失败,恢复已更改包的旧 latest 标签并报告不完整发布。成功后移除临时标签,使用登录会话与每次新 OTP 执行npm dist-tag rm <package> <releaseTag> --otp=$(op item get "Npmjs" --otp --account remotiondev.1password.com),若 OTP 过期等待 30 秒重试一次。若 npm 明确返回E_STAGE_REQUIRED,停止本次发布并单独评估分阶段工作流,不要混用。 - 私有包与模板发布:仅在所有公共 latest 标签验证后,运行
bunx turbo run publishprivate --concurrency=1,然后从仓库根目录执行git push --tags和git push;之后运行bun run publishtemplates重新发布所有模板,任一模板失败则停止并报告。 - 变更日志与 GitHub Release:生成 markdown 变更日志保存到
/tmp/release-<version>.md,步骤包括git log v<previous_version>..v<new_version> --oneline、提取合并提交中的 PR 编号、用gh pr view <number> --json title,author,number,url --jq '"* \(.title) by @\(.author.login) in \(.url)"'获取信息、分类到 "What's Changed"、"Templates"、"Docs"、"Internal" 等章节(必要时使用 "Elements" 和 "Internal and Experimental")、在 "What's Changed" 中把头条功能(尤其新增文档页的)放前面并按包排序(remotion 核心包优先)、去除冗余前缀、对新增文档页的条目用git diff --diff-filter=A --name-only v<previous_version>..v<new_version> -- 'packages/docs/docs/**/*.mdx' 'packages/docs/docs/**/*.md'列出并映射到 PR,将标题链接到https://remotion.dev/docs/<slug>(slug 取 frontmatter 或相对路径)、单独处理 template-* 变更、通过gh api repos/remotion-dev/remotion/contributors --paginate --jq '.[].login'检查新贡献者并添加 "New Contributors" 章节、底部添加**Full Changelog**: https://github.com/remotion-dev/remotion/compare/v<previous_version>...v<new_version>,并参照gh release view v<previous_version>的格式。变更日志需经批准后方可发布,批准后重新读取文件并运行gh release create v<version> --title v<version> --notes-file /tmp/release-<version>.md --verify-tag。最后删除 scratchpad 中的 npm 令牌本地副本(令牌 7 天后自动过期)。
使用方式
该技能以操作说明形式提供,需在 Remotion 仓库环境中按顺序执行上述命令与检查。它依赖 gcloud、npm、bun、1Password CLI、gh 等工具,并要求操作者具备相应仓库与 npm 发布权限。
适用场景
适用于 Remotion 项目的正式版本发布,包括公共包、私有包与模板的发布,以及 GitHub Release 变更日志的生成与提交。
限制
流程要求严格遵循顺序与校验,失败即中止;令牌不得打印;发布令牌在 dist-tag rm 时会返回 E403,需改用登录会话与 OTP;npm 无原子多包提升;若出现 E_STAGE_REQUIRED 需停止并单独评估分阶段流程。资料未提供其他平台、收费或价格信息。