From bc478b1756c297e644123a2e910c305f02fb8a41 Mon Sep 17 00:00:00 2001 From: Sergey Matyunin Date: Mon, 17 Aug 2026 14:11:49 +0300 Subject: [PATCH] fix: raise release subprocess buffer Issue: #169 User-Visible: no --- scripts/release-prerelease.mjs | 3 +++ test/release-contract.test.mjs | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/scripts/release-prerelease.mjs b/scripts/release-prerelease.mjs index 632883e9..f5dc429f 100644 --- a/scripts/release-prerelease.mjs +++ b/scripts/release-prerelease.mjs @@ -15,6 +15,7 @@ import { assertReleaseContract } from './release-contract.mjs'; import { classifyValidateRuns } from './release-gate.mjs'; const sleep = (ms) => new Promise((done) => setTimeout(done, ms)); +const SUBPROCESS_MAX_BUFFER = 64 * 1024 * 1024; class ReleaseAssetContentError extends Error {} @@ -192,6 +193,7 @@ if (invokedDirectly) { const result = spawnSync(command, commandArgs, { cwd, encoding: 'utf8', + maxBuffer: SUBPROCESS_MAX_BUFFER, stdio: inherit ? 'inherit' : ['ignore', 'pipe', 'pipe'], }); if (result.error) throw result.error; @@ -209,6 +211,7 @@ if (invokedDirectly) { const runBytes = (command, commandArgs, { cwd = root } = {}) => { const result = spawnSync(command, commandArgs, { cwd, + maxBuffer: SUBPROCESS_MAX_BUFFER, stdio: ['ignore', 'pipe', 'pipe'], }); if (result.error) throw result.error; diff --git a/test/release-contract.test.mjs b/test/release-contract.test.mjs index ea40e670..fd3bd6f3 100644 --- a/test/release-contract.test.mjs +++ b/test/release-contract.test.mjs @@ -187,6 +187,18 @@ test('prerelease CLI reports malformed arguments without a raw stack trace', () assert.doesNotMatch(result.stderr, /\n\s+at\s/); }); +test('prerelease CLI can buffer the committed release bundle', () => { + const orchestrator = readFileSync( + new URL('../scripts/release-prerelease.mjs', import.meta.url), 'utf8', + ); + assert.match(orchestrator, /SUBPROCESS_MAX_BUFFER = 64 \* 1024 \* 1024/); + assert.equal( + [...orchestrator.matchAll(/maxBuffer: SUBPROCESS_MAX_BUFFER/g)].length, + 2, + 'both text and byte subprocess readers must override the Node default buffer', + ); +}); + test('manual publish workflow is draft-first, exact-SHA gated and self-contained', () => { const workflow = readFileSync(new URL('../.github/workflows/publish-prerelease.yml', import.meta.url), 'utf8'); for (const required of [