fastlane 1.22.0 → 1.23.0

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