fastlane_core 0.22.3 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 441b4caf9f43629b1c8a325b968fd290654303c1
4
- data.tar.gz: 811a5548a267f59c435fd709674aa64565b21d66
3
+ metadata.gz: f1ba9d9232242ae13d67b8a32b91d12aa0d1890d
4
+ data.tar.gz: 10deb2e04b0cadacc3c5f24f1a53e99fb60be0a5
5
5
  SHA512:
6
- metadata.gz: f51d80154a0f1c7c0849c7ed7d1086634b432ce648cddc42aad15b25b27e32f3399ffb431398ea5c0e836010c4083c956046765eb720d32e018ed3a709fe231f
7
- data.tar.gz: fec59c1f7475c054b1209bef3d4f9f72347baa2186740b69d180e3f4292a38d31d7d941c39059a356fe847eb9ac339dc3355753b776d02f5745a09b2a3254d06
6
+ metadata.gz: 055fffb2f956839bdf59129d3ea9b6ff0e36bc62f46442080a5b8db454f8c6e4e5ca671e86e63d9fa127e579e5ad22c6c5d00d64152b4e3d4fb261af8eb07ef8
7
+ data.tar.gz: 8c1132b2455d671470e2c0ff25e41d96dd000263ad2e7d0a5888651084f4e12e0d61a4f7dd432c546065157aebcc2917b43e636ff0858234f0d952ff9c9c4268
data/lib/fastlane_core.rb CHANGED
@@ -14,6 +14,7 @@ require 'fastlane_core/ipa_upload_package_builder'
14
14
  require 'fastlane_core/print_table'
15
15
  require 'fastlane_core/project'
16
16
  require 'fastlane_core/simulator'
17
+ require 'fastlane_core/crash_reporting/crash_reporting'
17
18
 
18
19
  # Third Party code
19
20
  require 'colored'
@@ -0,0 +1,18 @@
1
+ module Raven
2
+ # This class gets rid of the user folder, as we don't want to share the username
3
+ class Processor
4
+ class CleanStackTrace < Processor
5
+ def process(value)
6
+ if value[:exception]
7
+ value[:exception][:values].each do |single_exception|
8
+ single_exception[:stacktrace][:frames].each do |current|
9
+ current[:abs_path].gsub!(Dir.home, "~")
10
+ end
11
+ end
12
+ end
13
+
14
+ return value
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,65 @@
1
+ module FastlaneCore
2
+ class CrashReporting
3
+ URL = 'https://02c6a8be5bd4425389706655f3657f5c:de62aa2bffe643948ea6f81354adb8d6@app.getsentry.com/55281'
4
+ class << self
5
+ def file_path
6
+ File.expand_path(File.join('~/.fastlane_crash_reporting'))
7
+ end
8
+
9
+ def enable
10
+ File.write(file_path, "1")
11
+ puts "Successfully enabled crash reporting for future crashes".green
12
+ puts "This will only send the stack trace the installed gems to sentry".green
13
+ puts "Thanks for helping making fastlane better".green
14
+ end
15
+
16
+ def enabled?
17
+ File.exist?(file_path)
18
+ end
19
+
20
+ def show_message
21
+ puts "-------------------------------------------------------------------------------------------".yellow
22
+ puts "😨 An error occured. Please enable crash reports using `fastlane enable_crash_reporting`".yellow
23
+ puts "👍 This makes resolving issues much easier and helps improving fastlane".yellow
24
+ puts "🔒 The reports might contain personal data, but will be stored securely on getsentry.com".yellow
25
+ puts "✨ Once crash reporting is enabled, you have much cleaner output when something goes wrong".yellow
26
+ puts "-------------------------------------------------------------------------------------------".yellow
27
+ end
28
+
29
+ def handle_crash(ex)
30
+ unless enabled?
31
+ show_message
32
+ raise ex
33
+ end
34
+
35
+ raise ex if Helper.test?
36
+
37
+ send_crash(ex)
38
+ end
39
+
40
+ def send_crash(ex)
41
+ # https://github.com/getsentry/raven-ruby/wiki/Advanced-Configuration
42
+ require 'raven'
43
+ require 'json'
44
+ require 'fastlane_core/crash_reporting/clean_stack_trace'
45
+
46
+ Raven.configure do |config|
47
+ config.dsn = URL
48
+ config.logger = Logger.new('/dev/null') # we couldn't care less
49
+ config.sanitize_fields = %w(server_name)
50
+ config.processors << Raven::Processor::CleanStackTrace
51
+ end
52
+
53
+ Raven::Context.clear! # we don't want to transfer things like the host name
54
+ crash = Raven.capture_exception(ex)
55
+ path = "/tmp/sentry_#{crash.id}.json"
56
+ File.write(path, JSON.pretty_generate(crash.to_hash))
57
+ puts "Successfully submitted crash report. If this is a problem with one of the tools you want to report".yellow
58
+ puts "please submit an issue on GitHub and attach the following number to it: '#{crash.id}'".yellow
59
+ puts "Also stored the crash report locally '#{path}'".yellow
60
+ rescue => ex
61
+ Helper.log.debug ex # We don't want crash reporting to cause crash
62
+ end
63
+ end
64
+ end
65
+ end
@@ -1,3 +1,3 @@
1
1
  module FastlaneCore
2
- VERSION = "0.22.3"
2
+ VERSION = "0.23.0"
3
3
  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.22.3
4
+ version: 0.23.0
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-10-15 00:00:00.000000000 Z
11
+ date: 2015-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: 1.4.5
153
+ - !ruby/object:Gem::Dependency
154
+ name: sentry-raven
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.15'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.15'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: credentials_manager
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -355,13 +369,11 @@ files:
355
369
  - lib/fastlane_core/configuration/config_item.rb
356
370
  - lib/fastlane_core/configuration/configuration.rb
357
371
  - lib/fastlane_core/configuration/configuration_file.rb
372
+ - lib/fastlane_core/crash_reporting/clean_stack_trace.rb
373
+ - lib/fastlane_core/crash_reporting/crash_reporting.rb
358
374
  - lib/fastlane_core/helper.rb
359
375
  - lib/fastlane_core/ipa_file_analyser.rb
360
376
  - lib/fastlane_core/ipa_upload_package_builder.rb
361
- - lib/fastlane_core/itunes_connect/itunes_connect.rb
362
- - lib/fastlane_core/itunes_connect/itunes_connect_apple_id.rb
363
- - lib/fastlane_core/itunes_connect/itunes_connect_helper.rb
364
- - lib/fastlane_core/itunes_connect/itunes_connect_login.rb
365
377
  - lib/fastlane_core/itunes_search_api.rb
366
378
  - lib/fastlane_core/itunes_transporter.rb
367
379
  - lib/fastlane_core/languages.rb
@@ -391,7 +403,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
391
403
  version: '0'
392
404
  requirements: []
393
405
  rubyforge_project:
394
- rubygems_version: 2.4.5
406
+ rubygems_version: 2.4.6
395
407
  signing_key:
396
408
  specification_version: 4
397
409
  summary: Contains all shared code/dependencies of the fastlane.tools
@@ -1,64 +0,0 @@
1
- require 'capybara'
2
- require 'capybara/poltergeist'
3
- require 'credentials_manager/password_manager'
4
- require 'phantomjs/poltergeist' # this will download and store phantomjs
5
-
6
- require 'fastlane_core/itunes_connect/itunes_connect_helper.rb'
7
- require 'fastlane_core/itunes_connect/itunes_connect_login.rb'
8
- require 'fastlane_core/itunes_connect/itunes_connect_apple_id.rb'
9
-
10
- module FastlaneCore
11
- # Everything that can't be achived using the {FastlaneCore::ItunesTransporter}
12
- # will be scripted using the iTunesConnect frontend.
13
- #
14
- # Every method you call here, might take a time
15
- class ItunesConnect
16
- # This error occurs only if there is something wrong with the given login data
17
- class ItunesConnectLoginError < StandardError
18
- end
19
-
20
- # This error can occur for many reaons. It is
21
- # usually raised when an UI element could not be found
22
- class ItunesConnectGeneralError < StandardError
23
- end
24
-
25
- include Capybara::DSL
26
-
27
- ITUNESCONNECT_URL = "https://itunesconnect.apple.com/"
28
- APP_DETAILS_URL = "https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/ng/app/[[app_id]]"
29
-
30
- BUTTON_STRING_NEW_VERSION = "New Version"
31
- BUTTON_STRING_SUBMIT_FOR_REVIEW = "Submit for Review"
32
-
33
- WAITING_FOR_REVIEW = "Waiting For Review"
34
-
35
- def initialize
36
- super
37
-
38
- return if Helper.is_test?
39
-
40
- Capybara.run_server = false
41
- Capybara.default_driver = :poltergeist
42
- Capybara.javascript_driver = :poltergeist
43
- Capybara.current_driver = :poltergeist
44
- Capybara.app_host = ITUNESCONNECT_URL
45
-
46
- # Since Apple has some SSL errors, we have to configure the client properly:
47
- # https://github.com/ariya/phantomjs/issues/11239
48
- Capybara.register_driver :poltergeist do |a|
49
- conf = ['--debug=no', '--ignore-ssl-errors=yes', '--ssl-protocol=TLSv1']
50
- Capybara::Poltergeist::Driver.new(a, {
51
- phantomjs: Phantomjs.path,
52
- phantomjs_options: conf,
53
- phantomjs_logger: File.open("/tmp/poltergeist_log.txt", "a"),
54
- js_errors: false,
55
- timeout: 90
56
- })
57
- end
58
-
59
- page.driver.headers = { "Accept-Language" => "en" }
60
-
61
- login
62
- end
63
- end
64
- end
@@ -1,15 +0,0 @@
1
- module FastlaneCore
2
- # Find the Apple ID based on the App Identifier
3
- class ItunesConnect
4
- LIST_APPLE_IDS_URL = "https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/apps/manageyourapps/summary"
5
- def find_apple_id(app_identifier)
6
- login
7
-
8
- apps = JSON.parse(page.evaluate_script("$.ajax({type: 'GET', url: '#{LIST_APPLE_IDS_URL}', async: false})")['responseText'])['data']
9
-
10
- return apps['summaries'].find { |v| v['bundleId'] == app_identifier }['adamId'].to_i
11
- rescue => ex
12
- # Do nothing right now...
13
- end
14
- end
15
- end
@@ -1,85 +0,0 @@
1
- module FastlaneCore
2
- class ItunesConnect
3
- # All the private helpers
4
-
5
- private
6
-
7
- # Opens the app details page of the given app.
8
- # @param app (Deliver::App) the app that should be opened
9
- # @return (bool) true if everything worked fine
10
- # @raise [ItunesConnectGeneralError] General error while executing
11
- # this action
12
- # @raise [ItunesConnectLoginError] Login data is wrong
13
- def open_app_page(app)
14
- verify_app(app)
15
-
16
- Helper.log.info "Opening detail page for app #{app}"
17
-
18
- visit APP_DETAILS_URL.gsub("[[app_id]]", app.apple_id.to_s)
19
-
20
- wait_for_elements('.page-subnav')
21
- sleep 5
22
-
23
- if current_url.include? "wa/defaultError" # app could not be found
24
- raise "Could not open app details for app '#{app}'. Make sure you're using the correct Apple ID and the correct Apple developer account (#{CredentialsManager::PasswordManager.shared_manager.username}).".red
25
- end
26
-
27
- true
28
- rescue => ex
29
- error_occured(ex)
30
- end
31
-
32
- def verify_app(app)
33
- raise ItunesConnectGeneralError.new("No valid Deliver::App given") unless app.kind_of? Deliver::App
34
- raise ItunesConnectGeneralError.new("App is missing information (apple_id not given)") unless (app.apple_id || '').to_s.length > 5
35
- end
36
-
37
- def error_occured(ex)
38
- snap
39
- raise ex # re-raise the error after saving the snapshot
40
- end
41
-
42
- def snap
43
- path = File.expand_path("Error#{Time.now.to_i}.png")
44
- # rubocop:disable Lint/Debugger
45
- save_screenshot(path, full: true)
46
- # rubocop:enable Lint/Debugger
47
- system("open '#{path}'") unless ENV['SIGH_DISABLE_OPEN_ERROR']
48
- end
49
-
50
- # Since Apple takes for ages, after the upload is properly processed, we have to wait here
51
- def wait_for_preprocessing
52
- started = Time.now
53
-
54
- # Wait, while iTunesConnect is processing the uploaded file
55
- while page.has_content? "Uploaded"
56
- # iTunesConnect is super slow... so we have to wait...
57
- Helper.log.info("Sorry, we have to wait for iTunesConnect, since it's still processing the uploaded ipa file\n" \
58
- "If this takes longer than 45 minutes, you have to re-upload the ipa file again.\n" \
59
- "You can always open the browser page yourself: '#{current_url}'\n" \
60
- "Passed time: ~#{((Time.now - started) / 60.0).to_i} minute(s)")
61
- sleep 30
62
- visit current_url
63
- sleep 30
64
- end
65
- end
66
-
67
- def wait_for_elements(name)
68
- counter = 0
69
- results = all(name)
70
- while results.count == 0
71
- # Helper.log.debug "Waiting for #{name}"
72
- sleep 0.2
73
-
74
- results = all(name)
75
-
76
- counter += 1
77
- if counter > 100
78
- Helper.log.debug caller
79
- raise ItunesConnectGeneralError.new("Couldn't find element '#{name}' after waiting for quite some time")
80
- end
81
- end
82
- return results
83
- end
84
- end
85
- end
@@ -1,65 +0,0 @@
1
- module FastlaneCore
2
- # Login code
3
- class ItunesConnect
4
- # Loggs in a user with the given login data on the iTC Frontend.
5
- # You don't need to pass a username and password. It will
6
- # Automatically be fetched using the {CredentialsManager::PasswordManager}.
7
- # This method will also automatically be called when triggering other
8
- # actions like {#open_app_page}
9
- # @param user (String) (optional) The username/email address
10
- # @param password (String) (optional) The password
11
- # @return (bool) true if everything worked fine
12
- # @raise [ItunesConnectGeneralError] General error while executing
13
- # this action
14
- # @raise [ItunesConnectLoginError] Login data is wrong
15
- def login(user = nil, password = nil)
16
- Helper.log.info "Logging into iTunesConnect"
17
-
18
- user ||= CredentialsManager::PasswordManager.shared_manager.username
19
- password ||= CredentialsManager::PasswordManager.shared_manager.password
20
-
21
- result = visit ITUNESCONNECT_URL
22
- raise "Could not open iTunesConnect" unless result['status'] == 'success'
23
-
24
- sleep 3
25
-
26
- if page.has_content? "My Apps"
27
- # Already logged in
28
- return true
29
- end
30
-
31
- begin
32
- wait_for_elements('#accountpassword')
33
- rescue
34
- # when the user is already logged in, this will raise an exception
35
- end
36
-
37
- fill_in "accountname", with: user
38
- fill_in "accountpassword", with: password
39
-
40
- begin
41
- page.evaluate_script "appleConnectForm.submit()"
42
- sleep 7
43
-
44
- if page.has_content? "My Apps"
45
- # Everything looks good
46
- else
47
- visit current_url # iTC sometimes is super buggy, try reloading the site
48
- sleep 3
49
- unless page.has_content? "My Apps"
50
- raise ItunesConnectLoginError.new("Looks like your login data was correct, but you do not have access to the apps.".red)
51
- end
52
- end
53
- rescue => ex
54
- Helper.log.debug(ex)
55
- raise ItunesConnectLoginError.new("Error logging in user #{user} with the given password. Make sure you entered them correctly.".red)
56
- end
57
-
58
- Helper.log.info "Successfully logged into iTunesConnect"
59
-
60
- true
61
- rescue => ex
62
- error_occured(ex)
63
- end
64
- end
65
- end