Skip to content

DEPS: Update Jest#2579

Draft
catloversg wants to merge 1 commit into
bitburner-official:devfrom
catloversg:pull-request/deps/Update-Jest
Draft

DEPS: Update Jest#2579
catloversg wants to merge 1 commit into
bitburner-official:devfrom
catloversg:pull-request/deps/Update-Jest

Conversation

@catloversg

Copy link
Copy Markdown
Collaborator

This PR updates Jest and its related deps to v30, which is the latest major version. Jest v29 is fairly old, and its deps have to use other outdated deps. For example, jest-environment-jsdom v29 depends on jsdom v20, which is why many of its deps end up being overridden.

While testing this PR, I encountered multiple issues caused by babel-plugin-transform-barrels. This plugin was added a long time ago to improve Jest test performance. However, in #2246, I noticed that after upgrading Jest-related dependencies, some tests failed on GitHub CI while still passing on my machine. After more testing now, I found even more issues.

I tested many combinations of environments (my machines and GitHub CI), babel-plugin-transform-barrels versions, and patches (both in Bitburner and babel-plugin-transform-barrels). Unfortunately, I did not document every combination, as I did not expect the situation to become this complex. Below are some notable cases I recorded:

  • Plugin v1.0.17: Work on GitHub CI, but not work on my Windows machine.[1]
  • Plugin v1.0.23 with barrel imports removed in Bladeburner code: Work on my Windows machine, but not work on GitHub CI.[2]

Log [1]:

 FAIL  test/jest/Netscript/Darknet.test.ts
  ● Test suite failed to run

    TypeError: C:\Games\BitburnerDeps\src\Bladeburner\utils\terminalShorthands.ts: The "path" argument must be of type string. Received null

      15 |   });
      16 |
    > 17 |   return babelTransformer.process(sourceText, sourcePath, options);
         |                           ^
      18 | }
      19 |

      at PackageManager.getMainPackageOfModule (node_modules/babel-plugin-transform-barrels/src/packages.js:176:32)
      at ImportSpecifier.get cjsPath [as cjsPath] (node_modules/babel-plugin-transform-barrels/src/barrel.js:439:39)
      at ImportSpecifier.get path [as path] (node_modules/babel-plugin-transform-barrels/src/barrel.js:461:21)
      at importDeclarationVisitor (node_modules/babel-plugin-transform-barrels/src/main.js:26:26)
      at PluginPass.<anonymous> (node_modules/babel-plugin-transform-barrels/src/main.js:80:7)
      at call (node_modules/@babel/traverse/src/visitors.ts:303:14)
      at NodePath.call [as _call] (node_modules/@babel/traverse/src/path/context.ts:36:20)
      at NodePath.call (node_modules/@babel/traverse/src/path/context.ts:21:18)
      at NodePath.call [as visit] (node_modules/@babel/traverse/src/path/context.ts:97:31)
      at TraversalContext.visit [as visitQueue] (node_modules/@babel/traverse/src/context.ts:148:16)
      at TraversalContext.visitQueue [as visitMultiple] (node_modules/@babel/traverse/src/context.ts:99:17)
      at TraversalContext.visitMultiple [as visit] (node_modules/@babel/traverse/src/context.ts:178:19)
      at visit (node_modules/@babel/traverse/src/traverse-node.ts:208:17)
      at NodePath.visit (node_modules/@babel/traverse/src/path/context.ts:104:33)
      at TraversalContext.visit [as visitQueue] (node_modules/@babel/traverse/src/context.ts:148:16)
      at TraversalContext.visitQueue [as visitSingle] (node_modules/@babel/traverse/src/context.ts:109:19)
      at TraversalContext.visitSingle [as visit] (node_modules/@babel/traverse/src/context.ts:180:19)
      at visit (node_modules/@babel/traverse/src/traverse-node.ts:208:17)
      at traverse (node_modules/@babel/traverse/src/index.ts:83:15)
      at transformFile (node_modules/@babel/core/src/transformation/index.ts:119:15)
          at transformFile.next (<anonymous>)
      at transformFile (node_modules/@babel/core/src/transformation/index.ts:49:12)
          at run.next (<anonymous>)
      at transform (node_modules/@babel/core/src/transform.ts:29:20)
          at transform.next (<anonymous>)
      at evaluateSync (node_modules/gensync/index.js:251:28)
      at sync (node_modules/gensync/index.js:89:14)
      at fn (node_modules/@babel/core/src/errors/rewrite-stack-trace.ts:99:14)
      at transformSync (node_modules/@babel/core/src/transform.ts:66:52)
      at Module.process (file:/C:/Games/BitburnerDeps/test/jest/config/babelTransform.js:17:27)
      at ScriptTransformer.transformSource (node_modules/@jest/transform/build/index.js:415:31)
      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/index.js:512:40)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/index.js:551:19)
      at Object.require (src/Bladeburner/Bladeburner.ts:51:1)
      at Object.require (src/PersonObjects/Player/PlayerObjectBladeburnerMethods.ts:2:1)
      at Object.require (src/PersonObjects/Player/PlayerObject.ts:13:1)
      at Object.require (src/engine.tsx:12:1)
      at Object.require (src/ui/React/hooks.ts:2:1)
      at Object.require (src/ui/React/LogBoxManager.tsx:26:1)
      at Object.require (src/NetscriptFunctions/UserInterface.ts:12:1)
      at Object.require (src/NetscriptFunctions.ts:70:1)
      at Object.require (src/NetscriptWorker.ts:12:1)
      at Object.require (src/NetscriptPort.ts:3:1)
      at Object.require (src/Netscript/NetscriptHelpers.tsx:29:1)
      at Object.require (src/DarkNet/effects/offlineServerHandling.ts:4:1)

Log [2]:

FAIL test/jest/Darknet/Darknet.test.ts
  ● Test suite failed to run

    /home/runner/work/bitburner-src/bitburner-src/src/ui/MD/MD.tsx: Unable to resolve the /home/runner/work/bitburner-src/bitburner-src/node_modules/react-markdown/lib/react-markdownfalse path from the /home/runner/work/bitburner-src/bitburner-src/src/ui/MD/MD.tsx file

      15 |   });
      16 |
    > 17 |   return babelTransformer.process(sourceText, sourcePath, options);
         |                           ^
      18 | }
      19 |

      at Resolver.resolve (node_modules/babel-plugin-transform-barrels/src/resolver.js:54:15)
      at importDeclarationVisitor (node_modules/babel-plugin-transform-barrels/src/main.js:18:39)
      at PluginPass.<anonymous> (node_modules/babel-plugin-transform-barrels/src/main.js:80:7)
      at call (node_modules/@babel/traverse/src/visitors.ts:303:14)
      at NodePath.call [as _call] (node_modules/@babel/traverse/src/path/context.ts:36:20)
      at NodePath.call (node_modules/@babel/traverse/src/path/context.ts:21:18)
      at NodePath.call [as visit] (node_modules/@babel/traverse/src/path/context.ts:97:31)
      at TraversalContext.visit [as visitQueue] (node_modules/@babel/traverse/src/context.ts:148:16)
      at TraversalContext.visitQueue [as visitMultiple] (node_modules/@babel/traverse/src/context.ts:99:17)
      at TraversalContext.visitMultiple [as visit] (node_modules/@babel/traverse/src/context.ts:178:19)
      at visit (node_modules/@babel/traverse/src/traverse-node.ts:208:17)
      at NodePath.visit (node_modules/@babel/traverse/src/path/context.ts:104:33)
      at TraversalContext.visit [as visitQueue] (node_modules/@babel/traverse/src/context.ts:148:16)
      at TraversalContext.visitQueue [as visitSingle] (node_modules/@babel/traverse/src/context.ts:109:19)
      at TraversalContext.visitSingle [as visit] (node_modules/@babel/traverse/src/context.ts:180:19)
      at visit (node_modules/@babel/traverse/src/traverse-node.ts:208:17)
      at traverse (node_modules/@babel/traverse/src/index.ts:83:15)
      at transformFile (node_modules/@babel/core/src/transformation/index.ts:119:15)
          at transformFile.next (<anonymous>)
      at transformFile (node_modules/@babel/core/src/transformation/index.ts:49:12)
          at run.next (<anonymous>)
      at transform (node_modules/@babel/core/src/transform.ts:29:20)
          at transform.next (<anonymous>)
      at evaluateSync (node_modules/gensync/index.js:251:28)
      at sync (node_modules/gensync/index.js:89:14)
      at fn (node_modules/@babel/core/src/errors/rewrite-stack-trace.ts:99:14)
      at transformSync (node_modules/@babel/core/src/transform.ts:66:52)
      at Module.process (file:/home/runner/work/bitburner-src/bitburner-src/test/jest/config/babelTransform.js:17:27)
      at ScriptTransformer.transformSource (node_modules/@jest/transform/build/index.js:415:31)
      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/index.js:512:40)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/index.js:551:19)
      at Object.require (src/Documentation/ui/DocumentationRoot.tsx:6:1)
      at Object.require (src/ui/GameRoot.tsx:43:1)
      at Object.require (src/Terminal/Terminal.ts:2:1)
      at Object.require (src/Terminal.ts:1:1)
      at Object.require (src/Script/RunningScript.ts:9:1)
      at Object.require (src/Server/AllServers.ts:10:1)
      at Object.require (src/DarkNet/models/DarknetServerOptions.ts:1:1)
      at Object.require (src/DarkNet/controllers/ServerGenerator.ts:1:1)
      at Object.require (test/jest/Darknet/Darknet.test.ts:1:1)

IIRC, [2] is the same issue I encountered in #2246.

At this point, I'm fairly sure that there are bugs in babel-plugin-transform-barrels. However, removing the plugin causes Jest tests to run much slower (x2 time on my machines), which is why I mark this PR as a draft one.

Going forward, if we need to upgrade Jest urgently for any reason, we can merge this PR and accept the slower test performance. Otherwise, we can continue using the current Jest version and wait until the issues in babel-plugin-transform-barrels are resolved.

@d0sboots

Copy link
Copy Markdown
Collaborator

Got it. I will ignore this for the time being.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants