Hi! I started working on some needed updates to the Javascript infrastructure.
I am planning on doing 3 updates in the following order: npm → React → Webpack, and will go into details on what updates I’m doing and why.
General why
Updating now will make it easier to maintain and update later on.
Updating usually requires changing some of our code, updating it now when everything works fine means we can do it carefully and take our time.
npm 8
The main change here is in foreman-js and everyone that doesn’t contribute to foreman-js can keep using which npm version they like.
Unlike in foreman core and plugins, in foreman-js we save the package-lock.json file for stability.
Currently we install foreman-js using npm v6 (that’s why the package-lock.json is version 1: package-lock.json | npm Docs )
When installing using npm7+ the lock file is built in version 2 which is backwards compatible to v1 lockfiles.
Implementations:
theforeman:master
← MariaAga:npmv8
opened 07:28PM - 13 May 22 UTC
use npm 8 for the install proccess and github workflows
BREAKING CHANGE:
non… matching peer dependencies can break the install proccess
theforeman:develop
← MariaAga:npmv8
opened 08:04PM - 16 May 22 UTC
https://github.com/theforeman/foreman-js/pull/404
Why?
Potential/current issues:
other broken peer dependencies
Solutions:
For users that don’t want to deal with it:
can add --legacy-peer-deps
flag to npm i
For js developers that have to deal with it :
React 18
We use 16.9.
Previous update to 17 had to be reverted because pf3 tooltips stopped working: https://github.com/theforeman/foreman/pull/7963
Solution: remove all uses of overlayTrigger
Refactor #34713: Remove PatternFly 3 OverlayTrigger - Foreman
Changes mostly foreman-js and react-dom use in foreman core
Update prs(WIP):
theforeman:master
← MariaAga:react-18
opened 05:58PM - 09 May 22 UTC
BREAKING CHANGE:
React 18
theforeman:master
← theforeman:dependabot/npm_and_yarn/react-17.0.1
opened 11:13AM - 04 Nov 20 UTC
Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) from 1… 6.9.0 to 17.0.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/facebook/react/releases">react's releases</a>.</em></p>
<blockquote>
<h2>17.0.0 (October 20, 2020)</h2>
<p>Today, we are releasing React 17!</p>
<p><strong><a href="https://reactjs.org/blog/2020/10/20/react-v17.html">Learn more about React 17 and how to update to it on the official React blog.</a></strong></p>
<h3>React</h3>
<ul>
<li>Add <code>react/jsx-runtime</code> and <code>react/jsx-dev-runtime</code> for the <a href="https://babeljs.io/blog/2020/03/16/7.9.0#a-new-jsx-transform-11154-https-githubcom-babel-babel-pull-11154">new JSX transform</a>. (<a href="https://github.com/lunaruan">@lunaruan</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18299">#18299</a>)</li>
<li>Build component stacks from native error frames. (<a href="https://github.com/sebmarkbage">@sebmarkbage</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18561">#18561</a>)</li>
<li>Allow to specify <code>displayName</code> on context for improved stacks. (<a href="https://github.com/eps1lon">@eps1lon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18224">#18224</a>)</li>
<li>Prevent <code>'use strict'</code> from leaking in the UMD bundles. (<a href="https://github.com/koba04">@koba04</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19614">#19614</a>)</li>
<li>Stop using <code>fb.me</code> for redirects. (<a href="https://github.com/cylim">@cylim</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19598">#19598</a>)</li>
</ul>
<h3>React DOM</h3>
<ul>
<li>Delegate events to roots instead of <code>document</code>. (<a href="https://github.com/trueadm">@trueadm</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18195">#18195</a> and <a href="https://github.com/facebook/react/pulls?q=is%3Apr+author%3Atrueadm+modern+event+is%3Amerged">others</a>)</li>
<li>Clean up all effects before running any next effects. (<a href="https://github.com/bvaughn">@bvaughn</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/17947">#17947</a>)</li>
<li>Run <code>useEffect</code> cleanup functions asynchronously. (<a href="https://github.com/bvaughn">@bvaughn</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/17925">#17925</a>)</li>
<li>Use browser <code>focusin</code> and <code>focusout</code> for <code>onFocus</code> and <code>onBlur</code>. (<a href="https://github.com/trueadm">@trueadm</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19186">#19186</a>)</li>
<li>Make all <code>Capture</code> events use the browser capture phase. (<a href="https://github.com/trueadm">@trueadm</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19221">#19221</a>)</li>
<li>Don't emulate bubbling of the <code>onScroll</code> event. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19464">#19464</a>)</li>
<li>Throw if <code>forwardRef</code> or <code>memo</code> component returns <code>undefined</code>. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19550">#19550</a>)</li>
<li>Remove event pooling. (<a href="https://github.com/trueadm">@trueadm</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18969">#18969</a>)</li>
<li>Stop exposing internals that won’t be needed by React Native Web. (<a href="https://github.com/necolas">@necolas</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18483">#18483</a>)</li>
<li>Attach all known event listeners when the root mounts. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19659">#19659</a>)</li>
<li>Disable <code>console</code> in the second render pass of DEV mode double render. (<a href="https://github.com/sebmarkbage">@sebmarkbage</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18547">#18547</a>)</li>
<li>Deprecate the undocumented and misleading <code>ReactTestUtils.SimulateNative</code> API. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/13407">#13407</a>)</li>
<li>Rename private field names used in the internals. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18377">#18377</a>)</li>
<li>Don't call User Timing API in development. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18417">#18417</a>)</li>
<li>Disable console during the repeated render in Strict Mode. (<a href="https://github.com/sebmarkbage">@sebmarkbage</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18547">#18547</a>)</li>
<li>In Strict Mode, double-render components without Hooks too. (<a href="https://github.com/eps1lon">@eps1lon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18430">#18430</a>)</li>
<li>Allow calling <code>ReactDOM.flushSync</code> during lifecycle methods (but warn). (<a href="https://github.com/sebmarkbage">@sebmarkbage</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18759">#18759</a>)</li>
<li>Add the <code>code</code> property to the keyboard event objects. (<a href="https://github.com/bl00mber">@bl00mber</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18287">#18287</a>)</li>
<li>Add the <code>disableRemotePlayback</code> property for <code>video</code> elements. (<a href="https://github.com/tombrowndev">@tombrowndev</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18619">#18619</a>)</li>
<li>Add the <code>enterKeyHint</code> property for <code>input</code> elements. (<a href="https://github.com/eps1lon">@eps1lon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18634">#18634</a>)</li>
<li>Warn when no <code>value</code> is provided to <code><Context.Provider></code>. (<a href="https://github.com/charlie1404">@charlie1404</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19054">#19054</a>)</li>
<li>Warn when <code>memo</code> or <code>forwardRef</code> components return <code>undefined</code>. (<a href="https://github.com/bvaughn">@bvaughn</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19550">#19550</a>)</li>
<li>Improve the error message for invalid updates. (<a href="https://github.com/JoviDeCroock">@JoviDeCroock</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18316">#18316</a>)</li>
<li>Exclude forwardRef and memo from stack frames. (<a href="https://github.com/sebmarkbage">@sebmarkbage</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18559">#18559</a>)</li>
<li>Improve the error message when switching between controlled and uncontrolled inputs. (<a href="https://github.com/vcarl">@vcarl</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/17070">#17070</a>)</li>
<li>Keep <code>onTouchStart</code>, <code>onTouchMove</code>, and <code>onWheel</code> passive. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19654">#19654</a>)</li>
<li>Fix <code>setState</code> hanging in development inside a closed iframe. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19220">#19220</a>)</li>
<li>Fix rendering bailout for lazy components with <code>defaultProps</code>. (<a href="https://github.com/jddxf">@jddxf</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18539">#18539</a>)</li>
<li>Fix a false positive warning when <code>dangerouslySetInnerHTML</code> is <code>undefined</code>. (<a href="https://github.com/eps1lon">@eps1lon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18676">#18676</a>)</li>
<li>Fix Test Utils with non-standard <code>require</code> implementation. (<a href="https://github.com/just-boris">@just-boris</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18632">#18632</a>)</li>
<li>Fix <code>onBeforeInput</code> reporting an incorrect <code>event.type</code>. (<a href="https://github.com/eps1lon">@eps1lon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19561">#19561</a>)</li>
<li>Fix <code>event.relatedTarget</code> reported as <code>undefined</code> in Firefox. (<a href="https://github.com/claytercek">@claytercek</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19607">#19607</a>)</li>
<li>Fix "unspecified error" in IE11. (<a href="https://github.com/hemakshis">@hemakshis</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19664">#19664</a>)</li>
<li>Fix rendering into a shadow root. (<a href="https://github.com/Jack-Works">@Jack-Works</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/15894">#15894</a>)</li>
<li>Fix <code>movementX/Y</code> polyfill with capture events. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19672">#19672</a>)</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/facebook/react/blob/master/CHANGELOG.md">react's changelog</a>.</em></p>
<blockquote>
<h2>17.0.1 (October 22, 2020)</h2>
<h3>React DOM</h3>
<ul>
<li>Fix a crash in IE11. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/20071">#20071</a>)</li>
</ul>
<h2>17.0.0 (October 20, 2020)</h2>
<p>Today, we are releasing React 17!</p>
<p><strong><a href="https://reactjs.org/blog/2020/10/20/react-v17.html">Learn more about React 17 and how to update to it on the official React blog.</a></strong></p>
<h3>React</h3>
<ul>
<li>Add <code>react/jsx-runtime</code> and <code>react/jsx-dev-runtime</code> for the <a href="https://babeljs.io/blog/2020/03/16/7.9.0#a-new-jsx-transform-11154-https-githubcom-babel-babel-pull-11154">new JSX transform</a>. (<a href="https://github.com/lunaruan">@lunaruan</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18299">#18299</a>)</li>
<li>Build component stacks from native error frames. (<a href="https://github.com/sebmarkbage">@sebmarkbage</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18561">#18561</a>)</li>
<li>Allow to specify <code>displayName</code> on context for improved stacks. (<a href="https://github.com/eps1lon">@eps1lon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18224">#18224</a>)</li>
<li>Prevent <code>'use strict'</code> from leaking in the UMD bundles. (<a href="https://github.com/koba04">@koba04</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19614">#19614</a>)</li>
<li>Stop using <code>fb.me</code> for redirects. (<a href="https://github.com/cylim">@cylim</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19598">#19598</a>)</li>
</ul>
<h3>React DOM</h3>
<ul>
<li>Delegate events to roots instead of <code>document</code>. (<a href="https://github.com/trueadm">@trueadm</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18195">#18195</a> and <a href="https://github.com/facebook/react/pulls?q=is%3Apr+author%3Atrueadm+modern+event+is%3Amerged">others</a>)</li>
<li>Clean up all effects before running any next effects. (<a href="https://github.com/bvaughn">@bvaughn</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/17947">#17947</a>)</li>
<li>Run <code>useEffect</code> cleanup functions asynchronously. (<a href="https://github.com/bvaughn">@bvaughn</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/17925">#17925</a>)</li>
<li>Use browser <code>focusin</code> and <code>focusout</code> for <code>onFocus</code> and <code>onBlur</code>. (<a href="https://github.com/trueadm">@trueadm</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19186">#19186</a>)</li>
<li>Make all <code>Capture</code> events use the browser capture phase. (<a href="https://github.com/trueadm">@trueadm</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19221">#19221</a>)</li>
<li>Don't emulate bubbling of the <code>onScroll</code> event. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19464">#19464</a>)</li>
<li>Throw if <code>forwardRef</code> or <code>memo</code> component returns <code>undefined</code>. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19550">#19550</a>)</li>
<li>Remove event pooling. (<a href="https://github.com/trueadm">@trueadm</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18969">#18969</a>)</li>
<li>Stop exposing internals that won’t be needed by React Native Web. (<a href="https://github.com/necolas">@necolas</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18483">#18483</a>)</li>
<li>Attach all known event listeners when the root mounts. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19659">#19659</a>)</li>
<li>Disable <code>console</code> in the second render pass of DEV mode double render. (<a href="https://github.com/sebmarkbage">@sebmarkbage</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18547">#18547</a>)</li>
<li>Deprecate the undocumented and misleading <code>ReactTestUtils.SimulateNative</code> API. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/13407">#13407</a>)</li>
<li>Rename private field names used in the internals. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18377">#18377</a>)</li>
<li>Don't call User Timing API in development. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18417">#18417</a>)</li>
<li>Disable console during the repeated render in Strict Mode. (<a href="https://github.com/sebmarkbage">@sebmarkbage</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18547">#18547</a>)</li>
<li>In Strict Mode, double-render components without Hooks too. (<a href="https://github.com/eps1lon">@eps1lon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18430">#18430</a>)</li>
<li>Allow calling <code>ReactDOM.flushSync</code> during lifecycle methods (but warn). (<a href="https://github.com/sebmarkbage">@sebmarkbage</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18759">#18759</a>)</li>
<li>Add the <code>code</code> property to the keyboard event objects. (<a href="https://github.com/bl00mber">@bl00mber</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18287">#18287</a>)</li>
<li>Add the <code>disableRemotePlayback</code> property for <code>video</code> elements. (<a href="https://github.com/tombrowndev">@tombrowndev</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18619">#18619</a>)</li>
<li>Add the <code>enterKeyHint</code> property for <code>input</code> elements. (<a href="https://github.com/eps1lon">@eps1lon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18634">#18634</a>)</li>
<li>Warn when no <code>value</code> is provided to <code><Context.Provider></code>. (<a href="https://github.com/charlie1404">@charlie1404</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19054">#19054</a>)</li>
<li>Warn when <code>memo</code> or <code>forwardRef</code> components return <code>undefined</code>. (<a href="https://github.com/bvaughn">@bvaughn</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19550">#19550</a>)</li>
<li>Improve the error message for invalid updates. (<a href="https://github.com/JoviDeCroock">@JoviDeCroock</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18316">#18316</a>)</li>
<li>Exclude forwardRef and memo from stack frames. (<a href="https://github.com/sebmarkbage">@sebmarkbage</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18559">#18559</a>)</li>
<li>Improve the error message when switching between controlled and uncontrolled inputs. (<a href="https://github.com/vcarl">@vcarl</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/17070">#17070</a>)</li>
<li>Keep <code>onTouchStart</code>, <code>onTouchMove</code>, and <code>onWheel</code> passive. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19654">#19654</a>)</li>
<li>Fix <code>setState</code> hanging in development inside a closed iframe. (<a href="https://github.com/gaearon">@gaearon</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/19220">#19220</a>)</li>
<li>Fix rendering bailout for lazy components with <code>defaultProps</code>. (<a href="https://github.com/jddxf">@jddxf</a> in <a href="https://github-redirect.dependabot.com/facebook/react/pull/18539">#18539</a>)</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/facebook/react/commit/89b610969d70d788f8c9769e3fa5b0044f5737ab"><code>89b6109</code></a> Bump versions for 17</li>
<li><a href="https://github.com/facebook/react/commit/c63741fb3daef6c1e8746cbe7d7b07ecb281a9fd"><code>c63741f</code></a> offscreen double invoke effects (<a href="https://github.com/facebook/react/tree/HEAD/packages/react/issues/19523">#19523</a>)</li>
<li><a href="https://github.com/facebook/react/commit/c6917346ff9f7ebdfbe11b73a72c82153ac704ec"><code>c691734</code></a> Fixed broken Profiler test (<a href="https://github.com/facebook/react/tree/HEAD/packages/react/issues/19894">#19894</a>)</li>
<li><a href="https://github.com/facebook/react/commit/87c023b1c1b00d6776b7031f6e105913ead355da"><code>87c023b</code></a> Profiler onRender only called when we do work (<a href="https://github.com/facebook/react/tree/HEAD/packages/react/issues/19885">#19885</a>)</li>
<li><a href="https://github.com/facebook/react/commit/81aaee56afba2bb3558f2aaa484b594f23b59d4c"><code>81aaee5</code></a> Don't call onCommit et al if there are no effects (<a href="https://github.com/facebook/react/tree/HEAD/packages/react/issues/19863">#19863</a>)</li>
<li><a href="https://github.com/facebook/react/commit/bc6b7b6b16f771bfc8048fe15e211ac777253b64"><code>bc6b7b6</code></a> Don't trigger lazy in DEV during element creation (<a href="https://github.com/facebook/react/tree/HEAD/packages/react/issues/19871">#19871</a>)</li>
<li><a href="https://github.com/facebook/react/commit/781212aab344b1619806369d768fad0c1ac3e04a"><code>781212a</code></a> Remove double space in test name (<a href="https://github.com/facebook/react/tree/HEAD/packages/react/issues/19762">#19762</a>)</li>
<li><a href="https://github.com/facebook/react/commit/d17086c7c813402a550d15a2f56dc43f1dbd1735"><code>d17086c</code></a> Decouple public, internal act implementation (<a href="https://github.com/facebook/react/tree/HEAD/packages/react/issues/19745">#19745</a>)</li>
<li><a href="https://github.com/facebook/react/commit/1f38dcff67d12828be771403e183652f5e93909a"><code>1f38dcf</code></a> Remove withSuspenseConfig (<a href="https://github.com/facebook/react/tree/HEAD/packages/react/issues/19724">#19724</a>)</li>
<li><a href="https://github.com/facebook/react/commit/ddd1faa1972b614dfbfae205f2aa4a6c0b39a759"><code>ddd1faa</code></a> Remove config argument from useTransition (<a href="https://github.com/facebook/react/tree/HEAD/packages/react/issues/19719">#19719</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/facebook/react/commits/v17.0.1/packages/react">compare view</a></li>
</ul>
</details>
<br />
[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=react&package-manager=npm_and_yarn&previous-version=16.9.0&new-version=17.0.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/configuring-github-dependabot-security-updates)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
</details>
Why?
Automatic Batching: Batching is when React groups multiple state updates into a single re-render for better performance.
More React things to use: React v18.0 – React
Potential/current issues:
React-dom changes
Solution:
delete most of our react-dom use here: https://github.com/theforeman/foreman/pull/9212
* update the rest of the react-dom uses in this file is much less complicated once the most is deleted
Packages have react 16 as peer dependencies
Solution: npm8 will automatically install peerDependencies
Webpack 4
We use 3 for a very long time as updating it has been challenging.
Really basic draft:
https://github.com/theforeman/foreman/pull/9210
Changes only foreman core
Why?
Potential issues:
No one is sure how we build the ui
Using plugins - when using webpack 3 we could not use tree shaking and minifications because it will cause plugins to stop working.
Katello
Common chunks plugin is no longer used
In the draft pr, the –analyze shows that the bundles are ~x2 larger than before the PR
6 Likes
Thanks a ton for this write up Maria!
A few details and questions, mostly from an infra/packaging PoV.
Today, we use a mixture of node 10 and node 12 across our targets (Debian uses 12, EL7 uses 10, EL8 uses 12).
My understanding is that nothing prevents us from upgrading to node 14 today, besides the fact that someone would need to do the actual changes to our infrastructure. Is that correct? And if it is, is (well, should?) it also correct for Foreman 3.1/3.2?
I am asking because our Debian builders are currently set up to use the node packages from Index of /node_12.x/ , regardless which Foreman version we’re building for. If we could just switch that to Index of /node_14.x/ for a test-ground, that would be awesome.
For RPM, we have more granular control, and could switch EL8 nightly to node 14 rather easily. I’d prefer to just drop EL7 instead of fixing it there too (this should happen “soon”).
1 Like
evgeni:
My understanding is that nothing prevents us from upgrading to node 14 today, besides the fact that someone would need to do the actual changes to our infrastructure. Is that correct? And if it is, is (well, should?) it also correct for Foreman 3.1/3.2?
Yes, we can use node 14 now. as for previous versions of foreman I did a quick check (running npm i
on foreman 3.1) and it should be fine as well.
2 Likes
I’ve added support puppet-katello_devel to install EL8 dev environments with nodejs 12 or nodejs 14.
For anybody interested in trying this, see the example vagrant box definition in Suggest --katello-devel-modulestream-nodejs installer arg by wbclark · Pull Request #1508 · theforeman/forklift · GitHub
3 Likes
ehelms
September 22, 2022, 1:17am
5
I am going to attempt to summarize what I think my understanding of the situation is so that other’s can correct me if I am in error and propose a way to unstick things.
If I gather this correctly, the ordering of updates means we need to move to NodeJS 14 to open up the ability to perform other dates in the stack which would then unlock moving to NodeJS 16+.
I would propose then, given the tricky bit is needing NodeJS 14 with NPM 8 on EL 8, that we package NPM ourselves on EL for a period of time such that we can make this transition. We would then, when applicable, revert to use the NPM from the dnf modules.
I’d be happy to help facilitate this effort if we agree what steps are needed to bridge the gap.
2 Likes
@ehelms Just wanted to bump this. I think it’s important that we move forward with this ASAP. The steps you outlined make sense to me. Let me know if I can help in any way.
ehelms
October 26, 2022, 3:46pm
7
Did a little playing around, building just NPM will be tricky as NPM is not simply it’s own package but built as a sub-package from Node – not impossible, just trickier I think.
One item I was trying to better understand is what is the blocker to updating Webpack to version 4 or 5?
Thanks for the help offers, I’m going to step back a bit from working directly on it.
The last issue I had with Webpack 4 in the pr are that each css file that had import
weighted a lot more than it should. and also that it was not tested at all in Katello so there might be issues there.
https://github.com/theforeman/foreman/pull/9210
ekohl
October 27, 2022, 10:14am
9
One thought I’ve had is what happens when we merge Rails 7. That has alternatives which may mean we can drop webpack altogether instead. @Ron_lavi did some investigation in Using React with importmaps on Rails 7 but I’m not sure this is a realistic plan.
I also wonder if switching to a more modern build tool like https://vitejs.dev/ is worth investigation.
ekohl
October 27, 2022, 2:55pm
11
Given the churn in tooling in the JS ecosystem I’d actually try to keep it as simple as possible and follow Rails’ guidance. In the end we are still a Rails application that has additional Javascript, not a pure JS application.
ekohl
March 21, 2024, 1:59pm
12
With Foreman 3.10 we’ve updated to NodeJS 18 compatibility using legacy peer dependencies and switched over to webpack 5.
@MariaAga can we consider this RFC to be complete or do you also consider React 18 to be within scope?
1 Like
Yeah I agree, I think this is complete and the React 18 can be separate
1 Like
ekohl
March 21, 2024, 5:36pm
14
Great. I’m moving this to the RFC category so I can mark it as resolved. I’ll also update the title to reflect the scope.
1 Like