branch_io_cli 0.13.0 → 0.13.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/branch_io_cli/branch_app.rb +1 -1
- data/lib/branch_io_cli/command/report_command.rb +18 -12
- data/lib/branch_io_cli/configuration/configuration.rb +5 -2
- data/lib/branch_io_cli/configuration/environment.rb +3 -1
- data/lib/branch_io_cli/configuration/report_configuration.rb +4 -4
- data/lib/branch_io_cli/configuration/setup_configuration.rb +1 -1
- data/lib/branch_io_cli/configuration/validate_configuration.rb +1 -1
- data/lib/branch_io_cli/configuration/xcode_settings.rb +7 -2
- data/lib/branch_io_cli/core_ext/io.rb +21 -4
- data/lib/branch_io_cli/helper.rb +1 -0
- data/lib/branch_io_cli/helper/ios_helper.rb +1 -1
- data/lib/branch_io_cli/helper/task.rb +34 -0
- data/lib/branch_io_cli/helper/tool_helper.rb +18 -13
- data/lib/branch_io_cli/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d070eebc7fcafbeca391b9bd8e319b2dd204ea3e06b50e5c03d2140003251fc5
|
4
|
+
data.tar.gz: 901ecc88737470df07c08aff6a076ed210f109c6797d92e654ae2c730341d206
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac7ca487cadb9cd19525381b88e9e994974a7693d306d2279e7b975c2aff778cdc1605b8d24f44a756e7afc9ea8cf92e3b45c5273d8944436316172c301b2bdc
|
7
|
+
data.tar.gz: 68f31555998ecfcfd1e2c36e59e939572304f5d8beb4b67de15f8a37bf6003731587448ade32f8fa0474dbebfec37cd503b04d89dd1d6aa085fb3f8dd24eb9d9
|
data/README.md
CHANGED
@@ -38,6 +38,7 @@ branch_io -h
|
|
38
38
|
branch_io setup -h
|
39
39
|
branch_io validate -h
|
40
40
|
branch_io report -h
|
41
|
+
branch_io env -h
|
41
42
|
```
|
42
43
|
|
43
44
|
The gem also installs `br` as an alias for `branch_io`:
|
@@ -47,6 +48,7 @@ br -h
|
|
47
48
|
br setup -h
|
48
49
|
br validate -h
|
49
50
|
br report -h
|
51
|
+
br env -h
|
50
52
|
```
|
51
53
|
|
52
54
|
### Shell completion
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "shellwords"
|
2
|
+
require "tty/spinner"
|
2
3
|
|
3
4
|
module BranchIOCLI
|
4
5
|
module Command
|
@@ -6,14 +7,17 @@ module BranchIOCLI
|
|
6
7
|
def run!
|
7
8
|
say "\n"
|
8
9
|
|
9
|
-
|
10
|
+
task = Helper::Task.new
|
11
|
+
task.begin "Loading settings from Xcode."
|
12
|
+
|
10
13
|
# In case running in a non-CLI context (e.g., Rake or Fastlane) be sure
|
11
14
|
# to reset Xcode settings each time, since project, target and
|
12
15
|
# configurations will change.
|
13
16
|
Configuration::XcodeSettings.reset
|
14
17
|
if Configuration::XcodeSettings.all_valid?
|
15
|
-
|
18
|
+
task.success "Done."
|
16
19
|
else
|
20
|
+
task.error "Failed."
|
17
21
|
say "Failed to load settings from Xcode. Some information may be missing.\n"
|
18
22
|
end
|
19
23
|
|
@@ -50,13 +54,13 @@ module BranchIOCLI
|
|
50
54
|
tool_helper.carthage_bootstrap_if_required report
|
51
55
|
|
52
56
|
# run xcodebuild -list
|
53
|
-
report.sh(*report_helper.base_xcodebuild_cmd, "-list")
|
57
|
+
report.sh(*report_helper.base_xcodebuild_cmd, "-list", obfuscate: true)
|
54
58
|
|
55
59
|
# If using a workspace, -list all the projects as well
|
56
60
|
if config.workspace_path
|
57
61
|
config.workspace.file_references.map(&:path).each do |project_path|
|
58
62
|
path = File.join File.dirname(config.workspace_path), project_path
|
59
|
-
report.sh "xcodebuild", "-list", "-project", path
|
63
|
+
report.sh "xcodebuild", "-list", "-project", path, obfuscate: true
|
60
64
|
end
|
61
65
|
end
|
62
66
|
|
@@ -77,19 +81,21 @@ module BranchIOCLI
|
|
77
81
|
]
|
78
82
|
|
79
83
|
if config.clean
|
80
|
-
|
81
|
-
|
82
|
-
|
84
|
+
task = Helper::Task.new use_spinner: report != STDOUT
|
85
|
+
task.begin "Cleaning."
|
86
|
+
if report.sh(*base_cmd, "clean", obfuscate: true).success?
|
87
|
+
task.success "Done."
|
83
88
|
else
|
84
|
-
|
89
|
+
task.error "Clean failed."
|
85
90
|
end
|
86
91
|
end
|
87
92
|
|
88
|
-
|
89
|
-
|
90
|
-
|
93
|
+
task = Helper::Task.new use_spinner: report != STDOUT
|
94
|
+
task.begin "Building."
|
95
|
+
if report.sh(*base_cmd, "-verbose", obfuscate: true).success?
|
96
|
+
task.success "Done."
|
91
97
|
else
|
92
|
-
|
98
|
+
task.error "Failed."
|
93
99
|
end
|
94
100
|
end
|
95
101
|
|
@@ -130,6 +130,10 @@ EOF
|
|
130
130
|
target.name.nil? ? nil : target.name
|
131
131
|
end
|
132
132
|
|
133
|
+
def env
|
134
|
+
Environment
|
135
|
+
end
|
136
|
+
|
133
137
|
def root
|
134
138
|
return @root if @root
|
135
139
|
if workspace
|
@@ -327,8 +331,7 @@ EOF
|
|
327
331
|
end
|
328
332
|
|
329
333
|
def pod_install_required?
|
330
|
-
|
331
|
-
return false unless podfile_path
|
334
|
+
return false unless podfile_path && File.exist?(podfile_path)
|
332
335
|
|
333
336
|
lockfile_path = "#{podfile_path}.lock"
|
334
337
|
manifest_path = File.expand_path "../Pods/Manifest.lock", podfile_path
|
@@ -88,15 +88,17 @@ module BranchIOCLI
|
|
88
88
|
if terminal
|
89
89
|
"<%= color('#{label}:', BOLD) %> #{value}\n"
|
90
90
|
else
|
91
|
-
"label: #{value}\n"
|
91
|
+
"#{label}: #{value}\n"
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
95
|
def obfuscate_user(path)
|
96
|
+
return nil if path.nil?
|
96
97
|
path.gsub(ENV['HOME'], '~').gsub(ENV['USER'], '$USER')
|
97
98
|
end
|
98
99
|
|
99
100
|
def display_path(path)
|
101
|
+
return nil if path.nil?
|
100
102
|
path = path.gsub(Gem.dir, '$GEM_HOME')
|
101
103
|
path = obfuscate_user(path)
|
102
104
|
path
|
@@ -50,8 +50,8 @@ module BranchIOCLI
|
|
50
50
|
<<EOF
|
51
51
|
Configuration:
|
52
52
|
|
53
|
-
Xcode workspace: #{workspace_path || '(none)'}
|
54
|
-
Xcode project: #{xcodeproj_path || '(none)'}
|
53
|
+
Xcode workspace: #{env.display_path(workspace_path) || '(none)'}
|
54
|
+
Xcode project: #{env.display_path(xcodeproj_path) || '(none)'}
|
55
55
|
Scheme: #{scheme || '(none)'}
|
56
56
|
Target: #{target || '(none)'}
|
57
57
|
Configuration: #{configuration || '(none)'}
|
@@ -66,8 +66,8 @@ EOF
|
|
66
66
|
def log
|
67
67
|
super
|
68
68
|
say <<EOF
|
69
|
-
<%= color('Xcode workspace:', BOLD) %> #{workspace_path || '(none)'}
|
70
|
-
<%= color('Xcode project:', BOLD) %> #{xcodeproj_path || '(none)'}
|
69
|
+
<%= color('Xcode workspace:', BOLD) %> #{env.display_path(workspace_path) || '(none)'}
|
70
|
+
<%= color('Xcode project:', BOLD) %> #{env.display_path(xcodeproj_path) || '(none)'}
|
71
71
|
<%= color('Scheme:', BOLD) %> #{scheme || '(none)'}
|
72
72
|
<%= color('Target:', BOLD) %> #{target || '(none)'}
|
73
73
|
<%= color('Target type:', BOLD) %> #{target.product_type}
|
@@ -73,7 +73,7 @@ module BranchIOCLI
|
|
73
73
|
def log
|
74
74
|
super
|
75
75
|
message = <<-EOF
|
76
|
-
<%= color('Xcode project:', BOLD) %> #{xcodeproj_path}
|
76
|
+
<%= color('Xcode project:', BOLD) %> #{env.display_path(xcodeproj_path)}
|
77
77
|
<%= color('Target:', BOLD) %> #{target.name}
|
78
78
|
<%= color('Target type:', BOLD) %> #{target.product_type}
|
79
79
|
<%= color('Live key:', BOLD) %> #{keys[:live] || '(none)'}
|
@@ -34,7 +34,7 @@ module BranchIOCLI
|
|
34
34
|
def log
|
35
35
|
super
|
36
36
|
say <<EOF
|
37
|
-
<%= color('Xcode project:', BOLD) %> #{xcodeproj_path}
|
37
|
+
<%= color('Xcode project:', BOLD) %> #{env.display_path(xcodeproj_path)}
|
38
38
|
<%= color('Target:', BOLD) %> #{target.name}
|
39
39
|
<%= color('Target type:', BOLD) %> #{target.product_type}
|
40
40
|
<%= color('Live key:', BOLD) %> #{keys[:live] || '(none)'}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require "open3"
|
2
2
|
require "shellwords"
|
3
|
+
require_relative "environment"
|
3
4
|
|
4
5
|
module BranchIOCLI
|
5
6
|
module Configuration
|
@@ -41,6 +42,10 @@ module BranchIOCLI
|
|
41
42
|
Configuration.current
|
42
43
|
end
|
43
44
|
|
45
|
+
def env
|
46
|
+
Environment
|
47
|
+
end
|
48
|
+
|
44
49
|
def [](key)
|
45
50
|
@xcode_settings[key]
|
46
51
|
end
|
@@ -65,7 +70,7 @@ module BranchIOCLI
|
|
65
70
|
@xcode_settings = {}
|
66
71
|
Open3.popen2e(xcodebuild_cmd) do |stdin, output, thread|
|
67
72
|
while (line = output.gets)
|
68
|
-
@xcodebuild_showbuildsettings_output += line
|
73
|
+
@xcodebuild_showbuildsettings_output += env.obfuscate_user(line)
|
69
74
|
line.strip!
|
70
75
|
next unless (matches = /^(.+)\s+=\s+(.+)$/.match line)
|
71
76
|
@xcode_settings[matches[1]] = matches[2]
|
@@ -78,7 +83,7 @@ module BranchIOCLI
|
|
78
83
|
if report == STDOUT
|
79
84
|
say "<%= color('$ #{xcodebuild_cmd}', [MAGENTA, BOLD]) %>\n\n"
|
80
85
|
else
|
81
|
-
report.write "$ #{xcodebuild_cmd}\n\n"
|
86
|
+
report.write "$ #{env.obfuscate_user(xcodebuild_cmd)}\n\n"
|
82
87
|
end
|
83
88
|
|
84
89
|
report.write @xcodebuild_showbuildsettings_output
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require "open3"
|
2
2
|
require "shellwords"
|
3
|
+
require_relative "../configuration/environment"
|
3
4
|
|
4
5
|
class IO
|
5
6
|
# Report the command. Execute the command, capture stdout
|
@@ -11,10 +12,16 @@ class IO
|
|
11
12
|
def sh(*args)
|
12
13
|
write "$ #{IO.command_from_args(*args)}\n\n"
|
13
14
|
|
15
|
+
obfuscate = args.last.delete(:obfuscate) if args.last.kind_of?(Hash)
|
16
|
+
|
14
17
|
Open3.popen2e(*args) do |stdin, output, thread|
|
15
18
|
# output is stdout and stderr merged
|
16
|
-
|
17
|
-
|
19
|
+
output.each do |line|
|
20
|
+
if obfuscate
|
21
|
+
puts BranchIOCLI::Configuration::Environment.obfuscate_user(line)
|
22
|
+
else
|
23
|
+
puts line
|
24
|
+
end
|
18
25
|
end
|
19
26
|
|
20
27
|
status = thread.value
|
@@ -34,9 +41,12 @@ end
|
|
34
41
|
#
|
35
42
|
# @param command a shell command to execute and report
|
36
43
|
def STDOUT.sh(*args)
|
44
|
+
args.last.delete(:obfuscate) if args.last.kind_of?(Hash)
|
45
|
+
|
37
46
|
# TODO: Improve this implementation?
|
38
47
|
say "<%= color(%q{$ #{IO.command_from_args(*args)}}, [MAGENTA, BOLD]) %>\n\n"
|
39
48
|
# May also write to stderr
|
49
|
+
# Cannot obfuscate here.
|
40
50
|
system(*args)
|
41
51
|
|
42
52
|
status = $?
|
@@ -52,7 +62,10 @@ def IO.command_from_args(*args)
|
|
52
62
|
raise ArgumentError, "sh requires at least one argument" unless args.count > 0
|
53
63
|
|
54
64
|
# Ignore any trailing options in the output
|
55
|
-
|
65
|
+
if args.last.kind_of?(Hash)
|
66
|
+
options = args.pop
|
67
|
+
obfuscate = options[:obfuscate]
|
68
|
+
end
|
56
69
|
|
57
70
|
command = ""
|
58
71
|
|
@@ -71,5 +84,9 @@ def IO.command_from_args(*args)
|
|
71
84
|
command += args.shelljoin
|
72
85
|
end
|
73
86
|
|
74
|
-
|
87
|
+
if obfuscate
|
88
|
+
BranchIOCLI::Configuration::Environment.obfuscate_user(command)
|
89
|
+
else
|
90
|
+
command
|
91
|
+
end
|
75
92
|
end
|
data/lib/branch_io_cli/helper.rb
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
require "tty/spinner"
|
2
|
+
|
3
|
+
module BranchIOCLI
|
4
|
+
module Helper
|
5
|
+
class Task
|
6
|
+
def initialize(use_spinner: true)
|
7
|
+
@use_spinner = use_spinner
|
8
|
+
end
|
9
|
+
|
10
|
+
def use_spinner?
|
11
|
+
@use_spinner
|
12
|
+
end
|
13
|
+
|
14
|
+
def begin(message)
|
15
|
+
if use_spinner?
|
16
|
+
@spinner = TTY::Spinner.new "[:spinner] #{message}", format: :flip
|
17
|
+
@spinner.auto_spin
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def success(message)
|
22
|
+
if use_spinner?
|
23
|
+
@spinner.success message
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def error(message)
|
28
|
+
if use_spinner?
|
29
|
+
@spinner.error message
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -31,7 +31,7 @@ module BranchIOCLI
|
|
31
31
|
install_command = %w(pod install)
|
32
32
|
install_command << "--repo-update" if options.pod_repo_update
|
33
33
|
Dir.chdir(File.dirname(podfile_path)) do
|
34
|
-
sh
|
34
|
+
sh "pod", "init"
|
35
35
|
PatternPatch::Patch.new(
|
36
36
|
regexp: /^(\s*)# Pods for #{options.target.name}$/,
|
37
37
|
mode: :append,
|
@@ -77,7 +77,7 @@ github "BranchMetrics/ios-branch-deep-linking"
|
|
77
77
|
end
|
78
78
|
|
79
79
|
# 2. carthage update
|
80
|
-
sh "carthage", options.carthage_command, chdir: File.dirname(config.cartfile_path)
|
80
|
+
sh "carthage", *options.carthage_command.shellsplit, chdir: File.dirname(config.cartfile_path)
|
81
81
|
|
82
82
|
# 3. Add Cartfile and Cartfile.resolved to commit (in case :commit param specified)
|
83
83
|
helper.add_change cartfile_path
|
@@ -193,7 +193,6 @@ github "BranchMetrics/ios-branch-deep-linking"
|
|
193
193
|
return false unless PatchHelper.patch_podfile podfile_path
|
194
194
|
|
195
195
|
# 2. pod install
|
196
|
-
# command = "PATH='#{ENV['PATH']}' pod install"
|
197
196
|
command = %w(pod install)
|
198
197
|
command << '--repo-update' if options.pod_repo_update
|
199
198
|
|
@@ -306,7 +305,7 @@ github "BranchMetrics/ios-branch-deep-linking"
|
|
306
305
|
|
307
306
|
# Ensure master podspec repo is set up (will update if it exists).
|
308
307
|
say "Synching master podspec repo. This may take some time."
|
309
|
-
sh
|
308
|
+
sh "pod", "setup"
|
310
309
|
say "Done ✅"
|
311
310
|
end
|
312
311
|
|
@@ -326,7 +325,7 @@ github "BranchMetrics/ios-branch-deep-linking"
|
|
326
325
|
exit(-1)
|
327
326
|
end
|
328
327
|
|
329
|
-
sh
|
328
|
+
sh "brew", "install", "carthage"
|
330
329
|
end
|
331
330
|
|
332
331
|
def verify_git
|
@@ -347,7 +346,7 @@ github "BranchMetrics/ios-branch-deep-linking"
|
|
347
346
|
exit(-1)
|
348
347
|
end
|
349
348
|
|
350
|
-
sh
|
349
|
+
sh "xcode-select", "--install"
|
351
350
|
end
|
352
351
|
|
353
352
|
def pod_install_if_required(report = STDOUT)
|
@@ -378,11 +377,13 @@ some cases. If that happens, please rerun without --no-pod-repo-update or run
|
|
378
377
|
EOF
|
379
378
|
end
|
380
379
|
|
380
|
+
task = Task.new use_spinner: report != STDOUT
|
381
381
|
# included by sh, but this is to the screen when generating a report.
|
382
|
-
|
382
|
+
task.begin "Running #{IO.command_from_args(*install_command)}."
|
383
383
|
if report.sh(*install_command).success?
|
384
|
-
|
384
|
+
task.success "Done."
|
385
385
|
else
|
386
|
+
task.error "Failed."
|
386
387
|
say "#{IO.command_from_args(*install_command)} failed. See report for details."
|
387
388
|
return false
|
388
389
|
end
|
@@ -408,22 +409,26 @@ some cases. If that happens, please rerun without --no-pod-repo-update or run
|
|
408
409
|
|
409
410
|
checkout_command = %w(carthage checkout)
|
410
411
|
|
412
|
+
task = Task.new use_spinner: report != STDOUT
|
411
413
|
# included by sh, but this is to the screen when generating a report.
|
412
|
-
|
414
|
+
task.begin "Running #{IO.command_from_args(*checkout_command)}."
|
413
415
|
if report.sh(*checkout_command).success?
|
414
|
-
|
416
|
+
task.success "Done."
|
415
417
|
else
|
418
|
+
task.error "Failed."
|
416
419
|
say "#{IO.command_from_args(*checkout_command)} failed. See report for details."
|
417
420
|
return false
|
418
421
|
end
|
419
422
|
|
420
|
-
build_command =
|
423
|
+
build_command = "carthage", "build", "--platform", "ios"
|
421
424
|
|
425
|
+
task = Task.new use_spinner: report != STDOUT
|
422
426
|
# included by sh, but this is to the screen when generating a report.
|
423
|
-
|
427
|
+
task.begin "Running #{IO.command_from_args(*build_command)}."
|
424
428
|
if report.sh(*build_command).success?
|
425
|
-
|
429
|
+
task.success "Done."
|
426
430
|
else
|
431
|
+
task.error "Failed."
|
427
432
|
say "#{IO.command_from_args(*build_command)} failed. See report for details."
|
428
433
|
return false
|
429
434
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: branch_io_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Branch
|
@@ -414,6 +414,7 @@ files:
|
|
414
414
|
- lib/branch_io_cli/helper/methods.rb
|
415
415
|
- lib/branch_io_cli/helper/patch_helper.rb
|
416
416
|
- lib/branch_io_cli/helper/report_helper.rb
|
417
|
+
- lib/branch_io_cli/helper/task.rb
|
417
418
|
- lib/branch_io_cli/helper/tool_helper.rb
|
418
419
|
- lib/branch_io_cli/helper/util.rb
|
419
420
|
- lib/branch_io_cli/rake_task.rb
|