diff --git a/.github/workflows/core-ci.yml b/.github/workflows/core-ci.yml index 57daeefb..31ca91b2 100644 --- a/.github/workflows/core-ci.yml +++ b/.github/workflows/core-ci.yml @@ -50,7 +50,7 @@ jobs: if: steps.filter.outputs.code == 'true' uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: 1.3.14 + bun-version: 1.4.0 - name: Cache bun install if: steps.filter.outputs.code == 'true' diff --git a/.github/workflows/docs-linkcheck.yml b/.github/workflows/docs-linkcheck.yml index 3c135b45..d7f4cfcf 100644 --- a/.github/workflows/docs-linkcheck.yml +++ b/.github/workflows/docs-linkcheck.yml @@ -51,7 +51,7 @@ jobs: if: steps.filter.outputs.docs == 'true' uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: 1.3.14 + bun-version: 1.4.0 - name: Cache bun install if: steps.filter.outputs.docs == 'true' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dcb37c0b..7bd4bff2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,7 +31,7 @@ jobs: - name: Set up Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: 1.3.14 + bun-version: 1.4.0 - name: Cache bun install uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 diff --git a/.github/workflows/security-deps.yml b/.github/workflows/security-deps.yml index 4d505677..8b203abc 100644 --- a/.github/workflows/security-deps.yml +++ b/.github/workflows/security-deps.yml @@ -100,7 +100,7 @@ jobs: if: steps.filter.outputs.code == 'true' uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: 1.3.14 + bun-version: 1.4.0 - name: bun audit if: steps.filter.outputs.code == 'true' diff --git a/package.json b/package.json index 6bf6209a..89920da0 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "packageManager": "bun@1.3.14", "engines": { "node": ">=24.0.0", - "bun": "1.3.14" + "bun": "1.4.0" }, "devDependencies": { "@ast-grep/cli": "^0.45.0", diff --git a/packages/core/package.json b/packages/core/package.json index ecb2f293..50eefa6f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -23,7 +23,7 @@ "strict.type-aware.eslint.config.mjs" ], "engines": { - "bun": ">=1.3.14" + "bun": ">=1.4.0" }, "publishConfig": { "access": "public" diff --git a/packages/core/tests/edit-autoformat.e2e.test.ts b/packages/core/tests/edit-autoformat.e2e.test.ts index 6bb14440..16c74c64 100644 --- a/packages/core/tests/edit-autoformat.e2e.test.ts +++ b/packages/core/tests/edit-autoformat.e2e.test.ts @@ -39,4 +39,4 @@ test("a pre-format edit anchor survives the real write-guard auto-format", async } finally { await rm(dir, { recursive: true, force: true }); } -}); +}, 15_000); diff --git a/packages/core/tests/script-tool.test.ts b/packages/core/tests/script-tool.test.ts index bde59b6c..b190f8f0 100644 --- a/packages/core/tests/script-tool.test.ts +++ b/packages/core/tests/script-tool.test.ts @@ -394,8 +394,13 @@ test("the output drain is bounded when a backgrounded child holds the pipe open" // stdout pipe) then exits immediately, so `bun` exits fast while the orphan // keeps the pipe open. An unbounded drain (`Response(stdout).text()`) would // block the whole 5s waiting for EOF; the shared runner bounds it. + // Fire-and-forget async `Bun.spawn` here, NOT `Bun.spawnSync`: Bun 1.4 made + // `spawnSync` with inherited stdio wait for everything sharing that stdio + // (including this backgrounded job) before returning, which defeated the + // simulation — the script itself would block for the full 5s. `Bun.spawn` + // launches it and returns immediately, matching a real shell `&`. const code = [ - `Bun.spawnSync(["sh", "-c", "sleep 5 &"], { stdout: "inherit" });`, + `Bun.spawn(["sh", "-c", "sleep 5 &"], { stdout: "inherit" });`, 'console.log("SCRIPT_DONE");', ].join("\n"); const events: ILoopEvent[] = [];