We support the current version of node.js and npm available in the LTS
releases of Ubuntu. As of this writing, these are Node v0.10.29 and
npm v1.4.21. While these versions are no longer supported, this restriction is
imposed by our package maintainers.

All JavaScript specific testing tools are invoked via NPM package scripts.
These are useful because they provide a ‘virtual’ runtime environment
whose dependencies are contained entirely in the project directory. They also
allow us to create a consistent interface between the commands that are
invoked by our build, and the tools required by the project.

OpenStack requires a sane testing and code coverage strategy for each
project, though we do not prescribe the tools and coverage threshold, as
these may differ based on circumstance and project type. Generated test
reports should be placed in ./reports in your projects’ root directory.
Generated coverage output should similarly be placed in ./cover.

OpenStack uses npmpack to generate a release tarball, which will
compile all files listed in package.json. If your project requires
concatenation, minification, or any other preprocessing to create a valid
tarball, you may use the npm prepublish hook to trigger these steps.

In addition to the normal PTI Documentation requirements, Javascript
projects are recommended to provide an npmrundocument command for
developer convenience that should:

Either install any needed distro dependencies from the doc tag in
bindep.txt or emit an error if they are not installed.

Install Python dependencies for Sphinx from doc/requirements.txt.

Execute sphinx-build-bhtmldoc/sourcedoc/build

The project infrastructure will not use npm to build the documentation.
Therefore it is STRONGLY discouraged for people to put additional logic
into the npmrundocument command. Additional logic needed around
Sphinx generation should go into Sphinx plugins which should be listed in
doc/requirements.txt.

The project infrastructure will not use npmrunreleasenotes to build
the release notes. Therefore it is STRONGLY discouraged for people to put
additional logic into the npmrunreleasenotes command. Additional
logic needed should go into reno.