I just saw on https://www.reviewboard.org/docs/manual/dev/extending/extensions/static-files/, it says
Static bundles are packaged along with your extension automatically. You don’t have to do anything special. You will, however, need some node.js <https://nodejs.org/> dependencies in order to package static media bundles. *If you’re running Review Board 2.5.7+, these dependencies will be installed for you when you begin to build the package.* *If you’re running an older version, you will need to manually install them yourself. First, make sure you have a modern version of node.js installed and then run:* $ sudo npm install -g less uglifyjs I am wondering if this is related... On Friday, June 9, 2017 at 4:41:10 PM UTC-7, Kevin Yu wrote: > > On our server, we had reviewboard core 2.5.6.1 running with our own > extension. it was all fine until we recently upgraded reviewboard core to > 2.5.12. After the upgrade, we can't run python setup.py -v build anymore... > The error is as follows: > devops@Reviewboard-Test-trunk:/tmp/ReviewBoardExt$ python setup.py -v build > running build > running build_py > running build_static_files > Installing node packages... > npm http GET https://registry.npmjs.org/uglifyjs/2.4.10 > npm http GET https://registry.npmjs.org/less/2.7.1 > npm http 304 https://registry.npmjs.org/less/2.7.1 > npm http 304 https://registry.npmjs.org/uglifyjs/2.4.10 > npm WARN deprecated [email protected]: uglifyjs is deprecated - use > uglify-js instead. > npm WARN engine [email protected]: wanted: {"node":">=0.12"} (current: > {"node":"v0.10.25","npm":"1.3.10"}) > npm http GET https://registry.npmjs.org/source-map/0.1.34 > npm http GET https://registry.npmjs.org/yargs > npm http GET https://registry.npmjs.org/async > npm http GET https://registry.npmjs.org/uglify-to-browserify > npm http 304 https://registry.npmjs.org/source-map/0.1.34 > npm http 304 https://registry.npmjs.org/yargs > npm http 304 https://registry.npmjs.org/async > npm http 304 https://registry.npmjs.org/uglify-to-browserify > npm http GET https://registry.npmjs.org/amdefine > npm http 304 https://registry.npmjs.org/amdefine > npm http GET https://registry.npmjs.org/errno > npm http GET https://registry.npmjs.org/graceful-fs > npm http GET https://registry.npmjs.org/image-size > npm http GET https://registry.npmjs.org/mime > npm http GET https://registry.npmjs.org/mkdirp > npm http GET https://registry.npmjs.org/promise > npm http GET https://registry.npmjs.org/source-map > npm http 304 https://registry.npmjs.org/errno > npm http 304 https://registry.npmjs.org/graceful-fs > npm http 304 https://registry.npmjs.org/image-size > npm http 304 https://registry.npmjs.org/mime > npm http 304 https://registry.npmjs.org/promise > npm http 304 https://registry.npmjs.org/source-map > npm http 304 https://registry.npmjs.org/mkdirp > npm http GET https://registry.npmjs.org/prr > npm http 304 https://registry.npmjs.org/prr > npm http GET https://registry.npmjs.org/minimist/0.0.8 > npm http 304 https://registry.npmjs.org/minimist/0.0.8 > npm http GET https://registry.npmjs.org/asap > npm http 304 https://registry.npmjs.org/asap > [email protected] node_modules/uglifyjs > ├── [email protected] > ├── [email protected] > ├── [email protected] > └── [email protected] ([email protected]) > > [email protected] node_modules/less > ├── [email protected] > ├── [email protected] > ├── [email protected] > ├── [email protected] ([email protected]) > ├── [email protected] ([email protected]) > ├── [email protected] ([email protected]) > └── [email protected] > Copying '/tmp/ReviewBoardExt/fortinet/static/css/rev_req_det.less' > Copying '/tmp/ReviewBoardExt/fortinet/static/js/views/account_handler.js' > Copying '/tmp/ReviewBoardExt/fortinet/static/js/views/branch_builds.js' > Copying '/tmp/ReviewBoardExt/fortinet/static/js/views/bootstrap.js' > Copying '/tmp/ReviewBoardExt/fortinet/static/js/views/apprreqView.js' > Copying '/tmp/ReviewBoardExt/fortinet/static/js/views/test_cvrg_rprt.js' > Copying '/tmp/ReviewBoardExt/fortinet/static/js/views/ftnchkHoldItView.js' > Copying > '/tmp/ReviewBoardExt/fortinet/static/js/views/sel_rqst_4_det_copy.js' > Copying > '/tmp/ReviewBoardExt/fortinet/static/js/views/approval_status_View.js' > Copying '/tmp/ReviewBoardExt/fortinet/static/js/views/dashboard.js' > Copying '/tmp/ReviewBoardExt/fortinet/static/js/views/rqst_descr.js' > Copying '/tmp/ReviewBoardExt/fortinet/static/js/views/cm_portalView.js' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/Remove.png' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/fortinet.png' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/[email protected]' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/[email protected]' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/teamlead.png' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/favicon_notify.png' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/Create.png' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/ftnt.ico' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/[email protected]' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/shipit-grey.png' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/[email protected]' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/Up.png' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/Bottom.png' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/[email protected]' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/stop16.png' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/[email protected]' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/[email protected]' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/shipit.png' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/[email protected]' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/[email protected]' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/Down.png' > Copying '/tmp/ReviewBoardExt/fortinet/static/images/[email protected]' > Traceback (most recent call last): > File "setup.py", line 27, in <module> > 'evolutions/*.*', > File > "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.5.12-py2.7.egg/reviewboard/extensions/packaging.py", > > line 48, in setup > setuptools_setup(**setup_kwargs) > File "/usr/lib/python2.7/distutils/core.py", line 151, in setup > dist.run_commands() > File "/usr/lib/python2.7/distutils/dist.py", line 953, in run_commands > self.run_command(cmd) > File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command > cmd_obj.run() > File "/usr/lib/python2.7/distutils/command/build.py", line 128, in run > self.run_command(cmd_name) > File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command > self.distribution.run_command(command) > File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command > cmd_obj.run() > File > "/usr/local/lib/python2.7/dist-packages/Djblets-0.9.7-py2.7.egg/djblets/extensions/packaging.py", > > line 422, in run > self.run_command('build_static_files') > File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command > self.distribution.run_command(command) > File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command > cmd_obj.run() > File > "/usr/local/lib/python2.7/dist-packages/Djblets-0.9.7-py2.7.egg/djblets/extensions/packaging.py", > > line 290, in run > self._build_static_media(extension) > File > "/usr/local/lib/python2.7/dist-packages/Djblets-0.9.7-py2.7.egg/djblets/extensions/packaging.py", > > line 360, in _build_static_media > call_command('collectstatic', interactive=False, verbosity=2) > File > "/usr/local/lib/python2.7/dist-packages/Django-1.6.11-py2.7.egg/django/core/management/__init__.py", > > line 159, in call_command > return klass.execute(*args, **defaults) > File > "/usr/local/lib/python2.7/dist-packages/Django-1.6.11-py2.7.egg/django/core/management/base.py", > > line 285, in execute > output = self.handle(*args, **options) > File > "/usr/local/lib/python2.7/dist-packages/Django-1.6.11-py2.7.egg/django/core/management/base.py", > > line 415, in handle > return self.handle_noargs(**options) > File > "/usr/local/lib/python2.7/dist-packages/Django-1.6.11-py2.7.egg/django/contrib/staticfiles/management/commands/collectstatic.py", > > line 173, in handle_noargs > collected = self.collect() > File > "/usr/local/lib/python2.7/dist-packages/Django-1.6.11-py2.7.egg/django/contrib/staticfiles/management/commands/collectstatic.py", > > line 119, in collect > for original_path, processed_path, processed in processor: > File > "/usr/local/lib/python2.7/dist-packages/django_pipeline-1.3.27-py2.7.egg/pipeline/storage.py", > > line 32, in post_process > packager.pack_stylesheets(package) > File > "/usr/local/lib/python2.7/dist-packages/django_pipeline-1.3.27-py2.7.egg/pipeline/packager.py", > > line 94, in pack_stylesheets > variant=package.variant, **kwargs) > File > "/usr/local/lib/python2.7/dist-packages/django_pipeline-1.3.27-py2.7.egg/pipeline/packager.py", > > line 103, in pack > paths = self.compile(package.paths, force=True) > File > "/usr/local/lib/python2.7/dist-packages/django_pipeline-1.3.27-py2.7.egg/pipeline/packager.py", > > line 97, in compile > return self.compiler.compile(paths, force=force) > File > "/usr/local/lib/python2.7/dist-packages/django_pipeline-1.3.27-py2.7.egg/pipeline/compilers/__init__.py", > > line 55, in compile > return list(executor.map(_compile, paths)) > File > "/usr/local/lib/python2.7/dist-packages/futures-3.0.5-py2.7.egg/concurrent/futures/_base.py", > > line 581, in result_iterator > yield future.result() > File > "/usr/local/lib/python2.7/dist-packages/futures-3.0.5-py2.7.egg/concurrent/futures/_base.py", > > line 405, in result > return self.__get_result() > File > "/usr/local/lib/python2.7/dist-packages/futures-3.0.5-py2.7.egg/concurrent/futures/thread.py", > > line 55, in run > result = self.fn(*self.args, **self.kwargs) > File > "/usr/local/lib/python2.7/dist-packages/django_pipeline-1.3.27-py2.7.egg/pipeline/compilers/__init__.py", > > line 40, in _compile > outdated=outdated, force=force) > File > "/usr/local/lib/python2.7/dist-packages/django_pipeline-1.3.27-py2.7.egg/pipeline/compilers/less.py", > > line 22, in compile_file > return self.execute_command(command, cwd=dirname(infile)) > File > "/usr/local/lib/python2.7/dist-packages/django_pipeline-1.3.27-py2.7.egg/pipeline/compilers/__init__.py", > > line 99, in execute_command > raise CompilerError(stderr) > pipeline.exceptions.CompilerError: /bin/sh: 1: > /usr/local/lib/python2.7/dist-packages/ReviewBoard-2.5.12-py2.7.egg/reviewboard/../node_modules/less/bin/lessc: > > not found > > The path it tries to find lessc seems wrong as well. the lessc should be > in /usr/local/bin/lessc. > > Has anyone run into the same issue? > -- Supercharge your Review Board with Power Pack: https://www.reviewboard.org/powerpack/ Want us to host Review Board for you? Check out RBCommons: https://rbcommons.com/ Happy user? Let us know! https://www.reviewboard.org/users/ --- You received this message because you are subscribed to the Google Groups "reviewboard" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
