#925211 uglifyjs conflicts with webpack which can hinder JS maintainers work

#925211#5
Date:
2019-03-17 18:05:09 UTC
From:
To:
Hi,

During a rebuild of all packages in buster (in a buster chroot, not a
sid chroot), your package failed to build on amd64.

Relevant part (hopefully):
http://aws-logs.debian.net/2019/03/15/node-jschardet_1.6.0+dfsg-1_testing.log

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

About the archive rebuild: The rebuild was done on EC2 VM instances from
Amazon Web Services, using a clean, minimal and up-to-date chroot. Every
failed build was retried once to eliminate random failures.

#925211#10
Date:
2019-03-17 22:12:51 UTC
From:
To:
Bug seems to come from conflict between
https://tracker.debian.org/pkg/uglify-js and
https://tracker.debian.org/pkg/uglifyjs: webpack can't now be installed
with uglifyjs


Le 17/03/2019 à 19:05, Lucas Nussbaum a écrit :

#925211#23
Date:
2019-03-17 22:29:28 UTC
From:
To:
Le 17/03/2019 à 23:12, Xavier a écrit :

node-jscharset build-depends on both webpack and uglifyjs:
 * webpack depends on node-uglify via node-uglifyjs-webpack-plugin (and
   some other), provided by src:uglifyjs renamed later to src:uglify-js
 * uglifyjs is now provided by src:uglify-js, conflicts with node-uglify
 * src:uglify-js does not provide node-uglify but node-uglify-js instead

#925211#28
Date:
2019-03-17 22:48:57 UTC
From:
To:
Quoting Xavier (2019-03-17 23:12:51)
depends indirectly on node-uglify 2.x, whereas uglifyjs is either a
virtual package provided by node-uglify 2.x or (since recently) a real
package depending on node-uglyfy-js 3.x.

Yes, the problem emerged when node-uglify was introduced as a real
package, but the fix is for those packages depending on uglifyjs and
webpack together to depend on node-uglify 2.x instead of the virtual
package.

Please revert these reassignments: This cannot be fixed in uglifyjs 3.x.


 - Jonas

#925211#33
Date:
2019-03-17 23:02:06 UTC
From:
To:
Quoting Jonas Smedegaard (2019-03-17 23:48:57)

Put differently, the problem is packages depending both unversioned and
transitively versioned on uglifyjs - that works only as long as the
transitive dependency happens to be newest major release of uglifyjs.

 - Jonas

#925211#38
Date:
2019-03-18 05:19:14 UTC
From:
To:
Le 18/03/2019 à 00:02, Jonas Smedegaard a écrit :

node-uglify
Build Reverse Depends:
  sizzle
  sockjs-client
  twitter-bootstrap3
  twitter-bootstrap3
  underscore.string
  wax.js
  witty
  asciimathtml
  coffeescript
  d3-tip.js
  diff-match-patch
  elycharts.js
  es-module-loader-0.17.js
  explorercanvas
  flightgear-phi
  highlight.js
  icingaweb2
  impress.js
  isso
  jquery-coolfieldset
  jquery-geo
  jquery-goodies
  jquery-lazyload
  jquery-minicolors
  jquery-reflection
  jquery-simpletreemenu
  jquery-watermark
  jsrender
  languages4translatewiki
  ldap-account-manager
  leaflet-geometryutil
  leaflet-image
  libjs-chosen
  libjs-cssrelpreload
  libjs-img.srcset
  libjs-jquery-scrollto
  libjs-jsxc
  libjs-term.js
  lintian
  mgrs
  modernizr
  node-babel
  node-bowser
  node-browser-pack
  node-browserify-lite
  node-eventemitter2
  node-events
  node-fuzzaldrin-plus
  node-hooker
  node-htmlparser
  node-ipaddr.js
  node-is-typedarray
  node-iscroll
  node-jquery-textcomplete
  node-jsonselect
  node-lodash
  node-lunr
  node-markdown-it-html5-embed
  node-marked
  node-matrix-js-sdk
  node-merge
  node-n3
  node-pinkyswear
  node-q
  node-sdp-transform
  node-shiny-server-client
  node-sink-test
  node-sprintf-js
  node-turbolinks
  node-tweetnacl
  node-typedarray-to-buffer
  node-umd
  pegjs
  polymaps
  prefixfree
  proj4js
  rainbow.js
  raphael
  requirejs
  rickshaw
  rtcninjajs
  ruby-rails-assets-favico.js
  ruby-rails-assets-jquery-fullscreen-plugin
  ruby-rails-assets-perfect-scrollbar
  sax.js
  sizzle
  slick
  sockjs-client
  spip
  underscore.string
  wax.js
  twitter-bootstrap3
  twitter-bootstrap3
  almond
  asciimathtml
  coffeescript
  d3-tip.js
  diff-match-patch
  elycharts.js
  emscripten
  es-module-loader-0.17.js
  explorercanvas
  flightgear-phi
  highlight.js
  icingaweb2
  impress.js
  isso
  jquery-coolfieldset
  jquery-geo
  jquery-goodies
  jquery-lazyload
  jquery-minicolors
  jquery-reflection
  jquery-simpletreemenu
  jquery-watermark
  jsrender
  languages4translatewiki
  ldap-account-manager
  leaflet-geometryutil
  leaflet-image
  libjs-chosen
  libjs-cssrelpreload
  libjs-img.srcset
  libjs-jquery-scrollto
  libjs-jsxc
  libjs-term.js
  lintian
  mgrs
  modernizr
  node-babel
  node-bowser
  node-browser-pack
  node-browserify-lite
  node-eventemitter2
  node-events
  node-fuzzaldrin-plus
  node-hooker
  node-htmlparser
  node-ipaddr.js
  node-is-typedarray
  node-iscroll
  node-jquery-textcomplete
  node-jsonselect
  node-lodash
  node-lunr
  node-markdown-it-html5-embed
  node-marked
  node-matrix-js-sdk
  node-merge
  node-mocha
  node-n3
  node-pinkyswear
  node-q
  node-sdp-transform
  node-shiny-server-client
  node-sink-test
  node-sprintf-js
  node-turbolinks
  node-tweetnacl
  node-typedarray-to-buffer
  node-umd
  pegjs
  polymaps
  prefixfree
  proj4js
  rainbow.js
  raphael
  requirejs
  rickshaw
  rtcninjajs
  ruby-rails-assets-favico.js
  ruby-rails-assets-jquery-fullscreen-plugin
  ruby-rails-assets-perfect-scrollbar
  sax.js
  sizzle
  slick
  sockjs-client
  spip
  underscore.string
  wax.js
  witty
  freeipa
  node-grunt-contrib-uglify
  node-jquery
  proj4js
  icingaweb2
  lintian
  twitter-bootstrap3
  coffeescript
  jquery-goodies
  jupyter-notebook
  libjs-term.js
  mustache.js
  node-bowser
  node-events
  node-is-typedarray
  node-merge
  node-sdp-transform
  node-semver
  node-typedarray-to-buffer
  requirejs
  rtcninjajs
  twitter-bootstrap3
  highlight.js
  jquery-minicolors
  less.js
  libjs-chosen
  node-iscroll
  node-marked
  pegjs
  almond
  angular.js
  backbone
  colors.js
  elycharts.js
  highlight.js
  ie7-js
  impress.js
  jquery
  jquery-coolfieldset
  jquery-geo
  jquery-goodies
  jquery-lazyload
  jquery-minicolors
  jquery-reflection
  jquery-simpletreemenu
  jquery-watermark
  jsrender
  languages4translatewiki
  leaflet
  leaflet-markercluster
  less.js
  libjs-chosen
  libjs-img.srcset
  modernizr
  mozilla-noscript
  node-async
  node-eventemitter2
  node-hooker
  node-htmlparser
  node-ipaddr.js
  node-iscroll
  node-lodash
  node-marked
  node-semver
  node-sink-test
  owncloud
  owncloud-apps
  pegjs
  polymaps
  rainbow.js
  raphael
  requirejs
  sizzle
  twitter-bootstrap3
  wax.js
  webdeveloper
  witty
  wot
  almond
  angular.js
  angular.js
  backbone
  colors.js
  elycharts.js
  highlight.js
  highlight.js
  ie7-js
  impress.js
  jquery
  jquery
  jquery-coolfieldset
  jquery-geo
  jquery-goodies
  jquery-lazyload
  jquery-minicolors
  jquery-reflection
  jquery-simpletreemenu
  jquery-watermark
  jsrender
  languages4translatewiki
  leaflet
  leaflet-markercluster
  less.js
  libjs-chosen
  libjs-img.srcset
  modernizr
  mozilla-noscript
  node-async
  node-eventemitter2
  node-hooker
  node-htmlparser
  node-ipaddr.js
  node-iscroll
  node-lodash
  node-marked
  node-semver
  node-sink-test
  pegjs
  polymaps
  rainbow.js
  raphael
  requirejs
  sizzle
  twitter-bootstrap3
  wax.js
  webdeveloper
  witty
  almond
  asciimathtml
  coffeescript
  d3-tip.js
  diff-match-patch
  elycharts.js
  es-module-loader-0.17.js
  explorercanvas
  flightgear-phi
  highlight.js
  icingaweb2
  impress.js
  jquery-coolfieldset
  jquery-goodies
  jquery-lazyload
  jquery-reflection
  jquery-simpletreemenu
  jquery-watermark
  jsrender
  jupyter-notebook
  languages4translatewiki
  leaflet
  leaflet-markercluster
  libjs-chosen
  libjs-img.srcset
  libjs-jquery-scrollto
  libjs-jsxc
  libjs-term.js
  mgrs
  modernizr
  node-async
  node-bowser
  node-eventemitter2
  node-events
  node-fuzzaldrin-plus
  node-hooker
  node-htmlparser
  node-ipaddr.js
  node-is-typedarray
  node-iscroll
  node-jsonselect
  node-lodash
  node-marked
  node-merge
  node-q
  node-sdp-transform
  node-sink-test
  node-sprintf-js
  node-typedarray-to-buffer
  pegjs
  polymaps
  proj4js
  rainbow.js
  raphael
  requirejs
  rickshaw
  rtcninjajs
  ruby-cal-heatmap-rails
  ruby-jquery-turbolinks
  ruby-rails-assets-favico.js
  ruby-rails-assets-jquery-fullscreen-plugin
  ruby-rails-assets-perfect-scrollbar

node-uglify
Reverse Depends:
  node-uglifyjs-webpack-plugin
  emscripten
  python3-webassets
  python-webassets
  uglifyjs
  node-uglify-js
  python3-livereload
  python-livereload
  node-with
  node-grunt-contrib-uglify
  node-transformers
  lava-dev
  node-dryice
  node-constantinople

#925211#43
Date:
2019-03-18 05:56:42 UTC
From:
To:
Le 18/03/2019 à 06:19, Xavier a écrit :

If I understand (but maybe I'm wrong), this means that in buster it is
not possible to have uglifyjs installed with one of these 14 packages or
their dependencies (`apt-cache rdepends --recurse node-uglify` returns
several thousands package names).

#925211#52
Date:
2019-03-18 10:46:03 UTC
From:
To:
Quoting Xavier (2019-03-18 06:56:42)

Please clarify how you produced a list of packages which depend *both*
unversioned and *also* transitively versioned on uglifyjs.

...or clarify what other list you produced and why you find such other
list relevant here.

Please elaborate why - either based on my explanation of the problem
quoted above, or elaborate on which _different_ theory you have of what
is the underlying problem you try to solve.


 - Jonas

#925211#57
Date:
2019-03-18 11:01:52 UTC
From:
To:
Le 18/03/2019 à 11:46, Jonas Smedegaard a écrit :

I pushed this list taken from UDD database (reverse build depends) +
"apt-cache rdepends", just to help to understand the impact of this bug.
If it is not useful, please ignore my message

I do not have a theory, just want to help (I'm not uploader of any
package concerned). So ignore my mail if it is not clear/useful.

The fact is that today, it is not possible to have both webpack (or some
other packages) and uglifyjs on the same machine.

#925211#62
Date:
2019-03-18 11:22:16 UTC
From:
To:
Quoting Xavier (2019-03-18 12:01:52)
it, I will ignore your provided list.

Please note that I am _not_ saying that your list is wrong, nor that my
view of the problem is correct.  Only that I don't understand your info.

Since you merged and reassigned bugs, packages will get kicked out of
Buster because they cannot be fixed.

I urge you to either stand by your change by engaging in discussions on
theories as to what is the real problem here, or if you don't want to do
that (or don't have the time, or don't understand the problem well
enough) then I recommend that you consider reverting those changes done
by you.


 - Jonas

#925211#75
Date:
2019-03-22 13:54:07 UTC
From:
To:
Hi,

it takes some time to understand what's happening here, and since
fixing it properly will require quite some work on multiple packages,
i add my notes to this bug report.

Nota Bene: i use "webpack" here but the sake of the example.

# Situation
Because uglify version 2 compiles software that uglify version 3 does not
compile
correctly, and vice-versa, there are two versions in debian:
* uglifyjs-2.8.29 builds node-uglify which provides uglifyjs
* uglify-js-3.4.9 builds uglifyjs

# Solutions (in my order of preference, to be adapted)
1. Packages not building with uglifyjs 2 should be fixed to build with
uglifyjs 3.
Not a trivial thing to do and it's deep freeze now.

2. Distribute /usr/bin/uglifyjsN and fix all packages calling
/usr/bin/uglifyjs to call
uglifyjsN, when they can't be fixed to use latest version of
/usr/bin/uglifyjs.

# Slight improvement that might be done for buster
IF apt behaves like i think it will, to allow both /usr/bin/uglifyjs and
node-uglify
package to be installed:
* uglify-js-3.4.9 builds node-uglify-js which provides uglifyjs and
conflicts uglifyjs (<< 3.5.0-2),
and remove uglifyjs binary package (to get it to be pure virtual package).

However, if dependencies both try to install node-uglify and node-uglify-js
it will still fail,
but it's not as bad as a direct conflict with /usr/bin/uglifyjs.
It could be misleading, though, to have an unexpected version, so maybe the
best thing
is to do nothing for Buster.

Jérémy

#925211#80
Date:
2019-03-22 15:22:43 UTC
From:
To:
Le ven. 22 mars 2019 à 15:51, Jonas Smedegaard <jonas@jones.dk> a écrit :


Did you see my description at https://bugs.debian.org/924807#28 ?

Yes, changing the dependency on uglifyjs to node-uglify of all concerned
packages. Doing so without regressions will require quite some work.

The other solution - migrate all packages to uglifyjs 3 - requires a lot
more work.

Indeed.
My turn to not understand:
many packages not coinstallable due to a conflict is fine ?
node-uglify conflicts with node-uglify-js.

Sure, that needs urgent fixing.

However, debian users developing websites will typically want to use
webpack and uglifyjs. And currently in Buster they won't be able to install
both, and likewise with many other packages.

The proposed change is to switch back uglifyjs to a pure virtual package,
as it was before,
(if what i know about apt is right) that would solve the main example
above: install webpack + uglifyjs.

I do care to avoid further mess and i understand that no change shall be
made on a hurry,
it is just something i wanted to discuss.

Jérémy