@kb-labs/release-manager-cli 2.6.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/publish.js +18 -48
- package/dist/cli/commands/publish.js.map +1 -1
- package/dist/cli/commands/run.js +21 -49
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/rest/handlers/run-handler.js +11 -25
- package/dist/rest/handlers/run-handler.js.map +1 -1
- package/dist/widgets/@mf-types.zip +0 -0
- package/dist/widgets/mf-manifest.json +5 -5
- package/dist/widgets/mf-stats.json +5 -5
- package/dist/widgets/remoteEntry.js +3 -3
- package/dist/widgets/remoteEntry.js.map +1 -1
- package/package.json +23 -23
|
@@ -4,7 +4,7 @@ import { join } from 'path';
|
|
|
4
4
|
import 'fs/promises';
|
|
5
5
|
import 'globby';
|
|
6
6
|
import { spawn } from 'child_process';
|
|
7
|
-
import { readFileSync,
|
|
7
|
+
import { readFileSync, writeFileSync } from 'fs';
|
|
8
8
|
import * as readline from 'readline/promises';
|
|
9
9
|
|
|
10
10
|
// src/cli/commands/publish.ts
|
|
@@ -12,9 +12,12 @@ function resolveToken(token) {
|
|
|
12
12
|
return token ?? process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN;
|
|
13
13
|
}
|
|
14
14
|
function publishSinglePackage(options) {
|
|
15
|
-
const { packagePath, token, otp, dryRun, tag, access, registry } = options;
|
|
15
|
+
const { packagePath, packageManager, token, otp, dryRun, tag, access, registry } = options;
|
|
16
16
|
return new Promise((resolve, reject) => {
|
|
17
17
|
const args = ["publish"];
|
|
18
|
+
if (packageManager === "pnpm") {
|
|
19
|
+
args.push("--no-git-checks");
|
|
20
|
+
}
|
|
18
21
|
if (dryRun) {
|
|
19
22
|
args.push("--dry-run");
|
|
20
23
|
}
|
|
@@ -34,7 +37,7 @@ function publishSinglePackage(options) {
|
|
|
34
37
|
if (token) {
|
|
35
38
|
env["NODE_AUTH_TOKEN"] = token;
|
|
36
39
|
}
|
|
37
|
-
const child = spawn(
|
|
40
|
+
const child = spawn(packageManager, args, {
|
|
38
41
|
cwd: packagePath,
|
|
39
42
|
stdio: ["ignore", "pipe", "pipe"],
|
|
40
43
|
shell: true,
|
|
@@ -52,7 +55,7 @@ function publishSinglePackage(options) {
|
|
|
52
55
|
if (code === 0) {
|
|
53
56
|
resolve();
|
|
54
57
|
} else {
|
|
55
|
-
reject(new Error(stderr || stdout ||
|
|
58
|
+
reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));
|
|
56
59
|
}
|
|
57
60
|
});
|
|
58
61
|
child.on("error", (err) => {
|
|
@@ -61,7 +64,7 @@ function publishSinglePackage(options) {
|
|
|
61
64
|
});
|
|
62
65
|
}
|
|
63
66
|
async function publishPackagesProgrammatic(options) {
|
|
64
|
-
const { packages, dryRun, otp, tag, access, registry } = options;
|
|
67
|
+
const { packages, packageManager = "pnpm", dryRun, otp, tag, access, registry } = options;
|
|
65
68
|
const logger = useLogger();
|
|
66
69
|
const token = resolveToken(options.token);
|
|
67
70
|
if (!token && !dryRun) {
|
|
@@ -111,30 +114,11 @@ async function publishPackagesProgrammatic(options) {
|
|
|
111
114
|
modified = true;
|
|
112
115
|
}
|
|
113
116
|
}
|
|
114
|
-
} else if (val.startsWith("workspace:")) {
|
|
117
|
+
} else if (val.startsWith("workspace:") && packageManager !== "pnpm") {
|
|
115
118
|
const planVersion = versionMap.get(depName);
|
|
116
119
|
if (planVersion) {
|
|
117
120
|
deps[depName] = val === "workspace:*" ? `^${planVersion}` : val.replace("workspace:", "");
|
|
118
121
|
modified = true;
|
|
119
|
-
} else {
|
|
120
|
-
try {
|
|
121
|
-
const repoRoot = join(pkg.path, "..");
|
|
122
|
-
const candidates = readdirSync(repoRoot, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => join(repoRoot, d.name, "package.json"));
|
|
123
|
-
for (const candidate of candidates) {
|
|
124
|
-
try {
|
|
125
|
-
const cPkg = JSON.parse(readFileSync(candidate, "utf-8"));
|
|
126
|
-
if (cPkg.name === depName) {
|
|
127
|
-
deps[depName] = `^${cPkg.version}`;
|
|
128
|
-
modified = true;
|
|
129
|
-
break;
|
|
130
|
-
}
|
|
131
|
-
} catch {
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
} catch {
|
|
135
|
-
deps[depName] = "*";
|
|
136
|
-
modified = true;
|
|
137
|
-
}
|
|
138
122
|
}
|
|
139
123
|
}
|
|
140
124
|
}
|
|
@@ -145,6 +129,7 @@ async function publishPackagesProgrammatic(options) {
|
|
|
145
129
|
}
|
|
146
130
|
await publishSinglePackage({
|
|
147
131
|
packagePath: pkg.path,
|
|
132
|
+
packageManager,
|
|
148
133
|
token,
|
|
149
134
|
otp,
|
|
150
135
|
dryRun,
|
|
@@ -182,7 +167,7 @@ async function publishPackagesProgrammatic(options) {
|
|
|
182
167
|
};
|
|
183
168
|
}
|
|
184
169
|
async function publishPackagesWithOTP(options) {
|
|
185
|
-
const { packages, dryRun, tag, access, ui, logger } = options;
|
|
170
|
+
const { packages, packageManager = "pnpm", dryRun, tag, access, ui, logger } = options;
|
|
186
171
|
let otp = options.otp;
|
|
187
172
|
const results = [];
|
|
188
173
|
const versionMap = new Map(packages.map((p) => [p.name, p.version]));
|
|
@@ -220,30 +205,11 @@ async function publishPackagesWithOTP(options) {
|
|
|
220
205
|
modified = true;
|
|
221
206
|
}
|
|
222
207
|
}
|
|
223
|
-
} else if (val.startsWith("workspace:")) {
|
|
208
|
+
} else if (val.startsWith("workspace:") && packageManager !== "pnpm") {
|
|
224
209
|
const planVersion = versionMap.get(depName);
|
|
225
210
|
if (planVersion) {
|
|
226
211
|
deps[depName] = val === "workspace:*" ? `^${planVersion}` : val.replace("workspace:", "");
|
|
227
212
|
modified = true;
|
|
228
|
-
} else {
|
|
229
|
-
try {
|
|
230
|
-
const repoRoot = join(pkg.path, "..");
|
|
231
|
-
const candidates = readdirSync(repoRoot, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => join(repoRoot, d.name, "package.json"));
|
|
232
|
-
for (const candidate of candidates) {
|
|
233
|
-
try {
|
|
234
|
-
const cPkg = JSON.parse(readFileSync(candidate, "utf-8"));
|
|
235
|
-
if (cPkg.name === depName) {
|
|
236
|
-
deps[depName] = `^${cPkg.version}`;
|
|
237
|
-
modified = true;
|
|
238
|
-
break;
|
|
239
|
-
}
|
|
240
|
-
} catch {
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
} catch {
|
|
244
|
-
deps[depName] = "*";
|
|
245
|
-
modified = true;
|
|
246
|
-
}
|
|
247
213
|
}
|
|
248
214
|
}
|
|
249
215
|
}
|
|
@@ -262,6 +228,7 @@ async function publishPackagesWithOTP(options) {
|
|
|
262
228
|
try {
|
|
263
229
|
await publishSinglePackage2({
|
|
264
230
|
packagePath: pkg.path,
|
|
231
|
+
packageManager,
|
|
265
232
|
otp,
|
|
266
233
|
dryRun,
|
|
267
234
|
tag,
|
|
@@ -355,9 +322,12 @@ async function publishPackagesWithOTP(options) {
|
|
|
355
322
|
};
|
|
356
323
|
}
|
|
357
324
|
function publishSinglePackage2(options) {
|
|
358
|
-
const { packagePath, otp, dryRun, tag, access } = options;
|
|
325
|
+
const { packagePath, packageManager = "pnpm", otp, dryRun, tag, access } = options;
|
|
359
326
|
return new Promise((resolve, reject) => {
|
|
360
327
|
const args = ["publish"];
|
|
328
|
+
if (packageManager === "pnpm") {
|
|
329
|
+
args.push("--no-git-checks");
|
|
330
|
+
}
|
|
361
331
|
if (dryRun) {
|
|
362
332
|
args.push("--dry-run");
|
|
363
333
|
}
|
|
@@ -370,7 +340,7 @@ function publishSinglePackage2(options) {
|
|
|
370
340
|
if (access) {
|
|
371
341
|
args.push(`--access=${access}`);
|
|
372
342
|
}
|
|
373
|
-
const child = spawn(
|
|
343
|
+
const child = spawn(packageManager, args, {
|
|
374
344
|
cwd: packagePath,
|
|
375
345
|
stdio: ["inherit", "pipe", "pipe"],
|
|
376
346
|
shell: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/shared/publish-programmatic.ts","../../../src/shared/publish-with-otp.ts","../../../src/cli/commands/publish.ts"],"names":["join","readFileSync","readdirSync","writeFileSync","published","publishSinglePackage","spawn","useLoader","r"],"mappings":"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","file":"publish.js","sourcesContent":["/**\n * Programmatic npm publishing for REST handlers (non-interactive context)\n *\n * Uses `npm publish` CLI via spawn with NODE_AUTH_TOKEN env variable.\n * This is the correct approach for granular access tokens (classic tokens\n * were revoked by npm in December 2025).\n *\n * Token resolution order:\n * 1. options.token (explicit override)\n * 2. NPM_TOKEN env variable\n * 3. NODE_AUTH_TOKEN env variable\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { useLogger } from '@kb-labs/sdk';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface ProgrammaticPublishOptions {\n packages: PackageToPublish[];\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: 'public' | 'restricted';\n registry?: string;\n token?: string;\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n error?: string;\n}\n\nexport interface ProgrammaticPublishResult {\n results: PublishResult[];\n published: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n/**\n * Resolve npm auth token from options or environment\n */\nfunction resolveToken(token?: string): string | undefined {\n return token ?? process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN;\n}\n\n/**\n * Publish a single package using npm CLI\n * Passes auth token via NODE_AUTH_TOKEN env (recommended for granular tokens)\n */\nfunction publishSinglePackage(options: {\n packagePath: string;\n token: string | undefined;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}): Promise<void> {\n const { packagePath, token, otp, dryRun, tag, access, registry } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n if (dryRun) {\n args.push('--dry-run');\n }\n\n if (tag) {\n args.push(`--tag=${tag}`);\n }\n\n if (access) {\n args.push(`--access=${access}`);\n }\n\n if (registry) {\n args.push(`--registry=${registry}`);\n }\n\n if (otp) {\n args.push(`--otp=${otp}`);\n }\n\n // Pass token via env — this is the correct way for granular tokens\n const env: NodeJS.ProcessEnv = { ...process.env };\n if (token) {\n env['NODE_AUTH_TOKEN'] = token;\n }\n\n const child = spawn('npm', args, {\n cwd: packagePath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code: number | null) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(stderr || stdout || `npm publish exited with code ${code}`));\n }\n });\n\n child.on('error', (err: Error) => {\n reject(err);\n });\n });\n}\n\n/**\n * Publish packages programmatically (non-interactive, for REST handlers)\n * Uses npm CLI with NODE_AUTH_TOKEN — works with granular access tokens.\n */\nexport async function publishPackagesProgrammatic(\n options: ProgrammaticPublishOptions\n): Promise<ProgrammaticPublishResult> {\n const { packages, dryRun, otp, tag, access, registry } = options;\n const logger = useLogger();\n\n const token = resolveToken(options.token);\n\n if (!token && !dryRun) {\n const error = 'No npm token found. Set NPM_TOKEN (or NODE_AUTH_TOKEN) in environment.';\n logger.error(error);\n return {\n results: [],\n published: [],\n failed: packages.map((p) => `${p.name}@${p.version}`),\n skipped: [],\n errors: [error],\n };\n }\n\n const results: PublishResult[] = [];\n\n // Build version map from all packages in this release for link: → ^version replacement\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n for (const pkg of packages) {\n logger.info(`Publishing ${pkg.name}@${pkg.version}`, { path: pkg.path, dryRun });\n\n // Replace link: deps with real versions before publish, restore after\n const pkgJsonPath = join(pkg.path, 'package.json');\n const originalPkgJson = readFileSync(pkgJsonPath, 'utf-8');\n let restored = false;\n\n try {\n const pkgJson = JSON.parse(originalPkgJson);\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section];\n if (!deps) {continue;}\n for (const [depName, depValue] of Object.entries(deps)) {\n if (typeof depValue !== 'string') {continue;}\n const val = depValue as string;\n\n if (val.startsWith('link:')) {\n // Cross-repo link: → ^version from plan or linked package.json\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = `^${planVersion}`;\n modified = true;\n } else {\n try {\n const linkPath = val.replace('link:', '');\n const linkedPkg = JSON.parse(readFileSync(join(pkg.path, linkPath, 'package.json'), 'utf-8'));\n deps[depName] = `^${linkedPkg.version}`;\n modified = true;\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n } else if (val.startsWith('workspace:')) {\n // Intra-repo workspace:* → ^version (pnpm does this automatically, but npm doesn't)\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = val === 'workspace:*' ? `^${planVersion}` : val.replace('workspace:', '');\n modified = true;\n } else {\n // Not in plan — resolve from current version in monorepo\n try {\n // Find the package in the same repo by scanning packages/*/package.json\n const repoRoot = join(pkg.path, '..');\n const candidates = readdirSync(repoRoot, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => join(repoRoot, d.name, 'package.json'));\n for (const candidate of candidates) {\n try {\n const cPkg = JSON.parse(readFileSync(candidate, 'utf-8'));\n if (cPkg.name === depName) {\n deps[depName] = `^${cPkg.version}`;\n modified = true;\n break;\n }\n } catch { /* skip */ }\n }\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n }\n }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n logger.info(`Replaced link: deps for ${pkg.name}`);\n }\n\n await publishSinglePackage({\n packagePath: pkg.path,\n token,\n otp,\n dryRun,\n tag,\n access: access ?? 'public',\n registry,\n });\n\n results.push({ name: pkg.name, version: pkg.version, success: true });\n logger.info(`Published ${pkg.name}@${pkg.version}`);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n\n logger.error(`Failed to publish ${pkg.name}@${pkg.version}`, undefined, { error: message });\n\n results.push({\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: message,\n });\n } finally {\n // Always restore original package.json\n if (!restored) {\n writeFileSync(pkgJsonPath, originalPkgJson);\n restored = true;\n }\n }\n }\n\n const published = results.filter((r) => r.success).map((r) => `${r.name}@${r.version}`);\n const failed = results.filter((r) => !r.success).map((r) => `${r.name}@${r.version}`);\n const errors = results.filter((r) => !r.success && r.error).map((r) => `${r.name}: ${r.error}`);\n\n return {\n results,\n published,\n failed,\n skipped: dryRun ? packages.map((p) => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n","/**\n * Shared publishing logic with interactive OTP support\n * Used by both `release:run` and `release publish` commands\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport * as readline from 'node:readline/promises';\nimport { useLoader } from '@kb-labs/sdk';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface PublishWithOTPOptions {\n packages: PackageToPublish[];\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: string;\n ui: {\n write?: (text: string) => void;\n };\n logger?: {\n info: (msg: string, meta?: any) => void;\n warn: (msg: string, meta?: any) => void;\n error: (msg: string, meta?: any) => void;\n debug: (msg: string, meta?: any) => void;\n };\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n error?: string;\n}\n\nexport interface PublishWithOTPResult {\n results: PublishResult[];\n published: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n/**\n * Publish packages with interactive OTP support\n */\nexport async function publishPackagesWithOTP(\n options: PublishWithOTPOptions\n): Promise<PublishWithOTPResult> {\n const { packages, dryRun, tag, access, ui, logger } = options;\n let otp = options.otp;\n\n const results: PublishResult[] = [];\n\n // Build version map from all packages in this release for link: → ^version replacement\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n for (const pkg of packages) {\n logger?.info('Publishing package', { name: pkg.name, version: pkg.version });\n\n // Replace link: deps with real versions before publish, restore after\n const pkgJsonPath = join(pkg.path, 'package.json');\n const originalPkgJson = readFileSync(pkgJsonPath, 'utf-8');\n let restored = false;\n\n try {\n const pkgJson = JSON.parse(originalPkgJson);\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section];\n if (!deps) {continue;}\n for (const [depName, depValue] of Object.entries(deps)) {\n if (typeof depValue !== 'string') {continue;}\n const val = depValue as string;\n\n if (val.startsWith('link:')) {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = `^${planVersion}`;\n modified = true;\n } else {\n try {\n const linkPath = val.replace('link:', '');\n const linkedPkg = JSON.parse(readFileSync(join(pkg.path, linkPath, 'package.json'), 'utf-8'));\n deps[depName] = `^${linkedPkg.version}`;\n modified = true;\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n } else if (val.startsWith('workspace:')) {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = val === 'workspace:*' ? `^${planVersion}` : val.replace('workspace:', '');\n modified = true;\n } else {\n try {\n const repoRoot = join(pkg.path, '..');\n const candidates = readdirSync(repoRoot, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => join(repoRoot, d.name, 'package.json'));\n for (const candidate of candidates) {\n try {\n const cPkg = JSON.parse(readFileSync(candidate, 'utf-8'));\n if (cPkg.name === depName) {\n deps[depName] = `^${cPkg.version}`;\n modified = true;\n break;\n }\n } catch { /* skip */ }\n }\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n }\n }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n logger?.info(`Replaced link: deps for ${pkg.name}`);\n }\n\n const loader = useLoader(`Publishing ${pkg.name}@${pkg.version}...`);\n loader.start();\n\n let attempts = 0;\n const maxAttempts = 3;\n let published = false;\n\n while (!published && attempts < maxAttempts) {\n attempts++;\n\n try {\n await publishSinglePackage({\n packagePath: pkg.path,\n otp,\n dryRun,\n tag,\n access,\n });\n\n published = true;\n results.push({ name: pkg.name, version: pkg.version, success: true });\n\n const successMsg = dryRun\n ? `Dry-run succeeded for ${pkg.name}@${pkg.version}`\n : `Published ${pkg.name}@${pkg.version}`;\n\n loader.succeed(successMsg);\n logger?.info('Package published successfully', {\n name: pkg.name,\n version: pkg.version,\n dryRun,\n });\n } catch (error: any) {\n const errorMessage = error.message || String(error);\n\n // Check if OTP is required\n if (errorMessage.includes('EOTP') || errorMessage.includes('one-time password')) {\n if (attempts < maxAttempts) {\n loader.succeed(`🔐 2FA required for ${pkg.name}`);\n logger?.info('OTP required for publishing', {\n name: pkg.name,\n attempt: attempts,\n });\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n try {\n otp = await rl.question(' Enter OTP code: ');\n rl.close();\n\n if (!otp || otp.trim().length !== 6) {\n ui.write?.(' ⚠️ Invalid OTP code (must be 6 digits)\\n');\n logger?.warn('Invalid OTP code provided', { length: otp?.trim().length });\n otp = undefined;\n continue;\n }\n\n loader.update({ text: `Publishing ${pkg.name}@${pkg.version} with OTP...` });\n loader.start();\n logger?.debug('Retrying with OTP');\n } catch (e) {\n rl.close();\n throw e;\n }\n } else {\n loader.fail('Max OTP attempts reached');\n logger?.error('Max OTP attempts reached', {\n name: pkg.name,\n attempts: maxAttempts,\n });\n results.push({\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: 'Max OTP attempts reached',\n });\n break;\n }\n } else {\n loader.fail(`Failed: ${errorMessage}`);\n logger?.error('Package publish failed', {\n name: pkg.name,\n version: pkg.version,\n error: errorMessage,\n });\n results.push({\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: errorMessage,\n });\n break;\n }\n }\n }\n } finally {\n // Always restore original package.json\n if (!restored) {\n writeFileSync(pkgJsonPath, originalPkgJson);\n restored = true;\n }\n }\n }\n\n // Build result summary\n const published = results\n .filter((r) => r.success)\n .map((r) => `${r.name}@${r.version}`);\n const failed = results\n .filter((r) => !r.success)\n .map((r) => `${r.name}@${r.version}`);\n const errors = results\n .filter((r) => !r.success && r.error)\n .map((r) => `${r.name}: ${r.error}`);\n\n return {\n results,\n published,\n failed,\n skipped: dryRun ? packages.map((p) => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n\ninterface PublishSingleOptions {\n packagePath: string;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n}\n\n/**\n * Publish a single package using npm CLI\n */\nfunction publishSinglePackage(options: PublishSingleOptions): Promise<void> {\n const { packagePath, otp, dryRun, tag, access } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n if (dryRun) {\n args.push('--dry-run');\n }\n\n if (otp) {\n args.push(`--otp=${otp}`);\n }\n\n if (tag) {\n args.push(`--tag=${tag}`);\n }\n\n if (access) {\n args.push(`--access=${access}`);\n }\n\n const child = spawn('npm', args, {\n cwd: packagePath,\n stdio: ['inherit', 'pipe', 'pipe'],\n shell: true,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n const errorOutput = stderr || stdout;\n reject(new Error(errorOutput));\n }\n });\n\n child.on('error', (err) => {\n reject(err);\n });\n });\n}\n","/**\n * Standalone npm publish command — thin adapter over planRelease + publish.\n * No build/verify steps (those belong in release:run pipeline).\n *\n * Token-first (programmatic), OTP fallback for interactive terminal.\n */\n\nimport { defineCommand, type CLIInput, type PluginContextV3, useLoader, useConfig } from '@kb-labs/sdk';\nimport { planRelease, type ReleaseConfig } from '@kb-labs/release-manager-core';\nimport { findRepoRoot } from '../../shared/utils';\nimport { publishPackagesProgrammatic, type ProgrammaticPublishResult } from '../../shared/publish-programmatic';\nimport { publishPackagesWithOTP, type PublishWithOTPResult } from '../../shared/publish-with-otp';\n\ninterface PublishFlags {\n scope?: string;\n otp?: string;\n 'dry-run'?: boolean;\n tag?: string;\n access?: string;\n token?: string;\n json?: boolean;\n}\n\ninterface PublishResult {\n exitCode: number;\n published?: Array<{ name: string; version: string }>;\n failed?: Array<{ name: string; version: string; error: string }>;\n summary?: {\n total: number;\n successful: number;\n failed: number;\n };\n}\n\nexport default defineCommand({\n id: 'release:publish',\n description: 'Publish packages to npm registry',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<PublishFlags>): Promise<PublishResult> {\n const { flags } = input;\n const { scope, otp: initialOtp, tag, access, json } = flags;\n const dryRun = flags['dry-run'];\n const token = flags.token ?? process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN;\n\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n // 1. Discover packages via planRelease\n const discoveryLoader = useLoader('Discovering packages...');\n discoveryLoader.start();\n\n const fileConfig = await useConfig<ReleaseConfig>();\n const config: ReleaseConfig = fileConfig ?? {};\n const plan = await planRelease({ cwd: repoRoot, config, scope });\n\n const packages = plan.packages.map(pkg => ({\n name: pkg.name,\n version: pkg.nextVersion,\n path: pkg.path,\n }));\n\n discoveryLoader.succeed(`Found ${packages.length} package(s)`);\n\n if (packages.length === 0) {\n const msg = `No packages found to publish${scope ? ` matching scope: ${scope}` : ''}`;\n if (json) {\n ctx.ui?.json?.({ error: msg });\n } else {\n ctx.ui?.write?.(msg);\n }\n return { exitCode: 1, summary: { total: 0, successful: 0, failed: 0 } };\n }\n\n // 2. Publish — token-first (programmatic), OTP fallback for interactive terminal\n let result: ProgrammaticPublishResult | PublishWithOTPResult;\n if (token) {\n result = await publishPackagesProgrammatic({\n packages,\n dryRun,\n otp: initialOtp,\n tag,\n access: access as 'public' | 'restricted' | undefined,\n token,\n });\n } else {\n result = await publishPackagesWithOTP({\n packages,\n dryRun,\n otp: initialOtp,\n tag,\n access: access ?? 'public',\n ui: ctx.ui,\n logger: ctx.platform?.logger,\n });\n }\n\n // 3. Format output\n const successful = result.results.filter((r) => r.success).length;\n const failed = result.results.filter((r) => !r.success).length;\n\n const publishResult: PublishResult = {\n exitCode: failed === 0 ? 0 : 1,\n published: result.results.filter((r) => r.success).map((r) => ({ name: r.name, version: r.version })),\n failed: result.results.filter((r) => !r.success).map((r) => ({\n name: r.name,\n version: r.version,\n error: r.error || 'Unknown error',\n })),\n summary: { total: result.results.length, successful, failed },\n };\n\n if (json) {\n ctx.ui?.json?.(publishResult);\n return publishResult;\n }\n\n const sections: Array<{ header?: string; items: string[] }> = [];\n\n if (successful > 0) {\n const successItems: string[] = [];\n for (const r of result.results.filter((r) => r.success)) {\n successItems.push(`${ctx.ui.symbols.success} ${r.name}@${r.version}`);\n successItems.push(` └─ https://www.npmjs.com/package/${r.name}`);\n }\n sections.push({ header: 'Published', items: successItems });\n }\n\n if (failed > 0) {\n const failItems = result.results\n .filter((r) => !r.success)\n .map((r) => `${ctx.ui.symbols.error} ${r.name}@${r.version} - ${r.error}`);\n sections.push({ header: 'Failed', items: failItems });\n }\n\n ctx.ui.sideBox({\n title: dryRun ? 'Publish Dry-Run' : 'Publish Summary',\n sections,\n status: failed === 0 ? 'success' : 'error',\n });\n\n return publishResult;\n },\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/shared/publish-programmatic.ts","../../../src/shared/publish-with-otp.ts","../../../src/cli/commands/publish.ts"],"names":["join","readFileSync","writeFileSync","published","publishSinglePackage","spawn","useLoader","r"],"mappings":"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","file":"publish.js","sourcesContent":["/**\n * Programmatic npm publishing for REST handlers (non-interactive context)\n *\n * Uses `npm publish` CLI via spawn with NODE_AUTH_TOKEN env variable.\n * This is the correct approach for granular access tokens (classic tokens\n * were revoked by npm in December 2025).\n *\n * Token resolution order:\n * 1. options.token (explicit override)\n * 2. NPM_TOKEN env variable\n * 3. NODE_AUTH_TOKEN env variable\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { useLogger } from '@kb-labs/sdk';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface ProgrammaticPublishOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: 'public' | 'restricted';\n registry?: string;\n token?: string;\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n error?: string;\n}\n\nexport interface ProgrammaticPublishResult {\n results: PublishResult[];\n published: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n/**\n * Resolve npm auth token from options or environment\n */\nfunction resolveToken(token?: string): string | undefined {\n return token ?? process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN;\n}\n\n/**\n * Publish a single package using npm CLI\n * Passes auth token via NODE_AUTH_TOKEN env (recommended for granular tokens)\n */\nfunction publishSinglePackage(options: {\n packagePath: string;\n packageManager: string;\n token: string | undefined;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}): Promise<void> {\n const { packagePath, packageManager, token, otp, dryRun, tag, access, registry } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n // pnpm checks git cleanliness before publish, but our pipeline already bumps versions\n // (making the tree dirty) before calling publish — disable this check.\n if (packageManager === 'pnpm') {\n args.push('--no-git-checks');\n }\n\n if (dryRun) {\n args.push('--dry-run');\n }\n\n if (tag) {\n args.push(`--tag=${tag}`);\n }\n\n if (access) {\n args.push(`--access=${access}`);\n }\n\n if (registry) {\n args.push(`--registry=${registry}`);\n }\n\n if (otp) {\n args.push(`--otp=${otp}`);\n }\n\n // Pass token via env — this is the correct way for granular tokens\n const env: NodeJS.ProcessEnv = { ...process.env };\n if (token) {\n env['NODE_AUTH_TOKEN'] = token;\n }\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code: number | null) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));\n }\n });\n\n child.on('error', (err: Error) => {\n reject(err);\n });\n });\n}\n\n/**\n * Publish packages programmatically (non-interactive, for REST handlers)\n * Uses npm CLI with NODE_AUTH_TOKEN — works with granular access tokens.\n */\nexport async function publishPackagesProgrammatic(\n options: ProgrammaticPublishOptions\n): Promise<ProgrammaticPublishResult> {\n const { packages, packageManager = 'pnpm', dryRun, otp, tag, access, registry } = options;\n const logger = useLogger();\n\n const token = resolveToken(options.token);\n\n if (!token && !dryRun) {\n const error = 'No npm token found. Set NPM_TOKEN (or NODE_AUTH_TOKEN) in environment.';\n logger.error(error);\n return {\n results: [],\n published: [],\n failed: packages.map((p) => `${p.name}@${p.version}`),\n skipped: [],\n errors: [error],\n };\n }\n\n const results: PublishResult[] = [];\n\n // Build version map from all packages in this release for link: → ^version replacement\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n for (const pkg of packages) {\n logger.info(`Publishing ${pkg.name}@${pkg.version}`, { path: pkg.path, dryRun });\n\n // Replace link: deps with real versions before publish, restore after\n const pkgJsonPath = join(pkg.path, 'package.json');\n const originalPkgJson = readFileSync(pkgJsonPath, 'utf-8');\n let restored = false;\n\n try {\n const pkgJson = JSON.parse(originalPkgJson);\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section];\n if (!deps) {continue;}\n for (const [depName, depValue] of Object.entries(deps)) {\n if (typeof depValue !== 'string') {continue;}\n const val = depValue as string;\n\n if (val.startsWith('link:')) {\n // Cross-repo link: → ^version from plan or linked package.json\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = `^${planVersion}`;\n modified = true;\n } else {\n try {\n const linkPath = val.replace('link:', '');\n const linkedPkg = JSON.parse(readFileSync(join(pkg.path, linkPath, 'package.json'), 'utf-8'));\n deps[depName] = `^${linkedPkg.version}`;\n modified = true;\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm') {\n // workspace:* → ^version only needed for npm/yarn (pnpm publish handles this automatically)\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = val === 'workspace:*' ? `^${planVersion}` : val.replace('workspace:', '');\n modified = true;\n }\n }\n }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n logger.info(`Replaced link: deps for ${pkg.name}`);\n }\n\n await publishSinglePackage({\n packagePath: pkg.path,\n packageManager,\n token,\n otp,\n dryRun,\n tag,\n access: access ?? 'public',\n registry,\n });\n\n results.push({ name: pkg.name, version: pkg.version, success: true });\n logger.info(`Published ${pkg.name}@${pkg.version}`);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n\n logger.error(`Failed to publish ${pkg.name}@${pkg.version}`, undefined, { error: message });\n\n results.push({\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: message,\n });\n } finally {\n // Always restore original package.json\n if (!restored) {\n writeFileSync(pkgJsonPath, originalPkgJson);\n restored = true;\n }\n }\n }\n\n const published = results.filter((r) => r.success).map((r) => `${r.name}@${r.version}`);\n const failed = results.filter((r) => !r.success).map((r) => `${r.name}@${r.version}`);\n const errors = results.filter((r) => !r.success && r.error).map((r) => `${r.name}: ${r.error}`);\n\n return {\n results,\n published,\n failed,\n skipped: dryRun ? packages.map((p) => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n","/**\n * Shared publishing logic with interactive OTP support\n * Used by both `release:run` and `release publish` commands\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport * as readline from 'node:readline/promises';\nimport { useLoader } from '@kb-labs/sdk';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface PublishWithOTPOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: string;\n ui: {\n write?: (text: string) => void;\n };\n logger?: {\n info: (msg: string, meta?: any) => void;\n warn: (msg: string, meta?: any) => void;\n error: (msg: string, meta?: any) => void;\n debug: (msg: string, meta?: any) => void;\n };\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n error?: string;\n}\n\nexport interface PublishWithOTPResult {\n results: PublishResult[];\n published: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n/**\n * Publish packages with interactive OTP support\n */\nexport async function publishPackagesWithOTP(\n options: PublishWithOTPOptions\n): Promise<PublishWithOTPResult> {\n const { packages, packageManager = 'pnpm', dryRun, tag, access, ui, logger } = options;\n let otp = options.otp;\n\n const results: PublishResult[] = [];\n\n // Build version map from all packages in this release for link: → ^version replacement\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n for (const pkg of packages) {\n logger?.info('Publishing package', { name: pkg.name, version: pkg.version });\n\n // Replace link: deps with real versions before publish, restore after\n const pkgJsonPath = join(pkg.path, 'package.json');\n const originalPkgJson = readFileSync(pkgJsonPath, 'utf-8');\n let restored = false;\n\n try {\n const pkgJson = JSON.parse(originalPkgJson);\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section];\n if (!deps) {continue;}\n for (const [depName, depValue] of Object.entries(deps)) {\n if (typeof depValue !== 'string') {continue;}\n const val = depValue as string;\n\n if (val.startsWith('link:')) {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = `^${planVersion}`;\n modified = true;\n } else {\n try {\n const linkPath = val.replace('link:', '');\n const linkedPkg = JSON.parse(readFileSync(join(pkg.path, linkPath, 'package.json'), 'utf-8'));\n deps[depName] = `^${linkedPkg.version}`;\n modified = true;\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm') {\n // workspace:* → ^version only needed for npm/yarn (pnpm publish handles this automatically)\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = val === 'workspace:*' ? `^${planVersion}` : val.replace('workspace:', '');\n modified = true;\n }\n }\n }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n logger?.info(`Replaced link: deps for ${pkg.name}`);\n }\n\n const loader = useLoader(`Publishing ${pkg.name}@${pkg.version}...`);\n loader.start();\n\n let attempts = 0;\n const maxAttempts = 3;\n let published = false;\n\n while (!published && attempts < maxAttempts) {\n attempts++;\n\n try {\n await publishSinglePackage({\n packagePath: pkg.path,\n packageManager,\n otp,\n dryRun,\n tag,\n access,\n });\n\n published = true;\n results.push({ name: pkg.name, version: pkg.version, success: true });\n\n const successMsg = dryRun\n ? `Dry-run succeeded for ${pkg.name}@${pkg.version}`\n : `Published ${pkg.name}@${pkg.version}`;\n\n loader.succeed(successMsg);\n logger?.info('Package published successfully', {\n name: pkg.name,\n version: pkg.version,\n dryRun,\n });\n } catch (error: any) {\n const errorMessage = error.message || String(error);\n\n // Check if OTP is required\n if (errorMessage.includes('EOTP') || errorMessage.includes('one-time password')) {\n if (attempts < maxAttempts) {\n loader.succeed(`🔐 2FA required for ${pkg.name}`);\n logger?.info('OTP required for publishing', {\n name: pkg.name,\n attempt: attempts,\n });\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n try {\n otp = await rl.question(' Enter OTP code: ');\n rl.close();\n\n if (!otp || otp.trim().length !== 6) {\n ui.write?.(' ⚠️ Invalid OTP code (must be 6 digits)\\n');\n logger?.warn('Invalid OTP code provided', { length: otp?.trim().length });\n otp = undefined;\n continue;\n }\n\n loader.update({ text: `Publishing ${pkg.name}@${pkg.version} with OTP...` });\n loader.start();\n logger?.debug('Retrying with OTP');\n } catch (e) {\n rl.close();\n throw e;\n }\n } else {\n loader.fail('Max OTP attempts reached');\n logger?.error('Max OTP attempts reached', {\n name: pkg.name,\n attempts: maxAttempts,\n });\n results.push({\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: 'Max OTP attempts reached',\n });\n break;\n }\n } else {\n loader.fail(`Failed: ${errorMessage}`);\n logger?.error('Package publish failed', {\n name: pkg.name,\n version: pkg.version,\n error: errorMessage,\n });\n results.push({\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: errorMessage,\n });\n break;\n }\n }\n }\n } finally {\n // Always restore original package.json\n if (!restored) {\n writeFileSync(pkgJsonPath, originalPkgJson);\n restored = true;\n }\n }\n }\n\n // Build result summary\n const published = results\n .filter((r) => r.success)\n .map((r) => `${r.name}@${r.version}`);\n const failed = results\n .filter((r) => !r.success)\n .map((r) => `${r.name}@${r.version}`);\n const errors = results\n .filter((r) => !r.success && r.error)\n .map((r) => `${r.name}: ${r.error}`);\n\n return {\n results,\n published,\n failed,\n skipped: dryRun ? packages.map((p) => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n\ninterface PublishSingleOptions {\n packagePath: string;\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n}\n\n/**\n * Publish a single package using npm CLI\n */\nfunction publishSinglePackage(options: PublishSingleOptions): Promise<void> {\n const { packagePath, packageManager = 'pnpm', otp, dryRun, tag, access } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n if (packageManager === 'pnpm') {\n args.push('--no-git-checks');\n }\n\n if (dryRun) {\n args.push('--dry-run');\n }\n\n if (otp) {\n args.push(`--otp=${otp}`);\n }\n\n if (tag) {\n args.push(`--tag=${tag}`);\n }\n\n if (access) {\n args.push(`--access=${access}`);\n }\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['inherit', 'pipe', 'pipe'],\n shell: true,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n const errorOutput = stderr || stdout;\n reject(new Error(errorOutput));\n }\n });\n\n child.on('error', (err) => {\n reject(err);\n });\n });\n}\n","/**\n * Standalone npm publish command — thin adapter over planRelease + publish.\n * No build/verify steps (those belong in release:run pipeline).\n *\n * Token-first (programmatic), OTP fallback for interactive terminal.\n */\n\nimport { defineCommand, type CLIInput, type PluginContextV3, useLoader, useConfig } from '@kb-labs/sdk';\nimport { planRelease, type ReleaseConfig } from '@kb-labs/release-manager-core';\nimport { findRepoRoot } from '../../shared/utils';\nimport { publishPackagesProgrammatic, type ProgrammaticPublishResult } from '../../shared/publish-programmatic';\nimport { publishPackagesWithOTP, type PublishWithOTPResult } from '../../shared/publish-with-otp';\n\ninterface PublishFlags {\n scope?: string;\n otp?: string;\n 'dry-run'?: boolean;\n tag?: string;\n access?: string;\n token?: string;\n json?: boolean;\n}\n\ninterface PublishResult {\n exitCode: number;\n published?: Array<{ name: string; version: string }>;\n failed?: Array<{ name: string; version: string; error: string }>;\n summary?: {\n total: number;\n successful: number;\n failed: number;\n };\n}\n\nexport default defineCommand({\n id: 'release:publish',\n description: 'Publish packages to npm registry',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<PublishFlags>): Promise<PublishResult> {\n const { flags } = input;\n const { scope, otp: initialOtp, tag, access, json } = flags;\n const dryRun = flags['dry-run'];\n const token = flags.token ?? process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN;\n\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n // 1. Discover packages via planRelease\n const discoveryLoader = useLoader('Discovering packages...');\n discoveryLoader.start();\n\n const fileConfig = await useConfig<ReleaseConfig>();\n const config: ReleaseConfig = fileConfig ?? {};\n const plan = await planRelease({ cwd: repoRoot, config, scope });\n\n const packages = plan.packages.map(pkg => ({\n name: pkg.name,\n version: pkg.nextVersion,\n path: pkg.path,\n }));\n\n discoveryLoader.succeed(`Found ${packages.length} package(s)`);\n\n if (packages.length === 0) {\n const msg = `No packages found to publish${scope ? ` matching scope: ${scope}` : ''}`;\n if (json) {\n ctx.ui?.json?.({ error: msg });\n } else {\n ctx.ui?.write?.(msg);\n }\n return { exitCode: 1, summary: { total: 0, successful: 0, failed: 0 } };\n }\n\n // 2. Publish — token-first (programmatic), OTP fallback for interactive terminal\n let result: ProgrammaticPublishResult | PublishWithOTPResult;\n if (token) {\n result = await publishPackagesProgrammatic({\n packages,\n dryRun,\n otp: initialOtp,\n tag,\n access: access as 'public' | 'restricted' | undefined,\n token,\n });\n } else {\n result = await publishPackagesWithOTP({\n packages,\n dryRun,\n otp: initialOtp,\n tag,\n access: access ?? 'public',\n ui: ctx.ui,\n logger: ctx.platform?.logger,\n });\n }\n\n // 3. Format output\n const successful = result.results.filter((r) => r.success).length;\n const failed = result.results.filter((r) => !r.success).length;\n\n const publishResult: PublishResult = {\n exitCode: failed === 0 ? 0 : 1,\n published: result.results.filter((r) => r.success).map((r) => ({ name: r.name, version: r.version })),\n failed: result.results.filter((r) => !r.success).map((r) => ({\n name: r.name,\n version: r.version,\n error: r.error || 'Unknown error',\n })),\n summary: { total: result.results.length, successful, failed },\n };\n\n if (json) {\n ctx.ui?.json?.(publishResult);\n return publishResult;\n }\n\n const sections: Array<{ header?: string; items: string[] }> = [];\n\n if (successful > 0) {\n const successItems: string[] = [];\n for (const r of result.results.filter((r) => r.success)) {\n successItems.push(`${ctx.ui.symbols.success} ${r.name}@${r.version}`);\n successItems.push(` └─ https://www.npmjs.com/package/${r.name}`);\n }\n sections.push({ header: 'Published', items: successItems });\n }\n\n if (failed > 0) {\n const failItems = result.results\n .filter((r) => !r.success)\n .map((r) => `${ctx.ui.symbols.error} ${r.name}@${r.version} - ${r.error}`);\n sections.push({ header: 'Failed', items: failItems });\n }\n\n ctx.ui.sideBox({\n title: dryRun ? 'Publish Dry-Run' : 'Publish Summary',\n sections,\n status: failed === 0 ? 'success' : 'error',\n });\n\n return publishResult;\n },\n },\n});\n"]}
|
package/dist/cli/commands/run.js
CHANGED
|
@@ -6,7 +6,7 @@ import 'fs/promises';
|
|
|
6
6
|
import 'globby';
|
|
7
7
|
import { generateChangelog, generateSimpleChangelog } from '@kb-labs/release-manager-changelog';
|
|
8
8
|
import { spawn } from 'child_process';
|
|
9
|
-
import { readFileSync,
|
|
9
|
+
import { readFileSync, writeFileSync } from 'fs';
|
|
10
10
|
|
|
11
11
|
// src/cli/commands/run.ts
|
|
12
12
|
function createChangelogGenerator(config, llm) {
|
|
@@ -56,9 +56,12 @@ function resolveToken(token) {
|
|
|
56
56
|
return token ?? process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN;
|
|
57
57
|
}
|
|
58
58
|
function publishSinglePackage(options) {
|
|
59
|
-
const { packagePath, token, otp, dryRun, tag, access, registry } = options;
|
|
59
|
+
const { packagePath, packageManager, token, otp, dryRun, tag, access, registry } = options;
|
|
60
60
|
return new Promise((resolve, reject) => {
|
|
61
61
|
const args = ["publish"];
|
|
62
|
+
if (packageManager === "pnpm") {
|
|
63
|
+
args.push("--no-git-checks");
|
|
64
|
+
}
|
|
62
65
|
if (dryRun) {
|
|
63
66
|
args.push("--dry-run");
|
|
64
67
|
}
|
|
@@ -78,7 +81,7 @@ function publishSinglePackage(options) {
|
|
|
78
81
|
if (token) {
|
|
79
82
|
env["NODE_AUTH_TOKEN"] = token;
|
|
80
83
|
}
|
|
81
|
-
const child = spawn(
|
|
84
|
+
const child = spawn(packageManager, args, {
|
|
82
85
|
cwd: packagePath,
|
|
83
86
|
stdio: ["ignore", "pipe", "pipe"],
|
|
84
87
|
shell: true,
|
|
@@ -96,7 +99,7 @@ function publishSinglePackage(options) {
|
|
|
96
99
|
if (code === 0) {
|
|
97
100
|
resolve();
|
|
98
101
|
} else {
|
|
99
|
-
reject(new Error(stderr || stdout ||
|
|
102
|
+
reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));
|
|
100
103
|
}
|
|
101
104
|
});
|
|
102
105
|
child.on("error", (err) => {
|
|
@@ -105,7 +108,7 @@ function publishSinglePackage(options) {
|
|
|
105
108
|
});
|
|
106
109
|
}
|
|
107
110
|
async function publishPackagesProgrammatic(options) {
|
|
108
|
-
const { packages, dryRun, otp, tag, access, registry } = options;
|
|
111
|
+
const { packages, packageManager = "pnpm", dryRun, otp, tag, access, registry } = options;
|
|
109
112
|
const logger = useLogger();
|
|
110
113
|
const token = resolveToken(options.token);
|
|
111
114
|
if (!token && !dryRun) {
|
|
@@ -155,30 +158,11 @@ async function publishPackagesProgrammatic(options) {
|
|
|
155
158
|
modified = true;
|
|
156
159
|
}
|
|
157
160
|
}
|
|
158
|
-
} else if (val.startsWith("workspace:")) {
|
|
161
|
+
} else if (val.startsWith("workspace:") && packageManager !== "pnpm") {
|
|
159
162
|
const planVersion = versionMap.get(depName);
|
|
160
163
|
if (planVersion) {
|
|
161
164
|
deps[depName] = val === "workspace:*" ? `^${planVersion}` : val.replace("workspace:", "");
|
|
162
165
|
modified = true;
|
|
163
|
-
} else {
|
|
164
|
-
try {
|
|
165
|
-
const repoRoot = join(pkg.path, "..");
|
|
166
|
-
const candidates = readdirSync(repoRoot, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => join(repoRoot, d.name, "package.json"));
|
|
167
|
-
for (const candidate of candidates) {
|
|
168
|
-
try {
|
|
169
|
-
const cPkg = JSON.parse(readFileSync(candidate, "utf-8"));
|
|
170
|
-
if (cPkg.name === depName) {
|
|
171
|
-
deps[depName] = `^${cPkg.version}`;
|
|
172
|
-
modified = true;
|
|
173
|
-
break;
|
|
174
|
-
}
|
|
175
|
-
} catch {
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
} catch {
|
|
179
|
-
deps[depName] = "*";
|
|
180
|
-
modified = true;
|
|
181
|
-
}
|
|
182
166
|
}
|
|
183
167
|
}
|
|
184
168
|
}
|
|
@@ -189,6 +173,7 @@ async function publishPackagesProgrammatic(options) {
|
|
|
189
173
|
}
|
|
190
174
|
await publishSinglePackage({
|
|
191
175
|
packagePath: pkg.path,
|
|
176
|
+
packageManager,
|
|
192
177
|
token,
|
|
193
178
|
otp,
|
|
194
179
|
dryRun,
|
|
@@ -226,7 +211,7 @@ async function publishPackagesProgrammatic(options) {
|
|
|
226
211
|
};
|
|
227
212
|
}
|
|
228
213
|
async function publishPackagesWithOTP(options) {
|
|
229
|
-
const { packages, dryRun, tag, access, ui, logger } = options;
|
|
214
|
+
const { packages, packageManager = "pnpm", dryRun, tag, access, ui, logger } = options;
|
|
230
215
|
let otp = options.otp;
|
|
231
216
|
const results = [];
|
|
232
217
|
const versionMap = new Map(packages.map((p) => [p.name, p.version]));
|
|
@@ -264,30 +249,11 @@ async function publishPackagesWithOTP(options) {
|
|
|
264
249
|
modified = true;
|
|
265
250
|
}
|
|
266
251
|
}
|
|
267
|
-
} else if (val.startsWith("workspace:")) {
|
|
252
|
+
} else if (val.startsWith("workspace:") && packageManager !== "pnpm") {
|
|
268
253
|
const planVersion = versionMap.get(depName);
|
|
269
254
|
if (planVersion) {
|
|
270
255
|
deps[depName] = val === "workspace:*" ? `^${planVersion}` : val.replace("workspace:", "");
|
|
271
256
|
modified = true;
|
|
272
|
-
} else {
|
|
273
|
-
try {
|
|
274
|
-
const repoRoot = join(pkg.path, "..");
|
|
275
|
-
const candidates = readdirSync(repoRoot, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => join(repoRoot, d.name, "package.json"));
|
|
276
|
-
for (const candidate of candidates) {
|
|
277
|
-
try {
|
|
278
|
-
const cPkg = JSON.parse(readFileSync(candidate, "utf-8"));
|
|
279
|
-
if (cPkg.name === depName) {
|
|
280
|
-
deps[depName] = `^${cPkg.version}`;
|
|
281
|
-
modified = true;
|
|
282
|
-
break;
|
|
283
|
-
}
|
|
284
|
-
} catch {
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
} catch {
|
|
288
|
-
deps[depName] = "*";
|
|
289
|
-
modified = true;
|
|
290
|
-
}
|
|
291
257
|
}
|
|
292
258
|
}
|
|
293
259
|
}
|
|
@@ -306,6 +272,7 @@ async function publishPackagesWithOTP(options) {
|
|
|
306
272
|
try {
|
|
307
273
|
await publishSinglePackage2({
|
|
308
274
|
packagePath: pkg.path,
|
|
275
|
+
packageManager,
|
|
309
276
|
otp,
|
|
310
277
|
dryRun,
|
|
311
278
|
tag,
|
|
@@ -399,9 +366,12 @@ async function publishPackagesWithOTP(options) {
|
|
|
399
366
|
};
|
|
400
367
|
}
|
|
401
368
|
function publishSinglePackage2(options) {
|
|
402
|
-
const { packagePath, otp, dryRun, tag, access } = options;
|
|
369
|
+
const { packagePath, packageManager = "pnpm", otp, dryRun, tag, access } = options;
|
|
403
370
|
return new Promise((resolve, reject) => {
|
|
404
371
|
const args = ["publish"];
|
|
372
|
+
if (packageManager === "pnpm") {
|
|
373
|
+
args.push("--no-git-checks");
|
|
374
|
+
}
|
|
405
375
|
if (dryRun) {
|
|
406
376
|
args.push("--dry-run");
|
|
407
377
|
}
|
|
@@ -414,7 +384,7 @@ function publishSinglePackage2(options) {
|
|
|
414
384
|
if (access) {
|
|
415
385
|
args.push(`--access=${access}`);
|
|
416
386
|
}
|
|
417
|
-
const child = spawn(
|
|
387
|
+
const child = spawn(packageManager, args, {
|
|
418
388
|
cwd: packagePath,
|
|
419
389
|
stdio: ["inherit", "pipe", "pipe"],
|
|
420
390
|
shell: true
|
|
@@ -527,13 +497,15 @@ var run_default = defineCommand({
|
|
|
527
497
|
const llm = useLLM();
|
|
528
498
|
const changelog = createChangelogGenerator(config, llm ?? void 0);
|
|
529
499
|
const token = process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN;
|
|
500
|
+
const packageManager = config.workspace?.type ?? config.publish?.packageManager ?? "pnpm";
|
|
530
501
|
const publisher = {
|
|
531
502
|
async publish(packages, opts) {
|
|
532
503
|
if (token) {
|
|
533
|
-
return publishPackagesProgrammatic({ packages, dryRun: opts.dryRun });
|
|
504
|
+
return publishPackagesProgrammatic({ packages, packageManager, dryRun: opts.dryRun });
|
|
534
505
|
}
|
|
535
506
|
return publishPackagesWithOTP({
|
|
536
507
|
packages,
|
|
508
|
+
packageManager,
|
|
537
509
|
dryRun: opts.dryRun,
|
|
538
510
|
access: opts.access ?? "public",
|
|
539
511
|
ui: ctx.ui,
|