chore: migrate to pnpm and enable minimum release age#3581
Merged
Conversation
Port the pnpm migration from master to v4. Adaptations for v4: - Node matrix [22, 24] (v4 already dropped 18, 20) - oxlint/oxfmt (v4's linter, not eslint/biome) - publish dist-tag 'v4' instead of 'next' - No @apify/eslint-config override needed - No devEngines (uses only-allow in preinstall instead) Internal deps use workspace:* (deps) and workspace:^ (peerDeps) pattern. docs and website are workspace members. CI uses the shared apify/workflows/pnpm-install@main action everywhere.
- build/ci:build/clean/prepublishOnly now use --filter=./packages/* so website (docusaurus) isn't included in the package build - revert docusaurus future.faster rename (v4 is on 3.9.2 where the key is still experimental_faster) - pin @docusaurus/theme-mermaid to 3.9.2 (caret resolved to 3.10.0 which docusaurus rejects due to version mismatch with core)
Docs has examples importing these packages but they weren't listed as workspace deps.
The robots test uses nock with .persist().delay(500) while the timeout/abort tests expect rejection at 200ms. After the test ends and nock.cleanAll() runs, the 500ms delay still fires, tries to respond to an already-handled request, and throws InterceptorError. Vitest 4 surfaces this as an unhandled async error and fails the run. Call nock.abortPendingRequests() before cleanAll() to clear the pending timer.
…to website Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
lint-staged was running oxfmt on every staged .js/.ts file regardless of location, reformatting files in website/ that the top-level format/lint scripts intentionally skip. Scope the hook to packages/test/docs to match that intent, and revert the accidental reformatting of website/docusaurus.config.js to a minimal diff (just the exclude node_modules entry). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
janbuchar
approved these changes
Apr 20, 2026
vladfrangu
reviewed
Apr 20, 2026
- Drop scripts/cleanup-nested-readmes.mjs + its postinstall hook. With nodeLinker=hoisted and publicHoistPattern='*' the Docusaurus typedoc plugin no longer trips over nested package READMEs. Verified locally that a full `pnpm run build` in website/ succeeds with those READMEs still in place. - Simplify website build/deploy to `NODE_OPTIONS=... docusaurus <cmd>` instead of resolving core/bin/docusaurus.mjs by path. The docusaurus binary is already in PATH via pnpm's node_modules/.bin. Addresses review comments on #3581. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
vladfrangu
approved these changes
Apr 20, 2026
v4 no longer pins cheerio to an RC; we track latest. Drop the ignore entry that was inadvertently carried over from master. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Member
Author
|
Good points, it wasn't needed in the end. Let's see how this works, merging once the CI is green. |
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.
Summary
Port the pnpm migration from master (#3568) to the v4 branch. Same goals:
minimumReleaseAge: 1440supply-chain guard at both pnpm and Renovate layers@apify/*,@crawlee/*,apify-client,apify,crawlee,got-scrapingwhitelistedonly-allow pnpmpreinstall hook blocks npm/yarn usageapify/workflows/pnpm-install@mainaction in all CI workflowsv4-specific adaptations
[22, 24](v4 already dropped 18, 20)v4instead ofnextworkspace:*for regular deps,workspace:^for peerDepsIncidentally fixed
Four packages were missing explicit
@crawlee/*deps that yarn's hoisting masked:@crawlee/http→@crawlee/core@crawlee/linkedom→@crawlee/utils@crawlee/playwright→@crawlee/basic@crawlee/puppeteer→@crawlee/core🤖 Generated with Claude Code