[I've put the related Debian bugreport in the loop] Hello,
I finally found some time to look into this. Disclaimer: I don't know much about CSS compression and the mailman3 web interface is the first time that I got into contact with either of sassc and node-less. TL;DR: * Hyperkitty doesn't need (or use) less.js/lessc at all. It can safely be removed from COMPRESS_PRECOMPILERS. * The situation is different with sassc, it's actually used for compressing CSS by hyperkitty. Doing the compression at build-time should be possible but requires more work. I have a plan ;) Christian Ehrhardt: > I have checked a fully installed mailman3 stack in Debian/Ubuntu and > there are only two sources of .less files that we have to be concerned > of. > > First there is the package fonts-font-awesome which is pulled in on > the following path: > [...] > It seems different for the second case which is libjs-bootstrap from > the source package twitter-bootstrap3 I don't think that any of the .less files you're referencing to will be processed by 'django-admin compress' on the mailman3-web project. The .less files are all outside the scope of the mailman3-web project. So I'm pretty sure that the node-less/lessc dependency can safely be dropped immediately. Moreover, looking at the hyperkitty example_project/settings.py[1], it doesn't even reference the lessc compiler at all. Only settings.py from mailman-suite[2] references it, which probably is a copy-and-paste bug. There's even an open issue about that[3]. Since in Debian we took the mailman-suite settings.py as template, we suffer from this copy-and-paste bug as well. [1] https://gitlab.com/mailman/hyperkitty/blob/master/example_project/settings.py#L315-317 [2] https://gitlab.com/mailman/mailman-suite/blob/master/mailman-suite_project/settings.py#L359-362 [3] https://gitlab.com/mailman/mailman-suite/issues/7 > Does anyone know of other uses of .less in the mailman3 stack that I > have missed that we would have to think about? Regarding sassc: Hyperkitty is the only part of the mailman3 stack that uses django-compressor. And apparently there's just one single html template that will be processed by sassc (well, to be precise, all html files that use this template): /usr/lib/python3/dist-packages/hyperkitty/templates/hyperkitty/base.html In this file, four CSS files are being compressed and packed together by sassc: hyperkitty/libs/fonts/icomoon/icomoon.css hyperkitty/libs/fonts/droid/droid.css django-mailman3/css/main.css hyperkitty/sass/hyperkitty.scss The last one is special as it's a scss file itself and needs to be processed by sassc itself. > OTOH there also is an experimental approach to this, could someone > with a dev-stack of mailman3 just remove the node-less package and see > if on a normal setup something breaks at all? I've done this. Result: removing node-less doesn't change anything (which is in line with my assumption that node-less/less.js/lessc is not required/used at all). On the other hand, removing sassc breaks the setup, even with COMPRESS_OFFLINE being turned on: CommandError: An error occurred during rendering /usr/lib/python3/dist-packages/django_mailman3/templates/django_mailman3/profile/delete_profile.html: /bin/sh: 1: sassc: not found Christian Ehrhardt: > On Fri, Mar 15, 2019 at 10:19 AM Jonas Smedegaard <d...@jones.dk> wrote: >> >> Quoting Christian Ehrhardt (2019-03-15 06:39:08) >>> On Fri, Mar 15, 2019 at 12:08 AM Abhilash Raj <maxk...@asynchronous.in> >>> wrote: >>>> On Thu, Mar 14, 2019, at 1:42 PM, Jonas Meurer wrote: >>>> Christian Ehrhardt: >>>>> I was evaluating the Dependencies of mailman3 in Ubuntu and I was >>>>> wondering if I could cut them down a bit. One thing that got my >>>>> attention is the dependency from mailman3-web [1] to nodejs for >>>>> less [2] and ruby-sass [3]. >>>>> >>>>> I was wondering if we could by default not install >>>>> node-less/ruby-sass and what exactly that would imply. >> >> less is a reinvention of sass: It is often adaptable to sass with a >> simple patch. >> >> Original sass processor was ruby-sass, but nowadays a better processor >> is sassc. Or if you want to integrated processing with Python then >> python3-libsass which uses same core library for its processing. >> >> I have not looked closely on mailman3, but I highly doubt there is a >> real need for dynamic processing of less/sass during runtime. > > Yeah I doubt that as well. > In the meantime I also found [1] which seems to have come to the same > conclusion for the majority of default setups. > For upstream to disable it by default it was mentioned that there is a > need for a customize kit which seems fine [1]. > > There is a further argument to disable the live compressors, at least > as I read COMPRESS_OFFLINE that seems helpful for production setups > anyway to speed up and safe CPU load. You're totally right. Therefore, COMPRESS_OFFLINE is already enabled per default in mailman3-web on Debian. The django-admin compress command is executed during package installation and upgrade by the package postinst script. > So while upstream waits until a "customize kit" exists to switch > defaults, as a downstream like Debian/Ubuntu I wonder if we already > could: > - drop sass/less compilers to a suggest > - disable the live compression in the default config that we ship > - keep the config commented-out to make it easy for admins that want > to enable it later > - pre-compress at build time and enable compress_offline for speed > - maybe call `django_admin compress` [3][4] or similar at build time? > - having sass/less as build dependencies seems much safer than > pulling it in at runtime > > @Jonas M.: what do you think about [2] (again maybe after Buster)? > Sorry to not know more of this yet, but I hope suggesting what I think > might work helps to get us the right way. I'm absolutely in favour of getting rid of the sassc runtime dependency. After a chat with Jonas Smedegaard (thanks for his valuable input!), I think that I have an idea and a roadmap on how to get there: 1. Process `static/hyperkittysass/hyperkitty.scss` with sassc at build- time and patch `templates/hyperkitty/base.html` to reference the resulting CSS file. 2. Patch base.html at build-time to remove the '{% compress css %}' statements from it. By then, we already can safely drop the run-time dependency on django-compressor from hyperkitty since it won't be needed anymore and consequently remove sassc dependency from mailman3-web (and all references to django-compressor from settings.py). The downside will be some performance decrease as hyperkitty pages will reference four separate CSS file instead of a combined one. But that can be addressed as well: 3. Make python3-django-mailman3 a build-dependency of mailman-suite (one of the referenced CSS files is shipped by django-mailman3) and combine all four CSS files into one by runing sassc at build-time. 4. Further patch base.html at build-time to replace the four separate CSS references by one to the resulting combined CSS. I plan to start working on the actual implementation soon but would be glad to hear your thoughts on it. Cheers jonas
signature.asc
Description: OpenPGP digital signature