mirror of
https://github.com/pnpm/pnpm.git
synced 2026-07-25 15:07:06 -04:00
fix: don't abort appprove-builds or err when manifest doesn't exist (#9198)
close: #9202
This commit is contained in:
5
.changeset/lemon-mice-smoke.md
Normal file
5
.changeset/lemon-mice-smoke.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@pnpm/exec.build-commands": patch
|
||||
---
|
||||
|
||||
fix: don't abort approve-builds command or err when manifest doesn't exist [#9198](https://github.com/pnpm/pnpm/pull/9198)
|
||||
@@ -53,7 +53,10 @@
|
||||
"@pnpm/types": "workspace:*",
|
||||
"@types/ramda": "catalog:",
|
||||
"load-json-file": "catalog:",
|
||||
"ramda": "catalog:"
|
||||
"ramda": "catalog:",
|
||||
"read-yaml-file": "catalog:",
|
||||
"write-pkg": "catalog:",
|
||||
"write-yaml-file": "catalog:"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.12"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { type Config } from '@pnpm/config'
|
||||
import { globalInfo } from '@pnpm/logger'
|
||||
import { readProjectManifest } from '@pnpm/read-project-manifest'
|
||||
import { tryReadProjectManifest } from '@pnpm/read-project-manifest'
|
||||
import { lexCompare } from '@pnpm/util.lex-comparator'
|
||||
import renderHelp from 'render-help'
|
||||
import { prompt } from 'enquirer'
|
||||
@@ -44,7 +44,6 @@ export function rcOptionsTypes (): Record<string, unknown> {
|
||||
}
|
||||
|
||||
export async function handler (opts: ApproveBuildsCommandOpts & RebuildCommandOpts): Promise<void> {
|
||||
if (opts.rootProjectManifest == null) return
|
||||
const automaticallyIgnoredBuilds = await getAutomaticallyIgnoredBuilds(opts)
|
||||
if (!automaticallyIgnoredBuilds?.length) {
|
||||
globalInfo('There are no packages awaiting approval')
|
||||
@@ -122,16 +121,17 @@ Do you approve?`,
|
||||
return
|
||||
}
|
||||
}
|
||||
const { writeProjectManifest } = await readProjectManifest(opts.rootProjectManifestDir)
|
||||
if (opts.rootProjectManifest.pnpm?.ignoredBuiltDependencies != null || opts.rootProjectManifest.pnpm?.onlyBuiltDependencies != null || opts.workspaceDir == null) {
|
||||
opts.rootProjectManifest.pnpm = opts.rootProjectManifest.pnpm ?? {}
|
||||
let { manifest, writeProjectManifest } = await tryReadProjectManifest(opts.rootProjectManifestDir)
|
||||
manifest ??= {}
|
||||
if (opts.workspaceDir == null || manifest.pnpm?.onlyBuiltDependencies != null || manifest.pnpm?.onlyBuiltDependencies != null) {
|
||||
manifest.pnpm ??= {}
|
||||
if (updatedOnlyBuiltDependencies) {
|
||||
opts.rootProjectManifest.pnpm.onlyBuiltDependencies = updatedOnlyBuiltDependencies
|
||||
manifest.pnpm.onlyBuiltDependencies = updatedOnlyBuiltDependencies
|
||||
}
|
||||
if (updatedIgnoredBuiltDependencies) {
|
||||
opts.rootProjectManifest.pnpm.ignoredBuiltDependencies = updatedIgnoredBuiltDependencies
|
||||
manifest.pnpm.ignoredBuiltDependencies = updatedIgnoredBuiltDependencies
|
||||
}
|
||||
await writeProjectManifest(opts.rootProjectManifest)
|
||||
await writeProjectManifest(manifest)
|
||||
} else {
|
||||
await updateWorkspaceManifest(opts.workspaceDir, {
|
||||
onlyBuiltDependencies: updatedOnlyBuiltDependencies,
|
||||
|
||||
@@ -9,19 +9,17 @@ import { getConfig } from '@pnpm/config'
|
||||
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
|
||||
import { sync as loadJsonFile } from 'load-json-file'
|
||||
import omit from 'ramda/src/omit'
|
||||
import { tempDir } from '@pnpm/prepare-temp-dir'
|
||||
import writePkg from 'write-pkg'
|
||||
import { sync as readYamlFile } from 'read-yaml-file'
|
||||
import { sync as writeYamlFile } from 'write-yaml-file'
|
||||
|
||||
jest.mock('enquirer', () => ({ prompt: jest.fn() }))
|
||||
|
||||
// eslint-disable-next-line
|
||||
const prompt = enquirer.prompt as any
|
||||
|
||||
test('approve selected build', async () => {
|
||||
prepare({
|
||||
dependencies: {
|
||||
'@pnpm.e2e/pre-and-postinstall-scripts-example': '1.0.0',
|
||||
'@pnpm.e2e/install-script-example': '*',
|
||||
},
|
||||
})
|
||||
const runApproveBuilds = async (opts = {}) => {
|
||||
const cliOptions = {
|
||||
argv: [],
|
||||
dir: process.cwd(),
|
||||
@@ -48,7 +46,18 @@ test('approve selected build', async () => {
|
||||
build: true,
|
||||
})
|
||||
|
||||
await approveBuilds.handler(config)
|
||||
await approveBuilds.handler({ ...config, ...opts })
|
||||
}
|
||||
|
||||
test('approve selected build', async () => {
|
||||
prepare({
|
||||
dependencies: {
|
||||
'@pnpm.e2e/pre-and-postinstall-scripts-example': '1.0.0',
|
||||
'@pnpm.e2e/install-script-example': '*',
|
||||
},
|
||||
})
|
||||
|
||||
await runApproveBuilds()
|
||||
|
||||
const manifest = loadJsonFile<ProjectManifest>(path.resolve('package.json'))
|
||||
expect(manifest.pnpm?.onlyBuiltDependencies).toStrictEqual(['@pnpm.e2e/pre-and-postinstall-scripts-example'])
|
||||
@@ -58,3 +67,26 @@ test('approve selected build', async () => {
|
||||
expect(fs.existsSync('node_modules/@pnpm.e2e/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeTruthy()
|
||||
expect(fs.existsSync('node_modules/@pnpm.e2e/install-script-example/generated-by-install.js')).toBeFalsy()
|
||||
})
|
||||
|
||||
test("works when root project manifest doesn't exist in a workspace", async () => {
|
||||
tempDir()
|
||||
|
||||
await writePkg('workspace/packages/project', {
|
||||
dependencies: {
|
||||
'@pnpm.e2e/pre-and-postinstall-scripts-example': '1.0.0',
|
||||
'@pnpm.e2e/install-script-example': '*',
|
||||
},
|
||||
})
|
||||
|
||||
const workspaceDir = path.resolve('workspace')
|
||||
const workspaceManifestFile = path.join(workspaceDir, 'pnpm-workspace.yaml')
|
||||
writeYamlFile(workspaceManifestFile, { packages: ['packages/*'] })
|
||||
process.chdir('workspace/packages/project')
|
||||
await runApproveBuilds({ workspaceDir, rootProjectManifestDir: workspaceDir })
|
||||
|
||||
expect(readYamlFile(workspaceManifestFile)).toStrictEqual({
|
||||
packages: ['packages/*'],
|
||||
onlyBuiltDependencies: ['@pnpm.e2e/pre-and-postinstall-scripts-example'],
|
||||
ignoredBuiltDependencies: ['@pnpm.e2e/install-script-example'],
|
||||
})
|
||||
})
|
||||
|
||||
9
pnpm-lock.yaml
generated
9
pnpm-lock.yaml
generated
@@ -2142,6 +2142,15 @@ importers:
|
||||
ramda:
|
||||
specifier: 'catalog:'
|
||||
version: '@pnpm/ramda@0.28.1'
|
||||
read-yaml-file:
|
||||
specifier: 'catalog:'
|
||||
version: 2.1.0
|
||||
write-pkg:
|
||||
specifier: 'catalog:'
|
||||
version: 4.0.0
|
||||
write-yaml-file:
|
||||
specifier: 'catalog:'
|
||||
version: 5.0.0
|
||||
|
||||
exec/build-modules:
|
||||
dependencies:
|
||||
|
||||
Reference in New Issue
Block a user