From c18a3c2ae035f3e94bc7c6e621929e0e5dd8141e Mon Sep 17 00:00:00 2001 From: Dominik Henneke Date: Fri, 18 Jun 2021 15:43:19 +0200 Subject: [PATCH] Correctly recognize whether the cookiecutter command exists Signed-off-by: Dominik Henneke --- .changeset/weak-needles-peel.md | 5 +++++ .../src/scaffolder/stages/templater/cookiecutter.test.ts | 3 ++- .../src/scaffolder/stages/templater/cookiecutter.ts | 5 ++++- 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 .changeset/weak-needles-peel.md 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',