cocoapods-binary-ht 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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