fastlane 1.63.0 → 1.63.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a1d03886641cb6e37a2e1050678327f3ff8ffa4
4
- data.tar.gz: aabe7a99dcbb2568bab3c949ac944bdf192f9546
3
+ metadata.gz: f856d6f6af4e0bf885b9472d0b1d4a935cb74ea4
4
+ data.tar.gz: b578b4713ef937a906cb21eb8851776c0802c9f3
5
5
  SHA512:
6
- metadata.gz: c7163d0dda0c6c01f15a6a3007fc616b90cc9293df083d2c172fb0013057f92c36ff990b0429ec32daa5a7099ca9a61a7a8dc6ec2ca83766c7c578ba3d44a0f3
7
- data.tar.gz: 6ba39cddb16a1f3bcec3bcd9ee3feabc29f58e1a32ab2a94bbc72d0abcc7df40930869c2ee7ee5e620b5348565940532960e811c751575630aaff42a25608d27
6
+ metadata.gz: a7356c5fa16111d39248728fe1eac89b4bdad3a1b7647153e9eafd163b0fc8d6284661e454c89024aae2ea7a8d20996a95633b6acfe49bfcab0ba852ff233d1b
7
+ data.tar.gz: 1ab07e603d5a0d08b1fae7ba9d3fe77430850f009fc1ecc9e17586fa207ed910dd6391a22e84f4b522356f0db6a87f62dd871f07dd29445363cf299a8d6aed75
@@ -64,11 +64,17 @@ class FastlaneApplication
64
64
  command :lanes do |c|
65
65
  c.syntax = 'fastlane lanes'
66
66
  c.description = 'Lists all available lanes and shows their description'
67
+ c.option "-j", "--json", "Output the lanes in JSON instead of text"
67
68
 
68
69
  c.action do |args, options|
69
70
  require 'fastlane/lane_list'
70
71
  path = File.join(Fastlane::FastlaneFolder.path || '.', 'Fastfile')
71
- Fastlane::LaneList.output(path)
72
+
73
+ if options.json
74
+ Fastlane::LaneList.output_json(path)
75
+ else
76
+ Fastlane::LaneList.output(path)
77
+ end
72
78
  end
73
79
  end
74
80
 
@@ -4,12 +4,7 @@ module Fastlane
4
4
  def self.run(params)
5
5
  cmd = ["carthage"]
6
6
 
7
- if params[:update]
8
- cmd << "update"
9
- else
10
- cmd << "bootstrap"
11
- end
12
-
7
+ cmd << params[:command]
13
8
  cmd << "--use-ssh" if params[:use_ssh]
14
9
  cmd << "--use-submodules" if params[:use_submodules]
15
10
  cmd << "--no-use-binaries" if params[:use_binaries] == false
@@ -26,16 +21,13 @@ module Fastlane
26
21
 
27
22
  def self.available_options
28
23
  [
29
- FastlaneCore::ConfigItem.new(key: :update,
30
- env_name: "FL_CARTHAGE_UPDATE",
31
- description: "Update the the project's dependencies",
32
- is_string: false,
33
- optional: true,
34
- default_value: false,
24
+ FastlaneCore::ConfigItem.new(key: :command,
25
+ env_name: "FL_CARTHAGE_COMMAND",
26
+ description: "Carthage command (one of `build`, `bootstrap`, `update`)",
27
+ default_value: 'bootstrap',
35
28
  verify_block: proc do |value|
36
- raise "Please pass a valid value for update. Use one of the following: true, false" unless value.kind_of?(TrueClass) || value.kind_of?(FalseClass)
29
+ raise "Please pass a valid command. Use one of the following: build, bootstrap, update" unless %w(build bootstrap update).include? value
37
30
  end),
38
-
39
31
  FastlaneCore::ConfigItem.new(key: :use_ssh,
40
32
  env_name: "FL_CARTHAGE_USE_SSH",
41
33
  description: "Use SSH for downloading GitHub repositories",
@@ -91,7 +83,7 @@ module Fastlane
91
83
  end
92
84
 
93
85
  def self.authors
94
- ["bassrock", "petester42", "jschmid", "JaviSoto"]
86
+ ["bassrock", "petester42", "jschmid", "JaviSoto", "uny"]
95
87
  end
96
88
  end
97
89
  end
@@ -4,10 +4,19 @@ module Fastlane
4
4
  def self.run(params)
5
5
  require 'terminal-notifier'
6
6
 
7
- if params[:subtitle]
7
+ if params[:subtitle] && params[:sound]
8
8
  TerminalNotifier.notify(params[:message],
9
9
  title: params[:title],
10
- subtitle: params[:subtitle])
10
+ subtitle: params[:subtitle],
11
+ sound: params[:sound])
12
+ elsif params[:subtitle]
13
+ TerminalNotifier.notify(params[:message],
14
+ title: params[:title],
15
+ subtitle: params[:subtitle])
16
+ elsif params[:sound]
17
+ TerminalNotifier.notify(params[:message],
18
+ title: params[:title],
19
+ sound: params[:sound])
11
20
  else
12
21
  # It should look nice without a subtitle too
13
22
  TerminalNotifier.notify(params[:message],
@@ -20,7 +29,7 @@ module Fastlane
20
29
  end
21
30
 
22
31
  def self.author
23
- ["champo", "cbowns", "KrauseFx"]
32
+ ["champo", "cbowns", "KrauseFx", "amarcadet"]
24
33
  end
25
34
 
26
35
  def self.available_options
@@ -33,7 +42,10 @@ module Fastlane
33
42
  optional: true),
34
43
  FastlaneCore::ConfigItem.new(key: :message,
35
44
  description: "The message to display in the notification",
36
- optional: false)
45
+ optional: false),
46
+ FastlaneCore::ConfigItem.new(key: :sound,
47
+ description: "The name of a sound to play when the notification appears (names are listed in Sound Preferences)",
48
+ optional: true)
37
49
  ]
38
50
  end
39
51
 
@@ -0,0 +1,183 @@
1
+ require 'plist'
2
+ require 'terminal-table'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ module SharedValues
7
+ VERIFY_BUILD_CUSTOM_VALUE = :VERIFY_BUILD_CUSTOM_VALUE
8
+ end
9
+ class VerifyBuildAction < Action
10
+ def self.run(params)
11
+ Dir.mktmpdir do |dir|
12
+ app_path = self.app_path(dir)
13
+
14
+ values = self.gather_cert_info(app_path)
15
+
16
+ values = self.update_with_profile_info(app_path, values)
17
+
18
+ self.print_values(values)
19
+
20
+ self.evaulate(params, values)
21
+ end
22
+ end
23
+
24
+ def self.app_path(dir)
25
+ ipa_path = Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] || ''
26
+ raise "Unable to find ipa file '#{ipa_path}'." unless File.exist?(ipa_path)
27
+ ipa_path = File.expand_path(ipa_path)
28
+
29
+ `unzip '#{ipa_path}' -d #{dir}`
30
+ raise "Unable to unzip ipa".red unless $? == 0
31
+
32
+ app_path = File.expand_path("#{dir}/Payload/*.app")
33
+
34
+ app_path
35
+ end
36
+
37
+ def self.gather_cert_info(app_path)
38
+ cert_info = `codesign -vv -d #{app_path} 2>&1`
39
+ raise "Unable to verify code signing".red unless $? == 0
40
+
41
+ values = {}
42
+
43
+ parts = cert_info.strip.split(/\r?\n/)
44
+ parts.each do |part|
45
+ if part =~ /\AAuthority=i(Phone|OS)/
46
+ type = part.split('=')[1].split(':')[0]
47
+ values['provisioning_type'] = type.downcase =~ /distribution/i ? "distribution" : "development"
48
+ end
49
+ if part.start_with? "TeamIdentifier"
50
+ values['team_identifier'] = part.split('=')[1]
51
+ end
52
+ if part.start_with? "Identifier"
53
+ values['bundle_identifier'] = part.split('=')[1]
54
+ end
55
+ end
56
+
57
+ values
58
+ end
59
+
60
+ def self.update_with_profile_info(app_path, values)
61
+ profile = `cat #{app_path}/embedded.mobileprovision | security cms -D`
62
+ raise "Unable to extract profile".red unless $? == 0
63
+
64
+ plist = Plist.parse_xml(profile)
65
+
66
+ values['app_name'] = plist['AppIDName']
67
+ values['provisioning_uuid'] = plist['UUID']
68
+ values['team_name'] = plist['TeamName']
69
+
70
+ raise "Inconsistent identifier found" unless plist['Entitlements']['application-identifier'] == "#{values['team_identifier']}.#{values['bundle_identifier']}"
71
+ raise "Inconsistent identifier found" unless plist['Entitlements']['com.apple.developer.team-identifier'] == values['team_identifier']
72
+
73
+ values
74
+ end
75
+
76
+ def self.print_values(values)
77
+ table = Terminal::Table.new do |t|
78
+ t.title = 'Summary for VERIFY_BUILD'.green
79
+ t.headings = 'Key', 'Value'
80
+ values.each do |key, value|
81
+ columns = []
82
+ columns << key
83
+ columns << case value
84
+ when Hash
85
+ value.map {|k, v| "#{k}: #{v}"}.join("\n")
86
+ when Array
87
+ value.join("\n")
88
+ else
89
+ value.to_s
90
+ end
91
+
92
+ t << columns
93
+ end
94
+ end
95
+
96
+ puts ""
97
+ puts table
98
+ puts ""
99
+ end
100
+
101
+ def self.evaulate(params, values)
102
+ if params[:provisioning_type]
103
+ raise "Mismatched provisioning_type '#{params[:provisioning_type]}'".red unless params[:provisioning_type] == values['provisioning_type']
104
+ end
105
+ if params[:provisioning_uuid]
106
+ raise "Mismatched provisioning_uuid '#{params[:provisioning_uuid]}'".red unless params[:provisioning_uuid] == values['provisioning_uuid']
107
+ end
108
+ if params[:team_identifier]
109
+ raise "Mismatched team_identifier '#{params[:team_identifier]}'".red unless params[:team_identifier] == values['team_identifier']
110
+ end
111
+ if params[:team_name]
112
+ raise "Mismatched team_name '#{params[:team_name]}'".red unless params[:team_name] == values['team_name']
113
+ end
114
+ if params[:app_name]
115
+ raise "Mismatched app_name '#{params[:app_name]}'".red unless params[:app_name] == values['app_name']
116
+ end
117
+ if params[:bundle_identifier]
118
+ raise "Mismatched bundle_identifier '#{params[:bundle_identifier]}'".red unless params[:bundle_identifier] == values['bundle_identifier']
119
+ end
120
+
121
+ UI.success "Build is verified, have a 🍪."
122
+ end
123
+
124
+ #####################################################
125
+ # @!group Documentation
126
+ #####################################################
127
+
128
+ def self.description
129
+ "Able to verify various settings in ipa file"
130
+ end
131
+
132
+ def self.details
133
+ end
134
+
135
+ def self.available_options
136
+ [
137
+ FastlaneCore::ConfigItem.new(key: :provisioning_type,
138
+ env_name: "FL_VERIFY_BUILD_PROVISIONING_TYPE",
139
+ description: "Required type of provisioning",
140
+ optional: true,
141
+ verify_block: proc do |value|
142
+ av = %w(distribution development)
143
+ raise "Unsupported provisioning_type, must be: #{av}" unless av.include?(value)
144
+ end),
145
+ FastlaneCore::ConfigItem.new(key: :provisioning_uuid,
146
+ env_name: "FL_VERIFY_BUILD_PROVISIONING_UUID",
147
+ description: "Required UUID of provisioning profile",
148
+ optional: true),
149
+ FastlaneCore::ConfigItem.new(key: :team_identifier,
150
+ env_name: "FL_VERIFY_BUILD_TEAM_IDENTIFIER",
151
+ description: "Required team identifier",
152
+ optional: true),
153
+ FastlaneCore::ConfigItem.new(key: :team_name,
154
+ env_name: "FL_VERIFY_BUILD_TEAM_NAME",
155
+ description: "Required team name",
156
+ optional: true),
157
+ FastlaneCore::ConfigItem.new(key: :app_name,
158
+ env_name: "FL_VERIFY_BUILD_APP_NAME",
159
+ description: "Required app name",
160
+ optional: true),
161
+ FastlaneCore::ConfigItem.new(key: :bundle_identifier,
162
+ env_name: "FL_VERIFY_BUILD_BUNDLE_IDENTIFIER",
163
+ description: "Required bundle identifier",
164
+ optional: true)
165
+ ]
166
+ end
167
+
168
+ def self.output
169
+ end
170
+
171
+ def self.return_value
172
+ end
173
+
174
+ def self.authors
175
+ ["CodeReaper"]
176
+ end
177
+
178
+ def self.is_supported?(platform)
179
+ platform == :ios
180
+ end
181
+ end
182
+ end
183
+ end
@@ -38,5 +38,36 @@ module Fastlane
38
38
 
39
39
  output
40
40
  end
41
+
42
+ def self.output_json(path)
43
+ puts JSON.pretty_generate(self.generate_json(path))
44
+ end
45
+
46
+ # Returns a hash
47
+ def self.generate_json(path)
48
+ ff = Fastlane::FastFile.new(path)
49
+ output = {}
50
+
51
+ all_keys = ff.runner.lanes.keys
52
+
53
+ all_keys.each do |platform|
54
+ next if (ff.runner.lanes[platform] || []).count == 0
55
+
56
+ output[platform] ||= {}
57
+
58
+ value = ff.runner.lanes[platform]
59
+ next unless value
60
+
61
+ value.each do |lane_name, lane|
62
+ next if lane.is_private
63
+
64
+ output[platform][lane_name] = {
65
+ description: lane.description.join("\n")
66
+ }
67
+ end
68
+ end
69
+
70
+ return output
71
+ end
41
72
  end
42
73
  end
@@ -1,3 +1,3 @@
1
1
  module Fastlane
2
- VERSION = '1.63.0'
2
+ VERSION = '1.63.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.63.0
4
+ version: 1.63.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-23 00:00:00.000000000 Z
11
+ date: 2016-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: krausefx-shenzhen
@@ -134,7 +134,7 @@ dependencies:
134
134
  requirements:
135
135
  - - ">="
136
136
  - !ruby/object:Gem::Version
137
- version: 0.36.5
137
+ version: 0.36.8
138
138
  - - "<"
139
139
  - !ruby/object:Gem::Version
140
140
  version: 1.0.0
@@ -144,7 +144,7 @@ dependencies:
144
144
  requirements:
145
145
  - - ">="
146
146
  - !ruby/object:Gem::Version
147
- version: 0.36.5
147
+ version: 0.36.8
148
148
  - - "<"
149
149
  - !ruby/object:Gem::Version
150
150
  version: 1.0.0
@@ -434,7 +434,7 @@ dependencies:
434
434
  requirements:
435
435
  - - ">="
436
436
  - !ruby/object:Gem::Version
437
- version: 0.2.0
437
+ version: 0.2.1
438
438
  - - "<"
439
439
  - !ruby/object:Gem::Version
440
440
  version: 1.0.0
@@ -444,7 +444,7 @@ dependencies:
444
444
  requirements:
445
445
  - - ">="
446
446
  - !ruby/object:Gem::Version
447
- version: 0.2.0
447
+ version: 0.2.1
448
448
  - - "<"
449
449
  - !ruby/object:Gem::Version
450
450
  version: 1.0.0
@@ -768,6 +768,7 @@ files:
768
768
  - lib/fastlane/actions/update_project_provisioning.rb
769
769
  - lib/fastlane/actions/update_project_team.rb
770
770
  - lib/fastlane/actions/update_url_schemes.rb
771
+ - lib/fastlane/actions/verify_build.rb
771
772
  - lib/fastlane/actions/verify_pod_keys.rb
772
773
  - lib/fastlane/actions/verify_xcode.rb
773
774
  - lib/fastlane/actions/version_bump_podspec.rb
@@ -827,7 +828,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
827
828
  version: '0'
828
829
  requirements: []
829
830
  rubyforge_project:
830
- rubygems_version: 2.5.0
831
+ rubygems_version: 2.4.6
831
832
  signing_key:
832
833
  specification_version: 4
833
834
  summary: Connect all iOS deployment tools into one streamlined workflow