fastlane 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/assets/custom_action_template.rb +2 -2
- data/lib/fastlane/action.rb +5 -1
- data/lib/fastlane/actions/hg_add_tag.rb +38 -0
- data/lib/fastlane/actions/hg_commit_version_bump.rb +137 -0
- data/lib/fastlane/actions/hg_ensure_clean_status.rb +39 -0
- data/lib/fastlane/actions/hg_push.rb +47 -0
- data/lib/fastlane/actions/hockey.rb +5 -1
- data/lib/fastlane/actions/install_cocapods.rb +4 -0
- data/lib/fastlane/actions/pem.rb +4 -0
- data/lib/fastlane/actions/s3.rb +19 -9
- data/lib/fastlane/actions/say.rb +4 -0
- data/lib/fastlane/actions/sigh.rb +4 -0
- data/lib/fastlane/actions/testflight.rb +47 -0
- data/lib/fastlane/actions/testmunk.rb +9 -3
- data/lib/fastlane/actions/update_fastlane.rb +1 -1
- data/lib/fastlane/actions_list.rb +10 -4
- data/lib/fastlane/version.rb +1 -1
- metadata +13 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 621c5de5ce077702e3f965ace42c44c15d2a307d
|
4
|
+
data.tar.gz: 64b84fcd0e219a19fd4f43c2f10c3e4ceea54dba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e8c763630fa12412d7cc1cfb2f1ac3955e5e8525317644ef287ed44541a0e7ea389b6fe500ed6cb9b795b3365475e3599e4ec0b0cb5e6581921b0b74258ba63
|
7
|
+
data.tar.gz: c526901b9db016b63b6d8c30f240f8782976b48cdc3258e1dbc03080727499a386d1442b6f9947d0ab20eda8dd43f9315e11f7d5b7103bfae3ef862e11e79fc7
|
@@ -51,9 +51,9 @@ module Fastlane
|
|
51
51
|
]
|
52
52
|
end
|
53
53
|
|
54
|
-
def self.
|
54
|
+
def self.authors
|
55
55
|
# So no one will ever forget your contribution to fastlane :) You are awesome btw!
|
56
|
-
|
56
|
+
["Your GitHub/Twitter Name"]
|
57
57
|
end
|
58
58
|
|
59
59
|
def self.is_supported?(platform)
|
data/lib/fastlane/action.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
# Adds a hg tag to the current commit
|
4
|
+
class HgAddTagAction < Action
|
5
|
+
def self.run(options)
|
6
|
+
tag = options[:tag]
|
7
|
+
|
8
|
+
Helper.log.info "Adding mercurial tag '#{tag}' 🎯."
|
9
|
+
|
10
|
+
command = "hg tag \"#{tag}\""
|
11
|
+
return command if Helper.is_test?
|
12
|
+
|
13
|
+
Actions.sh(command)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.description
|
17
|
+
"This will add a hg tag to the current branch"
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.available_options
|
21
|
+
[
|
22
|
+
FastlaneCore::ConfigItem.new(key: :tag,
|
23
|
+
env_name: "FL_HG_TAG_TAG",
|
24
|
+
description: "Tag to create")
|
25
|
+
]
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.author
|
29
|
+
# credits to lmirosevic for original git version
|
30
|
+
"sjrmanning"
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.is_supported?(platform)
|
34
|
+
true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
# Commits version bump.
|
4
|
+
class HgCommitVersionBumpAction < Action
|
5
|
+
def self.run(params)
|
6
|
+
require 'xcodeproj'
|
7
|
+
require 'pathname'
|
8
|
+
require 'set'
|
9
|
+
require 'shellwords'
|
10
|
+
|
11
|
+
xcodeproj_path = params[:xcodeproj] ? File.expand_path(File.join('.', params[:xcodeproj])) : nil
|
12
|
+
|
13
|
+
if Helper.is_test?
|
14
|
+
xcodeproj_path = "/tmp/Test.xcodeproj"
|
15
|
+
end
|
16
|
+
|
17
|
+
# get the repo root path
|
18
|
+
repo_path = Helper.is_test? ? '/tmp/repo' : Actions.sh('hg root').strip
|
19
|
+
repo_pathname = Pathname.new(repo_path)
|
20
|
+
|
21
|
+
if xcodeproj_path
|
22
|
+
# ensure that the xcodeproj passed in was OK
|
23
|
+
unless Helper.is_test?
|
24
|
+
raise "Could not find the specified xcodeproj: #{xcodeproj_path}" unless File.directory?(xcodeproj_path)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
# find an xcodeproj (ignoring the Cocoapods one)
|
28
|
+
xcodeproj_paths = Dir[File.expand_path(File.join(repo_path, '**/*.xcodeproj'))].reject { |path| /Pods\/.*.xcodeproj/ =~ path }
|
29
|
+
|
30
|
+
# no projects found: error
|
31
|
+
raise 'Could not find a .xcodeproj in the current repository\'s working directory.'.red if xcodeproj_paths.count == 0
|
32
|
+
|
33
|
+
# too many projects found: error
|
34
|
+
if xcodeproj_paths.count > 1
|
35
|
+
relative_projects = xcodeproj_paths.map { |e| Pathname.new(e).relative_path_from(repo_pathname).to_s }.join("\n")
|
36
|
+
raise "Found multiple .xcodeproj projects in the current repository's working directory. Please specify your app's main project: \n#{relative_projects}".red
|
37
|
+
end
|
38
|
+
|
39
|
+
# one project found: great
|
40
|
+
xcodeproj_path = xcodeproj_paths.first
|
41
|
+
end
|
42
|
+
|
43
|
+
# find the pbxproj path, relative to hg directory
|
44
|
+
if Helper.is_test?
|
45
|
+
hg_dirty_files = params[:test_dirty_files].split(",")
|
46
|
+
expected_changed_files = params[:test_expected_files].split(",")
|
47
|
+
else
|
48
|
+
pbxproj_pathname = Pathname.new(File.join(xcodeproj_path, 'project.pbxproj'))
|
49
|
+
pbxproj_path = pbxproj_pathname.relative_path_from(repo_pathname).to_s
|
50
|
+
|
51
|
+
# find the info_plist files
|
52
|
+
project = Xcodeproj::Project.open(xcodeproj_path)
|
53
|
+
info_plist_files = project.objects.select { |object| object.isa == 'XCBuildConfiguration' }.map(&:to_hash).map { |object_hash| object_hash['buildSettings'] }.select { |build_settings| build_settings.key?('INFOPLIST_FILE') }.map { |build_settings| build_settings['INFOPLIST_FILE'] }.uniq.map { |info_plist_path| Pathname.new(File.expand_path(File.join(xcodeproj_path, '..', info_plist_path))).relative_path_from(repo_pathname).to_s }
|
54
|
+
|
55
|
+
# create our list of files that we expect to have changed, they should all be relative to the project root, which should be equal to the hg workdir root
|
56
|
+
expected_changed_files = []
|
57
|
+
expected_changed_files << pbxproj_path
|
58
|
+
expected_changed_files << info_plist_files
|
59
|
+
expected_changed_files.flatten!.uniq!
|
60
|
+
|
61
|
+
# get the list of files that have actually changed in our hg workdir
|
62
|
+
hg_dirty_files = Actions.sh('hg status -n').split("\n")
|
63
|
+
end
|
64
|
+
|
65
|
+
# little user hint
|
66
|
+
raise 'No file changes picked up. Make sure you run the `increment_build_number` action first.'.red if hg_dirty_files.empty?
|
67
|
+
|
68
|
+
# check if the files changed are the ones we expected to change (these should be only the files that have version info in them)
|
69
|
+
dirty_set = Set.new(hg_dirty_files.map(&:downcase))
|
70
|
+
expected_set = Set.new(expected_changed_files.map(&:downcase))
|
71
|
+
changed_files_as_expected = dirty_set.subset? expected_set
|
72
|
+
unless changed_files_as_expected
|
73
|
+
unless params[:force]
|
74
|
+
raise "Found unexpected uncommited changes in the working directory. Expected these files to have changed: \n#{expected_changed_files.join("\n")}.\nBut found these actual changes: \n#{hg_dirty_files.join("\n")}.\nMake sure you have cleaned up the build artifacts and are only left with the changed version files at this stage in your lane, and don't touch the working directory while your lane is running. You can also use the :force option to bypass this check, and always commit a version bump regardless of the state of the working directory.".red
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# create a commit with a message
|
79
|
+
command = "hg commit -m '#{params[:message]}'"
|
80
|
+
return command if Helper.is_test?
|
81
|
+
begin
|
82
|
+
Actions.sh(command)
|
83
|
+
|
84
|
+
Helper.log.info "Committed \"#{params[:message]}\" 💾.".green
|
85
|
+
rescue => ex
|
86
|
+
Helper.log.info "Didn't commit any changes. 😐".yellow
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.description
|
91
|
+
"This will commit a version bump to the hg repo"
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.available_options
|
95
|
+
[
|
96
|
+
FastlaneCore::ConfigItem.new(key: :message,
|
97
|
+
env_name: "FL_COMMIT_BUMP_MESSAGE",
|
98
|
+
description: "The commit message when committing the version bump",
|
99
|
+
default_value: "Version Bump"),
|
100
|
+
FastlaneCore::ConfigItem.new(key: :xcodeproj,
|
101
|
+
env_name: "FL_BUILD_NUMBER_PROJECT",
|
102
|
+
description: "The path to your project file (Not the workspace). If you have only one, this is optional",
|
103
|
+
optional: true,
|
104
|
+
verify_block: Proc.new do |value|
|
105
|
+
raise "Please pass the path to the project, not the workspace".red if value.include?"workspace"
|
106
|
+
raise "Could not find Xcode project".red unless File.exists?(value)
|
107
|
+
end),
|
108
|
+
FastlaneCore::ConfigItem.new(key: :force,
|
109
|
+
env_name: "FL_FORCE_COMMIT",
|
110
|
+
description: "Forces the commit, even if other files than the ones containing the version number have been modified",
|
111
|
+
optional: true,
|
112
|
+
default_value: false,
|
113
|
+
is_string: false),
|
114
|
+
FastlaneCore::ConfigItem.new(key: :test_dirty_files,
|
115
|
+
env_name: "FL_HG_COMMIT_TEST_DIRTY_FILES",
|
116
|
+
description: "A list of dirty files passed in for testing",
|
117
|
+
optional: true,
|
118
|
+
default_value: "file1, file2"),
|
119
|
+
FastlaneCore::ConfigItem.new(key: :test_expected_files,
|
120
|
+
env_name: "FL_HG_COMMIT_TEST_EXP_FILES",
|
121
|
+
description: "A list of expected changed files passed in for testin",
|
122
|
+
optional: true,
|
123
|
+
default_value: "file1, file2")
|
124
|
+
]
|
125
|
+
end
|
126
|
+
|
127
|
+
def self.author
|
128
|
+
# credits to lmirosevic for original git version
|
129
|
+
"sjrmanning"
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.is_supported?(platform)
|
133
|
+
true
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
HG_REPO_WAS_CLEAN_ON_START = :HG_REPO_WAS_CLEAN_ON_START
|
5
|
+
end
|
6
|
+
# Raises an exception and stop the lane execution if the repo is not in a clean state
|
7
|
+
class HgEnsureCleanStatusAction < Action
|
8
|
+
def self.run(params)
|
9
|
+
repo_clean = `hg status`.empty?
|
10
|
+
|
11
|
+
if repo_clean
|
12
|
+
Helper.log.info 'Mercurial status is clean, all good! 😎'.green
|
13
|
+
Actions.lane_context[SharedValues::HG_REPO_WAS_CLEAN_ON_START] = true
|
14
|
+
else
|
15
|
+
raise 'Mercurial repository is dirty! Please ensure the repo is in a clean state by commiting/stashing/discarding all changes first.'.red
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.description
|
20
|
+
"Raises an exception if there are uncommited hg changes"
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.output
|
24
|
+
[
|
25
|
+
['HG_REPO_WAS_CLEAN_ON_START', 'Stores the fact that the hg repo was clean at some point']
|
26
|
+
]
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.author
|
30
|
+
# credits to lmirosevic for original git version
|
31
|
+
"sjrmanning"
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.is_supported?(platform)
|
35
|
+
true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
# Pushes commits to the remote hg repo
|
4
|
+
class HgPushAction < Action
|
5
|
+
def self.run(params)
|
6
|
+
|
7
|
+
command = ['hg', 'push']
|
8
|
+
|
9
|
+
command << '--force' if params[:force]
|
10
|
+
command << params[:destination] unless params[:destination].empty?
|
11
|
+
|
12
|
+
return command.join(' ') if Helper.is_test?
|
13
|
+
|
14
|
+
Actions.sh(command.join(' '))
|
15
|
+
Helper.log.info 'Successfully pushed changes to remote 🚀.'.green
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.description
|
19
|
+
"This will push changes to the remote hg repository"
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.available_options
|
23
|
+
[
|
24
|
+
FastlaneCore::ConfigItem.new(key: :force,
|
25
|
+
env_name: "FL_HG_PUSH_FORCE",
|
26
|
+
description: "Force push to remote. Defaults to false",
|
27
|
+
is_string: false,
|
28
|
+
default_value: false),
|
29
|
+
FastlaneCore::ConfigItem.new(key: :destination,
|
30
|
+
env_name: "FL_HG_PUSH_DESTINATION",
|
31
|
+
description: "The destination to push to",
|
32
|
+
default_value: '',
|
33
|
+
optional: true)
|
34
|
+
]
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.author
|
38
|
+
# credits to lmirosevic for original git version
|
39
|
+
"sjrmanning"
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.is_supported?(platform)
|
43
|
+
true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -99,7 +99,7 @@ module Fastlane
|
|
99
99
|
default_value: "1"),
|
100
100
|
FastlaneCore::ConfigItem.new(key: :release_type,
|
101
101
|
env_name: "FL_HOCKEY_RELEASE_TYPE",
|
102
|
-
description: "Release type of the app",
|
102
|
+
description: "Release type of the app: 0 = Beta (default), 1 = Store, 2 = Alpha, 3 = Enterprise",
|
103
103
|
default_value: "0"),
|
104
104
|
FastlaneCore::ConfigItem.new(key: :mandatory,
|
105
105
|
env_name: "FL_HOCKEY_MANDATORY",
|
@@ -109,6 +109,10 @@ module Fastlane
|
|
109
109
|
env_name: "FL_HOCKEY_TEAMS",
|
110
110
|
description: "Comma separated list of team ID numbers to which this build will be restricted",
|
111
111
|
optional: true),
|
112
|
+
FastlaneCore::ConfigItem.new(key: :users,
|
113
|
+
env_name: "FL_HOCKEY_USERS",
|
114
|
+
description: "Comma separated list of user ID numbers to which this build will be restricted",
|
115
|
+
optional: true),
|
112
116
|
FastlaneCore::ConfigItem.new(key: :tags,
|
113
117
|
env_name: "FL_HOCKEY_TAGS",
|
114
118
|
description: "Comma separated list of tags which will receive access to the build",
|
data/lib/fastlane/actions/pem.rb
CHANGED
@@ -31,6 +31,10 @@ module Fastlane
|
|
31
31
|
"Makes sure a valid push profile is active and creates a new one if needed"
|
32
32
|
end
|
33
33
|
|
34
|
+
def self.author
|
35
|
+
"KrauseFx"
|
36
|
+
end
|
37
|
+
|
34
38
|
def self.details
|
35
39
|
[
|
36
40
|
"Additionally to the available options, you can also specify a block that only gets executed if a new",
|
data/lib/fastlane/actions/s3.rb
CHANGED
@@ -39,6 +39,7 @@ module Fastlane
|
|
39
39
|
params[:acl] = config[:acl]
|
40
40
|
params[:source] = config[:source]
|
41
41
|
params[:path] = config[:path]
|
42
|
+
params[:upload_metadata] = config[:upload_metadata]
|
42
43
|
params[:plist_template_path] = config[:plist_template_path]
|
43
44
|
params[:html_template_path] = config[:html_template_path]
|
44
45
|
params[:html_file_name] = config[:html_file_name]
|
@@ -79,15 +80,6 @@ module Fastlane
|
|
79
80
|
Helper.log.debug command
|
80
81
|
Actions.sh command
|
81
82
|
|
82
|
-
#####################################
|
83
|
-
#
|
84
|
-
# html and plist building
|
85
|
-
#
|
86
|
-
#####################################
|
87
|
-
|
88
|
-
# Gets info used for the plist
|
89
|
-
bundle_id, bundle_version, title, full_version = get_ipa_info( ipa_file )
|
90
|
-
|
91
83
|
# Gets URL for IPA file
|
92
84
|
url_part = expand_path_with_substitutions_from_ipa_plist( ipa_file, s3_path )
|
93
85
|
ipa_file_name = File.basename(ipa_file)
|
@@ -103,6 +95,19 @@ module Fastlane
|
|
103
95
|
ENV[SharedValues::S3_DSYM_OUTPUT_PATH.to_s] = dsym_url
|
104
96
|
end
|
105
97
|
|
98
|
+
if params[:upload_metadata] == false
|
99
|
+
return true
|
100
|
+
end
|
101
|
+
|
102
|
+
#####################################
|
103
|
+
#
|
104
|
+
# html and plist building
|
105
|
+
#
|
106
|
+
#####################################
|
107
|
+
|
108
|
+
# Gets info used for the plist
|
109
|
+
bundle_id, bundle_version, title, full_version = get_ipa_info( ipa_file )
|
110
|
+
|
106
111
|
# Creating plist and html names
|
107
112
|
plist_file_name = "#{url_part}#{title}.plist"
|
108
113
|
plist_url = "https://#{s3_subdomain}.amazonaws.com/#{s3_bucket}/#{plist_file_name}"
|
@@ -271,6 +276,11 @@ module Fastlane
|
|
271
276
|
description: "zipped .dsym package for the build ",
|
272
277
|
optional: true,
|
273
278
|
default_value: Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH]),
|
279
|
+
FastlaneCore::ConfigItem.new(key: :upload_metadata,
|
280
|
+
env_name: "",
|
281
|
+
description: "Upload relevant metadata for this build",
|
282
|
+
optional: true,
|
283
|
+
default_value: true),
|
274
284
|
FastlaneCore::ConfigItem.new(key: :plist_template_path,
|
275
285
|
env_name: "",
|
276
286
|
description: "plist template path",
|
data/lib/fastlane/actions/say.rb
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
end
|
5
|
+
|
6
|
+
class TestflightAction < Action
|
7
|
+
def self.run(params)
|
8
|
+
values = params.values
|
9
|
+
values[:beta] = true # always true for beta actions
|
10
|
+
real_options = FastlaneCore::Configuration.create(Actions::DeliverAction.available_options, values)
|
11
|
+
return real_options if Helper.is_test?
|
12
|
+
|
13
|
+
Actions::DeliverAction.run(real_options)
|
14
|
+
end
|
15
|
+
|
16
|
+
#####################################################
|
17
|
+
# @!group Documentation
|
18
|
+
#####################################################
|
19
|
+
|
20
|
+
def self.description
|
21
|
+
"Upload a new build to iTunes Connect. This won't upload app metadata"
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.available_options
|
25
|
+
[
|
26
|
+
FastlaneCore::ConfigItem.new(key: :skip_deploy,
|
27
|
+
env_name: "FL_DELIVER_SKIP_DEPLOY",
|
28
|
+
description: "Skip the distribution of the app to all beta testers",
|
29
|
+
default_value: false,
|
30
|
+
is_string: false)
|
31
|
+
]
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.output
|
35
|
+
[]
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.author
|
39
|
+
'KrauseFx'
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.is_supported?(platform)
|
43
|
+
[:ios, :mac].include?platform
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -14,9 +14,14 @@ module Fastlane
|
|
14
14
|
class TestmunkAction < Action
|
15
15
|
def self.run(config)
|
16
16
|
Helper.log.info 'Testmunk: Uploading the .ipa and starting your tests'.green
|
17
|
+
|
18
|
+
Helper.log.info 'Zipping features/ to features.zip'.green
|
19
|
+
zipped_features_path = File.expand_path('features.zip')
|
20
|
+
Actions.sh(%Q[zip -r "features" "features/"])
|
17
21
|
|
18
22
|
response = system("#{"curl -H 'Accept: application/vnd.testmunk.v1+json'" +
|
19
23
|
" -F 'file=@#{config[:ipa]}' -F 'autoStart=true'" +
|
24
|
+
" -F 'testcases=@#{zipped_features_path}'" +
|
20
25
|
" -F 'email=#{config[:email]}'" +
|
21
26
|
" https://#{config[:api]}@api.testmunk.com/apps/#{config[:app]}/testruns"}")
|
22
27
|
|
@@ -36,6 +41,7 @@ module Fastlane
|
|
36
41
|
FastlaneCore::ConfigItem.new(key: :ipa,
|
37
42
|
env_name: "TESTMUNK_IPA",
|
38
43
|
description: "Path to IPA",
|
44
|
+
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH],
|
39
45
|
verify_block: Proc.new do |value|
|
40
46
|
raise "Please pass to existing ipa" unless File.exists?value
|
41
47
|
end),
|
@@ -56,12 +62,12 @@ module Fastlane
|
|
56
62
|
description: "Testmunk App Name",
|
57
63
|
verify_block: Proc.new do |value|
|
58
64
|
raise "Please pass your Testmunk app name using `ENV['TESTMUNK_APP'] = 'value'`" unless value
|
59
|
-
end)
|
65
|
+
end)
|
60
66
|
]
|
61
67
|
end
|
62
68
|
|
63
69
|
def self.author
|
64
|
-
"mposchen"
|
70
|
+
["mposchen", "johannesberdin"]
|
65
71
|
end
|
66
72
|
|
67
73
|
def self.is_supported?(platform)
|
@@ -69,4 +75,4 @@ module Fastlane
|
|
69
75
|
end
|
70
76
|
end
|
71
77
|
end
|
72
|
-
end
|
78
|
+
end
|
@@ -14,7 +14,9 @@ module Fastlane
|
|
14
14
|
|
15
15
|
if action < Action
|
16
16
|
current << action.description if action.description
|
17
|
-
|
17
|
+
|
18
|
+
authors = Array(action.author || action.authors)
|
19
|
+
current << authors.join(', ').green if authors.count > 0
|
18
20
|
|
19
21
|
l = (action.description || '').length
|
20
22
|
else
|
@@ -30,8 +32,9 @@ module Fastlane
|
|
30
32
|
rows: rows
|
31
33
|
)
|
32
34
|
puts table
|
35
|
+
puts " Total of #{rows.count} actions"
|
33
36
|
|
34
|
-
puts "
|
37
|
+
puts "\nGet more information for one specific action using `fastlane action [name]`\n".green
|
35
38
|
end
|
36
39
|
|
37
40
|
def self.show_details(filter)
|
@@ -49,7 +52,10 @@ module Fastlane
|
|
49
52
|
rows << [action.details]
|
50
53
|
rows << [' ']
|
51
54
|
end
|
52
|
-
|
55
|
+
|
56
|
+
authors = Array(action.author || action.authors)
|
57
|
+
|
58
|
+
rows << ["Created by #{authors.join(', ').green}"] if authors.count > 0
|
53
59
|
|
54
60
|
puts Terminal::Table.new(
|
55
61
|
title: filter.green,
|
@@ -99,7 +105,7 @@ module Fastlane
|
|
99
105
|
# Iterates through all available actions and yields from there
|
100
106
|
def self.all_actions
|
101
107
|
all_actions = Fastlane::Actions.constants.select {|c| Class === Fastlane::Actions.const_get(c)}
|
102
|
-
all_actions.each do |symbol|
|
108
|
+
all_actions.sort.each do |symbol|
|
103
109
|
action = Fastlane::Actions.const_get(symbol)
|
104
110
|
name = symbol.to_s.gsub('Action', '').fastlane_underscore
|
105
111
|
yield action, name
|
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.5.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-06-
|
11
|
+
date: 2015-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -170,14 +170,14 @@ dependencies:
|
|
170
170
|
requirements:
|
171
171
|
- - '>='
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: 0.
|
173
|
+
version: 0.12.1
|
174
174
|
type: :runtime
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - '>='
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: 0.
|
180
|
+
version: 0.12.1
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: snapshot
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -240,28 +240,28 @@ dependencies:
|
|
240
240
|
requirements:
|
241
241
|
- - '>='
|
242
242
|
- !ruby/object:Gem::Version
|
243
|
-
version: 0.
|
243
|
+
version: 0.8.0
|
244
244
|
type: :runtime
|
245
245
|
prerelease: false
|
246
246
|
version_requirements: !ruby/object:Gem::Requirement
|
247
247
|
requirements:
|
248
248
|
- - '>='
|
249
249
|
- !ruby/object:Gem::Version
|
250
|
-
version: 0.
|
250
|
+
version: 0.8.0
|
251
251
|
- !ruby/object:Gem::Dependency
|
252
252
|
name: produce
|
253
253
|
requirement: !ruby/object:Gem::Requirement
|
254
254
|
requirements:
|
255
255
|
- - '>='
|
256
256
|
- !ruby/object:Gem::Version
|
257
|
-
version: 0.
|
257
|
+
version: 0.3.0
|
258
258
|
type: :runtime
|
259
259
|
prerelease: false
|
260
260
|
version_requirements: !ruby/object:Gem::Requirement
|
261
261
|
requirements:
|
262
262
|
- - '>='
|
263
263
|
- !ruby/object:Gem::Version
|
264
|
-
version: 0.
|
264
|
+
version: 0.3.0
|
265
265
|
- !ruby/object:Gem::Dependency
|
266
266
|
name: bundler
|
267
267
|
requirement: !ruby/object:Gem::Requirement
|
@@ -412,6 +412,10 @@ files:
|
|
412
412
|
- lib/fastlane/actions/frameit.rb
|
413
413
|
- lib/fastlane/actions/gcovr.rb
|
414
414
|
- lib/fastlane/actions/hall.rb
|
415
|
+
- lib/fastlane/actions/hg_add_tag.rb
|
416
|
+
- lib/fastlane/actions/hg_commit_version_bump.rb
|
417
|
+
- lib/fastlane/actions/hg_ensure_clean_status.rb
|
418
|
+
- lib/fastlane/actions/hg_push.rb
|
415
419
|
- lib/fastlane/actions/hipchat.rb
|
416
420
|
- lib/fastlane/actions/hockey.rb
|
417
421
|
- lib/fastlane/actions/increment_build_number.rb
|
@@ -437,6 +441,7 @@ files:
|
|
437
441
|
- lib/fastlane/actions/snapshot.rb
|
438
442
|
- lib/fastlane/actions/team_id.rb
|
439
443
|
- lib/fastlane/actions/team_name.rb
|
444
|
+
- lib/fastlane/actions/testflight.rb
|
440
445
|
- lib/fastlane/actions/testmunk.rb
|
441
446
|
- lib/fastlane/actions/typetalk.rb
|
442
447
|
- lib/fastlane/actions/update_fastlane.rb
|