콘텐츠로 이동

Core SDK 레퍼런스

@pubm/corepubm CLI 뒤에 있는 프로그래밍 API입니다. 이 페이지는 패키지 루트에서 export되는 공개 식별자를 다룹니다.

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

이 패키지는 타입 선언과 ESM/CJS 엔트리 포인트를 모두 제공합니다. 현재 패키지 메타데이터는 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 객체를 받습니다. 가장 중요한 필드는 다음과 같습니다.

필드타입용도
versionstringpatch, minor, major 또는 명시적 semver 같은 릴리스 대상입니다.
dryRunbooleanGit 상태를 바꾸거나 publish하지 않고 작업 계획만 보여줍니다.
mode"local" | "ci"실행 모드입니다. local은 대화형, ci는 비대화형 tag 기반입니다.
prepareboolean준비 단계만 실행합니다(검증과 publish dry-run 확인).
publishbooleanpublish 단계만 실행합니다(최신 태그에서 publish).
releaseDraftbooleanpublish된 release 대신 draft GitHub Release를 만듭니다.
branchstringpublish 전에 특정 브랜치를 요구합니다.
anyBranchboolean한 번의 실행에 한해 브랜치 강제를 비활성화합니다.
tagstringlatest, next, beta 같은 dist-tag로 publish합니다.
packagesPackageConfig[]자동 탐지된 패키지를 덮어씁니다.

설정 기반 릴리스에서는 pubm()이 자동으로 pubm.config.*를 로드하고, 패키지 탐지를 해석하며, 작업 그래프를 실행하기 전에 플러그인을 연결합니다.

이 헬퍼들은 pubm.config.*를 읽거나 검증하는 코드의 주 진입점입니다.

ExportKind용도
defineConfigfunctionpubm.config.ts 작성을 위한 타입이 있는 헬퍼입니다.
loadConfigfunction디스크에서 pubm.config.*를 읽어 PubmConfig | null을 반환합니다.
resolveConfigfunction기본값을 적용하고, 패키지를 자동 탐지하며, private registry를 정규화합니다.
PubmConfigtype사용자가 작성하는 config 형태입니다.
ResolvedPubmConfigtyperesolveConfig()가 반환하는 완전히 해석된 config입니다.
PackageConfigtype탐지와 publish 계획에 쓰이는 패키지별 config 항목입니다.
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는 패키지별 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, 라이프사이클 훅, CLI 명령으로 publish 파이프라인을 확장하고 싶을 때 플러그인 export를 사용합니다.

ExportKind용도
PubmPlugintype최상위 플러그인 계약입니다.
PluginHookstypebeforeBuild, afterPublish, onError, afterRelease, asset pipeline 훅 같은 라이프사이클 훅입니다.
HookFn / ErrorHookFn / AfterReleaseHookFntype훅 시그니처입니다.
PluginCommand / PluginSubcommand / PluginCommandOptiontype플러그인을 위한 커스텀 CLI 명령 모델입니다.
PluginRunnerclass로드된 플러그인의 훅을 실행하고 registry/ecosystem을 수집하는 유틸리티입니다. 또한 모든 등록된 플러그인에서 자격 증명 설명자와 preflight check를 모으는 collectCredentials()collectChecks()를 제공합니다.
PluginCredentialtype플러그인이 요구하는 토큰 또는 secret을 선언적으로 설명하는 타입입니다. 플러그인 API 레퍼런스를 참고합니다.
PluginChecktype플러그인이 제공하는 preflight check 설명자입니다. 플러그인 API 레퍼런스를 참고합니다.
PluginTaskContexttypePluginCheck.task에 전달되는 listr2 비종속 래퍼입니다. output, title, prompt()를 제공합니다.
GhSecretEntrytypeGitHub Secrets 동기화 헬퍼가 반환하는 항목 하나입니다: { secretName: string; token: string }.
collectPluginCredentialsfunctionconfig에 등록된 모든 플러그인에서 PluginCredential[]를 모으고 값을 해석합니다.
injectPluginTokensToEnvfunction해석된 플러그인 토큰 값을 process.env에 기록해 이후 publish 단계가 일반 환경 변수처럼 읽을 수 있게 합니다.
ReleaseContexttypeafterRelease 훅에 전달되는 release 메타데이터입니다. packageName, version, tag, releaseUrl, assets를 포함합니다.
ReleaseAssettype업로드된 asset 하나입니다. name, url, sha256, 구조화된 platform을 가집니다.
ParsedPlatformtype구조화된 플랫폼 정보입니다. raw, os, arch, vendor, abi, variant를 가집니다.
PreparedAssettype압축과 해시가 끝나 업로드 준비가 된 asset입니다.
TransformedAssettypetransformAsset 훅 이후, 압축 전의 asset입니다.
CompressedAssettypecompressAsset 단계 이후, 이름 지정 전의 asset입니다.
UploadedAssettype업로드 후 urltarget을 가진 asset입니다.
ResolvedAssettypeglob 매칭과 플랫폼 파싱이 끝난 asset입니다.
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],
});

이 export들은 release asset 파이프라인을 구성하며, 플러그인 작성자나 커스텀 도구에 유용합니다.

ExportKind용도
parsePlatformfunction내장 테이블을 사용해 경로 segment 문자열에서 OS, arch, ABI, variant, vendor를 파싱합니다.
runAssetPipelinefunction해석된 config와 훅 세트를 받아 resolve, transform, compress, name, hash, checksums를 포함한 전체 asset pipeline을 실행합니다.
import { parsePlatform, runAssetPipeline } from "@pubm/core";
// 경로 segment 또는 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" }

Asset pipeline 타입:

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

사용법 가이드는 Release AssetsAsset Pipeline Hooks에서 확인합니다.

changeset export를 사용하면 .pubm/changesets 주변의 커스텀 도구를 만들 수 있습니다.

ExportKind용도
readChangesets / parseChangesetfunctions.pubm/changesets/*.md를 읽고 파싱합니다.
getStatusfunction패키지별 보류 중 changeset을 집계합니다.
discoverCurrentVersions / discoverPackageInfosfunctions워크스페이스에서 현재 패키지 이름과 버전을 읽습니다.
calculateVersionBumpsfunction현재 버전과 보류 중 changeset으로 다음 버전을 계산합니다.
generateChangesetId / generateChangesetContent / writeChangesetfunctions새 changeset 파일을 만듭니다.
buildChangelogEntries / generateChangelog / writeChangelogToFilefunctionschangeset에서 changelog 출력을 만듭니다.
migrateFromChangesetsfunction레거시 .changeset/ 데이터를 .pubm/으로 복사합니다.
deleteChangesetFilesfunction소비된 changeset 파일을 삭제합니다.
parseChangelogSectionfunctionchangelog 섹션을 다시 구조화된 데이터로 파싱합니다.

중요한 관련 타입:

Type용도
Changesetid, summary, package release가 있는 파싱된 .md 파일입니다.
Releasechangeset 안의 패키지 bump 항목 하나입니다.
BumpType"patch" | "minor" | "major"입니다.
Status / PackageStatusgetStatus()가 집계한 보류 상태입니다.
VersionBumpcalculateVersionBumps()의 version planning 결과입니다.
ChangelogEntry / DependencyUpdatechangelog 렌더링 입력입니다.
PackageVersionInfo탐지 헬퍼가 반환하는 package name, version, path입니다.
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());

모노레포 및 워크스페이스 헬퍼

섹션 제목: “모노레포 및 워크스페이스 헬퍼”

이 export들은 pubm이 내부적으로 사용하는 것과 같은 워크스페이스 탐지 로직이 필요할 때 유용합니다.

ExportKind용도
detectWorkspacefunction저장소 파일에서 pnpm, npm, Yarn, Bun, Cargo, Deno 워크스페이스를 감지합니다.
discoverPackagesfunctionpublish 가능한 패키지를 자동 탐지하고 registry/ecosystem을 추론합니다.
buildDependencyGraphfunction패키지 메타데이터로 내부 의존성 그래프를 만듭니다.
topologicalSortfunction의존성이 먼저 오도록 그래프 노드를 정렬합니다.
resolveGroupsfunction탐지된 패키지 목록에 대해 fixed/linked 그룹을 해석합니다.
applyFixedGroup / applyLinkedGroupfunctions버전 계획에 그룹 의미를 적용합니다.
Gitclass릴리스 자동화에 쓰이는 Git 명령의 얇은 래퍼입니다.

중요한 관련 타입:

Type용도
WorkspaceInfo워크스페이스 타입과 include/exclude 패턴입니다.
DiscoverOptionsdiscoverPackages()의 입력입니다.
DiscoveredPackage자동 탐지된 패키지 경로, registry, 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);

패키지 루트는 도구 통합에 쓸 수 있는 아래 헬퍼도 export합니다.

ExportKind용도
validateEntryPointsfunction패키지 매니페스트의 main, module, types, exports, bin 경로를 검사합니다.
detectExtraneousFilesfunction보통 publish 산출물에 포함되면 안 되는 파일을 찾아냅니다.
getPackageJsonfunction가장 가까운 package.json을 읽고, 필요하면 jsr.json으로 fallback합니다.
replaceVersion / replaceVersionAtPathfunctions매니페스트의 패키지 버전을 다시 씁니다.
versionfunctionpackage.json, jsr.json 또는 deno.json / deno.jsonc에서 현재 패키지 버전을 읽습니다.
generateSnapshotVersionfunctionbase, tag, timestamp, 선택적 commit으로 snapshot 버전을 만듭니다.
loadTokensFromDbfunction저장된 registry 토큰을 읽고, 일치하는 env var도 함께 반영합니다.
syncGhSecretsfunctiongh secret set을 통해 registry 토큰을 GitHub Secrets에 밀어 넣습니다.
execfunctionsubprocess를 실행하고 stdout/stderr를 캡처합니다.
getPackageManagerfunctionlockfile로 워크스페이스 패키지 매니저를 감지합니다.
detectRuntime / isBunfunctions현재 runtime을 감지합니다.
notifyNewVersionfunction더 최신의 pubm 버전이 있는지 확인하고 업데이트 배너를 출력합니다.
consoleErrorfunctionpubm 에러를 서식화해서 출력합니다.
PUBM_VERSION / PUBM_ENGINESconstants런타임에 노출되는 패키지 메타데이터입니다.

중요한 관련 타입:

Type용도
EntryPointError깨진 매니페스트 경로에 대한 검증 결과 항목입니다.
ExtraneousFilepublish되면 안 되는 파일에 대한 검증 결과 항목입니다.
SnapshotOptionsgenerateSnapshotVersion()의 입력입니다.
Runtime"node" | "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"]);

이 페이지는 현재 패키지 루트가 export하는 안정적인 표면을 문서화합니다. packages/core/src/** 아래에 내부 파일이 있더라도, @pubm/core에서 다시 export되지 않는 항목은 private implementation detail로 취급해야 합니다.