Skip to content

Moved 21 consistent direct deps into the default pnpm catalog#27876

Merged
9larsons merged 1 commit into
mainfrom
deps-catalog-batch-a
May 14, 2026
Merged

Moved 21 consistent direct deps into the default pnpm catalog#27876
9larsons merged 1 commit into
mainfrom
deps-catalog-batch-a

Conversation

@9larsons
Copy link
Copy Markdown
Contributor

@9larsons 9larsons commented May 13, 2026

Summary

Centralizes 21 direct dependencies that were already declared at the exact same version across 4–13 workspaces into the default `catalog:` block in `pnpm-workspace.yaml`. Every consuming `package.json` now references the dep as `"foo": "catalog:"` instead of repeating the version.

Dep Version Workspaces
`typescript` `5.9.3` 8
`jsdom` `28.1.0` 10
`@playwright/test` `1.59.1` 9
`@types/react` `18.3.28` 9
`@types/react-dom` `18.3.7` 7
`@vitejs/plugin-react` `4.7.0` 8
`@tanstack/react-query` `4.36.1` 5
`@typescript-eslint/parser` `8.49.0` 5
`@sentry/react` `7.120.4` 4
`@tryghost/debug` `2.2.0` 7
`c8` `10.1.3` 6
`clsx` `2.1.1` 5
`concurrently` `8.2.2` 5
`eslint-plugin-react-refresh` `0.4.24` 10
`postcss` `8.5.6` 5
`sonner` `2.0.7` 4
`validator` `13.12.0` 5
`vite` `7.3.2` 13
`vitest` `4.1.2` 13
`vite-plugin-svgr` `4.5.0` 9
`zod` `4.1.12` 4

Why

  • Renovate (and humans) bump one entry in `pnpm-workspace.yaml` instead of N package.jsons.
  • Prevents accidental version drift the next time someone manually edits a workspace package.json.
  • Sets the default catalog up as the canonical place for "what version of X do we use" — future cohort-style splits can be modelled on the existing `eslint9` named catalog.

No resolved versions change

Every catalog entry matches the version every consuming workspace already had pinned. Verified before applying that all 21 deps had exactly one distinct version string across all consumers. The `pnpm-lock.yaml` diff is catalog metadata plus a few unrelated transitive de-dupes from regeneration.

Out of scope

  • Drifted deps (`react`, `react-dom`, `@testing-library/react`, `@testing-library/jest-dom`, `tailwindcss`, `@types/node`, `@vitest/coverage-v8`, `glob`, `sinon`, `moment-timezone`, `date-fns`, `knex`, etc.) — need version negotiation or named catalogs first.
  • Intentional splits documented in `CLAUDE.md` (Tailwind v3/v4, React 17/18 cohorts) — left as-is.

@9larsons 9larsons requested a review from EvanHahn as a code owner May 13, 2026 19:15
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 13, 2026

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5b11eb67-f825-4878-b8ac-309dea3df8d8

📥 Commits

Reviewing files that changed from the base of the PR and between 37e7f1e and 0f124f4.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (20)
  • apps/activitypub/package.json
  • apps/admin-x-design-system/package.json
  • apps/admin-x-framework/package.json
  • apps/admin-x-settings/package.json
  • apps/admin/package.json
  • apps/announcement-bar/package.json
  • apps/comments-ui/package.json
  • apps/portal/package.json
  • apps/posts/package.json
  • apps/shade/package.json
  • apps/signup-form/package.json
  • apps/sodo-search/package.json
  • apps/stats/package.json
  • e2e/package.json
  • ghost/admin/package.json
  • ghost/core/package.json
  • ghost/i18n/package.json
  • ghost/parse-email-address/package.json
  • package.json
  • pnpm-workspace.yaml
✅ Files skipped from review due to trivial changes (3)
  • ghost/admin/package.json
  • ghost/i18n/package.json
  • ghost/parse-email-address/package.json
🚧 Files skipped from review as they are similar to previous changes (17)
  • e2e/package.json
  • apps/stats/package.json
  • apps/posts/package.json
  • ghost/core/package.json
  • package.json
  • apps/portal/package.json
  • pnpm-workspace.yaml
  • apps/shade/package.json
  • apps/activitypub/package.json
  • apps/announcement-bar/package.json
  • apps/signup-form/package.json
  • apps/admin-x-design-system/package.json
  • apps/admin-x-settings/package.json
  • apps/sodo-search/package.json
  • apps/comments-ui/package.json
  • apps/admin/package.json
  • apps/admin-x-framework/package.json

Walkthrough

This PR adds a pnpm workspace catalog in pnpm-workspace.yaml and updates many package.json files across apps and Ghost packages to use catalog: version specifiers instead of hardcoded semver strings. It also increments apps/activitypub version to 3.1.20. Root and e2e manifests are updated to reference catalog: for shared tooling (Playwright, TypeScript).

Possibly related PRs

  • TryGhost/Ghost#27879: Updates packing logic to use pnpm pack so catalog/workspace protocol dependencies are handled when creating tarballs.
  • TryGhost/Ghost#27880: Reads Playwright version from installed modules for e2e scripts; related because e2e package.json now uses catalog:.
  • TryGhost/Ghost#27870: CI publish step changes to use pnpm publish so catalog: refs are rewritten before publishing.

Suggested reviewers

  • EvanHahn
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main change: moving 21 consistent dependencies into the default pnpm catalog.
Description check ✅ Passed The description is comprehensive and directly related to the changeset, detailing the 21 dependencies being centralized, their versions, workspaces affected, rationale, and scope limitations.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch deps-catalog-batch-a

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 13, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 73.81%. Comparing base (676f91b) to head (0f124f4).

Additional details and impacted files
@@           Coverage Diff           @@
##             main   #27876   +/-   ##
=======================================
  Coverage   73.81%   73.81%           
=======================================
  Files        1519     1519           
  Lines      128185   128185           
  Branches    15355    15352    -3     
=======================================
+ Hits        94621    94624    +3     
+ Misses      32610    32607    -3     
  Partials      954      954           
Flag Coverage Δ
admin-tests 53.46% <ø> (ø)
e2e-tests 73.81% <ø> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@9larsons 9larsons force-pushed the deps-catalog-batch-a branch from 1959a1c to 68de7eb Compare May 13, 2026 19:53
@9larsons 9larsons changed the title Moved 18 consistent direct deps into the default pnpm catalog Moved 21 consistent direct deps to the pnpm catalog + fixed component pack May 13, 2026
@9larsons 9larsons changed the title Moved 21 consistent direct deps to the pnpm catalog + fixed component pack Moved direct deps to the pnpm catalog May 13, 2026
@9larsons 9larsons marked this pull request as draft May 13, 2026 20:29
@9larsons 9larsons force-pushed the deps-catalog-batch-a branch from 86279b0 to 37e7f1e Compare May 13, 2026 21:39
@9larsons 9larsons changed the title Moved direct deps to the pnpm catalog Moved 21 consistent direct deps into the default pnpm catalog May 13, 2026
@9larsons 9larsons marked this pull request as ready for review May 13, 2026 21:40
- 21 deps were declared at the exact same version across 4-13 workspaces (typescript, jsdom, @playwright/test, @types/react, @types/react-dom, @vitejs/plugin-react, @tanstack/react-query, @typescript-eslint/parser, @sentry/react, @tryghost/debug, c8, clsx, concurrently, eslint-plugin-react-refresh, postcss, sonner, validator, zod, vite, vitest, vite-plugin-svgr) — pure centralization candidates
- centralizing in pnpm-workspace.yaml means Renovate (and humans) bump one entry per dep instead of N package.jsons, and prevents future accidental drift
- no resolved version changes: every catalog entry matches the version every consuming workspace already had pinned; lockfile diff is only catalog metadata + a few unrelated transitive dedupes
- excluded drifted deps (react, tailwindcss, @testing-library/*, @types/node, @vitest/coverage-v8, glob, sinon, etc.) which need version negotiation or model intentional splits like the existing eslint9 named catalog — those land separately
@9larsons 9larsons force-pushed the deps-catalog-batch-a branch from 37e7f1e to 0f124f4 Compare May 13, 2026 22:50
@9larsons 9larsons merged commit 9afbdc2 into main May 14, 2026
45 checks passed
@9larsons 9larsons deleted the deps-catalog-batch-a branch May 14, 2026 00:03
9larsons added a commit that referenced this pull request May 14, 2026
no ref 

Adds 29 dependencies to the default \`catalog:\` block in
\`pnpm-workspace.yaml\`, following the precedent set by #27876.
Selection criterion: deps that are either **base-level functionality**
(test runners, routing, build/config helpers) or in the **@TryGhost
first-party namespace** (alignment matters more for in-house packages).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant