diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index d7829197e3..534fcba169 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -52,6 +52,7 @@ "globby": "^11.0.0", "handlebars": "^4.7.6", "helmet": "^4.0.0", + "isbinaryfile": "^4.0.8", "isomorphic-git": "^1.8.0", "jsonschema": "^1.2.6", "knex": "^0.95.1", 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 0c9b997746..58a14a3da5 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts @@ -23,6 +23,7 @@ import { createTemplateAction } from '../../createTemplateAction'; import globby from 'globby'; import nunjucks from 'nunjucks'; import fs from 'fs-extra'; +import { isBinaryFile } from 'isbinaryfile'; /* * Maximise compatibility with Jinja (and therefore cookiecutter) @@ -196,6 +197,7 @@ export function createFetchTemplateAction(options: { for (const location of allEntriesInTemplate) { const isTemplated = !nonTemplatedEntries.has(location); + const outputPath = resolvePath( outputDir, isTemplated ? templater.renderString(location, parameters) : location, @@ -215,9 +217,16 @@ export function createFetchTemplateAction(options: { 'utf-8', ); + const isBinary = await isBinaryFile(Buffer.from(inputFileContents)); + if (isBinary) { + ctx.logger.info( + `Not running templater on contents of ${location} since it is a binary file.`, + ); + } + await fs.outputFile( outputPath, - isTemplated + isTemplated && !isBinary ? templater.renderString(inputFileContents, parameters) : inputFileContents, ); diff --git a/yarn.lock b/yarn.lock index 96299709e4..accbe9389c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15996,6 +15996,11 @@ isarray@^2.0.5: resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== +isbinaryfile@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz#5d34b94865bd4946633ecc78a026fc76c5b11fcf" + integrity sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"