App Engine: node.js dependency with git+https URL
If we deploy a node.js 12 project to App Engine (standard environment) and it has a dependency in package.json
that looks like this:
"some-lib": "git+https://github.com/a/b.git",
Then this will lead to a deployment error when we execute gcloud app deploy
. This is from the App Engine logs:
Step #6 - "builder": npm ERR! Error while executing:
Step #6 - "builder": npm ERR! /usr/bin/git ls-remote -h -t ssh://[email protected]/a/b.git
Step #6 - "builder": npm ERR!
Step #6 - "builder": npm ERR! Host key verification failed.
Step #6 - "builder": npm ERR! fatal: Could not read from remote repository.
So even though the dependency is provided as a HTTPS URL, it will try to fetch it with SSH and this doesn't seem to work on App Engine.
It works if I go to package-lock.json and manually change the version string to start with https, but that's not really a viable solution, because it will be overwritten again.
Any ideas how it can be accomplished to provide a dependency with a GitHub URL (SSH or HTTPS) to App Engine?
Solution 1:
Check first your git configuration in the deployment environment (Google App Engine, in your Google Cloud Console), assuming Git 2.26 or more:
git config --global --show-origin --show-scope-l
git config --system --show-origin --show-scope -l
# if you are in a local repository:
git config --local --show-origin --show-scope -l
Look for any configuration like url."ssh://[email protected]".insteadOf "git+https://github.com"
Such a rule would rewrite the URL, explaining why your initial dependency shows up as an SSH URL.
Solution 2:
As we can see in this issue the problem relies in NPM that caused to convert any git+https reference into git+ssh.
From what I understood, the issue has been patched but is not available on NPM 6, that is the version used in the nodejs12 and nodejs14 enviroment of GAE.
What I suggest is to use nodejs16 as runtime of your App Engine application