Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Installation fails on Node.js 14 due to obsolete "keytar" dependency #13531

Closed
1 task done
octogonz opened this issue Feb 2, 2021 · 6 comments
Closed
1 task done

Installation fails on Node.js 14 due to obsolete "keytar" dependency #13531

octogonz opened this issue Feb 2, 2021 · 6 comments
Assignees
Labels
Azure.Identity bug This issue requires a change to an existing behavior in the product in order to be resolved. Client This issue points to a problem in the data-plane of the library. customer-reported Issues that are reported by GitHub users external to the Azure organization.
Milestone

Comments

@octogonz
Copy link

octogonz commented Feb 2, 2021

  • Package Name: @azure/identity
  • Package Version: 1.2.2
  • Operating system: Windows
  • nodejs
    • version: 14.15.3

Describe the bug

The @azure/identity has this problematic dependency:

"optionalDependencies": {
"keytar": "^5.4.0"
},

To Reproduce

We originally encountered this with the Rush tool, because it recently picked up a dependency on @azure/identity. The downstream bug is here: microsoft/rushstack#2467

Steps to reproduce the behavior:

  1. Start with a Windows machine that does not have Python or a C++ compiler.

  2. Use nvm-windows to select Node.js 14.15.3 (the current LTS release):

    C:\> nvm install 14.15.3
    C:\> nvm use 14.15.3
  3. Now try to install Rush:

    C:\> npm install --global @microsoft/rush

Expected result: It should install without problems.

Actual result: The installation fails:

> [email protected] install C:\Program 
Files\nodejs\node_modules\@microsoft\rush\node_modules\keytar > prebuild-install 
|| node-gyp rebuild

prebuild-install WARN install No prebuilt binaries found (target=14.15.3 
runtime=node arch=x64 libc= platform=win32)

C:\Program Files\nodejs\node_modules\@microsoft\rush\node_modules\keytar>if not 
defined npm_config_node_gyp (node 
"C:\Users\Owner\AppData\Roaming\nvm\v14.15.3\node_modules\npm\node_modules\npm-
lifecycle\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  
else (node 
"C:\Users\Owner\AppData\Roaming\nvm\v14.15.3\node_modules\npm\node_modules\node-
gyp\bin\node-gyp.js" rebuild ) gyp ERR! find Python gyp ERR! find Python Python 
is not set from command line or npm configuration gyp ERR! find Python Python is 
not set from environment variable PYTHON gyp ERR! find Python checking if 
"python" can be used gyp ERR! find Python - "python" is not in PATH or produced 
an error gyp ERR! find Python checking if "python2" can be used gyp ERR! find 
Python - "python2" is not in PATH or produced an error gyp ERR! find Python 
checking if "python3" can be used gyp ERR! find Python - "python3" is not in 
PATH or produced an error gyp ERR! find Python checking if the py launcher can 
be used to find Python 2 gyp ERR! find Python - "py.exe" is not in PATH or 
produced an error gyp ERR! find Python checking if Python is 
C:\Python27\python.exe gyp ERR! find Python - "C:\Python27\python.exe" could not 
be run gyp ERR! find Python checking if Python is C:\Python37\python.exe gyp 
ERR! find Python - "C:\Python37\python.exe" could not be run gyp ERR! find 
Python gyp ERR! find Python 
********************************************************** gyp ERR! find Python 
You need to install the latest version of Python. gyp ERR! find Python Node-gyp 
should be able to find and use Python. If not, gyp ERR! find Python you can try 
one of the following options: gyp ERR! find Python - Use the switch 
--python="C:\Path\To\python.exe" gyp ERR! find Python   (accepted by both 
node-gyp and npm) gyp ERR! find Python - Set the environment variable PYTHON gyp 
ERR! find Python - Set the npm configuration variable python: gyp ERR! find 
Python   npm config set python "C:\Path\To\python.exe" gyp ERR! find Python For 
more information consult the documentation at: gyp ERR! find Python 
https://github.com/nodejs/node-gyp#installation gyp ERR! find Python 
********************************************************** gyp ERR! find Python 
gyp ERR! configure error gyp ERR! stack Error: Could not find any Python 
installation to use gyp ERR! stack     at PythonFinder.fail 
(C:\Users\Owner\AppData\Roaming\nvm\v14.15.3\node_modules\npm\node_modules\node-
gyp\lib\find-python.js:307:47) gyp ERR! stack     at PythonFinder.runChecks 
(C:\Users\Owner\AppData\Roaming\nvm\v14.15.3\node_modules\npm\node_modules\node-
gyp\lib\find-python.js:136:21) gyp ERR! stack     at PythonFinder.<anonymous> 
(C:\Users\Owner\AppData\Roaming\nvm\v14.15.3\node_modules\npm\node_modules\node-
gyp\lib\find-python.js:225:16) gyp ERR! stack     at 
PythonFinder.execFileCallback 
(C:\Users\Owner\AppData\Roaming\nvm\v14.15.3\node_modules\npm\node_modules\node-
gyp\lib\find-python.js:271:16) gyp ERR! stack     at exithandler 
(child_process.js:315:5) gyp ERR! stack     at ChildProcess.errorhandler 
(child_process.js:327:5) gyp ERR! stack     at ChildProcess.emit 
(events.js:315:20) gyp ERR! stack     at Process.ChildProcess._handle.onexit 
(internal/child_process.js:275:12) gyp ERR! stack     at onErrorNT 
(internal/child_process.js:465:16) gyp ERR! stack     at 
processTicksAndRejections (internal/process/task_queues.js:80:21) gyp ERR! 
System Windows_NT 10.0.18363 gyp ERR! command "C:\\Program 
Files\\nodejs\\node.exe" 
"C:\\Users\\Owner\\AppData\\Roaming\\nvm\\v14.15.3\\node_modules\\npm\\
node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" gyp ERR! cwd C:\Program 
Files\nodejs\node_modules\@microsoft\rush\node_modules\keytar gyp ERR! node -v 
v14.15.3 gyp ERR! node-gyp -v v5.1.0 gyp ERR! not ok npm WARN optional SKIPPING 
OPTIONAL DEPENDENCY: [email protected] 
(node_modules\@microsoft\rush\node_modules\keytar): npm WARN optional SKIPPING 
OPTIONAL DEPENDENCY: [email protected] install: `prebuild-install || node-gyp 
rebuild` npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1

Note that even though @azure/identity marks this dependency as "optional", the operation still fails:

  • The NPM process exit code is nonzero, causing scripts to fail
  • The above "wall of text" unambiguously communicates to end users that something went wrong

Recommended fix

  • Upgrade keytar by replacing ^5.4.0 with ^7.3.0 which hopefully ships with Node 14.x-compatible binaries; OR
  • Ideally, eliminate keytar and replace it with a different library that is not encumbered by node-gyp binary dependencies
@ghost ghost added needs-triage Workflow: This is a new issue that needs to be triaged to the appropriate team. customer-reported Issues that are reported by GitHub users external to the Azure organization. question The issue doesn't require a change to the product in order to be resolved. Most issues start as that labels Feb 2, 2021
@octogonz
Copy link
Author

octogonz commented Feb 2, 2021

If keytar cannot be easily upgraded or replaced, a third possibility would be to ask the keytar maintainers to publish Node 14 binaries for the 5.6.0 version series.

@ramya-rao-a ramya-rao-a added Azure.Identity Client This issue points to a problem in the data-plane of the library. labels Feb 2, 2021
@ghost ghost removed the needs-triage Workflow: This is a new issue that needs to be triaged to the appropriate team. label Feb 2, 2021
@ghost ghost added the needs-team-attention Workflow: This issue needs attention from Azure service team or SDK team label Feb 2, 2021
@sophiajt
Copy link
Contributor

sophiajt commented Feb 2, 2021

@octogonz - thank you for the report. Can you confirm that the build fails at this point? The keytar dependency should be optional, and I've seen it report warnings like that but the build still completed successfully.

@sophiajt sophiajt added needs-author-feedback Workflow: More information is needed from author to address the issue. and removed needs-team-attention Workflow: This issue needs attention from Azure service team or SDK team labels Feb 2, 2021
@octogonz
Copy link
Author

octogonz commented Feb 2, 2021

NPM returns a nonzero exit code which the build scripts interpret as an error.

Also, the log shows ERR! like 30+ times. I wouldn't consider that a "warning". :-)

node-gyp is a complex development tool meant for package maintainers to use to make prebuilt binaries. It is invoked via "postinstall" only as a last resort when the package maintainers have neglected to provide a binary. In this case maybe because it is an obsolete version of keytar that is not being maintained.

@ghost ghost added needs-team-attention Workflow: This issue needs attention from Azure service team or SDK team and removed needs-author-feedback Workflow: More information is needed from author to address the issue. labels Feb 2, 2021
@ramya-rao-a ramya-rao-a added this to the [2021] February milestone Feb 3, 2021
@ramya-rao-a ramya-rao-a added bug This issue requires a change to an existing behavior in the product in order to be resolved. and removed needs-team-attention Workflow: This issue needs attention from Azure service team or SDK team question The issue doesn't require a change to the product in order to be resolved. Most issues start as that labels Feb 3, 2021
ghost pushed a commit that referenced this issue Feb 3, 2021
To help address #13531, update the keytar dependency to the latest version.
@sadasant sadasant modified the milestones: [2021] February, [2021] March Feb 9, 2021
@octogonz
Copy link
Author

When will PR #13564 be published?

@sophiajt
Copy link
Contributor

@octogonz - it should be available now as part of the @azure/identity 1.2.3 release.

@octogonz
Copy link
Author

Thanks!

@github-actions github-actions bot locked and limited conversation to collaborators Apr 12, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Azure.Identity bug This issue requires a change to an existing behavior in the product in order to be resolved. Client This issue points to a problem in the data-plane of the library. customer-reported Issues that are reported by GitHub users external to the Azure organization.
Projects
None yet
Development

No branches or pull requests

4 participants