2016-01-04 03:58:51 +00:00
|
|
|
###
|
2018-10-19 14:38:50 +00:00
|
|
|
Copyright 2016-2017 Balena
|
2016-01-04 03:58:51 +00:00
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
you may not use this file except in compliance with the License.
|
|
|
|
You may obtain a copy of the License at
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
See the License for the specific language governing permissions and
|
|
|
|
limitations under the License.
|
|
|
|
###
|
|
|
|
|
2017-03-17 17:37:07 +00:00
|
|
|
Raven = require('raven')
|
|
|
|
Raven.disableConsoleAlerts()
|
2017-04-21 10:10:30 +00:00
|
|
|
Raven.config require('./config').sentryDsn,
|
2018-04-16 10:23:31 +00:00
|
|
|
captureUnhandledRejections: true,
|
|
|
|
autoBreadcrumbs: true,
|
2017-03-17 17:37:07 +00:00
|
|
|
release: require('../package.json').version
|
2017-04-21 10:10:30 +00:00
|
|
|
.install (logged, error) ->
|
|
|
|
console.error(error)
|
|
|
|
process.exit(1)
|
2017-06-22 12:48:25 +00:00
|
|
|
Raven.setContext
|
|
|
|
extra:
|
|
|
|
args: process.argv
|
|
|
|
node_version: process.version
|
2017-04-26 13:16:06 +00:00
|
|
|
|
2017-06-22 16:58:09 +00:00
|
|
|
validNodeVersions = require('../package.json').engines.node
|
|
|
|
if not require('semver').satisfies(process.version, validNodeVersions)
|
2017-06-26 11:24:54 +00:00
|
|
|
console.warn """
|
|
|
|
Warning: this version of Node does not match the requirements of this package.
|
2017-06-22 16:58:09 +00:00
|
|
|
This package expects #{validNodeVersions}, but you're using #{process.version}.
|
2017-06-26 11:24:54 +00:00
|
|
|
This may cause unexpected behaviour.
|
2017-08-09 13:18:16 +00:00
|
|
|
|
|
|
|
To upgrade your Node, visit https://nodejs.org/en/download/
|
|
|
|
|
2017-06-26 11:24:54 +00:00
|
|
|
"""
|
2017-06-22 16:58:09 +00:00
|
|
|
|
2017-06-22 11:32:07 +00:00
|
|
|
|
2017-04-26 13:16:06 +00:00
|
|
|
# Doing this before requiring any other modules,
|
2018-10-19 14:38:50 +00:00
|
|
|
# including the 'balena-sdk', to prevent any module from reading the http proxy config
|
2017-04-26 13:16:06 +00:00
|
|
|
# before us
|
|
|
|
globalTunnel = require('global-tunnel-ng')
|
2018-10-19 14:38:50 +00:00
|
|
|
settings = require('balena-settings-client')
|
2017-04-26 13:16:06 +00:00
|
|
|
try
|
|
|
|
proxy = settings.get('proxy') or null
|
|
|
|
catch
|
|
|
|
proxy = null
|
|
|
|
# Init the tunnel even if the proxy is not configured
|
|
|
|
# because it can also get the proxy from the http(s)_proxy env var
|
|
|
|
# If that is not set as well the initialize will do nothing
|
|
|
|
globalTunnel.initialize(proxy)
|
|
|
|
|
2018-10-19 14:38:50 +00:00
|
|
|
# TODO: make this a feature of capitano https://github.com/balena-io/capitano/issues/48
|
2017-05-11 11:34:22 +00:00
|
|
|
global.PROXY_CONFIG = globalTunnel.proxyConfig
|
|
|
|
|
2015-08-19 15:21:08 +00:00
|
|
|
Promise = require('bluebird')
|
2017-03-27 09:14:55 +00:00
|
|
|
capitano = require('capitano')
|
|
|
|
capitanoExecuteAsync = Promise.promisify(capitano.execute)
|
2017-10-17 15:28:40 +00:00
|
|
|
|
2018-10-19 14:38:50 +00:00
|
|
|
# We don't yet use balena-sdk directly everywhere, but we set up shared
|
2017-10-17 15:28:40 +00:00
|
|
|
# options correctly so we can do safely in submodules
|
2018-10-19 14:38:50 +00:00
|
|
|
BalenaSdk = require('balena-sdk')
|
|
|
|
BalenaSdk.setSharedOptions(
|
2017-10-17 15:28:40 +00:00
|
|
|
apiUrl: settings.get('apiUrl')
|
|
|
|
imageMakerUrl: settings.get('imageMakerUrl')
|
|
|
|
dataDirectory: settings.get('dataDirectory')
|
|
|
|
retries: 2
|
|
|
|
)
|
2018-03-23 15:35:39 +00:00
|
|
|
|
2018-10-19 14:38:50 +00:00
|
|
|
balena = BalenaSdk.fromSharedOptions()
|
2017-10-17 15:28:40 +00:00
|
|
|
|
2014-11-26 19:11:34 +00:00
|
|
|
actions = require('./actions')
|
2015-02-10 15:38:19 +00:00
|
|
|
errors = require('./errors')
|
2016-02-12 18:34:16 +00:00
|
|
|
events = require('./events')
|
2015-08-18 12:53:06 +00:00
|
|
|
update = require('./utils/update')
|
2018-04-17 13:17:48 +00:00
|
|
|
{ exitWithExpectedError } = require('./utils/patterns')
|
2014-11-17 19:48:26 +00:00
|
|
|
|
2017-03-29 11:03:40 +00:00
|
|
|
# Assign bluebird as the global promise library
|
|
|
|
# stream-to-promise will produce native promises if not
|
|
|
|
# for this module, which could wreak havoc in this
|
|
|
|
# bluebird-only codebase.
|
|
|
|
require('any-promise/register/bluebird')
|
|
|
|
|
2015-01-16 12:34:59 +00:00
|
|
|
capitano.permission 'user', (done) ->
|
2018-10-19 14:38:50 +00:00
|
|
|
balena.auth.isLoggedIn().then (isLoggedIn) ->
|
2015-01-16 12:34:59 +00:00
|
|
|
if not isLoggedIn
|
2018-04-17 13:17:48 +00:00
|
|
|
exitWithExpectedError('''
|
2016-01-22 03:07:08 +00:00
|
|
|
You have to log in to continue
|
|
|
|
|
|
|
|
Run the following command to go through the login wizard:
|
|
|
|
|
2018-10-19 14:38:50 +00:00
|
|
|
$ balena login
|
2018-04-16 11:59:11 +00:00
|
|
|
''')
|
2015-07-22 22:06:53 +00:00
|
|
|
.nodeify(done)
|
2015-01-16 12:34:59 +00:00
|
|
|
|
2014-12-12 21:20:29 +00:00
|
|
|
capitano.command
|
|
|
|
signature: '*'
|
|
|
|
action: ->
|
|
|
|
capitano.execute(command: 'help')
|
2014-11-27 13:28:24 +00:00
|
|
|
|
2016-07-29 12:32:12 +00:00
|
|
|
capitano.globalOption
|
|
|
|
signature: 'help'
|
|
|
|
boolean: true
|
|
|
|
alias: 'h'
|
|
|
|
|
2015-01-15 17:10:14 +00:00
|
|
|
# ---------- Info Module ----------
|
|
|
|
capitano.command(actions.info.version)
|
2014-12-19 18:07:53 +00:00
|
|
|
|
2015-01-15 17:10:14 +00:00
|
|
|
# ---------- Help Module ----------
|
|
|
|
capitano.command(actions.help.help)
|
2014-12-24 16:40:40 +00:00
|
|
|
|
2015-05-07 15:40:12 +00:00
|
|
|
# ---------- Wizard Module ----------
|
|
|
|
capitano.command(actions.wizard.wizard)
|
|
|
|
|
2018-04-04 12:42:57 +00:00
|
|
|
# ---------- Api key module ----------
|
|
|
|
capitano.command(actions.apiKey.generate)
|
2014-12-12 14:25:32 +00:00
|
|
|
|
2014-11-18 15:37:29 +00:00
|
|
|
# ---------- App Module ----------
|
2015-01-15 17:10:14 +00:00
|
|
|
capitano.command(actions.app.create)
|
|
|
|
capitano.command(actions.app.list)
|
|
|
|
capitano.command(actions.app.remove)
|
|
|
|
capitano.command(actions.app.restart)
|
2015-06-04 15:54:15 +00:00
|
|
|
capitano.command(actions.app.info)
|
2014-12-11 15:31:56 +00:00
|
|
|
|
2018-04-04 12:42:57 +00:00
|
|
|
# ---------- Auth Module ----------
|
|
|
|
capitano.command(actions.auth.login)
|
|
|
|
capitano.command(actions.auth.logout)
|
|
|
|
capitano.command(actions.auth.signup)
|
|
|
|
capitano.command(actions.auth.whoami)
|
|
|
|
|
2014-11-19 17:38:15 +00:00
|
|
|
# ---------- Device Module ----------
|
2015-01-15 17:10:14 +00:00
|
|
|
capitano.command(actions.device.list)
|
2016-09-25 23:49:06 +00:00
|
|
|
capitano.command(actions.device.supported)
|
2015-01-15 17:10:14 +00:00
|
|
|
capitano.command(actions.device.rename)
|
2015-02-04 18:13:28 +00:00
|
|
|
capitano.command(actions.device.init)
|
2015-01-15 17:10:14 +00:00
|
|
|
capitano.command(actions.device.remove)
|
|
|
|
capitano.command(actions.device.identify)
|
2016-03-04 13:38:11 +00:00
|
|
|
capitano.command(actions.device.reboot)
|
2016-11-01 15:41:16 +00:00
|
|
|
capitano.command(actions.device.shutdown)
|
2016-08-09 13:14:50 +00:00
|
|
|
capitano.command(actions.device.enableDeviceUrl)
|
|
|
|
capitano.command(actions.device.disableDeviceUrl)
|
|
|
|
capitano.command(actions.device.getDeviceUrl)
|
|
|
|
capitano.command(actions.device.hasDeviceUrl)
|
2015-09-29 18:33:31 +00:00
|
|
|
capitano.command(actions.device.register)
|
2015-11-11 19:00:02 +00:00
|
|
|
capitano.command(actions.device.move)
|
2015-10-19 18:14:04 +00:00
|
|
|
capitano.command(actions.device.info)
|
2014-11-21 18:21:47 +00:00
|
|
|
|
2015-01-30 12:45:38 +00:00
|
|
|
# ---------- Notes Module ----------
|
2015-01-15 17:10:14 +00:00
|
|
|
capitano.command(actions.notes.set)
|
2014-12-24 16:40:40 +00:00
|
|
|
|
2014-11-20 17:02:29 +00:00
|
|
|
# ---------- Keys Module ----------
|
2015-01-15 17:10:14 +00:00
|
|
|
capitano.command(actions.keys.list)
|
|
|
|
capitano.command(actions.keys.add)
|
|
|
|
capitano.command(actions.keys.info)
|
|
|
|
capitano.command(actions.keys.remove)
|
2014-11-21 17:56:11 +00:00
|
|
|
|
2014-11-24 16:12:12 +00:00
|
|
|
# ---------- Env Module ----------
|
2015-01-15 17:10:14 +00:00
|
|
|
capitano.command(actions.env.list)
|
|
|
|
capitano.command(actions.env.add)
|
|
|
|
capitano.command(actions.env.rename)
|
|
|
|
capitano.command(actions.env.remove)
|
2014-11-24 17:00:36 +00:00
|
|
|
|
2015-09-29 17:03:14 +00:00
|
|
|
# ---------- OS Module ----------
|
2017-06-08 19:58:37 +00:00
|
|
|
capitano.command(actions.os.versions)
|
2015-09-29 17:03:14 +00:00
|
|
|
capitano.command(actions.os.download)
|
2017-06-12 08:42:08 +00:00
|
|
|
capitano.command(actions.os.buildConfig)
|
2015-09-29 17:36:29 +00:00
|
|
|
capitano.command(actions.os.configure)
|
2015-09-29 18:52:34 +00:00
|
|
|
capitano.command(actions.os.initialize)
|
2015-09-29 17:03:14 +00:00
|
|
|
|
2015-11-10 16:53:34 +00:00
|
|
|
# ---------- Config Module ----------
|
|
|
|
capitano.command(actions.config.read)
|
2015-11-10 18:27:01 +00:00
|
|
|
capitano.command(actions.config.write)
|
2016-03-17 20:07:19 +00:00
|
|
|
capitano.command(actions.config.inject)
|
2015-11-11 14:38:45 +00:00
|
|
|
capitano.command(actions.config.reconfigure)
|
2016-02-27 02:37:15 +00:00
|
|
|
capitano.command(actions.config.generate)
|
2015-11-10 16:53:34 +00:00
|
|
|
|
2015-11-16 02:08:02 +00:00
|
|
|
# ---------- Settings Module ----------
|
|
|
|
capitano.command(actions.settings.list)
|
|
|
|
|
2014-11-28 16:46:24 +00:00
|
|
|
# ---------- Logs Module ----------
|
2015-05-18 13:37:27 +00:00
|
|
|
capitano.command(actions.logs)
|
2014-11-28 16:46:24 +00:00
|
|
|
|
2016-03-28 13:21:25 +00:00
|
|
|
# ---------- Sync Module ----------
|
|
|
|
capitano.command(actions.sync)
|
|
|
|
|
2017-08-04 12:53:31 +00:00
|
|
|
# ---------- Preload Module ----------
|
|
|
|
capitano.command(actions.preload)
|
|
|
|
|
2016-04-24 19:52:41 +00:00
|
|
|
# ---------- SSH Module ----------
|
|
|
|
capitano.command(actions.ssh)
|
|
|
|
|
2018-10-19 14:38:50 +00:00
|
|
|
# ---------- Local balenaOS Module ----------
|
2017-03-08 19:26:08 +00:00
|
|
|
capitano.command(actions.local.configure)
|
|
|
|
capitano.command(actions.local.flash)
|
|
|
|
capitano.command(actions.local.logs)
|
|
|
|
capitano.command(actions.local.push)
|
|
|
|
capitano.command(actions.local.ssh)
|
|
|
|
capitano.command(actions.local.scan)
|
2017-03-09 19:14:25 +00:00
|
|
|
capitano.command(actions.local.stop)
|
2017-03-08 19:26:08 +00:00
|
|
|
|
2017-06-14 21:20:15 +00:00
|
|
|
# ---------- Public utils ----------
|
|
|
|
capitano.command(actions.util.availableDrives)
|
|
|
|
|
2017-03-24 09:48:14 +00:00
|
|
|
# ---------- Internal utils ----------
|
|
|
|
capitano.command(actions.internal.osInit)
|
2018-05-22 15:12:51 +00:00
|
|
|
capitano.command(actions.internal.scanDevices)
|
|
|
|
capitano.command(actions.internal.sudo)
|
2017-03-24 09:48:14 +00:00
|
|
|
|
2017-03-29 11:03:40 +00:00
|
|
|
#------------ Local build and deploy -------
|
|
|
|
capitano.command(actions.build)
|
|
|
|
capitano.command(actions.deploy)
|
|
|
|
|
2018-04-25 14:20:07 +00:00
|
|
|
#------------ Push/remote builds -------
|
|
|
|
capitano.command(actions.push.push)
|
|
|
|
|
2018-05-22 15:12:51 +00:00
|
|
|
#------------ Join/Leave -------
|
|
|
|
capitano.command(actions.join.join)
|
|
|
|
capitano.command(actions.leave.leave)
|
|
|
|
|
2015-08-18 12:53:06 +00:00
|
|
|
update.notify()
|
|
|
|
|
2017-12-12 16:28:18 +00:00
|
|
|
cli = capitano.parse(process.argv)
|
|
|
|
runCommand = ->
|
|
|
|
if cli.global?.help
|
|
|
|
capitanoExecuteAsync(command: "help #{cli.command ? ''}")
|
|
|
|
else
|
|
|
|
capitanoExecuteAsync(cli)
|
2016-02-12 18:34:16 +00:00
|
|
|
|
2017-12-12 16:28:18 +00:00
|
|
|
Promise.all([events.trackCommand(cli), runCommand()])
|
2015-08-19 15:21:08 +00:00
|
|
|
.catch(errors.handle)
|