cocoapods-meitu-bin 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20e39980aef9bdfc449829f36825d3e494276a9c40dfeacc6315567c61aa54da
4
- data.tar.gz: aee80d60a26a5938112fd2e26982d0ed5efa7d811c38bea89b06f3820c75165e
3
+ metadata.gz: 159c257b8856aad76bd63ed408f8693d644a4798f040b68471e0591bbeb5d80b
4
+ data.tar.gz: 999806ccf28ed97b0e2e9180a372e668a026657e4e59c8ba89bad59e97b468cd
5
5
  SHA512:
6
- metadata.gz: 4520ca7be915df41b5918edcfacf04231d6962c20d9186925f382c45968f98af2c023d92d15d35f5d40c67ec5a3e3d1e88033c14415975f5383274e56a5fd14a
7
- data.tar.gz: d00fab77b0354c225e06c425d90e6b7601a99c4e7c315c498f5ff28484ea882cc54b085ac3382ec2bca87cae9d4184c97de0c7ef2655cc4bdc39705a7a2af6ee
6
+ metadata.gz: ffd23b947bb5f41b041d867727fe88c519b8fd4b8b6b996fa5acce3a0daff88d527b30010159d3b622786c3e0f18d4dd639c01dbcdbd4f838c049d6f6b01cb25
7
+ data.tar.gz: 3780e408c04ef40e5f7dd4f46bd1bff10b2ffa5c47354b7a763229eb5aed4d15536cf5c4025dd1dc03b87ca2aec890a4b77a3968bb7d5087c69e9e6508a4fd4b
@@ -250,25 +250,25 @@ module Pod
250
250
  end
251
251
  # 构建产物
252
252
  builder = Builder.new(pod_target, @sandbox.checkout_sources, @skip_simulator, @configuration)
253
- result = builder.build
254
- fail_pods << pod_target.pod_name unless result
255
- next unless result
253
+ # result = builder.build
254
+ # fail_pods << pod_target.pod_name unless result
255
+ # next unless result
256
256
  builder.create_binary
257
257
  # 压缩并上传zip
258
258
  zip_helper = ZipFileHelper.new(pod_target, version, builder.product_dir, builder.build_as_framework?, @configuration)
259
259
  result = zip_helper.zip_lib
260
260
  fail_pods << pod_target.pod_name unless result
261
261
  next unless result
262
- result = zip_helper.upload_zip_lib
263
- fail_pods << pod_target.pod_name unless result
264
- next unless result
262
+ # result = zip_helper.upload_zip_lib
263
+ # fail_pods << pod_target.pod_name unless result
264
+ # next unless result
265
265
  # 生成二进制podspec并上传
266
266
  podspec_creator = PodspecUtil.new(pod_target, version, builder.build_as_framework?, @configuration)
267
267
  bin_spec = podspec_creator.create_binary_podspec
268
268
  bin_spec_file = podspec_creator.write_binary_podspec(bin_spec)
269
- result = podspec_creator.push_binary_podspec(bin_spec_file)
270
- fail_pods << pod_target.pod_name unless result
271
- success_pods << pod_target.pod_name if result
269
+ # result = podspec_creator.push_binary_podspec(bin_spec_file)
270
+ # fail_pods << pod_target.pod_name unless result
271
+ # success_pods << pod_target.pod_name if result
272
272
  rescue Pod::StandardError => e
273
273
  UI.info "`#{pod_target}`编译失败,原因:#{e}".red
274
274
  fail_pods << pod_target.pod_name
@@ -25,7 +25,22 @@ module Pod
25
25
  # 计算checksum值
26
26
  def calculate_checksum(file_path)
27
27
  return "" unless File.exist?(file_path)
28
- content = File.read(file_path)
28
+ content = ""
29
+ lines = []
30
+ #过滤出实际使用pod
31
+ File.open(file_path, 'r') do |file|
32
+ file.each_line do |line|
33
+ new_line = line.strip
34
+ if new_line.start_with?("pod")
35
+ lines << new_line
36
+ end
37
+ end
38
+ end
39
+ #给获取的pod list 排序,排除因组件顺序调整导致获取SHA1值不一样
40
+ lines = lines.sort
41
+ lines.each do |line|
42
+ content << line
43
+ end
29
44
  checksum = Digest::SHA1.hexdigest(content)
30
45
  checksum = checksum.encode('UTF-8') if checksum.respond_to?(:encode)
31
46
  return checksum
@@ -153,15 +153,38 @@ class PodUpdateConfig
153
153
  @@lockfile = nil
154
154
  @@repo_update = true
155
155
  @@prepare_time = 0
156
+ @@checksum = nil
157
+ @@large_pod_hash = {}
158
+ @@is_mtxx = false
159
+
156
160
  def self.add_value(value)
157
161
  @@pods << value
158
162
  end
163
+ def self.set_is_mtxx(value)
164
+ @@is_mtxx = value
165
+ end
166
+ def self.is_mtxx()
167
+ @@is_mtxx
168
+ end
159
169
  def self.set_lockfile(path)
160
170
  @@lockfile = Pod::Lockfile.from_file(path) if path
161
171
  end
162
172
  def self.lockfile()
163
173
  @@lockfile
164
174
  end
175
+ def self.set_checksum(checksum)
176
+ @@checksum = checksum
177
+ end
178
+ def self.checksum
179
+ @@checksum
180
+ end
181
+ def self.add_pod_hash(name,size)
182
+ @@large_pod_hash[name]=size
183
+ end
184
+ def self.large_pod_hash
185
+ @@large_pod_hash
186
+ end
187
+
165
188
  # 一个类方法,用于显示数组中的值
166
189
  def self.repo_update
167
190
  @@repo_update
@@ -1,5 +1,5 @@
1
1
  module CBin
2
- VERSION = "1.2.0"
2
+ VERSION = "1.2.1"
3
3
  end
4
4
 
5
5
  module Pod
@@ -10,7 +10,7 @@ module CBin
10
10
  @skip_simulator = skip_simulator
11
11
  @configuration = configuration
12
12
  @file_accessors = pod_target.file_accessors unless pod_target.nil?
13
- @base_dir = "#{Pathname.pwd}/build_pods"
13
+ @base_dir = "#{Pathname.pwd}/all_build/Build"
14
14
  end
15
15
 
16
16
  # 构建
@@ -92,7 +92,7 @@ module CBin
92
92
 
93
93
  # xxx.framework 所在目录
94
94
  def product_dir
95
- @product_dir = "#{@base_dir}/#{@pod_target}/Products"
95
+ @product_dir = "#{@base_dir}/Products"
96
96
  @product_dir
97
97
  end
98
98
 
@@ -48,7 +48,7 @@ module CBin
48
48
  # podspec写入文件
49
49
  def write_binary_podspec(spec)
50
50
  UI.info "写入podspec:`#{@pod_target}`".yellow
51
- podspec_dir = "#{Pathname.pwd}/build_pods/#{@pod_target}/Products/podspec"
51
+ podspec_dir = "#{Pathname.pwd}/all_build/Build/Products/podspec"
52
52
  FileUtils.mkdir(podspec_dir) unless File.exist?(podspec_dir)
53
53
  file = "#{podspec_dir}/#{@pod_target.pod_name}.podspec.json"
54
54
  FileUtils.rm_rf(file) if File.exist?(file)
@@ -1,3 +1,4 @@
1
+ require 'cocoapods-meitu-bin/config/config'
1
2
  module CBin
2
3
  class PodSize
3
4
  include Pod
@@ -15,6 +16,9 @@ module CBin
15
16
  return
16
17
  end
17
18
  @@lock.synchronize do
19
+ size = pod[:size].to_i
20
+ size = ('%.0f' % (size / 1024)).to_f
21
+ PodUpdateConfig.add_pod_hash(pod[:name],size)
18
22
  File.open(@@tmp_file_path, "a") do |f|
19
23
  f.write(format_pod_size(pod))
20
24
  end
@@ -2,6 +2,9 @@ require 'cocoapods/installer/project_cache/target_metadata.rb'
2
2
  require 'parallel'
3
3
  require 'cocoapods'
4
4
  require 'xcodeproj'
5
+ require 'json'
6
+ require 'timeout'
7
+ require 'net/http'
5
8
  require 'cocoapods-meitu-bin/native/pod_source_installer'
6
9
  require 'cocoapods-meitu-bin/helpers/pod_size_helper'
7
10
  require 'cocoapods-meitu-bin/config/config'
@@ -114,17 +117,6 @@ module Pod
114
117
  def perform_post_install_actions
115
118
  start_time = Time.now
116
119
  old_perform_post_install_actions
117
- cost_time_hash['perform_post_install_actions'] = Time.now - start_time
118
- # 打印有多少个源码库,多少二进制库
119
- print_source_bin_statistics
120
- # 打印耗时
121
- print_cost_time
122
- # 打印大小大于阈值的库
123
- CBin::PodSize.print_pods
124
- end
125
-
126
- # 打印有多少个源码库,多少二进制库
127
- def print_source_bin_statistics
128
120
  source_pods = []
129
121
  bin_pods = []
130
122
  @pod_targets.map do |target|
@@ -134,16 +126,85 @@ module Pod
134
126
  bin_pods << target
135
127
  end
136
128
  end
137
- UI.puts "\n总共有 #{@pod_targets.size} 个Pod库,二进制有 #{bin_pods.size} 个,源码有 #{source_pods.size} 个".green
129
+ cost_time_hash['perform_post_install_actions'] = Time.now - start_time
130
+
131
+ # 打印有多少个源码库,多少二进制库
132
+ print_source_bin_statistics(source_pods,bin_pods)
133
+ # 打印耗时
134
+ print_cost_time
135
+ # 打印大小大于阈值的库
136
+ CBin::PodSize.print_pods
137
+ if PodUpdateConfig.is_mtxx
138
+ begin
139
+ data = {
140
+ "meitu_bin_version" => CBin::VERSION,
141
+ "large_pod_hash" => PodUpdateConfig.large_pod_hash
142
+ }
143
+ all_time = 0
144
+ cost_time_hash.each do |key, value|
145
+ time = ('%.1f' % value).to_f
146
+ data[key] = time
147
+ all_time = all_time + time
148
+ end
149
+ data["pod_time"] = all_time
150
+ binary_rate = bin_pods.size.to_f / @pod_targets.size.to_f
151
+ data["binary_rate"] = ('%.2f' % binary_rate).to_f
152
+ data["source_count"] = source_pods.size
153
+ data["binary_count"] = bin_pods.size
154
+ data["targets_count"] = @pod_targets.size
155
+ source = "unknown user"
156
+ if ENV['NODE_NAME']
157
+ source = ENV['NODE_NAME']
158
+ else
159
+ source = `git config user.email`
160
+ source = source.gsub("\n", "")
161
+ end
162
+ data_json = {
163
+ "subject" => "MTXX pod time profiler",
164
+ "type" => "pod_time_profiler",
165
+ "source" => source,
166
+ "data" => data
167
+ }
168
+ begin
169
+ timeout(3) do
170
+ json_data = [data_json].to_json
171
+ api_url = "http://event-adapter-internal.prism.cloud.meitu-int.com/api/v1/http/send/batch"
172
+ headers = { "Content-Type" => "application/json" }
173
+ uri = URI(api_url)
174
+ http = Net::HTTP.new(uri.host, uri.port)
175
+ request = Net::HTTP::Post.new(uri.path, headers)
176
+ request.body = json_data
177
+ response = http.request(request)
178
+ if ENV['MEITU_USE_POD_SOURCE'] == '1'
179
+ puts "pod_time_profiler: Response code: #{response.code}"
180
+ puts "pod_time_profiler: data_json: #{data_json}"
181
+ end
182
+ end
183
+ rescue Timeout::Error
184
+ puts "pod_time_profiler: 上报pod操作操作已超时"
185
+ end
186
+ rescue => error
187
+ puts "pod_time_profiler: 上报pod 耗时统计失败,失败原因:#{error}"
188
+ end
189
+ end
190
+
191
+ end
192
+
193
+ # 打印有多少个源码库,多少二进制库
194
+ def print_source_bin_statistics(source_pods,bin_pods)
195
+
196
+ UI.puts "\npod_time_profiler: 总共有 #{@pod_targets.size} 个Pod库,二进制有 #{bin_pods.size} 个,源码有 #{source_pods.size} 个".green
138
197
  # 打印二进制库
139
198
  if ENV['statistics_bin'] == '1'
140
199
  UI.puts "二进制库:".green
141
200
  UI.puts bin_pods
142
201
  end
143
202
  # 打印源码库
144
- if ENV['statistics_source'] == '1'
203
+ if ENV['MEITU_USE_POD_SOURCE'] == '1'
145
204
  UI.puts "源码库:".green
146
- UI.puts source_pods
205
+ source_pods.each do |pod|
206
+ UI.puts "pod_time_profiler: #{pod.name}"
207
+ end
147
208
  end
148
209
  end
149
210
 
@@ -5,26 +5,39 @@ require 'cocoapods/user_interface'
5
5
  require 'digest'
6
6
  require 'yaml'
7
7
  require 'cocoapods'
8
-
8
+ require 'json'
9
+ require 'net/http'
9
10
  #获取服务端podfile.lock文件
10
11
  def get_podfile_lock
11
12
  begin
12
13
  # 默认是获取要获取服务端podfile.lock文件
13
14
  is_load_podfile_lock = true
15
+ #目前只支持MTXX target "MTXX" 项目 #想要支持其他项目可以添加对应 target "xxx"
16
+ content = File.read(Pod::Config.instance.podfile_path)
17
+ if content
18
+ if content.include?("target \"MTXX\"")
19
+ is_load_podfile_lock = true
20
+ PodUpdateConfig.set_is_mtxx(true)
21
+ else
22
+ is_load_podfile_lock = false
23
+ PodUpdateConfig.set_is_mtxx(false)
24
+ end
25
+ end
14
26
  # MEITU_LOAD_CACHE_PODFILE_LOCK 为false时不获取服务端podfile.lock文件
15
27
  if ENV['MEITU_LOAD_CACHE_PODFILE_LOCK'] && ENV['MEITU_LOAD_CACHE_PODFILE_LOCK'] == 'false'
16
28
  is_load_podfile_lock = false
17
29
  end
18
30
  # 判断是否有update参数 时不获取服务端podfile.lock文件
19
31
  ARGV.each do |arg|
20
- if arg == 'update'
32
+ if arg == 'update' || arg == '--no-cloud'
21
33
  is_load_podfile_lock = false
22
34
  end
23
35
  end
24
36
  # podfile.lock文件下载和使用逻辑
25
37
  if is_load_podfile_lock
26
38
  #获取 PODFILE CHECKSUM 用来判断服务端是否存在该podfile.lock
27
- checksum = Pod::Config.instance.podfile.checksum
39
+ checksum = get_checksum(Pod::Config.instance.podfile_path)
40
+ PodUpdateConfig.set_checksum(checksum)
28
41
  Pod::UI.puts "当前podfile文件的checksum:#{checksum}".green
29
42
  # zip下载地址
30
43
  curl = "https://xiuxiu-dl-meitu-com.obs.cn-north-4.myhuaweicloud.com/ios/binary/MTXX/#{checksum}/podfile.lock.zip"
@@ -159,10 +172,25 @@ def get_branch_name
159
172
  branch_value = branch_value.gsub("\n", "")
160
173
  branch_value
161
174
  end
162
-
175
+ #过滤出来podfile中实际有效每行内容,拼接成字符串在SHA1 后UTF-8编码下 用来当做依赖缓存文件的key
163
176
  def get_checksum(file_path)
164
177
  return nil unless File.exist?(file_path)
165
- content = File.read(file_path)
178
+ content = ""
179
+ lines = []
180
+ #过滤出实际使用pod
181
+ File.open(file_path, 'r') do |file|
182
+ file.each_line do |line|
183
+ new_line = line.strip
184
+ if new_line.start_with?("pod")
185
+ lines << new_line
186
+ end
187
+ end
188
+ end
189
+ #给获取的pod list 排序,排除因组件顺序调整导致获取SHA1值不一样
190
+ lines = lines.sort
191
+ lines.each do |line|
192
+ content << line
193
+ end
166
194
  checksum = Digest::SHA1.hexdigest(content)
167
195
  checksum = checksum.encode('UTF-8') if checksum.respond_to?(:encode)
168
196
  return checksum
@@ -217,19 +245,13 @@ end
217
245
  # 注册 pod install 钩子
218
246
  Pod::HooksManager.register('cocoapods-meitu-bin', :post_install) do |context|
219
247
  #基于podfile的checksum上报云端podfile.lock文件
220
- podfile_path = Pod::Config.instance.installation_root + 'podfile'
221
- # puts "#{podfile_path}".green
222
- checksum = get_checksum(podfile_path)
223
- # puts "#{checksum}".green
224
- if checksum
225
- upload_podfile_lock(checksum)
226
- end
227
- #判断是否在 mbox 工作目录执行pod install
228
- if system("mbox status > /dev/null 2>&1")
229
- upload_mbox_podfile_lock
248
+ if PodUpdateConfig.is_mtxx
249
+ if PodUpdateConfig.checksum
250
+ upload_podfile_lock(PodUpdateConfig.checksum)
251
+ end
252
+ upload_branch_podfile_lock
230
253
  end
231
- #基于分支,上报podfile.lock文件
232
- upload_branch_podfile_lock
254
+
233
255
  end
234
256
 
235
257
  Pod::HooksManager.register('cocoapods-meitu-bin', :source_provider) do |context, _|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-meitu-bin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jensen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-23 00:00:00.000000000 Z
11
+ date: 2023-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parallel