From ed1100739c5988faf260029b625c620d17590565 Mon Sep 17 00:00:00 2001 From: Christopher Zorn Date: Wed, 1 Sep 2021 14:47:58 -0700 Subject: [PATCH] Tests for fixing #7021 to ensure file permissions are copied when templating Signed-off-by: Christopher Zorn --- .../scaffolder/actions/builtin/fetch/template.test.ts | 11 +++++++++++ .../src/scaffolder/actions/builtin/fetch/template.ts | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts index 752212606f..d676af56ca 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts @@ -146,6 +146,10 @@ describe('fetch:template', () => { mockFetchContents.mockImplementation(({ outputPath }) => { mockFs({ [outputPath]: { + 'an-executable.sh': mockFs.file({ + content: '#!/usr/bin/env bash', + mode: parseInt('100755', 8), + }), 'empty-dir-${{ values.count }}': {}, 'static.txt': 'static content', '${{ values.name }}.txt': 'static content', @@ -211,6 +215,13 @@ describe('fetch:template', () => { fs.readFile(`${workspacePath}/target/a-binary-file.png`), ).resolves.toEqual(aBinaryFile); }); + it('copies files and maintains the original file permissions', async () => { + await expect( + fs + .stat(`${workspacePath}/target/an-executable.sh`) + .then(fObj => fObj.mode), + ).resolves.toEqual(parseInt('100755', 8)); + }); }); describe('copyWithoutRender', () => { diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts index 13dfb2486e..5e4e4406fa 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts @@ -272,8 +272,8 @@ export function createFetchTemplateAction(options: { renderContents ? templater.renderString(inputFileContents, context) : inputFileContents, + { mode: statsObj.mode }, ); - await fs.chmod(outputPath, statsObj.mode); } } }