From 2493b8ef3cd5044dd2fa72b9d0d5d301134e478c Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sat, 4 Jun 2022 14:07:11 +0300 Subject: [PATCH] fix(cli): suggest to update with Corepack (#4854) When pnpm was installed with Corepack, suggest to update it with Corepack as well. --- .changeset/few-horses-happen.md | 6 +++ .../src/reporterForClient/index.ts | 2 +- .../reporterForClient/reportUpdateCheck.ts | 43 +++++++++++++------ .../reportingUpdateCheck.ts.snap | 16 ++++++- .../test/reportingUpdateCheck.ts | 28 ++++++++++++ 5 files changed, 79 insertions(+), 16 deletions(-) create mode 100644 .changeset/few-horses-happen.md diff --git a/.changeset/few-horses-happen.md b/.changeset/few-horses-happen.md new file mode 100644 index 00000000000..58537662ef9 --- /dev/null +++ b/.changeset/few-horses-happen.md @@ -0,0 +1,6 @@ +--- +"@pnpm/default-reporter": minor +"pnpm": patch +--- + +Suggest to update using Corepack when pnpm was installed via Corepack. diff --git a/packages/default-reporter/src/reporterForClient/index.ts b/packages/default-reporter/src/reporterForClient/index.ts index 404235e90c3..8ae3923ef29 100644 --- a/packages/default-reporter/src/reporterForClient/index.ts +++ b/packages/default-reporter/src/reporterForClient/index.ts @@ -85,7 +85,7 @@ export default function ( reportSkippedOptionalDependencies(log$.skippedOptionalDependency, { cwd }), reportHooks(log$.hook, { cwd, isRecursive: opts.isRecursive }), reportContext(log$, { cwd }), - reportUpdateCheck(log$.updateCheck), + reportUpdateCheck(log$.updateCheck, opts), ] // logLevelNumber: 0123 = error warn info debug diff --git a/packages/default-reporter/src/reporterForClient/reportUpdateCheck.ts b/packages/default-reporter/src/reporterForClient/reportUpdateCheck.ts index eddca2b44b1..58ffbb4e8f1 100644 --- a/packages/default-reporter/src/reporterForClient/reportUpdateCheck.ts +++ b/packages/default-reporter/src/reporterForClient/reportUpdateCheck.ts @@ -5,26 +5,41 @@ import * as Rx from 'rxjs' import { filter, map, take } from 'rxjs/operators' import semver from 'semver' -export default (log$: Rx.Observable) => { - const pkgName = process['pkg'] != null ? '@pnpm/exe' : 'pnpm' +export default (log$: Rx.Observable, opts: { + env: NodeJS.ProcessEnv +}) => { return log$.pipe( take(1), filter((log) => semver.gt(log.latestVersion, log.currentVersion)), - map((log) => Rx.of({ - msg: boxen(`\ + map((log) => { + const updateCommand = renderUpdateCommand({ + latestVersion: log.latestVersion, + env: opts.env, + }) + return Rx.of({ + msg: boxen(`\ Update available! ${chalk.red(log.currentVersion)} → ${chalk.green(log.latestVersion)}. ${chalk.magenta('Changelog:')} https://github.com/pnpm/pnpm/releases/tag/v${log.latestVersion} -Run ${chalk.magenta(`pnpm add -g ${pkgName}`)} to update. +Run "${chalk.magenta(updateCommand)}" to update. Follow ${chalk.magenta('@pnpmjs')} for updates: https://twitter.com/pnpmjs`, - { - padding: 1, - margin: 1, - align: 'center', - borderColor: 'yellow', - borderStyle: 'round', - } - ), - })) + { + padding: 1, + margin: 1, + align: 'center', + borderColor: 'yellow', + borderStyle: 'round', + } + ), + }) + }) ) } + +function renderUpdateCommand (opts: { env: NodeJS.ProcessEnv, latestVersion: string }) { + if (opts.env.COREPACK_ROOT) { + return `corepack prepare pnpm@${opts.latestVersion} --activate` + } + const pkgName = process['pkg'] != null ? '@pnpm/exe' : 'pnpm' + return `pnpm add -g ${pkgName}` +} diff --git a/packages/default-reporter/test/__snapshots__/reportingUpdateCheck.ts.snap b/packages/default-reporter/test/__snapshots__/reportingUpdateCheck.ts.snap index 44e2d2f1130..fa346486cf5 100644 --- a/packages/default-reporter/test/__snapshots__/reportingUpdateCheck.ts.snap +++ b/packages/default-reporter/test/__snapshots__/reportingUpdateCheck.ts.snap @@ -1,12 +1,26 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`print update notification for Corepack if the latest version is greater than the current 1`] = ` +" + ╭──────────────────────────────────────────────────────────────────╮ + │ │ + │ Update available! 10.0.0 → 11.0.0. │ + │ Changelog: https://github.com/pnpm/pnpm/releases/tag/v11.0.0 │ + │ Run \\"corepack prepare pnpm@11.0.0 --activate\\" to update. │ + │ │ + │ Follow @pnpmjs for updates: https://twitter.com/pnpmjs │ + │ │ + ╰──────────────────────────────────────────────────────────────────╯ +" +`; + exports[`print update notification if the latest version is greater than the current 1`] = ` " ╭──────────────────────────────────────────────────────────────────╮ │ │ │ Update available! 10.0.0 → 11.0.0. │ │ Changelog: https://github.com/pnpm/pnpm/releases/tag/v11.0.0 │ - │ Run pnpm add -g pnpm to update. │ + │ Run \\"pnpm add -g pnpm\\" to update. │ │ │ │ Follow @pnpmjs for updates: https://twitter.com/pnpmjs │ │ │ diff --git a/packages/default-reporter/test/reportingUpdateCheck.ts b/packages/default-reporter/test/reportingUpdateCheck.ts index 0c7adb13c47..1044a213dc5 100644 --- a/packages/default-reporter/test/reportingUpdateCheck.ts +++ b/packages/default-reporter/test/reportingUpdateCheck.ts @@ -56,3 +56,31 @@ test('print update notification if the latest version is greater than the curren }, }) }) + +test('print update notification for Corepack if the latest version is greater than the current', (done) => { + const output$ = toOutput$({ + context: { + argv: ['install'], + config: { recursive: true } as Config, + env: { + COREPACK_ROOT: '/usr/bin/corepack', + }, + }, + streamParser: createStreamParser(), + }) + + updateCheckLogger.debug({ + currentVersion: '10.0.0', + latestVersion: '11.0.0', + }) + + expect.assertions(1) + + output$.pipe(take(1)).subscribe({ + complete: () => done(), + error: done, + next: output => { + expect(stripAnsi(output)).toMatchSnapshot() + }, + }) +})