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