UNPKG

2.38 kBtext/coffeescriptView Raw
1_ = require 'lodash'
2colors = require 'colors'
3program = require 'commander'
4moment = require 'moment'
5cliClear = require 'cli-clear'
6Printer = require './src/printer'
7Config = require './src/config.coffee'
8packageJSON = require './package.json'
9
10GovernatorService = require './src/governator-service.coffee'
11DeployStateService = require './src/deploy-state-service'
12ServiceStateService = require './src/service-state-service'
13
14program
15 .version packageJSON.version
16 .usage '[options] <project-name> <tag>'
17 .option '-o, --owner <octoblu>', 'Project owner'
18 .option '-j, --json', 'Print JSON'
19
20class Command
21 constructor: ->
22 process.on 'uncaughtException', @die
23 @config = new Config()
24 {@repo, @owner, @tag, @json} = @parseOptions()
25 @deployStateService = new DeployStateService { config: @config.get() }
26 @governatorService = new GovernatorService { config: @config.get() }
27 @serviceStateService = new ServiceStateService { config: @config.get() }
28
29 parseOptions: =>
30 program.parse process.argv
31 repo = program.args[0]
32 repo ?= @config.getPackageName()
33
34 tag = program.args[1]
35 tag ?= @config.getPackageVersion()
36
37 { owner, json } = program
38 owner ?= 'octoblu'
39
40 throw new Error 'Missing repo' unless repo?
41 throw new Error 'Missing tag' unless tag?
42
43 return { repo, owner, json: json?, tag }
44
45 run: =>
46 @getStatus()
47
48 getStatus: =>
49 cliClear()
50 slug = "#{@owner}/#{@repo}:#{@tag}"
51 printer = new Printer { @json, slug }
52 console.log '[refreshed at] ', colors.cyan moment().toString()
53 @deployStateService.getStatus { @repo, @owner, @tag }, (error, deployment) =>
54 return @die error if error?
55 @serviceStateService.getStatuses { @repo, @owner }, (error, dockerUrls) =>
56 return @die error if error?
57 @governatorService.getStatuses { @repo, @owner, @tag }, (error, governators) =>
58 return @die error if error?
59 return printer.printJSON { deployment, dockerUrls, governators } if @json
60 printer.printDeployment deployment
61 printer.printDockerUrls dockerUrls
62 printer.printGovernators governators
63 _.delay @getStatus, 1000 * 40
64
65 die: (error) =>
66 return process.exit(0) unless error?
67 console.error 'ERROR'
68 console.error error.stack
69 process.exit 1
70
71module.exports = Command