dawn-cli 0.7.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -0
- data/README.md +31 -0
- data/bin/dawn +1 -6
- data/lib/dawn/cli/commands/app.rb +86 -148
- data/lib/dawn/cli/commands/auth.rb +19 -0
- data/lib/dawn/cli/commands/domain.rb +17 -40
- data/lib/dawn/cli/commands/drain.rb +17 -41
- data/lib/dawn/cli/commands/env.rb +32 -51
- data/lib/dawn/cli/commands/key.rb +31 -48
- data/lib/dawn/cli/commands/local.rb +17 -49
- data/lib/dawn/cli/commands/release.rb +21 -0
- data/lib/dawn/cli/commands.rb +7 -6
- data/lib/dawn/cli/{application.rb → helpers.rb} +12 -35
- data/lib/dawn/cli/output_formatter.rb +10 -7
- data/lib/dawn/cli/parser.rb +266 -0
- data/lib/dawn/cli/patches.rb +3 -1
- data/lib/dawn/cli/version.rb +2 -2
- data/lib/dawn/cli.rb +2 -6
- metadata +27 -9
- data/lib/dawn/cli/commands/login.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c69df2b06d2b520437bb91ae452de45c88693ce
|
4
|
+
data.tar.gz: cbc1a3bd916fc0aab3651867f8b2ddf797142c11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11d3f2f1ddd10804df98ab8f571a3f36de4369bc101bccc3c8619b6931eb65f21abe7e5563c79d5c48f8af195f2b0ebd0ea984c6388729ff46578c34d3b058f8
|
7
|
+
data.tar.gz: b1c12805372cca918d79124a7de6f66f44dc1a66c516143ce8d5a12fa125105e6cc4e61d9b0bd182879292854c48e2c345da8bbe23474e7f08bf71e06f3ec79c
|
data/CHANGELOG.md
ADDED
data/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
Dawn-CLI
|
2
|
+
========
|
3
|
+
[link](https://github.com/dawn/dawn-cli)
|
4
|
+
|
5
|
+
[![Dependency Status](https://gemnasium.com/dawn/dawn-cli.svg)](https://gemnasium.com/dawn/dawn-cli)
|
6
|
+
[![Gem Version](https://badge.fury.io/rb/dawn-cli.svg)](http://badge.fury.io/rb/dawn-cli)
|
7
|
+
[![Code Climate](https://codeclimate.com/github/dawn/dawn-cli.png)](https://codeclimate.com/github/dawn/dawn-cli)
|
8
|
+
|
9
|
+
CLI for [Dawn](https://github.com/dawn/dawn)
|
10
|
+
|
11
|
+
If you are looking for the ruby API
|
12
|
+
[Dawn-API](https://github.com/dawn/dawn-api)
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
```shell
|
16
|
+
gem install dawn-cli
|
17
|
+
```
|
18
|
+
|
19
|
+
## Building
|
20
|
+
```shell
|
21
|
+
gem pack dawn-cli.gem
|
22
|
+
```
|
23
|
+
|
24
|
+
## Usage
|
25
|
+
```shell
|
26
|
+
dawn
|
27
|
+
```
|
28
|
+
Help is printed if no commands are given.
|
29
|
+
|
30
|
+
## ENV Variables
|
31
|
+
[ENV(s)](https://github.com/dawn/dawn-api#influential-env-variable)
|
data/bin/dawn
CHANGED
@@ -1,174 +1,112 @@
|
|
1
|
-
|
2
|
-
module CLI
|
3
|
-
class Application
|
4
|
-
def app_commands
|
5
|
-
|
6
|
-
command "app:ls" do |c|
|
7
|
-
c.syntax = "dawn app:ls"
|
8
|
-
c.description = "Displays a list of all the apps you have deployed to dawn"
|
9
|
-
|
10
|
-
c.action do |args, options|
|
11
|
-
apps = Dawn::App.all
|
12
|
-
say format_apps(apps)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
alias_command "ls", "app:ls"
|
1
|
+
require "dawn/cli/helpers"
|
16
2
|
|
17
|
-
|
18
|
-
|
19
|
-
|
3
|
+
module Dawn
|
4
|
+
module CLI
|
5
|
+
module App
|
20
6
|
|
21
|
-
|
22
|
-
app = current_app
|
23
|
-
formation = {}
|
7
|
+
extend Dawn::CLI::Helpers
|
24
8
|
|
25
|
-
|
26
|
-
|
27
|
-
|
9
|
+
# "Displays a list of all the apps you have deployed to dawn"
|
10
|
+
def self.list
|
11
|
+
say format_apps(Dawn::App.all)
|
12
|
+
end
|
28
13
|
|
29
|
-
|
30
|
-
|
31
|
-
|
14
|
+
# "Modify the gears of the current app"
|
15
|
+
def self.scale(modifiers)
|
16
|
+
app = current_app
|
32
17
|
|
33
|
-
|
34
|
-
|
35
|
-
when "-" then old_formation - value
|
36
|
-
when "=" then value
|
37
|
-
end
|
38
|
-
end
|
39
|
-
app.scale formation: formation
|
40
|
-
end
|
41
|
-
end
|
18
|
+
#formation = app.formation.dup
|
19
|
+
formation = {}
|
42
20
|
|
43
|
-
|
44
|
-
|
45
|
-
c.description = "Delete App app_id, if no app_id is provided, the current app is deleted instead"
|
21
|
+
modifiers.each do |type, a|
|
22
|
+
operator, value = *a
|
46
23
|
|
47
|
-
|
24
|
+
old_formation = (app.formation[type] || 0).to_i
|
48
25
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
app = current_app
|
56
|
-
end
|
26
|
+
formation[type] = case operator
|
27
|
+
when "+" then old_formation + value.to_i
|
28
|
+
when "-" then old_formation - value.to_i
|
29
|
+
when "=" then value.to_i
|
30
|
+
end
|
31
|
+
end
|
57
32
|
|
58
|
-
|
59
|
-
|
33
|
+
app.scale(app: { formation: formation })
|
34
|
+
end
|
60
35
|
|
61
|
-
|
62
|
-
|
63
|
-
|
36
|
+
# "Deletes the app on dawn"
|
37
|
+
def self.delete
|
38
|
+
app = current_app
|
64
39
|
|
65
|
-
|
66
|
-
|
67
|
-
|
40
|
+
app.destroy
|
41
|
+
git_remove_dawn_remote app
|
42
|
+
end
|
68
43
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
request.read_body do |chunk|
|
103
|
-
if filters.size > 0
|
104
|
-
chunk.each_line do |line|
|
105
|
-
if mtch_data = line.chomp.match(filter_regex)
|
106
|
-
say mtch_data[0] if filters.include?(mtch_data[:proc_id])
|
44
|
+
# "Prints the App's log to STDOUT"
|
45
|
+
def self.logs(follow=false)
|
46
|
+
# this is the only method which requires the uri & net/http
|
47
|
+
require 'uri'
|
48
|
+
require 'net/http'
|
49
|
+
|
50
|
+
filter_regex = %r{\A(?<timestamp>\S+)\s(?<token>\S+)\[(?<proc_id>\S+)\]\:(?<message>.*)}
|
51
|
+
timestamp_regex = %r{(?<year>\d+)-(?<month>\d+)-(?<day>\d+)T(?<hour>\d+)\:(?<minute>\d+)\:(?<second>\d+)\.(?<other>.*)}
|
52
|
+
|
53
|
+
opts = {}
|
54
|
+
opts[:tail] = follow
|
55
|
+
filters = args
|
56
|
+
app = current_app
|
57
|
+
url = app.logs(opts)
|
58
|
+
uri = URI.parse(url)
|
59
|
+
|
60
|
+
begin
|
61
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
62
|
+
http.read_timeout = 60 * 60 * 24
|
63
|
+
begin
|
64
|
+
http.start do
|
65
|
+
link_url = uri.path + ("?srv=1")
|
66
|
+
#say uri.host + ":" + uri.port.to_s + link_url
|
67
|
+
http.request_get(link_url) do |request|
|
68
|
+
request.read_body do |chunk|
|
69
|
+
if filters.size > 0
|
70
|
+
chunk.each_line do |line|
|
71
|
+
if mtch_data = line.chomp.match(filter_regex)
|
72
|
+
say mtch_data[0] if filters.include?(mtch_data[:proc_id])
|
73
|
+
end
|
74
|
+
end
|
75
|
+
else
|
76
|
+
say chunk.to_s
|
107
77
|
end
|
108
78
|
end
|
109
|
-
else
|
110
|
-
say chunk.to_s
|
111
79
|
end
|
112
80
|
end
|
81
|
+
rescue Errno::ECONNREFUSED, Errno::ETIMEDOUT, SocketError
|
82
|
+
raise "Could not connect to logging service"
|
83
|
+
rescue Timeout::Error, EOFError
|
84
|
+
raise "\nRequest timed out"
|
113
85
|
end
|
86
|
+
rescue Interrupt
|
114
87
|
end
|
115
|
-
rescue Errno::ECONNREFUSED, Errno::ETIMEDOUT, SocketError
|
116
|
-
raise "Could not connect to logging service"
|
117
|
-
rescue Timeout::Error, EOFError
|
118
|
-
raise "\nRequest timed out"
|
119
88
|
end
|
120
|
-
rescue Interrupt
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
alias_command "logs", "app:logs"
|
125
89
|
|
126
|
-
|
127
|
-
|
128
|
-
|
90
|
+
# "Lists all currently running Gears"
|
91
|
+
def self.list_gears
|
92
|
+
app = current_app
|
93
|
+
gears = app.gears.all.sort_by(&:number)
|
129
94
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
gears_by_type.keys.sort.each do |key|
|
140
|
-
grs = gears_by_type[key]
|
141
|
-
say "=== #{key}:"
|
142
|
-
say format_gears grs
|
143
|
-
end
|
144
|
-
else
|
145
|
-
## Print a specific gear
|
146
|
-
query = args.first
|
147
|
-
gear = gears.find { |gear| gear.name == query }
|
148
|
-
|
149
|
-
if gear
|
150
|
-
say format_gears([gear])
|
151
|
-
else
|
152
|
-
say "Gear #{query} was not found."
|
95
|
+
## Print all Gears
|
96
|
+
gears_by_type = gears.each_with_object({}) do |gear, hsh|
|
97
|
+
(hsh[gear.type] ||= []) << gear
|
98
|
+
end
|
99
|
+
gears_by_type.keys.sort.each do |key|
|
100
|
+
grs = gears_by_type[key]
|
101
|
+
say "=== #{key}:"
|
102
|
+
say format_gears grs
|
103
|
+
end
|
153
104
|
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
alias_command "ps", "app:gears"
|
158
105
|
|
159
|
-
|
160
|
-
|
161
|
-
|
106
|
+
def self.restart
|
107
|
+
current_app.restart
|
108
|
+
end
|
162
109
|
|
163
|
-
|
164
|
-
app = current_app
|
165
|
-
app.restart
|
166
|
-
say "App #{app.name} has been restarted"
|
110
|
+
end
|
167
111
|
end
|
168
112
|
end
|
169
|
-
alias_command "restart", "app:restart"
|
170
|
-
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "dawn/cli/helpers"
|
2
|
+
|
3
|
+
module Dawn
|
4
|
+
module CLI
|
5
|
+
module Auth
|
6
|
+
|
7
|
+
extend Dawn::CLI::Helpers
|
8
|
+
|
9
|
+
# "save login details to .netrc"
|
10
|
+
# usn = ask "Username: "
|
11
|
+
# psw = password "Password: "
|
12
|
+
def self.login(username, password)
|
13
|
+
Dawn.authenticate(username: username, password: password)
|
14
|
+
say " ! login details have been saved to your .netrc"
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,49 +1,26 @@
|
|
1
|
-
|
2
|
-
module CLI
|
3
|
-
class Application
|
4
|
-
def domain_commands
|
1
|
+
require "dawn/cli/helpers"
|
5
2
|
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
module Dawn
|
4
|
+
module CLI
|
5
|
+
module Domain
|
9
6
|
|
10
|
-
|
11
|
-
url = args.first
|
12
|
-
app = current_app
|
7
|
+
extend Dawn::CLI::Helpers
|
13
8
|
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
# "List all domains for the current app"
|
10
|
+
def self.list
|
11
|
+
say format_domains(current_app.domains.all)
|
12
|
+
end
|
17
13
|
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
# "Add a new domain to the current app"
|
15
|
+
def self.add(url)
|
16
|
+
current_app.domains.create(domain: { url: url })
|
17
|
+
end
|
21
18
|
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
# "Remove an existing domain from the current app"
|
20
|
+
def self.delete(url)
|
21
|
+
current_app.domains.delete(url: url)
|
22
|
+
end
|
25
23
|
|
26
|
-
domain = app.domains.all.find { |domain| domain.url == url }
|
27
|
-
if domain
|
28
|
-
domain.destroy
|
29
|
-
else
|
30
|
-
say "Domain (url: #{url}) could not be found"
|
31
24
|
end
|
32
25
|
end
|
33
26
|
end
|
34
|
-
|
35
|
-
command "domain:ls" do |c|
|
36
|
-
c.syntax = "dawn domain:ls"
|
37
|
-
c.description = "List all domains for the current app"
|
38
|
-
|
39
|
-
c.action do |args, options|
|
40
|
-
app = current_app
|
41
|
-
|
42
|
-
say format_domains(app.domains.all)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,50 +1,26 @@
|
|
1
|
-
|
2
|
-
module CLI
|
3
|
-
class Application
|
4
|
-
def drain_commands
|
1
|
+
require "dawn/cli/helpers"
|
5
2
|
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
module Dawn
|
4
|
+
module CLI
|
5
|
+
module Drain
|
9
6
|
|
10
|
-
|
11
|
-
url = args.first
|
12
|
-
app = current_app
|
7
|
+
extend Dawn::CLI::Helpers
|
13
8
|
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
# "List all drains for the current app"
|
10
|
+
def self.list
|
11
|
+
say format_drains(current_app.drains.all)
|
12
|
+
end
|
17
13
|
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
# "Add a new drain to the current app"
|
15
|
+
def self.add(url)
|
16
|
+
current_app.drains.create(drain: { url: url })
|
17
|
+
end
|
21
18
|
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
# "Remove an existing drain from the current app"
|
20
|
+
def self.delete(url)
|
21
|
+
current_app.drains.delete(url: url)
|
22
|
+
end
|
25
23
|
|
26
|
-
drain = app.drains.all.find { |drain| drain.url == url }
|
27
|
-
if drain
|
28
|
-
drain.destroy
|
29
|
-
else
|
30
|
-
say "Drain (url: #{url}) could not be found"
|
31
24
|
end
|
32
25
|
end
|
33
26
|
end
|
34
|
-
|
35
|
-
command "drain:ls" do |c|
|
36
|
-
c.syntax = "dawn drain:ls"
|
37
|
-
c.description = "Lists all Drains for this App"
|
38
|
-
|
39
|
-
c.action do |args, options|
|
40
|
-
url = args.first
|
41
|
-
app = current_app
|
42
|
-
drains = app.drains.all
|
43
|
-
say format_drains(drains)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,62 +1,43 @@
|
|
1
|
-
|
2
|
-
module CLI
|
3
|
-
class Application
|
4
|
-
def env_commands
|
5
|
-
|
6
|
-
command "env:set" do |c|
|
7
|
-
c.syntax = "dawn env:set [<key_name=value>..]"
|
8
|
-
c.description = "Set multiple ENV variables"
|
1
|
+
require "dawn/cli/helpers"
|
9
2
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
key, value = arg.split("=", 2)
|
14
|
-
hsh[key] = value
|
15
|
-
end
|
16
|
-
env.update(vars)
|
17
|
-
env.save
|
18
|
-
say "App ENV has been updated"
|
19
|
-
end
|
20
|
-
end
|
3
|
+
module Dawn
|
4
|
+
module CLI
|
5
|
+
module Env
|
21
6
|
|
22
|
-
|
23
|
-
c.syntax = "dawn env:get [<key_name> ..]"
|
24
|
-
c.description = "Get an ENV var, if none is given prints all the variables"
|
7
|
+
extend Dawn::CLI::Helpers
|
25
8
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
9
|
+
# displays all the current app's ENV variables
|
10
|
+
def self.list
|
11
|
+
current_app.env.each do |k, v|
|
12
|
+
say "#{k}=#{v}"
|
13
|
+
end
|
31
14
|
end
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
15
|
+
|
16
|
+
# "Get an ENV var"
|
17
|
+
def self.get(*keys)
|
18
|
+
app = current_app
|
19
|
+
env = app.env
|
20
|
+
keys.each do |k|
|
21
|
+
say "#{k}=#{env[k]}"
|
22
|
+
end
|
36
23
|
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
24
|
|
41
|
-
|
42
|
-
|
43
|
-
|
25
|
+
# "Set multiple ENV variables"
|
26
|
+
def self.set(hash)
|
27
|
+
app = current_app
|
28
|
+
app.env.update(app.env.merge(hash)) # this is a Hash method
|
29
|
+
app.env.save # this is a API method
|
30
|
+
end
|
44
31
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
32
|
+
# "Deletes an ENV var"
|
33
|
+
def self.unset(*keys)
|
34
|
+
app = current_app
|
35
|
+
keys.each do |k|
|
36
|
+
app.env.delete(k)
|
37
|
+
end
|
38
|
+
app.env.save
|
52
39
|
end
|
40
|
+
|
53
41
|
end
|
54
|
-
env.save
|
55
|
-
say "deleted #{dlt_keys.join(", ")}"
|
56
42
|
end
|
57
43
|
end
|
58
|
-
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,51 +1,34 @@
|
|
1
|
-
|
2
|
-
module CLI
|
3
|
-
class Application
|
4
|
-
def key_commands
|
5
|
-
|
6
|
-
command "key:add" do |c|
|
7
|
-
c.syntax = "dawn key:add"
|
8
|
-
c.description = "Adds your local ssh_key"
|
9
|
-
|
10
|
-
c.action do |args, options|
|
11
|
-
filename = File.join(Dir.home, ".ssh/id_rsa.pub")
|
12
|
-
pubkey = File.read filename
|
13
|
-
key = Dawn::Key.add(pubkey)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
command "key:ls" do |c|
|
18
|
-
c.syntax = "dawn key:ls"
|
19
|
-
c.description = "Lists all your Keys currently on dawn"
|
20
|
-
|
21
|
-
c.action do |args, options|
|
22
|
-
keys = Dawn::Key.all
|
23
|
-
say format_keys(keys)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
command "key:get" do |c|
|
28
|
-
c.syntax = "dawn key:get <key_id>"
|
29
|
-
c.description = "Retrieve a Key by ID"
|
1
|
+
require "dawn/cli/helpers"
|
30
2
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
3
|
+
module Dawn
|
4
|
+
module CLI
|
5
|
+
module Key
|
6
|
+
|
7
|
+
extend Dawn::CLI::Helpers
|
8
|
+
|
9
|
+
# "Lists all your Keys currently on dawn"
|
10
|
+
def self.list
|
11
|
+
say format_keys(Dawn::Key.all)
|
12
|
+
end
|
13
|
+
|
14
|
+
# "Adds this machine's sshkey to Dawn"
|
15
|
+
def self.add
|
16
|
+
filename = File.join(Dir.home, ".ssh/id_rsa.pub")
|
17
|
+
pubkey = File.read filename
|
18
|
+
key = Dawn::Key.create(key: pubkey)
|
19
|
+
end
|
20
|
+
|
21
|
+
# "Retrieve a Key by ID"
|
22
|
+
def self.get(id)
|
23
|
+
key = Dawn::Key.find(id: id)
|
24
|
+
say format_keys([key])
|
25
|
+
end
|
26
|
+
|
27
|
+
# "Delete a Key by ID"
|
28
|
+
def self.delete
|
29
|
+
Dawn::Key.destroy(id: id)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
45
33
|
end
|
46
34
|
end
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,57 +1,25 @@
|
|
1
|
-
|
2
|
-
module CLI
|
3
|
-
class Application
|
4
|
-
def local_commands
|
1
|
+
require "dawn/cli/helpers"
|
5
2
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
# c.action do |args, options|
|
10
|
-
# end
|
11
|
-
#end
|
3
|
+
module Dawn
|
4
|
+
module CLI
|
5
|
+
module Local
|
12
6
|
|
13
|
-
|
14
|
-
c.syntax = "dawn new [<app_name>]"
|
15
|
-
c.description = "Create a new dawn App (with git; setup)"
|
7
|
+
extend Dawn::CLI::Helpers
|
16
8
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
appname = app.name
|
9
|
+
def self.health_check
|
10
|
+
Dawn::API.health_check
|
11
|
+
end
|
21
12
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
13
|
+
# "Create a new dawn App (with git; setup)"
|
14
|
+
def self.create(appname=nil)
|
15
|
+
app = try_create_app appname
|
16
|
+
# since its possible for dawn to create a new app, with a random name
|
17
|
+
# setting the appname again based on the real app's name is required
|
18
|
+
appname = app.name
|
19
|
+
git_add_dawn_remote app
|
20
|
+
say "\tAPP\t#{app.name}"
|
21
|
+
end
|
28
22
|
|
29
|
-
Dir.chdir appname do
|
30
|
-
`git init`
|
31
|
-
git_add_dawn_remote app
|
32
23
|
end
|
33
|
-
say "\tAPP\t#{appname}"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
alias_command "create", "new"
|
37
|
-
|
38
|
-
command "init" do |c|
|
39
|
-
c.syntax = "dawn init [<app_name>]"
|
40
|
-
c.description = "Setup an existing App with a dawn remote, if no <app_name> is given, the App directory's name will be used"
|
41
|
-
|
42
|
-
c.option "--name NAME", String, "name your App"
|
43
|
-
c.option "--random", "gives you App an awesome name"
|
44
|
-
|
45
|
-
c.action do |args, options|
|
46
|
-
appname = args.first || options.name || File.basename(Dir.getwd)
|
47
|
-
appname = nil if options.random
|
48
|
-
app = try_create_app appname
|
49
|
-
git_add_dawn_remote app
|
50
|
-
say "\tAPP\t#{app.name}"
|
51
24
|
end
|
52
25
|
end
|
53
|
-
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "dawn/cli/helpers"
|
2
|
+
|
3
|
+
module Dawn
|
4
|
+
module CLI
|
5
|
+
module Release
|
6
|
+
|
7
|
+
extend Dawn::CLI::Helpers
|
8
|
+
|
9
|
+
# "List all releases for the current app"
|
10
|
+
def self.list
|
11
|
+
say format_releases(current_app.releases.all)
|
12
|
+
end
|
13
|
+
|
14
|
+
# "Add a new release to the current app"
|
15
|
+
def self.add
|
16
|
+
current_app.releases.create(release:{})
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/dawn/cli/commands.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
require 'dawn/cli/commands/
|
2
|
-
require 'dawn/cli/commands/
|
3
|
-
require 'dawn/cli/commands/
|
4
|
-
require 'dawn/cli/commands/
|
5
|
-
require 'dawn/cli/commands/
|
1
|
+
require 'dawn/cli/commands/auth' # Netrc setup and login command
|
2
|
+
require 'dawn/cli/commands/app' # App management
|
3
|
+
require 'dawn/cli/commands/drain' # App Drains management
|
4
|
+
require 'dawn/cli/commands/env' # App ENV management
|
5
|
+
require 'dawn/cli/commands/domain' # App Domains management
|
6
|
+
require 'dawn/cli/commands/key' # Key management
|
6
7
|
require 'dawn/cli/commands/local' # Various functions
|
7
|
-
require 'dawn/cli/commands/
|
8
|
+
require 'dawn/cli/commands/release' # App Releases functions
|
@@ -1,32 +1,14 @@
|
|
1
1
|
require 'dawn/api'
|
2
2
|
require 'dawn/api/hosts'
|
3
|
+
require 'dawn/cli/version'
|
3
4
|
require 'dawn/cli/output_formatter' # CLI Console Formatters
|
4
|
-
require 'dawn/cli/commands' # CLI Commands
|
5
5
|
|
6
6
|
module Dawn
|
7
7
|
module CLI
|
8
|
-
|
8
|
+
module Helpers
|
9
9
|
|
10
|
-
include Commander::Methods
|
11
10
|
include OutputFormatter
|
12
11
|
|
13
|
-
def run
|
14
|
-
# :name is optional, otherwise uses the basename of this executable
|
15
|
-
program :name, 'Dawn CLI'
|
16
|
-
program :version, Dawn::CLI::VERSION + "α"
|
17
|
-
program :description, 'CLI client for Dawn'
|
18
|
-
|
19
|
-
default_command 'help'
|
20
|
-
|
21
|
-
app_commands
|
22
|
-
domain_commands
|
23
|
-
drain_commands
|
24
|
-
env_commands
|
25
|
-
key_commands
|
26
|
-
local_commands
|
27
|
-
login_commands
|
28
|
-
end
|
29
|
-
|
30
12
|
## swiped from Heroku
|
31
13
|
def has_git?
|
32
14
|
%x{ git --version }
|
@@ -43,10 +25,10 @@ module Dawn
|
|
43
25
|
def try_create_app(appname=nil)
|
44
26
|
abort "dawn remote already exists, please remove it (dawn app:delete)" if git_dawn_remote?
|
45
27
|
begin
|
46
|
-
app = Dawn::App.create name: appname
|
28
|
+
app = Dawn::App.create(app: { name: appname })
|
47
29
|
rescue Excon::Errors::Conflict
|
48
|
-
app = Dawn::App.find
|
49
|
-
|
30
|
+
app = Dawn::App.find(name: appname)
|
31
|
+
puts " warning ! App (#{app.name}) already exists"
|
50
32
|
end
|
51
33
|
return app
|
52
34
|
end
|
@@ -102,21 +84,16 @@ module Dawn
|
|
102
84
|
end
|
103
85
|
|
104
86
|
def current_app_name(options={})
|
105
|
-
@current_app ||=
|
106
|
-
options[:app]
|
107
|
-
|
108
|
-
|
109
|
-
elsif app_from_dir = extract_app_in_dir(Dir.pwd, options)
|
110
|
-
app_from_dir
|
111
|
-
else
|
112
|
-
abort "App could not be located!"
|
87
|
+
@current_app ||= begin
|
88
|
+
options[:app] || ENV["DAWN_APP"] ||
|
89
|
+
Dawn::CLI.selected_app || extract_app_in_dir(Dir.pwd, options) ||
|
90
|
+
abort("App could not be located!")
|
113
91
|
end
|
114
92
|
end
|
115
93
|
|
116
|
-
def current_app
|
117
|
-
|
118
|
-
|
119
|
-
app
|
94
|
+
def current_app(options={})
|
95
|
+
name = current_app_name(options)
|
96
|
+
Dawn::App.find(name: name)
|
120
97
|
end
|
121
98
|
|
122
99
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'time-lord'
|
2
|
+
require 'terminal-table'
|
3
|
+
|
1
4
|
module Dawn
|
2
5
|
module CLI
|
3
6
|
module OutputFormatter
|
@@ -11,8 +14,8 @@ module Dawn
|
|
11
14
|
headings: ['ID', 'Fingerprint', 'Key'],
|
12
15
|
style: table_style
|
13
16
|
keys.each do |key|
|
14
|
-
table << [key.id, key.fingerprint, " ... "]#key.key[0, 20]] # truncate the key
|
15
|
-
table << :separator
|
17
|
+
table << [key.id, key.fingerprint, key.key] #{}" ... "]#key.key[0, 20]] # truncate the key
|
18
|
+
#table << :separator
|
16
19
|
end
|
17
20
|
|
18
21
|
table
|
@@ -25,7 +28,7 @@ module Dawn
|
|
25
28
|
apps.each do |app|
|
26
29
|
form = app.formation.map { |k,v| "#{k}: #{v}" }.join("\n")
|
27
30
|
table << [app.id, app.name, form]
|
28
|
-
table << :separator
|
31
|
+
#table << :separator
|
29
32
|
end
|
30
33
|
|
31
34
|
table
|
@@ -37,7 +40,7 @@ module Dawn
|
|
37
40
|
style: table_style
|
38
41
|
domains.each do |domain|
|
39
42
|
table << [domain.id, domain.url]
|
40
|
-
table << :separator
|
43
|
+
#table << :separator
|
41
44
|
end
|
42
45
|
|
43
46
|
table
|
@@ -49,7 +52,7 @@ module Dawn
|
|
49
52
|
style: table_style
|
50
53
|
drains.each do |drain|
|
51
54
|
table << [drain.id, drain.url]
|
52
|
-
table << :separator
|
55
|
+
#table << :separator
|
53
56
|
end
|
54
57
|
|
55
58
|
table
|
@@ -68,7 +71,7 @@ module Dawn
|
|
68
71
|
uptime = "just now"
|
69
72
|
end
|
70
73
|
table << [gear.id, gear.name, uptime]
|
71
|
-
table << :separator
|
74
|
+
#table << :separator
|
72
75
|
end
|
73
76
|
|
74
77
|
table
|
@@ -76,4 +79,4 @@ module Dawn
|
|
76
79
|
|
77
80
|
end
|
78
81
|
end
|
79
|
-
end
|
82
|
+
end
|
@@ -0,0 +1,266 @@
|
|
1
|
+
require "docopt"
|
2
|
+
require 'highline/import'
|
3
|
+
|
4
|
+
module Dawn
|
5
|
+
module CLI
|
6
|
+
DOC_TOP = %Q(Usage:
|
7
|
+
dawn --version
|
8
|
+
dawn [-a APPNAME] [-h] <command> [<argv>...]
|
9
|
+
|
10
|
+
Commands:
|
11
|
+
create [<name>]
|
12
|
+
ls
|
13
|
+
ps
|
14
|
+
login
|
15
|
+
logs [-f]
|
16
|
+
-f, --follow follow logs
|
17
|
+
app
|
18
|
+
domain
|
19
|
+
drain
|
20
|
+
env
|
21
|
+
key
|
22
|
+
release
|
23
|
+
run
|
24
|
+
|
25
|
+
Options:
|
26
|
+
-a APPNAME, --app=APPNAME specify app
|
27
|
+
-h, --help display help
|
28
|
+
--version print version
|
29
|
+
)
|
30
|
+
|
31
|
+
DOC_SUBCOMMAND = {}
|
32
|
+
DOC_SUBCOMMAND["app"] = %Q(Usage:
|
33
|
+
dawn app list all avaiable apps
|
34
|
+
dawn app <command>
|
35
|
+
|
36
|
+
Commands:
|
37
|
+
delete
|
38
|
+
restart
|
39
|
+
scale <gear_modifier>
|
40
|
+
|
41
|
+
GearModifier:
|
42
|
+
type=number
|
43
|
+
type+number
|
44
|
+
type-number
|
45
|
+
)
|
46
|
+
|
47
|
+
DOC_SUBCOMMAND["domain"] = %Q(Usage:
|
48
|
+
dawn domain list all domains for current app
|
49
|
+
dawn domain [<command>]
|
50
|
+
|
51
|
+
Commands:
|
52
|
+
add <url>
|
53
|
+
delete <url>
|
54
|
+
)
|
55
|
+
|
56
|
+
DOC_SUBCOMMAND["drain"] = %Q(Usage:
|
57
|
+
dawn drain list all drains for current app
|
58
|
+
dawn drain [<command>]
|
59
|
+
|
60
|
+
Commands:
|
61
|
+
add <url>
|
62
|
+
delete <url>
|
63
|
+
)
|
64
|
+
|
65
|
+
DOC_SUBCOMMAND["env"] = %Q(Usage:
|
66
|
+
dawn env print the ENV for the current app
|
67
|
+
dawn env [<command>]
|
68
|
+
|
69
|
+
Commands:
|
70
|
+
get <key_name>...
|
71
|
+
set <key_name=value>...
|
72
|
+
unset <key_name>...
|
73
|
+
)
|
74
|
+
|
75
|
+
DOC_SUBCOMMAND["key"] = %Q(Usage:
|
76
|
+
dawn key list all keys deployed to dawn
|
77
|
+
dawn key [<command>]
|
78
|
+
|
79
|
+
Commands:
|
80
|
+
add
|
81
|
+
delete <id>
|
82
|
+
get <id>
|
83
|
+
)
|
84
|
+
|
85
|
+
DOC_SUBCOMMAND["release"] = %Q(Usage:
|
86
|
+
dawn release list all releases for the current app
|
87
|
+
dawn release [<command>]
|
88
|
+
|
89
|
+
Commands:
|
90
|
+
add
|
91
|
+
)
|
92
|
+
|
93
|
+
@@selected_app = nil
|
94
|
+
|
95
|
+
###
|
96
|
+
# @return [String]
|
97
|
+
###
|
98
|
+
def self.selected_app
|
99
|
+
@@selected_app
|
100
|
+
end
|
101
|
+
|
102
|
+
###
|
103
|
+
# @param [String] appname
|
104
|
+
###
|
105
|
+
def self.selected_app=(appname)
|
106
|
+
@@selected_app = appname
|
107
|
+
end
|
108
|
+
|
109
|
+
###
|
110
|
+
# @param [String] basename
|
111
|
+
###
|
112
|
+
def self.not_a_command(basename, command)
|
113
|
+
# oh look, git style error message
|
114
|
+
abort "#{basename}: '#{command}' is not a #{basename} command. See '#{basename} --help'."
|
115
|
+
end
|
116
|
+
|
117
|
+
###
|
118
|
+
# @param [String] command
|
119
|
+
# @param [Hash] options
|
120
|
+
###
|
121
|
+
def self.run_app_command(command, options)
|
122
|
+
case command.to_s
|
123
|
+
when ""
|
124
|
+
Dawn::CLI::App.list
|
125
|
+
when "delete"
|
126
|
+
Dawn::CLI::App.delete
|
127
|
+
when "restart"
|
128
|
+
Dawn::CLI::App.restart
|
129
|
+
when "scale"
|
130
|
+
data = options["<argv>"].inject({}) do |str, hash|
|
131
|
+
if str =~ /(\S+)([+-=])(\d+)/
|
132
|
+
hash[$1] = [$2, $3.to_i]
|
133
|
+
end
|
134
|
+
end
|
135
|
+
Dawn::CLI::App.scale(data)
|
136
|
+
else
|
137
|
+
not_a_command("dawn app", command)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.run_domain_command(command, options)
|
142
|
+
case command.to_s
|
143
|
+
when ""
|
144
|
+
Dawn::CLI::Domain.list
|
145
|
+
when "add"
|
146
|
+
url = options["<argv>"].first
|
147
|
+
Dawn::CLI::Domain.add(url)
|
148
|
+
when "delete"
|
149
|
+
url = options["<argv>"].first
|
150
|
+
Dawn::CLI::Domain.delete(url)
|
151
|
+
else
|
152
|
+
not_a_command("dawn domain", command)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
def self.run_drain_command(command, options)
|
157
|
+
case command.to_s
|
158
|
+
when ""
|
159
|
+
Dawn::CLI::Drain.list
|
160
|
+
when "add"
|
161
|
+
url = options["<argv>"].first
|
162
|
+
Dawn::CLI::Drain.add(url)
|
163
|
+
when "delete"
|
164
|
+
url = options["<argv>"].first
|
165
|
+
Dawn::CLI::Drain.delete(url)
|
166
|
+
else
|
167
|
+
not_a_command("dawn drain", command)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def self.run_env_command(command, options)
|
172
|
+
case command.to_s
|
173
|
+
when ""
|
174
|
+
Dawn::CLI::Env.list
|
175
|
+
when "get"
|
176
|
+
keys = options["<argv>"]
|
177
|
+
Dawn::CLI::Env.get(*keys)
|
178
|
+
when "set"
|
179
|
+
data = options["<argv>"].each_with_object({}) do |str, hash|
|
180
|
+
if str =~ /(\S+)=(.*)/
|
181
|
+
key, value = $1, $2
|
182
|
+
hash[key] = value
|
183
|
+
end
|
184
|
+
end
|
185
|
+
Dawn::CLI::Env.set(data)
|
186
|
+
when "unset"
|
187
|
+
keys = options["<argv>"]
|
188
|
+
Dawn::CLI::Env.unset(*keys)
|
189
|
+
else
|
190
|
+
not_a_command("dawn env", command)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
def self.run_key_command(command, options)
|
195
|
+
case command.to_s
|
196
|
+
when ""
|
197
|
+
Dawn::CLI::Key.list
|
198
|
+
when "add"
|
199
|
+
Dawn::CLI::Key.add
|
200
|
+
when "get"
|
201
|
+
id = options["<argv>"].first
|
202
|
+
Dawn::CLI::Key.get(id)
|
203
|
+
when "delete"
|
204
|
+
id = options["<argv>"].first
|
205
|
+
Dawn::CLI::Key.delete(id)
|
206
|
+
else
|
207
|
+
not_a_command("dawn env", command)
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
def self.run_release_command(command, options)
|
212
|
+
case command.to_s
|
213
|
+
when ""
|
214
|
+
Dawn::CLI::Release.list
|
215
|
+
when "add"
|
216
|
+
Dawn::CLI::Release.add
|
217
|
+
else
|
218
|
+
not_a_command("dawn release", command)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
def self.run_subcommand(command, argv)
|
223
|
+
if argv.empty?
|
224
|
+
subcommand = ""
|
225
|
+
else
|
226
|
+
result = Docopt.docopt(DOC_SUBCOMMAND[command], argv: argv,
|
227
|
+
version: Dawn::CLI::VERSION, help: false)
|
228
|
+
subcommand = result["<command>"]
|
229
|
+
end
|
230
|
+
send("run_#{command}_command", subcommand, result)
|
231
|
+
end
|
232
|
+
|
233
|
+
def self.run(argv)
|
234
|
+
result = Docopt.docopt(DOC_TOP, version: Dawn::CLI::VERSION, argv: argv)
|
235
|
+
if result["--version"]
|
236
|
+
say "Dawn CLI #{Dawn::CLI::VERSION}"
|
237
|
+
else
|
238
|
+
self.selected_app = result["--app"]
|
239
|
+
|
240
|
+
command = result["<command>"]
|
241
|
+
command_argv = result["<argv>"]
|
242
|
+
case command
|
243
|
+
when "create"
|
244
|
+
Dawn::CLI::App.create command_argv.first
|
245
|
+
when "ls"
|
246
|
+
Dawn::CLI::App.list
|
247
|
+
when "ps"
|
248
|
+
Dawn::CLI::App.list_gears
|
249
|
+
when "login"
|
250
|
+
username = ask("Username: ")
|
251
|
+
password = ask("Password: ") { |q| q.echo = false }
|
252
|
+
Dawn::CLI::Auth.login username, password
|
253
|
+
when "logs"
|
254
|
+
Dawn::CLI::App.logs
|
255
|
+
when *DOC_SUBCOMMAND.keys
|
256
|
+
run_subcommand(command, command_argv)
|
257
|
+
else
|
258
|
+
not_a_command("dawn", command)
|
259
|
+
end
|
260
|
+
end
|
261
|
+
rescue Docopt::Exit => ex
|
262
|
+
abort ex.message
|
263
|
+
end
|
264
|
+
|
265
|
+
end
|
266
|
+
end
|
data/lib/dawn/cli/patches.rb
CHANGED
data/lib/dawn/cli/version.rb
CHANGED
@@ -2,10 +2,10 @@ module Dawn
|
|
2
2
|
module CLI
|
3
3
|
module Version
|
4
4
|
MAJOR = 0
|
5
|
-
MINOR =
|
5
|
+
MINOR = 9
|
6
6
|
PATCH = 0
|
7
7
|
BUILD = nil
|
8
|
-
STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join("
|
8
|
+
STRING = [[MAJOR, MINOR, PATCH].compact.join("."), BUILD].compact.join("-").freeze
|
9
9
|
end
|
10
10
|
# backward compatibility
|
11
11
|
VERSION = Version::STRING
|
data/lib/dawn/cli.rb
CHANGED
@@ -1,9 +1,5 @@
|
|
1
|
-
require 'uri'
|
2
|
-
require 'net/http'
|
3
|
-
require 'time-lord'
|
4
|
-
require 'terminal-table'
|
5
|
-
|
6
1
|
require 'dawn/api' # Dawn::Api
|
7
2
|
require 'dawn/cli/version' # CLI::Version information
|
8
3
|
require 'dawn/cli/patches' # Various Monkey Patches
|
9
|
-
require 'dawn/cli/
|
4
|
+
require 'dawn/cli/commands' # CLI Commands
|
5
|
+
require 'dawn/cli/parser'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dawn-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blaž Hrastnik
|
@@ -9,22 +9,36 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-06-
|
12
|
+
date: 2014-06-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: docopt
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '0.5'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '0.5'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: highline
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '1.6'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '1.6'
|
28
42
|
- !ruby/object:Gem::Dependency
|
29
43
|
name: time-lord
|
30
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,14 +73,14 @@ dependencies:
|
|
59
73
|
requirements:
|
60
74
|
- - "~>"
|
61
75
|
- !ruby/object:Gem::Version
|
62
|
-
version: '0.
|
76
|
+
version: '0.10'
|
63
77
|
type: :runtime
|
64
78
|
prerelease: false
|
65
79
|
version_requirements: !ruby/object:Gem::Requirement
|
66
80
|
requirements:
|
67
81
|
- - "~>"
|
68
82
|
- !ruby/object:Gem::Version
|
69
|
-
version: '0.
|
83
|
+
version: '0.10'
|
70
84
|
description: CLI for Dawn PaaS
|
71
85
|
email:
|
72
86
|
executables:
|
@@ -74,18 +88,22 @@ executables:
|
|
74
88
|
extensions: []
|
75
89
|
extra_rdoc_files: []
|
76
90
|
files:
|
91
|
+
- CHANGELOG.md
|
92
|
+
- README.md
|
77
93
|
- bin/dawn
|
78
94
|
- lib/dawn/cli.rb
|
79
|
-
- lib/dawn/cli/application.rb
|
80
95
|
- lib/dawn/cli/commands.rb
|
81
96
|
- lib/dawn/cli/commands/app.rb
|
97
|
+
- lib/dawn/cli/commands/auth.rb
|
82
98
|
- lib/dawn/cli/commands/domain.rb
|
83
99
|
- lib/dawn/cli/commands/drain.rb
|
84
100
|
- lib/dawn/cli/commands/env.rb
|
85
101
|
- lib/dawn/cli/commands/key.rb
|
86
102
|
- lib/dawn/cli/commands/local.rb
|
87
|
-
- lib/dawn/cli/commands/
|
103
|
+
- lib/dawn/cli/commands/release.rb
|
104
|
+
- lib/dawn/cli/helpers.rb
|
88
105
|
- lib/dawn/cli/output_formatter.rb
|
106
|
+
- lib/dawn/cli/parser.rb
|
89
107
|
- lib/dawn/cli/patches.rb
|
90
108
|
- lib/dawn/cli/version.rb
|
91
109
|
homepage: https://github.com/dawn/dawn-cli
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Dawn
|
2
|
-
module CLI
|
3
|
-
class Application
|
4
|
-
def login_commands
|
5
|
-
|
6
|
-
command "login" do |c|
|
7
|
-
c.syntax = "dawn login"
|
8
|
-
c.description = "Login to dawn's API"
|
9
|
-
|
10
|
-
c.action do |args, options|
|
11
|
-
usn = ask "Username: "
|
12
|
-
psw = password "Password: "
|
13
|
-
Dawn.authenticate username: usn, password: psw
|
14
|
-
say " ! login details have been saved to your .netrc"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|