fastlane 1.22.0 → 1.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: 3b371a243c7eae82d8928efe3bea6048e2bbe4cf
4
- data.tar.gz: fa37ffd24ef06b8e43f8aed3fdda332abc06ebd8
3
+ metadata.gz: b7608ced8bfaed95233e80f4b2cf0b63975b4008
4
+ data.tar.gz: 85ec46cf81d5e1a798fa8c13235333c4040c6f06
5
5
  SHA512:
6
- metadata.gz: 28eb77c6a561331d21ef65fd7c6f612dd24b672f941f168f227eb0d9515fd8b23376b9248055d01f5d79492e2fedf1d83ab7e053a20c505edc71f30c5d9089f0
7
- data.tar.gz: 8cbe27bcded9f352f76a8387d87c9ac855047cd2dc12f7da6d1a27cfe5870114af38b4ba99bed0eace57f4b9c1f8740fe635c0d02f591a188b5d9d45add4ea2b
6
+ metadata.gz: bb918cafe6693b5aba673501fa4456be45de476c41117097e4e85a5e87970ad9605ebb5358221c75489e21c95389a7d40e7c24846a84ff629d9b6f2170c31ea6
7
+ data.tar.gz: ae8d2285d2c95ac17cd32b461027a2db24e8f2c287d5cf95b315db85857356d4f2fa9fe7d058a6eddb5a0f9a8c452c68ecfe8c66356542744a2380c4c96552e1
data/bin/fastlane CHANGED
@@ -103,9 +103,11 @@ class FastlaneApplication
103
103
  c.syntax = 'fastlane actions'
104
104
  c.description = 'Lists all available fastlane actions'
105
105
 
106
+ c.option '--platform STRING', String, 'Only show actions available on the given platform'
107
+
106
108
  c.action do |args, options|
107
109
  require 'fastlane/actions_list'
108
- Fastlane::ActionsList.run(args.first)
110
+ Fastlane::ActionsList.run(filter: args.first, platform: options.platform)
109
111
  end
110
112
  end
111
113
 
@@ -114,7 +116,7 @@ class FastlaneApplication
114
116
  c.description = 'Shows more information for a specific command'
115
117
  c.action do |args, options|
116
118
  require 'fastlane/actions_list'
117
- Fastlane::ActionsList.run(args.first)
119
+ Fastlane::ActionsList.run(filter: args.first)
118
120
  end
119
121
  end
120
122
 
@@ -0,0 +1,114 @@
1
+ module Fastlane
2
+ module Actions
3
+ class ArtifactoryAction < Action
4
+ def self.run(params)
5
+ require 'artifactory'
6
+ file_path = File.absolute_path(params[:file])
7
+ if File.exist? file_path
8
+ client = connect_to_artifactory(params)
9
+ artifact = Artifactory::Resource::Artifact.new
10
+ artifact.client = client
11
+ artifact.local_path = file_path
12
+ artifact.checksums = {
13
+ "sha1" => Digest::SHA1.file(file_path),
14
+ "md5" => Digest::MD5.file(file_path)
15
+ }
16
+ Helper.log.info "Uploading file: #{artifact.local_path} ..."
17
+ upload = artifact.upload(params[:repo], params[:repo_path], params[:properties])
18
+ Helper.log.info "Uploaded Artifact:"
19
+ Helper.log.info "Repo: #{upload.repo}"
20
+ Helper.log.info "URI: #{upload.uri}"
21
+ Helper.log.info "Size: #{upload.size}"
22
+ Helper.log.info "SHA1: #{upload.sha1}"
23
+ else
24
+ Helper.log.info "File not found: '#{file_path}'"
25
+ end
26
+ end
27
+
28
+ def self.connect_to_artifactory(params)
29
+ keys = [:endpoint, :username, :password, :ssl_pem_file, :ssl_verify, :proxy_username, :proxy_password, :proxy_address, :proxy_port]
30
+ keys.each do |key|
31
+ config[key] = params[key] if params[key]
32
+ end
33
+ Artifactory::Client.new(config)
34
+ end
35
+
36
+ def self.description
37
+ 'This action uploads an artifact to artifactory'
38
+ end
39
+
40
+ def self.is_supported?(platform)
41
+ true
42
+ end
43
+
44
+ def self.author
45
+ ["koglinjg"]
46
+ end
47
+
48
+ def self.available_options
49
+ [
50
+ FastlaneCore::ConfigItem.new(key: :file,
51
+ env_name: "FL_ARTIFACTORY_FILE",
52
+ description: "File to be uploaded to artifactory",
53
+ optional: false),
54
+ FastlaneCore::ConfigItem.new(key: :repo,
55
+ env_name: "FL_ARTIFACTORY_REPO",
56
+ description: "Artifactory repo to put the file in",
57
+ optional: false),
58
+ FastlaneCore::ConfigItem.new(key: :repo_path,
59
+ env_name: "FL_ARTIFACTORY_REPO_PATH",
60
+ description: "Path to deploy within the repo, including filename",
61
+ optional: false),
62
+ FastlaneCore::ConfigItem.new(key: :endpoint,
63
+ env_name: "FL_ARTIFACTORY_ENDPOINT",
64
+ description: "Artifactory endpoint",
65
+ optional: false),
66
+ FastlaneCore::ConfigItem.new(key: :username,
67
+ env_name: "FL_ARTIFACTORY_USERNAME",
68
+ description: "Artifactory username",
69
+ optional: false),
70
+ FastlaneCore::ConfigItem.new(key: :password,
71
+ env_name: "FL_ARTIFACTORY_PASSWORD",
72
+ description: "Artifactory password",
73
+ optional: false),
74
+ FastlaneCore::ConfigItem.new(key: :properties,
75
+ env_name: "FL_ARTIFACTORY_PROPERTIES",
76
+ description: "Artifact properties hash",
77
+ is_string: false,
78
+ default_value: {},
79
+ optional: true),
80
+ FastlaneCore::ConfigItem.new(key: :ssl_pem_file,
81
+ env_name: "FL_ARTIFACTORY_SSL_PEM_FILE",
82
+ description: "Location of pem file to use for ssl verification",
83
+ default_value: nil,
84
+ optional: true),
85
+ FastlaneCore::ConfigItem.new(key: :ssl_verify,
86
+ env_name: "FL_ARTIFACTORY_SSL_VERIFY",
87
+ description: "Verify SSL",
88
+ default_value: true,
89
+ optional: true),
90
+ FastlaneCore::ConfigItem.new(key: :proxy_username,
91
+ env_name: "FL_ARTIFACTORY_PROXY_USERNAME",
92
+ description: "Proxy username",
93
+ default_value: nil,
94
+ optional: true),
95
+ FastlaneCore::ConfigItem.new(key: :proxy_password,
96
+ env_name: "FL_ARTIFACTORY_PROXY_PASSWORD",
97
+ description: "Proxy password",
98
+ default_value: nil,
99
+ optional: true),
100
+ FastlaneCore::ConfigItem.new(key: :proxy_address,
101
+ env_name: "FL_ARTIFACTORY_PROXY_ADDRESS",
102
+ description: "Proxy address",
103
+ default_value: nil,
104
+ optional: true),
105
+ FastlaneCore::ConfigItem.new(key: :proxy_port,
106
+ env_name: "FL_ARTIFACTORY_PROXY_PORT",
107
+ description: "Proxy port",
108
+ default_value: nil,
109
+ optional: true)
110
+ ]
111
+ end
112
+ end
113
+ end
114
+ end
@@ -7,10 +7,11 @@ module Fastlane
7
7
  class EnsureGitBranchAction < Action
8
8
  def self.run(params)
9
9
  branch = params[:branch]
10
- if Actions.git_branch != branch
11
- raise "Git is not on the `#{branch}` branch, but on `#{Actions.git_branch}`! Please ensure the repo is checked out to the correct branch.".red
10
+ branch_expr = /#{branch}/
11
+ if Actions.git_branch =~ branch_expr
12
+ Helper.log.info "Git branch match `#{branch}`, all good! 💪".green
12
13
  else
13
- Helper.log.info "Git branch is `#{branch}`, all good! 💪".green
14
+ raise "Git is not on a branch matching `#{branch}`. Current branch is `#{Actions.git_branch}`! Please ensure the repo is checked out to the correct branch.".red
14
15
  end
15
16
  end
16
17
 
@@ -26,7 +27,7 @@ module Fastlane
26
27
  [
27
28
  FastlaneCore::ConfigItem.new(key: :branch,
28
29
  env_name: "FL_ENSURE_GIT_BRANCH_NAME",
29
- description: "The branch that should be checked for",
30
+ description: "The branch that should be checked for. String that can be either the full name of the branch or a regex to match",
30
31
  is_string: true,
31
32
  default_value: 'master')
32
33
  ]
@@ -37,7 +38,7 @@ module Fastlane
37
38
  end
38
39
 
39
40
  def self.author
40
- 'dbachrach'
41
+ ['dbachrach', 'Liquidsoul']
41
42
  end
42
43
 
43
44
  def self.is_supported?(platform)
@@ -0,0 +1,64 @@
1
+ module Fastlane
2
+ module Actions
3
+ module SharedValues
4
+ READ_PODSPEC_JSON = :READ_PODSPEC_JSON
5
+ end
6
+
7
+ class ReadPodspecAction < Action
8
+ def self.run(params)
9
+ path = params[:path]
10
+
11
+ # will fail if cocoapods is not installed
12
+ require 'cocoapods-core'
13
+ spec = Pod::Spec.from_file(path).to_hash
14
+
15
+ Helper.log.info "Reading podspec from file #{path}".green
16
+
17
+ Actions.lane_context[SharedValues::READ_PODSPEC_JSON] = spec
18
+ return spec
19
+ end
20
+
21
+ #####################################################
22
+ # @!group Documentation
23
+ #####################################################
24
+
25
+ def self.description
26
+ "Loads a CocoaPods spec as JSON"
27
+ end
28
+
29
+ def self.details
30
+ [
31
+ "This can be used for only specifying a version string in your podspec",
32
+ "- and during your release process you'd read it from the podspec by running",
33
+ "`version = read_podspec['version']` at the beginning of your lane"
34
+ ].join("\n")
35
+ end
36
+
37
+ def self.available_options
38
+ [
39
+ FastlaneCore::ConfigItem.new(key: :path,
40
+ env_name: "FL_READ_PODSPEC_PATH",
41
+ description: "Path to the podspec to be read",
42
+ default_value: Dir['*.podspec*'].first,
43
+ verify_block: proc do |value|
44
+ raise "File #{value} not found".red unless File.exist?(value)
45
+ end)
46
+ ]
47
+ end
48
+
49
+ def self.output
50
+ [
51
+ ['READ_PODSPEC_JSON', 'Podspec JSON payload']
52
+ ]
53
+ end
54
+
55
+ def self.authors
56
+ ["czechboy0"]
57
+ end
58
+
59
+ def self.is_supported?(platform)
60
+ true
61
+ end
62
+ end
63
+ end
64
+ end
@@ -1,3 +1,5 @@
1
+ # rubocop:disable Metrics/AbcSize
2
+
1
3
  module Fastlane
2
4
  module Actions
3
5
  module SharedValues
@@ -9,6 +11,7 @@ module Fastlane
9
11
  class SetGithubReleaseAction < Action
10
12
  def self.run(params)
11
13
  Helper.log.info "Creating release of #{params[:repository_name]} on tag \"#{params[:tag_name]}\" with name \"#{params[:name]}\".".yellow
14
+ Helper.log.info "Will also upload assets #{params[:upload_assets]}.".yellow if params[:upload_assets]
12
15
 
13
16
  require 'json'
14
17
  body = {
@@ -20,14 +23,11 @@ module Fastlane
20
23
  'prerelease' => params[:is_prerelease]
21
24
  }.to_json
22
25
 
23
- require 'excon'
24
- require 'base64'
25
- headers = { 'User-Agent' => 'fastlane-set_github_release' }
26
- headers['Authorization'] = "Basic #{Base64.strict_encode64(params[:api_token])}" if params[:api_token]
27
- response = Excon.post("https://api.github.com/repos/#{params[:repository_name]}/releases",
28
- headers: headers,
29
- body: body
30
- )
26
+ repo_name = params[:repository_name]
27
+ api_token = params[:api_token]
28
+
29
+ # create the release
30
+ response = call_releases_endpoint("post", repo_name, "/releases", api_token, body)
31
31
 
32
32
  case response[:status]
33
33
  when 201
@@ -39,7 +39,27 @@ module Fastlane
39
39
  Actions.lane_context[SharedValues::SET_GITHUB_RELEASE_HTML_LINK] = html_url
40
40
  Actions.lane_context[SharedValues::SET_GITHUB_RELEASE_RELEASE_ID] = release_id
41
41
  Actions.lane_context[SharedValues::SET_GITHUB_RELEASE_JSON] = body
42
- return body
42
+
43
+ assets = params[:upload_assets]
44
+ if assets && assets.count > 0
45
+
46
+ # upload assets
47
+ self.upload_assets(assets, body['upload_url'], api_token)
48
+
49
+ # fetch the release again, so that it contains the uploaded assets
50
+ get_response = self.call_releases_endpoint("get", repo_name, "/releases/#{release_id}", api_token, nil)
51
+ if get_response[:status] != 200
52
+ Helper.log.error "GitHub responded with #{response[:status]}:#{response[:body]}".red
53
+ raise "Failed to fetch the newly created release, but it *has been created* successfully.".red
54
+ end
55
+
56
+ get_body = JSON.parse(get_response.body)
57
+ Actions.lane_context[SharedValues::SET_GITHUB_RELEASE_JSON] = get_body
58
+ Helper.log.info "Successfully uploaded assets #{assets} to release \"#{html_url}\"".green
59
+ return get_body
60
+ else
61
+ return body
62
+ end
43
63
  when 422
44
64
  Helper.log.error "Release on tag #{params[:tag_name]} already exists!".red
45
65
  when 404
@@ -54,12 +74,86 @@ module Fastlane
54
74
  return nil
55
75
  end
56
76
 
77
+ def self.upload_assets(assets, upload_url_template, api_token)
78
+ assets.each do |asset|
79
+ self.upload(asset, upload_url_template, api_token)
80
+ end
81
+ end
82
+
83
+ def self.upload(asset_path, upload_url_template, api_token)
84
+ # if it's a directory, zip it first in a temp directory, because we can only upload binary files
85
+ absolute_path = File.absolute_path(asset_path)
86
+
87
+ # check that the asset even exists
88
+ raise "Asset #{absolute_path} doesn't exist" unless File.exist?(absolute_path)
89
+
90
+ name = File.basename(absolute_path)
91
+ response = nil
92
+ if File.directory?(absolute_path)
93
+ Dir.mktmpdir do |dir|
94
+ tmpzip = File.join(dir, File.basename(absolute_path) + '.zip')
95
+ name = File.basename(tmpzip)
96
+ sh "cd \"#{File.dirname(absolute_path)}\"; zip -r \"#{tmpzip}\" \"#{File.basename(absolute_path)}\" 2>&1 >/dev/null"
97
+ response = self.upload_file(tmpzip, upload_url_template, api_token)
98
+ end
99
+ else
100
+ response = self.upload_file(absolute_path, upload_url_template, api_token)
101
+ end
102
+ return response
103
+ end
104
+
105
+ def self.upload_file(file, url_template, api_token)
106
+ require 'addressable/template'
107
+ name = File.basename(file)
108
+ expanded_url = Addressable::Template.new(url_template).expand(name: name).to_s
109
+ headers = self.headers(api_token)
110
+ headers['Content-Type'] = 'application/zip' # how do we detect other types e.g. other binary files? file extensions?
111
+
112
+ Helper.log.info "Uploading #{name}".yellow
113
+ response = self.call_endpoint(expanded_url, "post", headers, File.read(file))
114
+
115
+ # inspect the response
116
+ case response.status
117
+ when 201
118
+ # all good in the hood
119
+ Helper.log.info "Successfully uploaded #{name}.".green
120
+ else
121
+ Helper.log.error "GitHub responded with #{response[:status]}:#{response[:body]}".red
122
+ raise "Failed to upload asset #{name} to GitHub."
123
+ end
124
+ end
125
+
126
+ def self.call_endpoint(url, method, headers, body)
127
+ require 'excon'
128
+ case method
129
+ when "post"
130
+ response = Excon.post(url, headers: headers, body: body)
131
+ when "get"
132
+ response = Excon.get(url, headers: headers, body: body)
133
+ else
134
+ raise "Unsupported method #{method}"
135
+ end
136
+ return response
137
+ end
138
+
139
+ def self.call_releases_endpoint(method, repo, endpoint, api_token, body)
140
+ url = "https://api.github.com/repos/#{repo}#{endpoint}"
141
+ self.call_endpoint(url, method, self.headers(api_token), body)
142
+ end
143
+
144
+ def self.headers(api_token)
145
+ require 'base64'
146
+ headers = { 'User-Agent' => 'fastlane-set_github_release' }
147
+ headers['Authorization'] = "Basic #{Base64.strict_encode64(api_token)}" if api_token
148
+ headers
149
+ end
150
+
57
151
  #####################################################
58
152
  # @!group Documentation
59
153
  #####################################################
60
154
 
61
155
  def self.description
62
- "This will create a new release on GitHub from given metadata"
156
+ "This will create a new release on GitHub and upload assets for it"
63
157
  end
64
158
 
65
159
  def self.details
@@ -67,7 +161,7 @@ module Fastlane
67
161
  (get one from https://github.com/settings/tokens/new), the repository name
68
162
  and tag name. If the tag doesn't exist, one will be created on the commit or branch passed-in as
69
163
  commitish. Out parameters provide the release's id, which can be used for later editing and the
70
- release html link to GitHub."
164
+ release html link to GitHub. You can also specify a list of assets to be uploaded to the release with the upload_assets parameter."
71
165
  end
72
166
 
73
167
  def self.available_options
@@ -115,7 +209,15 @@ module Fastlane
115
209
  description: "Whether the release should be marked as prerelease",
116
210
  optional: true,
117
211
  default_value: false,
118
- is_string: false)
212
+ is_string: false),
213
+ FastlaneCore::ConfigItem.new(key: :upload_assets,
214
+ env_name: "FL_SET_GITHUB_RELEASE_UPLOAD_ASSETS",
215
+ description: "Path to assets to be uploaded with the release",
216
+ optional: true,
217
+ is_string: false,
218
+ verify_block: proc do |value|
219
+ raise "upload_assets must be an Array of paths to assets" unless value.kind_of? Array
220
+ end)
119
221
  ]
120
222
  end
121
223
 
@@ -0,0 +1,146 @@
1
+ module Fastlane
2
+ module Actions
3
+ module SharedValues
4
+ SLATHER_CUSTOM_VALUE = :SLATHER_CUSTOM_VALUE
5
+ end
6
+
7
+ class SlatherAction < Action
8
+ def self.run(params)
9
+ command = "slather coverage "
10
+ command += " --build-directory #{params[:build_directory]}"
11
+ command += " --input-format #{params[:input_format]}" if params[:input_format]
12
+ command += " --scheme #{params[:scheme]}" if params[:scheme]
13
+ command += " --buildkite" if params[:buildkite]
14
+ command += " --jenkins" if params[:jenkins]
15
+ command += " --travis" if params[:travis]
16
+ command += " --circleci" if params[:circleci]
17
+ command += " --coveralls" if params[:coveralls]
18
+ command += " --simple-output" if params[:simple_output]
19
+ command += " --gutter-json" if params[:gutter_json]
20
+ command += " --cobertura-xml" if params[:cobertura_xml]
21
+ command += " --html" if params[:html]
22
+ command += " --show" if params[:show]
23
+ command += " --source-directory #{params[:source_directory]}" if params[:source_directory]
24
+ command += " --output-directory #{params[:output_directory]}" if params[:output_directory]
25
+ command += " --ignore #{params[:ignore]}" if params[:ignore]
26
+ command += " #{params[:proj]}"
27
+ sh command
28
+ end
29
+
30
+ #####################################################
31
+ # @!group Documentation
32
+ #####################################################
33
+
34
+ def self.description
35
+ "Use slather to generate a code coverage report"
36
+ end
37
+
38
+ def self.details
39
+ return <<-eos
40
+ Slather works with multiple code coverage formats including Xcode7 code coverage.
41
+ Slather is available at https://github.com/venmo/slather
42
+ eos
43
+ end
44
+
45
+ def self.available_options
46
+ [
47
+ FastlaneCore::ConfigItem.new(key: :build_directory,
48
+ env_name: "FL_SLATHER_BUILD_DIRECTORY", # The name of the environment variable
49
+ description: "The location of the build output", # a short description of this parameter
50
+ verify_block: proc do |value|
51
+ raise "No Build Directory specified, pass using `build_directory: 'location/of/your/build/output'`".red unless value and !value.empty?
52
+ end),
53
+ FastlaneCore::ConfigItem.new(key: :proj,
54
+ env_name: "FL_SLATHER_PROJ", # The name of the environment variable
55
+ description: "The project file that slather looks at", # a short description of this parameter
56
+ verify_block: proc do |value|
57
+ raise "No project file specified, pass using `proj: 'Project.xcodeproj'`".red unless value and !value.empty?
58
+ end),
59
+ FastlaneCore::ConfigItem.new(key: :scheme,
60
+ env_name: "FL_SLATHER_SCHEME", # The name of the environment variable
61
+ description: "Scheme to use when calling slather"
62
+ ),
63
+ FastlaneCore::ConfigItem.new(key: :input_format,
64
+ env_name: "FL_SLATHER_INPUT_FORMAT", # The name of the environment variable
65
+ description: "The input format that slather should look for"
66
+ ),
67
+ FastlaneCore::ConfigItem.new(key: :buildkite,
68
+ env_name: "FL_SLATHER_BUILDKITE_ENABLED", # The name of the environment variable
69
+ description: "Tell slather that it is running on Buildkite",
70
+ is_string: false,
71
+ optional: true),
72
+ FastlaneCore::ConfigItem.new(key: :jenkins,
73
+ env_name: "FL_SLATHER_JENKINS_ENABLED", # The name of the environment variable
74
+ description: "Tell slather that it is running on Jenkins",
75
+ is_string: false,
76
+ optional: true),
77
+ FastlaneCore::ConfigItem.new(key: :travis,
78
+ env_name: "FL_SLATHER_TRAVIS_ENABLED", # The name of the environment variable
79
+ description: "Tell slather that it is running on TravisCI",
80
+ is_string: false,
81
+ optional: true),
82
+ FastlaneCore::ConfigItem.new(key: :circleci,
83
+ env_name: "FL_SLATHER_CIRCLECI_ENABLED",
84
+ description: "Tell slather that it is running on CircleCI",
85
+ is_string: false,
86
+ optional: true),
87
+ FastlaneCore::ConfigItem.new(key: :coveralls,
88
+ env_name: "FL_SLATHER_COVERALLS_ENABLED",
89
+ description: "Tell slather that it should post data to Coveralls",
90
+ is_string: false,
91
+ optional: true),
92
+ FastlaneCore::ConfigItem.new(key: :simple_output,
93
+ env_name: "FL_SLATHER_SIMPLE_OUTPUT_ENABLED",
94
+ description: "Tell slather that it should output results to the terminal",
95
+ is_string: false,
96
+ optional: true),
97
+ FastlaneCore::ConfigItem.new(key: :gutter_json,
98
+ env_name: "FL_SLATHER_GUTTER_JSON_ENABLED",
99
+ description: "Tell slather that it should output results as Gutter JSON format",
100
+ is_string: false,
101
+ optional: true),
102
+ FastlaneCore::ConfigItem.new(key: :cobertura_xml,
103
+ env_name: "FL_SLATHER_COBERTURA_XML_ENABLED",
104
+ description: "Tell slather that it should output results as Cobertura XML format",
105
+ is_string: false,
106
+ optional: true),
107
+ FastlaneCore::ConfigItem.new(key: :html,
108
+ env_name: "FL_SLATHER_HTML_ENABLED",
109
+ description: "Tell slather that it should output results as static HTML pages",
110
+ is_string: false,
111
+ optional: true),
112
+ FastlaneCore::ConfigItem.new(key: :show,
113
+ env_name: "FL_SLATHER_SHOW_ENABLED",
114
+ description: "Tell slather that it should oupen static html pages automatically",
115
+ is_string: false,
116
+ default_value: false),
117
+ FastlaneCore::ConfigItem.new(key: :source_directory,
118
+ env_name: "FL_SLATHER_SOURCE_DIRECTORY",
119
+ description: "Tell slather the location of your source files",
120
+ optional: true),
121
+ FastlaneCore::ConfigItem.new(key: :output_directory,
122
+ env_name: "FL_SLATHER_OUTPUT_DIRECTORY",
123
+ description: "Tell slather the location of for your output files",
124
+ optional: true),
125
+ FastlaneCore::ConfigItem.new(key: :ignore,
126
+ env_name: "FL_SLATHER_IGNORE",
127
+ description: "Tell slather to ignore files matching a path",
128
+ optional: true)
129
+ ]
130
+ end
131
+
132
+ def self.output
133
+ # Define the shared values you are going to provide
134
+ end
135
+
136
+ def self.authors
137
+ # So no one will ever forget your contribution to fastlane :) You are awesome btw!
138
+ ["mattdelves"]
139
+ end
140
+
141
+ def self.is_supported?(platform)
142
+ [:ios, :mac].include? platform
143
+ end
144
+ end
145
+ end
146
+ end
@@ -290,7 +290,7 @@ module Fastlane
290
290
  end
291
291
 
292
292
  def self.description
293
- "Builds the project using `xcodebuild`"
293
+ "Archives the project using `xcodebuild`"
294
294
  end
295
295
 
296
296
  def self.author
@@ -351,7 +351,7 @@ module Fastlane
351
351
  end
352
352
 
353
353
  def self.description
354
- "Builds the project using `xcodebuild`"
354
+ "Cleans the project using `xcodebuild`"
355
355
  end
356
356
 
357
357
  def self.author
@@ -382,7 +382,7 @@ module Fastlane
382
382
  end
383
383
 
384
384
  def self.description
385
- "Builds the project using `xcodebuild`"
385
+ "Exports the project using `xcodebuild`"
386
386
  end
387
387
 
388
388
  def self.author
@@ -1,17 +1,17 @@
1
1
  module Fastlane
2
2
  class ActionsList
3
- def self.run(filter)
3
+ def self.run(filter: nil, platform: nil)
4
4
  require 'terminal-table'
5
5
  if filter
6
- show_details(filter)
6
+ show_details(filter: filter)
7
7
  else
8
- print_all
8
+ print_all(platform: platform)
9
9
  end
10
10
  end
11
11
 
12
- def self.print_all
12
+ def self.print_all(platform: nil)
13
13
  rows = []
14
- all_actions do |action, name|
14
+ all_actions(platform) do |action, name|
15
15
  current = []
16
16
  current << name.yellow
17
17
 
@@ -34,12 +34,13 @@ module Fastlane
34
34
  rows: rows
35
35
  )
36
36
  puts table
37
+ puts " Platform filter: #{platform}".magenta if platform
37
38
  puts " Total of #{rows.count} actions"
38
39
 
39
40
  puts "\nGet more information for one specific action using `fastlane action [name]`\n".green
40
41
  end
41
42
 
42
- def self.show_details(filter)
43
+ def self.show_details(filter: nil)
43
44
  puts "Loading documentation for #{filter}:".green
44
45
 
45
46
  puts ""
@@ -102,10 +103,13 @@ module Fastlane
102
103
  end
103
104
 
104
105
  # Iterates through all available actions and yields from there
105
- def self.all_actions
106
+ def self.all_actions(platform = nil)
106
107
  all_actions = Fastlane::Actions.constants.select {|c| Fastlane::Actions.const_get(c).kind_of? Class }
107
108
  all_actions.sort.each do |symbol|
108
109
  action = Fastlane::Actions.const_get(symbol)
110
+
111
+ next if platform && !action.is_supported?(platform.to_sym)
112
+
109
113
  name = symbol.to_s.gsub('Action', '').fastlane_underscore
110
114
  yield action, name
111
115
  end
@@ -1,3 +1,3 @@
1
1
  module Fastlane
2
- VERSION = '1.22.0'
2
+ VERSION = '1.23.0'
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.22.0
4
+ version: 1.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-08-29 00:00:00.000000000 Z
11
+ date: 2015-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -164,13 +164,55 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: 3.1.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: addressable
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 2.3.8
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 2.3.8
181
+ - !ruby/object:Gem::Dependency
182
+ name: artifactory
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '2.0'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '2.0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: slather
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '1.8'
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '1.8'
167
209
  - !ruby/object:Gem::Dependency
168
210
  name: fastlane_core
169
211
  requirement: !ruby/object:Gem::Requirement
170
212
  requirements:
171
213
  - - ">="
172
214
  - !ruby/object:Gem::Version
173
- version: 0.15.0
215
+ version: 0.15.3
174
216
  - - "<"
175
217
  - !ruby/object:Gem::Version
176
218
  version: 1.0.0
@@ -180,7 +222,7 @@ dependencies:
180
222
  requirements:
181
223
  - - ">="
182
224
  - !ruby/object:Gem::Version
183
- version: 0.15.0
225
+ version: 0.15.3
184
226
  - - "<"
185
227
  - !ruby/object:Gem::Version
186
228
  version: 1.0.0
@@ -230,7 +272,7 @@ dependencies:
230
272
  requirements:
231
273
  - - ">="
232
274
  - !ruby/object:Gem::Version
233
- version: 0.13.2
275
+ version: 0.13.4
234
276
  - - "<"
235
277
  - !ruby/object:Gem::Version
236
278
  version: 1.0.0
@@ -240,7 +282,7 @@ dependencies:
240
282
  requirements:
241
283
  - - ">="
242
284
  - !ruby/object:Gem::Version
243
- version: 0.13.2
285
+ version: 0.13.4
244
286
  - - "<"
245
287
  - !ruby/object:Gem::Version
246
288
  version: 1.0.0
@@ -290,7 +332,7 @@ dependencies:
290
332
  requirements:
291
333
  - - ">="
292
334
  - !ruby/object:Gem::Version
293
- version: 0.7.2
335
+ version: 0.7.3
294
336
  - - "<"
295
337
  - !ruby/object:Gem::Version
296
338
  version: 1.0.0
@@ -300,7 +342,7 @@ dependencies:
300
342
  requirements:
301
343
  - - ">="
302
344
  - !ruby/object:Gem::Version
303
- version: 0.7.2
345
+ version: 0.7.3
304
346
  - - "<"
305
347
  - !ruby/object:Gem::Version
306
348
  version: 1.0.0
@@ -541,6 +583,7 @@ files:
541
583
  - lib/fastlane/actions/actions_helper.rb
542
584
  - lib/fastlane/actions/add_git_tag.rb
543
585
  - lib/fastlane/actions/appstore.rb
586
+ - lib/fastlane/actions/artifactory.rb
544
587
  - lib/fastlane/actions/backup_file.rb
545
588
  - lib/fastlane/actions/backup_xcarchive.rb
546
589
  - lib/fastlane/actions/bundle_install.rb
@@ -598,6 +641,7 @@ files:
598
641
  - lib/fastlane/actions/push_git_tags.rb
599
642
  - lib/fastlane/actions/push_to_git_remote.rb
600
643
  - lib/fastlane/actions/puts.rb
644
+ - lib/fastlane/actions/read_podspec.rb
601
645
  - lib/fastlane/actions/register_devices.rb
602
646
  - lib/fastlane/actions/reset_git_repo.rb
603
647
  - lib/fastlane/actions/resign.rb
@@ -610,6 +654,7 @@ files:
610
654
  - lib/fastlane/actions/set_info_plist_value.rb
611
655
  - lib/fastlane/actions/sigh.rb
612
656
  - lib/fastlane/actions/slack.rb
657
+ - lib/fastlane/actions/slather.rb
613
658
  - lib/fastlane/actions/snapshot.rb
614
659
  - lib/fastlane/actions/team_id.rb
615
660
  - lib/fastlane/actions/team_name.rb
@@ -665,7 +710,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
665
710
  version: '0'
666
711
  requirements: []
667
712
  rubyforge_project:
668
- rubygems_version: 2.4.6
713
+ rubygems_version: 2.4.5
669
714
  signing_key:
670
715
  specification_version: 4
671
716
  summary: Connect all iOS deployment tools into one streamlined workflow