Skip to content

Commit 0973df1

Browse files
agjscursoragent
andcommitted
chore: unify monorepo on Bun
Replace pnpm with Bun for apps/ui, apps/docs, root orchestration, CI, and docs so all three apps share one package-manager story. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 4a25fe7 commit 0973df1

103 files changed

Lines changed: 5283 additions & 21315 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/apps-api-acl-drift.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,6 @@ jobs:
5252
run: |
5353
if ! bun run generate:acl-types:check; then
5454
echo "::error::apps/ui/src/lib/acl/acl.types.generated.ts is stale against this API change."
55-
echo "::error::To fix: from repo root run 'pnpm regen' (or 'cd apps/api && bun run generate:acl-types') and commit apps/ui in the same PR."
55+
echo "::error::To fix: from repo root run 'bun run regen' (or 'cd apps/api && bun run generate:acl-types') and commit apps/ui in the same PR."
5656
exit 1
5757
fi

.github/workflows/apps-api-openapi-drift.yml

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -106,28 +106,23 @@ jobs:
106106
echo "✗ api did not become reachable in 30s" >&2
107107
exit 1
108108
109-
- name: Setup pnpm
110-
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
111-
with:
112-
version: 11.1.2
113-
114-
- name: Setup Node
115-
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
109+
- name: Set up Bun
110+
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
116111
with:
117-
node-version-file: apps/ui/.nvmrc
112+
bun-version: 1.3.13
118113

119114
- name: Install ui-template deps
120115
working-directory: apps/ui
121-
run: pnpm install --frozen-lockfile
116+
run: bun install --frozen-lockfile
122117

123118
- name: Check ui-template schema is up-to-date
124119
working-directory: apps/ui
125120
env:
126121
OPENAPI_URL: http://localhost:3000/swagger/json
127122
run: |
128-
if ! pnpm generate:api:check; then
123+
if ! bun run generate:api:check; then
129124
echo "::error::apps/ui/src/lib/api/schema.d.ts is stale against this API change."
130-
echo "::error::To fix: boot api on :3000, then from repo root run 'pnpm regen' and commit apps/ui in the same PR."
125+
echo "::error::To fix: boot api on :3000, then from repo root run 'bun run regen' and commit apps/ui in the same PR."
131126
exit 1
132127
fi
133128

.github/workflows/apps-docs-linkcheck.yml

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ on:
1313
- "apps/docs/scripts/**"
1414
- "apps/docs/astro.config.mjs"
1515
- "apps/docs/package.json"
16-
- "apps/docs/pnpm-lock.yaml"
16+
- "apps/docs/bun.lock"
1717
- ".github/workflows/apps-docs-linkcheck.yml"
1818
pull_request:
1919
paths:
2020
- "apps/docs/src/**"
2121
- "apps/docs/scripts/**"
2222
- "apps/docs/astro.config.mjs"
2323
- "apps/docs/package.json"
24-
- "apps/docs/pnpm-lock.yaml"
24+
- "apps/docs/bun.lock"
2525
- ".github/workflows/apps-docs-linkcheck.yml"
2626
workflow_dispatch:
2727

@@ -41,26 +41,16 @@ jobs:
4141
steps:
4242
- uses: actions/checkout@v4
4343

44-
- uses: pnpm/action-setup@v4
45-
with:
46-
version: 10
47-
48-
- uses: actions/setup-node@v4
49-
with:
50-
node-version: 22
51-
cache: pnpm
52-
cache-dependency-path: apps/docs/pnpm-lock.yaml
53-
5444
- uses: oven-sh/setup-bun@v2
5545
with:
5646
bun-version: 1.3.13
5747

5848
- name: Install docs deps
59-
run: pnpm install --frozen-lockfile
49+
run: bun install --frozen-lockfile
6050

6151
- name: Install ui-template deps for lint-meta export
6252
working-directory: apps/ui
63-
run: pnpm install --frozen-lockfile
53+
run: bun install --frozen-lockfile
6454

6555
- name: Install api-template deps for lint-meta export
6656
working-directory: apps/api
@@ -70,13 +60,13 @@ jobs:
7060
env:
7161
BORINGSTACK_UI_DIR: ${{ github.workspace }}/apps/ui
7262
BORINGSTACK_API_DIR: ${{ github.workspace }}/apps/api
73-
run: pnpm check:docs-data
63+
run: bun run check:docs-data
7464

7565
- name: Build docs site
7666
env:
7767
BORINGSTACK_UI_DIR: ${{ github.workspace }}/apps/ui
7868
BORINGSTACK_API_DIR: ${{ github.workspace }}/apps/api
79-
run: pnpm build:ci
69+
run: bun run build:ci
8070

8171
- name: Internal link check (fail on broken)
8272
uses: lycheeverse/lychee-action@v2

.github/workflows/apps-docs-security-deps.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ jobs:
5252
set +e
5353
osv-scanner \
5454
--config=apps/docs/osv-scanner.toml \
55-
--lockfile=apps/docs/pnpm-lock.yaml \
55+
--lockfile=apps/docs/bun.lock \
5656
--format=sarif \
5757
--output-file=osv-results.sarif
5858
echo "OSV_EXIT=$?" >> "$GITHUB_ENV"
@@ -87,8 +87,8 @@ jobs:
8787
exit 1
8888
fi
8989
90-
# No pnpm audit step here: osv-scanner above with osv-scanner.toml is
91-
# the canonical "what we accept" allowlist for this docs repo. pnpm
90+
# No bun audit step here: osv-scanner above with osv-scanner.toml is
91+
# the canonical "what we accept" allowlist for this docs repo. bun
9292
# audit can't reference the same allowlist (CVE IDs only, no GHSA
9393
# support), so it would always reintroduce noise. The docs site is a
9494
# static-site build with no runtime auth or user input. osv is

.github/workflows/apps-ui-bundle-diff.yml

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
paths:
77
- "apps/ui/src/**"
88
- "apps/ui/package.json"
9-
- "apps/ui/pnpm-lock.yaml"
9+
- "apps/ui/bun.lock"
1010
- "apps/ui/vite.config.ts"
1111
- "apps/ui/.size-limit.json"
1212
- ".github/workflows/apps-ui-bundle-diff.yml"
@@ -29,26 +29,22 @@ jobs:
2929
- name: Checkout
3030
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
3131

32-
- name: Setup pnpm
33-
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
32+
- name: Set up Bun
33+
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
3434
with:
35-
version: 11.1.2
35+
bun-version: 1.3.13
3636

37-
- name: Setup Node
38-
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
39-
with:
40-
node-version-file: apps/ui/.nvmrc
41-
cache: pnpm
42-
cache-dependency-path: apps/ui/pnpm-lock.yaml
37+
- name: Install
38+
run: bun install --frozen-lockfile
4339

44-
# size-limit-action runs `pnpm install` + `pnpm build` itself on both
45-
# the base branch and the head, then diffs. We pass `script` so it
46-
# builds with our exact production pipeline (typecheck + vite build).
40+
# size-limit-action runs install + build on both branches internally
41+
# unless skip_step is set. We pre-install with bun and use npm as the
42+
# runner because bun's node_modules layout is npm-compatible.
4743
- name: Comment with bundle-size diff
4844
uses: andresz1/size-limit-action@94bc357df29c36c8f8d50ea497c3e225c3c95d1d # v1.8.0
4945
env:
5046
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5147
with:
52-
package_manager: pnpm
48+
package_manager: npm
5349
script: build
5450
skip_step: install

.github/workflows/apps-ui-release.yml

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,13 @@ jobs:
4444
with:
4545
fetch-depth: 0
4646

47-
- name: Setup pnpm
48-
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
47+
- name: Set up Bun
48+
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
4949
with:
50-
version: 11.1.2
51-
52-
- name: Setup Node
53-
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
54-
with:
55-
node-version-file: apps/ui/.nvmrc
56-
cache: pnpm
57-
cache-dependency-path: apps/ui/pnpm-lock.yaml
50+
bun-version: 1.3.13
5851

5952
- name: Install
60-
run: pnpm install --frozen-lockfile
53+
run: bun install --frozen-lockfile
6154

6255
# Opens or updates a "Version Packages" PR when changesets exist on main.
6356
# On merge of that PR, this same step pushes the version bump + tag and
@@ -67,8 +60,8 @@ jobs:
6760
id: changesets
6861
uses: changesets/action@63a615b9cd06ba9a3e6d13796c7fbcb080a60a0b # v1.8.0
6962
with:
70-
version: pnpm exec changeset version
71-
publish: pnpm exec changeset tag
63+
version: bunx changeset version
64+
publish: bunx changeset tag
7265
createGithubReleases: true
7366
commit: "chore: version packages"
7467
title: "chore: version packages"

.github/workflows/apps-ui-security-deps.yml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ jobs:
5252
set +e
5353
osv-scanner \
5454
--config=apps/ui/osv-scanner.toml \
55-
--lockfile=apps/ui/pnpm-lock.yaml \
55+
--lockfile=apps/ui/bun.lock \
5656
--format=sarif \
5757
--output-file=osv-results.sarif
5858
echo "OSV_EXIT=$?" >> "$GITHUB_ENV"
@@ -73,8 +73,10 @@ jobs:
7373
exit 1
7474
fi
7575
76-
- name: Set up pnpm
77-
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
76+
- name: Set up Bun
77+
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
78+
with:
79+
bun-version: 1.3.13
7880

79-
- name: pnpm audit
80-
run: pnpm audit --audit-level high
81+
- name: bun audit
82+
run: bun audit --audit-level high

.github/workflows/apps-ui-validate.yml

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,44 +27,37 @@ jobs:
2727
- name: Checkout
2828
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2929

30-
- name: Setup pnpm
31-
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
30+
- name: Set up Bun
31+
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
3232
with:
33-
version: 11.1.2
34-
35-
- name: Setup Node
36-
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
37-
with:
38-
node-version-file: apps/ui/.nvmrc
39-
cache: pnpm
40-
cache-dependency-path: apps/ui/pnpm-lock.yaml
33+
bun-version: 1.3.13
4134

4235
- name: Install
43-
run: pnpm install --frozen-lockfile
36+
run: bun install --frozen-lockfile
4437

4538
- name: Dependency audit
46-
run: pnpm audit --audit-level high
39+
run: bun audit --audit-level high
4740

4841
- name: Lint + format + typecheck
49-
run: pnpm check
42+
run: bun run check
5043

5144
- name: Unit + integration tests
52-
run: pnpm test:ci
45+
run: bun run test:ci
5346

5447
- name: Build
55-
run: pnpm build
48+
run: bun run build
5649

5750
- name: Bundle size budget
58-
run: pnpm size:check
51+
run: bun run size:check
5952

6053
- name: Modulepreload size coverage
61-
run: pnpm size:check:modulepreload
54+
run: bun run size:check:modulepreload
6255

6356
- name: Lighthouse CI (a11y + best-practices + SEO + perf budgets)
64-
run: pnpm exec lhci autorun
57+
run: bunx lhci autorun
6558

6659
- name: Build Storybook
67-
run: pnpm build-storybook
60+
run: bun run build-storybook
6861

6962
- name: Upload dist
7063
if: always()

.github/workflows/infra-compose-full-stack-smoke.yml

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -134,19 +134,10 @@ jobs:
134134
exit 1
135135
}
136136
137-
# pnpm 11 requires Node >= 22.13. The runner default is older, so install
138-
# both via the maintained actions instead of `npm install -g pnpm`.
139-
- name: Setup pnpm
140-
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
137+
- name: Set up Bun
138+
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
141139
with:
142-
version: 11.1.2
143-
144-
- name: Setup Node
145-
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
146-
with:
147-
node-version-file: apps/ui/.nvmrc
148-
cache: pnpm
149-
cache-dependency-path: apps/ui/pnpm-lock.yaml
140+
bun-version: 1.3.13
150141

151142
- name: Check UI OpenAPI schema is up to date
152143
working-directory: apps/ui
@@ -155,16 +146,16 @@ jobs:
155146
# apps/ui node_modules from the container, so the host runner can't recreate it.
156147
# Drop root-owned bits before installing as the runner user.
157148
sudo rm -rf node_modules
158-
pnpm install --frozen-lockfile
159-
pnpm generate:api:check
149+
bun install --frozen-lockfile
150+
bun run generate:api:check
160151
161152
- name: Run UI Playwright E2E
162153
working-directory: apps/ui
163154
env:
164155
PLAYWRIGHT_REUSE_SERVER: "true"
165156
run: |
166-
pnpm e2e:install
167-
pnpm e2e:ci
157+
bun run e2e:install
158+
bun run e2e:ci
168159
169160
- name: Smoke — register a brand-new user
170161
run: |

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ coverage/
1313
.dev.vars*
1414
!.dev.vars.example
1515
.pnpm-store/
16+
.bun-install/

0 commit comments

Comments
 (0)