deploygate 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/config/locales/en.yml +2 -0
- data/deploygate.gemspec +1 -0
- data/lib/deploygate.rb +3 -0
- data/lib/deploygate/browser_login.rb +72 -0
- data/lib/deploygate/command_builder.rb +46 -18
- data/lib/deploygate/commands/login.rb +17 -5
- data/lib/deploygate/version.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZWQyZmNkNWY5MDkxMjc2YmUxOTM4MTMwZTY4MmFlMTZiNzc4MTQxNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWU0NWVmZDViMTYxZWJjNjg1NTc3YTc1MWExNTM4YWMyYTE5NDgxNA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MDkxMmZiYzVkYWQ0NjhhNjM3YzNmNTAzMjExODY0NmJhZDFiNDhiNTZiZWM1
|
10
|
+
ZDZjZTZkOGRhZTgzOGUyZDMxMGQ4YTBmZDM1MTJlMTg2OGQ5OTJkNmEyMmVh
|
11
|
+
NTM5Yjg4ODU1ZDJlMzA0MWU4YThkZmYyZmY3MDA4MDFjZTJjNzA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MWVjOGRhNWFiNTE1ODcyNzk2MzlhMGI1OGFhYzRjNDkzMDE4MzdmODg5NjFk
|
14
|
+
NTk5Y2NiZDAzMjEyNDRhYjJlZGYxNDBjMDNhOTAyZDE4MGZkNTE2ZDIwNmJj
|
15
|
+
NzJhOTIyODZjMWVlZTEzMzdlYjI3MDQ2ZGY4NzU4MGQ3NDdhZmE=
|
data/config/locales/en.yml
CHANGED
@@ -5,6 +5,7 @@ en:
|
|
5
5
|
description: 'Control DeployGate from your terminal.'
|
6
6
|
login:
|
7
7
|
description: 'Log in to DeployGate'
|
8
|
+
terminal: 'Login in terminal'
|
8
9
|
error: 'Commands::Login Error: %{e}'
|
9
10
|
deploy:
|
10
11
|
description: 'Build and upload a new build'
|
@@ -30,6 +31,7 @@ en:
|
|
30
31
|
token: 'DeployGate API token'
|
31
32
|
error: 'Commands::Config Error: %{e}'
|
32
33
|
error_handling:
|
34
|
+
message: 'Error: %{message}'
|
33
35
|
agree: 'Do you want to report this issue on GitHub? (y/n) '
|
34
36
|
please_open: 'Please open GitHub issue: %{url}'
|
35
37
|
show_update_message: |
|
data/deploygate.gemspec
CHANGED
data/lib/deploygate.rb
CHANGED
@@ -16,6 +16,8 @@ require "tempfile"
|
|
16
16
|
require "open3"
|
17
17
|
require "open-uri"
|
18
18
|
require "rexml/document"
|
19
|
+
require "launchy"
|
20
|
+
require "webrick"
|
19
21
|
|
20
22
|
require "i18n"
|
21
23
|
I18n.load_path = Dir[File.join(File.dirname(__FILE__), '../config/locales/*.yml')]
|
@@ -49,6 +51,7 @@ require "deploygate/session"
|
|
49
51
|
require "deploygate/deploy"
|
50
52
|
require "deploygate/project"
|
51
53
|
require "deploygate/user"
|
54
|
+
require "deploygate/browser_login"
|
52
55
|
require "deploygate/xcode/member_center"
|
53
56
|
require "deploygate/xcode/member_centers/app"
|
54
57
|
require "deploygate/xcode/member_centers/provisioning_profile"
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module DeployGate
|
2
|
+
class BrowserLogin
|
3
|
+
DEFAULT_PORT = 64126
|
4
|
+
LOGIN_URL = "#{DeployGate::API::V1::Base::BASE_URL}/cli/login"
|
5
|
+
CREDENTIAL_URL = "#{DeployGate::API::V1::Base::BASE_URL}/cli/credential"
|
6
|
+
NOTIFY_URL = "#{DeployGate::API::V1::Base::BASE_URL}/cli/notify"
|
7
|
+
|
8
|
+
# @param [Fixnum] port
|
9
|
+
def initialize(port = nil)
|
10
|
+
@port = port || DEFAULT_PORT
|
11
|
+
@login_uri = URI(LOGIN_URL)
|
12
|
+
@login_uri.query = {port: @port, client: 'dg'}.to_query
|
13
|
+
|
14
|
+
@credential_uri = URI(CREDENTIAL_URL)
|
15
|
+
@notify_uri = URI(NOTIFY_URL)
|
16
|
+
end
|
17
|
+
|
18
|
+
def start
|
19
|
+
server = WEBrick::HTTPServer.new(
|
20
|
+
:Port => @port,
|
21
|
+
:BindAddress =>"localhost",
|
22
|
+
:Logger => WEBrick::Log.new(STDOUT, 0),
|
23
|
+
:AccessLog => []
|
24
|
+
)
|
25
|
+
|
26
|
+
begin
|
27
|
+
Signal.trap("INT") { server.shutdown }
|
28
|
+
|
29
|
+
server.mount_proc '/' do |req, res|
|
30
|
+
res.status = WEBrick::HTTPStatus::RC_NO_CONTENT
|
31
|
+
|
32
|
+
cancel = req.query['cancel']
|
33
|
+
notify_key = req.query['key']
|
34
|
+
|
35
|
+
unless cancel
|
36
|
+
credential = get_credential(notify_key)
|
37
|
+
DeployGate::Session.save(credential['name'], credential['token'])
|
38
|
+
notify_finish(notify_key)
|
39
|
+
|
40
|
+
DeployGate::Commands::Login.login_success()
|
41
|
+
end
|
42
|
+
|
43
|
+
server.stop
|
44
|
+
end
|
45
|
+
|
46
|
+
Launchy.open(@login_uri.to_s)
|
47
|
+
server.start
|
48
|
+
ensure
|
49
|
+
server.shutdown
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
# @param [String] notify_key
|
56
|
+
# @return [Hash]
|
57
|
+
def get_credential(notify_key)
|
58
|
+
res = HTTPClient.new(:agent_name => "dg/#{DeployGate::VERSION}").get(@credential_uri.to_s, {key: notify_key})
|
59
|
+
JSON.parse(res.body)
|
60
|
+
end
|
61
|
+
|
62
|
+
# @param [String] notify_key
|
63
|
+
def notify_finish(notify_key)
|
64
|
+
notify_post(notify_key, 'credential_saved')
|
65
|
+
notify_post(notify_key, 'finished')
|
66
|
+
end
|
67
|
+
|
68
|
+
def notify_post(notify_key, action)
|
69
|
+
HTTPClient.new(:agent_name => "dg/#{DeployGate::VERSION}").post(@notify_uri.to_s, {key: notify_key, command_action: action})
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -3,6 +3,12 @@ module DeployGate
|
|
3
3
|
include Commander::Methods
|
4
4
|
attr_reader :arguments
|
5
5
|
|
6
|
+
LOGIN = 'login'
|
7
|
+
LOGOUT = 'logout'
|
8
|
+
DEPLOY = 'deploy'
|
9
|
+
ADD_DEVICES = 'add-devices'
|
10
|
+
CONFIG = 'config'
|
11
|
+
|
6
12
|
def run
|
7
13
|
Signal.trap(:INT){
|
8
14
|
puts ''
|
@@ -16,20 +22,22 @@ module DeployGate
|
|
16
22
|
program :version, VERSION
|
17
23
|
program :description, I18n.t('command_builder.description')
|
18
24
|
|
19
|
-
command
|
25
|
+
command LOGIN do |c|
|
20
26
|
c.syntax = 'dg login'
|
21
27
|
c.description = I18n.t('command_builder.login.description')
|
28
|
+
c.option '--terminal', I18n.t('command_builder.login.terminal')
|
22
29
|
c.action do |args, options|
|
30
|
+
options.default :terminal => false
|
23
31
|
begin
|
24
|
-
Commands::Login.run
|
32
|
+
Commands::Login.run(args, options)
|
25
33
|
rescue => e
|
26
|
-
error_handling(
|
34
|
+
error_handling(LOGIN, e)
|
27
35
|
raise e
|
28
36
|
end
|
29
37
|
end
|
30
38
|
end
|
31
39
|
|
32
|
-
command
|
40
|
+
command DEPLOY do |c|
|
33
41
|
c.syntax = 'dg deploy /path/to/app'
|
34
42
|
c.description = I18n.t('command_builder.deploy.description')
|
35
43
|
c.option '--message STRING', String, I18n.t('command_builder.deploy.message')
|
@@ -42,14 +50,14 @@ module DeployGate
|
|
42
50
|
begin
|
43
51
|
Commands::Deploy.run(args, options)
|
44
52
|
rescue => e
|
45
|
-
error_handling(
|
53
|
+
error_handling(DEPLOY, e)
|
46
54
|
raise e
|
47
55
|
end
|
48
56
|
end
|
49
57
|
end
|
50
58
|
alias_command :'push', :deploy
|
51
59
|
|
52
|
-
command
|
60
|
+
command ADD_DEVICES do |c|
|
53
61
|
c.syntax = 'dg add-devices'
|
54
62
|
c.description = I18n.t('command_builder.add_devices.description')
|
55
63
|
c.option '--user STRING', String, I18n.t('command_builder.add_devices.user')
|
@@ -60,26 +68,26 @@ module DeployGate
|
|
60
68
|
begin
|
61
69
|
Commands::AddDevices.run(args, options)
|
62
70
|
rescue => e
|
63
|
-
error_handling(
|
71
|
+
error_handling(ADD_DEVICES, e)
|
64
72
|
raise e
|
65
73
|
end
|
66
74
|
end
|
67
75
|
end
|
68
76
|
|
69
|
-
command
|
77
|
+
command LOGOUT do |c|
|
70
78
|
c.syntax = 'dg logout'
|
71
79
|
c.description = I18n.t('command_builder.logout.description')
|
72
80
|
c.action do |args, options|
|
73
81
|
begin
|
74
82
|
Commands::Logout.run
|
75
83
|
rescue => e
|
76
|
-
error_handling(
|
84
|
+
error_handling(LOGOUT, e)
|
77
85
|
raise e
|
78
86
|
end
|
79
87
|
end
|
80
88
|
end
|
81
89
|
|
82
|
-
command
|
90
|
+
command CONFIG do |c|
|
83
91
|
c.syntax = 'dg config'
|
84
92
|
c.description = I18n.t('command_builder.config.description')
|
85
93
|
c.option '--json', I18n.t('command_builder.config.json')
|
@@ -89,7 +97,7 @@ module DeployGate
|
|
89
97
|
begin
|
90
98
|
Commands::Config.run(args, options)
|
91
99
|
rescue => e
|
92
|
-
error_handling(
|
100
|
+
error_handling(CONFIG, e)
|
93
101
|
raise e
|
94
102
|
end
|
95
103
|
end
|
@@ -116,18 +124,38 @@ deploygate-cli ver #{DeployGate::VERSION}
|
|
116
124
|
EOF
|
117
125
|
end
|
118
126
|
|
119
|
-
# @param [
|
120
|
-
# @param [
|
121
|
-
# @
|
122
|
-
def
|
127
|
+
# @param [Symbol] command
|
128
|
+
# @param [Exception] error
|
129
|
+
# @return [String]
|
130
|
+
def create_issue_url(command, error)
|
131
|
+
title = case command
|
132
|
+
when LOGIN
|
133
|
+
I18n.t('command_builder.login.error', e: error.class)
|
134
|
+
when LOGOUT
|
135
|
+
I18n.t('command_builder.logout.error', e: error.class)
|
136
|
+
when DEPLOY
|
137
|
+
I18n.t('command_builder.deploy.error', e: error.class)
|
138
|
+
when ADD_DEVICES
|
139
|
+
I18n.t('command_builder.add_devices.error', e: error.class)
|
140
|
+
when CONFIG
|
141
|
+
I18n.t('command_builder.config.error', e: error.class)
|
142
|
+
end
|
143
|
+
|
123
144
|
options = {
|
124
145
|
:title => title,
|
125
|
-
:body =>
|
126
|
-
:labels => labels
|
146
|
+
:body => create_error_issue_body(error),
|
127
147
|
}
|
128
|
-
|
148
|
+
GithubIssueRequest::Url.new(options).to_s
|
149
|
+
end
|
150
|
+
|
151
|
+
# @param [Symbol] command
|
152
|
+
# @param [Exception] error
|
153
|
+
def error_handling(command, error)
|
154
|
+
STDERR.puts HighLine.color(I18n.t('command_builder.error_handling.message', message: error.message), HighLine::RED)
|
155
|
+
|
129
156
|
puts ''
|
130
157
|
if HighLine.agree(I18n.t('command_builder.error_handling.agree')) {|q| q.default = "n"}
|
158
|
+
url = create_issue_url(command, error)
|
131
159
|
puts I18n.t('command_builder.error_handling.please_open', url: url)
|
132
160
|
system('open', url) if Commands::Deploy::Push.openable?
|
133
161
|
end
|
@@ -4,14 +4,23 @@ module DeployGate
|
|
4
4
|
class << self
|
5
5
|
|
6
6
|
# @return [void]
|
7
|
-
def run
|
8
|
-
|
7
|
+
def run(args, options)
|
8
|
+
welcome()
|
9
|
+
|
10
|
+
if options.terminal
|
11
|
+
start_login_or_create_account()
|
12
|
+
else
|
13
|
+
DeployGate::BrowserLogin.new().start()
|
14
|
+
end
|
9
15
|
end
|
10
16
|
|
11
|
-
|
12
|
-
def start_login_or_create_account
|
17
|
+
def welcome
|
13
18
|
puts I18n.t('commands.login.start_login_or_create_account.welcome')
|
14
19
|
print_deploygate_aa()
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [void]
|
23
|
+
def start_login_or_create_account
|
15
24
|
puts ''
|
16
25
|
email = ask(I18n.t('commands.login.start_login_or_create_account.email'))
|
17
26
|
|
@@ -39,7 +48,10 @@ module DeployGate
|
|
39
48
|
raise e
|
40
49
|
end
|
41
50
|
|
42
|
-
|
51
|
+
login_success()
|
52
|
+
end
|
53
|
+
|
54
|
+
def login_success
|
43
55
|
session = Session.new
|
44
56
|
puts HighLine.color(I18n.t('commands.login.start.success', name: session.name), HighLine::GREEN)
|
45
57
|
end
|
data/lib/deploygate/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deploygate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- deploygate
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -164,6 +164,20 @@ dependencies:
|
|
164
164
|
- - ! '>='
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: launchy
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ! '>='
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: gym
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -318,6 +332,7 @@ files:
|
|
318
332
|
- lib/deploygate/api/v1/session.rb
|
319
333
|
- lib/deploygate/api/v1/user.rb
|
320
334
|
- lib/deploygate/api/v1/users/app.rb
|
335
|
+
- lib/deploygate/browser_login.rb
|
321
336
|
- lib/deploygate/command_builder.rb
|
322
337
|
- lib/deploygate/commands/add_devices.rb
|
323
338
|
- lib/deploygate/commands/config.rb
|