跳转到内容

Core SDK 参考

@pubm/corepubm CLI 背后的程序化 API。本页覆盖从 package root 导出的公开标识符:

import { ... } from "@pubm/core";

这个 package 同时提供类型声明,以及 ESM/CJS 两种入口。当前的 package metadata 声明了 node >= 24

Terminal window
npm install @pubm/core
pnpm add @pubm/core
bun add @pubm/core

运行和 CLI 相同的发布流程。

import { pubm } from "@pubm/core";
await pubm({
version: "patch",
dryRun: true,
tag: "next",
});

pubm() 接受一个 Options 对象。最重要的字段如下:

FieldTypePurpose
versionstring必需的发布目标,例如 patchminormajor,或者明确的 semver。
dryRunboolean在不修改 Git 状态或不发布的情况下显示任务计划。
mode"local" | "ci"执行模式:local(交互式)或 ci(非交互式,基于 tag)。
prepareboolean只运行 preparation 阶段(验证和发布 dry-run 检查)。
publishboolean只运行 publish 阶段(从最新 tag 发布)。
releaseDraftboolean创建 GitHub Release 草稿,而不是正式发布。
branchstring发布前要求的特定分支。
anyBranchboolean对单次运行禁用分支约束。
tagstring以某个 dist-tag 发布,例如 latestnextbeta
packagesPackageConfig[]覆盖自动发现的 package。

对于由 config 驱动的发布,pubm() 会自动加载 pubm.config.*、解析 package 发现,并在运行任务图之前接入插件。

这些辅助函数是读取或验证 pubm.config.* 的主要入口。

ExportKindPurpose
defineConfigfunction用于编写 pubm.config.ts 的类型化辅助函数。
loadConfigfunction从磁盘加载 pubm.config.* 并返回 PubmConfig | null
resolveConfigfunction应用默认值、自动发现 package,并规范化私有 registry。
PubmConfigtype用户编写的配置形状。
ResolvedPubmConfigtyperesolveConfig() 返回的完整解析后配置。
PackageConfigtype用于发现和发布规划的按 package 配置项。
import { defineConfig, loadConfig, resolveConfig } from "@pubm/core";
export default defineConfig({
packages: [{ path: "packages/core" }],
});
const config = await loadConfig(process.cwd());
const resolved = config ? await resolveConfig(config, process.cwd()) : null;

PackageConfig 可以用来覆盖每个 package 的 registry、ecosystem、build command 或 test command:

type PackageConfig = {
path: string;
registries?: Array<"npm" | "jsr" | "crates" | string | PrivateRegistryConfig>;
ecosystem?: "js" | "rust";
buildCommand?: string;
testCommand?: string;
};

当你想用自定义 registry、ecosystem、生命周期 hooks 或 CLI 命令扩展发布流程时,可以使用这些插件导出。

ExportKindPurpose
PubmPlugintype插件的顶层契约。
PluginHookstype生命周期 hooks,例如 beforeBuildafterPublishonErrorafterRelease 以及资产流水线 hooks。
HookFn / ErrorHookFn / AfterReleaseHookFntypeHook 签名。
PluginCommand / PluginSubcommand / PluginCommandOptiontype插件的自定义 CLI 命令模型。
PluginRunnerclass执行 hooks 并收集已加载插件中的 registries/ecosystems 的工具。同时还提供 collectCredentials()collectChecks(),用于从所有已注册插件中收集凭证描述和 preflight checks。
PluginCredentialtype用于声明插件所需 token 或 secret 的描述类型。参见插件 API 参考
PluginChecktype插件提供的 preflight check 描述类型。参见插件 API 参考
PluginTaskContexttype传给 PluginCheck.task 的 listr2 无关包装器,提供 outputtitleprompt()
GhSecretEntrytypeGitHub Secrets 同步辅助函数返回的一项:{ secretName: string; token: string }
collectPluginCredentialsfunction从 config 中注册的所有插件收集 PluginCredential[] 并解析它们的值。
injectPluginTokensToEnvfunction将已解析的插件 token 值写入 process.env,让后续发布步骤可以像读取普通环境变量一样读取它们。
ReleaseContexttype传给 afterRelease hooks 的 release 元数据。包含 packageNameversiontagreleaseUrlassets
ReleaseAssettype一个已上传资产:nameurlsha256 以及结构化的 platform
ParsedPlatformtype结构化的平台信息:rawosarchvendorabivariant
PreparedAssettype已完成压缩和哈希、可直接上传的资产。
TransformedAssettype经过 transformAsset hook 处理、尚未压缩的资产。
CompressedAssettype已完成 compressAsset 步骤、尚未命名的资产。
UploadedAssettype上传后带有 urltarget 的资产。
ResolvedAssettypeglob 匹配后、带解析平台信息的资产。
import { defineConfig, type PubmPlugin } from "@pubm/core";
const plugin: PubmPlugin = {
name: "announce",
hooks: {
afterPublish(ctx) {
console.log("published", ctx.version);
},
},
};
export default defineConfig({
plugins: [plugin],
});

这些导出用于 release asset 流水线,对 plugin 作者和自定义工具都很有用。

ExportKindPurpose
parsePlatformfunction使用内建表,从路径段字符串中解析 OS、arch、ABI、variant 和 vendor。
runAssetPipelinefunction在给定已解析配置和 hook 集合的情况下,运行完整的资产流水线(resolve、transform、compress、name、hash、checksums)。
import { parsePlatform, runAssetPipeline } from "@pubm/core";
// 解析路径段或 capture 字符串
const platform = parsePlatform("darwin-arm64");
// { raw: "darwin-arm64", os: "darwin", arch: "arm64" }
const platform2 = parsePlatform("x86_64-unknown-linux-gnu");
// { raw: "x86_64-unknown-linux-gnu", os: "linux", arch: "x64", vendor: "unknown", abi: "gnu" }

资产流水线类型:

import type {
ParsedPlatform,
ReleaseContext,
ReleaseAsset,
ResolvedAsset,
TransformedAsset,
CompressedAsset,
PreparedAsset,
UploadedAsset,
} from "@pubm/core";

参见 Release AssetsAsset Pipeline Hooks 了解使用指南。

changeset 导出可以让你围绕 .pubm/changesets 构建自定义工具。

ExportKindPurpose
readChangesets / parseChangesetfunctions读取并解析 .pubm/changesets/*.md
getStatusfunction按 package 汇总待处理 changeset。
discoverCurrentVersions / discoverPackageInfosfunctions从 workspace 中读取当前 package 名称和版本。
calculateVersionBumpsfunction根据当前版本和待处理 changeset 计算下一版版本。
generateChangesetId / generateChangesetContent / writeChangesetfunctions创建新的 changeset 文件。
buildChangelogEntries / generateChangelog / writeChangelogToFilefunctions从 changeset 生成 changelog 输出。
migrateFromChangesetsfunction将旧的 .changeset/ 数据复制到 .pubm/
deleteChangesetFilesfunction删除已消耗的 changeset 文件。
parseChangelogSectionfunction将 changelog section 重新解析成结构化数据。

重要的相关类型:

TypePurpose
Changeset解析后的 .md 文件,包含 idsummary 和 package release。
Releasechangeset 内部的一个 package bump 条目。
BumpTypepatch | minor | major
Status / PackageStatus来自 getStatus() 的汇总待处理状态。
VersionBumpcalculateVersionBumps() 的版本规划结果。
ChangelogEntry / DependencyUpdatechangelog 渲染输入。
PackageVersionInfo发现辅助函数返回的 package 名称、版本和路径。
MigrationResultmigrateFromChangesets() 返回的结果对象。
import {
calculateVersionBumps,
discoverCurrentVersions,
getStatus,
} from "@pubm/core";
const currentVersions = await discoverCurrentVersions(process.cwd());
const status = getStatus(process.cwd());
const nextVersions = calculateVersionBumps(currentVersions, process.cwd());

当你需要和 pubm 内部使用的 workspace 发现逻辑一致时,这些导出会很有用。

ExportKindPurpose
detectWorkspacefunction从仓库文件中检测 pnpm、npm、Yarn、Bun、Cargo 或 Deno workspace。
discoverPackagesfunction自动发现可发布 package,并推断 registries/ecosystems。
buildDependencyGraphfunction从 package metadata 构建内部依赖图。
topologicalSortfunction按依赖优先顺序对 graph 节点排序。
resolveGroupsfunction针对已发现的 package 列表解析 fixed/linked 分组。
applyFixedGroup / applyLinkedGroupfunctions将分组语义应用到版本规划中。
Gitclass用于发布自动化的 Git 命令轻量包装。

重要的相关类型:

TypePurpose
WorkspaceInfoworkspace 类型以及 include/exclude 模式。
DiscoverOptionsdiscoverPackages() 的输入。
DiscoveredPackage自动检测到的 package 路径、registries 和 ecosystem。
PackageNode用于构建依赖图的输入节点。
import {
buildDependencyGraph,
discoverPackages,
topologicalSort,
} from "@pubm/core";
const discovered = await discoverPackages({ cwd: process.cwd() });
const graph = buildDependencyGraph([
{
name: "@acme/core",
version: "1.0.0",
path: "packages/core",
dependencies: { "@acme/utils": "^1.0.0" },
},
{
name: "@acme/utils",
version: "1.0.0",
path: "packages/utils",
dependencies: {},
},
]);
const ordered = topologicalSort(graph);

package root 还导出了下面这些辅助函数,供工具集成使用。

ExportKindPurpose
validateEntryPointsfunction检查 package manifest 中的 mainmoduletypesexportsbin 路径。
detectExtraneousFilesfunction标记通常不应出现在发布构件中的文件。
getPackageJsonfunction读取最近的 package.json,并可选回退到 jsr.json
replaceVersion / replaceVersionAtPathfunctions重写 manifest 中的 package 版本。
versionfunctionpackage.jsonjsr.jsondeno.json / deno.jsonc 读取当前 package 版本。
generateSnapshotVersionfunction基于 basetagtimestamp 和可选 commit 构建 snapshot 版本。
loadTokensFromDbfunction读取已保存的 registry token,同时也会考虑匹配的环境变量。
syncGhSecretsfunction通过 gh secret set 把 registry token 推送到 GitHub Secrets。
execfunction启动子进程并捕获 stdout/stderr。
getPackageManagerfunction通过 lockfile 检测 workspace 使用的包管理器。
detectRuntime / isBunfunctions检测当前运行时。
notifyNewVersionfunction检查是否有更新的 pubm 已发布版本,并打印更新提示。
consoleErrorfunction格式化并打印 pubm 错误。
PUBM_VERSION / PUBM_ENGINESconstants运行时暴露的 package metadata。

重要的相关类型:

TypePurpose
EntryPointError破损 manifest 路径的校验结果条目。
ExtraneousFile不应被发布的文件的校验结果条目。
SnapshotOptionsgenerateSnapshotVersion() 的输入。
Runtimenode | bun
import {
generateSnapshotVersion,
loadTokensFromDb,
validateEntryPoints,
} from "@pubm/core";
const nextSnapshot = generateSnapshotVersion({
baseVersion: "1.4.0",
tag: "snapshot",
commit: "abc1234",
template: "{base}-{tag}-{timestamp}-{commit}",
});
const entryPointErrors = validateEntryPoints(
{
main: "./dist/index.js",
types: "./dist/index.d.ts",
},
process.cwd(),
);
const tokens = loadTokensFromDb(["npm", "jsr"]);

本页记录的是当前 package root 对外稳定导出的 surface。packages/core/src/** 下可能存在内部文件,但如果它们没有从 @pubm/core 重新导出,就应被视为私有实现细节。