From a5b36b735596fcf2b388d0582af17466b3f014ed Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Wed, 12 Feb 2025 01:30:44 +0100 Subject: [PATCH] fix: don't remove ignored builds list on repeat install (#9083) close #9045 --- .changeset/few-ducks-agree.md | 7 +++++++ exec/build-modules/src/index.ts | 3 ++- pkg-manager/headless/src/index.ts | 7 +++++++ pnpm/test/install/lifecycleScripts.ts | 12 ++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 .changeset/few-ducks-agree.md diff --git a/.changeset/few-ducks-agree.md b/.changeset/few-ducks-agree.md new file mode 100644 index 0000000000..f2fcc70de1 --- /dev/null +++ b/.changeset/few-ducks-agree.md @@ -0,0 +1,7 @@ +--- +"@pnpm/headless": patch +"@pnpm/build-modules": patch +"pnpm": patch +--- + +`pnpm approve-builds` should work after two consecutive `pnpm install` runs [#9083](https://github.com/pnpm/pnpm/pull/9083). diff --git a/exec/build-modules/src/index.ts b/exec/build-modules/src/index.ts index 6b74bd427c..77fc2c6856 100644 --- a/exec/build-modules/src/index.ts +++ b/exec/build-modules/src/index.ts @@ -45,7 +45,8 @@ export async function buildModules ( rootModulesDir: string hoistedLocations?: Record } -): Promise<{ ignoredBuilds: string[] }> { +): Promise<{ ignoredBuilds?: string[] }> { + if (!rootDepPaths.length) return {} const warn = (message: string) => { logger.warn({ message, prefix: opts.lockfileDir }) } diff --git a/pkg-manager/headless/src/index.ts b/pkg-manager/headless/src/index.ts index 7a14580ab8..49d494cdee 100644 --- a/pkg-manager/headless/src/index.ts +++ b/pkg-manager/headless/src/index.ts @@ -8,6 +8,7 @@ import { WANTED_LOCKFILE, } from '@pnpm/constants' import { + ignoredScriptsLogger, packageManifestLogger, progressLogger, stageLogger, @@ -46,6 +47,7 @@ import { import { prune } from '@pnpm/modules-cleaner' import { type IncludedDependencies, + type Modules, writeModulesManifest, } from '@pnpm/modules-yaml' import { type HoistingLimits } from '@pnpm/real-hoist' @@ -174,6 +176,7 @@ export interface HeadlessOptions { useLockfile?: boolean supportedArchitectures?: SupportedArchitectures hoistWorkspacePackages?: boolean + modulesFile?: Modules | null } export interface InstallationResultStats { @@ -547,6 +550,10 @@ export async function headlessInstall (opts: HeadlessOptions): Promise { + const project = prepare({}) + execPnpmSync(['add', '@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0', '--config.optimistic-repeat-install=false']) + + const result = execPnpmSync(['install']) + // The warning is printed on repeat install too + expect(result.stdout.toString()).toContain('Ignored build scripts:') + + const modulesManifest = project.readModulesManifest() + expect(modulesManifest?.ignoredBuilds).toStrictEqual(['@pnpm.e2e/pre-and-postinstall-scripts-example']) +})