From 59752e1037194372db1e69fa8af792f8793d7208 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 10 Jun 2021 15:18:09 +0200 Subject: [PATCH] codemods: fix execution of jscodeshift on windows Signed-off-by: Patrik Oldsberg --- .changeset/funny-toys-talk.md | 5 +++++ packages/codemods/src/action.ts | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 .changeset/funny-toys-talk.md diff --git a/.changeset/funny-toys-talk.md b/.changeset/funny-toys-talk.md new file mode 100644 index 0000000000..6e6a779ab8 --- /dev/null +++ b/.changeset/funny-toys-talk.md @@ -0,0 +1,5 @@ +--- +'@backstage/codemods': patch +--- + +Fix execution of `jscodeshift` on windows. diff --git a/packages/codemods/src/action.ts b/packages/codemods/src/action.ts index 46e50ead77..c3eba8aecc 100644 --- a/packages/codemods/src/action.ts +++ b/packages/codemods/src/action.ts @@ -18,6 +18,7 @@ import { relative as relativePath } from 'path'; import { spawn } from 'child_process'; import { Command } from 'commander'; import { findPaths } from '@backstage/cli-common'; +import { platform } from 'os'; import { ExitCodeError } from './errors'; // eslint-disable-next-line no-restricted-syntax @@ -50,8 +51,18 @@ export function createCodemodAction(name: string) { console.log(`Running jscodeshift with these arguments: ${args.join(' ')}`); - const jscodeshiftScript = require.resolve('.bin/jscodeshift'); - const child = spawn(process.argv0, [jscodeshiftScript, ...args], { + let command; + if (platform() === 'win32') { + command = 'jscodeshift'; + } else { + // jscodeshift ships a slightly broken bin script with windows + // line endings so we need to execute it using node rather than + // letting the `#!/usr/bin/env node` take care of it + command = process.argv0; + args.unshift(require.resolve('.bin/jscodeshift')); + } + + const child = spawn(command, args, { stdio: 'inherit', shell: true, env: {