fbredius/storybook

View on GitHub
scripts/utils/concurrency.js

Summary

Maintainability
A
0 mins
Test Coverage
const os = require('os');

/**
 * The maximum number of concurrent tasks we want to have on some CLI and CI tasks.
 * The amount of CPUS minus one, arbitrary limited to 15 to not overload CI executors.
 * @type {number}
 */
const maxConcurrentTasks = Math.min(Math.max(1, os.cpus().length - 1), 15);

/**
 * Use a simple round robin to filter input data according to the CI node currently running the script
 * @param {Array} arrayOfData An array of anything you want
 * @returns {Array} An array containing only the data that shoud be used by current CI node.
 */
function filterDataForCurrentCircleCINode(arrayOfData) {
  const nodeIndex = +process.env.CIRCLE_NODE_INDEX || 0;
  const numberOfNodes = +process.env.CIRCLE_NODE_TOTAL || 1;

  return arrayOfData.filter((_, index) => {
    return index % numberOfNodes === nodeIndex;
  });
}

module.exports = {
  maxConcurrentTasks,
  filterDataForCurrentCircleCINode,
};