Skip to content

chore: move to pnpm from yarn#1068

Draft
vladfrangu wants to merge 10 commits intomasterfrom
chore/pnpm
Draft

chore: move to pnpm from yarn#1068
vladfrangu wants to merge 10 commits intomasterfrom
chore/pnpm

Conversation

@vladfrangu
Copy link
Copy Markdown
Member

@vladfrangu vladfrangu commented Apr 1, 2026

  • moved to pnpm from yarn
  • fix eslint configs for website
  • setup renovate and pnpm minimum release age of 1 day

@vladfrangu vladfrangu requested a review from B4nan April 1, 2026 21:33
@vladfrangu vladfrangu added the adhoc Ad-hoc unplanned task added during the sprint. label Apr 1, 2026
@github-actions github-actions bot added this to the 137th sprint - Tooling team milestone Apr 1, 2026
@github-actions github-actions bot added the t-tooling Issues with this label are in the ownership of the tooling team. label Apr 1, 2026
@github-actions github-actions bot added the tested Temporary label used only programatically for some analytics. label Apr 8, 2026
@vladfrangu vladfrangu changed the title chore: pnpm attempt chore: move to pnpm from yarn Apr 9, 2026
Something somewhere broke importing stripAnsi on node 20 in vitest???
B4nan added a commit to apify/apify-shared-js that referenced this pull request Apr 14, 2026
Adopts the caching pattern from apify/apify-cli#1068: a reusable
composite action at .github/actions/pnpm-install that handles pnpm
setup, pnpm store caching (keyed by year-month + lockfile hash),
and the install. Workflows now delegate their install step to
`uses: ./.github/actions/pnpm-install` instead of inlining each
piece. setup-node remains in workflows (without the cache: pnpm
parameter, since caching is handled inside the composite).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
B4nan added a commit to apify/apify-shared-js that referenced this pull request Apr 14, 2026
Adopts the caching pattern from apify/apify-cli#1068: a reusable
composite action at .github/actions/pnpm-install that handles pnpm
setup, pnpm store caching (keyed by year-month + lockfile hash),
and the install. Workflows now delegate their install step to
`uses: ./.github/actions/pnpm-install` instead of inlining each
piece. setup-node remains in workflows (without the cache: pnpm
parameter, since caching is handled inside the composite).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
B4nan added a commit to apify/actor-scraper that referenced this pull request Apr 14, 2026
Migrates actor-scraper from npm workspaces to pnpm workspaces and
adds a 1-day minimum release age supply-chain guard at the package
manager layer (pnpm-workspace.yaml) and at the Renovate layer.
Internal `@apify/*` and `@crawlee/*` packages are whitelisted at
both layers for immediate updates.

Notable changes:
- package.json: drop "workspaces" (moved to pnpm-workspace.yaml);
  set packageManager to pnpm@10.24.0; add @isaacs/brace-expansion
  as explicit root devDep (pnpm 10 doesn't pull it transitively
  for minimatch@10 which actor-scraper-sitemap depends on)
- lerna.json: npmClient: "pnpm"
- .npmrc: node-linker=hoisted + link-workspace-packages=true +
  prefer-workspace-packages=true (flat layout for debugging +
  prefer workspace packages over registry)
- packages/actor-scraper/*/package.json: use "workspace:*" protocol
  for @apify/scraper-tools so pnpm links the workspace copy instead
  of fetching the identical version from npm (required for consistent
  peer-dep resolution across workspace and registry types)
- packages/scraper-tools/src/browser_tools.ts: relax Page interface
  exposeFunction return type from Promise<void> to Promise<unknown>
  so it accepts both Puppeteer (Promise<void>) and newer Playwright
  (Promise<Disposable>) page types. Return value is unused.
- New .github/actions/pnpm-install composite action adopts the
  caching pattern from apify/apify-cli#1068 (pnpm store cache
  keyed by year-month + lockfile hash)
- CI workflows: delegate install to the composite; drop the
  separate npm cache config on setup-node
- renovate.json: minimumReleaseAge "1 day", internalChecksFilter
  "strict", @apify/* and @crawlee/* whitelist; drop npm constraint

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
B4nan added a commit to apify/got-scraping that referenced this pull request Apr 14, 2026
Migrates got-scraping from npm to pnpm and adds a 1-day minimum
release age supply-chain guard at the package-manager layer
(pnpm-workspace.yaml) and at the Renovate layer. Internal
`@apify/*` and `@crawlee/*` packages are whitelisted at both layers.

This repo previously had no Renovate config; a standard config is
added now.

Notable changes:
- package.json: set packageManager to pnpm@10.24.0; bump engines
  node >=18 (was >=16; pnpm 10 needs Node 18+); "npm run" -> "pnpm"
  in scripts
- pnpm-workspace.yaml: non-monorepo minimumReleaseAge settings only
- .npmrc: node-linker=hoisted + link-workspace-packages=true +
  prefer-workspace-packages=true + public-hoist-pattern[]=*
  (last one ensures transitive types are visible to tsc like they
  were under npm's hoisted layout)
- tsconfig.json: skipLibCheck: true (standard, suppresses
  ow/quick-lru d.ts incompatibilities with TS 5.9 lib types)
- src/agent/wrapped-agent.ts + src/index.ts: two small casts to
  satisfy stricter type resolution under pnpm (npm happened to
  hide these mismatches via different node_modules layout; the
  same code paths at runtime)
- New .github/actions/pnpm-install composite action (cached pnpm
  store, year-month + lockfile hash key — pattern from apify/apify-cli#1068)
- CI workflows (check.yml, release.yaml, publish-to-npm.yaml):
  delegate install to the composite; use pnpm/pnpm publish --no-git-checks;
  Node matrix 18/20/22/24
- New renovate.json with minimumReleaseAge "1 day",
  internalChecksFilter "strict", and @apify/* + @crawlee/* whitelist

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
B4nan added a commit to apify/apify-client-js that referenced this pull request Apr 14, 2026
Migrates apify-client-js from npm workspaces to pnpm workspaces and
adds a 1-day minimum release age supply-chain guard at the package
manager layer (pnpm-workspace.yaml) and at the Renovate layer.
Internal `@apify/*` and `@crawlee/*` packages are whitelisted at
both layers.

The website/ directory becomes a proper workspace (previously had
its own lockfile). Single root lockfile now.

Notable changes:
- package.json: set packageManager to pnpm@10.24.0; "npm run X"
  -> "pnpm X" in scripts
- pnpm-workspace.yaml: packages [website], release-age settings
- .npmrc: node-linker=hoisted, link-workspace-packages=true,
  prefer-workspace-packages=true, public-hoist-pattern[]=*
  (kept the pre-existing legacy-peer-deps=true)
- website/package.json: add "name": "apify-client-website" so pnpm
  recognises it as a workspace; "npm run" -> "pnpm" in scripts
- website/docusaurus.config.js: rename future.experimental_faster
  -> future.faster (renamed in Docusaurus 3.10, which is what pnpm
  resolves from the ^3.8.1 range; npm previously resolved 3.9.x
  via --force)
- New .github/actions/pnpm-install composite action (cached pnpm
  store, keyed by year-month + lockfile hash — pattern from
  apify/apify-cli#1068)
- All 5 CI workflows (check, docs, publish_to_npm, release,
  pre_release) use the composite; npm/npx/`npm version` -> pnpm
  equivalents. docs workflow's `npm update @apify/docs-theme`
  becomes `pnpm --filter apify-client-website update @apify/docs-theme`.
  publish uses `pnpm publish --tag X --no-git-checks`.
- renovate.json: add minimumReleaseAge "1 day",
  internalChecksFilter "strict", @apify/* + @crawlee/* whitelist;
  drop old npm constraint
- Both package-lock.json files deleted; single pnpm-lock.yaml

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
B4nan added a commit to apify/crawlee that referenced this pull request Apr 14, 2026
Migrates crawlee from Yarn 4 to pnpm workspaces across the 20-package
monorepo, plus docs/ and website/ workspaces. Adds a 1-day minimum
release age supply-chain guard at the package manager layer
(pnpm-workspace.yaml) and at the Renovate layer. Internal
`@apify/*` and `@crawlee/*` packages are whitelisted at both layers.

Notable changes:
- package.json: drop "workspaces", set packageManager to pnpm@10.24.0;
  "yarn X" -> "pnpm X" in scripts
- lerna.json: npmClient "yarn" -> "pnpm"
- .npmrc: node-linker=hoisted + link-workspace-packages=true +
  prefer-workspace-packages=true + public-hoist-pattern[]=*
- pnpm-workspace.yaml: packages [packages/*, website, docs], min
  release age 1440, @apify/* + @crawlee/* excluded, plus pinned
  overrides for playwright-core and @browserbasehq/stagehand
- All 20 packages/*/package.json: yarn -> pnpm in scripts; internal
  @crawlee/* deps converted to "workspace:*"
- Deleted yarn.lock, .yarnrc.yml, docs/yarn.lock, website/yarn.lock;
  generated pnpm-lock.yaml
- .husky/pre-commit: yarn -> pnpm
- New .github/actions/pnpm-install composite action (cached pnpm
  store, pattern from apify/apify-cli#1068)
- CI workflows (docs, publish-to-npm, release, test-ci, test-e2e):
  delegate install to composite; yarn/corepack removed;
  yarn -> pnpm; pnpm publish --no-git-checks
- renovate.json: add @apify/* + @crawlee/* whitelist; drop "yarn"
  from ignoreDeps and old npm constraint. minimumReleaseAge
  and internalChecksFilter were already in place.

WIP / known local issue: @crawlee/types build currently fails in
gen-esm-wrapper (dist resolution), needs small follow-up fix. CI
will likely surface additional peer-dep / type-resolution issues
typical of a large yarn->pnpm swap.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
B4nan added a commit to apify/crawlee-python that referenced this pull request Apr 14, 2026
Migrates the website/ subdirectory from Yarn 4 to pnpm. The Python
root (uv) is untouched. Adds @apify/* + @crawlee/* whitelist at the
Renovate layer (minimumReleaseAge was already present in renovate.json).

- website/package.json: rename to crawlee-python-website + private: true,
  packageManager -> pnpm@10.24.0, yarn/npx -> pnpm
- website/pnpm-workspace.yaml: minimumReleaseAge 1440 with @apify/* +
  @crawlee/* excluded
- website/.npmrc: hoisted linker + workspace linking flags
- website/docusaurus.config.js: rename future.experimental_faster ->
  future.faster (Docusaurus 3.10 renamed the key)
- Delete website/yarn.lock and website/.yarnrc.yml
- pyproject.toml poe tasks build-docs/run-docs: drop corepack + yarn,
  use pnpm install --frozen-lockfile + pnpm build/start
- New .github/actions/pnpm-install composite action (pattern from
  apify/apify-cli#1068)
- manual_release_stable.yaml version_docs job: pnpm/action-setup +
  pnpm install --frozen-lockfile instead of corepack + yarn;
  npx docusaurus -> pnpm exec docusaurus; commit pnpm-lock.yaml
- renovate.json: add internalChecksFilter "strict" and @apify/* +
  @crawlee/* whitelist (minimumReleaseAge "1 day" was already set)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
B4nan added a commit to apify/apify-shared-js that referenced this pull request Apr 15, 2026
Adopts the caching pattern from apify/apify-cli#1068: a reusable
composite action at .github/actions/pnpm-install that handles pnpm
setup, pnpm store caching (keyed by year-month + lockfile hash),
and the install. Workflows now delegate their install step to
`uses: ./.github/actions/pnpm-install` instead of inlining each
piece. setup-node remains in workflows (without the cache: pnpm
parameter, since caching is handled inside the composite).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
B4nan added a commit to apify/actor-scraper that referenced this pull request Apr 15, 2026
Migrates actor-scraper from npm workspaces to pnpm workspaces and
adds a 1-day minimum release age supply-chain guard at the package
manager layer (pnpm-workspace.yaml) and at the Renovate layer.
Internal `@apify/*` and `@crawlee/*` packages are whitelisted at
both layers for immediate updates.

Notable changes:
- package.json: drop "workspaces" (moved to pnpm-workspace.yaml);
  set packageManager to pnpm@10.24.0; add @isaacs/brace-expansion
  as explicit root devDep (pnpm 10 doesn't pull it transitively
  for minimatch@10 which actor-scraper-sitemap depends on)
- lerna.json: npmClient: "pnpm"
- .npmrc: node-linker=hoisted + link-workspace-packages=true +
  prefer-workspace-packages=true (flat layout for debugging +
  prefer workspace packages over registry)
- packages/actor-scraper/*/package.json: use "workspace:*" protocol
  for @apify/scraper-tools so pnpm links the workspace copy instead
  of fetching the identical version from npm (required for consistent
  peer-dep resolution across workspace and registry types)
- packages/scraper-tools/src/browser_tools.ts: relax Page interface
  exposeFunction return type from Promise<void> to Promise<unknown>
  so it accepts both Puppeteer (Promise<void>) and newer Playwright
  (Promise<Disposable>) page types. Return value is unused.
- New .github/actions/pnpm-install composite action adopts the
  caching pattern from apify/apify-cli#1068 (pnpm store cache
  keyed by year-month + lockfile hash)
- CI workflows: delegate install to the composite; drop the
  separate npm cache config on setup-node
- renovate.json: minimumReleaseAge "1 day", internalChecksFilter
  "strict", @apify/* and @crawlee/* whitelist; drop npm constraint

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
B4nan added a commit to apify/apify-client-js that referenced this pull request Apr 15, 2026
Migrates apify-client-js from npm workspaces to pnpm workspaces and
adds a 1-day minimum release age supply-chain guard at the package
manager layer (pnpm-workspace.yaml) and at the Renovate layer.
Internal `@apify/*` and `@crawlee/*` packages are whitelisted at
both layers.

The website/ directory becomes a proper workspace (previously had
its own lockfile). Single root lockfile now.

Notable changes:
- package.json: set packageManager to pnpm@10.24.0; "npm run X"
  -> "pnpm X" in scripts
- pnpm-workspace.yaml: packages [website], release-age settings
- .npmrc: node-linker=hoisted, link-workspace-packages=true,
  prefer-workspace-packages=true, public-hoist-pattern[]=*
  (kept the pre-existing legacy-peer-deps=true)
- website/package.json: add "name": "apify-client-website" so pnpm
  recognises it as a workspace; "npm run" -> "pnpm" in scripts
- website/docusaurus.config.js: rename future.experimental_faster
  -> future.faster (renamed in Docusaurus 3.10, which is what pnpm
  resolves from the ^3.8.1 range; npm previously resolved 3.9.x
  via --force)
- New .github/actions/pnpm-install composite action (cached pnpm
  store, keyed by year-month + lockfile hash — pattern from
  apify/apify-cli#1068)
- All 5 CI workflows (check, docs, publish_to_npm, release,
  pre_release) use the composite; npm/npx/`npm version` -> pnpm
  equivalents. docs workflow's `npm update @apify/docs-theme`
  becomes `pnpm --filter apify-client-website update @apify/docs-theme`.
  publish uses `pnpm publish --tag X --no-git-checks`.
- renovate.json: add minimumReleaseAge "1 day",
  internalChecksFilter "strict", @apify/* + @crawlee/* whitelist;
  drop old npm constraint
- Both package-lock.json files deleted; single pnpm-lock.yaml

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
B4nan added a commit to apify/apify-shared-js that referenced this pull request Apr 15, 2026
Adopts the caching pattern from apify/apify-cli#1068: a reusable
composite action at .github/actions/pnpm-install that handles pnpm
setup, pnpm store caching (keyed by year-month + lockfile hash),
and the install. Workflows now delegate their install step to
`uses: ./.github/actions/pnpm-install` instead of inlining each
piece. setup-node remains in workflows (without the cache: pnpm
parameter, since caching is handled inside the composite).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
B4nan added a commit to apify/crawlee-python that referenced this pull request Apr 16, 2026
Migrates the website/ subdirectory from Yarn 4 to pnpm. The Python
root (uv) is untouched. Adds @apify/* + @crawlee/* whitelist at the
Renovate layer (minimumReleaseAge was already present in renovate.json).

- website/package.json: rename to crawlee-python-website + private: true,
  packageManager -> pnpm@10.24.0, yarn/npx -> pnpm
- website/pnpm-workspace.yaml: minimumReleaseAge 1440 with @apify/* +
  @crawlee/* excluded
- website/.npmrc: hoisted linker + workspace linking flags
- website/docusaurus.config.js: rename future.experimental_faster ->
  future.faster (Docusaurus 3.10 renamed the key)
- Delete website/yarn.lock and website/.yarnrc.yml
- pyproject.toml poe tasks build-docs/run-docs: drop corepack + yarn,
  use pnpm install --frozen-lockfile + pnpm build/start
- New .github/actions/pnpm-install composite action (pattern from
  apify/apify-cli#1068)
- manual_release_stable.yaml version_docs job: pnpm/action-setup +
  pnpm install --frozen-lockfile instead of corepack + yarn;
  npx docusaurus -> pnpm exec docusaurus; commit pnpm-lock.yaml
- renovate.json: add internalChecksFilter "strict" and @apify/* +
  @crawlee/* whitelist (minimumReleaseAge "1 day" was already set)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
B4nan added a commit to apify/crawlee that referenced this pull request Apr 16, 2026
Migrates crawlee from Yarn 4 to pnpm workspaces across the 20-package
monorepo, plus docs/ and website/ workspaces. Adds a 1-day minimum
release age supply-chain guard at the package manager layer
(pnpm-workspace.yaml) and at the Renovate layer. Internal
`@apify/*` and `@crawlee/*` packages are whitelisted at both layers.

Notable changes:
- package.json: drop "workspaces", set packageManager to pnpm@10.24.0;
  "yarn X" -> "pnpm X" in scripts
- lerna.json: npmClient "yarn" -> "pnpm"
- .npmrc: node-linker=hoisted + link-workspace-packages=true +
  prefer-workspace-packages=true + public-hoist-pattern[]=*
- pnpm-workspace.yaml: packages [packages/*, website, docs], min
  release age 1440, @apify/* + @crawlee/* excluded, plus pinned
  overrides for playwright-core and @browserbasehq/stagehand
- All 20 packages/*/package.json: yarn -> pnpm in scripts; internal
  @crawlee/* deps converted to "workspace:*"
- Deleted yarn.lock, .yarnrc.yml, docs/yarn.lock, website/yarn.lock;
  generated pnpm-lock.yaml
- .husky/pre-commit: yarn -> pnpm
- New .github/actions/pnpm-install composite action (cached pnpm
  store, pattern from apify/apify-cli#1068)
- CI workflows (docs, publish-to-npm, release, test-ci, test-e2e):
  delegate install to composite; yarn/corepack removed;
  yarn -> pnpm; pnpm publish --no-git-checks
- renovate.json: add @apify/* + @crawlee/* whitelist; drop "yarn"
  from ignoreDeps and old npm constraint. minimumReleaseAge
  and internalChecksFilter were already in place.

WIP / known local issue: @crawlee/types build currently fails in
gen-esm-wrapper (dist resolution), needs small follow-up fix. CI
will likely surface additional peer-dep / type-resolution issues
typical of a large yarn->pnpm swap.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

adhoc Ad-hoc unplanned task added during the sprint. t-tooling Issues with this label are in the ownership of the tooling team. tested Temporary label used only programatically for some analytics.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants