fastlane 2.114.0.beta.20190115200110 → 2.114.0.beta.20190116200018

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: ce412e8b3e2f6f853fb84786b51b5715e971769a
4
- data.tar.gz: 4cd640aa23816cc6b328979bb7e029f199c037b2
3
+ metadata.gz: 8823faa01f6b91b8f1d75874a92e31c24e5baf7b
4
+ data.tar.gz: 798b9258cdccc86dd157343f01948b7b64329a01
5
5
  SHA512:
6
- metadata.gz: 7f2d02755278043cc75b02eaaf0984131fafc84a7887f3b04bfbba267be04ae4e178dbab5f6207077addef3ccce5c6ce4002c27b0857a3e8993e2f840345868b
7
- data.tar.gz: f3e8e389e1c76bb3f68ad90948ebf6273e2b06f3c2841e9a8169061a83d353d6636e113fc0e46bb4f8ca4a7a35954fc6bef72cdc4cc63467a206badcb398a162
6
+ metadata.gz: eb89b5429909549a65ad93a6f2192de69a1d33834ffb3260d413adde31da4e1b072a72953a4b35938b97c19982d0afdef08e04bcdc98c9bfc2931abf8e341107
7
+ data.tar.gz: 7f60cd65995378cb001435f2a6202f45ce800b52d4607fe0b738b7be4aa45741d7100edf57537db568c1cccba18953612d0afae6328916840728d915a54cf722
@@ -132,7 +132,7 @@ module Fastlane
132
132
  end
133
133
 
134
134
  def self.return_value
135
- "The parsed JSON when successful"
135
+ "The pull request URL when successful"
136
136
  end
137
137
 
138
138
  def self.example_code
@@ -25,6 +25,7 @@ module Fastlane
25
25
  build_number = params[:build_number]
26
26
  platform = params[:platform]
27
27
  output_directory = params[:output_directory]
28
+ min_version = Gem::Version.new(params[:min_version]) if params[:min_version]
28
29
 
29
30
  # Set version if it is latest
30
31
  if version == 'latest'
@@ -51,21 +52,35 @@ module Fastlane
51
52
  UI.message(message.join(" "))
52
53
 
53
54
  app.tunes_all_build_trains(platform: platform).each do |train|
54
- UI.verbose("Found train: #{train.version_string}, comparing to supplied version: #{version}")
55
+ message = []
56
+ message << "Found train (version): #{train.version_string}"
57
+ message << ", comparing to supplied version: #{version}" if version
58
+ UI.verbose(message.join(" "))
59
+
55
60
  if version && version != train.version_string
56
61
  UI.verbose("Version #{version} doesn't match: #{train.version_string}")
57
62
  next
58
63
  end
64
+
65
+ if min_version && min_version > Gem::Version.new(train.version_string)
66
+ UI.verbose("Min version #{min_version} not reached: #{train.version_string}")
67
+ next
68
+ end
69
+
59
70
  app.tunes_all_builds_for_train(train: train.version_string, platform: platform).each do |build|
60
- UI.verbose("Found build version: #{build.build_version}, comparing to supplied build_number: #{build_number}")
71
+ message = []
72
+ message << "Found build version: #{build.build_version}"
73
+ message << ", comparing to supplied build_number: #{build_number}" if build_number
74
+ UI.verbose(message.join(" "))
75
+
61
76
  if build_number && build.build_version != build_number
62
77
  UI.verbose("build_version: #{build.build_version} doesn't match: #{build_number}")
63
78
  next
64
79
  end
65
80
 
66
81
  begin
67
- # need to call reload here or dsym_url is nil
68
- UI.verbose("Build_version: #{build.build_version} matches #{build_number}, grabbing dsym_url")
82
+ UI.verbose("Build_version: #{build.build_version} matches #{build_number}, grabbing dsym_url") if build_number
83
+
69
84
  build_details = app.tunes_build_details(train: train.version_string, build_number: build.build_version, platform: platform)
70
85
  download_url = build_details.dsym_url
71
86
  UI.verbose("dsym_url: #{download_url}")
@@ -207,6 +222,11 @@ module Fastlane
207
222
  env_name: "DOWNLOAD_DSYMS_BUILD_NUMBER",
208
223
  description: "The app build_number for dSYMs you wish to download",
209
224
  optional: true),
225
+ FastlaneCore::ConfigItem.new(key: :min_version,
226
+ short_option: "-m",
227
+ env_name: "DOWNLOAD_DSYMS_MIN_VERSION",
228
+ description: "The minimum app version for dSYMs you wish to download",
229
+ optional: true),
210
230
  FastlaneCore::ConfigItem.new(key: :output_directory,
211
231
  short_option: "-s",
212
232
  env_name: "DOWNLOAD_DSYMS_OUTPUT_DIRECTORY",
@@ -236,7 +256,8 @@ module Fastlane
236
256
  def self.example_code
237
257
  [
238
258
  'download_dsyms',
239
- 'download_dsyms(version: "1.0.0", build_number: "345")'
259
+ 'download_dsyms(version: "1.0.0", build_number: "345")',
260
+ 'download_dsyms(min_version: "1.2.3")'
240
261
  ]
241
262
  end
242
263
 
@@ -23,20 +23,25 @@ module Fastlane
23
23
  '&&'
24
24
  ].join(' ')
25
25
 
26
- current_version = `#{command_prefix} agvtool what-marketing-version -terse1`.split("\n").last || ''
26
+ begin
27
+ current_version = Actions
28
+ .sh("#{command_prefix} agvtool what-marketing-version -terse1", log: FastlaneCore::Globals.verbose?)
29
+ .split("\n")
30
+ .last
31
+ .strip
32
+ rescue
33
+ current_version = ''
34
+ end
27
35
 
36
+ version_regex = /^\d+\.\d+\.\d+$/
28
37
  if params[:version_number]
29
- UI.verbose("Your current version (#{current_version}) does not respect the format A.B.C") unless current_version =~ /\d.\d.\d/
38
+ UI.verbose("Your current version (#{current_version}) does not respect the format A.B.C") unless current_version =~ version_regex
30
39
 
31
40
  # Specific version
32
41
  next_version_number = params[:version_number]
33
42
  else
34
- if Helper.test?
35
- version_array = [1, 0, 0]
36
- else
37
- UI.user_error!("Your current version (#{current_version}) does not respect the format A.B.C") unless current_version =~ /\d+.\d+.\d+/
38
- version_array = current_version.split(".").map(&:to_i)
39
- end
43
+ UI.user_error!("Your current version (#{current_version}) does not respect the format A.B.C") unless current_version =~ version_regex
44
+ version_array = current_version.split(".").map(&:to_i)
40
45
 
41
46
  case params[:bump_type]
42
47
  when "patch"
@@ -15,7 +15,18 @@ module Fastlane
15
15
  # Multi line
16
16
  end_tag = params[:multi_line_end_keyword]
17
17
  UI.important("Submit inputs using \"#{params[:multi_line_end_keyword]}\"")
18
- user_input = STDIN.gets(end_tag).chomp.gsub(end_tag, "").strip
18
+ user_input = ""
19
+ loop do
20
+ line = STDIN.gets
21
+ end_tag_index = line.index(end_tag)
22
+ if end_tag_index.nil?
23
+ user_input << line
24
+ else
25
+ user_input << line.slice(0, end_tag_index)
26
+ user_input = user_input.strip
27
+ break
28
+ end
29
+ end
19
30
  else
20
31
  # Standard one line input
21
32
  if params[:secure_text]
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.114.0.beta.20190115200110'.freeze
2
+ VERSION = '2.114.0.beta.20190116200018'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -10,7 +10,7 @@ module FastlaneCore
10
10
  command << " -P #{certificate_password.shellescape}"
11
11
  command << " -T /usr/bin/codesign" # to not be asked for permission when running a tool like `gym` (before Sierra)
12
12
  command << " -T /usr/bin/security"
13
- command << " &> /dev/null" unless output
13
+ command << " 1> /dev/null" unless output
14
14
 
15
15
  Helper.backticks(command, print: output)
16
16
 
@@ -19,31 +19,37 @@ module FastlaneCore
19
19
  if Helper.backticks('security -h | grep set-key-partition-list', print: false).length > 0
20
20
  command = "security set-key-partition-list"
21
21
  command << " -S apple-tool:,apple:"
22
- command << " -l 'Imported Private Key'"
23
22
  command << " -k #{keychain_password.to_s.shellescape}"
24
23
  command << " #{keychain_path.shellescape}"
25
- command << " &> /dev/null" # always disable stdout. This can be very verbose, and leak potentially sensitive info
24
+ command << " 1> /dev/null" # always disable stdout. This can be very verbose, and leak potentially sensitive info
25
+
26
+ # Showing loading indicator as this can take some time if a lot of keys installed
27
+ Helper.show_loading_indicator("Setting key partition list... (this can take a minute if there are a lot of keys installed)")
26
28
 
27
29
  UI.command(command) if output
28
30
  Open3.popen3(command) do |stdin, stdout, stderr, thrd|
29
- if output
30
- Helper.show_loading_indicator("Importing keys...")
31
- UI.command(command)
32
- UI.command_output(stdout.read)
33
- Helper.hide_loading_indicator
34
- end
35
-
36
31
  unless thrd.value.success?
37
- UI.error("")
38
- UI.error("Could not configure imported keychain item (certificate) to prevent UI permission popup when code signing\n" \
39
- "Check if you supplied the correct `keychain_password` for keychain: `#{keychain_path}`\n" \
40
- "#{stderr.read.to_s.strip}")
41
- UI.error("")
42
- UI.error("Please look at the following docs to see how to set a keychain password:")
43
- UI.error(" - https://docs.fastlane.tools/actions/sync_code_signing")
44
- UI.error(" - https://docs.fastlane.tools/actions/get_certificates")
32
+ err = stderr.read.to_s.strip
33
+
34
+ # Inform user when no/wrong password was used as its needed to prevent UI permission popup from Xcode when signing
35
+ if err.include?("SecKeychainItemSetAccessWithPassword")
36
+ UI.error("")
37
+ UI.error("Could not configure imported keychain item (certificate) to prevent UI permission popup when code signing\n" \
38
+ "Check if you supplied the correct `keychain_password` for keychain: `#{keychain_path}`\n" \
39
+ "#{err}")
40
+ UI.error("")
41
+ UI.error("Please look at the following docs to see how to set a keychain password:")
42
+ UI.error(" - https://docs.fastlane.tools/actions/sync_code_signing")
43
+ UI.error(" - https://docs.fastlane.tools/actions/get_certificates")
44
+ else
45
+ UI.error(err)
46
+ end
45
47
  end
46
48
  end
49
+
50
+ # Hiding after Open3 finishes
51
+ Helper.hide_loading_indicator
52
+
47
53
  end
48
54
  end
49
55
  end
@@ -69,6 +69,13 @@ module Scan
69
69
  type: Boolean,
70
70
  optional: true),
71
71
 
72
+ # reset simulator
73
+ FastlaneCore::ConfigItem.new(key: :reset_simulator,
74
+ env_name: 'SCAN_RESET_SIMULATOR',
75
+ description: "Enabling this option will automatically erase the simulator before running the application",
76
+ default_value: false,
77
+ type: Boolean),
78
+
72
79
  # reinstall app
73
80
  FastlaneCore::ConfigItem.new(key: :reinstall_app,
74
81
  env_name: 'SCAN_REINSTALL_APP',
@@ -40,7 +40,11 @@ module Scan
40
40
  ]
41
41
  exit_status = 0
42
42
 
43
- if Scan.config[:reinstall_app]
43
+ if Scan.config[:reset_simulator]
44
+ Scan.devices.each do |device|
45
+ FastlaneCore::Simulator.reset(udid: device.udid)
46
+ end
47
+ elsif Scan.config[:reinstall_app]
44
48
  app_identifier = Scan.config[:app_identifier]
45
49
  app_identifier ||= UI.input("App Identifier: ")
46
50
 
@@ -21,6 +21,19 @@ module Sigh
21
21
 
22
22
  def resign(ipa, signing_identity, provisioning_profiles, entitlements, version, display_name, short_version, bundle_version, new_bundle_id, use_app_entitlements, keychain_path)
23
23
  resign_path = find_resign_path
24
+
25
+ if keychain_path
26
+ keychain_path_absolute = File.expand_path(keychain_path)
27
+
28
+ current_keychains = `security list-keychains`
29
+ current_keychains.delete!("\n")
30
+
31
+ unless current_keychains.include?(keychain_path_absolute)
32
+ previous_keychains = current_keychains
33
+ `security list-keychains -s #{current_keychains} '#{keychain_path_absolute}'`
34
+ end
35
+ end
36
+
24
37
  signing_identity = find_signing_identity(signing_identity)
25
38
 
26
39
  unless provisioning_profiles.kind_of?(Enumerable)
@@ -68,6 +81,8 @@ module Sigh
68
81
  UI.error("Something went wrong while code signing #{ipa}")
69
82
  false
70
83
  end
84
+ ensure
85
+ `security list-keychains -s #{previous_keychains}` if previous_keychains
71
86
  end
72
87
 
73
88
  def get_inputs(options, args)
@@ -103,9 +118,10 @@ module Sigh
103
118
  end
104
119
 
105
120
  def find_signing_identity(signing_identity)
106
- until (signing_identity = sha1_for_signing_identity(signing_identity))
107
- UI.error("Couldn't find signing identity '#{signing_identity}'.")
108
- signing_identity = ask_for_signing_identity
121
+ signing_identity_input = signing_identity
122
+ until (signing_identity = sha1_for_signing_identity(signing_identity_input))
123
+ UI.error("Couldn't find signing identity '#{signing_identity_input}'.")
124
+ signing_identity_input = ask_for_signing_identity
109
125
  end
110
126
 
111
127
  signing_identity
@@ -42,7 +42,9 @@ module Snapshot
42
42
 
43
43
  launch_arguments = Array(snapshot_config[:launch_arguments])
44
44
  # if more than 1 set of arguments, use a tuple with an index
45
- if launch_arguments.count == 1
45
+ if launch_arguments.count == 0
46
+ @launch_args_set = [[""]]
47
+ elsif launch_arguments.count == 1
46
48
  @launch_args_set = [launch_arguments]
47
49
  else
48
50
  @launch_args_set = launch_arguments.map.with_index { |e, i| [i, e] }
@@ -228,7 +228,17 @@ module Supply
228
228
  optional: true,
229
229
  description: "When promoting to a new track, deactivate the binary in the origin track",
230
230
  is_string: false,
231
- default_value: true)
231
+ default_value: true),
232
+ FastlaneCore::ConfigItem.new(key: :version_codes_to_retain,
233
+ optional: true,
234
+ type: Array,
235
+ description: "An array of version codes to retain when publishing a new APK",
236
+ verify_block: proc do |version_codes|
237
+ UI.user_error!("Could not evaluate array from '#{version_codes}'") unless version_codes.kind_of?(Array)
238
+ version_codes.each do |version_code|
239
+ UI.user_error!("Version code '#{version_code}' is not an integer") unless version_code.kind_of?(Integer)
240
+ end
241
+ end)
232
242
  ]
233
243
  end
234
244
  # rubocop:enable Metrics/PerceivedComplexity
@@ -28,6 +28,8 @@ module Supply
28
28
  apk_version_codes.concat(upload_bundles) unless Supply.config[:skip_upload_aab]
29
29
  upload_mapping(apk_version_codes)
30
30
 
31
+ apk_version_codes.concat(Supply.config[:version_codes_to_retain]) if Supply.config[:version_codes_to_retain]
32
+
31
33
  # Only update tracks if we have version codes
32
34
  # Updating a track with empty version codes can completely clear out a track
33
35
  update_track(apk_version_codes) unless apk_version_codes.empty?
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.114.0.beta.20190115200110
4
+ version: 2.114.0.beta.20190116200018
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Natchev
@@ -27,7 +27,7 @@ authors:
27
27
  autorequire:
28
28
  bindir: bin
29
29
  cert_chain: []
30
- date: 2019-01-15 00:00:00.000000000 Z
30
+ date: 2019-01-16 00:00:00.000000000 Z
31
31
  dependencies:
32
32
  - !ruby/object:Gem::Dependency
33
33
  name: slack-notifier
@@ -1683,23 +1683,23 @@ post_install_message:
1683
1683
  rdoc_options: []
1684
1684
  require_paths:
1685
1685
  - frameit/lib
1686
- - precheck/lib
1686
+ - pilot/lib
1687
+ - fastlane/lib
1688
+ - snapshot/lib
1687
1689
  - gym/lib
1688
- - deliver/lib
1690
+ - precheck/lib
1691
+ - scan/lib
1692
+ - pem/lib
1689
1693
  - produce/lib
1690
- - snapshot/lib
1691
- - sigh/lib
1692
- - screengrab/lib
1693
- - pilot/lib
1694
+ - spaceship/lib
1694
1695
  - fastlane_core/lib
1695
1696
  - supply/lib
1697
+ - deliver/lib
1698
+ - credentials_manager/lib
1696
1699
  - match/lib
1697
- - fastlane/lib
1700
+ - screengrab/lib
1701
+ - sigh/lib
1698
1702
  - cert/lib
1699
- - scan/lib
1700
- - spaceship/lib
1701
- - pem/lib
1702
- - credentials_manager/lib
1703
1703
  required_ruby_version: !ruby/object:Gem::Requirement
1704
1704
  requirements:
1705
1705
  - - ">="