fastlane_core 0.3.2 → 0.3.3
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 +4 -4
- data/lib/fastlane_core/developer_center/developer_center.rb +0 -129
- data/lib/fastlane_core/developer_center/developer_center_helper.rb +3 -3
- data/lib/fastlane_core/developer_center/developer_center_login.rb +127 -0
- data/lib/fastlane_core/update_checker.rb +6 -1
- data/lib/fastlane_core/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ccf4f08791291dd023f402206d695a174c6b873
|
4
|
+
data.tar.gz: 5a569465403901927d8c5e272cb91ef90ec472de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40f82c13159a33eba36923b21745a62ca225f4e071e42ce28dcd1693344be5c2ac47e205503f9018744606cc0f0886fb1d17186494ebf906095f15c874928f01
|
7
|
+
data.tar.gz: d801fbfa0ce0128ef1bd3a8c693032c78047910ddcc400c3e101222c01826901aeb70a9fdf0d206551de7f74eb4bdcf4bed57ae800e4dd03a97f8ca610cdaa41
|
@@ -51,134 +51,5 @@ module FastlaneCore
|
|
51
51
|
|
52
52
|
self.login
|
53
53
|
end
|
54
|
-
|
55
|
-
# Loggs in a user with the given login data on the Dev Center Frontend.
|
56
|
-
# You don't need to pass a username and password. It will
|
57
|
-
# Automatically be fetched using the {CredentialsManager::PasswordManager}.
|
58
|
-
# This method will also automatically be called when triggering other
|
59
|
-
# actions like {#open_app_page}
|
60
|
-
# @param user (String) (optional) The username/email address
|
61
|
-
# @param password (String) (optional) The password
|
62
|
-
# @return (bool) true if everything worked fine
|
63
|
-
# @raise [DeveloperCenterGeneralError] General error while executing
|
64
|
-
# this action
|
65
|
-
# @raise [DeveloperCenterLoginError] Login data is wrong
|
66
|
-
def login(user = nil, password = nil)
|
67
|
-
begin
|
68
|
-
Helper.log.info "Login into iOS Developer Center"
|
69
|
-
|
70
|
-
user ||= CredentialsManager::PasswordManager.shared_manager.username
|
71
|
-
password ||= CredentialsManager::PasswordManager.shared_manager.password
|
72
|
-
|
73
|
-
result = visit PROFILES_URL
|
74
|
-
raise "Could not open Developer Center" unless result['status'] == 'success'
|
75
|
-
|
76
|
-
# Already logged in
|
77
|
-
select_team if current_url.include?"selectTeam.action"
|
78
|
-
return true if (page.has_content? "Member Center" and not current_url.include?"selectTeam.action")
|
79
|
-
|
80
|
-
(wait_for_elements(".button.blue").first.click rescue nil) # maybe already logged in
|
81
|
-
|
82
|
-
(wait_for_elements('#accountpassword') rescue nil) # when the user is already logged in, this will raise an exception
|
83
|
-
|
84
|
-
# Already logged in
|
85
|
-
select_team if current_url.include?"selectTeam.action"
|
86
|
-
return true if (page.has_content? "Member Center" and not current_url.include?"selectTeam.action")
|
87
|
-
|
88
|
-
fill_in "accountname", with: user
|
89
|
-
fill_in "accountpassword", with: password
|
90
|
-
|
91
|
-
all(".button.large.blue.signin-button").first.click
|
92
|
-
|
93
|
-
begin
|
94
|
-
# If the user is not on multiple teams
|
95
|
-
select_team if current_url.include?"selectTeam.action"
|
96
|
-
rescue => ex
|
97
|
-
Helper.log.debug ex
|
98
|
-
raise DeveloperCenterLoginError.new("Error loggin in user #{user}. User is on multiple teams and we were unable to correctly retrieve them.")
|
99
|
-
end
|
100
|
-
|
101
|
-
begin
|
102
|
-
wait_for_elements('.ios.profiles.gridList')
|
103
|
-
visit PROFILES_URL # again, since after the login, the dev center loses the production GET value
|
104
|
-
rescue => ex
|
105
|
-
Helper.log.debug ex
|
106
|
-
if page.has_content?"Getting Started"
|
107
|
-
raise "There was no valid signing certificate found. Please log in and follow the 'Getting Started guide' on '#{current_url}'".red
|
108
|
-
else
|
109
|
-
raise DeveloperCenterLoginError.new("Error logging in user #{user} with the given password. Make sure you entered them correctly.")
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
Helper.log.info "Login successful"
|
114
|
-
|
115
|
-
true
|
116
|
-
rescue => ex
|
117
|
-
error_occured(ex)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
|
122
|
-
def select_team
|
123
|
-
team_id = ENV["FASTLANE_TEAM_ID"] || CredentialsManager::AppfileConfig.try_fetch_value(:team_id)
|
124
|
-
|
125
|
-
team_name = ENV["FASTLANE_TEAM_NAME"] || CredentialsManager::AppfileConfig.try_fetch_value(:team_name)
|
126
|
-
|
127
|
-
if team_id == nil and team_name == nil
|
128
|
-
Helper.log.info "You can store you preferred team using the environment variable `FASTLANE_TEAM_ID` or `FASTLANE_TEAM_NAME`".green
|
129
|
-
Helper.log.info "or in your `Appfile` using `team_id 'Q2CBPJ58CA'` or `team_name 'Felix Krause'`".green # TODO
|
130
|
-
Helper.log.info "Your ID belongs to the following teams:".green
|
131
|
-
end
|
132
|
-
|
133
|
-
available_options = []
|
134
|
-
|
135
|
-
teams = find("div.input").all('.team-value') # Grab all the teams data
|
136
|
-
teams.each_with_index do |val, index|
|
137
|
-
current_team_id = '"' + val.find("input").value + '"'
|
138
|
-
team_text = val.find(".label-primary").text
|
139
|
-
description_text = val.find(".label-secondary").text
|
140
|
-
description_text = "(#{description_text})" unless description_text.empty? # Include the team description if any
|
141
|
-
index_text = (index + 1).to_s + "."
|
142
|
-
|
143
|
-
available_options << [index_text, current_team_id, team_text, description_text].join(" ")
|
144
|
-
end
|
145
|
-
|
146
|
-
if team_name
|
147
|
-
# Search for name
|
148
|
-
found_it = false
|
149
|
-
all("label.label-primary").each do |current|
|
150
|
-
if current.text.downcase.gsub(/\s+/, "") == team_name.downcase.gsub(/\s+/, "")
|
151
|
-
current.click # select the team by name
|
152
|
-
found_it = true
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
unless found_it
|
157
|
-
available_teams = all("label.label-primary").collect { |a| a.text }
|
158
|
-
raise DeveloperCenterLoginError.new("Could not find Team with name '#{team_name}'. Available Teams: #{available_teams}".red)
|
159
|
-
end
|
160
|
-
else
|
161
|
-
# Search by ID/Index
|
162
|
-
unless team_id
|
163
|
-
puts available_options.join("\n").green
|
164
|
-
team_index = ask("Please select the team number you would like to access: ".green)
|
165
|
-
team_id = teams[team_index.to_i - 1].find(".radio").value
|
166
|
-
end
|
167
|
-
|
168
|
-
team_button = first(:xpath, "//input[@type='radio' and @value='#{team_id}']") # Select the desired team
|
169
|
-
if team_button
|
170
|
-
team_button.click
|
171
|
-
else
|
172
|
-
Helper.log.fatal "Could not find given Team. Available options: ".red
|
173
|
-
puts available_options.join("\n").yellow
|
174
|
-
raise DeveloperCenterLoginError.new("Error finding given team #{team_id}.".red)
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
all(".button.large.blue.submit").first.click
|
179
|
-
|
180
|
-
result = visit PROFILES_URL
|
181
|
-
raise "Could not open Developer Center" unless result['status'] == 'success'
|
182
|
-
end
|
183
54
|
end
|
184
55
|
end
|
@@ -8,13 +8,13 @@ module FastlaneCore
|
|
8
8
|
host = Capybara.current_session.current_host
|
9
9
|
url = [host, url].join('')
|
10
10
|
|
11
|
-
|
11
|
+
cookie_string = ""
|
12
12
|
|
13
13
|
page.driver.cookies.each do |key, cookie|
|
14
|
-
|
14
|
+
cookie_string << "#{cookie.name}=#{cookie.value};" # append all known cookies
|
15
15
|
end
|
16
16
|
|
17
|
-
data = open(url, {'Cookie' =>
|
17
|
+
data = open(url, {'Cookie' => cookie_string}).read
|
18
18
|
|
19
19
|
raise "Something went wrong when downloading the file from the Dev Center" unless data
|
20
20
|
Helper.log.info "Successfully downloaded provisioning profile"
|
@@ -1,5 +1,132 @@
|
|
1
1
|
module FastlaneCore
|
2
2
|
class DeveloperCenter
|
3
|
+
# Log in a user with the given login data on the Dev Center Frontend.
|
4
|
+
# You don't need to pass a username and password. It will
|
5
|
+
# Automatically be fetched using the {CredentialsManager::PasswordManager}.
|
6
|
+
# This method will also automatically be called when triggering other
|
7
|
+
# actions like {#open_app_page}
|
8
|
+
# @param user (String) (optional) The username/email address
|
9
|
+
# @param password (String) (optional) The password
|
10
|
+
# @return (bool) true if everything worked fine
|
11
|
+
# @raise [DeveloperCenterGeneralError] General error while executing
|
12
|
+
# this action
|
13
|
+
# @raise [DeveloperCenterLoginError] Login data is wrong
|
14
|
+
def login(user = nil, password = nil)
|
15
|
+
begin
|
16
|
+
Helper.log.info "Login into iOS Developer Center"
|
3
17
|
|
18
|
+
user ||= CredentialsManager::PasswordManager.shared_manager.username
|
19
|
+
password ||= CredentialsManager::PasswordManager.shared_manager.password
|
20
|
+
|
21
|
+
result = visit PROFILES_URL
|
22
|
+
raise "Could not open Developer Center" unless result['status'] == 'success'
|
23
|
+
|
24
|
+
# Already logged in
|
25
|
+
select_team if current_url.include?"selectTeam.action"
|
26
|
+
return true if (page.has_content? "Member Center" and not current_url.include?"selectTeam.action")
|
27
|
+
|
28
|
+
(wait_for_elements(".button.blue").first.click rescue nil) # maybe already logged in
|
29
|
+
|
30
|
+
(wait_for_elements('#accountpassword') rescue nil) # when the user is already logged in, this will raise an exception
|
31
|
+
|
32
|
+
# Already logged in
|
33
|
+
select_team if current_url.include?"selectTeam.action"
|
34
|
+
return true if (page.has_content? "Member Center" and not current_url.include?"selectTeam.action")
|
35
|
+
|
36
|
+
fill_in "accountname", with: user
|
37
|
+
fill_in "accountpassword", with: password
|
38
|
+
|
39
|
+
all(".button.large.blue.signin-button").first.click
|
40
|
+
|
41
|
+
begin
|
42
|
+
# If the user is not on multiple teams
|
43
|
+
select_team if current_url.include?"selectTeam.action"
|
44
|
+
rescue => ex
|
45
|
+
Helper.log.debug ex
|
46
|
+
raise DeveloperCenterLoginError.new("Error loggin in user #{user}. User is on multiple teams and we were unable to correctly retrieve them.")
|
47
|
+
end
|
48
|
+
|
49
|
+
begin
|
50
|
+
wait_for_elements('.ios.profiles.gridList')
|
51
|
+
visit PROFILES_URL # again, since after the login, the dev center loses the production GET value
|
52
|
+
rescue => ex
|
53
|
+
Helper.log.debug ex
|
54
|
+
if page.has_content?"Getting Started"
|
55
|
+
raise "There was no valid signing certificate found. Please log in and follow the 'Getting Started guide' on '#{current_url}'".red
|
56
|
+
else
|
57
|
+
raise DeveloperCenterLoginError.new("Error logging in user #{user} with the given password. Make sure you entered them correctly.")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
Helper.log.info "Login successful"
|
62
|
+
|
63
|
+
true
|
64
|
+
rescue => ex
|
65
|
+
error_occured(ex)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
def select_team
|
71
|
+
team_id = ENV["FASTLANE_TEAM_ID"] || CredentialsManager::AppfileConfig.try_fetch_value(:team_id)
|
72
|
+
|
73
|
+
team_name = ENV["FASTLANE_TEAM_NAME"] || CredentialsManager::AppfileConfig.try_fetch_value(:team_name)
|
74
|
+
|
75
|
+
if team_id == nil and team_name == nil
|
76
|
+
Helper.log.info "You can store you preferred team using the environment variable `FASTLANE_TEAM_ID` or `FASTLANE_TEAM_NAME`".green
|
77
|
+
Helper.log.info "or in your `Appfile` using `team_id 'Q2CBPJ58CA'` or `team_name 'Felix Krause'`".green # TODO
|
78
|
+
Helper.log.info "Your ID belongs to the following teams:".green
|
79
|
+
end
|
80
|
+
|
81
|
+
available_options = []
|
82
|
+
|
83
|
+
teams = find("div.input").all('.team-value') # Grab all the teams data
|
84
|
+
teams.each_with_index do |val, index|
|
85
|
+
current_team_id = '"' + val.find("input").value + '"'
|
86
|
+
team_text = val.find(".label-primary").text
|
87
|
+
description_text = val.find(".label-secondary").text
|
88
|
+
description_text = "(#{description_text})" unless description_text.empty? # Include the team description if any
|
89
|
+
index_text = (index + 1).to_s + "."
|
90
|
+
|
91
|
+
available_options << [index_text, current_team_id, team_text, description_text].join(" ")
|
92
|
+
end
|
93
|
+
|
94
|
+
if team_name
|
95
|
+
# Search for name
|
96
|
+
found_it = false
|
97
|
+
all("label.label-primary").each do |current|
|
98
|
+
if current.text.downcase.gsub(/\s+/, "") == team_name.downcase.gsub(/\s+/, "")
|
99
|
+
current.click # select the team by name
|
100
|
+
found_it = true
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
unless found_it
|
105
|
+
available_teams = all("label.label-primary").collect { |a| a.text }
|
106
|
+
raise DeveloperCenterLoginError.new("Could not find Team with name '#{team_name}'. Available Teams: #{available_teams}".red)
|
107
|
+
end
|
108
|
+
else
|
109
|
+
# Search by ID/Index
|
110
|
+
unless team_id
|
111
|
+
puts available_options.join("\n").green
|
112
|
+
team_index = ask("Please select the team number you would like to access: ".green)
|
113
|
+
team_id = teams[team_index.to_i - 1].find(".radio").value
|
114
|
+
end
|
115
|
+
|
116
|
+
team_button = first(:xpath, "//input[@type='radio' and @value='#{team_id}']") # Select the desired team
|
117
|
+
if team_button
|
118
|
+
team_button.click
|
119
|
+
else
|
120
|
+
Helper.log.fatal "Could not find given Team. Available options: ".red
|
121
|
+
puts available_options.join("\n").yellow
|
122
|
+
raise DeveloperCenterLoginError.new("Error finding given team #{team_id}.".red)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
all(".button.large.blue.submit").first.click
|
127
|
+
|
128
|
+
result = visit PROFILES_URL
|
129
|
+
raise "Could not open Developer Center" unless result['status'] == 'success'
|
130
|
+
end
|
4
131
|
end
|
5
132
|
end
|
@@ -3,6 +3,10 @@ require 'open-uri'
|
|
3
3
|
module FastlaneCore
|
4
4
|
# Verifies, the user runs the latest version of this gem
|
5
5
|
class UpdateChecker
|
6
|
+
|
7
|
+
# This web service is fully open source: https://github.com/fastlane/refresher
|
8
|
+
UPDATE_URL = "https://refresher.fastlane.tools/"
|
9
|
+
|
6
10
|
# This method will check if the latest version is installed and show a warning if that's not the case
|
7
11
|
def self.verify_latest_version(gem_name, current_version)
|
8
12
|
return true unless self.update_available?(gem_name, current_version)
|
@@ -32,7 +36,8 @@ module FastlaneCore
|
|
32
36
|
|
33
37
|
private
|
34
38
|
def self.fetch_latest(gem_name)
|
35
|
-
|
39
|
+
url = UPDATE_URL + gem_name
|
40
|
+
JSON.parse(open(url).read)["version"]
|
36
41
|
end
|
37
42
|
end
|
38
43
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|