fastlane_core 0.29.1 → 0.30.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/lib/assets/XMLTemplate.xml.erb +2 -2
- data/lib/fastlane_core/command_executor.rb +10 -2
- data/lib/fastlane_core/configuration/commander_generator.rb +2 -2
- data/lib/fastlane_core/configuration/config_item.rb +43 -10
- data/lib/fastlane_core/configuration/configuration.rb +5 -4
- data/lib/fastlane_core/ipa_upload_package_builder.rb +3 -2
- data/lib/fastlane_core/print_table.rb +1 -1
- data/lib/fastlane_core/ui/implementations/shell.rb +43 -1
- data/lib/fastlane_core/ui/interface.rb +31 -0
- data/lib/fastlane_core/ui/ui.rb +1 -3
- data/lib/fastlane_core/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f765af55f0a11a0983c37094f5d3ef3152fe1ae4
|
4
|
+
data.tar.gz: 185c80d69c241ad8ba747f783566da2030de6470
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 231898cba50047e62739d620452e69f28e4c4a41ce96ac43caac3d0f41e285cb0a45a08c746632092a95a7b031ffa58a8b6c72c739ce059c03ca43bf1aeceda8
|
7
|
+
data.tar.gz: 71c2c7bb47ba0afdd4159ff0e05b389b119f9bfd51bdc227a50414a26d34ed4894b622dfd4906e67888606fe012c29a1e39bb6df3e15d3b7d6af6e9a7bd43919
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<package xmlns="http://apple.com/itunes/importer" version="
|
3
|
-
<software_assets apple_id="<%= @data[:apple_id] %>">
|
2
|
+
<package xmlns="http://apple.com/itunes/importer" version="software5.4">
|
3
|
+
<software_assets apple_id="<%= @data[:apple_id] %>" app_platform="<%= data[:platform] %>">
|
4
4
|
<asset type="bundle">
|
5
5
|
<data_file>
|
6
6
|
<size><%= @data[:file_size] %></size>
|
@@ -44,7 +44,11 @@ module FastlaneCore
|
|
44
44
|
output << ex.to_s
|
45
45
|
o = output.join("\n")
|
46
46
|
puts o
|
47
|
-
error
|
47
|
+
if error
|
48
|
+
error.call(o, nil)
|
49
|
+
else
|
50
|
+
raise ex
|
51
|
+
end
|
48
52
|
end
|
49
53
|
|
50
54
|
# Exit status for build command, should be 0 if build succeeded
|
@@ -53,7 +57,11 @@ module FastlaneCore
|
|
53
57
|
o = output.join("\n")
|
54
58
|
puts o # the user has the right to see the raw output
|
55
59
|
UI.error "Exit status: #{status}"
|
56
|
-
error
|
60
|
+
if error
|
61
|
+
error.call(o, status)
|
62
|
+
else
|
63
|
+
raise "Exit status: #{status}"
|
64
|
+
end
|
57
65
|
end
|
58
66
|
|
59
67
|
return output.join("\n")
|
@@ -13,8 +13,8 @@ module FastlaneCore
|
|
13
13
|
options.each do |option|
|
14
14
|
next if option.description.to_s.length == 0 # "private" options
|
15
15
|
|
16
|
-
appendix = (option.
|
17
|
-
type =
|
16
|
+
appendix = (option.string? ? "STRING" : "")
|
17
|
+
type = option.data_type
|
18
18
|
short_option = option.short_option
|
19
19
|
|
20
20
|
raise "Short option #{short_option} already taken for key #{option.key}".red if short_codes.include? short_option
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module FastlaneCore
|
2
2
|
class ConfigItem
|
3
|
-
attr_accessor :key, :env_name, :description, :short_option, :default_value, :verify_block, :
|
3
|
+
attr_accessor :key, :env_name, :description, :short_option, :default_value, :verify_block, :optional
|
4
4
|
|
5
5
|
# Creates a new option
|
6
6
|
# @param key (Symbol) the key which is used as command paramters or key in the fastlane tools
|
@@ -11,11 +11,13 @@ module FastlaneCore
|
|
11
11
|
# @param verify_block an optional block which is called when a new value is set.
|
12
12
|
# Check value is valid. This could be type checks or if a folder/file exists
|
13
13
|
# You have to raise a specific exception if something goes wrong. Append .red after the string
|
14
|
-
# @param is_string (
|
14
|
+
# @param is_string *DEPRECATED* (Boolean) is that parameter a string? Defaults to true. If it's true, the type string will be verified.
|
15
|
+
# @param type (Class) the data type of this config item. Takes precedence over `is_string`
|
15
16
|
# @param optional (Boolean) is false by default. If set to true, also string values will not be asked to the user
|
16
|
-
def initialize(key: nil, env_name: nil, description: nil, short_option: nil, default_value: nil, verify_block: nil, is_string: true, optional: false)
|
17
|
+
def initialize(key: nil, env_name: nil, description: nil, short_option: nil, default_value: nil, verify_block: nil, is_string: true, type: nil, optional: false)
|
17
18
|
raise "key must be a symbol" unless key.kind_of? Symbol
|
18
19
|
raise "env_name must be a String" unless (env_name || '').kind_of? String
|
20
|
+
|
19
21
|
if short_option
|
20
22
|
raise "short_option must be a String of length 1" unless short_option.kind_of? String and short_option.delete('-').length == 1
|
21
23
|
end
|
@@ -23,6 +25,10 @@ module FastlaneCore
|
|
23
25
|
raise "Do not let descriptions end with a '.', since it's used for user inputs as well".red if description[-1] == '.'
|
24
26
|
end
|
25
27
|
|
28
|
+
if type.to_s.length > 0 and short_option.to_s.length == 0
|
29
|
+
raise "Type '#{type}' for key '#{key}' requires a short option"
|
30
|
+
end
|
31
|
+
|
26
32
|
@key = key
|
27
33
|
@env_name = env_name
|
28
34
|
@description = description
|
@@ -30,6 +36,7 @@ module FastlaneCore
|
|
30
36
|
@default_value = default_value
|
31
37
|
@verify_block = verify_block
|
32
38
|
@is_string = is_string
|
39
|
+
@data_type = type
|
33
40
|
@optional = optional
|
34
41
|
end
|
35
42
|
|
@@ -44,7 +51,7 @@ module FastlaneCore
|
|
44
51
|
def valid?(value)
|
45
52
|
# we also allow nil values, which do not have to be verified.
|
46
53
|
if value
|
47
|
-
if
|
54
|
+
if string?
|
48
55
|
raise "'#{self.key}' value must be a String! Found #{value.class} instead.".red unless value.kind_of? String
|
49
56
|
end
|
50
57
|
|
@@ -63,14 +70,40 @@ module FastlaneCore
|
|
63
70
|
|
64
71
|
# Returns an updated value type (if necessary)
|
65
72
|
def auto_convert_value(value)
|
66
|
-
#
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
value
|
73
|
+
# Weird because of https://stackoverflow.com/questions/9537895/using-a-class-object-in-case-statement
|
74
|
+
|
75
|
+
case
|
76
|
+
when data_type == Array
|
77
|
+
return value.split(',') if value.kind_of?(String)
|
78
|
+
when data_type == Integer
|
79
|
+
return value.to_i
|
80
|
+
when data_type == Float
|
81
|
+
return value.to_f
|
82
|
+
else
|
83
|
+
# Special treatment if the user specififed true, false or YES, NO
|
84
|
+
# There is no boolean typoe, so we just do it here
|
85
|
+
if %w(YES yes true).include?(value)
|
86
|
+
return true
|
87
|
+
elsif %w(NO no false).include?(value)
|
88
|
+
return false
|
89
|
+
end
|
71
90
|
end
|
72
91
|
|
73
|
-
return value
|
92
|
+
return value # fallback to not doing anything
|
93
|
+
end
|
94
|
+
|
95
|
+
# Determines the defined data type of this ConfigItem
|
96
|
+
def data_type
|
97
|
+
if @data_type
|
98
|
+
@data_type
|
99
|
+
else
|
100
|
+
(@is_string ? String : nil)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# Replaces the attr_accessor, but maintains the same interface
|
105
|
+
def string?
|
106
|
+
data_type == String
|
74
107
|
end
|
75
108
|
|
76
109
|
def to_s
|
@@ -120,7 +120,8 @@ module FastlaneCore
|
|
120
120
|
#####################################################
|
121
121
|
|
122
122
|
# Returns the value for a certain key. fastlane_core tries to fetch the value from different sources
|
123
|
-
|
123
|
+
# if 'ask' is true and the value is not present, the user will be prompted to provide a value
|
124
|
+
def fetch(key, ask: true)
|
124
125
|
raise "Key '#{key}' must be a symbol. Example :app_id.".red unless key.kind_of?(Symbol)
|
125
126
|
|
126
127
|
option = option_for_key(key)
|
@@ -132,12 +133,12 @@ module FastlaneCore
|
|
132
133
|
|
133
134
|
# `if value == nil` instead of ||= because false is also a valid value
|
134
135
|
if value.nil? and option.env_name and ENV[option.env_name]
|
135
|
-
value = ENV[option.env_name].dup
|
136
|
+
value = option.auto_convert_value(ENV[option.env_name].dup)
|
136
137
|
option.verify!(value) if value
|
137
138
|
end
|
138
139
|
|
139
140
|
value = option.default_value if value.nil?
|
140
|
-
value = nil if value.nil? and !option.
|
141
|
+
value = nil if value.nil? and !option.string? # by default boolean flags are false
|
141
142
|
|
142
143
|
return value unless value.nil? # we already have a value
|
143
144
|
return value if option.optional # as this value is not required, just return what we have
|
@@ -150,7 +151,7 @@ module FastlaneCore
|
|
150
151
|
raise "No value found for '#{key}'"
|
151
152
|
end
|
152
153
|
|
153
|
-
while value.nil?
|
154
|
+
while ask && value.nil?
|
154
155
|
Helper.log.info "To not be asked about this value, you can specify it using '#{option.key}'".yellow
|
155
156
|
value = ask("#{option.description}: ")
|
156
157
|
# Also store this value to use it from now on
|
@@ -7,7 +7,7 @@ module FastlaneCore
|
|
7
7
|
|
8
8
|
attr_accessor :package_path
|
9
9
|
|
10
|
-
def generate(app_id: nil, ipa_path: nil, package_path: nil)
|
10
|
+
def generate(app_id: nil, ipa_path: nil, package_path: nil, platform: nil)
|
11
11
|
self.package_path = File.join(package_path, "#{app_id}.itmsp")
|
12
12
|
FileUtils.rm_rf self.package_path if File.directory?(self.package_path)
|
13
13
|
FileUtils.mkdir_p self.package_path
|
@@ -19,7 +19,8 @@ module FastlaneCore
|
|
19
19
|
apple_id: app_id,
|
20
20
|
file_size: File.size(ipa_path),
|
21
21
|
ipa_path: File.basename(ipa_path), # this is only the base name as the ipa is inside the package
|
22
|
-
md5: Digest::MD5.hexdigest(File.read(ipa_path))
|
22
|
+
md5: Digest::MD5.hexdigest(File.read(ipa_path)),
|
23
|
+
platform: (platform || "ios") # pass "appletvos" for Apple TV's IPA
|
23
24
|
}
|
24
25
|
|
25
26
|
xml_path = File.join(lib_path, "lib/assets/XMLTemplate.xml.erb")
|
@@ -8,7 +8,7 @@ module FastlaneCore
|
|
8
8
|
rows = []
|
9
9
|
|
10
10
|
config.available_options.each do |config_item|
|
11
|
-
value = config.
|
11
|
+
value = config.fetch(config_item.key, ask: false) # Don't ask the user for missing values at this point
|
12
12
|
next if value.nil?
|
13
13
|
next if value.to_s == ""
|
14
14
|
next if hide_keys.include?(config_item.key)
|
@@ -67,6 +67,40 @@ module FastlaneCore
|
|
67
67
|
Helper.log.info(("-" * i).green)
|
68
68
|
end
|
69
69
|
|
70
|
+
#####################################################
|
71
|
+
# @!group Errors: Inputs
|
72
|
+
#####################################################
|
73
|
+
|
74
|
+
def interactive?
|
75
|
+
interactive = true
|
76
|
+
interactive = false if $stdout.isatty == false
|
77
|
+
interactive = false if Helper.ci?
|
78
|
+
return interactive
|
79
|
+
end
|
80
|
+
|
81
|
+
def input(message)
|
82
|
+
verify_interactive!(message)
|
83
|
+
ask(message)
|
84
|
+
end
|
85
|
+
|
86
|
+
def confirm(message)
|
87
|
+
verify_interactive!(message)
|
88
|
+
agree("#{message} (y/n)", true)
|
89
|
+
end
|
90
|
+
|
91
|
+
def select(message, options)
|
92
|
+
verify_interactive!(message)
|
93
|
+
|
94
|
+
important(message)
|
95
|
+
choose(*(options))
|
96
|
+
end
|
97
|
+
|
98
|
+
def password(message)
|
99
|
+
verify_interactive!(message)
|
100
|
+
|
101
|
+
ask(message.yellow) { |q| q.echo = "*" }
|
102
|
+
end
|
103
|
+
|
70
104
|
#####################################################
|
71
105
|
# @!group Errors: Different kinds of exceptions
|
72
106
|
#####################################################
|
@@ -88,7 +122,7 @@ module FastlaneCore
|
|
88
122
|
end
|
89
123
|
|
90
124
|
def user_error!(error_message)
|
91
|
-
error_message = "[!] #{error_message}".red
|
125
|
+
error_message = "\n[!] #{error_message}".red
|
92
126
|
if $verbose
|
93
127
|
# On verbose we want to see the full stack trace
|
94
128
|
raise error_message
|
@@ -96,5 +130,13 @@ module FastlaneCore
|
|
96
130
|
abort(error_message)
|
97
131
|
end
|
98
132
|
end
|
133
|
+
|
134
|
+
private
|
135
|
+
|
136
|
+
def verify_interactive!(message)
|
137
|
+
return if interactive?
|
138
|
+
important(message)
|
139
|
+
crash!("Could not retrieve response as fastlane runs in non-interactive mode")
|
140
|
+
end
|
99
141
|
end
|
100
142
|
end
|
@@ -69,6 +69,37 @@ module FastlaneCore
|
|
69
69
|
not_implemented(__method__)
|
70
70
|
end
|
71
71
|
|
72
|
+
#####################################################
|
73
|
+
# @!group Errors: Inputs
|
74
|
+
#####################################################
|
75
|
+
|
76
|
+
# Is is possible to ask the user questions?
|
77
|
+
def interactive?(_message)
|
78
|
+
not_implemented(__method__)
|
79
|
+
end
|
80
|
+
|
81
|
+
# get a standard text input (single line)
|
82
|
+
def input(_message)
|
83
|
+
not_implemented(__method__)
|
84
|
+
end
|
85
|
+
|
86
|
+
# A simple yes or no question
|
87
|
+
def confirm(_message)
|
88
|
+
not_implemented(__method__)
|
89
|
+
end
|
90
|
+
|
91
|
+
# Let the user select one out of x items
|
92
|
+
# return value is the value of the option the user chose
|
93
|
+
def select(_message, _options)
|
94
|
+
not_implemented(__method__)
|
95
|
+
end
|
96
|
+
|
97
|
+
# Password input for the user, text field shouldn't show
|
98
|
+
# plain text
|
99
|
+
def password(_message)
|
100
|
+
not_implemented(__method__)
|
101
|
+
end
|
102
|
+
|
72
103
|
#####################################################
|
73
104
|
# @!group Errors: Different kinds of exceptions
|
74
105
|
#####################################################
|
data/lib/fastlane_core/ui/ui.rb
CHANGED
@@ -7,13 +7,11 @@ module FastlaneCore
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.method_missing(method_sym, *args, &_block)
|
10
|
-
raise "Only pass exactly one parameter to UI".red if args.length != 1
|
11
|
-
|
12
10
|
# not using `responds` beacuse we don't care about methods like .to_s and so on
|
13
11
|
interface_methods = Interface.instance_methods - Object.instance_methods
|
14
12
|
raise "Unknown method '#{method_sym}', supported #{interface_methods}" unless interface_methods.include?(method_sym)
|
15
13
|
|
16
|
-
self.current.send(method_sym, args
|
14
|
+
self.current.send(method_sym, *args)
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.30.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-12-
|
11
|
+
date: 2015-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|