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

Node 18 & Jest 29 #2210

Merged
merged 43 commits into from
Nov 22, 2022
Merged

Conversation

AlbertoBrusa
Copy link
Contributor

@AlbertoBrusa AlbertoBrusa commented Nov 17, 2022

  • Add Node 18 to test Matrix
    • WIndows
    • Linux
  • Upgrade Jest
  • Upgrade rollup-plugin-eslint 5
  • Ensure tests pass

Unrelated to Node 18 support had to pin rollup-plugin-eslint to 4.10.1 as newer versions drop support for Node 14.17 and below - we can update to newer versions once we drop Node 14 altogether
rollup-plugin-eslint versuib 4.10.3 has now re-introduced node 14.17 support: egoist/rollup-plugin-esbuild#358

The native fetch in node 18 breaks something in the version of the source-map package used by v8-to-istanbul that jest 26 depends on.
We can't update Jest until next major Modular release as it could be breaking.
I've resolved the version of v8-to-istanbul to ^9.0.0 and it fixes the issue and passes our tests, hard to know for sure if this could be breaking for any Jest functionality we don't use in our tests.

This PR is now for Modular 4.0

Summary of changes:

  • Added Node 18 engine support
  • Added Node 18 to test matrix
  • Upgraded Jest from 26 to 29 as 26 was not Node 18 compatible
  • Updated Snapshots to new, cleaner Jest default (Removing escape characters, types etc)
  • Updated default test environment for testing Modular to Node (Should be faster, does not affect Modulars users who will still default to JSDOM)
  • Updated tests that need to run in JSDOM to do so explicitly
  • Updated how Jest config is passed when Modular shells out to Jest:
    • For Linux/Mac the object is still passed as a string (removed the quotation marks as new Jest no longer accepted them)
    • For Windows, write the config to a temporary config file in a temp directory and pass that (as Windows doesn't accept JSON objects as strings in the cli unless its enclosed in quotation marks)
  • Had to add some eslint ignore comments/typings to a file that was never complained about: svgr.ts. Not sure what made this pop up all of a sudden - potentially due to newer Typescript I'm using or a dependency update under the hood - added typescript ignores instead of changing functionality that I don't fully understand, but happy to listen to suggestions for this.
  • Extracted Jest Option descriptions we previously grabbed from Jest node-module files into our own file we control
  • Jest test flag --watchAll is now false regardless of if CI or not (previously true if not CI)

In a separate PR I will update ESLint & required TS to >4.5 to comply with Jest JSDOM test environment requirement, at which point the Jest 29 and Node 18 Support work will be done.

… flag, and adding __fixtures__ to the lint exception list made tests fail)
@changeset-bot
Copy link

changeset-bot bot commented Nov 17, 2022

🦋 Changeset detected

Latest commit: b173d0c

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 6 packages
Name Type
create-modular-react-app Major
eslint-config-modular-app Major
modular-scripts Major
modular-template-app Patch
modular-template-esm-view Patch
modular-template-view Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR


### Upgraded to ESLint 8

(NOT YET DONE, ADD ANY ISSUES/BREAKING CHANGES)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Started documenting Modular 4.0 changes - will be updating it in future PRs before release

@@ -5,7 +5,7 @@
"packages/**"
],
"engines": {
"node": "^14.17.0 || >=16.0.0"
"node": "^14.18.0 || >=16.10.0 || >=18.0.0"
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Matched node support to what Jest 29 supports

@@ -14,7 +14,7 @@
"lint:fix": "yarn lint --fix",
"create-modular-react-app": "ts-node packages/create-modular-react-app/src/cli.ts",
"modular": "ts-node packages/modular-scripts/src/cli.ts",
"test": "yarn modular test --watchAll false --runInBand",
"test": "yarn modular test --watchAll false --runInBand --env node",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Our tests are mostly back end tests that don't require the JSDOM env that we set as default for Modular (Modular users will continue to use JSDOM as default)
Modular tests that build/run front end components have been changed to specify JSDOM as the env (ignoring the flag passed here)

@@ -59,7 +59,7 @@
"@types/global-modules": "^2.0.0",
"@types/html-minifier-terser": "6.1.0",
"@types/is-ci": "3.0.0",
"@types/jest": "26.0.24",
"@types/jest": "^29.0.0",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Setting Jest version range to allow minor updates so that we stay up to date until we come across any issues

@@ -8,7 +8,23 @@ import getModularRoot from '../../utils/getModularRoot';
import { normalizeToPosix } from '../utils/formatPath';

const svgrOptions: svgr.Config = {
template(variables, { tpl }) {
template(
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still unsure why ESLint started complaining about this, but I have a few theories. Made a note to come back to this when I update ES Lint and TS version, but for now temporary solution should mean no functionality changes

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess related to #1193 (for future documentation)

const testArgs = [
...regexes,
'--config',
`"${JSON.stringify(jestEslintConfig)}"`,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We previously passed the Jest config via command line with "" around the object, to make it work on windows
Since updating Jest, it no longer accepts an object with ' " or ` around it. Removing the quotation marks fixed it for Jest on Mac but breaks it for Windows, as it won't accept it as a valid command.

Actually writing the config file and passing the path works, so I've done that as a workaround, generating it in a temp directory, only if running on Windows.

@@ -157,7 +147,7 @@ program
.option('--updateSnapshot, -u', testOptions.updateSnapshot.description)
.option('--verbose', testOptions.verbose.description)
.option('--watch', testOptions.watch.description)
.option('--watchAll [value]', testOptions.watchAll.description, !isCI)
.option('--watchAll [value]', testOptions.watchAll.description, false)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Setting watchAll to true for tests if not running in CI resulted in unexpected Jest behaviour for our users where jest wouldn't exit automatically after a run, so taking the opportunity to change this in modular 4

@AlbertoBrusa AlbertoBrusa marked this pull request as ready for review November 21, 2022 15:20

Some noteworthy breaking changes:

- Change to default snapshot options to {escapeString: false,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

escape the options: {escapeString: false, printBasicPrototype: false}

@cristiano-belloni
Copy link
Contributor

LGTM; please at some point remember to merge main back in (it can be in this branch or in feature/v4, but better soon than later)

@cristiano-belloni cristiano-belloni merged commit 4f986a7 into jpmorganchase:feature/v4 Nov 22, 2022
cristiano-belloni added a commit that referenced this pull request Jan 23, 2023
* Node 18 & Jest 29 (#2210)

* Add Node 18 to tests

* Add Node 18 to supported engines

* Pinned rollup-plugin-esbuild to 4.10.1 as newer versions drop support for node 14.17 and below

* Updated yarn.lock

* Update build.test snapshot

* Update modular-scripts snapshot

* Change rollup-plugin-eslint to latest compatible version

* Added changeset

* Update lockfile

* Resolve to source-map ^0.7.0 to try and fix mozilla/source-map#432

* Try to resolve v8-to-istanbul to fix mozilla/source-map#432

* Dropped support for Node 14.17.0 (14.18.0 and greater) to allow upgrate to rollup-plugin-eslint 5

* Update tests to use Node 14.18.0

* Make tests use Node 14.18.0

* update jest to 29

* change Node 16 supported version to 16.10+ as that's what Jest supports

* Upgrade to Jest 29 and fix problems caused by the upgrade

* Update changelog

* Update snapshots (default no longer includes escape characters etc)

* Update snapshots not to include espace caracters

* More snapshots updates

* Change env for port tests to Node

* Update snapshots and switch default test env to Node (while setting it to JSDOM for specific tests)

* Update more snapshots

* Remove broken Rename test (Rename functionality to be removed with Modular 4)

* Fix tests (test.test wasn't closing after running with the --watchAll flag, and adding __fixtures__ to the lint exception list made tests fail)

* Try to fix tests on Windows

* DEBUG windows tests

* Fix windows tests

* Try more things to fix tests

* More attempts to fix windows tests

* More desperate attempts to fix windows tests

* Clean up windows fix

* Cleanup

* Update changeset

* Set Jest watchAll default to false regardless of if CI or not

* Added ESLint ignore comments to svgr.ts for new TS complaints

* Documentation

* Update docs

* Add feature/v4 to branches to run CI Tests on (Needs to be reverted before merging to main)

* Small fixes

* Refactor out generateJestConfig flag logic to reduce duplication

* Update to ESLint 8 & Supported TypeScript to >4.5.3 (#2216)

* Update ESLint to ^8.0.0, minimum Typescript to 4.5.3 & update dependencies

* Update changeset

* Fix warnings generated by updated ESLint

* Remove commands and update documentation (#2220)

* Remove commands and update documentation

* Update Readme & Changeset

* Merge main (#2225)

Merge changes to modular 3.x from main since feature/v4 was split out

* Use Config file instead of Environment Variables  (#2227)

* Use cosmiconfig to read modular configuration, while allowing Env variables to override it 

* Add configuration tests

* Change the default CDN to esm.sh

* Update documentation to reflect new configuration approach

* Use INTERNAL_ env variables to read configuration in JS files that can't call the config function

* Refactor config() logic 
Co-authored-by: Steve King <steve@mydev.co>

* Add jsx to test glob pattern (#2234)

* Add jsx to test glob pattern

* Merge main into Modular 4 (#2237)

* Merge main into Modular 34

* Sunset modular-site

* Revert "Sunset modular-site"

This reverts commit a27388b.

* Sunset modular-site  (#2238)

* Sunset modular-site & update test snapshot

* Remove requirement for Apps to be private in modualr check (#2241)

* Update lockfile

* Docs/support (#2248)

* Initial cleanup

* Add compatibility page, remove recipes/yarn

* Better markdown section depth

* update nav order

* Document package types (#2246)

* Start documenting package types

* Describe App and ESM View types

* Packages

* Views, sources and templates

* Link add command page

* Link package types in index

* Update docs/commands/add.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Update docs/concepts/package-types.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Update docs/concepts/package-types.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Link esm-views section in add page

* Update docs/commands/add.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Link app section for more info

* Update docs/concepts/package-types.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Clarify manifest -> package.json + fix incorrect description

* Add reasons why we don't support things

* Disambiguate words

* Phrase 'default export' concept better

* Update docs/concepts/package-types.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Update docs/concepts/package-types.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Update docs/commands/add.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Reword tricky sentence

* Update docs/commands/add.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Update docs/concepts/package-types.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Split long sentence

* Add all package types to configuration docs

* Various typos

* Split packge types and move template page

* Fix links to package types and fix table layout

* Slim down table

* build/start/entrypoint/template sections

* Fix configuration

* Remove list of types in documentation

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Generate nicer READMEs inside new projects / apps / views / packages (#2253)

* Start documenting package types

* Describe App and ESM View types

* Packages

* Views, sources and templates

* Link add command page

* Link package types in index

* Update docs/commands/add.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Update docs/concepts/package-types.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Update docs/concepts/package-types.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Link esm-views section in add page

* Update docs/commands/add.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Link app section for more info

* Update docs/concepts/package-types.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Clarify manifest -> package.json + fix incorrect description

* Add reasons why we don't support things

* Disambiguate words

* Phrase 'default export' concept better

* Update docs/concepts/package-types.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Update docs/concepts/package-types.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Update docs/commands/add.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Reword tricky sentence

* Update docs/commands/add.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Update docs/concepts/package-types.md

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>

* Split long sentence

* Add all package types to configuration docs

* Various typos

* Split packge types and move template page

* Fix links to package types and fix table layout

* Slim down table

* build/start/entrypoint/template sections

* Add root project README

* Add per-package READMEs + fix docs

* Lint view documentation

* Update snapshots

* Upddate app snapshots

* Update snapshots in index test

* Update app.esbuild.test snapshots

* update cmra tests

* Correct snapshots for cmra

* Update snapshots for cli.test.ts

* Remove packages README + fix all READMEs

* Add README to fixtures + update snapshots

* Update various snapshots

* Update app.esbuild.test snapshots

* Add default workspace README

* Update index snapshots

* Create odd-bees-speak.md

* Update fixture READMEs

Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>
Co-authored-by: Alberto Brusa <alberto.brusa@live.com>

* Sunset philosophy / views, write intro, fix web workers, correct templates (#2254)

* Sunset philopsophy / views, move web workers, correct templates

* Better front page

* Fix command format

* Add web workers docs

* Enhance modular-scripts Tests (#2240)

* Update tests in modular-scripts to use tmp directories instead of changing things within the repo

* Consolidate all execa calls to yarn modular under one standardised function

* Change calls to modular during tests to not run checks 

* Refactor tests for brevity, code reuse and raedability 

* Remove unnecessary build snapshots from esmVies.test

* Modify getConfig to get workspace specific configuration (#2258)

* Modify getConfig to get workspace specific configuration

* Update config docs to reflect per workspace configuration

* Document supported CRA features (#2255)

* Rename limitations + start CRA page

* Add CRA supported features

* Fix typo

* Fixes in CRA page

* Test default template tests work (#2260)

* Unify modular test command interface (#2259)

* regex -> option, package -> argument

* Windows test use --package

* Remove space that fails test

* Add debug statement

* Implement selective testing and merging with user regexes

* Update docs

* Better wording

* Fix typo

* Test selective options combinations

* modular build builds all packages

* Test selective builds

* Document behaviour of modular build

* Create green-shrimps-build.md

* Fix test docs

* various docs fixes (#2262)

* Small fixes (#2261)

* Remove unnecessary error log

* Move jest-environment-jsdom to correct package.json

* Update typescript set by CMRA

* More small fixes (#2263)

* Remove unnecessary error log

* Move jest-environment-jsdom to correct package.json

* Remove jest-environment-jsdom from root package.json

* reorder dependencies

* v4.0.2

* v1.1.1

* v4.0.0

* Update typescript set by CMRA

* Revert accidentally changed versions and bump CMRA version by major due to update TS version

* Remove feature/v4 from GitHub Action tests & introduce forgotten CMRA changeset

* Update 4.0.x release notes

* Slight changes to release notes

* Additions to release doc

Co-authored-by: Cristiano Belloni <cristiano.belloni@jpmorgan.com>
Co-authored-by: Cristiano Belloni <cristiano-belloni@users.noreply.github.com>
Co-authored-by: Sam Brown <sam.brown@jpmorgan.com>
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