fastlane 1.63.0 → 1.63.1

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: 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