Skip to content

build(deps): switch package manager to pnpm - #1621

Merged
FelixTJDietrich merged 3 commits into
mainfrom
1598-build-dependency-package-switch
Aug 30, 2026
Merged

build(deps): switch package manager to pnpm#1621
FelixTJDietrich merged 3 commits into
mainfrom
1598-build-dependency-package-switch

Conversation

@FelixTJDietrich

@FelixTJDietrich FelixTJDietrich commented Aug 29, 2026

Copy link
Copy Markdown
Collaborator

Description

Replaces Bun with exact-pinned pnpm 12 across the repository so Node.js 24 is the only JavaScript runtime and pnpm is the only package manager. This is an atomic toolchain migration: it adds the pnpm workspace and lockfile, moves install policy to native pnpm configuration, updates CI, Docker, hooks, scripts, contributor documentation, and removes the obsolete Bun lockfile qualification pipeline.

The migration also adds a terminal repository policy check that rejects Bun artifacts and commands outside immutable historical records. ADR 0037 records the Node.js 24 and pnpm 12 decision and supersedes ADR 0033.

Notable implementation details

  • Pins pnpm 12.0.0 and Node.js 24.19.0 through packageManager and devEngines.
  • Uses minimumReleaseAge: 4320 and an explicit allowBuilds map instead of the custom lockfile qualifier.
  • Installs the CI toolchain without Corepack through the shared, SHA-pinned pnpm/setup composite, which installs the self-contained pnpm binary and pinned Node.js runtime with pnpm-store caching.
  • Builds the webapp from the digest-pinned official pnpm image with pnpm fetch, an offline frozen install, and a BuildKit store cache.
  • Keeps peer dependency mismatches visible rather than globally suppressing them. The currently reported Docusaurus layout-helper and Vite plugin ranges are upstream metadata warnings; builds and tests pass.
  • Adds a patch changeset. No operator action is required.

Fixes #1598

How to test

Validated locally:

pnpm install --frozen-lockfile
pnpm run format
pnpm run check
pnpm run verify
pnpm run build:webapp

Also verified that git grep -iw bun is clean outside historical ADR/changelog files and that the isolated live-test SDK install uses --ignore-workspace rather than attaching to the root workspace.

The local host provides Node.js 24.15.0, while this PR intentionally requires 24.19.0. The checks above ran with pnpm's local runtime-version check bypassed; check:package-manager still validated the committed 24.19.0 pin, and CI installs that exact version through the shared setup action.

The full BuildKit Docker build remains CI-owned because the local Docker installation does not include buildx. The digest-pinned pnpm builder was exercised separately and installed Node.js 24.19.0 successfully, and the webapp production build passes with the final dependency graph.

Checklist

  • My changeset summary reads as an operator/user-facing note (it becomes the changelog entry) — see .changeset/README.md
  • No operator action is required; MIGRATION.md does not need an update

@FelixTJDietrich
FelixTJDietrich requested a review from a team as a code owner August 29, 2026 22:46
@coderabbitai

coderabbitai Bot commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 115 files, which is 15 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 96df1989-1011-4eed-9bc5-998dbfde604e

📥 Commits

Reviewing files that changed from the base of the PR and between f1af35a and 0c6e1fb.

⛔ Files ignored due to path filters (2)
  • bun.lock is excluded by !**/*.lock
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (115)
  • .agents/skills/fix-ci/SKILL.md
  • .agents/skills/land-pr/SKILL.md
  • .changeset/README.md
  • .changeset/clean-pnpm-toolchain.md
  • .claude/skills/fix-ci/SKILL.md
  • .claude/skills/land-pr/SKILL.md
  • .claude/skills/react-best-practices/AGENTS.md
  • .claude/skills/react-best-practices/rules/rendering-svg-precision.md
  • .claude/skills/storybook-components/RUBRIC.md
  • .claude/skills/storybook-components/SKILL.md
  • .claude/skills/storybook-components/traps.md
  • .github/PULL_REQUEST_TEMPLATE.md
  • .github/actions/setup-bun/action.yml
  • .github/actions/setup-caches/action.yml
  • .github/actions/setup-node-pnpm/action.yml
  • .github/labeler.yml
  • .github/scripts/label-pr.ts
  • .github/workflows/cd-docs-teardown.yml
  • .github/workflows/cd-docs.yml
  • .github/workflows/ci-compose-validate.yml
  • .github/workflows/ci-profile.yml
  • .github/workflows/ci-quality-gates.yml
  • .github/workflows/ci-tests.yml
  • .github/workflows/cicd.yml
  • .github/workflows/cleanup-preview.yml
  • .github/workflows/deploy-locked-compose.yml
  • .github/workflows/deploy-preview.yml
  • .github/workflows/openapi-autocommit.yml
  • .github/workflows/pull-request.yml
  • .github/workflows/qualify-bun-lockfile.yml
  • .github/workflows/reconcile-previews.yml
  • .github/workflows/release-upgrade.yml
  • .github/workflows/release.yml
  • .github/workflows/rescan-release-images.yml
  • .github/workflows/security-mutation.yml
  • .github/workflows/verify-changesets.yml
  • .github/workflows/version-pr.yml
  • .husky/commit-msg
  • .husky/pre-push
  • .oxlintrc.json
  • AGENTS.md
  • CONTRIBUTING.md
  • INSTALL.md
  • bunfig.toml
  • docker/agents/pi/Dockerfile
  • docs/.markdownlint-cli2.jsonc
  • docs/README.md
  • docs/admin/production-setup.mdx
  • docs/admin/runtime-roles.mdx
  • docs/contributor/accessibility-audit-plan.md
  • docs/contributor/agent/workspace-abi.mdx
  • docs/contributor/ai-agent-workflow.mdx
  • docs/contributor/ci-cd.mdx
  • docs/contributor/coding-guidelines.mdx
  • docs/contributor/database-migration.mdx
  • docs/contributor/database-schema.mdx
  • docs/contributor/e2e-testing.md
  • docs/contributor/erd/schema.mmd
  • docs/contributor/local-development.mdx
  • docs/contributor/local-verification.mdx
  • docs/contributor/release-management.mdx
  • docs/contributor/security-mutation-testing.md
  • docs/contributor/sync-lifecycle.md
  • docs/contributor/testing.mdx
  • docs/decisions/0037-node-24-and-pnpm-12-are-the-javascript-toolchain.md
  • docs/decisions/README.md
  • docs/package.json
  • load-tests/README.md
  • mprocs.yaml
  • package.json
  • pnpm-workspace.yaml
  • renovate.json
  • scripts/README.md
  • scripts/check-affected.test.ts
  • scripts/check-affected.ts
  • scripts/check-agent-instructions.ts
  • scripts/check-agent-runtime-pins.ts
  • scripts/check-env-roles.ts
  • scripts/check-package-manager.ts
  • scripts/ci-contract.test.ts
  • scripts/db-utils.ts
  • scripts/generate-mermaid-erd.ts
  • scripts/jean-public-test.ts
  • scripts/jean-setup.ts
  • scripts/preview-controller.test.ts
  • scripts/qualify-bun-lockfile.ts
  • scripts/tooling-orchestration.test.ts
  • scripts/tsconfig.json
  • scripts/update-gitlab-schema.ts
  • scripts/verify-webapp-build.ts
  • server/AGENTS.md
  • server/application/src/main/java/de/tum/cit/aet/hephaestus/feature/FeatureFlag.java
  • server/application/src/main/java/de/tum/cit/aet/hephaestus/practices/dto/CreatePracticeRequestDTO.java
  • server/application/src/main/java/de/tum/cit/aet/hephaestus/practices/dto/PracticeDTO.java
  • server/application/src/main/java/de/tum/cit/aet/hephaestus/practices/dto/UpdatePracticeRequestDTO.java
  • server/application/src/main/java/de/tum/cit/aet/hephaestus/practices/model/Practice.java
  • server/application/src/main/resources/agent/pi-runner-usage.ts
  • server/application/src/main/resources/practices/default-catalog.json
  • server/application/src/main/resources/practices/precompute/changes-dependencies-deliberately.ts
  • server/application/src/test/java/de/tum/cit/aet/hephaestus/agent/mentor/live/MentorLiveLlmTest.java
  • server/application/src/test/java/de/tum/cit/aet/hephaestus/agent/mentor/live/MentorSandboxStressTest.java
  • server/application/src/test/java/de/tum/cit/aet/hephaestus/agent/practice/live/PracticeRunnerLiveLlmTest.java
  • server/compose.yaml
  • server/openapi.yaml
  • tsconfig.json
  • webapp/.oxlintrc.json
  • webapp/AGENTS.md
  • webapp/Dockerfile
  • webapp/README.md
  • webapp/e2e/README.md
  • webapp/package.json
  • webapp/playwright.config.ts
  • webapp/scripts/export-readme-assets.ts
  • webapp/src/api/types.gen.ts
  • webapp/vitest.config.storybook.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


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.

@FelixTJDietrich
FelixTJDietrich force-pushed the 1598-build-dependency-package-switch branch from af7c7ad to 6b2969a Compare August 29, 2026 22:53
@github-actions github-actions Bot added documentation Improvements or additions to documentation application-server Spring Boot server: APIs, business logic, database security Authentication, authorization, vulnerability fixes maintenance Chores, cleanup, non-functional improvements ci GitHub Actions, workflows, build pipeline changes infrastructure Docker, containers, and deployment infrastructure dependencies Package updates, version bumps, lock file changes webapp React app: UI components, routes, state management size:XXL This PR changes 1000+ lines, ignoring generated files. labels Aug 29, 2026
@github-actions

github-actions Bot commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

📚 Documentation Preview

Preview has been removed (PR closed)

@github-actions

github-actions Bot commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

🧩 Storybook Preview

Preview has been removed (PR closed)

@FelixTJDietrich
FelixTJDietrich force-pushed the 1598-build-dependency-package-switch branch 3 times, most recently from 7bd38b1 to 03bf35f Compare August 29, 2026 23:34
FelixTJDietrich and others added 2 commits August 30, 2026 02:22
check:affected's full-gate list carried two placeholder filenames that exist
nowhere, leaving pnpm-lock.yaml, pnpm-workspace.yaml, and patches/ covered only
by the unknown-input fail-closed branch. Name them explicitly and cover them in
the fail-closed test. Point the preview-controller control-plane test at the
setup composite that actually exists, and record in pnpm-workspace.yaml why the
router-plugin unplugin override pins 3.0.0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@FelixTJDietrich
FelixTJDietrich force-pushed the 1598-build-dependency-package-switch branch from dac2ebf to 13b3d7f Compare August 30, 2026 00:24
The server-contracts and webapp-e2e legs pull the Postgres image tagged with
the PR's base commit, but that tag is published by the base commit's own main
run — a PR whose base advanced minutes earlier races it and fails with
'manifest unknown'. Fall back to building the identical docker/postgres
Dockerfile when the pull misses.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@FelixTJDietrich
FelixTJDietrich merged commit 821dba1 into main Aug 30, 2026
42 checks passed
@FelixTJDietrich
FelixTJDietrich deleted the 1598-build-dependency-package-switch branch August 30, 2026 00:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

application-server Spring Boot server: APIs, business logic, database ci GitHub Actions, workflows, build pipeline changes dependencies Package updates, version bumps, lock file changes documentation Improvements or additions to documentation infrastructure Docker, containers, and deployment infrastructure maintenance Chores, cleanup, non-functional improvements security Authentication, authorization, vulnerability fixes size:XXL This PR changes 1000+ lines, ignoring generated files. webapp React app: UI components, routes, state management

Projects

None yet

Development

Successfully merging this pull request may close these issues.

build(deps): switch the package manager from Bun to pnpm

1 participant