Bug 1912515

Summary: Stop Shipping Individual Nodejs Library Packages
Product: [Fedora] Fedora Reporter: Ben Cotton <bcotton>
Component: Changes TrackingAssignee: Troy Dawson <tdawson>
Status: CLOSED CURRENTRELEASE QA Contact:
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 34CC: bcotton, sgallagh, tdawson
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2022-02-16 20:02:29 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1860440    

Description Ben Cotton 2021-01-04 15:55:54 UTC
This is a tracking bug for Change: Stop Shipping Individual Nodejs Library Packages
For more details, see: https://fedoraproject.org/wiki/Changes/NodejsLibrariesBundleByDefault

For Nodejs, Fedora should only package:

The interpreter, development headers/libraries, and the assorted tools to manage project-level installations (NPM, yarn, etc.).
Packages that provide binaries that users would want to use in their shell.
compiled/binary nodejs modules (for now)

Comment 1 Troy Dawson 2021-01-15 17:50:57 UTC
The following "applications" source rpm's start with nodejs, and have a binary in /usr/bin/
nodejs-buble
nodejs-linefix
nodejs-nodemon
nodejs-replace-require-self
nodejs-shelljs
nodejs-supervisor
nodejs-svgo
nodejs-tape

According to the change request, these should stay.
There were only 4 that needed to be updated and bundle their dependencies.  The rest already had them bundled, or didn't have any dependencies.

Comment 2 Troy Dawson 2021-01-15 18:08:35 UTC
With the above "application" packages bundled, I have moved onto discovering what nodejs libraries can safely be removed.
I have used the following steps, on a rawhide machine, to find my list.

  dnf repoquery --qf="%{source_name}" -a | grep ^nodejs- | sort -u -o nodejs.sources
  vi nodejs.sources  # remove the "application" packages from Comment #1, and nodejs-packaging
  ./find_unblocked_orphans.py --release rawhide --skip-orphans $(cat nodejs.sources)

From the above steps, there are only 6 packages that are still depended upon, and 210 that can be removed if we remove them all at the same time.
I am planning on removing the 210 packages before the F34 mass rebuild.
During the F34 mass rebuild I will keep watch to see if any packages are failing builds due to missing nodejs libraries.  I will work with any of these failed builds to get a proper solution following the change request guidelines.

Note: There are currently only 216 nodejs library packages.  There were 740 two months ago, and 1300 a year ago.  These have all gone away due to being orphaned and/or being uninstallable.

Packages still needed due to dependencies (6):
    nodejs-acorn-object-spread
    nodejs-backbone nodejs-colors nodejs-generic-pool
    nodejs-typescript nodejs-underscore

Packages that can be removed, if done all at once (210):
    nodejs-acorn-dynamic-import
    nodejs-amdefine nodejs-ansicolors nodejs-any-promise
    nodejs-append-transform nodejs-array-buffer-from-string
    nodejs-array-index nodejs-asap nodejs-ascli nodejs-base32-encode
    nodejs-better-assert nodejs-better-than-before nodejs-bignumber-js
    nodejs-boom nodejs-bson nodejs-buf-compare nodejs-buffer-equal
    nodejs-builtin-modules nodejs-builtins nodejs-bundle-dependencies
    nodejs-bunker nodejs-burrito nodejs-caching-transform
    nodejs-caller-callsite nodejs-caller-path nodejs-callsites
    nodejs-camelcase-keys nodejs-charm nodejs-ci-info nodejs-cli
    nodejs-cli-color nodejs-cli-table nodejs-codemirror
    nodejs-code-point-at nodejs-combined-stream nodejs-commander
    nodejs-connect-livereload nodejs-consolemd nodejs-cookies
    nodejs-cryptiles nodejs-csv nodejs-currently-unhandled
    nodejs-cycle nodejs-d nodejs-debug nodejs-decamelize
    nodejs-decamelize-keys nodejs-deeper
    nodejs-default-require-extensions nodejs-delayed-stream
    nodejs-detect-indent nodejs-discord-js nodejs-dot-prop
    nodejs-duration nodejs-each nodejs-emojione nodejs-es5-ext
    nodejs-es6-iterator nodejs-es6-weak-map nodejs-escape-html
    nodejs-escape-regexp-component nodejs-escape-string-regexp
    nodejs-espurify nodejs-event-emitter nodejs-fancy-log nodejs-fmix
    nodejs-forever-agent nodejs-formatio nodejs-form-data
    nodejs-glob-base nodejs-glob-parent nodejs-glogg
    nodejs-gonzales-pe nodejs-graceful-readlink nodejs-growl
    nodejs-grunt-contrib-nodeunit nodejs-grunt-sed nodejs-gulplog
    nodejs-has-ansi nodejs-has-binary2 nodejs-has-flag nodejs-has-glob
    nodejs-has-gulplog nodejs-hashish nodejs-hawk
    nodejs-hex-to-array-buffer nodejs-hoek nodejs-homedir-polyfill
    nodejs-imurmurhash nodejs-indent-string nodejs-indexof
    nodejs-ipaddr-dot-js nodejs-irc-colors nodejs-irc-formatting
    nodejs-irc-upd nodejs-isarray nodejs-is-builtin-module
    nodejs-is-finite nodejs-is-fullwidth-code-point
    nodejs-is-observable nodejs-isodate nodejs-is-plain-obj
    nodejs-is-promise nodejs-is-text-path nodejs-is-valid-instance
    nodejs-js-base64 nodejs-jschardet nodejs-json3 nodejs-jsonify
    nodejs-jsonselect nodejs-lcid nodejs-levn nodejs-lolex
    nodejs-loud-rejection nodejs-lru-cache nodejs-lru-queue
    nodejs-magic-string nodejs-makeerror nodejs-md5-hex
    nodejs-memoizee nodejs-minipass nodejs-mkdirp nodejs-mongodb
    nodejs-mongodb-core nodejs-murmur-32 nodejs-mustache nodejs-mysql
    nodejs-mz nodejs-negative-zero nodejs-npm-run-path
    nodejs-nth-check nodejs-observable-to-promise nodejs-once
    nodejs-open nodejs-optionator nodejs-option-chain nodejs-options
    nodejs-os-homedir nodejs-os-locale nodejs-own-or-env
    nodejs-package-license nodejs-parse-glob nodejs-path-is-absolute
    nodejs-path-parse nodejs-pkginfo nodejs-platform nodejs-plur
    nodejs-pretty-ms nodejs-prism-media nodejs-pruddy-error
    nodejs-rainbowsocks nodejs-random-path nodejs-readdir-enhanced
    nodejs-require-all nodejs-resolve-cwd nodejs-resolve-from
    nodejs-resolve-pkg nodejs-rhea nodejs-runforcover nodejs-samsam
    nodejs-shebang-command nodejs-simple-fmt nodejs-simple-is
    nodejs-slide nodejs-snapdragon-capture-set nodejs-snapdragon-node
    nodejs-snapdragon-util nodejs-snekfetch nodejs-sntp
    nodejs-sorted-object nodejs-source-map nodejs-sprintf nodejs-ssri
    nodejs-stable nodejs-stack-trace nodejs-string
    nodejs-string_decoder nodejs-stringmap nodejs-stringscanner
    nodejs-stringset nodejs-string-width nodejs-strip-ansi
    nodejs-strip-bom-stream nodejs-strip-json-comments
    nodejs-strip-path nodejs-tempfile nodejs-tern-liferay
    nodejs-thenify nodejs-thenify-all nodejs-thunkify nodejs-tildify
    nodejs-timers-ext nodejs-tinycolor nodejs-trim-newlines
    nodejs-tryor nodejs-type-check nodejs-ultron nodejs-umask
    nodejs-user-home nodejs-vow nodejs-vow-queue nodejs-walker
    nodejs-ware nodejs-when nodejs-whet-dot-extend nodejs-window-size
    nodejs-wrap-ansi nodejs-ws nodejs-yamlish nodejs-yargs

Comment 3 Troy Dawson 2021-01-20 20:16:15 UTC
The above 210 nodejs packages have been retired.

Comment 4 Ben Cotton 2021-02-10 22:27:20 UTC
We have reached the 'Code Complete (testable)' milestone in the Fedora 34 release cycle. If your Change is in a testable state, please set the status to MODIFIED. If this Change will not be ready for Fedora 34, please set the version to rawhide.

The 100% code complete deadline is Tue 2021-02-23.

Comment 5 Stephen Gallagher 2021-02-11 13:00:58 UTC
The documentation has been updated (https://docs.fedoraproject.org/en-US/packaging-guidelines/Node.js/). The process of updating all the packages in the distribution will be ongoing.

Comment 6 Troy Dawson 2021-02-15 14:13:04 UTC
As Stephen said.  The documentation has been updated.
The current "applications" have been updated.
The process of updating all the packages in the distribution will be an ongoing process, although the majority of them are already done.

Comment 7 Troy Dawson 2022-02-16 20:02:29 UTC
There are three tests in the document.  These three have been tested.

1 - Install all nodejs libraries in Fedora 33. Try to update to Fedora 34. :: Success
2 - Try to install all packages that require nodejs in Fedora 34. :: Success
3 - Install all packages that require nodejs in Fedora 33. Try to update to Fedora 34. :: Success

Note: The package list of test 2 and test 3 were different.  But both passed.