Socket
Socket
Sign inDemoInstall

builder

Package Overview
Dependencies
Maintainers
5
Versions
41
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

builder - npm Package Compare versions

Comparing version 2.2.2 to 2.3.0

lib/utils/tracker.js

15

bin/builder-core.js

@@ -23,3 +23,16 @@ "use strict";

// Run the task
task.execute(callback);
var chalk = require("chalk");
var log = require("../lib/log");
log.info("builder-core:start:" + process.pid, "Started: " + chalk.gray(task));
task.execute(function (err) {
if (err) {
log.error("builder-core:end:" + process.pid,
"Ended with error: " + chalk.gray(task) + " - " + chalk.red(err.message.split("\n")[0]));
} else {
log.info("builder-core:end:" + process.pid, "Ended normally: " + chalk.gray(task));
}
callback(err);
});
};
History
=======
## 2.3.0
* Switch to `tree-kill` to more emphatically kill off children process spawned
within a single builder run.
* Add `builder <action> --setup` flag to run a task before and during an action.
[#51](https://github.com/FormidableLabs/builder/issues/51)
## 2.2.2

@@ -5,0 +12,0 @@

@@ -27,2 +27,7 @@ "use strict";

};
var FLAG_SETUP = {
desc: "Single task to run for the entirety of <action>.",
types: [String],
default: function (val) { return val || null; }
};

@@ -41,3 +46,4 @@ // Option flags.

run: {
tries: FLAG_TRIES
tries: FLAG_TRIES,
setup: FLAG_SETUP
},

@@ -47,2 +53,3 @@

tries: FLAG_TRIES,
setup: FLAG_SETUP,
queue: FLAG_QUEUE,

@@ -54,2 +61,3 @@ buffer: FLAG_BUFFER

tries: FLAG_TRIES,
setup: FLAG_SETUP,
queue: FLAG_QUEUE,

@@ -56,0 +64,0 @@ buffer: FLAG_BUFFER,

96

lib/runner.js

@@ -8,3 +8,4 @@ "use strict";

var chalk = require("chalk");
var log = require("../lib/log");
var log = require("./log");
var Tracker = require("./utils/tracker");

@@ -106,29 +107,20 @@ /**

/**
* Multi-process tracker.
* Add and invoke a setup task if present in options.
*
* @returns {void}
* @param {String} setup Setup task
* @param {Object} shOpts Shell options
* @returns {Object} Process object or `null`.
*/
var Tracker = function Tracker() {
this.procs = [];
};
var addSetup = function (setup, shOpts) {
if (!setup) { return null; }
/**
* Add process and track close.
*
* @param {Object} proc Child process object
* @returns {Object} Child process object
*/
Tracker.prototype.add = function (proc) {
var self = this;
var done = _.once(function (code) {
var level = code === 0 ? "info" : "error";
log[level]("setup:end", "Setup command ended with code: " + code);
});
// Track.
self.procs.push(proc);
log.info("setup:start", "Starting setup task: " + setup);
var proc = run("builder run " + setup, shOpts, {}, done);
proc.on("exit", done);
// Remove from tracked list when closed.
proc.on("close", function () {
self.procs = self.procs.filter(function (obj) {
return obj.pid !== proc.pid;
});
});
return proc;

@@ -138,10 +130,32 @@ };

/**
* Terminate all open processes
* Wrap callback with setup termination behavior.
*
* @returns {void}
* - Create and invoke setup.
* - Early termination on setup error.
* - Ensure callback only called once.
*
* @param {Object} shOpts Shell options
* @param {Object} opts Runner options
* @param {Object} tracker Process tracker
* @param {Function} callback Callback `(err)`
* @returns {Function} Wrapped callback
*/
Tracker.prototype.kill = function () {
this.procs.forEach(function (proc) {
proc.kill();
var createFinish = function (shOpts, opts, tracker, callback) {
// Wrap callback
var finish = _.once(function (err) {
tracker.kill(function () {
callback(err);
});
});
// Add, invoke, and hook to final callback if setup dies early.
var setup = tracker.add(addSetup(opts.setup, shOpts));
if (setup) {
// If setup exit happens before normal termination, kill everything.
setup.on("exit", function (code) {
finish(new Error("Setup exited with code: " + code));
});
}
return finish;
};

@@ -163,3 +177,7 @@

run: function (cmd, shOpts, opts, callback) {
return retry(cmd, shOpts, opts, callback);
// Add + invoke setup (if any), bind tracker cleanup, and wrap callback.
var tracker = new Tracker();
var finish = createFinish(shOpts, opts, tracker, callback);
return retry(cmd, shOpts, opts, finish);
},

@@ -177,6 +195,8 @@

concurrent: function (cmds, shOpts, opts, callback) {
// Add + invoke setup (if any), bind tracker cleanup, and wrap callback.
var tracker = new Tracker();
var queue = opts.queue;
var finish = createFinish(shOpts, opts, tracker, callback);
// Get mapper (queue vs. non-queue)
var queue = opts.queue;
var map = queue ?

@@ -189,6 +209,3 @@ async.mapLimit.bind(async, cmds, queue) :

retry(cmd, shOpts, _.extend({ tracker: tracker }, opts), cb);
}, function (err) {
tracker.kill();
callback(err);
});
}, finish);
},

@@ -206,7 +223,9 @@

envs: function (cmd, shOpts, opts, callback) {
// Add + invoke setup (if any), bind tracker cleanup, and wrap callback.
var tracker = new Tracker();
var finish = createFinish(shOpts, opts, tracker, callback);
// Get mapper (queue vs. non-queue)
var queue = opts.queue;
var taskEnvs = opts._envs;
// Get mapper (queue vs. non-queue)
var map = queue ?

@@ -225,7 +244,4 @@ async.mapLimit.bind(async, taskEnvs, queue) :

retry(cmd, taskShOpts, taskOpts, cb);
}, function (err) {
tracker.kill();
callback(err);
});
}, finish);
}
};
{
"name": "builder",
"version": "2.2.2",
"version": "2.3.0",
"description": "An NPM-based task runner",

@@ -32,3 +32,4 @@ "repository": {

"lodash": "^3.10.1",
"nopt": "^3.0.6"
"nopt": "^3.0.6",
"tree-kill": "^1.0.0"
},

@@ -35,0 +36,0 @@ "devDependencies": {

@@ -161,2 +161,3 @@ [![Travis Status][trav_img]][trav_site]

* `--tries`: Number of times to attempt a task (default: `1`)
* `--setup`: Single task to run for the entirety of <action>.

@@ -177,2 +178,3 @@ ##### builder concurrent

* `--tries`: Number of times to attempt a task (default: `1`)
* `--setup`: Single task to run for the entirety of <action>.
* `--queue`: Number of concurrent processes to run (default: unlimited - `0|null`)

@@ -214,2 +216,3 @@ * `--[no-]buffer`: Buffer output until process end (default: `false`)

* `--tries`: Number of times to attempt a task (default: `1`)
* `--setup`: Single task to run for the entirety of <action>.
* `--queue`: Number of concurrent processes to run (default: unlimited - `0|null`)

@@ -216,0 +219,0 @@ * `--[no-]buffer`: Buffer output until process end (default: `false`)

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc