菜单

发布工作流

相关源文件

本文档解释了 shadcn-ui 项目的自动化发布管理系统,涵盖了处理 CLI 包到 NPM 的发布操作的 beta/预发布和稳定发布工作流。该系统使用 GitHub Actions、changesets 和 pnpm 来管理版本升级和包分发。

有关构建组件注册表的信息,请参阅 构建组件注册表。有关创建自定义注册表的指导,请参阅 构建自定义注册表

发布类型和触发器

shadcn-ui 项目支持两种不同的发布工作流

发布类型触发器目的软件包标签
Beta 发布带有 🚀 autorelease 标签的 PR测试未发布的功能@beta
稳定发布推送到 main 分支生产就绪版本@latest

两个工作流都将目标对准位于 packages/shadcn 的活动 CLI 包,而位于 packages/cli 的旧版 CLI 已弃用。

来源: .github/workflows/prerelease.yml6-14 .github/workflows/release.yml6-8 packages/cli/README.md3-6

Beta 发布工作流

Beta 发布工作流概述

当 pull request 被打上 🚀 autorelease 标签时,将启动 beta 发布过程。该工作流执行以下步骤:

环境设置:工作流在 Ubuntu 上运行,使用 Node.js 18 和 pnpm 9.0.6,出于安全考虑需要 shadcn-ui 的所有权。

版本修改:自定义脚本在发布前修改包版本以包含 beta 标识符。

NPM 发布:使用 pnpm pub:beta 命令通过环境变量 secret 进行 NPM 身份验证来发布包。

Artifact 管理:构建的包作为工作流 artifact 上传,名称模式为 npm-package-shadcn@{version}-pr-{number}

来源: .github/workflows/prerelease.yml12-14 .github/workflows/prerelease.yml39-48 .github/workflows/prerelease.yml56-60

Beta 发布通知系统

成功 beta 发布后,一个自动化评论系统会通知 PR 作者

Artifact 解析:系统使用正则表达式 /^npm-package-shadcn@(.*?)-pr-(\d+)/ 从 artifact 名称中提取版本和 PR 号。

用户通知:发布一个固定的评论,其中包含安装命令 pnpm dlx shadcn@{version}

标签清理:自动删除 🚀 autorelease 标签,以防止重复发布。

来源: .github/workflows/prerelease-comment.yml23-42 .github/workflows/prerelease-comment.yml48-53 .github/workflows/prerelease-comment.yml55-65

稳定发布工作流

稳定发布流程

稳定发布工作流使用 changesets 进行版本管理和自动化发布

构建过程:工作流在进行发布步骤之前,使用 pnpm shadcn:build 构建 CLI 包。

Changeset 集成changesets/action 根据仓库中的 changeset 文件来处理版本升级和发布决策。

自定义版本脚本:位于 .github/changeset-version.js 的自定义脚本在发布前处理版本更改。

条件发布:根据 changeset 的状态,工作流要么创建一个版本 PR 以供手动批准,要么直接发布到 NPM。

来源: .github/workflows/release.yml39-40 .github/workflows/release.yml42-53

CI/CD 配置详情

环境与安全

两个工作流都实现了安全措施和一致的环境

配置Beta 工作流稳定工作流
仓库检查github.repository_owner == 'shadcn-ui'github.repository_owner == 'shadcn-ui'
Node.js 版本1818
pnpm 版本9.0.69.0.6
环境预览默认
NPM TokenNPM_ACCESS_TOKENNPM_ACCESS_TOKEN

Fetch Depth:两个工作流都使用 fetch-depth: 0 来确保为版本计算和 changeset 处理提供完整的 git 历史记录。

缓存:Node.js 设置包括 pnpm 缓存配置,以优化工作流运行期间的构建时间。

来源: .github/workflows/prerelease.yml17 .github/workflows/prerelease.yml22-34 .github/workflows/release.yml18-31

软件包发布命令

工作流为不同的发布类型使用不同的 pnpm 脚本

  • Betapnpm pub:beta - 发布时带有 beta 标签
  • 稳定npx changeset publish - 发布时带有 latest 标签

身份验证通过 .npmrc 配置处理,该配置包含 packages/shadcn 目录的 NPM 访问令牌。

来源: .github/workflows/prerelease.yml43-48 .github/workflows/release.yml49