fix(deps): switch package manager to bun, use bun's native test runner - #420
Open
cdmren wants to merge 1 commit into
Open
fix(deps): switch package manager to bun, use bun's native test runner#420cdmren wants to merge 1 commit into
cdmren wants to merge 1 commit into
Conversation
cdmren
marked this pull request as ready for review
August 4, 2026 00:35
cdmren
requested review from
dverdaguer and
pbrisbin
and removed request for
a team
August 4, 2026 00:35
ts-jest (latest 29.4.12) requires typescript <7, which is what's breaking the build check on main and every PR rebased onto it (see #407, #417). This is a third angle on the same fix (alongside #418 and #419): move off Node/yarn/jest entirely in favor of bun, whose built-in test runner transpiles TS itself and has no such constraint, so typescript stays on ^7.0.2. - Replace yarn.lock with bun.lock; drop .nvmrc in favor of .bun-version - Drop jest/ts-jest/@types/jest; add @types/bun for bun:test's types - package.json test script: "bun test" - Test files: swap @jest/globals imports for bun:test's native mock/spyOn, and add explicit beforeEach(() => mock.clearAllMocks()) where mocks carry state across tests, since bun doesn't have jest's resetMocks/vitest's mockReset config equivalent - with-cache.test.ts: expect(async () => {...}).rejects.toThrow() doesn't work under bun (it requires an actual Promise, not a function reference, unlike jest/vitest which auto-invoke); changed to pass the invoked promise directly - CI/example/release workflows: swap actions/setup-node + yarn for oven-sh/setup-bun + bun - .releaserc.yaml: prepareCmd now runs bun instead of yarn Verified locally: bun install, bun test (44/44 across 8 files), and bun run build (tsc + ncc) all pass.
cdmren
force-pushed
the
cdm/migrate-to-bun
branch
from
August 4, 2026 00:36
4353952 to
ce3ab99
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
There's some incompatibility between jest and typescript 7. There's a number of options for how to handle this but IMO first of all we should just stop using jest. As for what to use instead, there's a number of options for how to handle this but IMO Bun is a superior environment in every way and it includes a test runner that works out of the box.
AI Slop
ts-jest@29.4.12(latest) requirestypescript: >=4.3 <7, so TypeScript 7(bumped in #407) breaks every test suite. This PR takes a third angle: since
the team is moving off Node/yarn/jest, switch the whole toolchain to bun and
use its built-in test runner instead of adding a separate test framework.
Bun transpiles TS itself (no ts-jest/tsc-API dependency), so
typescriptstays on
^7.0.2here too.Changes:
yarn.lock→bun.lock;.nvmrc→.bun-versionjest/ts-jest/@types/jest; add@types/bunforbun:testtypespackage.jsontest script:bun test@jest/globalsimports forbun:test(which exports ajest-compatible
jest.fn/jest.spyOn), plus explicitbeforeEach(() => jest.clearAllMocks())on the two files whose mocks carrystate across tests — bun has no equivalent to jest's
resetMocks/vitest's
mockResetconfigwith-cache.test.ts:expect(async () => {...}).rejects.toThrow()doesn'twork under bun — jest/vitest auto-invoke a bare function passed to
.rejects, bun requires an actualPromise. Changed the two occurrencesto pass the invoked promise directly.
actions/setup-node+ yarn →oven-sh/setup-bun+ bun.releaserc.yaml:prepareCmdnow runs bun instead of yarnNote:
action.ymlstill declaresusing: "node24"— this only changes thedev/build/test toolchain, not the runtime the published action executes
under.
Verified locally:
bun install,bun test(44/44 across 8 files), andbun run build(tsc + ncc) all pass.Only one of #418 / #419 / this PR should merge — all three fix the same
failure, different ways.