fastlane 2.44.1 → 2.45.0.beta.20170706010014

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/deliver/lib/deliver/options.rb +10 -10
  3. data/fastlane/lib/fastlane/actions/adb.rb +1 -1
  4. data/fastlane/lib/fastlane/actions/adb_devices.rb +1 -1
  5. data/fastlane/lib/fastlane/actions/appaloosa.rb +2 -2
  6. data/fastlane/lib/fastlane/actions/apteligent.rb +2 -0
  7. data/fastlane/lib/fastlane/actions/create_keychain.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/google_play_track_version_codes.rb +70 -0
  9. data/fastlane/lib/fastlane/actions/hg_commit_version_bump.rb +1 -1
  10. data/fastlane/lib/fastlane/actions/hipchat.rb +1 -1
  11. data/fastlane/lib/fastlane/actions/import_from_git.rb +2 -2
  12. data/fastlane/lib/fastlane/actions/last_git_tag.rb +1 -1
  13. data/fastlane/lib/fastlane/actions/number_of_commits.rb +1 -1
  14. data/fastlane/lib/fastlane/actions/reset_git_repo.rb +1 -1
  15. data/fastlane/lib/fastlane/actions/setup_jenkins.rb +1 -1
  16. data/fastlane/lib/fastlane/actions/slack.rb +3 -3
  17. data/fastlane/lib/fastlane/actions/unlock_keychain.rb +1 -1
  18. data/fastlane/lib/fastlane/actions/update_project_team.rb +1 -1
  19. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +4 -3
  20. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +9 -5
  21. data/fastlane/lib/fastlane/setup/crashlytics_beta.rb +2 -2
  22. data/fastlane/lib/fastlane/version.rb +2 -1
  23. data/fastlane_core/lib/fastlane_core/helper.rb +7 -7
  24. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +1 -1
  25. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +17 -0
  26. data/frameit/lib/frameit/options.rb +1 -1
  27. data/gym/lib/gym/options.rb +7 -7
  28. data/match/README.md +1 -1
  29. data/pilot/lib/pilot/options.rb +1 -1
  30. data/precheck/lib/precheck/options.rb +2 -2
  31. data/produce/lib/produce/options.rb +1 -1
  32. data/scan/lib/scan/options.rb +8 -8
  33. data/sigh/lib/sigh/options.rb +1 -1
  34. data/spaceship/lib/spaceship/du/du_client.rb +2 -2
  35. data/supply/README.md +5 -0
  36. data/supply/lib/supply/options.rb +5 -5
  37. data/supply/lib/supply/reader.rb +25 -0
  38. metadata +20 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e3661d20099e4fbf7798f2ef011fbb8e52414eb5
4
- data.tar.gz: 5a60e26dbaa7d3f879e30fc6333f31414dd11650
3
+ metadata.gz: 3714c963e48a70e49b632a828f9bec4a90e66356
4
+ data.tar.gz: 3b79b6c1113480d94db5b6a8e98264330a8bc6b5
5
5
  SHA512:
6
- metadata.gz: ccbdce2650844341713a16c908341553375089d517837cdc874e62bf03cbda39a3523e80233d9962d4d180201ac44cb8e16b81e8ddc3df6753643d1b0b90808e
7
- data.tar.gz: 5658cd7bf631f3f513c94e5829c4a72a4121f1825d2d13e7a80033b5e4ccb8483ba563733b761666aca5d1bc28e04da745c8f0edd7cfc7e187c4adcf6ffcadee
6
+ metadata.gz: df5afdb152d2c6ecb3b965604b8c204a0c4dd3bb08f351fea9078abe1523b3848780120634cfa979ccaa74a307064f481558be65bcc5102fc48555c1144efdf9
7
+ data.tar.gz: 014cfe3b7b3e7b7bede2ae33ef966d8d47a3190fd48b7f012092777fe6fdb1ef9fd6c04b4fbbc6817e1146d9d61d738b2dd8e05cca3202eda33fd31d06520579
@@ -90,7 +90,7 @@ module Deliver
90
90
  description: "The version that should be edited or created",
91
91
  optional: true),
92
92
  FastlaneCore::ConfigItem.new(key: :skip_metadata,
93
- description: "Don't upload the metadata (e.g. title, description), this will still upload screenshots",
93
+ description: "Don't upload the metadata (e.g. title, description). This will still upload screenshots",
94
94
  is_string: false,
95
95
  default_value: false),
96
96
  FastlaneCore::ConfigItem.new(key: :skip_app_version_update,
@@ -226,27 +226,27 @@ module Deliver
226
226
  optional: true,
227
227
  is_string: true),
228
228
  FastlaneCore::ConfigItem.new(key: :primary_category,
229
- description: "Metadata: The english name of the primary category(e.g. `Business`, `Books`)",
229
+ description: "Metadata: The english name of the primary category (e.g. `Business`, `Books`)",
230
230
  optional: true,
231
231
  is_string: true),
232
232
  FastlaneCore::ConfigItem.new(key: :secondary_category,
233
- description: "Metadata: The english name of the secondary category(e.g. `Business`, `Books`)",
233
+ description: "Metadata: The english name of the secondary category (e.g. `Business`, `Books`)",
234
234
  optional: true,
235
235
  is_string: true),
236
236
  FastlaneCore::ConfigItem.new(key: :primary_first_sub_category,
237
- description: "Metadata: The english name of the primary first sub category(e.g. `Educational`, `Puzzle`)",
237
+ description: "Metadata: The english name of the primary first sub category (e.g. `Educational`, `Puzzle`)",
238
238
  optional: true,
239
239
  is_string: true),
240
240
  FastlaneCore::ConfigItem.new(key: :primary_second_sub_category,
241
- description: "Metadata: The english name of the primary second sub category(e.g. `Educational`, `Puzzle`)",
241
+ description: "Metadata: The english name of the primary second sub category (e.g. `Educational`, `Puzzle`)",
242
242
  optional: true,
243
243
  is_string: true),
244
244
  FastlaneCore::ConfigItem.new(key: :secondary_first_sub_category,
245
- description: "Metadata: The english name of the secondary first sub category(e.g. `Educational`, `Puzzle`)",
245
+ description: "Metadata: The english name of the secondary first sub category (e.g. `Educational`, `Puzzle`)",
246
246
  optional: true,
247
247
  is_string: true),
248
248
  FastlaneCore::ConfigItem.new(key: :secondary_second_sub_category,
249
- description: "Metadata: The english name of the secondary second sub category(e.g. `Educational`, `Puzzle`)",
249
+ description: "Metadata: The english name of the secondary second sub category (e.g. `Educational`, `Puzzle`)",
250
250
  optional: true,
251
251
  is_string: true),
252
252
  FastlaneCore::ConfigItem.new(key: :trade_representative_contact_information,
@@ -271,14 +271,14 @@ module Deliver
271
271
  optional: true,
272
272
  is_string: false,
273
273
  verify_block: proc do |value|
274
- UI.user_error!(":subtitle must be a Hash, with the language being the key") unless value.kind_of?(Hash)
274
+ UI.user_error!(":subtitle must be a hash, with the language being the key") unless value.kind_of?(Hash)
275
275
  end),
276
276
  FastlaneCore::ConfigItem.new(key: :keywords,
277
277
  description: "Metadata: An array of localised keywords",
278
278
  optional: true,
279
279
  is_string: false,
280
280
  verify_block: proc do |value|
281
- UI.user_error!(":keywords must be a Hash, with the language being the key") unless value.kind_of?(Hash)
281
+ UI.user_error!(":keywords must be a hash, with the language being the key") unless value.kind_of?(Hash)
282
282
  value.each do |language, keywords|
283
283
  # Auto-convert array to string
284
284
  keywords = keywords.join(", ") if keywords.kind_of?(Array)
@@ -292,7 +292,7 @@ module Deliver
292
292
  optional: true,
293
293
  is_string: false,
294
294
  verify_block: proc do |value|
295
- UI.user_error!(":keywords must be a Hash, with the language being the key") unless value.kind_of?(Hash)
295
+ UI.user_error!(":keywords must be a hash, with the language being the key") unless value.kind_of?(Hash)
296
296
  end),
297
297
  FastlaneCore::ConfigItem.new(key: :release_notes,
298
298
  description: "Metadata: Localised release notes for this version",
@@ -28,7 +28,7 @@ module Fastlane
28
28
  [
29
29
  FastlaneCore::ConfigItem.new(key: :serial,
30
30
  env_name: "FL_ANDROID_SERIAL",
31
- description: "Android serial, which device should be used for this command",
31
+ description: "Android serial of the device to use for this command",
32
32
  is_string: true,
33
33
  default_value: ""),
34
34
  FastlaneCore::ConfigItem.new(key: :command,
@@ -15,7 +15,7 @@ module Fastlane
15
15
  #####################################################
16
16
 
17
17
  def self.description
18
- "Get an Array of Connected android device serials"
18
+ "Get an array of Connected android device serials"
19
19
  end
20
20
 
21
21
  def self.details
@@ -207,12 +207,12 @@ module Fastlane
207
207
  default_value: Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH]),
208
208
  FastlaneCore::ConfigItem.new(key: :locale,
209
209
  env_name: 'FL_APPALOOSA_LOCALE',
210
- description: 'Select the folder locale for yours screenshots',
210
+ description: 'Select the folder locale for your screenshots',
211
211
  default_value: 'en-US',
212
212
  optional: true),
213
213
  FastlaneCore::ConfigItem.new(key: :device,
214
214
  env_name: 'FL_APPALOOSA_DEVICE',
215
- description: 'Select the device format for yours screenshots',
215
+ description: 'Select the device format for your screenshots',
216
216
  optional: true),
217
217
  FastlaneCore::ConfigItem.new(key: :description,
218
218
  env_name: 'FL_APPALOOSA_DESCRIPTION',
@@ -45,11 +45,13 @@ module Fastlane
45
45
  def self.upload_options(params)
46
46
  file_path = dsym_path(params).shellescape
47
47
 
48
+ # rubocop: disable Style/FormatStringToken
48
49
  options = []
49
50
  options << "--write-out %{http_code} --silent --output /dev/null"
50
51
  options << "-F dsym=@#{file_path}"
51
52
  options << "-F key=#{params[:api_key].shellescape}"
52
53
  options
54
+ # rubocop: enable Style/FormatStringToken
53
55
  end
54
56
 
55
57
  #####################################################
@@ -66,7 +66,7 @@ module Fastlane
66
66
  optional: true),
67
67
  FastlaneCore::ConfigItem.new(key: :path,
68
68
  env_name: "KEYCHAIN_PATH",
69
- description: "Path to Keychain",
69
+ description: "Path to keychain",
70
70
  is_string: true,
71
71
  conflicting_options: [:name],
72
72
  optional: true),
@@ -0,0 +1,70 @@
1
+ module Fastlane
2
+ module Actions
3
+ class GooglePlayTrackVersionCodesAction < Action
4
+ # Supply::Options.available_options keys that apply to this action.
5
+ OPTIONS = [
6
+ :package_name,
7
+ :track,
8
+ :json_key,
9
+ :json_key_data,
10
+ :root_url
11
+ ]
12
+
13
+ def self.run(params)
14
+ require 'supply'
15
+ require 'supply/options'
16
+ require 'supply/reader'
17
+
18
+ Supply.config = params
19
+
20
+ Supply::Reader.new.track_version_codes
21
+ end
22
+
23
+ #####################################################
24
+ # @!group Documentation
25
+ #####################################################
26
+
27
+ def self.description
28
+ "Retrieves version codes for a Google Play track"
29
+ end
30
+
31
+ def self.details
32
+ "More information: https://github.com/fastlane/fastlane/tree/master/supply"
33
+ end
34
+
35
+ def self.available_options
36
+ require 'supply'
37
+ require 'supply/options'
38
+
39
+ Supply::Options.available_options.select do |option|
40
+ OPTIONS.include?(option.key)
41
+ end
42
+ end
43
+
44
+ def self.output
45
+ end
46
+
47
+ def self.return_value
48
+ "Array of integers representing the version codes for the given Google Play track"
49
+ end
50
+
51
+ def self.authors
52
+ ["panthomakos"]
53
+ end
54
+
55
+ def self.is_supported?(platform)
56
+ platform == :android
57
+ end
58
+
59
+ def self.example_code
60
+ [
61
+ 'google_play_track_version_codes'
62
+ ]
63
+ end
64
+
65
+ def self.category
66
+ :misc
67
+ end
68
+ end
69
+ end
70
+ end
@@ -138,7 +138,7 @@ module Fastlane
138
138
  default_value: "file1, file2"),
139
139
  FastlaneCore::ConfigItem.new(key: :test_expected_files,
140
140
  env_name: "FL_HG_COMMIT_TEST_EXP_FILES",
141
- description: "A list of expected changed files passed in for testin",
141
+ description: "A list of expected changed files passed in for testing",
142
142
  optional: true,
143
143
  default_value: "file1, file2")
144
144
  ]
@@ -160,7 +160,7 @@ module Fastlane
160
160
  is_string: false),
161
161
  FastlaneCore::ConfigItem.new(key: :from,
162
162
  env_name: "FL_HIPCHAT_FROM",
163
- description: "Name the message will appear be sent from",
163
+ description: "Name the message will appear to be sent from",
164
164
  default_value: "fastlane",
165
165
  optional: true)
166
166
  ]
@@ -23,7 +23,7 @@ module Fastlane
23
23
  def self.available_options
24
24
  [
25
25
  FastlaneCore::ConfigItem.new(key: :url,
26
- description: "The url of the repository to import the Fastfile from",
26
+ description: "The URL of the repository to import the Fastfile from",
27
27
  default_value: nil),
28
28
  FastlaneCore::ConfigItem.new(key: :branch,
29
29
  description: "The branch or tag to check-out on the repository",
@@ -47,7 +47,7 @@ module Fastlane
47
47
  def self.example_code
48
48
  [
49
49
  'import_from_git(
50
- url: "git@github.com:fastlane/fastlane.git", # The url of the repository to import the Fastfile from.
50
+ url: "git@github.com:fastlane/fastlane.git", # The URL of the repository to import the Fastfile from.
51
51
  branch: "HEAD", # The branch to checkout on the repository. Defaults to `HEAD`.
52
52
  path: "fastlane/Fastfile" # The path of the Fastfile in the repository. Defaults to `fastlane/Fastfile`.
53
53
  )'
@@ -30,7 +30,7 @@ module Fastlane
30
30
  end
31
31
 
32
32
  def self.details
33
- "If you are using this action on a **shallow clone**, *the default with some CI systems like Bamboo*, you need to ensure that you have also have pulled all the git tags appropriately. Assuming your git repo has the correct remote set you can issue `sh('git fetch --tags')`"
33
+ "If you are using this action on a **shallow clone**, *the default with some CI systems like Bamboo*, you need to ensure that you have also have pulled all the git tags appropriately. Assuming your git repo has the correct remote set you can issue `sh('git fetch --tags')`"
34
34
  end
35
35
 
36
36
  def self.example_code
@@ -44,7 +44,7 @@ module Fastlane
44
44
  end
45
45
 
46
46
  def self.details
47
- "You can use this action to get the number of commits of this branch. This is useful if you want to set the build number to the number of commits. See `faslane actions number_of_commits` for more details"
47
+ "You can use this action to get the number of commits of this branch. This is useful if you want to set the build number to the number of commits. See `fastlane actions number_of_commits` for more details"
48
48
  end
49
49
 
50
50
  def self.authors
@@ -99,7 +99,7 @@ module Fastlane
99
99
  default_value: true),
100
100
  FastlaneCore::ConfigItem.new(key: :exclude,
101
101
  env_name: "FL_RESET_GIT_EXCLUDE",
102
- description: "You can pass a string, or array of, file pattern(s) here which you want to have survive the cleaning process, and remain on disk. E.g. to leave the `artifacts` directory you would specify `exclude: 'artifacts'`. Make sure this pattern is also in your gitignore! See the gitignore documentation for info on patterns",
102
+ description: "You can pass a string, or array of, file pattern(s) here which you want to have survive the cleaning process, and remain on disk, e.g. to leave the `artifacts` directory you would specify `exclude: 'artifacts'`. Make sure this pattern is also in your gitignore! See the gitignore documentation for info on patterns",
103
103
  is_string: false,
104
104
  optional: true)
105
105
  ]
@@ -158,7 +158,7 @@ module Fastlane
158
158
  default_value: "./output"),
159
159
  FastlaneCore::ConfigItem.new(key: :derived_data_path,
160
160
  env_name: "FL_SETUP_JENKINS_DERIVED_DATA_PATH",
161
- description: "The directory where build products and other derived data will go",
161
+ description: "The directory where built products and other derived data will go",
162
162
  is_string: true,
163
163
  default_value: "./derivedData"),
164
164
  FastlaneCore::ConfigItem.new(key: :result_bundle,
@@ -66,7 +66,7 @@ module Fastlane
66
66
  optional: true),
67
67
  FastlaneCore::ConfigItem.new(key: :use_webhook_configured_username_and_icon,
68
68
  env_name: "FL_SLACK_USE_WEBHOOK_CONFIGURED_USERNAME_AND_ICON",
69
- description: "Use webook's default username and icon settings? (true/false)",
69
+ description: "Use webhook's default username and icon settings? (true/false)",
70
70
  default_value: false,
71
71
  is_string: false,
72
72
  optional: true),
@@ -79,13 +79,13 @@ module Fastlane
79
79
  end),
80
80
  FastlaneCore::ConfigItem.new(key: :username,
81
81
  env_name: "FL_SLACK_USERNAME",
82
- description: "Overrides the webook's username property if use_webhook_configured_username_and_icon is false",
82
+ description: "Overrides the webhook's username property if use_webhook_configured_username_and_icon is false",
83
83
  default_value: "fastlane",
84
84
  is_string: true,
85
85
  optional: true),
86
86
  FastlaneCore::ConfigItem.new(key: :icon_url,
87
87
  env_name: "FL_SLACK_ICON_URL",
88
- description: "Overrides the webook's image property if use_webhook_configured_username_and_icon is false",
88
+ description: "Overrides the webhook's image property if use_webhook_configured_username_and_icon is false",
89
89
  default_value: "https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png",
90
90
  is_string: true,
91
91
  optional: true),
@@ -69,7 +69,7 @@ module Fastlane
69
69
  [
70
70
  FastlaneCore::ConfigItem.new(key: :path,
71
71
  env_name: "FL_UNLOCK_KEYCHAIN_PATH",
72
- description: "Path to the Keychain file",
72
+ description: "Path to the keychain file",
73
73
  optional: false),
74
74
  FastlaneCore::ConfigItem.new(key: :password,
75
75
  env_name: "FL_UNLOCK_KEYCHAIN_PASSWORD",
@@ -37,7 +37,7 @@ module Fastlane
37
37
  end),
38
38
  FastlaneCore::ConfigItem.new(key: :teamid,
39
39
  env_name: "FL_PROJECT_TEAM_ID",
40
- description: "The Team ID you want to use",
40
+ description: "The Team ID you want to use",
41
41
  default_value: ENV["TEAM_ID"] || CredentialsManager::AppfileConfig.try_fetch_value(:team_id))
42
42
  ]
43
43
  end
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path("../lib", __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require '<%= require_path %>/version'
@@ -6,10 +7,10 @@ require '<%= require_path %>/version'
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = '<%= gem_name %>'
8
9
  spec.version = Fastlane::<%= plugin_name.fastlane_class %>::VERSION
9
- spec.author = %q{<%= author %>}
10
- spec.email = %q{<%= email %>}
10
+ spec.author = '<%= author %>'
11
+ spec.email = '<%= email %>'
11
12
 
12
- spec.summary = %q{<%= summary %>}
13
+ spec.summary = '<%= summary %>'
13
14
  # spec.homepage = "https://github.com/<GITHUB_USERNAME>/<%= gem_name %>"
14
15
  spec.license = "MIT"
15
16
 
@@ -1,3 +1,6 @@
1
+ Style/MultipleComparison:
2
+ Enabled: false
3
+
1
4
  Style/PercentLiteralDelimiters:
2
5
  Enabled: false
3
6
 
@@ -76,14 +79,14 @@ Lint/UselessAssignment:
76
79
  - '**/spec/**/*'
77
80
 
78
81
  # We could potentially enable the 2 below:
79
- Style/IndentHash:
82
+ Layout/IndentHash:
80
83
  Enabled: false
81
84
 
82
- Style/AlignHash:
85
+ Layout/AlignHash:
83
86
  Enabled: false
84
87
 
85
88
  # HoundCI doesn't like this rule
86
- Style/DotPosition:
89
+ Layout/DotPosition:
87
90
  Enabled: false
88
91
 
89
92
  # We allow !! as it's an easy way to convert ot boolean
@@ -95,7 +98,7 @@ Style/SymbolArray:
95
98
  Enabled: false
96
99
 
97
100
  # We still support Ruby 2.0.0
98
- Style/IndentHeredoc:
101
+ Layout/IndentHeredoc:
99
102
  Enabled: false
100
103
 
101
104
  # This cop would not work fine with rspec
@@ -209,7 +212,7 @@ Style/PerlBackrefs:
209
212
  Enabled: false
210
213
 
211
214
  # Disable '+ should be surrounded with a single space' for xcodebuild_spec.rb
212
- Style/SpaceAroundOperators:
215
+ Layout/SpaceAroundOperators:
213
216
  Exclude:
214
217
  - '**/spec/actions_specs/xcodebuild_spec.rb'
215
218
 
@@ -231,6 +234,7 @@ Style/FileName:
231
234
  - '**/Fastfile'
232
235
  - '**/Deliverfile'
233
236
  - '**/Snapfile'
237
+ - '**/*.gemspec'
234
238
 
235
239
  # We're not there yet
236
240
  Style/Documentation:
@@ -53,7 +53,7 @@ module Fastlane
53
53
  beta_info_groups = @beta_info.groups_valid? ? "['#{@beta_info.groups.join("', '")}']" : "nil"
54
54
  beta_info_emails = @beta_info.emails_valid? ? "['#{@beta_info.emails.join("', '")}']" : "nil"
55
55
 
56
- # rubocop:disable Style/IndentationConsistency
56
+ # rubocop:disable Layout/IndentationConsistency
57
57
  %{ #
58
58
  # Learn more here: https://docs.fastlane.tools/getting-started/ios/beta-deployment/
59
59
  # and: https://docs.fastlane.tools/getting-started/android/beta-deployment/
@@ -82,7 +82,7 @@ module Fastlane
82
82
  # message: "Successfully uploaded a beta release - see it at https://fabric.io/_/beta"
83
83
  # )
84
84
  end}
85
- # rubocop:enable Style/IndentationConsistency
85
+ # rubocop:enable Layout/IndentationConsistency
86
86
  end
87
87
 
88
88
  def expanded_paths_equal?(path1, path2)
@@ -1,4 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.44.1'.freeze
2
+ VERSION = '2.45.0.beta.20170706010014'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
+ MINIMUM_XCODE_RELEASE = "7.0".freeze
4
5
  end
@@ -152,6 +152,13 @@ module FastlaneCore
152
152
  @xcode_version
153
153
  end
154
154
 
155
+ # @return true if Xcode version is higher than 8.3
156
+ def self.xcode_at_least?(version)
157
+ FastlaneCore::UI.user_error!("Unable to locate Xcode. Please make sure to have Xcode installed on your machine") if xcode_version.nil?
158
+ v = xcode_version
159
+ Gem::Version.new(v) >= Gem::Version.new(version)
160
+ end
161
+
155
162
  def self.transporter_java_executable_path
156
163
  return File.join(self.transporter_java_path, 'bin', 'java')
157
164
  end
@@ -213,13 +220,6 @@ module FastlaneCore
213
220
  keychain_path
214
221
  end
215
222
 
216
- # @return true if Xcode version is higher than 8.3
217
- def self.xcode_at_least?(version)
218
- FastlaneCore::UI.user_error!("Unable to locate Xcode. Please make sure to have Xcode installed on your machine") if xcode_version.nil?
219
- v = xcode_version
220
- Gem::Version.new(v) >= Gem::Version.new(version)
221
- end
222
-
223
223
  # @return the full path to the iTMSTransporter executable
224
224
  def self.itms_path
225
225
  return ENV["FASTLANE_ITUNES_TRANSPORTER_PATH"] if FastlaneCore::Env.truthy?("FASTLANE_ITUNES_TRANSPORTER_PATH")
@@ -169,7 +169,7 @@ module FastlaneCore
169
169
 
170
170
  def handle_error(password)
171
171
  # rubocop:disable Style/CaseEquality
172
- unless /^[0-9a-zA-Z\.\$\_]*$/ === password
172
+ unless password === /^[0-9a-zA-Z\.\$\_]*$/
173
173
  UI.error([
174
174
  "Password contains special characters, which may not be handled properly by iTMSTransporter.",
175
175
  "If you experience problems uploading to iTunes Connect, please consider changing your password to something with only alphanumeric characters."
@@ -34,7 +34,24 @@ module Commander
34
34
  parse_global_options
35
35
  remove_global_options options, @args
36
36
 
37
+ xcode_outdated = false
37
38
  begin
39
+ unless FastlaneCore::Helper.xcode_at_least?(Fastlane::MINIMUM_XCODE_RELEASE)
40
+ xcode_outdated = true
41
+ end
42
+ rescue
43
+ # We don't care about exceptions here
44
+ # We'll land here if the user doesn't have Xcode at all for example
45
+ # which is fine for someone who uses fastlane just for Android project
46
+ # What we *do* care about is when someone links an old version of Xcode
47
+ end
48
+
49
+ begin
50
+ if xcode_outdated
51
+ # We have to raise that error within this `begin` block to show a nice user error without a stack trace
52
+ FastlaneCore::UI.user_error!("fastlane requires a minimum version of Xcode #{Fastlane::MINIMUM_XCODE_RELEASE}, please upgrade and make sure to use `sudo xcode-select -s /Applications/Xcode.app`")
53
+ end
54
+
38
55
  collector.did_launch_action(@program[:name])
39
56
  run_active_command
40
57
  rescue InvalidCommandError => e
@@ -33,7 +33,7 @@ module Frameit
33
33
  FastlaneCore::ConfigItem.new(key: :use_legacy_iphone5s,
34
34
  env_name: "FRAMEIT_USE_LEGACY_IPHONE_5_S",
35
35
  is_string: false,
36
- description: "use iPhone 5s instead of iPhone SE frames",
36
+ description: "Use iPhone 5s instead of iPhone SE frames",
37
37
  default_value: false),
38
38
  FastlaneCore::ConfigItem.new(key: :use_legacy_iphone6s,
39
39
  env_name: "FRAMEIT_USE_LEGACY_IPHONE_6_S",
@@ -15,7 +15,7 @@ module Gym
15
15
  short_option: "-w",
16
16
  env_name: "GYM_WORKSPACE",
17
17
  optional: true,
18
- description: "Path the workspace file",
18
+ description: "Path to the workspace file",
19
19
  verify_block: proc do |value|
20
20
  v = File.expand_path(value.to_s)
21
21
  UI.user_error!("Workspace file not found at path '#{v}'") unless File.exist?(v)
@@ -30,7 +30,7 @@ module Gym
30
30
  short_option: "-p",
31
31
  optional: true,
32
32
  env_name: "GYM_PROJECT",
33
- description: "Path the project file",
33
+ description: "Path to the project file",
34
34
  verify_block: proc do |value|
35
35
  v = File.expand_path(value.to_s)
36
36
  UI.user_error!("Project file not found at path '#{v}'") unless File.exist?(v)
@@ -96,7 +96,7 @@ module Gym
96
96
  FastlaneCore::ConfigItem.new(key: :include_bitcode,
97
97
  short_option: "-z",
98
98
  env_name: "GYM_INCLUDE_BITCODE",
99
- description: "Should the ipa include bitcode?",
99
+ description: "Should the ipa file include bitcode?",
100
100
  is_string: false,
101
101
  optional: true),
102
102
  FastlaneCore::ConfigItem.new(key: :export_method,
@@ -111,7 +111,7 @@ module Gym
111
111
  end),
112
112
  FastlaneCore::ConfigItem.new(key: :export_options,
113
113
  env_name: "GYM_EXPORT_OPTIONS",
114
- description: "Specifies path to export options plist. User xcodebuild -help to print the full set of available options",
114
+ description: "Specifies path to export options plist. Use 'xcodebuild -help' to print the full set of available options",
115
115
  is_string: false,
116
116
  optional: true,
117
117
  conflict_block: proc do |value|
@@ -127,7 +127,7 @@ module Gym
127
127
  type: :shell_string),
128
128
  FastlaneCore::ConfigItem.new(key: :skip_build_archive,
129
129
  env_name: "GYM_SKIP_BUILD_ARCHIVE",
130
- description: "Export ipa from previously build xarchive. Uses archive_path as source",
130
+ description: "Export ipa from previously built xarchive. Uses archive_path as source",
131
131
  is_string: false,
132
132
  optional: true),
133
133
  # Very optional
@@ -143,7 +143,7 @@ module Gym
143
143
  FastlaneCore::ConfigItem.new(key: :derived_data_path,
144
144
  short_option: "-f",
145
145
  env_name: "GYM_DERIVED_DATA_PATH",
146
- description: "The directory where build products and other derived data will go",
146
+ description: "The directory where built products and other derived data will go",
147
147
  optional: true),
148
148
  FastlaneCore::ConfigItem.new(key: :result_bundle,
149
149
  short_option: "-u",
@@ -227,7 +227,7 @@ module Gym
227
227
  optional: true),
228
228
  FastlaneCore::ConfigItem.new(key: :analyze_build_time,
229
229
  env_name: "GYM_ANALYZE_BUILD_TIME",
230
- description: "Analyze the project build time and store the output in culprits.txt file",
230
+ description: "Analyze the project build time and store the output in 'culprits.txt' file",
231
231
  optional: true,
232
232
  is_string: false),
233
233
  FastlaneCore::ConfigItem.new(key: :xcpretty_utf,
data/match/README.md CHANGED
@@ -327,7 +327,7 @@ Once you've decided which approach to take, all that's left to do is to set your
327
327
 
328
328
  ### Nuke
329
329
 
330
- If you never really cared about code signing and have a messy Apple Developer account with a lot of invalid, expired or Xcode managed profiles/certificates, you can use the `match nuke` command to revoke your certificates and provisioning profiles. Don't worry, apps that are already available in the App Store will still work. Builds distributed via TestFlight might be disabled after nuking your account, so you'll have to re-upload a new build. After clearing your account you'll start from a clean state, and you can run `match` to generate your certificates and profiles again.
330
+ If you never really cared about code signing and have a messy Apple Developer account with a lot of invalid, expired or Xcode managed profiles/certificates, you can use the `match nuke` command to revoke your certificates and provisioning profiles. Don't worry, apps that are already available in the App Store / TestFlight will still work. Builds distributed via Ad Hoc or Enterprise will be disabled after nuking your account, so you'll have to re-upload a new build. After clearing your account you'll start from a clean state, and you can run `match` to generate your certificates and profiles again.
331
331
 
332
332
  To revoke all certificates and provisioning profiles for a specific environment:
333
333
 
@@ -42,7 +42,7 @@ module Pilot
42
42
  short_option: "-w",
43
43
  optional: true,
44
44
  env_name: "PILOT_CHANGELOG",
45
- description: "Provide the what's new text when uploading a new build"),
45
+ description: "Provide the 'what's new' text when uploading a new build"),
46
46
  FastlaneCore::ConfigItem.new(key: :beta_app_description,
47
47
  short_option: "-d",
48
48
  optional: true,
@@ -38,7 +38,7 @@ module Precheck
38
38
  env_name: "PRECHECK_TEAM_ID",
39
39
  description: "The ID of your iTunes Connect team if you're in multiple teams",
40
40
  optional: true,
41
- default_value: CredentialsManager::AppfileConfig.try_fetch_value(:team_id),
41
+ default_value: CredentialsManager::AppfileConfig.try_fetch_value(:itc_team_id),
42
42
  verify_block: proc do |value|
43
43
  ENV["FASTLANE_ITC_TEAM_ID"] = value.to_s
44
44
  end),
@@ -47,7 +47,7 @@ module Precheck
47
47
  env_name: "PRECHECK_TEAM_NAME",
48
48
  description: "The name of your iTunes Connect team if you're in multiple teams",
49
49
  optional: true,
50
- default_value: CredentialsManager::AppfileConfig.try_fetch_value(:team_name),
50
+ default_value: CredentialsManager::AppfileConfig.try_fetch_value(:itc_team_name),
51
51
  verify_block: proc do |value|
52
52
  ENV["FASTLANE_ITC_TEAM_NAME"] = value.to_s
53
53
  end),
@@ -22,7 +22,7 @@ module Produce
22
22
  short_option: "-e",
23
23
  env_name: "PRODUCE_APP_IDENTIFIER_SUFFIX",
24
24
  optional: true,
25
- description: "App Identifier Suffix (Ignored if App Identifier does not ends with .*)"),
25
+ description: "App Identifier Suffix (Ignored if App Identifier does not end with .*)"),
26
26
  FastlaneCore::ConfigItem.new(key: :app_name,
27
27
  env_name: "PRODUCE_APP_NAME",
28
28
  short_option: "-q",
@@ -16,7 +16,7 @@ module Scan
16
16
  short_option: "-w",
17
17
  env_name: "SCAN_WORKSPACE",
18
18
  optional: true,
19
- description: "Path the workspace file",
19
+ description: "Path to the workspace file",
20
20
  verify_block: proc do |value|
21
21
  v = File.expand_path(value.to_s)
22
22
  UI.user_error!("Workspace file not found at path '#{v}'") unless File.exist?(v)
@@ -27,7 +27,7 @@ module Scan
27
27
  short_option: "-p",
28
28
  optional: true,
29
29
  env_name: "SCAN_PROJECT",
30
- description: "Path the project file",
30
+ description: "Path to the project file",
31
31
  verify_block: proc do |value|
32
32
  v = File.expand_path(value.to_s)
33
33
  UI.user_error!("Project file not found at path '#{v}'") unless File.exist?(v)
@@ -72,11 +72,11 @@ module Scan
72
72
  is_string: false,
73
73
  default_value: false),
74
74
  FastlaneCore::ConfigItem.new(key: :code_coverage,
75
- description: "Should generate code coverage (Xcode 7 only)?",
75
+ description: "Should code coverage be generated (Xcode 7 only)?",
76
76
  is_string: false,
77
77
  optional: true),
78
78
  FastlaneCore::ConfigItem.new(key: :address_sanitizer,
79
- description: "Should turn on the address sanitizer?",
79
+ description: "Should the address sanitizer be turned on?",
80
80
  is_string: false,
81
81
  optional: true,
82
82
  conflicting_options: [:thread_sanitizer],
@@ -84,7 +84,7 @@ module Scan
84
84
  UI.user_error!("You can't use 'address_sanitizer' and 'thread_sanitizer' options in one run")
85
85
  end),
86
86
  FastlaneCore::ConfigItem.new(key: :thread_sanitizer,
87
- description: "Should turn on the thread sanitizer?",
87
+ description: "Should the thread sanitizer be turned on?",
88
88
  is_string: false,
89
89
  optional: true,
90
90
  conflicting_options: [:address_sanitizer],
@@ -92,7 +92,7 @@ module Scan
92
92
  UI.user_error!("You can't use 'thread_sanitizer' and 'address_sanitizer' options in one run")
93
93
  end),
94
94
  FastlaneCore::ConfigItem.new(key: :skip_build,
95
- description: "Should skip debug build before test build?",
95
+ description: "Should debug build be skipped before test build?",
96
96
  short_option: "-r",
97
97
  env_name: "SCAN_SKIP_BUILD",
98
98
  is_string: false,
@@ -124,7 +124,7 @@ module Scan
124
124
  FastlaneCore::ConfigItem.new(key: :buildlog_path,
125
125
  short_option: "-l",
126
126
  env_name: "SCAN_BUILDLOG_PATH",
127
- description: "The directory were to store the raw log",
127
+ description: "The directory where to store the raw log",
128
128
  default_value: "#{FastlaneCore::Helper.buildlog_path}/scan"),
129
129
  FastlaneCore::ConfigItem.new(key: :include_simulator_logs,
130
130
  env_name: "SCAN_INCLUDE_SIMULATOR_LOGS",
@@ -178,7 +178,7 @@ module Scan
178
178
  FastlaneCore::ConfigItem.new(key: :open_report,
179
179
  short_option: "-g",
180
180
  env_name: "SCAN_OPEN_REPORT",
181
- description: "Should the HTML report be opened when tests are completed",
181
+ description: "Should the HTML report be opened when tests are completed?",
182
182
  is_string: false,
183
183
  default_value: false),
184
184
  FastlaneCore::ConfigItem.new(key: :configuration,
@@ -28,7 +28,7 @@ module Sigh
28
28
  end),
29
29
  FastlaneCore::ConfigItem.new(key: :skip_install,
30
30
  env_name: "SIGH_SKIP_INSTALL",
31
- description: "By default, the certificate will be added on your local machine. Setting this flag will skip this action",
31
+ description: "By default, the certificate will be added to your local machine. Setting this flag will skip this action",
32
32
  is_string: false,
33
33
  default_value: false),
34
34
  FastlaneCore::ConfigItem.new(key: :force,
@@ -86,7 +86,7 @@ module Spaceship
86
86
  # You can find this by uploading an image in iTunes connect
87
87
  # then look for the X-Apple-Upload-Validation-RuleSets value
88
88
  def picture_type_map
89
- # rubocop:enable Style/ExtraSpacing
89
+ # rubocop:enable Layout/ExtraSpacing
90
90
  {
91
91
  watch: "MZPFT.SortedN27ScreenShot",
92
92
  ipad: "MZPFT.SortedTabletScreenShot",
@@ -101,7 +101,7 @@ module Spaceship
101
101
  end
102
102
 
103
103
  def messages_picture_type_map
104
- # rubocop:enable Style/ExtraSpacing
104
+ # rubocop:enable Layout/ExtraSpacing
105
105
  {
106
106
  ipad: "MZPFT.SortedTabletMessagesScreenShot",
107
107
  ipadPro: "MZPFT.SortedJ99MessagesScreenShot",
data/supply/README.md CHANGED
@@ -63,6 +63,7 @@ Get in contact with the developer on Twitter: [@FastlaneTools](https://twitter.c
63
63
  - Retrieve and edit metadata, such as title and description, for multiple languages
64
64
  - Upload the app icon, promo graphics and screenshots for multiple languages
65
65
  - Have a local copy of the metadata in your git repository
66
+ - Retrieve version code numbers from existing Google Play tracks
66
67
 
67
68
  ##### [Do you like fastlane? Be the first to know about updates and new fastlane tools](https://tinyletter.com/fastlane-tools)
68
69
 
@@ -183,6 +184,10 @@ A common Play publishing scenario might involve uploading an APK version to a te
183
184
 
184
185
  This can be done using the `--track_promote_to` parameter. The `--track_promote_to` parameter works with the `--track` parameter to command the Play API to promote existing Play track APK version(s) (those active on the track identified by the `--track` param value) to a new track (`--track_promote_to` value).
185
186
 
187
+ ## Retrieve Track Version Codes
188
+
189
+ Before performing a new APK upload you may want to check existing track version codes, or you may simply want to provide an informational lane that displays the currently promoted version codes for the production track. You can use the `google_play_track_version_codes` action to retrieve existing version codes for a package and track. For more information, see `fastlane action google_play_track_version_codes` help output.
190
+
186
191
  ## Tips
187
192
 
188
193
  ### [`fastlane`](https://fastlane.tools) Toolchain
@@ -10,12 +10,12 @@ module Supply
10
10
  FastlaneCore::ConfigItem.new(key: :package_name,
11
11
  env_name: "SUPPLY_PACKAGE_NAME",
12
12
  short_option: "-p",
13
- description: "The package name of the Application to modify",
13
+ description: "The package name of the application to use",
14
14
  default_value: CredentialsManager::AppfileConfig.try_fetch_value(:package_name)),
15
15
  FastlaneCore::ConfigItem.new(key: :track,
16
16
  short_option: "-a",
17
17
  env_name: "SUPPLY_TRACK",
18
- description: "The Track to upload the Application to: #{valid_tracks.join(', ')}",
18
+ description: "The track of the application to use: #{valid_tracks.join(', ')}",
19
19
  default_value: 'production',
20
20
  verify_block: proc do |value|
21
21
  available = valid_tracks
@@ -60,7 +60,7 @@ module Supply
60
60
  env_name: "SUPPLY_JSON_KEY",
61
61
  short_option: "-j",
62
62
  conflicting_options: [:issuer, :key, :json_key_data],
63
- optional: true, # this is shouldn't be optional but is until --key and --issuer are completely removed
63
+ optional: true, # this shouldn't be optional but is until --key and --issuer are completely removed
64
64
  description: "The service account json file used to authenticate with Google",
65
65
  default_value: CredentialsManager::AppfileConfig.try_fetch_value(:json_key_file),
66
66
  verify_block: proc do |value|
@@ -133,7 +133,7 @@ module Supply
133
133
  FastlaneCore::ConfigItem.new(key: :track_promote_to,
134
134
  env_name: "SUPPLY_TRACK_PROMOTE_TO",
135
135
  optional: true,
136
- description: "The Track to promote to: #{valid_tracks.join(', ')}",
136
+ description: "The track to promote to: #{valid_tracks.join(', ')}",
137
137
  verify_block: proc do |value|
138
138
  available = valid_tracks
139
139
  UI.user_error! "Invalid value '#{value}', must be #{available.join(', ')}" unless available.include? value
@@ -141,7 +141,7 @@ module Supply
141
141
  FastlaneCore::ConfigItem.new(key: :validate_only,
142
142
  env_name: "SUPPLY_VALIDATE_ONLY",
143
143
  optional: true,
144
- description: "Indicate that changes will only be validated with Google Play rather than actually published",
144
+ description: "Only validate changes with Google Play rather than actually publish",
145
145
  is_string: false,
146
146
  default_value: false),
147
147
  FastlaneCore::ConfigItem.new(key: :mapping,
@@ -0,0 +1,25 @@
1
+ module Supply
2
+ class Reader
3
+ def track_version_codes
4
+ track = Supply.config[:track]
5
+
6
+ client.begin_edit(package_name: Supply.config[:package_name])
7
+ version_codes = client.track_version_codes(track)
8
+ client.abort_current_edit
9
+
10
+ if version_codes.empty?
11
+ UI.important("No version codes found in track '#{track}'")
12
+ else
13
+ UI.success("Found '#{version_codes.join(', ')}' version codes in track '#{track}'")
14
+ end
15
+
16
+ version_codes
17
+ end
18
+
19
+ private
20
+
21
+ def client
22
+ @client ||= Client.make_from_config
23
+ end
24
+ end
25
+ end
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.44.1
4
+ version: 2.45.0.beta.20170706010014
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
@@ -15,7 +15,7 @@ authors:
15
15
  autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
- date: 2017-06-30 00:00:00.000000000 Z
18
+ date: 2017-07-06 00:00:00.000000000 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: slack-notifier
@@ -705,14 +705,14 @@ dependencies:
705
705
  requirements:
706
706
  - - '='
707
707
  - !ruby/object:Gem::Version
708
- version: 0.48.1
708
+ version: 0.49.1
709
709
  type: :development
710
710
  prerelease: false
711
711
  version_requirements: !ruby/object:Gem::Requirement
712
712
  requirements:
713
713
  - - '='
714
714
  - !ruby/object:Gem::Version
715
- version: 0.48.1
715
+ version: 0.49.1
716
716
  - !ruby/object:Gem::Dependency
717
717
  name: rb-readline
718
718
  requirement: !ruby/object:Gem::Requirement
@@ -899,6 +899,7 @@ files:
899
899
  - fastlane/lib/fastlane/actions/git_commit.rb
900
900
  - fastlane/lib/fastlane/actions/git_pull.rb
901
901
  - fastlane/lib/fastlane/actions/git_tag_exists.rb
902
+ - fastlane/lib/fastlane/actions/google_play_track_version_codes.rb
902
903
  - fastlane/lib/fastlane/actions/gradle.rb
903
904
  - fastlane/lib/fastlane/actions/gym.rb
904
905
  - fastlane/lib/fastlane/actions/hg_add_tag.rb
@@ -1385,6 +1386,7 @@ files:
1385
1386
  - supply/lib/supply/commands_generator.rb
1386
1387
  - supply/lib/supply/listing.rb
1387
1388
  - supply/lib/supply/options.rb
1389
+ - supply/lib/supply/reader.rb
1388
1390
  - supply/lib/supply/setup.rb
1389
1391
  - supply/lib/supply/uploader.rb
1390
1392
  homepage: https://fastlane.tools
@@ -1395,24 +1397,24 @@ metadata:
1395
1397
  post_install_message:
1396
1398
  rdoc_options: []
1397
1399
  require_paths:
1400
+ - match/lib
1398
1401
  - cert/lib
1399
- - credentials_manager/lib
1402
+ - screengrab/lib
1403
+ - scan/lib
1404
+ - gym/lib
1405
+ - snapshot/lib
1400
1406
  - deliver/lib
1401
1407
  - fastlane/lib
1402
- - fastlane_core/lib
1403
- - frameit/lib
1404
- - gym/lib
1405
- - match/lib
1408
+ - supply/lib
1409
+ - precheck/lib
1406
1410
  - pem/lib
1407
1411
  - pilot/lib
1408
- - precheck/lib
1409
- - produce/lib
1410
- - scan/lib
1411
- - screengrab/lib
1412
1412
  - sigh/lib
1413
- - snapshot/lib
1413
+ - frameit/lib
1414
+ - produce/lib
1415
+ - credentials_manager/lib
1416
+ - fastlane_core/lib
1414
1417
  - spaceship/lib
1415
- - supply/lib
1416
1418
  required_ruby_version: !ruby/object:Gem::Requirement
1417
1419
  requirements:
1418
1420
  - - ">="
@@ -1420,15 +1422,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
1420
1422
  version: 2.0.0
1421
1423
  required_rubygems_version: !ruby/object:Gem::Requirement
1422
1424
  requirements:
1423
- - - ">="
1425
+ - - ">"
1424
1426
  - !ruby/object:Gem::Version
1425
- version: '0'
1427
+ version: 1.3.1
1426
1428
  requirements: []
1427
1429
  rubyforge_project:
1428
- rubygems_version: 2.6.8
1430
+ rubygems_version: 2.4.5.2
1429
1431
  signing_key:
1430
1432
  specification_version: 4
1431
1433
  summary: The easiest way to automate beta deployments and releases for your iOS and
1432
1434
  Android apps
1433
1435
  test_files: []
1434
- has_rdoc: