From eacec5f49060d3dfcdc3c7043115619e4bb22864 Mon Sep 17 00:00:00 2001 From: Luke Karrys Date: Mon, 30 Oct 2023 13:02:56 -0700 Subject: [PATCH] fix: add back bin/node-gyp-bin/node-gyp files (#6941) This was an unintended breaking change as part of #6554. The `node-gyp` bin files are not used by the CLI directly but they are relied on by other tooling. This partially reverts commit 3a7378d889707d2a4c1f8a6397dda87825e9f5a3. --- .gitattributes | 2 +- bin/node-gyp-bin/node-gyp | 6 ++++++ bin/node-gyp-bin/node-gyp.cmd | 5 +++++ test/bin/windows-shims.js | 30 ++++++++++++++++++++++++------ 4 files changed, 36 insertions(+), 7 deletions(-) create mode 100755 bin/node-gyp-bin/node-gyp create mode 100755 bin/node-gyp-bin/node-gyp.cmd diff --git a/.gitattributes b/.gitattributes index 5bfd3199c0181..5d3dbc3b3ac65 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7,7 +7,7 @@ /configure text eol=lf # our cmd scripts always need to be CRLF -/bin/*.cmd text eol=crlf +/bin/**/*.cmd text eol=crlf # ignore all line endings in node_modules since we dont control that /node_modules/** -text diff --git a/bin/node-gyp-bin/node-gyp b/bin/node-gyp-bin/node-gyp new file mode 100755 index 0000000000000..70efb6f339f76 --- /dev/null +++ b/bin/node-gyp-bin/node-gyp @@ -0,0 +1,6 @@ +#!/usr/bin/env sh +if [ "x$npm_config_node_gyp" = "x" ]; then + node "`dirname "$0"`/../../node_modules/node-gyp/bin/node-gyp.js" "$@" +else + "$npm_config_node_gyp" "$@" +fi diff --git a/bin/node-gyp-bin/node-gyp.cmd b/bin/node-gyp-bin/node-gyp.cmd new file mode 100755 index 0000000000000..083c9c58a502a --- /dev/null +++ b/bin/node-gyp-bin/node-gyp.cmd @@ -0,0 +1,5 @@ +if not defined npm_config_node_gyp ( + node "%~dp0\..\..\node_modules\node-gyp\bin\node-gyp.js" %* +) else ( + node "%npm_config_node_gyp%" %* +) diff --git a/test/bin/windows-shims.js b/test/bin/windows-shims.js index 5e8a75842293d..5fa6ff142b737 100644 --- a/test/bin/windows-shims.js +++ b/test/bin/windows-shims.js @@ -1,20 +1,23 @@ const t = require('tap') const { spawnSync } = require('child_process') const { resolve, join, extname, basename, sep } = require('path') -const { copyFileSync, readFileSync, chmodSync, readdirSync, rmSync } = require('fs') +const { copyFileSync, readFileSync, chmodSync, readdirSync, rmSync, statSync } = require('fs') const Diff = require('diff') const { sync: which } = require('which') const { version } = require('../../package.json') -const ROOT = resolve(__dirname, '../..') -const BIN = join(ROOT, 'bin') -const SHIMS = readdirSync(BIN).reduce((acc, shim) => { - if (extname(shim) !== '.js') { - acc[shim] = readFileSync(join(BIN, shim), 'utf-8') +const readNonJsFiles = (dir) => readdirSync(dir).reduce((acc, shim) => { + const p = join(dir, shim) + if (extname(p) !== '.js' && !statSync(p).isDirectory()) { + acc[shim] = readFileSync(p, 'utf-8') } return acc }, {}) +const ROOT = resolve(__dirname, '../..') +const BIN = join(ROOT, 'bin') +const SHIMS = readNonJsFiles(BIN) +const NODE_GYP = readNonJsFiles(join(BIN, 'node-gyp-bin')) const SHIM_EXTS = [...new Set(Object.keys(SHIMS).map(p => extname(p)))] // windows requires each segment of a command path to be quoted when using shell: true @@ -63,6 +66,21 @@ t.test('shim contents', t => { }) }) +t.test('node-gyp', t => { + // these files need to exist to avoid breaking yarn 1.x + + for (const [key, file] of Object.entries(NODE_GYP)) { + t.match(file, /npm_config_node_gyp/, `${key} contains env var`) + t.match( + file, + /[\\/]\.\.[\\/]\.\.[\\/]node_modules[\\/]node-gyp[\\/]bin[\\/]node-gyp\.js/, + `${key} contains path` + ) + } + + t.end() +}) + t.test('run shims', t => { const path = t.testdir({ ...SHIMS,