自托管 SDK 版本管理
自托管 SDK 版本管理
企业功能
此功能仅适用于企业计划。如需开始使用,请联系 support@buildwithfern.com。
自托管时,您的流水线为每次 SDK 发布选择版本号。与云端生成不同,自托管设置需要自行计算下一个版本。
CLI 提供两种工作流,可以接入同一生成流水线:
--version AUTO是推荐方式。Fern 对照完整 SDK 输出对变更进行分类 — 因此generators.yml设置、生成器版本升级或 CLI 版本升级驱动的变更都会反映在选取的版本中 — 并为您生成变更日志条目、PR 描述和规范化提交消息。此路径也是持续改进的方向。fern ir+fern diff是确定性替代方案。它比较 API 规范的中间表示 (IR) 并仅返回计算的版本提升和下一版本号。由于差异比较仅针对规范本身,它不考虑来自generators.yml配置、生成器版本或 CLI 版本的 SDK 实现变更 — 如果其中任何一项发生变化,您需要自行提升版本。其余发布产物(变更日志、PR 描述、提交消息)也由您编写。当您需要对版本号的推导方式有明确控制,或无法依赖外部 LLM 提供商时,使用此工作流。
--version AUTO(推荐)
将 --version AUTO 传递给 fern generate,Fern 会分析上一次和当前 SDK 输出之间的差异,将变更分类为 MAJOR、MINOR 或 PATCH,并将下一个语义版本应用到生成的包中。同一分析还会生成:
- 描述变更内容的变更日志条目
- 总结发布内容的 PR 描述
- 规范化提交消息
--version AUTO 需要:
- 用于组织验证的
FERN_TOKEN(与所有自托管生成相同)。 - 在
generators.yml中配置的 GitHub 输出,因为流水线需要将版本提升和变更日志推送回 SDK 仓库。
使用 fern ir + fern diff 进行确定性版本管理
如果您更倾向于自行推导版本号,可使用 fern ir 和 fern diff 命令从 API 定义计算版本提升。此工作流无 LLM 依赖:fern diff 遍历两个规范的中间表示 (IR) 并返回确定性结果。
工作流有三个步骤:
当计算的版本提升为 major 时,fern diff 以非零状态退出。这使得在 CI 中将破坏性变更设置为需要手动审查变得容易。
将 fern ir + fern diff 集成到 CI
不太直观的部分是为之前的规范重现 IR。每个生成的 SDK 会在 .fern/metadata.json 中记录生成时的配置仓库提交:
originGitCommit 是配置仓库中产生当前版本 SDK 的 SHA。检出该提交,运行 fern ir,然后切换回 HEAD 再次运行 fern ir,以产生 fern diff 的两个输入。
示例:GitHub Actions 工作流
以下代码片段在每次推送到 main 时在配置仓库中运行,并计算 Python SDK 的下一个版本,其 originGitCommit 和 sdkVersion 从 SDK 仓库读取:
检出步骤的 fetch-depth: 0 是必需的,以便运行器拥有检出 originGitCommit 所需的历史记录。将元数据获取步骤替换为任何能让您的流水线访问 SDK 仓库 .fern/metadata.json 的机制(检出 SDK 仓库、发布产物、内部 API 等)。