Package javascript modules in rpm/deb

https://blueprints.launchpad.net/fuel/+spec/package-js.spec

This blueprint describes a way to package npm and bower modules as RPM (DEB)

Problem description

  • Now we download javascript modules for nailgun during ISO build from NPM registry and bower. This operation could fail and we end with broken ISO build jobs
  • Some users may have limited internet connection or no connection at all. We must have an ability to build ISO only from repositories provided.

Proposed change

Package every used NPM module in RPM (DEB) so we could patch it and reuse as Fuel dependency. Eg: all necessary modules are described in package.json and bower.json for nailgun as follows:

https://github.com/stackforge/fuel-web/blob/master/nailgun/package.json https://github.com/stackforge/fuel-web/blob/master/nailgun/bower.json

All built node packages must be installed prior to Fuel UI build. Specs must be changed to obtain modules from local cache instead of the internet.

Alternatives

  • internet mirrors of NPM registry or bower
  • local mirror of NPM registry or bower.
  • upstream packages

Business impact

  • enable patching of JavaScript modules used in Fuel UI
  • prevent a class of regression in ISO build process
  • make it possible to package Fuel UI according to OS policies

REST API impact

None

Upgrade impact

None

Data model impact

None

Other end user impact

None

Security impact

None

Notifications impact

None

Other impact

Operating system has nodejs modules already built. But they are outdated. Every packaged module must obsolete or correctly replace upstream version.

Performance Impact

None

Plugin impact

None

Other deployer impact

Package names must be explicitly written in all necessary specs and in requirements files.

Developer impact

  • Developer should adapt spec file or config file to obtain modules from local cache instead of the internet.

Implementation

  • Use script for generating spec files. It could be used automatically by Jenkins or ondemand in any need. Script could parse package.json or bower.json for any sensitive information like module name and version.
  • (Optionally) Jenkins job which is able to automatically check NPM or bower upstream versus our repository and compile new version if any.
  • Repository must contain every version we built to maintain compatibility.
  • We must complaint packaging policies for Debian or Centos if any. Every spec must pass lintian. Every our package must not ruine existing upstream package tree.

Assignee(s)

Primary assignee:
Artem Silenkov <asilenkov@mirantis.com>

Work Items

  • Prepare specs for every used JS module for RPM and DEB
  • Package and place at repository every used JS module

Acceptance criteria

  • Packages are ready and placed in base repository
  • Packages version are the same as described in package.json and bower.json
  • Packages are installable and removeable inside OS
  • There are no conflicts in existing upstream package tree
  • Fuel UI build is successful without internet access just using our packages like local cache

Dependencies

None

Testing

None

Documentation Impact

None