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 +4 -4
- data/bin/fastlane +4 -2
- data/lib/fastlane/actions/artifactory.rb +114 -0
- data/lib/fastlane/actions/ensure_git_branch.rb +6 -5
- data/lib/fastlane/actions/read_podspec.rb +64 -0
- data/lib/fastlane/actions/set_github_release.rb +114 -12
- data/lib/fastlane/actions/slather.rb +146 -0
- data/lib/fastlane/actions/xcodebuild.rb +3 -3
- data/lib/fastlane/actions_list.rb +11 -7
- data/lib/fastlane/version.rb +1 -1
- metadata +54 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7608ced8bfaed95233e80f4b2cf0b63975b4008
|
4
|
+
data.tar.gz: 85ec46cf81d5e1a798fa8c13235333c4040c6f06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
11
|
-
|
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
|
-
|
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
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
response =
|
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
|
-
|
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
|
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
|
-
"
|
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
|
-
"
|
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
|
-
"
|
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
|
data/lib/fastlane/version.rb
CHANGED
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.
|
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-
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|