deploygate 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/config/locales/en.yml +4 -1
- data/deploygate.gemspec +4 -4
- data/lib/deploygate/command_builder.rb +1 -0
- data/lib/deploygate/deploy.rb +3 -3
- data/lib/deploygate/not_issue_error.rb +4 -0
- data/lib/deploygate/session.rb +1 -1
- data/lib/deploygate/version.rb +1 -1
- data/lib/deploygate/xcode/analyze.rb +0 -3
- data/lib/deploygate/xcode/export.rb +22 -27
- data/lib/deploygate/xcode/ios.rb +1 -1
- data/lib/deploygate/xcode/local_teams.rb +60 -0
- data/lib/deploygate/xcode/member_centers/provisioning_profile.rb +7 -2
- data/lib/deploygate.rb +2 -0
- data/spec/deploygate/xcode/local_teams_spec.rb +45 -0
- metadata +22 -18
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MDIxOWM0M2U2OThlNmZlYjVmNTMwMmE4MTliNWNhNGRmZjRiN2E1OQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NGQyZThlNGQ5ZjQyYzA2ZmNlODhiMTk1NzdhZWVkZTZkNzkzMWU3MQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NWIyOGU4YjFhMTg4NTU4MjRiYTA1M2Q0ZDQ3ODU2OThmODI0YTI1NTE4MDNk
|
10
|
+
MDZmY2JiYzQ2ZDFmNzUwYmI5MmNmOWUzMDI3MDZlYzE2MGFkMDlhYmJhNmNm
|
11
|
+
M2M2NDBmNWViNzczOTg5NjIzNDU5ZDllZmMyODkzOTQ2MTExZjA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZjA0YTI4MTU4ZGY2OTAxMDM5NGRhZDJlZWVhMzc4MDI1MzdmMzZjYjM4N2Jm
|
14
|
+
OGIyY2YyNGM2M2JhOThhOTJiMTY0MmI4ZTJhYzVmNDZmMGM2NjFmYzFmYjRm
|
15
|
+
YzU0NGViZWQ4OTFiNTdjMDMxYTlmYTQ5YmZiNDZlMDRhMWI5MTc=
|
data/config/locales/en.yml
CHANGED
@@ -125,7 +125,7 @@ en:
|
|
125
125
|
provisioning_profile: 'Error: Failed to create provisioning profile'
|
126
126
|
select_teams:
|
127
127
|
prompt: 'Please select a team'
|
128
|
-
choice: '%{
|
128
|
+
choice: '%{team_name} %{team_id}'
|
129
129
|
check_local_certificates:
|
130
130
|
not_local_install_certificate:
|
131
131
|
error_message: 'Error: No applicable iPhone Distribution certificate found on your Mac.'
|
@@ -162,3 +162,6 @@ en:
|
|
162
162
|
|
163
163
|
Note: Your password will be stored to your Keychain and never be sent to DeployGate.
|
164
164
|
email: 'Email: '
|
165
|
+
provisioning_profile:
|
166
|
+
not_installed_certificate_error: 'No iPhone Distribution Certificate associated with private key was found in local Keychain'
|
167
|
+
not_exist_uuid_provisioning_profile_error: 'No provisioning profile found for the specified UUID (%{uuid})'
|
data/deploygate.gemspec
CHANGED
@@ -32,12 +32,12 @@ POST_INSTALL_MESSAGE
|
|
32
32
|
spec.add_dependency 'activesupport', '~> 4.2.4'
|
33
33
|
spec.add_dependency 'i18n'
|
34
34
|
spec.add_dependency 'launchy'
|
35
|
+
spec.add_dependency 'locale'
|
35
36
|
|
36
37
|
# ios build
|
37
|
-
spec.add_dependency 'gym', '~> 1.
|
38
|
-
spec.add_dependency 'spaceship', '~> 0.
|
39
|
-
spec.add_dependency 'sigh', '~> 1.
|
40
|
-
spec.add_dependency 'locale'
|
38
|
+
spec.add_dependency 'gym', '~> 1.4.0'
|
39
|
+
spec.add_dependency 'spaceship', '~> 0.19.0'
|
40
|
+
spec.add_dependency 'sigh', '~> 1.2.2'
|
41
41
|
|
42
42
|
spec.add_development_dependency "bundler", "~> 1.3"
|
43
43
|
spec.add_development_dependency "rake"
|
@@ -153,6 +153,7 @@ EOF
|
|
153
153
|
def error_handling(command, error)
|
154
154
|
STDERR.puts HighLine.color(I18n.t('command_builder.error_handling.message', message: error.message), HighLine::RED)
|
155
155
|
|
156
|
+
return if error.kind_of?(DeployGate::NotIssueError)
|
156
157
|
puts ''
|
157
158
|
if HighLine.agree(I18n.t('command_builder.error_handling.agree')) {|q| q.default = "n"}
|
158
159
|
url = create_issue_url(command, error)
|
data/lib/deploygate/deploy.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module DeployGate
|
2
2
|
class Deploy
|
3
|
-
class NotLoginError <
|
3
|
+
class NotLoginError < DeployGate::NotIssueError
|
4
4
|
end
|
5
|
-
class NotFileExistError <
|
5
|
+
class NotFileExistError < DeployGate::NotIssueError
|
6
6
|
end
|
7
|
-
class UploadError <
|
7
|
+
class UploadError < DeployGate::NotIssueError
|
8
8
|
end
|
9
9
|
|
10
10
|
class << self
|
data/lib/deploygate/session.rb
CHANGED
data/lib/deploygate/version.rb
CHANGED
@@ -12,17 +12,17 @@ module DeployGate
|
|
12
12
|
# @param [String] uuid
|
13
13
|
# @return [String]
|
14
14
|
def provisioning_profile(bundle_identifier, uuid = nil)
|
15
|
-
|
16
|
-
profiles = data[:profiles]
|
17
|
-
teams = data[:teams]
|
15
|
+
local_teams = DeployGate::Xcode::Export.find_local_data(bundle_identifier, uuid)
|
18
16
|
|
19
17
|
target_provisioning_profile = nil
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
18
|
+
case local_teams.teams_count
|
19
|
+
when 0
|
20
|
+
target_provisioning_profile = create_provisioning(bundle_identifier, uuid)
|
21
|
+
when 1
|
22
|
+
target_provisioning_profile = select_profile(local_teams.first_team_profile_paths)
|
23
|
+
else
|
24
|
+
# when many teams
|
25
|
+
target_provisioning_profile = select_teams(local_teams)
|
26
26
|
end
|
27
27
|
|
28
28
|
target_provisioning_profile
|
@@ -30,10 +30,10 @@ module DeployGate
|
|
30
30
|
|
31
31
|
# @param [String] bundle_identifier
|
32
32
|
# @param [String] uuid
|
33
|
-
# @return [
|
33
|
+
# @return [LocalTeams]
|
34
34
|
def find_local_data(bundle_identifier, uuid = nil)
|
35
|
-
|
36
|
-
|
35
|
+
local_teams = LocalTeams.new
|
36
|
+
|
37
37
|
profile_paths = load_profile_paths
|
38
38
|
profiles = profile_paths.map{|p| profile_to_plist(p)}
|
39
39
|
profiles.reject! {|profile| profile['UUID'] != uuid} unless uuid.nil?
|
@@ -41,25 +41,20 @@ module DeployGate
|
|
41
41
|
profiles.each do |profile|
|
42
42
|
entities = profile['Entitlements']
|
43
43
|
unless entities['get-task-allow']
|
44
|
-
|
44
|
+
team_id = entities['com.apple.developer.team-identifier']
|
45
45
|
application_id = entities['application-identifier']
|
46
|
-
application_id.slice!(/^#{
|
46
|
+
application_id.slice!(/^#{team_id}\./)
|
47
47
|
application_id = '.' + application_id if application_id == '*'
|
48
48
|
if bundle_identifier.match(application_id) &&
|
49
49
|
DateTime.now < profile['ExpirationDate'] &&
|
50
50
|
installed_certificate?(profile['Path'])
|
51
51
|
|
52
|
-
|
53
|
-
result_profiles[team] = [] if result_profiles[team].nil?
|
54
|
-
result_profiles[team].push(profile['Path'])
|
52
|
+
local_teams.add(team_id, profile['TeamName'], profile['Path'])
|
55
53
|
end
|
56
54
|
end
|
57
55
|
end
|
58
56
|
|
59
|
-
|
60
|
-
:teams => teams,
|
61
|
-
:profiles => result_profiles
|
62
|
-
}
|
57
|
+
local_teams
|
63
58
|
end
|
64
59
|
|
65
60
|
# @param [String] profile_path
|
@@ -226,17 +221,17 @@ module DeployGate
|
|
226
221
|
select_profile(provisioning_profiles)
|
227
222
|
end
|
228
223
|
|
229
|
-
# @param [
|
230
|
-
# @param [Hash] profiles
|
224
|
+
# @param [LocalTeams] local_teams
|
231
225
|
# @return [String]
|
232
|
-
def select_teams(
|
226
|
+
def select_teams(local_teams)
|
233
227
|
result = nil
|
234
228
|
cli = HighLine.new
|
235
229
|
cli.choose do |menu|
|
236
230
|
menu.prompt = I18n.t('xcode.export.select_teams.prompt')
|
237
|
-
teams.
|
238
|
-
menu.choice(I18n.t('xcode.export.select_teams.choice',
|
239
|
-
|
231
|
+
local_teams.teams.each do |team|
|
232
|
+
menu.choice(I18n.t('xcode.export.select_teams.choice', team_name: team[:name], team_id: team[:id])) {
|
233
|
+
profile_paths = local_teams.profile_paths(team[:id])
|
234
|
+
result = DeployGate::Xcode::Export.select_profile(profile_paths)
|
240
235
|
}
|
241
236
|
end
|
242
237
|
end
|
data/lib/deploygate/xcode/ios.rb
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
module DeployGate
|
2
|
+
module Xcode
|
3
|
+
class LocalTeams
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@team_ids = []
|
7
|
+
@team_names = []
|
8
|
+
@team_profile_paths = {}
|
9
|
+
end
|
10
|
+
|
11
|
+
# @param [String] id
|
12
|
+
# @param [String] name
|
13
|
+
# @param [String] profile_path
|
14
|
+
# @return [void]
|
15
|
+
def add(id, name, profile_path)
|
16
|
+
unless @team_ids.include?(id)
|
17
|
+
@team_ids.push(id)
|
18
|
+
@team_names.push(name)
|
19
|
+
|
20
|
+
@team_profile_paths[id] = []
|
21
|
+
end
|
22
|
+
|
23
|
+
@team_profile_paths[id].push(profile_path) unless @team_profile_paths.include?(profile_path)
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Fixnum]
|
27
|
+
def teams_count
|
28
|
+
@team_ids.count
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Array<String>]
|
32
|
+
def first_team_profile_paths
|
33
|
+
return [] if @team_ids.empty?
|
34
|
+
profile_paths(@team_ids.first)
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Array<Hash>]
|
38
|
+
#
|
39
|
+
# [
|
40
|
+
# {id: xxxx, name: xxxxx},
|
41
|
+
# {id: xxxx, name: xxxxx}
|
42
|
+
# ]
|
43
|
+
#
|
44
|
+
def teams
|
45
|
+
teams = []
|
46
|
+
@team_ids.each_with_index{|id, index| teams.push({id: id, name: @team_names[index]})}
|
47
|
+
|
48
|
+
teams
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param [String] id
|
52
|
+
# @return [Array<String>]
|
53
|
+
def profile_paths(id)
|
54
|
+
return [] unless @team_ids.include?(id)
|
55
|
+
|
56
|
+
@team_profile_paths[id]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -4,6 +4,11 @@ module DeployGate
|
|
4
4
|
class ProvisioningProfile
|
5
5
|
attr_reader :member_center, :app_identifier
|
6
6
|
|
7
|
+
class NotInstalledCertificateError < DeployGate::NotIssueError
|
8
|
+
end
|
9
|
+
class NotExistUUIDProvisioningProfileError < DeployGate::NotIssueError
|
10
|
+
end
|
11
|
+
|
7
12
|
OUTPUT_PATH = '/tmp/dg/provisioning_profile/'
|
8
13
|
CERTIFICATE_OUTPUT_PATH = '/tmp/dg/certificate/'
|
9
14
|
|
@@ -45,7 +50,7 @@ module DeployGate
|
|
45
50
|
File.write(path, raw_data)
|
46
51
|
distribution_cert_ids.push(cert.id) if FastlaneCore::CertChecker.installed?(path)
|
47
52
|
end
|
48
|
-
raise
|
53
|
+
raise NotInstalledCertificateError, I18n.t('xcode.member_center.provisioning_profile.not_installed_certificate_error') if distribution_cert_ids.empty?
|
49
54
|
|
50
55
|
provisionings = []
|
51
56
|
distribution_cert_ids.each do |cert_id|
|
@@ -62,7 +67,7 @@ module DeployGate
|
|
62
67
|
def download(uuid)
|
63
68
|
profiles = Spaceship.provisioning_profile.all.reject!{|p| p.uuid != uuid}
|
64
69
|
|
65
|
-
raise '
|
70
|
+
raise NotExistUUIDProvisioningProfileError, I18n.t('xcode.member_center.provisioning_profile.not_exist_uuid_provisioning_profile_error', uuid: uuid) if profiles.empty?
|
66
71
|
select_profile = profiles.first
|
67
72
|
method = select_profile.kind_of?(Spaceship::Portal::ProvisioningProfile::AdHoc)
|
68
73
|
|
data/lib/deploygate.rb
CHANGED
@@ -31,6 +31,7 @@ require "xcodeproj"
|
|
31
31
|
module DeployGate
|
32
32
|
end
|
33
33
|
|
34
|
+
require "deploygate/not_issue_error"
|
34
35
|
require "deploygate/api/v1/base"
|
35
36
|
require "deploygate/api/v1/session"
|
36
37
|
require "deploygate/api/v1/push"
|
@@ -56,6 +57,7 @@ require "deploygate/xcode/member_center"
|
|
56
57
|
require "deploygate/xcode/member_centers/app"
|
57
58
|
require "deploygate/xcode/member_centers/provisioning_profile"
|
58
59
|
require "deploygate/xcode/member_centers/device"
|
60
|
+
require "deploygate/xcode/local_teams"
|
59
61
|
require "deploygate/xcode/export"
|
60
62
|
require "deploygate/xcode/analyze"
|
61
63
|
require "deploygate/xcode/ios"
|
@@ -0,0 +1,45 @@
|
|
1
|
+
describe DeployGate::Xcode::LocalTeams do
|
2
|
+
|
3
|
+
let(:local_teams) { DeployGate::Xcode::LocalTeams.new }
|
4
|
+
|
5
|
+
context '#add' do
|
6
|
+
it 'not count up when add already team id' do
|
7
|
+
local_teams.add('1', 'name', 'path')
|
8
|
+
local_teams.add('1', 'name', 'path')
|
9
|
+
|
10
|
+
expect(local_teams.teams_count).to eq 1
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'count up when add team id' do
|
14
|
+
local_teams.add('1', 'name', 'path')
|
15
|
+
local_teams.add('2', 'name', 'path')
|
16
|
+
|
17
|
+
expect(local_teams.teams_count).to eq 2
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context '#profile_paths' do
|
22
|
+
before do
|
23
|
+
local_teams.add('1', 'name', 'path')
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should empty not register team id profile_paths' do
|
27
|
+
expect(local_teams.profile_paths('not_id').empty?).to be_truthy
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should not empty registered team id profile_paths' do
|
31
|
+
expect(local_teams.profile_paths('1')).to eq ['path']
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'first_team_profile_paths' do
|
36
|
+
it 'should return empty not register team' do
|
37
|
+
expect(local_teams.first_team_profile_paths.empty?).to be_truthy
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should return first team profile paths' do
|
41
|
+
local_teams.add('1', 'name', 'path')
|
42
|
+
expect(local_teams.first_team_profile_paths).to eq ['path']
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
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.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- deploygate
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -179,61 +179,61 @@ dependencies:
|
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
182
|
+
name: locale
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- -
|
185
|
+
- - ! '>='
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
187
|
+
version: '0'
|
188
188
|
type: :runtime
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
|
-
- -
|
192
|
+
- - ! '>='
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
194
|
+
version: '0'
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
196
|
+
name: gym
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
199
|
- - ~>
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
201
|
+
version: 1.4.0
|
202
202
|
type: :runtime
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
206
|
- - ~>
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
208
|
+
version: 1.4.0
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
|
-
name:
|
210
|
+
name: spaceship
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
212
212
|
requirements:
|
213
213
|
- - ~>
|
214
214
|
- !ruby/object:Gem::Version
|
215
|
-
version:
|
215
|
+
version: 0.19.0
|
216
216
|
type: :runtime
|
217
217
|
prerelease: false
|
218
218
|
version_requirements: !ruby/object:Gem::Requirement
|
219
219
|
requirements:
|
220
220
|
- - ~>
|
221
221
|
- !ruby/object:Gem::Version
|
222
|
-
version:
|
222
|
+
version: 0.19.0
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
|
-
name:
|
224
|
+
name: sigh
|
225
225
|
requirement: !ruby/object:Gem::Requirement
|
226
226
|
requirements:
|
227
|
-
- -
|
227
|
+
- - ~>
|
228
228
|
- !ruby/object:Gem::Version
|
229
|
-
version:
|
229
|
+
version: 1.2.2
|
230
230
|
type: :runtime
|
231
231
|
prerelease: false
|
232
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
233
|
requirements:
|
234
|
-
- -
|
234
|
+
- - ~>
|
235
235
|
- !ruby/object:Gem::Version
|
236
|
-
version:
|
236
|
+
version: 1.2.2
|
237
237
|
- !ruby/object:Gem::Dependency
|
238
238
|
name: bundler
|
239
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -345,6 +345,7 @@ files:
|
|
345
345
|
- lib/deploygate/config/cache_version.rb
|
346
346
|
- lib/deploygate/config/credential.rb
|
347
347
|
- lib/deploygate/deploy.rb
|
348
|
+
- lib/deploygate/not_issue_error.rb
|
348
349
|
- lib/deploygate/project.rb
|
349
350
|
- lib/deploygate/session.rb
|
350
351
|
- lib/deploygate/user.rb
|
@@ -352,6 +353,7 @@ files:
|
|
352
353
|
- lib/deploygate/xcode/analyze.rb
|
353
354
|
- lib/deploygate/xcode/export.rb
|
354
355
|
- lib/deploygate/xcode/ios.rb
|
356
|
+
- lib/deploygate/xcode/local_teams.rb
|
355
357
|
- lib/deploygate/xcode/member_center.rb
|
356
358
|
- lib/deploygate/xcode/member_centers/app.rb
|
357
359
|
- lib/deploygate/xcode/member_centers/device.rb
|
@@ -369,6 +371,7 @@ files:
|
|
369
371
|
- spec/deploygate/xcode/analyze_spec.rb
|
370
372
|
- spec/deploygate/xcode/export_spec.rb
|
371
373
|
- spec/deploygate/xcode/ios_spec.rb
|
374
|
+
- spec/deploygate/xcode/local_teams_spec.rb
|
372
375
|
- spec/deploygate/xcode/member_center_spec.rb
|
373
376
|
- spec/deploygate/xcode/member_centers/app_spec.rb
|
374
377
|
- spec/deploygate/xcode/member_centers/provisioning_profile_spec.rb
|
@@ -412,6 +415,7 @@ test_files:
|
|
412
415
|
- spec/deploygate/xcode/analyze_spec.rb
|
413
416
|
- spec/deploygate/xcode/export_spec.rb
|
414
417
|
- spec/deploygate/xcode/ios_spec.rb
|
418
|
+
- spec/deploygate/xcode/local_teams_spec.rb
|
415
419
|
- spec/deploygate/xcode/member_center_spec.rb
|
416
420
|
- spec/deploygate/xcode/member_centers/app_spec.rb
|
417
421
|
- spec/deploygate/xcode/member_centers/provisioning_profile_spec.rb
|