cocoapods-binary-ht 1.0.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.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/lib/cocoapods-binary-cache.rb +2 -0
  3. data/lib/cocoapods-binary-ht/cache/all.rb +9 -0
  4. data/lib/cocoapods-binary-ht/cache/validation_result.rb +73 -0
  5. data/lib/cocoapods-binary-ht/cache/validator.rb +20 -0
  6. data/lib/cocoapods-binary-ht/cache/validator_accumulated.rb +4 -0
  7. data/lib/cocoapods-binary-ht/cache/validator_base.rb +112 -0
  8. data/lib/cocoapods-binary-ht/cache/validator_dependencies_graph.rb +25 -0
  9. data/lib/cocoapods-binary-ht/cache/validator_dev_pods.rb +30 -0
  10. data/lib/cocoapods-binary-ht/cache/validator_exclusion.rb +14 -0
  11. data/lib/cocoapods-binary-ht/cache/validator_non_dev_pods.rb +13 -0
  12. data/lib/cocoapods-binary-ht/cache/validator_with_podfile.rb +9 -0
  13. data/lib/cocoapods-binary-ht/dependencies_graph/dependencies_graph.rb +108 -0
  14. data/lib/cocoapods-binary-ht/dependencies_graph/graph_visualizer.rb +65 -0
  15. data/lib/cocoapods-binary-ht/diagnosis/base.rb +13 -0
  16. data/lib/cocoapods-binary-ht/diagnosis/diagnosis.rb +24 -0
  17. data/lib/cocoapods-binary-ht/diagnosis/integration.rb +23 -0
  18. data/lib/cocoapods-binary-ht/env.rb +32 -0
  19. data/lib/cocoapods-binary-ht/helper/benchmark_show.rb +11 -0
  20. data/lib/cocoapods-binary-ht/helper/checksum.rb +18 -0
  21. data/lib/cocoapods-binary-ht/helper/json.rb +37 -0
  22. data/lib/cocoapods-binary-ht/helper/lockfile.rb +90 -0
  23. data/lib/cocoapods-binary-ht/helper/path_utils.rb +8 -0
  24. data/lib/cocoapods-binary-ht/helper/podspec.rb +20 -0
  25. data/lib/cocoapods-binary-ht/hooks/post_install.rb +23 -0
  26. data/lib/cocoapods-binary-ht/hooks/pre_install.rb +121 -0
  27. data/lib/cocoapods-binary-ht/main.rb +21 -0
  28. data/lib/cocoapods-binary-ht/pod-binary/LICENSE.txt +22 -0
  29. data/lib/cocoapods-binary-ht/pod-binary/helper/build.rb +37 -0
  30. data/lib/cocoapods-binary-ht/pod-binary/helper/detected_prebuilt_pods/installer.rb +25 -0
  31. data/lib/cocoapods-binary-ht/pod-binary/helper/detected_prebuilt_pods/target_definition.rb +29 -0
  32. data/lib/cocoapods-binary-ht/pod-binary/helper/names.rb +27 -0
  33. data/lib/cocoapods-binary-ht/pod-binary/helper/podfile_options.rb +2 -0
  34. data/lib/cocoapods-binary-ht/pod-binary/helper/prebuild_sandbox.rb +71 -0
  35. data/lib/cocoapods-binary-ht/pod-binary/helper/sandbox.rb +9 -0
  36. data/lib/cocoapods-binary-ht/pod-binary/helper/target_checker.rb +42 -0
  37. data/lib/cocoapods-binary-ht/pod-binary/integration/alter_specs.rb +150 -0
  38. data/lib/cocoapods-binary-ht/pod-binary/integration/patch/embed_framework_script.rb +36 -0
  39. data/lib/cocoapods-binary-ht/pod-binary/integration/patch/resolve_dependencies.rb +20 -0
  40. data/lib/cocoapods-binary-ht/pod-binary/integration/patch/sandbox_analyzer_state.rb +29 -0
  41. data/lib/cocoapods-binary-ht/pod-binary/integration/patch/source_installation.rb +55 -0
  42. data/lib/cocoapods-binary-ht/pod-binary/integration/source_installer.rb +114 -0
  43. data/lib/cocoapods-binary-ht/pod-binary/integration/validation.rb +20 -0
  44. data/lib/cocoapods-binary-ht/pod-binary/integration.rb +11 -0
  45. data/lib/cocoapods-binary-ht/pod-binary/prebuild.rb +166 -0
  46. data/lib/cocoapods-binary-ht/pod-binary/prebuild_dsl.rb +10 -0
  47. data/lib/cocoapods-binary-ht/pod-binary/prebuild_hook.rb +10 -0
  48. data/lib/cocoapods-binary-ht/pod-rome/LICENSE.txt +22 -0
  49. data/lib/cocoapods-binary-ht/pod-rome/xcodebuild_command.rb +266 -0
  50. data/lib/cocoapods-binary-ht/pod-rome/xcodebuild_raw.rb +68 -0
  51. data/lib/cocoapods-binary-ht/prebuild_output/metadata.rb +63 -0
  52. data/lib/cocoapods-binary-ht/prebuild_output/output.rb +44 -0
  53. data/lib/cocoapods-binary-ht/state_store.rb +21 -0
  54. data/lib/cocoapods-binary-ht/ui.rb +9 -0
  55. data/lib/cocoapods_plugin.rb +5 -0
  56. data/lib/command/binary.rb +37 -0
  57. data/lib/command/config.rb +215 -0
  58. data/lib/command/executor/base.rb +37 -0
  59. data/lib/command/executor/fetcher.rb +67 -0
  60. data/lib/command/executor/prebuilder.rb +61 -0
  61. data/lib/command/executor/pusher.rb +35 -0
  62. data/lib/command/executor/visualizer.rb +23 -0
  63. data/lib/command/fetch.rb +22 -0
  64. data/lib/command/helper/zip.rb +20 -0
  65. data/lib/command/prebuild.rb +47 -0
  66. data/lib/command/push.rb +22 -0
  67. data/lib/command/visualize.rb +34 -0
  68. metadata +209 -0
@@ -0,0 +1,215 @@
1
+ require_relative "../cocoapods-binary-ht/helper/json"
2
+
3
+ module PodPrebuild
4
+ def self.config
5
+ PodPrebuild::Config.instance
6
+ end
7
+
8
+ class Config # rubocop:disable Metrics/ClassLength
9
+ attr_accessor :dsl_config, :cli_config
10
+
11
+ def initialize(path)
12
+ @deprecated_config = File.exist?(path) ? PodPrebuild::JSONFile.new(path).data : {}
13
+ @dsl_config = {}
14
+ @cli_config = {}
15
+ @detected_config = {}
16
+ end
17
+
18
+ def self.instance
19
+ @instance ||= new("PodBinaryCacheConfig.json")
20
+ end
21
+
22
+ def reset!
23
+ @deprecated_config = {}
24
+ @dsl_config = {}
25
+ @cli_config = {}
26
+ end
27
+
28
+ def cache_repo
29
+ @cache_repo ||= cache_repo_config["remote"]
30
+ end
31
+
32
+ def local_cache?
33
+ cache_repo.nil?
34
+ end
35
+
36
+ def cache_path
37
+ @cache_path ||= File.expand_path(cache_repo_config["local"])
38
+ end
39
+
40
+ def prebuild_sandbox_path
41
+ @dsl_config[:prebuild_sandbox_path] || @deprecated_config["prebuild_path"] || "_Prebuild"
42
+ end
43
+
44
+ def prebuild_delta_path
45
+ @dsl_config[:prebuild_delta_path] || @deprecated_config["prebuild_delta_path"] || "_Prebuild_delta/changes.json"
46
+ end
47
+
48
+ def manifest_path(in_cache: false)
49
+ root_dir(in_cache) + "/Manifest.lock"
50
+ end
51
+
52
+ def root_dir(in_cache)
53
+ in_cache ? cache_path : prebuild_sandbox_path
54
+ end
55
+
56
+ def generated_frameworks_dir(in_cache: false)
57
+ root_dir(in_cache) + "/GeneratedFrameworks"
58
+ end
59
+
60
+ def prebuilt_path(path: nil)
61
+ p = Pathname.new(path.nil? ? "_Prebuilt" : "_Prebuilt/#{path}")
62
+ p = p.sub_ext(".xcframework") if xcframework? && p.extname == ".framework"
63
+ p.to_s
64
+ end
65
+
66
+ def validate_dsl_config
67
+ inapplicable_options = @dsl_config.keys - applicable_dsl_config
68
+ return if inapplicable_options.empty?
69
+
70
+ message = <<~HEREDOC
71
+ [WARNING] The following options (in `config_cocoapods_binary_cache`) are not correct: #{inapplicable_options}.
72
+ Available options: #{applicable_dsl_config}.
73
+ Check out the following doc for more details
74
+ https://github.com/pandaleecn/cocoapods-binary-ht/blob/master/docs/configure_cocoapods_binary_cache.md
75
+ HEREDOC
76
+
77
+ Pod::UI.puts message.yellow
78
+ end
79
+
80
+ def prebuild_config
81
+ @cli_config[:prebuild_config] || @dsl_config[:prebuild_config] || "Debug"
82
+ end
83
+
84
+ def prebuild_job?
85
+ @cli_config[:prebuild_job] || @dsl_config[:prebuild_job]
86
+ end
87
+
88
+ def prebuild_all_pods?
89
+ @cli_config[:prebuild_all_pods] || @dsl_config[:prebuild_all_pods]
90
+ end
91
+
92
+ def excluded_pods
93
+ ((@dsl_config[:excluded_pods] || Set.new) + (@detected_config[:excluded_pods] || Set.new)).to_set
94
+ end
95
+
96
+ def dev_pods_enabled?
97
+ @dsl_config[:dev_pods_enabled]
98
+ end
99
+
100
+ def bitcode_enabled?
101
+ @dsl_config[:bitcode_enabled]
102
+ end
103
+
104
+ def device_build_enabled?
105
+ @dsl_config[:device_build_enabled]
106
+ end
107
+
108
+ def xcframework?
109
+ @dsl_config[:xcframework]
110
+ end
111
+
112
+ def disable_dsym?
113
+ @dsl_config[:disable_dsym]
114
+ end
115
+
116
+ def dont_remove_source_code?
117
+ @dsl_config[:dont_remove_source_code]
118
+ end
119
+
120
+ def xcodebuild_log_path
121
+ @dsl_config[:xcodebuild_log_path]
122
+ end
123
+
124
+ def build_args
125
+ @dsl_config[:build_args]
126
+ end
127
+
128
+ def save_cache_validation_to
129
+ @dsl_config[:save_cache_validation_to]
130
+ end
131
+
132
+ def validate_prebuilt_settings
133
+ @dsl_config[:validate_prebuilt_settings]
134
+ end
135
+
136
+ def prebuild_code_gen
137
+ @dsl_config[:prebuild_code_gen]
138
+ end
139
+
140
+ def strict_diagnosis?
141
+ @dsl_config[:strict_diagnosis]
142
+ end
143
+
144
+ def silent_build?
145
+ @dsl_config[:silent_build]
146
+ end
147
+
148
+ def targets_to_prebuild_from_cli
149
+ @cli_config[:prebuild_targets] || []
150
+ end
151
+
152
+ def update_detected_prebuilt_pod_names!(value)
153
+ @detected_config[:prebuilt_pod_names] = value
154
+ end
155
+
156
+ def update_detected_excluded_pods!(value)
157
+ @detected_config[:excluded_pods] = value
158
+ end
159
+
160
+ def prebuilt_pod_names
161
+ @detected_config[:prebuilt_pod_names] || Set.new
162
+ end
163
+
164
+ def tracked_prebuilt_pod_names
165
+ prebuilt_pod_names - excluded_pods
166
+ end
167
+
168
+ private
169
+
170
+ def applicable_dsl_config
171
+ [
172
+ :cache_repo,
173
+ :prebuild_sandbox_path,
174
+ :prebuild_delta_path,
175
+ :prebuild_config,
176
+ :prebuild_job,
177
+ :prebuild_all_pods,
178
+ :excluded_pods,
179
+ :dev_pods_enabled,
180
+ :bitcode_enabled,
181
+ :device_build_enabled,
182
+ :xcframework,
183
+ :disable_dsym,
184
+ :dont_remove_source_code,
185
+ :xcodebuild_log_path,
186
+ :build_args,
187
+ :save_cache_validation_to,
188
+ :validate_prebuilt_settings,
189
+ :prebuild_code_gen,
190
+ :strict_diagnosis,
191
+ :silent_build
192
+ ]
193
+ end
194
+
195
+ def cache_repo_config
196
+ @cache_repo_config ||= begin
197
+ repo = @cli_config[:repo] || "default"
198
+ config_ = @dsl_config[:cache_repo] || {}
199
+ if config_[repo].nil?
200
+ message = <<~HEREDOC
201
+ [Deprecated] Configs in `PodBinaryCacheConfig.json` are deprecated.
202
+ Declare option `cache_repo` in `config_cocoapods_binary_cache` instead.
203
+ Check out the following doc for more details
204
+ https://github.com/pandaleecn/cocoapods-binary-ht/blob/master/docs/configure_cocoapods_binary_cache.md
205
+ HEREDOC
206
+ Pod::UI.puts message.yellow
207
+ end
208
+ config_[repo] || {
209
+ "remote" => @deprecated_config["cache_repo"] || @deprecated_config["prebuilt_cache_repo"],
210
+ "local" => @deprecated_config["cache_path"] || "~/.cocoapods-binary-ht/prebuilt-frameworks"
211
+ }
212
+ end
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,37 @@
1
+ module PodPrebuild
2
+ class CommandExecutor
3
+ def initialize(options)
4
+ @config = options[:config]
5
+ prepare_cache_dir
6
+ end
7
+
8
+ def installer
9
+ @installer ||= begin
10
+ pod_config = Pod::Config.instance
11
+ Pod::Installer.new(pod_config.sandbox, pod_config.podfile, pod_config.lockfile)
12
+ end
13
+ end
14
+
15
+ def use_local_cache?
16
+ @config.cache_repo.nil?
17
+ end
18
+
19
+ def prepare_cache_dir
20
+ FileUtils.mkdir_p(@config.cache_path) if @config.cache_path
21
+ end
22
+
23
+ def git(cmd, options = {})
24
+ comps = ["git"]
25
+ comps << "-C" << @config.cache_path unless options[:cache_repo] == false
26
+ comps << cmd
27
+ comps << "&> /dev/null" if options[:ignore_output]
28
+ comps << "|| true" if options[:can_fail]
29
+ cmd = comps.join(" ")
30
+ raise "Fail to run command '#{cmd}'" unless system(cmd)
31
+ end
32
+
33
+ def git_clone(cmd, options = {})
34
+ git("clone #{cmd}", options.merge(:cache_repo => false))
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,67 @@
1
+ require "parallel"
2
+ require_relative "base"
3
+ require_relative "../helper/zip"
4
+
5
+ module PodPrebuild
6
+ class CacheFetcher < CommandExecutor
7
+ attr_reader :cache_branch
8
+
9
+ def initialize(options)
10
+ super(options)
11
+ @cache_branch = options[:cache_branch]
12
+ end
13
+
14
+ def run
15
+ Pod::UI.step("Fetching cache") do
16
+ if @config.local_cache?
17
+ print_message_for_local_cache(@config.cache_path)
18
+ else
19
+ fetch_remote_cache(@config.cache_repo, @cache_branch, @config.cache_path)
20
+ end
21
+ unzip_cache
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def print_message_for_local_cache(cache_dir)
28
+ Pod::UI.puts "You're using local cache at: #{cache_dir}.".yellow
29
+ message = <<~HEREDOC
30
+ To enable remote cache (with a git repo), add the `remote` field to the repo config in the `cache_repo` option.
31
+ For more details, check out this doc:
32
+ https://github.com/pandaleecn/cocoapods-binary-ht/blob/master/docs/configure_cocoapods_binary_cache.md#cache_repo-
33
+ HEREDOC
34
+ Pod::UI.puts message
35
+ end
36
+
37
+ def fetch_remote_cache(repo, branch, dest_dir)
38
+ Pod::UI.puts "Fetching cache from #{repo} (branch: #{branch})".green
39
+ if Dir.exist?(dest_dir + "/.git")
40
+ git("fetch origin #{branch}")
41
+ git("checkout -f FETCH_HEAD", ignore_output: true)
42
+ git("branch -D #{branch}", ignore_output: true, can_fail: true)
43
+ git("checkout -b #{branch}")
44
+ else
45
+ FileUtils.rm_rf(dest_dir)
46
+ git_clone("--depth=1 --branch=#{branch} #{repo} #{dest_dir}")
47
+ end
48
+ end
49
+
50
+ def unzip_cache
51
+ Pod::UI.puts "Unzipping cache: #{@config.cache_path} -> #{@config.prebuild_sandbox_path}".green
52
+ FileUtils.rm_rf(@config.prebuild_sandbox_path)
53
+ FileUtils.mkdir_p(@config.prebuild_sandbox_path)
54
+
55
+ if File.exist?(@config.manifest_path(in_cache: true))
56
+ FileUtils.cp(
57
+ @config.manifest_path(in_cache: true),
58
+ @config.manifest_path
59
+ )
60
+ end
61
+ zip_paths = Dir[@config.generated_frameworks_dir(in_cache: true) + "/*.zip"]
62
+ Parallel.each(zip_paths, in_threads: 8) do |path|
63
+ ZipUtils.unzip(path, to_dir: @config.generated_frameworks_dir)
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,61 @@
1
+ require_relative "base"
2
+ require_relative "fetcher"
3
+ require_relative "pusher"
4
+
5
+ module PodPrebuild
6
+ class CachePrebuilder < CommandExecutor
7
+ attr_reader :repo_update, :fetcher, :pusher
8
+
9
+ def initialize(options)
10
+ super(options)
11
+ @repo_update = options[:repo_update]
12
+ @fetcher = PodPrebuild::CacheFetcher.new(options) unless options[:no_fetch]
13
+ @pusher = PodPrebuild::CachePusher.new(options) if options[:push_cache]
14
+ end
15
+
16
+ def run
17
+ @fetcher&.run
18
+ prebuild
19
+ changes = PodPrebuild::JSONFile.new(@config.prebuild_delta_path)
20
+ return if changes.empty?
21
+
22
+ sync_cache(changes)
23
+ @pusher&.run
24
+ end
25
+
26
+ private
27
+
28
+ def prebuild
29
+ Pod::UI.step("Installation") do
30
+ installer.repo_update = @repo_update
31
+ installer.install!
32
+ end
33
+ end
34
+
35
+ def sync_cache(changes)
36
+ Pod::UI.step("Syncing cache") do
37
+ FileUtils.cp(@config.manifest_path, @config.manifest_path(in_cache: true))
38
+ clean_cache(changes["deleted"])
39
+ zip_to_cache(changes["updated"])
40
+ end
41
+ end
42
+
43
+ def zip_to_cache(pods_to_update)
44
+ FileUtils.mkdir_p(@config.generated_frameworks_dir(in_cache: true))
45
+ pods_to_update.each do |pod|
46
+ Pod::UI.puts "- Update cache: #{pod}"
47
+ ZipUtils.zip(
48
+ "#{@config.generated_frameworks_dir}/#{pod}",
49
+ to_dir: @config.generated_frameworks_dir(in_cache: true)
50
+ )
51
+ end
52
+ end
53
+
54
+ def clean_cache(pods_to_delete)
55
+ pods_to_delete.each do |pod|
56
+ Pod::UI.puts "- Clean up cache: #{pod}"
57
+ FileUtils.rm_rf("#{@config.generated_frameworks_dir(in_cache: true)}/#{pod}.zip")
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,35 @@
1
+ require_relative "base"
2
+
3
+ module PodPrebuild
4
+ class CachePusher < CommandExecutor
5
+ attr_reader :cache_branch
6
+
7
+ def initialize(options)
8
+ super(options)
9
+ @cache_branch = options[:cache_branch]
10
+ end
11
+
12
+ def run
13
+ Pod::UI.step("Pushing cache") do
14
+ if @config.local_cache?
15
+ print_message_for_local_cache
16
+ else
17
+ commit_and_push_cache
18
+ end
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def print_message_for_local_cache
25
+ Pod::UI.puts "Skip pushing cache as you're using local cache".yellow
26
+ end
27
+
28
+ def commit_and_push_cache
29
+ commit_message = "Update prebuilt cache"
30
+ git("add .")
31
+ git("commit -m '#{commit_message}'")
32
+ git("push origin #{@cache_branch}")
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,23 @@
1
+ require_relative "base"
2
+ require_relative "../../cocoapods-binary-ht/dependencies_graph/dependencies_graph"
3
+
4
+ module PodPrebuild
5
+ class Visualizer < CommandExecutor
6
+ def initialize(options)
7
+ super(options)
8
+ @lockfile = options[:lockfile]
9
+ @open = options[:open]
10
+ @output_dir = options[:output_dir]
11
+ @devpod_only = options[:devpod_only]
12
+ @max_deps = options[:max_deps]
13
+ end
14
+
15
+ def run
16
+ FileUtils.mkdir_p(@output_dir)
17
+ graph = DependenciesGraph.new(lockfile: @lockfile, devpod_only: @devpod_only, max_deps: @max_deps)
18
+ output_path = "#{@output_dir}/graph.png"
19
+ graph.write_graphic_file(output_path: output_path)
20
+ system("open #{@output_path}") if @open
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ require_relative "executor/fetcher"
2
+
3
+ module Pod
4
+ class Command
5
+ class Binary < Command
6
+ class Fetch < Binary
7
+ self.arguments = [CLAide::Argument.new("CACHE-BRANCH", false)]
8
+ def initialize(argv)
9
+ super
10
+ @fetcher = PodPrebuild::CacheFetcher.new(
11
+ config: prebuild_config,
12
+ cache_branch: argv.shift_argument || "master"
13
+ )
14
+ end
15
+
16
+ def run
17
+ @fetcher.run
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ module PodPrebuild
2
+ module ZipUtils
3
+ def self.zip(path, to_dir: nil)
4
+ basename = File.basename(path)
5
+ out_path = to_dir.nil? ? "#{basename}.zip" : "#{to_dir}/#{basename}.zip"
6
+ cmd = []
7
+ cmd << "cd" << File.dirname(path)
8
+ cmd << "&& zip -r --symlinks" << out_path << basename
9
+ cmd << "&& cd -"
10
+ `#{cmd.join(" ")}`
11
+ end
12
+
13
+ def self.unzip(path, to_dir: nil)
14
+ cmd = []
15
+ cmd << "unzip -nq" << path
16
+ cmd << "-d" << to_dir unless to_dir.nil?
17
+ `#{cmd.join(" ")}`
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,47 @@
1
+ require_relative "executor/prebuilder"
2
+ require_relative "../cocoapods-binary-ht/pod-binary/prebuild_dsl"
3
+
4
+ module Pod
5
+ class Command
6
+ class Binary < Command
7
+ class Prebuild < Binary
8
+ attr_reader :prebuilder
9
+
10
+ self.arguments = [CLAide::Argument.new("CACHE-BRANCH", false)]
11
+ def self.options
12
+ [
13
+ ["--config", "Config (Debug, Test...) to prebuild"],
14
+ ["--repo-update", "Update pod repo before installing"],
15
+ ["--no-fetch", "Do not perform a cache fetch beforehand"],
16
+ ["--push", "Push cache to repo upon completion"],
17
+ ["--all", "Prebuild all binary pods regardless of cache validation"],
18
+ ["--targets", "Targets to prebuild. Use comma (,) to specify a list of targets"]
19
+ ].concat(super)
20
+ end
21
+
22
+ def initialize(argv)
23
+ super
24
+ prebuild_all_pods = argv.flag?("all")
25
+ prebuild_targets = argv.option("targets", "").split(",")
26
+ update_cli_config(
27
+ :prebuild_job => true,
28
+ :prebuild_all_pods => prebuild_all_pods,
29
+ :prebuild_config => argv.option("config")
30
+ )
31
+ update_cli_config(:prebuild_targets => prebuild_targets) unless prebuild_all_pods
32
+ @prebuilder = PodPrebuild::CachePrebuilder.new(
33
+ config: prebuild_config,
34
+ cache_branch: argv.shift_argument || "master",
35
+ repo_update: argv.flag?("repo-update"),
36
+ no_fetch: argv.flag?("fetch") == false,
37
+ push_cache: argv.flag?("push")
38
+ )
39
+ end
40
+
41
+ def run
42
+ @prebuilder.run
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,22 @@
1
+ require_relative "executor/pusher"
2
+
3
+ module Pod
4
+ class Command
5
+ class Binary < Command
6
+ class Push < Binary
7
+ self.arguments = [CLAide::Argument.new("CACHE-BRANCH", false)]
8
+ def initialize(argv)
9
+ super
10
+ @pusher = PodPrebuild::CachePusher.new(
11
+ config: prebuild_config,
12
+ cache_branch: argv.shift_argument || "master"
13
+ )
14
+ end
15
+
16
+ def run
17
+ @pusher.run
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,34 @@
1
+ require_relative "executor/visualizer"
2
+
3
+ module Pod
4
+ class Command
5
+ class Binary < Command
6
+ class Viz < Binary
7
+ self.arguments = [CLAide::Argument.new("OUTPUT-DIR", false)]
8
+ def self.options
9
+ [
10
+ ["--open", "Open the graph upon completion"],
11
+ ["--devpod_only", "Only include development pod"],
12
+ ["--max_deps", "Only include pod with number of dependencies <= max_deps"]
13
+ ]
14
+ end
15
+
16
+ def initialize(argv)
17
+ super
18
+ @visualizer = PodPrebuild::Visualizer.new(
19
+ config: prebuild_config,
20
+ lockfile: config.lockfile,
21
+ output_dir: argv.shift_argument || ".",
22
+ open: argv.flag?("open"),
23
+ devpod_only: argv.flag?("devpod_only"),
24
+ max_deps: argv.option("max_deps")
25
+ )
26
+ end
27
+
28
+ def run
29
+ @visualizer.run
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end