node package manager

@jenkins-cd/blueocean-core-js

Blue Ocean Core JS

This is an npm module that contains common javascript libraries/utilities that are used across modules and plugins in Blue Ocean.

For Developers

The blueocean-core-js is not automatically incorporated into full builds of the blueocean-plugin project. It is published as its own npm module which is then referenced in other Blue Ocean plugins, notably:

  • blueocean-web (note that since "web" is responsible for "bootstrapping" the Blue Ocean UI, the version specified in blueocean-web/package.json is the version provided to all other modules)
  • blueocean-dashboard
  • blueocean-personalization

Developing with Prerelease Versions

To test changes in blueocean-core-js, perform the following steps:

  • Tick the version number in package.json and npm-shrinkwrap.json and ensure a "prelease" version specified, e.g. 0.0.90-SNAPSHOT-1
  • npm run gulp
  • npm publish --tag beta (the "beta" tag is important)
    • If you receive an error about the package already existing, tick the version up again, e.g. 0.0.90-SNAPSHOT-2 and repeat above steps.
  • Then update the modules that reference core-js:
    • With script: bin/cleanInstall.js @jenkins-cd/blueocean-core-js@0.0.90-SNAPSHOT-1
    • Or manually in blueocean-web, blueocean-dashboard, and blueocean-personalization
      • npm install @jenkins-cd/blueocean-core-js@0.0.90-SNAPSHOT-1 -S -E
  • You should see all package.json and npm-shrinkwrap.json updated to reflect the new version number.
  • Push changes to your branch and ensure that the blueocean-plugin and ATH builds both pass.

Publishing a Production Version

Once the changes to blueocean-core-js are approved via PR, perform the following steps:

  • Ensure your branch is 100% up to date with master. This is critical, otherwise recent changes may be lost and break the app.
    • If changes to core-js were made in the interim, ideally you should merge and publish a new pre-release version to ensure builds still pass.
  • Tick version numbers in package.json and npm-shrinkwrap.json to a production version, e.g. "0.0.90"
  • npm run gulp
  • npm publish
  • Commit the changes to package.json and npm-shrinkwrap.json
  • Tick the version number in package.json and npm-shrinkwrap.json and ensure a "prelease" suffix specified, e.g. 0.0.91-SNAPSHOT
  • Commit the changes to package.json and npm-shrinkwrap.json
  • Then update the modules that reference core-js:
    • With script: bin/cleanInstall.js @jenkins-cd/blueocean-core-js@0.0.90
    • Or manually in blueocean-web, blueocean-dashboard, and blueocean-personalization
      • npm install @jenkins-cd/blueocean-core-js@0.0.90 -S -E
  • You should see all package.json and npm-shrinkwrap.json updated to reflect the new version number.
  • Push changes to your branch and ensure that the blueocean-plugin and ATH builds both pass.
  • Merge your PR to master.

Running Tests

Tests are run via jest using the gulp-jest plugin. Three modes of execution are supported:

npm run test

Runs jest and outputs JUnit test reports and code coverage metrics, in the 'reports' and 'coverage' dirs. This is the "full" execution that is run in CI.

npm run test-fast

Runs jest without test reports or coverage. Fastest run, useful for local development.

npm run test-debug

Runs jest in debug mode listening on localhost:5858. You must attach a debugger for execution to proceed. Test reports and coverage are skipped.

Running select test(s)

All of the above profiles support executing one or more tests via jest's testPathPattern parameter:

npm run test-fast -- --test test/js/UrlUtils-spec.js // one test npm run test-fast -- --test /capability/ // any tests in a 'capability' dir npm run test-fast -- --test Url // any test with 'Url' in the name