blob: fd16e8ae6ff89e2b3ebb3337cc3739238ef6fbd2 [file] [log] [blame]
#!/usr/bin/env node
'use strict'
const fs = require('fs')
const vm = require('vm')
const minimist = require('minimist')
const composer = require('../composer')
const argv = minimist(process.argv.slice(2), {
string: ['apihost', 'auth', 'deploy', 'lower'],
boolean: ['insecure', 'encode', 'json', 'version'],
alias: { auth: 'u', insecure: 'i', version: 'v' }
})
if (argv.version) {
console.log(composer.version)
return
}
let count = 0
if (argv.json) count++
if (argv.encode) count++
if (typeof argv.deploy !== 'undefined') count++
if (argv._.length !== 1 || count > 1 || argv.deploy === '') {
console.error('Usage:')
console.error(' compose composition.js[on] command [flags]')
console.error('Commands:')
console.error(' --json output the json representation for the composition (default command)')
console.error(' --deploy NAME deploy the composition with name NAME')
console.error(' --encode output the conductor action code for the composition')
console.error('Flags:')
console.error(' --lower [VERSION] lower to primitive combinators or specific composer version')
console.error(' --apihost HOST API HOST')
console.error(' -u, --auth KEY authorization KEY')
console.error(' -i, --insecure bypass certificate checking')
console.error(' -v, --version output the composer version')
return
}
const filename = argv._[0]
const source = fs.readFileSync(filename, { encoding: 'utf8' })
let composition = filename.slice(filename.lastIndexOf('.')) === '.js' ? vm.runInNewContext(source, { composer, require, console, process }) : composer.deserialize(JSON.parse(source))
const lower = typeof argv.lower === 'string' ? argv.lower : false
if (argv.deploy) {
const options = { ignore_certs: argv.insecure }
if (argv.apihost) options.apihost = argv.apihost
if (argv.auth) options.api_key = argv.auth
composer.openwhisk(options).compositions.deploy(composer.composition(argv.deploy, composition), lower)
.then(obj => {
const names = obj.actions.map(action => action.name)
console.log(`ok: created action${names.length > 1 ? 's' : ''} ${names}`)
}, console.error)
} else if (argv.encode) {
console.log(composer.encode(composer.composition('anonymous', composition), lower).actions.slice(-1)[0].action.exec.code)
} else {
console.log(JSON.stringify(composer.lower(composition, lower), null, 4))
}