-
Notifications
You must be signed in to change notification settings - Fork 4k
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
(@aws-cdk/aws-lambda-nodejs): Does not use closest/first lockfile. #15847
Comments
Sorry submitted too soon by accident. It is done now. |
The correct solution here would be to stop when the first lock file is found. And if two lock files are found in the same (lowest) directory, it should error and expect Since we have a workaround for this, marking it as a p2. |
This just took me a lot of time to debug. A random yarn.lock file that was located in a parent folder some levels above my project caused my build to fail. If there is a lock file on project level it really should be used before anything else. |
Had the same experience as @bedaka. To me this feels also like a potential security issue if CDK ends up using some random lock file from outside project folder. |
fixes #15847 A bug in the automatic lockfile finding logic causes lockfiles higher in the directory tree to be used over lower/closer ones. This is because the code traverses the tree once per lockfile type in series, stopping when it finds one: https://github.com/aws/aws-cdk/blob/58fda9104ad884026d578dc0602f7d64dd533f6d/packages/%40aws-cdk/aws-lambda-nodejs/lib/function.ts#L137-L139 This updates the code to traverse the tree once looking for all the lockfile types at the same time and stop when one or more is found. If multiple are found at the same level, an error is thrown (per #15847 (comment)). ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
|
…16629) fixes aws#15847 A bug in the automatic lockfile finding logic causes lockfiles higher in the directory tree to be used over lower/closer ones. This is because the code traverses the tree once per lockfile type in series, stopping when it finds one: https://github.com/aws/aws-cdk/blob/58fda9104ad884026d578dc0602f7d64dd533f6d/packages/%40aws-cdk/aws-lambda-nodejs/lib/function.ts#L137-L139 This updates the code to traverse the tree once looking for all the lockfile types at the same time and stop when one or more is found. If multiple are found at the same level, an error is thrown (per aws#15847 (comment)). ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
NodejsFunction
bundling does not use the correct lockfile if a lockfile for a different package manger exists in a parent directory.aws-cdk/packages/@aws-cdk/aws-lambda-nodejs/lib/function.ts
Lines 137 to 139 in 58fda91
This code searches the current and all parent directories for PNPM, then yarn, then NPM lock files. So even if an NPM lockfile exists in the current directory, if a PNPM or yarn lock file exists in any parent directory, CDK will use the PNPM or yarn lockfile. Meaning, if cwd was
/fu/bar/baz/
,/fu/yarn.lock
would be used instead of/fu/bar/baz/package-lock.json
.Reproduction Steps
Assuming
process.cwd() === '/home/mike/my-cdk'
What did you expect to happen?
/home/mike/my-cdk/package-lock.json
is selected as the lockfile. Bundles successfully.What actually happened?
/home/mike/yarn.lock
is selected as the lockfile. Bundling fails.Even with the
--verbose
flag, the logs only provide this cryptic message:bash: yarn: command not found
. In an attempt to fix, I tried installing yarn. Then the error became:error Couldn't find a package.json file in "/home/mike"
. At the time, I did not realize there was an errantyarn.lock
file in my home directory, so this message was confusing as well.Environment
Other
Workaround is to simply provide the
depsLockFilePath
param to theNodejsFunction
constructor. However, as it stands, it seems one should always include this param as an unrelated lockfile outside the project could breakcdk synth
.Instead of walking up directories 3 times looking for the 3 lockfiles, instead walk up once and look for all 3. This would correct the logic to use the first/closest lockfile. Something like:
Also, enabling more diagnostic messaging around bundling with the verbose flag would be helpful. If the project root, lockfile path, etc. used were reported I would have been able to immediately identify the problem. For example, logging
this.packageManager
inBundling.prototype.tryBundle
.This is 🐛 Bug Report
The text was updated successfully, but these errors were encountered: