diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 631d546f3270e109ba87193649a90b4ca5e4e6f0..15aac4fbf6c43e6536a3c53655eaa74a0d613a90 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2103,7 +2103,7 @@ In the case that a user is automatically added as reviewer (such as Renovate App ## ignoreScripts -Applicable for npm, Composer and Copier only for now. Set this to `true` if running scripts causes problems. +Applicable for npm, bun, Composer and Copier only for now. Set this to `true` if running scripts causes problems. ## ignoreTests diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 284bddbf9c28a7dcba3829e671a29f670dd1932d..01ccf08da8939e601ab9a08b39fc3cc56828d76e 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -888,7 +888,7 @@ const options: RenovateOptions[] = [ 'Set this to `false` if `allowScripts=true` and you wish to run scripts when updating lock files.', type: 'boolean', default: true, - supportedManagers: ['npm', 'composer', 'copier'], + supportedManagers: ['npm', 'bun', 'composer', 'copier'], }, { name: 'platform', diff --git a/lib/modules/manager/bun/artifacts.spec.ts b/lib/modules/manager/bun/artifacts.spec.ts index 6ebdb9f0014d683685155a09834043f2d8bd79d7..75a7797a4d40398a340d512d032621f60c4ec366 100644 --- a/lib/modules/manager/bun/artifacts.spec.ts +++ b/lib/modules/manager/bun/artifacts.spec.ts @@ -133,4 +133,90 @@ describe('modules/manager/bun/artifacts', () => { ]); }); }); + + describe('bun command execution', () => { + it('check install options with configs', async () => { + const testCases = [ + { + allowScripts: undefined, + ignoreScripts: undefined, + expectedCmd: 'bun install --ignore-scripts', + }, + { + allowScripts: false, + ignoreScripts: undefined, + expectedCmd: 'bun install --ignore-scripts', + }, + { + allowScripts: true, + ignoreScripts: undefined, + expectedCmd: 'bun install', + }, + { + allowScripts: undefined, + ignoreScripts: true, + expectedCmd: 'bun install --ignore-scripts', + }, + { + allowScripts: undefined, + ignoreScripts: false, + expectedCmd: 'bun install --ignore-scripts', + }, + { + allowScripts: false, + ignoreScripts: true, + expectedCmd: 'bun install --ignore-scripts', + }, + { + allowScripts: false, + ignoreScripts: false, + expectedCmd: 'bun install --ignore-scripts', + }, + { + allowScripts: true, + ignoreScripts: true, + expectedCmd: 'bun install --ignore-scripts', + }, + { + allowScripts: true, + ignoreScripts: false, + expectedCmd: 'bun install', + }, + ]; + + for (const testCase of testCases) { + GlobalConfig.set({ + ...globalConfig, + allowScripts: testCase.allowScripts, + }); + const updateArtifact: UpdateArtifact = { + config: { ignoreScripts: testCase.ignoreScripts }, + newPackageFileContent: '', + packageFileName: '', + updatedDeps: [{ manager: 'bun', lockFiles: ['bun.lockb'] }], + }; + + const oldLock = Buffer.from('old'); + fs.readFile.mockResolvedValueOnce(oldLock as never); + const newLock = Buffer.from('new'); + fs.readFile.mockResolvedValueOnce(newLock as never); + + await updateArtifacts(updateArtifact); + + expect(exec).toHaveBeenCalledWith(testCase.expectedCmd, { + cwdFile: '', + docker: {}, + toolConstraints: [ + { + toolName: 'bun', + }, + ], + userConfiguredEnv: undefined, + }); + + exec.mockClear(); + GlobalConfig.reset(); + } + }); + }); }); diff --git a/lib/modules/manager/bun/artifacts.ts b/lib/modules/manager/bun/artifacts.ts index ae1d4c95a828dd5aa13900c115e952db9b5cc3e9..4e47817c74637465cccd7299b29cf2af797af6c6 100644 --- a/lib/modules/manager/bun/artifacts.ts +++ b/lib/modules/manager/bun/artifacts.ts @@ -1,4 +1,5 @@ import is from '@sindresorhus/is'; +import { GlobalConfig } from '../../../config/global'; import { TEMPORARY_ERROR } from '../../../constants/error-messages'; import { logger } from '../../../logger'; import { exec } from '../../../util/exec'; @@ -44,6 +45,12 @@ export async function updateArtifacts( await deleteLocalFile(lockFileName); } + let cmd = 'bun install'; + + if (!GlobalConfig.get('allowScripts') || config.ignoreScripts) { + cmd += ' --ignore-scripts'; + } + const execOptions: ExecOptions = { userConfiguredEnv: config.env, cwdFile: packageFileName, @@ -56,7 +63,7 @@ export async function updateArtifacts( ], }; - await exec('bun install', execOptions); + await exec(cmd, execOptions); const newLockFileContent = await readLocalFile(lockFileName); if ( !newLockFileContent ||