chore(repo): switch package manager references from pnpm to utoo#5963
chore(repo): switch package manager references from pnpm to utoo#5963killagu wants to merge 30 commits into
Conversation
Replace `pnpm` with `utoo` across docs, top-level scripts, and CI
workflows. Lockfile / workspace filenames (`pnpm-lock.yaml`,
`pnpm-workspace.yaml`) and the `ut install --from pnpm` flag value
are preserved because they refer to real artifacts on disk and to a
CLI argument, not to a tool invocation.
- AGENTS.md, README.md/README.zh-CN.md, packages/egg/README.md,
tools/create-egg/README.md, plugins/redis/README.md,
wiki/concepts/repository-map.md, tegg/CLAUDE.md,
.github/copilot-instructions.md: rewrite command snippets and prose.
- package.json: bump `packageManager` to `utoo@1.0.28`.
- scripts/{publish,version,utils}.js: invoke `utoo` instead of
`pnpm` and update comments.
- .github/workflows/release.yml, .github/workflows/e2e-test.yml:
swap pnpm/action-setup for utooland/setup-utoo and call `ut` / `utoo`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…sions - E2E `Build all packages` was failing because `PUBLINT_PACK: utoo` is not in publint's supported set (`npm | pnpm | yarn | bun`). Falling back to the default (`npm`) so publint's per-package pack succeeds again, matching the main CI environment. - Align `.github/copilot-instructions.md` Node and utoo versions with the values declared in `package.json` (`engines.node >=22.18.0`, `packageManager: utoo@1.0.28`). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- scripts/publish.js: invoke `utoo publish` from each package's own directory so utoo's supported flag set works. Drop pnpm-only flags (`--filter`, `--no-git-checks`); keep the npm-standard `--access` and `--provenance` flags that utoo forwards to npm. - AGENTS.md: prepend `corepack enable utoo` to the canonical commands so a clean machine boots into the pinned utoo version. - scripts/version.js: print the `ut run version:<type>` alias used by the rest of the repo (workflows + package.json scripts). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
utoo doesn't implement pnpm's recursive `-r pack`, so the E2E "Pack packages into tgz" step was failing with `error: unexpected argument '-r' found`. Replace it with a small node script that reuses the publish-script's package discovery and runs `npm pack --pack-destination <repoRoot>` per publishable package, matching the tgz layout `ecosystem-ci/patch-project.ts` expects (repo-root-relative file:// overrides). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
CodeRabbit / Copilot caught that the docs reference \`utoo run …\`
while package.json scripts and CI workflows all use the \`ut\` alias,
and some referenced root scripts (\`clean\`, \`build:skip\`,
\`example:commonjs\`/\`example:typescript\`) don't exist.
- Rewrite \`utoo install/run/create/test/pack/publish/--filter/-r\` to
the matching \`ut …\` form in README.md, README.zh-CN.md,
packages/egg/README.md, tools/create-egg/README.md,
plugins/redis/README.md, tegg/CLAUDE.md, AGENTS.md,
.github/copilot-instructions.md, scripts/publish.js, and
scripts/dev-services.js. Keep the \`utoo\` package name (corepack,
\`packageManager\`, prose) intact.
- Fix script name drift: \`ut run clean\` → \`ut run clean-dist\`,
\`ut run build:skip\` → \`ut run build\`,
\`ut run example:{commonjs,typescript}\` → \`ut run example:dev:{commonjs,typescript}\`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`ut pm-pack` does not yet resolve `workspace:` / `catalog:` protocols inside the packed manifests, so downstream `npm install` in the ecosystem-ci projects fails with `EUNSUPPORTEDPROTOCOL`. `npm pack` has the same limitation, which is why the previous attempt with scripts/pack-all.js also broke. Keep pnpm available just for the pack step and drop the unused scripts/pack-all.js. The rest of the workflow stays on utoo. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Without an explicit \`version\` input, \`pnpm/action-setup\` reads \`packageManager\` from package.json — which now declares \`utoo@1.0.28\`, not pnpm — and aborts with \`Invalid packageManager field in package.json\`. Pin to \`10\` (matches the prior \`pnpm@10.28.0\` we used) so the pack step bootstraps regardless of the \`packageManager\` value. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- .github/copilot-instructions.md: `ut run ci` actually runs tests with coverage only (no build); rewrite description accordingly. Site dev server uses VitePress' default port, not :8000; drop the hard-coded URL. Replace the `cd site && ut run build` invocation with the root `ut run site:build` script. - scripts/utils.js: clarify the workspace-file comment — utoo reads `pnpm-workspace.yaml` as-is, so naming the file matters. - README.md / README.zh-CN.md / packages/egg/README.md: prepend `corepack enable utoo` to the quickstart so clean machines get the pinned utoo before `ut create`/`ut install`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pnpm sees \`packageManager: utoo@1.0.28\` in package.json and refuses to run with \`This project is configured to use utoo\`. Set \`PNPM_PACKAGE_MANAGER_STRICT=false\` for just the \`pnpm -r pack\` step so the workaround until utoo's own pack supports workspace:/catalog: resolution doesn't get blocked. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- tegg/CLAUDE.md: switch the test command to the script form (\`ut run test\`) so it matches the root \`test\` script and the rest of the repo guidance. - .github/copilot-instructions.md: site/ is on VitePress (per site/package.json), not Dumi. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
\`pnpm/action-setup\` exports PNPM_HOME, which makes \`ut install --from pnpm\` read pnpm's config and crash with exit code 141 (SIGPIPE) right after the workspace summary is printed. Moving the pnpm setup step until after \`ut install\` / \`ut run build\` keeps PNPM_HOME out of utoo's environment, while still having pnpm available for the pack step that follows. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
\`ut install --from pnpm\` intermittently exits with 141 (SIGPIPE) right after printing the workspace summary — observed on typecheck and on cnpmcore E2E in the same workflow run while other ubuntu jobs (\`Test bin\`, \`Test scripts\`, \`Test\`) using the identical command succeed. Wrap every install invocation in a 3-attempt retry with a 5s / 10s backoff so the workflow absorbs the flake while the upstream utoo bug is investigated. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The previous env var \`PNPM_PACKAGE_MANAGER_STRICT\` is not recognized by pnpm, so pnpm kept refusing the pack step with \`This project is configured to use utoo\`. The actual setting is \`package-manager-strict\`, exposed via \`NPM_CONFIG_PACKAGE_MANAGER_STRICT\`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ps resolve \`pnpm -r pack\` needs pnpm's own \`node_modules\` symlink layout to resolve \`workspace:*\` versions; otherwise it errors with \`ERR_PNPM_CANNOT_RESOLVE_WORKSPACE_PROTOCOL\`. Run \`pnpm install --no-frozen-lockfile --ignore-scripts\` first — the packages are already in the global utoo store, so this is cheap. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Deploying egg with
|
| Latest commit: |
7af94e5
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://0fc988db.egg-cci.pages.dev |
| Branch Preview URL: | https://agent-egg-dev-1132be47-utoo.egg-cci.pages.dev |
Deploying egg-v3 with
|
| Latest commit: |
7af94e5
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://f4a0a11b.egg-v3.pages.dev |
| Branch Preview URL: | https://agent-egg-dev-1132be47-utoo.egg-v3.pages.dev |
|
Ready to act? Review this PR in Change Stack to turn feedback into patch suggestions you can inspect and refine. Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThis PR migrates the monorepo's build toolchain from ChangesMonorepo Toolchain Migration: pnpm → utoo
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Code Review
This pull request migrates the monorepo from pnpm to utoo as the package manager, updating documentation, configuration files, and scripts to use ut commands instead of pnpm. Feedback was provided regarding a potential cross-platform execution issue in scripts/publish.js where running ut directly via execFileSync will fail on Windows, with a suggestion to dynamically resolve the binary name to ut.cmd on Windows.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## next #5963 +/- ##
=======================================
Coverage 85.30% 85.30%
=======================================
Files 670 670
Lines 19552 19552
Branches 3863 3863
=======================================
Hits 16678 16678
Misses 2481 2481
Partials 393 393 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
This PR updates repository documentation and automation to treat utoo/ut (ut) as the primary package manager/runner (instead of pnpm), aligning local developer docs and GitHub Actions workflows with the repo’s current tooling setup.
Changes:
- Update READMEs / agent guidance to use
corepack enable utoo,ut install, andut run .... - Update CI, E2E, and release workflows to install via
ut install --from pnpm(with retries) and run builds viaut run build(while keeping pnpm only where required for packing). - Set root
packageManagertoutoo@1.0.28and adjust release/publish helper scripts’ messaging/comments accordingly.
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| wiki/concepts/repository-map.md | Updates repo map wording to describe the monorepo as utoo-based. |
| tools/create-egg/README.md | Switches create-egg quickstart examples from pnpm to ut create. |
| tegg/CLAUDE.md | Replaces pnpm commands with ut equivalents in tegg dev notes. |
| scripts/version.js | Updates dry-run instruction output to ut run version:*. |
| scripts/utils.js | Clarifies workspace discovery still reads pnpm-workspace.yaml under utoo. |
| scripts/publish.js | Switches publishing approach to run ut publish per package directory. |
| scripts/dev-services.js | Updates user guidance strings from utoo run ... to ut run .... |
| README.zh-CN.md | Updates quickstart to use utoo/ut commands. |
| README.md | Updates quickstart + monorepo/dev command examples to use utoo/ut. |
| plugins/redis/README.md | Updates test command reference to ut (but needs correction to a working command). |
| packages/egg/README.md | Makes ut create egg@beta the primary quickstart path + adds corepack enable utoo. |
| package.json | Sets "packageManager": "utoo@1.0.28". |
| AGENTS.md | Updates canonical agent guidance to utoo/ut commands + adds corepack enable step. |
| .github/workflows/release.yml | Migrates release workflow to utoo and adds retry-safe install/versioning logic (but currently contains multiple syntax/runtime-breaking issues). |
| .github/workflows/e2e-test.yml | Uses utoo for install/build and adds pnpm only for the pack step with strictness disabled. |
| .github/workflows/ci.yml | Adds retry wrapper around ut install --from pnpm across CI jobs. |
| .github/copilot-instructions.md | Updates Copilot guidance to utoo/ut, Node >= 22.18.0, and VitePress site scripts. |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/release.yml:
- Line 243: The dry-run summary header contains a mistyped emoji text "### 🇪
Dry Run Completed"; update that exact line to a correct, clear header such as
"### ✅ Dry Run Completed" (or simply "### Dry Run Completed") so the summary
output is readable and consistent—locate and replace the string "### 🇪 Dry Run
Completed" in the workflow step (the echo command) with the corrected header.
- Around line 183-186: The call to github.rest.repos.getReleaseByTag uses repo:
context.repo (an object) instead of the string name; change the argument to use
context.repo.repo so getReleaseByTag(owner: context.repo.owner, repo:
context.repo.repo, tag: tag) passes a string for repo (matching how
createRelease is invoked) to restore correct existing-release lookup and
idempotency.
- Line 127: The GitHub Actions expression for the prerelease tag is using an
incorrect path syntax in the node invocation; update the CLI flag argument for
the command that runs node scripts/version.js (the line containing
--prerelease-tag) to use the correct expression
github.event.inputs.prerelease_tag (dot-separated) instead of any
slash-based/path expression, and ensure any other occurrences of prerelease_tag
in the workflow use the same dot-format expression.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: fe7a29a9-d97e-4ef4-a2db-eb79b9b32c2b
📒 Files selected for processing (17)
.github/copilot-instructions.md.github/workflows/ci.yml.github/workflows/e2e-test.yml.github/workflows/release.ymlAGENTS.mdREADME.mdREADME.zh-CN.mdpackage.jsonpackages/egg/README.mdplugins/redis/README.mdscripts/dev-services.jsscripts/publish.jsscripts/utils.jsscripts/version.jstegg/CLAUDE.mdtools/create-egg/README.mdwiki/concepts/repository-map.md
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 17 out of 17 changed files in this pull request and generated 3 comments.
Comments suppressed due to low confidence (1)
README.md:38
- The quickstart section still states
Node.js >= 20.19.0 required, but the monorepopackage.jsonenforcesengines.node >=22.18.0. This mismatch can mislead contributors setting up the repo with an unsupported Node version.
$ ut run dev
$ open http://localhost:7001
Node.js >= 20.19.0 required, supports
require(esm)by default.
</details>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 16 out of 16 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (1)
tegg/CLAUDE.md:33
- This bullet references a root
.npmrc, but there is no.npmrcin the repository root;catalogMode: preferis configured inpnpm-workspace.yamlinstead. Updating this avoids pointing contributors to a non-existent file.
- Uses utoo workspaces with `catalog:` protocol for shared external dependencies
- Uses `workspace:*` protocol for internal monorepo dependencies (both tegg and egg packages)
- All shared dependency versions centralized in the root `pnpm-workspace.yaml` (not in tegg/)
- `catalogMode: prefer` set in root `.npmrc` for automatic catalog usage
- Tegg packages are defined in root pnpm-workspace.yaml as `tegg/core/*`, `tegg/plugin/*`, `tegg/standalone/*`
Summary
ut create egg@betathe primary package README quickstart commandThis supersedes #5961 because the local OAuth git push path cannot update workflow files on the fork branch without
workflowscope.Tests
ut install --from pnpmut run fmtcheck -- .github/workflows/release.yml packages/egg/README.mdut run lintNotes
git commitused--no-verifylocally because the repo pre-commit hook runsoxlint --type-aware --fixon a Markdown/YAML-only staged set and fails withNo files found to lint; fullut run lintpassed.Summary by CodeRabbit
Documentation
Chores
pnpmtoutoo(utCLI).