The progress bar does weird stuff and it causes Travis CI to run out of memory when something else calls nugget while in a coverage check with Instanbul, but only when using async Mocha and calling from within a promise.
Don't ask me why or how.
The solution to stop the leak is to make sure opts.quiet is set i.e. my code now looks like:
var isInCI = process.env.CI !== undefined
nugget([link], { dir: tmpDir, quiet: isInCI }, function () {
isFunction(onDone) && onDone(fullName)
})
It fails on Linux and OS X images, with all versions of node back to 4.