blob: a34444c3fae69198c8aaa6f8f2a394930727f895 [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'],
boolean: ['insecure', 'encode', 'json'],
alias: { auth: 'u', insecure: 'i' }
})
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(' --apihost HOST API HOST')
console.error(' -u, --auth KEY authorization KEY')
console.error(' -i, --insecure bypass certificate checking')
return
}
const filename = argv._[0]
const source = fs.readFileSync(filename, { encoding: 'utf8' })
const composition = filename.slice(filename.lastIndexOf('.')) === '.js' ? vm.runInNewContext(source, { composer, require, console, process }) : composer.deserialize(JSON.parse(source))
if (argv.deploy) {
const options = { ignore_certs: argv.insecure }
if (argv.apihost) options.apihost = argv.apihost
if (argv.auth) options.api_key = argv.auth
const obj = composition.named(argv.deploy)
composer.openwhisk(options).compositions.deploy(obj)
.then(() => {
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(composition.encode('anonymous').actions.slice(-1)[0].action.exec.code)
} else {
console.log(JSON.stringify(composition, null, 4))
}