fix: sync --allow-build flag value to allowBuilds (#10343)

* fix: sync `--allow-build` flag value to `allowBuilds`

* feat: rename

* fix: update

* chore: reset

* fix: update

* fix: test

* fix: update

* fix: update
This commit is contained in:
btea
2025-12-30 07:35:08 +08:00
committed by Zoltan Kochan
parent c6cbb25f82
commit e5fab27321
5 changed files with 23 additions and 9 deletions

View File

@@ -0,0 +1,6 @@
---
"@pnpm/plugin-commands-installation": patch
"pnpm": patch
---
The parameter set by the `--allow-build` flag is written to `allowBuilds`.

View File

@@ -113,7 +113,8 @@ test('approve no builds', async () => {
const manifest = readYamlFile<any>(path.resolve('pnpm-workspace.yaml')) // eslint-disable-line
expect(manifest.onlyBuiltDependencies).toBeUndefined()
expect(manifest.ignoredBuiltDependencies?.sort()).toStrictEqual([
expect(manifest.ignoredBuiltDependencies).toBeUndefined()
expect(Object.keys(manifest.allowBuilds ?? {}).sort()).toStrictEqual([
'@pnpm.e2e/install-script-example',
'@pnpm.e2e/pre-and-postinstall-scripts-example',
])
@@ -144,8 +145,10 @@ test("works when root project manifest doesn't exist in a workspace", async () =
expect(readYamlFile(workspaceManifestFile)).toStrictEqual({
packages: ['packages/*'],
onlyBuiltDependencies: ['@pnpm.e2e/pre-and-postinstall-scripts-example'],
ignoredBuiltDependencies: ['@pnpm.e2e/install-script-example'],
allowBuilds: {
'@pnpm.e2e/install-script-example': false,
'@pnpm.e2e/pre-and-postinstall-scripts-example': true,
},
})
})
@@ -223,7 +226,9 @@ test('should approve builds with package.json that has no onlyBuiltDependencies
expect(readYamlFile(workspaceManifestFile)).toStrictEqual({
packages: ['packages/*'],
onlyBuiltDependencies: ['@pnpm.e2e/pre-and-postinstall-scripts-example'],
ignoredBuiltDependencies: ['@pnpm.e2e/install-script-example'],
allowBuilds: {
'@pnpm.e2e/install-script-example': false,
'@pnpm.e2e/pre-and-postinstall-scripts-example': true,
},
})
})

View File

@@ -186,7 +186,8 @@ test('selectively allow scripts in some dependencies by --allow-build flag', asy
const manifest = loadJsonFile.sync<ProjectManifest>('package.json')
expect(manifest.pnpm?.onlyBuiltDependencies).toStrictEqual(undefined)
const modulesManifest = await readWorkspaceManifest(project.dir())
expect(modulesManifest?.onlyBuiltDependencies).toStrictEqual(['@pnpm.e2e/install-script-example'])
expect(modulesManifest?.onlyBuiltDependencies).toBeUndefined()
expect(modulesManifest?.allowBuilds).toStrictEqual({ '@pnpm.e2e/install-script-example': true })
})
test('--allow-build flag should specify the package', async () => {

View File

@@ -40,7 +40,7 @@ export async function updateWorkspaceManifest (dir: string, opts: {
// If the current manifest has allowBuilds, convert old fields to allowBuilds format
const updatedFields = { ...opts.updatedFields }
if (manifest.allowBuilds != null && (updatedFields.onlyBuiltDependencies != null || updatedFields.ignoredBuiltDependencies != null)) {
if (manifest.allowBuilds != null || (manifest.onlyBuiltDependencies == null && manifest.ignoredBuiltDependencies == null)) {
const allowBuilds: Record<string, boolean | string> = { ...manifest.allowBuilds }
// Convert onlyBuiltDependencies to allowBuilds with true values
@@ -58,7 +58,9 @@ export async function updateWorkspaceManifest (dir: string, opts: {
}
// Update allowBuilds instead of the old fields
updatedFields.allowBuilds = allowBuilds
if (manifest.allowBuilds != null || Object.keys(allowBuilds).length > 0) {
updatedFields.allowBuilds = allowBuilds
}
delete updatedFields.onlyBuiltDependencies
delete updatedFields.ignoredBuiltDependencies
}

View File

@@ -9,7 +9,7 @@ import { sync as writeYamlFile } from 'write-yaml-file'
test('updateWorkspaceManifest adds a new setting', async () => {
const dir = tempDir(false)
const filePath = path.join(dir, WORKSPACE_MANIFEST_FILENAME)
writeYamlFile(filePath, { packages: ['*'] })
writeYamlFile(filePath, { packages: ['*'], onlyBuiltDependencies: [] })
await updateWorkspaceManifest(dir, {
updatedFields: { onlyBuiltDependencies: [] },
})