diff --git a/.changeset/weak-needles-peel.md b/.changeset/weak-needles-peel.md new file mode 100644 index 0000000000..5315e2cb66 --- /dev/null +++ b/.changeset/weak-needles-peel.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Correctly recognize whether the cookiecutter command exists diff --git a/plugins/scaffolder-backend/src/scaffolder/stages/templater/cookiecutter.test.ts b/plugins/scaffolder-backend/src/scaffolder/stages/templater/cookiecutter.test.ts index a9227c742e..b040f8760c 100644 --- a/plugins/scaffolder-backend/src/scaffolder/stages/templater/cookiecutter.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/stages/templater/cookiecutter.test.ts @@ -35,6 +35,7 @@ describe('CookieCutter Templater', () => { beforeEach(() => { jest.clearAllMocks(); + commandExists.mockRejectedValue(null); }); it('should write a cookiecutter.json file with the values from the entity', async () => { @@ -228,7 +229,7 @@ describe('CookieCutter Templater', () => { }; jest.spyOn(fs, 'readdir').mockResolvedValueOnce(['newthing'] as any); - commandExists.mockImplementationOnce(() => () => true); + commandExists.mockResolvedValueOnce(true); const templater = new CookieCutter({ containerRunner }); await templater.run({ diff --git a/plugins/scaffolder-backend/src/scaffolder/stages/templater/cookiecutter.ts b/plugins/scaffolder-backend/src/scaffolder/stages/templater/cookiecutter.ts index c0abc44521..5809f7a60e 100644 --- a/plugins/scaffolder-backend/src/scaffolder/stages/templater/cookiecutter.ts +++ b/plugins/scaffolder-backend/src/scaffolder/stages/templater/cookiecutter.ts @@ -70,7 +70,10 @@ export class CookieCutter implements TemplaterBase { [intermediateDir]: '/output', }; - const cookieCutterInstalled = await commandExists('cookiecutter'); + // the command-exists package returns `true` or throws an error + const cookieCutterInstalled = await commandExists('cookiecutter').catch( + () => false, + ); if (cookieCutterInstalled) { await runCommand({ command: 'cookiecutter',