Skip to content

[code-infra] Migrate GitHub Actions to pnpm/setup - #1792

Open
brijeshb42 wants to merge 2 commits into
masterfrom
pnpm-setup-action
Open

[code-infra] Migrate GitHub Actions to pnpm/setup#1792
brijeshb42 wants to merge 2 commits into
masterfrom
pnpm-setup-action

Conversation

@brijeshb42

@brijeshb42 brijeshb42 commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Migrates all local workflows and composite actions from pnpm/action-setup + actions/setup-node to the new pnpm/setup action (v2.0.2, SHA-pinned).

pnpm/setup@v2 installs pnpm's self-contained binary, installs Node.js via pnpm runtime set (replacing actions/setup-node), caches the pnpm store, and runs pnpm install automatically — so each setup site collapses into a single step.

Changes

  • ci.yml: single setup step with runtime: node@22.23.2; drops the explicit pnpm install (auto-install covers it).
  • ci-base.yml (reusable workflow): the two conditional setup-node steps become one expression — node@<input> when node-version is passed, bare node otherwise. Input contract unchanged, callers need no edits.
  • dependabot-dedupe.yml: install: false so auto-install doesn't run the bumped dependency's lifecycle scripts; no Node runtime needed since the job only runs pnpm dedupe and git.
  • publish-prepare/action.yml (composite action): install: false to keep the explicit pnpm install --frozen-lockfile. Dropping setup-node also drops registry-url, which is safe because publishing uses npm OIDC trusted publishing and npm's default registry is already registry.npmjs.org.

Behavior changes for downstream repos

  1. pnpm/setup doesn't read engines.node. Callers of ci-base.yml that omit node-version now fall back to devEngines.runtime in their package.json, then Node LTS (previously engines.node).

@code-infra-dashboard

code-infra-dashboard Bot commented Aug 17, 2026

Copy link
Copy Markdown

Deploy preview

https://deploy-preview-1792--mui-internal.netlify.app/
QR code for https://deploy-preview-1792--mui-internal.netlify.app/

Bundle size

Total Size Change: 0B(0.00%) - Total Gzip Change: 0B(0.00%)
Files: 71 total (0 added, 0 removed, 0 changed)

Show details for 71 more bundles

@mui/internal-docs-infra/abstractCreateDemoparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/abstractCreateDemoClientparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/abstractCreateStreamparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/abstractCreateTypesparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/ChunkProviderparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/cliparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/CodeControllerContextparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/CodeExternalsContextparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/CodeHighlighterparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/CodeHighlighter/errorsparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/CodeHighlighter/typesparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/CodeProviderparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/CoordinatedLazyparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/CoordinatedLazy/typesparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/createDemoDataparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/createDemoData/typesparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/createSitemapparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/createSitemap/typesparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useCodeparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useCodeWindowparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useCoordinatedparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useCopierparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useCrossTabStateparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useDemoparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useDemoControllerparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useErrorsparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useLocalStorageStateparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/usePreferenceparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useScrollAnchorparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useSearchparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useSearch/typesparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useStreamparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useStream/typesparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useTypeparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useTypesparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/useUrlHashStateparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/internal-docs-infra/withDocsInfraparsed: 0B(0.00%) gzip: 0B(0.00%)
addLineGuttersparsed: 0B(0.00%) gzip: 0B(0.00%)
BuildEngineparsed: 0B(0.00%) gzip: 0B(0.00%)
CodeHighlighterChunkparsed: 0B(0.00%) gzip: 0B(0.00%)
CodeHighlighterClientparsed: 0B(0.00%) gzip: 0B(0.00%)
CodeInitialSourceLoaderparsed: 0B(0.00%) gzip: 0B(0.00%)
CodeSourceLoaderparsed: 0B(0.00%) gzip: 0B(0.00%)
compileCssWithPostcssparsed: 0B(0.00%) gzip: 0B(0.00%)
computeHastDeltasparsed: 0B(0.00%) gzip: 0B(0.00%)
createFrameparsed: 0B(0.00%) gzip: 0B(0.00%)
createParseSourceWorkerClientparsed: 0B(0.00%) gzip: 0B(0.00%)
EditingEngineparsed: 0B(0.00%) gzip: 0B(0.00%)
embedTransformsparsed: 0B(0.00%) gzip: 0B(0.00%)
enhanceCodeEmphasisparsed: 0B(0.00%) gzip: 0B(0.00%)
findExpandingRangesparsed: 0B(0.00%) gzip: 0B(0.00%)
getHastTextContentparsed: 0B(0.00%) gzip: 0B(0.00%)
grammarLoadersparsed: 0B(0.00%) gzip: 0B(0.00%)
grammarsparsed: 0B(0.00%) gzip: 0B(0.00%)
isFrameSpanparsed: 0B(0.00%) gzip: 0B(0.00%)
loadCodeFallbackparsed: 0B(0.00%) gzip: 0B(0.00%)
loadIsomorphicCodeVariantparsed: 0B(0.00%) gzip: 0B(0.00%)
parseSourceparsed: 0B(0.00%) gzip: 0B(0.00%)
rolldown-runtimeparsed: 0B(0.00%) gzip: 0B(0.00%)
source.cssparsed: 0B(0.00%) gzip: 0B(0.00%)
source.jsparsed: 0B(0.00%) gzip: 0B(0.00%)
source.jsonparsed: 0B(0.00%) gzip: 0B(0.00%)
source.mdxparsed: 0B(0.00%) gzip: 0B(0.00%)
source.shellparsed: 0B(0.00%) gzip: 0B(0.00%)
source.tsparsed: 0B(0.00%) gzip: 0B(0.00%)
source.tsxparsed: 0B(0.00%) gzip: 0B(0.00%)
source.yamlparsed: 0B(0.00%) gzip: 0B(0.00%)
text.html.basicparsed: 0B(0.00%) gzip: 0B(0.00%)
text.mdparsed: 0B(0.00%) gzip: 0B(0.00%)
TransformEngineparsed: 0B(0.00%) gzip: 0B(0.00%)
transpileSourceparsed: 0B(0.00%) gzip: 0B(0.00%)

Details of bundle changes

Performance

Total duration: 20.10 ms +1.75 ms(+9.5%) | Renders: 5 (+0) | Paint: 72.92 ms +7.38 ms(+11.3%)

Test Duration Renders
custom scalar + discrete metrics 0.00 ms 0 (+0)
sub-series via labels 0.00 ms 0 (+0)

5 tests within noise — details

Metric alarms

Test Metric Change
custom scalar + discrete metrics fib_duration 🔺 +0.10 ms
sub-series via labels fib_phase#large 🔺 +0.36 ms

Check out the code infra dashboard for more information about this PR.

@oliviertassinari
oliviertassinari temporarily deployed to pnpm-setup-action - mui-tools-public PR #1792 August 17, 2026 14:32 — with Render Destroyed
@brijeshb42 brijeshb42 added scope: code-infra Involves the code-infra product (https://www.notion.so/mui-org/5562c14178aa42af97bc1fa5114000cd). and removed scope: code-infra Involves the code-infra product (https://www.notion.so/mui-org/5562c14178aa42af97bc1fa5114000cd). labels Aug 17, 2026
@brijeshb42 brijeshb42 changed the title [core] Migrate GitHub Actions to pnpm/setup [code-infra] Migrate GitHub Actions to pnpm/setup Aug 18, 2026
@brijeshb42
brijeshb42 force-pushed the pnpm-setup-action branch 2 times, most recently from 7160828 to b939cca Compare August 18, 2026 11:20
@brijeshb42
brijeshb42 requested a review from a team August 18, 2026 11:34
@brijeshb42
brijeshb42 marked this pull request as ready for review August 18, 2026 12:20
@Janpot

Janpot commented Aug 21, 2026

Copy link
Copy Markdown
Member

Is it faster?

@brijeshb42

This comment was marked as outdated.

@brijeshb42

Copy link
Copy Markdown
Contributor Author

Comparison run with Codex

Overall:

  • Ubuntu: essentially neutral and noisy.
  • Windows: consistently 11–24 seconds faster, roughly 9–18%.
  • macOS: consistently 49–131 seconds slower, roughly 41–81%.
  • In the latest comparison, the complete workflow increased from 3m50s to 6m28s because macOS remained the
    critical path.

The macOS regression is not only a first-run cache-key migration effect. Warm-cache PR runs still had a median of
166s versus 120s previously, about 46s slower. In the latest run, the new action spent 152s in setup and 140s in
cleanup/cache saving; the old sequence took 88s and 73s respectively. The new post-step additionally spent about
20s pruning the pnpm store and approximately 116s creating the cache archive.

My opinion

Even though its increasing perf on Windows, the regression on macos is too much for this to be considered stable just yet. I'll keep the PR open and update the version from time to time to see if anything improved on macos side or not.

Likely related issue - pnpm/setup#31

@brijeshb42 brijeshb42 added the on hold There is a blocker, we need to wait. label Aug 24, 2026
@github-actions github-actions Bot added the PR: out-of-date The pull request has merge conflicts and can't be merged. label Aug 26, 2026
@oliviertassinari
oliviertassinari temporarily deployed to pnpm-setup-action - code-infra-dashboard PR #1792 August 28, 2026 03:57 — with Render Destroyed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

on hold There is a blocker, we need to wait. PR: out-of-date The pull request has merge conflicts and can't be merged. scope: code-infra Involves the code-infra product (https://www.notion.so/mui-org/5562c14178aa42af97bc1fa5114000cd).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants