Repository navigation
Migrate package manager from Yarn to pnpm - #143
Merged
Merged
Conversation
Switch the monorepo from Yarn (classic) to pnpm and modernize CI. Package manager and workspace: - Add `packageManager: pnpm@11.21.0` and `engines.node >=24` (the repo previously pinned neither; CI ran on Node `^20.18.0`, so this also raises the Node floor to 24). - Replace the root `workspaces` array with `pnpm-workspace.yaml`; the members (query-graphs, standalone-app, upload-server) are unchanged. plan-dumper is a Python tool and is intentionally not a workspace member. - Point standalone-app at the core library via `workspace:^`. - Remove `yarn.lock` and regenerate `pnpm-lock.yaml`; this bumped all dependency versions to the latest version within the declared ranges. - Add `.pnpm-store` to `.gitignore`. Declare missing dependencies that Yarn's hoisting had masked (pnpm's isolated node_modules surfaces them as errors): - root: `@eslint/js` and `globals` (imported by the ESLint flat config). - query-graphs: `@types/react` and `@types/react-dom` (needed for the library's declaration emit; otherwise `tsc` fails with TS2742 under pnpm's non-hoisted layout). CI (.github/workflows/ci.yaml): - Replace the manual yarn cache (`actions/cache` plus the deprecated `::set-output` dance) with `pnpm/action-setup` and setup-node's `cache: 'pnpm'`; pin `node-version: 24`. - Install with `pnpm install --frozen-lockfile`; build all modules with a single `pnpm -r build`, which pnpm runs in workspace-dependency order (query-graphs before standalone-app), replacing the two per-module build steps. - Bump peaceiris/actions-gh-pages v3 -> v4. Other: - Fix the query-graphs `clean` script: it ran `rimraf dist/`, but the `tsc` outDir is `lib/`, so it never removed the build output or the incremental `tsconfig.tsbuildinfo`. Point it at `lib/` and the buildinfo so a clean actually forces a fresh `tsc --build`. - media: give the logo SVG unitless (px) `width`/`height` matching its `viewBox` instead of millimetre units. The freshly-resolved, newer `sharp` (pulled in via `favicons`) rasterizes mm-unit SVGs at a size that grows quadratically with the requested density, overshooting sharp's input-pixel limit on the large iOS `appleStartup` splash images and failing the build. Unitless dimensions scale linearly and render identically (the app sizes the logo via CSS). - Reformat one line in postgres.ts (flagged by newer Prettier). - Update the developer docs and agent guide to reference pnpm.
vogelsgesang
force-pushed
the
pnpm-migrate
branch
from
August 22, 2026 11:32
5b60726 to
f251e15
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.
Switch the monorepo from Yarn (classic) to pnpm and modernize CI.
Package manager and workspace:
packageManager: pnpm@11.21.0andengines.node >=24(the repo previously pinned neither; CI ran on Node^20.18.0, so this also raises the Node floor to 24).workspacesarray withpnpm-workspace.yaml; the members (query-graphs, standalone-app, upload-server) are unchanged. plan-dumper is a Python tool and is intentionally not a workspace member.workspace:^.yarn.lockand regeneratepnpm-lock.yaml; this bumped all dependency versions to the latest version within the declared ranges..pnpm-storeto.gitignore.Declare missing dependencies that Yarn's hoisting had masked (pnpm's isolated node_modules surfaces them as errors):
@eslint/jsandglobals(imported by the ESLint flat config).@types/reactand@types/react-dom(needed for the library's declaration emit; otherwisetscfails with TS2742 under pnpm's non-hoisted layout).CI (.github/workflows/ci.yaml):
actions/cacheplus the deprecated::set-outputdance) withpnpm/action-setupand setup-node'scache: 'pnpm'; pinnode-version: 24.pnpm install --frozen-lockfile; build all modules with a singlepnpm -r build, which pnpm runs in workspace-dependency order (query-graphs before standalone-app), replacing the two per-module build steps.Other:
cleanscript: it ranrimraf dist/, but thetscoutDir islib/, so it never removed the build output or the incrementaltsconfig.tsbuildinfo. Point it atlib/and the buildinfo so a clean actually forces a freshtsc --build.width/heightmatching itsviewBoxinstead of millimetre units. The freshly-resolved, newersharp(pulled in viafavicons) rasterizes mm-unit SVGs at a size that grows quadratically with the requested density, overshooting sharp's input-pixel limit on the large iOSappleStartupsplash images and failing the build. Unitless dimensions scale linearly and render identically (the app sizes the logo via CSS).