fastlane 0.6.1 → 0.7.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 +25 -7
- data/lib/assets/custom_action_template.rb +35 -2
- data/lib/fastlane.rb +1 -3
- data/lib/fastlane/action.rb +37 -0
- data/lib/fastlane/actions/{README → README.md} +1 -1
- data/lib/fastlane/actions/add_git_tag.rb +18 -1
- data/lib/fastlane/actions/cert.rb +38 -18
- data/lib/fastlane/actions/clean_build_artifacts.rb +9 -1
- data/lib/fastlane/actions/commit_version_bump.rb +16 -1
- data/lib/fastlane/actions/crashlytics.rb +21 -1
- data/lib/fastlane/actions/deliver.rb +31 -13
- data/lib/fastlane/actions/deploygate.rb +26 -1
- data/lib/fastlane/actions/ensure_git_status_clean.rb +15 -1
- data/lib/fastlane/actions/fastlane_version.rb +9 -1
- data/lib/fastlane/actions/frameit.rb +20 -10
- data/lib/fastlane/actions/gcovr.rb +35 -1
- data/lib/fastlane/actions/hipchat.rb +19 -1
- data/lib/fastlane/actions/hockey.rb +27 -1
- data/lib/fastlane/actions/increment_build_number.rb +22 -1
- data/lib/fastlane/actions/increment_version_number.rb +30 -1
- data/lib/fastlane/actions/install_carthage.rb +9 -1
- data/lib/fastlane/actions/install_cocapods.rb +5 -1
- data/lib/fastlane/actions/ipa.rb +52 -13
- data/lib/fastlane/actions/notify.rb +9 -1
- data/lib/fastlane/actions/produce.rb +50 -8
- data/lib/fastlane/actions/push_to_git_remote.rb +18 -1
- data/lib/fastlane/actions/register_devices.rb +18 -1
- data/lib/fastlane/actions/reset_git_repo.rb +24 -1
- data/lib/fastlane/actions/resign.rb +17 -1
- data/lib/fastlane/actions/s3.rb +30 -2
- data/lib/fastlane/actions/say.rb +5 -1
- data/lib/fastlane/actions/sigh.rb +22 -6
- data/lib/fastlane/actions/slack.rb +19 -4
- data/lib/fastlane/actions/snapshot.rb +27 -6
- data/lib/fastlane/actions/team_id.rb +9 -1
- data/lib/fastlane/actions/team_name.rb +9 -1
- data/lib/fastlane/actions/testmunk.rb +17 -4
- data/lib/fastlane/actions/typetalk.rb +19 -1
- data/lib/fastlane/actions/update_project_code_signing.rb +13 -1
- data/lib/fastlane/actions/xcode_select.rb +10 -2
- data/lib/fastlane/actions/xcodebuild.rb +88 -8
- data/lib/fastlane/actions/xctool.rb +16 -1
- data/lib/fastlane/actions_list.rb +130 -0
- data/lib/fastlane/core_ext/string.rb +8 -0
- data/lib/fastlane/lane_manager.rb +17 -1
- data/lib/fastlane/version.rb +1 -1
- metadata +35 -19
@@ -5,7 +5,7 @@ module Fastlane
|
|
5
5
|
end
|
6
6
|
|
7
7
|
# Raises an exception and stop the lane execution if the repo is not in a clean state
|
8
|
-
class EnsureGitStatusCleanAction
|
8
|
+
class EnsureGitStatusCleanAction < Action
|
9
9
|
def self.run(_params)
|
10
10
|
repo_clean = `git status --porcelain`.empty?
|
11
11
|
|
@@ -16,6 +16,20 @@ module Fastlane
|
|
16
16
|
raise 'Git repository is dirty! Please ensure the repo is in a clean state by commiting/stashing/discarding all changes first.'.red
|
17
17
|
end
|
18
18
|
end
|
19
|
+
|
20
|
+
def self.description
|
21
|
+
"Raises an exception if there are uncommited git changes"
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.output
|
25
|
+
[
|
26
|
+
['GIT_REPO_WAS_CLEAN_ON_START', 'Stores the fact that the git repo was clean at some point']
|
27
|
+
]
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.author
|
31
|
+
"lmirosevic"
|
32
|
+
end
|
19
33
|
end
|
20
34
|
end
|
21
35
|
end
|
@@ -4,7 +4,7 @@ module Fastlane
|
|
4
4
|
|
5
5
|
end
|
6
6
|
|
7
|
-
class FastlaneVersionAction
|
7
|
+
class FastlaneVersionAction < Action
|
8
8
|
def self.run(params)
|
9
9
|
defined_version = ((Gem::Version.new(params.first) if params.first) rescue nil)
|
10
10
|
raise "Please pass minimum fastlane version as parameter to fastlane_version".red unless defined_version
|
@@ -19,6 +19,14 @@ module Fastlane
|
|
19
19
|
def self.step_text
|
20
20
|
"Verifying required fastlane version"
|
21
21
|
end
|
22
|
+
|
23
|
+
def self.author
|
24
|
+
"KrauseFx"
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.description
|
28
|
+
"Verifies the minimum fastlane version required"
|
29
|
+
end
|
22
30
|
end
|
23
31
|
end
|
24
32
|
end
|
@@ -1,24 +1,34 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
|
4
|
-
end
|
5
|
-
|
6
|
-
class FrameitAction
|
3
|
+
class FrameitAction < Action
|
7
4
|
def self.run(params)
|
8
5
|
return if Helper.test?
|
9
6
|
|
10
7
|
require 'frameit'
|
11
8
|
|
12
|
-
|
13
|
-
|
9
|
+
begin
|
10
|
+
FastlaneCore::UpdateChecker.start_looking_for_update('frameit')
|
11
|
+
color = Frameit::Editor::Color::BLACK
|
12
|
+
color = Frameit::Editor::Color::SILVER if [:silver, :white].include?(params.first)
|
14
13
|
|
15
|
-
|
16
|
-
|
14
|
+
screenshots_folder = Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH]
|
15
|
+
screenshots_folder ||= FastlaneFolder.path
|
17
16
|
|
18
|
-
|
19
|
-
|
17
|
+
Dir.chdir(screenshots_folder) do
|
18
|
+
Frameit::Editor.new.run('.', color)
|
19
|
+
end
|
20
|
+
ensure
|
21
|
+
FastlaneCore::UpdateChecker.show_update_status('frameit', Frameit::VERSION)
|
20
22
|
end
|
21
23
|
end
|
24
|
+
|
25
|
+
def self.description
|
26
|
+
"Adds device frames around the screenshots using frameit"
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.author
|
30
|
+
"KrauseFx"
|
31
|
+
end
|
22
32
|
end
|
23
33
|
end
|
24
34
|
end
|
@@ -22,7 +22,7 @@ module Fastlane
|
|
22
22
|
# -g, --use-gcov-files Use preprocessed gcov files for analysis.
|
23
23
|
# -s, --print-summary Prints a small report to stdout with line & branch percentage coverage
|
24
24
|
|
25
|
-
class GcovrAction
|
25
|
+
class GcovrAction < Action
|
26
26
|
ARGS_MAP = {
|
27
27
|
object_directory: "--object-directory",
|
28
28
|
output: "-o",
|
@@ -101,6 +101,40 @@ module Fastlane
|
|
101
101
|
end
|
102
102
|
end.compact
|
103
103
|
end
|
104
|
+
|
105
|
+
def self.description
|
106
|
+
"Runs test coverage reports for your Xcode project"
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.available_options
|
110
|
+
[
|
111
|
+
['object_directory', 'Specify the directory that contains the gcov data files.'],
|
112
|
+
['output', 'Print output to this filename Keep the temporary *.gcov files generated by gcov.'],
|
113
|
+
['keep', 'Keep the temporary *.gcov files generated by gcov.'],
|
114
|
+
['delete', 'Delete the coverage files after they are processed.'],
|
115
|
+
['filter', 'Keep only the data files that match this regular expression'],
|
116
|
+
['exclude', 'Exclude data files that match this regular expression'],
|
117
|
+
['gcov_filter', 'Keep only gcov data files that match this regular expression'],
|
118
|
+
['gcov_exclude', 'Exclude gcov data files that match this regular expression'],
|
119
|
+
['root', 'Defines the root directory for source files.'],
|
120
|
+
['xml', 'Generate XML instead of the normal tabular output.'],
|
121
|
+
['xml_pretty', 'Generate pretty XML instead of the normal dense format.'],
|
122
|
+
['html', 'Generate HTML instead of the normal tabular output.'],
|
123
|
+
['html_details', 'Generate HTML output for source file coverage.'],
|
124
|
+
['html_absolute_paths', 'Set the paths in the HTML report to be absolute instead of relative'],
|
125
|
+
['branches', 'Tabulate the branch coverage instead of the line coverage.'],
|
126
|
+
['sort_uncovered', 'Sort entries by increasing number of uncovered lines.'],
|
127
|
+
['sort_percentage', 'Sort entries by decreasing percentage of covered lines.'],
|
128
|
+
['gcov_executable', 'Defines the name/path to the gcov executable].'],
|
129
|
+
['exclude_unreachable_branches', 'Exclude from coverage branches which are marked to be excluded by LCOV/GCOV markers'],
|
130
|
+
['use_gcov_files', 'Use preprocessed gcov files for analysis.'],
|
131
|
+
['print_summary', 'Prints a small report to stdout with line & branch percentage coverage']
|
132
|
+
]
|
133
|
+
end
|
134
|
+
|
135
|
+
def self.author
|
136
|
+
"dtrenz"
|
137
|
+
end
|
104
138
|
end
|
105
139
|
end
|
106
140
|
end
|
@@ -3,7 +3,7 @@ module Fastlane
|
|
3
3
|
module SharedValues
|
4
4
|
end
|
5
5
|
|
6
|
-
class HipchatAction
|
6
|
+
class HipchatAction < Action
|
7
7
|
def self.run(params)
|
8
8
|
options = { message: '',
|
9
9
|
success: true,
|
@@ -87,6 +87,24 @@ module Fastlane
|
|
87
87
|
raise "Unexpected #{response.code} for `#{channel}'".red
|
88
88
|
end
|
89
89
|
end
|
90
|
+
|
91
|
+
def self.description
|
92
|
+
"Send a error/success message to HipChat"
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.available_options
|
96
|
+
[
|
97
|
+
['', 'Hipchat API Token', 'HIPCHAT_API_TOKEN'],
|
98
|
+
['', 'Version of the Hipchat API. Must be 1 or 2', 'HIPCHAT_API_VERSION'],
|
99
|
+
['message', 'The message to post on HipChat'],
|
100
|
+
['channel', 'The room or @username'],
|
101
|
+
['success', 'Is this a success message?'],
|
102
|
+
]
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.author
|
106
|
+
"jingx23"
|
107
|
+
end
|
90
108
|
end
|
91
109
|
end
|
92
110
|
end
|
@@ -9,7 +9,7 @@ module Fastlane
|
|
9
9
|
HOCKEY_BUILD_INFORMATION = :HOCKEY_BUILD_INFORMATION # contains all keys/values from the HockeyApp API, like :title, :bundle_identifier
|
10
10
|
end
|
11
11
|
|
12
|
-
class HockeyAction
|
12
|
+
class HockeyAction < Action
|
13
13
|
def self.run(params)
|
14
14
|
# Available options: http://support.hockeyapp.net/kb/api/api-versions#upload-version
|
15
15
|
options = {
|
@@ -63,6 +63,32 @@ module Fastlane
|
|
63
63
|
raise 'Error when trying to upload ipa to HockeyApp'.red
|
64
64
|
end
|
65
65
|
end
|
66
|
+
|
67
|
+
def self.description
|
68
|
+
"Upload a new build to HockeyApp"
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.available_options
|
72
|
+
[
|
73
|
+
['api_token', 'API Token for Hockey Access'],
|
74
|
+
['ipa', 'Path to the ipa file. Optional if you use the `ipa` or `xcodebuild` action'],
|
75
|
+
['notes', 'The changelog for this build'],
|
76
|
+
['dsym', 'Path to the dsym file. Optional if you use the `ipa` or `xcodebuild` action'],
|
77
|
+
['status', 'No description'],
|
78
|
+
['notify', 'Notify testers? 1 for yes'],
|
79
|
+
]
|
80
|
+
end
|
81
|
+
|
82
|
+
def output
|
83
|
+
[
|
84
|
+
['HOCKEY_DOWNLOAD_LINK', 'The newly generated download link for this build'],
|
85
|
+
['HOCKEY_BUILD_INFORMATION', 'contains all keys/values from the HockeyApp API, like :title, :bundle_identifier']
|
86
|
+
]
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.author
|
90
|
+
"KrauseFx"
|
91
|
+
end
|
66
92
|
end
|
67
93
|
end
|
68
94
|
end
|
@@ -4,7 +4,7 @@ module Fastlane
|
|
4
4
|
BUILD_NUMBER = :BUILD_NUMBER
|
5
5
|
end
|
6
6
|
|
7
|
-
class IncrementBuildNumberAction
|
7
|
+
class IncrementBuildNumberAction < Action
|
8
8
|
require 'shellwords'
|
9
9
|
|
10
10
|
def self.run(params)
|
@@ -55,6 +55,27 @@ module Fastlane
|
|
55
55
|
raise ex
|
56
56
|
end
|
57
57
|
end
|
58
|
+
|
59
|
+
def self.description
|
60
|
+
"Increment the build number of your project"
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.available_options
|
64
|
+
[
|
65
|
+
['build_number', 'specify specific build number (optional, omitting it increments by one)'],
|
66
|
+
['xcodeproj', 'optional, you must specify the path to your main Xcode project if it is not in the project root directory']
|
67
|
+
]
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.output
|
71
|
+
[
|
72
|
+
['BUILD_NUMBER', 'The new build number']
|
73
|
+
]
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.author
|
77
|
+
"KrauseFx"
|
78
|
+
end
|
58
79
|
end
|
59
80
|
end
|
60
81
|
end
|
@@ -4,7 +4,7 @@ module Fastlane
|
|
4
4
|
VERSION_NUMBER = :VERSION_NUMBER
|
5
5
|
end
|
6
6
|
|
7
|
-
class IncrementVersionNumberAction
|
7
|
+
class IncrementVersionNumberAction < Action
|
8
8
|
require 'shellwords'
|
9
9
|
|
10
10
|
def self.run(params)
|
@@ -93,6 +93,35 @@ module Fastlane
|
|
93
93
|
raise ex
|
94
94
|
end
|
95
95
|
end
|
96
|
+
|
97
|
+
def self.description
|
98
|
+
"Increment the build number of your project"
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.details
|
102
|
+
[
|
103
|
+
"This action will increment the version number. ",
|
104
|
+
"You first have to set up your Xcode project, if you haven't done it already:",
|
105
|
+
"https://developer.apple.com/library/ios/qa/qa1827/_index.html"
|
106
|
+
].join(' ')
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.available_options
|
110
|
+
[
|
111
|
+
['build_number', 'specify specific build number (optional, omitting it increments by one)'],
|
112
|
+
['xcodeproj', 'optional, you must specify the path to your main Xcode project if it is not in the project root directory']
|
113
|
+
]
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.output
|
117
|
+
[
|
118
|
+
['VERSION_NUMBER', 'The new version number']
|
119
|
+
]
|
120
|
+
end
|
121
|
+
|
122
|
+
def self.author
|
123
|
+
"serluca"
|
124
|
+
end
|
96
125
|
end
|
97
126
|
end
|
98
127
|
end
|
@@ -1,9 +1,17 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
class CarthageAction
|
3
|
+
class CarthageAction < Action
|
4
4
|
def self.run(_params)
|
5
5
|
Actions.sh('carthage bootstrap')
|
6
6
|
end
|
7
|
+
|
8
|
+
def self.description
|
9
|
+
"Runs `carthage bootstrap` for your project"
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.author
|
13
|
+
"bassrock"
|
14
|
+
end
|
7
15
|
end
|
8
16
|
end
|
9
17
|
end
|
data/lib/fastlane/actions/ipa.rb
CHANGED
@@ -5,19 +5,19 @@ module Fastlane
|
|
5
5
|
DSYM_OUTPUT_PATH = :DSYM_OUTPUT_PATH
|
6
6
|
end
|
7
7
|
|
8
|
-
# -w, --workspace
|
9
|
-
# -p, --project PROJECT
|
8
|
+
# -w, --workspace WORKSPACE Workspace (.xcworkspace) file to use to build app (automatically detected in current directory)
|
9
|
+
# -p, --project PROJECT Project (.xcodeproj) file to use to build app (automatically detected in current directory, overridden by --workspace option, if passed)
|
10
10
|
# -c, --configuration CONFIGURATION Configuration used to build
|
11
|
-
# -s, --scheme SCHEME
|
12
|
-
# --xcconfig XCCONFIG
|
13
|
-
# --xcargs XCARGS
|
14
|
-
# --[no-]clean
|
15
|
-
# --[no-]archive
|
16
|
-
# -d, --destination DESTINATION
|
17
|
-
# -m, --embed PROVISION
|
18
|
-
# -i, --identity IDENTITY
|
19
|
-
# --sdk SDK
|
20
|
-
# --ipa IPA
|
11
|
+
# -s, --scheme SCHEME Scheme used to build app
|
12
|
+
# --xcconfig XCCONFIG use an extra XCCONFIG file to build the app
|
13
|
+
# --xcargs XCARGS pass additional arguments to xcodebuild when building the app. Be sure to quote multiple args.
|
14
|
+
# --[no-]clean Clean project before building
|
15
|
+
# --[no-]archive Archive project after building
|
16
|
+
# -d, --destination DESTINATION Destination. Defaults to current directory
|
17
|
+
# -m, --embed PROVISION Sign .ipa file with .mobileprovision
|
18
|
+
# -i, --identity IDENTITY Identity to be used along with --embed
|
19
|
+
# --sdk SDK use SDK as the name or path of the base SDK when building the project
|
20
|
+
# --ipa IPA specify the name of the .ipa file to generate (including file extension)
|
21
21
|
|
22
22
|
ARGS_MAP = {
|
23
23
|
workspace: '-w',
|
@@ -35,7 +35,7 @@ module Fastlane
|
|
35
35
|
xcargs: '--xcargs',
|
36
36
|
}
|
37
37
|
|
38
|
-
class IpaAction
|
38
|
+
class IpaAction < Action
|
39
39
|
def self.run(params)
|
40
40
|
# The args we will build with
|
41
41
|
build_args = nil
|
@@ -122,6 +122,45 @@ module Fastlane
|
|
122
122
|
# Finds last modified .dSYM.zip in the destination directory
|
123
123
|
Dir[File.join(dir, '*.dSYM.zip')].sort { |a, b| File.mtime(b) <=> File.mtime(a) }.first
|
124
124
|
end
|
125
|
+
|
126
|
+
def self.description
|
127
|
+
"Easily build and sign your app using shenzhen"
|
128
|
+
end
|
129
|
+
|
130
|
+
def self.details
|
131
|
+
[
|
132
|
+
"More information on the shenzhen project page: https://github.com/nomad/shenzhen"
|
133
|
+
].join(' ')
|
134
|
+
end
|
135
|
+
|
136
|
+
def self.available_options
|
137
|
+
[
|
138
|
+
['workspace', 'Workspace (.xcworkspace) file to use to build app (automatically detected in current directory)'],
|
139
|
+
['project', 'Project (.xcodeproj) file to use to build app (automatically detected in current directory'],
|
140
|
+
['configuration', 'Configuration used to build'],
|
141
|
+
['scheme', 'Scheme used to build app'],
|
142
|
+
['clean', 'use an extra XCCONFIG file to build the app'],
|
143
|
+
['archive', 'pass additional arguments to xcodebuild when building the app. Be sure to quote multiple args.'],
|
144
|
+
['destination', 'Clean project before building'],
|
145
|
+
['embed', 'Archive project after building'],
|
146
|
+
['identity', 'Destination. Defaults to current directory'],
|
147
|
+
['sdk', 'Sign .ipa file with .mobileprovision'],
|
148
|
+
['ipa', 'Identity to be used along with --embed'],
|
149
|
+
['verbose', 'use SDK as the name or path of the base SDK when building the project'],
|
150
|
+
['xcargs', 'specify the name of the .ipa file to generate (including file extension)']
|
151
|
+
]
|
152
|
+
end
|
153
|
+
|
154
|
+
def self.output
|
155
|
+
[
|
156
|
+
['IPA_OUTPUT_PATH', 'The path to the newly generated ipa file'],
|
157
|
+
['DSYM_OUTPUT_PATH', 'The path to the dsym file']
|
158
|
+
]
|
159
|
+
end
|
160
|
+
|
161
|
+
def self.author
|
162
|
+
"joshdholtz"
|
163
|
+
end
|
125
164
|
end
|
126
165
|
end
|
127
166
|
end
|
@@ -1,12 +1,20 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
class NotifyAction
|
3
|
+
class NotifyAction < Action
|
4
4
|
def self.run(params)
|
5
5
|
require 'terminal-notifier'
|
6
6
|
|
7
7
|
text = params.join(' ')
|
8
8
|
TerminalNotifier.notify(text, title: 'fastlane')
|
9
9
|
end
|
10
|
+
|
11
|
+
def self.description
|
12
|
+
"Shows a Mac OS X notification"
|
13
|
+
end
|
14
|
+
|
15
|
+
def author
|
16
|
+
"champo"
|
17
|
+
end
|
10
18
|
end
|
11
19
|
end
|
12
20
|
end
|