blackfish
Advanced tools
Comparing version 0.0.3 to 0.0.4
{ | ||
"name": "blackfish", | ||
"version": "0.0.3", | ||
"version": "0.0.4", | ||
"description": "docker* cli extensions", | ||
@@ -5,0 +5,0 @@ "main": "src/index.js", |
@@ -7,3 +7,3 @@ #!/usr/bin/env node | ||
var path = require('path') | ||
var { BlackfishError, BlackfishCliError } = require('./errors') | ||
var { BlackfishError, BlackfishCliError, BlackfishShutdown } = require('./errors') | ||
@@ -22,52 +22,52 @@ var mod = { | ||
async function run () { | ||
try { | ||
var cli = meow(` | ||
Usage | ||
$ bf | ||
;['uncaughtException', 'unhandledRejection'].forEach(evt => { | ||
process.on(evt, err => { | ||
if (err instanceof BlackfishError) { | ||
console.error(err.message) // no stack | ||
} else if (err instanceof BlackfishCliError) { | ||
console.error(err.message) // no stack, and help | ||
console.error(cli.help) | ||
} else if (err instanceof BlackfishShutdown) { | ||
debug('shutting down') | ||
} else { | ||
console.error(err) | ||
} | ||
process.exit(1) | ||
}) | ||
}) | ||
var cli = meow(` | ||
Usage | ||
$ bf | ||
Options | ||
--compose, -c docker-compose | ||
--interactive, -i interactive docker-compose | ||
--files, -f compose files | ||
Options | ||
--compose, -c docker-compose | ||
--interactive, -i interactive docker-compose | ||
--files, -f compose files | ||
Examples | ||
$ bf -ci -- up | ||
$ bf -ci -f docker-compose.yml,docker-compose.dev.yml -- up | ||
`, { | ||
flags: { | ||
interactive: { | ||
type: 'boolean', | ||
alias: 'i' | ||
}, | ||
files: { | ||
type: 'string', | ||
alias: 'f' | ||
}, | ||
compose: { | ||
type: 'boolean', | ||
alias: 'c' | ||
} | ||
Examples | ||
$ bf -ci -- up | ||
$ bf -ci -f docker-compose.yml,docker-compose.dev.yml -- up | ||
`, { | ||
flags: { | ||
interactive: { | ||
type: 'boolean', | ||
alias: 'i' | ||
}, | ||
files: { | ||
type: 'string', | ||
alias: 'f' | ||
}, | ||
compose: { | ||
type: 'boolean', | ||
alias: 'c' | ||
} | ||
}) | ||
if (cli.input.length === 0) throw new BlackfishError('no docker[-compose] command provided') | ||
if (cli.flags.files) cli.flags.files = mod.parseFilenames(cli.flags.files) | ||
debug('running main') | ||
await bf.main(cli) | ||
} catch (err) { | ||
if (err instanceof BlackfishError) { | ||
console.error(err.message) | ||
process.exit(1) | ||
} else if (err instanceof BlackfishCliError) { | ||
console.error(err.message) | ||
console.error(cli.help) | ||
process.exit(1) | ||
} | ||
throw err | ||
} | ||
}) | ||
if (cli.input.length === 0) throw new BlackfishCliError('no docker[-compose] command provided') | ||
if (cli.flags.files) cli.flags.files = mod.parseFilenames(cli.flags.files) | ||
debug('running main') | ||
await bf.main(cli) | ||
} | ||
if (require.main === module) run() | ||
if (require.main === module) { | ||
run() | ||
} | ||
module.exports = mod |
class BlackfishError extends Error {} | ||
class BlackfishCliError extends Error {} | ||
class BlackfishShutdown extends Error {} | ||
module.exports = { | ||
BlackfishError, | ||
BlackfishCliError | ||
BlackfishCliError, | ||
BlackfishShutdown | ||
} |
@@ -9,3 +9,4 @@ // bf/blackfish <files> | ||
var execa = require('execa') | ||
var { BlackfishCliError } = require('./errors') | ||
var os = require('os') | ||
var { BlackfishError, BlackfishCliError, BlackfishShutdown } = require('./errors') | ||
@@ -15,17 +16,43 @@ module.exports = { | ||
debug('preparing to boot compose') | ||
var { files } = opts.flags | ||
var { files, interactive } = opts.flags | ||
if (!files) files = await composeFiles.get() | ||
debug(`compose files: ${files.join(', ')}`) | ||
var superCompose = await composeFiles.merge(files) | ||
var prompt = new Prompt({ | ||
name: 'images', | ||
message: 'run the following docker-compose services:', | ||
radio: true, | ||
choices: Object.keys(superCompose.services).sort(), | ||
default: Object.keys(superCompose.services).sort() | ||
}) | ||
var services = await prompt.run() | ||
prompt.end(false) | ||
superCompose.services = pick(superCompose.services, services) | ||
if (interactive) { | ||
var prompt = new Prompt({ | ||
name: 'images', | ||
message: 'run the following docker-compose services:', | ||
radio: true, | ||
choices: Object.keys(superCompose.services).sort(), | ||
default: Object.keys(superCompose.services).sort() | ||
}) | ||
var services = await prompt.run() | ||
await prompt.ui.close() | ||
prompt.end(false) | ||
superCompose.services = pick(superCompose.services, services) | ||
} | ||
if (!Object.keys(superCompose.services).length) throw new BlackfishError('no docker compose services found') | ||
var file = await composeFiles.writeBlackfishCompose(superCompose) | ||
await execa('docker-compose', ['-f', file, ...opts.input], { stdio: 'inherit' }) | ||
// var child = execa('docker-compose', ['-f', file, ...opts.input], { stdio: 'inherit' }) | ||
var child = execa.shell(['docker-compose', ...['-f', file, ...opts.input]].join(' '), { stdio: 'inherit' }) | ||
var handleSignal = async signal => { | ||
debug(`received signal: ${signal}`) | ||
try { | ||
var isWin = !!os.platform().match(/^win/) | ||
debug(`isWin?: ${isWin}`) | ||
isWin | ||
? child.kill(signal) | ||
: await execa.shell(`kill -s ${signal.replace('SIG', '')} ${child.pid}`, {stdio: 'inherit'}) | ||
} catch (err) { | ||
console.error(err) | ||
} | ||
try { | ||
await child | ||
} finally { | ||
throw new BlackfishShutdown() // eslint-disable-line | ||
} | ||
} | ||
process.addListener('SIGINT', handleSignal) | ||
await child | ||
process.removeListener('SIGINT', handleSignal) | ||
}, | ||
@@ -32,0 +59,0 @@ main (opts) { |
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
891645
271
0
15