-
Notifications
You must be signed in to change notification settings - Fork 3.9k
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
fix: multiple breakages due to jest version upgrade #7667
Conversation
Many more files were added after the approval
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
(This makes sure all the graceful-fs'es dedupe to the right version so there's only one copy of the cached cwd while jest executes)
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
…the hash of the asset" This reverts commit f479074.
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
Couple of things here: **require.cache** In version `v25.5.0`, jest introduced an [implementation](jestjs/jest#9841) of their own to the `require.cache` object. It seems that it doesn't handle caching `json` modules properly, which causes our code to fail because `mod.paths` is `undefined` when we are querying for `json` files that were required (for example `package.json` or `cloud-assembly.schema.json`). https://github.com/aws/aws-cdk/blob/07fe642e38118e24837b492fa182737fc41bb429/packages/%40aws-cdk/core/lib/private/runtime-info.ts#L66 ```console TypeError: Cannot read property 'map' of undefined ``` The "fix" was to add a null check to prevent failure when looking up modules who don't have the `paths` property defined. Note that this was only observed in test environments using `jest > v25.5.0`, not during actual runtime of `cdk synth`. This is because `jest` manipulates the built-in `require` module of `nodejs`. **graceful-fs** In version `v25.5.0`, jest [added](jestjs/jest#9443) a dependency on the `graceful-fs` package. The version they depend on (`4.2.4`) differs from the version that we bring (`4.2.3`). This caused the `graceful-fs` dependency that comes from `jest` no to be deduped by node at installation. In turn, this caused multiple copies of the library to be installed on disk. The `graceful-fs` package monkey patches the `process.chdir` and `process.cwd` functions with a cached version for better performance. For reasons not completely clear to us, the existence of multiple copies of the module, caused `process.cwd()` to return incorrect cached results, essentially always returning the directory that the process was started from, without consideration to calls to `process.chdir`. This broke `decdk` (and possibly many more) tests which rely on `process.chdir`. Fixes #7657
Not ideal, but seems like the most pragmatic thing to do.
The PR also comes with an upgrade to jest so that we won't still use
25.4.0
which doesn't have these problems.This essentially replaces this Dependabot PR for jest, which is naturally broken due to the issues described here.
Commit Message
fix: multiple breakages due to jest version upgrade (#7667)
Couple of things here:
require.cache
In version
v25.5.0
, jest introduced an implementation of their own to therequire.cache
object. It seems that it doesn't handle cachingjson
modules properly, which causes our code to fail becausemod.paths
isundefined
when we are querying forjson
files that were required (for examplepackage.json
orcloud-assembly.schema.json
).aws-cdk/packages/@aws-cdk/core/lib/private/runtime-info.ts
Line 66 in 07fe642
TypeError: Cannot read property 'map' of undefined
The "fix" was to add a null check to prevent failure when looking up modules who don't have the
paths
property defined.Note that this was only observed in test environments using
jest > v25.5.0
, not during actual runtime ofcdk synth
. This is becausejest
manipulates the built-inrequire
module ofnodejs
.graceful-fs
In version
v25.5.0
, jest added a dependency on thegraceful-fs
package. The version they depend on (4.2.4
) differs from the version that we bring (4.2.3
). This caused thegraceful-fs
dependency that comes fromjest
no to be deduped by node at installation. In turn, this caused multiple copies of the library to be installed on disk.The
graceful-fs
package monkey patches theprocess.chdir
andprocess.cwd
functions with a cached version for better performance.For reasons not completely clear to us, the existence of multiple copies of the module, caused
process.cwd()
to return incorrect cached results, essentially always returning the directory that the process was started from, without consideration to calls toprocess.chdir
. This brokedecdk
(and possibly many more) tests which rely onprocess.chdir
.Fixes #7657
End Commit Message
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license