发布

Beta
以 Markdown 格式查看
抢先体验

CLI 生成器处于抢先体验阶段。联系我们开始使用。

将生成的 CLI 发布到 npm、Homebrew 和 GitHub Releases。完成本页步骤后,每次标记发布都会自动构建跨平台二进制文件并发布。如需在自有基础设施上进行生成,可以自托管生成器,而非使用 Fern 的云服务。

本页假设您已具备:

  • 一个已初始化的 fern 文件夹,其中 generators.yml 已配置 CLI 生成器。参见快速开始
  • 一个已有的 GitHub 仓库用于存放生成的 CLI 源码,并已安装 Fern GitHub App

配置输出位置

1

将输出位置设置为 npm

在 CLI 的 group 中,将输出位置设为 npm

generators.yml
1groups:
2 cli:
3 generators:
4 - name: fern-cli-generator
5 version: 0.6.1
6 output:
7 location: npm
8 config:
9 binaryName: my-cli
2

添加唯一的包名

包名在 npm 注册表中必须唯一。

generators.yml
1groups:
2 cli:
3 generators:
4 - name: fern-cli-generator
5 version: 0.6.1
6 output:
7 location: npm
8 package-name: "@myorg/my-cli"
9 config:
10 binaryName: my-cli

配置 GitHub 发布

Fern 通过 GitHub Actions 发布 CLI。配置 GitHub 仓库和发布模式:

generators.yml
1groups:
2 cli:
3 generators:
4 - name: fern-cli-generator
5 version: 0.6.1
6 output:
7 location: npm
8 package-name: "@myorg/my-cli"
9 config:
10 binaryName: my-cli
11 github:
12 repository: my-org/my-cli
13 mode: release

repository 的所有者与您的 Fern 组织(传递给 fern init--organization 值)无关。将其指向拥有目标仓库的 GitHub 用户或组织。

模式行为
release提交到默认分支并标记发布。CI 工作流自动构建二进制文件并发布。
pull-request创建包含生成源码的 PR 供审查。合并 PR 并创建 GitHub 发布以触发发布流程。

配置身份验证

选择发布到 npm 时的身份验证方式。

OIDC 身份验证(推荐)

基于 OIDC 的发布(可信发布)是最安全的选项。npm 信任您的 GitHub 仓库直接发布,无需管理令牌。

1

在 generators.yml 中添加 OIDC

output 部分设置 token: OIDC

generators.yml
1groups:
2 cli:
3 generators:
4 - name: fern-cli-generator
5 version: 0.6.1
6 output:
7 location: npm
8 package-name: "@myorg/my-cli"
9 token: OIDC
10 config:
11 binaryName: my-cli
12 github:
13 repository: my-org/my-cli
14 mode: release
2

生成 CLI

生成 CLI 以创建配置了 OIDC 的 GitHub Actions 工作流:

$fern generate --group cli

这将创建一个配置了 OIDC npm 发布的 .github/workflows/ci.yml 文件。

3

在 npmjs.com 上授权您的仓库

在 npmjs.com 上配置可信发布

  1. 在 npmjs.com 上导航到您的包设置
  2. 找到 Trusted Publisher 部分并点击 Add trusted publisher
  3. 选择 GitHub Actions 作为提供商
  4. 填写:
    • Organization or user:您的 GitHub 用户名或组织
    • Repository:您的 CLI 仓库名(例如 my-cli
    • Workflow filenameci.yml
    • Environment name:留空
1

生成 npm 令牌

  1. 登录 npmjs.com
  2. 点击您的头像并选择 Access Tokens
  3. 点击 Generate New Token 并选择 Automation 类型
  4. 安全保存您的令牌
2

在 generators.yml 中添加令牌

output 部分设置 token: ${NPM_TOKEN}

generators.yml
1groups:
2 cli:
3 generators:
4 - name: fern-cli-generator
5 version: 0.6.1
6 output:
7 location: npm
8 package-name: "@myorg/my-cli"
9 token: ${NPM_TOKEN}
10 config:
11 binaryName: my-cli
12 github:
13 repository: my-org/my-cli
14 mode: release
3

将 NPM_TOKEN 添加为 GitHub Actions 密钥

  1. 在 GitHub 上打开您的 CLI 仓库并进入 Settings
  2. 导航到 Secrets and variables > Actions
  3. 点击 New repository secret
  4. 命名为 NPM_TOKEN 并粘贴您的 npm 令牌
  5. 点击 Add secret

发布您的 CLI

当您创建带有版本标签的 GitHub 发布时,CLI 会自动发布:

  1. 运行 fern generate --group cli 将更新的源码推送到 CLI 仓库
  2. 创建带有版本标签的 GitHub 发布(例如 v1.0.0
  3. CI 工作流为所有平台构建二进制文件并发布到 npm、Homebrew 和 GitHub Releases

构建目标

CI 工作流为以下平台生成静态链接的二进制文件:

目标操作系统架构
x86_64-unknown-linux-gnuLinuxx86_64
aarch64-unknown-linux-gnuLinuxARM64
x86_64-apple-darwinmacOSIntel
aarch64-apple-darwinmacOSApple Silicon
x86_64-pc-windows-msvcWindowsx86_64

npm 包使用 Node.js 启动器包装原生二进制文件。平台特定的可选依赖确保安装时仅下载正确的二进制文件。

用户安装说明

发布后,引导用户使用首选方式安装:

$# npm(所有平台)
$npm install -g @myorg/my-cli
$
$# Homebrew(macOS / Linux)
$brew install myorg/tap/my-cli
$
$# 直接下载(任何平台)
$curl -fsSL https://github.com/my-org/my-cli/releases/latest/download/my-cli-x86_64-linux -o my-cli
$chmod +x my-cli