From f10734c5453afd2279632e1139fc569d2d242e1c Mon Sep 17 00:00:00 2001 From: justsisyphus Date: Mon, 19 Jan 2026 15:10:47 +0900 Subject: [PATCH] fix(publish): use batch publishing to prevent OIDC token expiration --- script/publish.ts | 56 ++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/script/publish.ts b/script/publish.ts index b6558f608..8d0db784f 100644 --- a/script/publish.ts +++ b/script/publish.ts @@ -192,32 +192,44 @@ async function publishAllPackages(version: string): Promise { if (skipPlatform) { console.log("\nā­ļø Skipping platform packages (SKIP_PLATFORM_PACKAGES=true)") } else { - console.log("\nšŸ“¦ Publishing platform packages in parallel...") - - // Publish platform packages in parallel for speed (avoids OIDC token expiration) - const publishPromises = PLATFORM_PACKAGES.map(async (platform) => { - const pkgDir = join(process.cwd(), "packages", platform) - const pkgName = `oh-my-opencode-${platform}` - - console.log(` Starting ${pkgName}...`) - const result = await publishPackage(pkgDir, distTag) - - return { platform, pkgName, result } - }) - - const results = await Promise.all(publishPromises) + console.log("\nšŸ“¦ Publishing platform packages in batches (to avoid OIDC token expiration)...") + // Publish in batches of 2 to avoid OIDC token expiration + // npm processes requests sequentially even when sent in parallel, + // so too many parallel requests can cause token expiration + const BATCH_SIZE = 2 const failures: string[] = [] - for (const { pkgName, result } of results) { - if (result.success) { - if (result.alreadyPublished) { - console.log(` āœ“ ${pkgName}@${version} (already published)`) + + for (let i = 0; i < PLATFORM_PACKAGES.length; i += BATCH_SIZE) { + const batch = PLATFORM_PACKAGES.slice(i, i + BATCH_SIZE) + const batchNum = Math.floor(i / BATCH_SIZE) + 1 + const totalBatches = Math.ceil(PLATFORM_PACKAGES.length / BATCH_SIZE) + + console.log(`\n Batch ${batchNum}/${totalBatches}: ${batch.join(", ")}`) + + const publishPromises = batch.map(async (platform) => { + const pkgDir = join(process.cwd(), "packages", platform) + const pkgName = `oh-my-opencode-${platform}` + + console.log(` Starting ${pkgName}...`) + const result = await publishPackage(pkgDir, distTag) + + return { platform, pkgName, result } + }) + + const results = await Promise.all(publishPromises) + + for (const { pkgName, result } of results) { + if (result.success) { + if (result.alreadyPublished) { + console.log(` āœ“ ${pkgName}@${version} (already published)`) + } else { + console.log(` āœ“ ${pkgName}@${version}`) + } } else { - console.log(` āœ“ ${pkgName}@${version}`) + console.error(` āœ— ${pkgName} failed: ${result.error}`) + failures.push(pkgName) } - } else { - console.error(` āœ— ${pkgName} failed: ${result.error}`) - failures.push(pkgName) } }