pindo 5.2.4 → 5.3.7
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/pindo/base/aeshelper.rb +23 -2
- data/lib/pindo/base/pindocontext.rb +259 -0
- data/lib/pindo/client/pgyer_feishu_oauth_cli.rb +343 -80
- data/lib/pindo/client/pgyerclient.rb +30 -20
- data/lib/pindo/command/android/autobuild.rb +52 -22
- data/lib/pindo/command/android/build.rb +27 -16
- data/lib/pindo/command/android/debug.rb +25 -15
- data/lib/pindo/command/dev/debug.rb +2 -51
- data/lib/pindo/command/dev/feishu.rb +19 -2
- data/lib/pindo/command/ios/adhoc.rb +2 -1
- data/lib/pindo/command/ios/autobuild.rb +35 -8
- data/lib/pindo/command/ios/debug.rb +2 -132
- data/lib/pindo/command/lib/lint.rb +24 -1
- data/lib/pindo/command/setup.rb +24 -4
- data/lib/pindo/command/unity/apk.rb +15 -0
- data/lib/pindo/command/unity/ipa.rb +16 -0
- data/lib/pindo/command.rb +13 -2
- data/lib/pindo/module/android/android_build_config_helper.rb +425 -0
- data/lib/pindo/module/android/apk_helper.rb +23 -25
- data/lib/pindo/module/android/base_helper.rb +572 -0
- data/lib/pindo/module/android/build_helper.rb +8 -318
- data/lib/pindo/module/android/gp_compliance_helper.rb +668 -0
- data/lib/pindo/module/android/gradle_helper.rb +746 -3
- data/lib/pindo/module/appselect.rb +18 -5
- data/lib/pindo/module/build/buildhelper.rb +120 -29
- data/lib/pindo/module/build/unityhelper.rb +675 -18
- data/lib/pindo/module/build/versionhelper.rb +146 -0
- data/lib/pindo/module/cert/certhelper.rb +33 -2
- data/lib/pindo/module/cert/xcodecerthelper.rb +3 -1
- data/lib/pindo/module/pgyer/pgyerhelper.rb +114 -31
- data/lib/pindo/module/xcode/xcodebuildconfig.rb +232 -0
- data/lib/pindo/module/xcode/xcodebuildhelper.rb +0 -1
- data/lib/pindo/version.rb +356 -86
- data/lib/pindo.rb +72 -3
- metadata +5 -1
data/lib/pindo/version.rb
CHANGED
@@ -1,111 +1,381 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'json'
|
3
|
+
require 'yaml'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'time'
|
6
|
+
|
1
7
|
module Pindo
|
2
8
|
|
3
|
-
|
9
|
+
VERSION = "5.3.7"
|
10
|
+
|
11
|
+
class VersionCheck
|
12
|
+
RUBYGEMS_API = 'https://rubygems.org/api/v1/gems/pindo.json'
|
13
|
+
VERSION_INFO_FILE = File.expand_path('~/.pindo/version_info.yml')
|
14
|
+
CHECK_INTERVAL = 5 * 60 * 60 # 5小时检查一次
|
15
|
+
|
16
|
+
class << self
|
17
|
+
# 主版本检查方法(保持向后兼容)
|
18
|
+
def check_pindo_new_version
|
19
|
+
begin
|
20
|
+
return if ENV['PINDO_NO_UPDATE_CHECK'] # 允许用户禁用
|
21
|
+
|
22
|
+
puts " 🔄 执行版本检查...".green if ENV['PINDO_DEBUG']
|
23
|
+
|
24
|
+
# 检查是否应该执行版本检查
|
25
|
+
return unless should_check?
|
26
|
+
|
27
|
+
# 优先尝试从 RubyGems API 获取版本
|
28
|
+
latest_version = fetch_latest_version_from_api
|
29
|
+
|
30
|
+
if latest_version
|
31
|
+
puts " ✅ 从 RubyGems 获取最新版本: #{latest_version}".green if ENV['PINDO_DEBUG']
|
32
|
+
check_and_notify_with_version(latest_version)
|
33
|
+
else
|
34
|
+
puts " ⚠️ RubyGems API 请求失败,使用配置文件检查".yellow if ENV['PINDO_DEBUG']
|
35
|
+
# 回退到配置文件检查
|
36
|
+
check_from_config_file
|
37
|
+
end
|
38
|
+
|
39
|
+
rescue => e
|
40
|
+
puts " ❌ 版本检查出错: #{e.message}".red if ENV['PINDO_DEBUG']
|
41
|
+
puts e.backtrace.join("\n") if ENV['PINDO_DEBUG']
|
42
|
+
# 静默失败,不影响主程序
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# 强制更新检查
|
47
|
+
def check_force_update!
|
48
|
+
return if ENV['PINDO_SKIP_FORCE_UPDATE'] # 紧急跳过选项
|
49
|
+
|
50
|
+
puts " 📌 执行强制更新检查...".green if ENV['PINDO_DEBUG']
|
51
|
+
|
52
|
+
begin
|
53
|
+
# 检查缓存中是否有强制更新标记
|
54
|
+
if require_force_update_from_cache?
|
55
|
+
cache = load_cache
|
56
|
+
show_force_update_message(cache['latest_version'], Pindo::VERSION)
|
57
|
+
exit(1)
|
58
|
+
end
|
59
|
+
|
60
|
+
# 如果缓存过期,立即检查
|
61
|
+
if should_check_immediately?
|
62
|
+
puts " 🌐 正在从 RubyGems 获取最新版本...".green if ENV['PINDO_DEBUG']
|
63
|
+
latest = fetch_latest_version_from_api
|
64
|
+
|
65
|
+
if latest && needs_major_or_minor_update?(latest, Pindo::VERSION)
|
66
|
+
# 更新缓存并退出
|
67
|
+
save_force_update_cache(latest)
|
68
|
+
show_force_update_message(latest, Pindo::VERSION)
|
69
|
+
exit(1)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# 检查配置文件中的强制更新(兼容原有逻辑)
|
74
|
+
check_pindo_force_upgrade
|
75
|
+
|
76
|
+
rescue SystemExit
|
77
|
+
raise # 重新抛出 exit
|
78
|
+
rescue => e
|
79
|
+
puts " ⚠️ 强制更新检查失败: #{e.message}".yellow if ENV['PINDO_DEBUG']
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# 原有的强制升级检查(从配置文件)
|
84
|
+
def check_pindo_force_upgrade
|
85
|
+
begin
|
86
|
+
pindo_dir = File.expand_path(ENV['PINDO_DIR'] || '~/.pindo')
|
87
|
+
pindo_common_configdir = File.join(pindo_dir, "pindo_common_config")
|
88
|
+
pindo_common_configfile_fullname = File.join(pindo_common_configdir, "pindo_config.json")
|
89
|
+
|
90
|
+
return unless File.exist?(pindo_common_configfile_fullname)
|
91
|
+
|
92
|
+
pindo_common_config_json = JSON.parse(File.read(pindo_common_configfile_fullname))
|
93
|
+
|
94
|
+
pindo_latest_version = pindo_common_config_json["pindo_latest_version"]
|
95
|
+
pindo_mini_version = pindo_common_config_json["pindo_mini_version"]
|
96
|
+
pindo_force_upgrade = pindo_common_config_json["pindo_force_upgrade"]
|
97
|
+
pindo_current_version = Pindo::VERSION
|
98
|
+
|
99
|
+
if pindo_force_upgrade
|
100
|
+
compare_num = version_greater_than(version_string1:pindo_current_version, version_string2:pindo_mini_version)
|
101
|
+
if compare_num < 0
|
102
|
+
puts "当前pindo版本 #{Pindo::VERSION}"
|
103
|
+
puts "最新版本 #{pindo_latest_version}"
|
104
|
+
puts "要求最低版本 #{pindo_mini_version}"
|
105
|
+
raise Informative, "请使用 gem install pindo 升级!"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
rescue JSON::ParserError, Errno::ENOENT => e
|
110
|
+
# 配置文件不存在或解析失败,忽略
|
111
|
+
rescue Informative
|
112
|
+
raise # 重新抛出 Informative 错误
|
113
|
+
rescue => e
|
114
|
+
raise Informative, "有异常错误,请确认是否执行pindo setup 拉取最新配置, 更新配置任然有错误请执行gem install pindo 更新"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# 版本比较方法(保持原有实现)
|
119
|
+
def version_greater_than(version_string1: nil, version_string2: nil)
|
120
|
+
return 0 if version_string1.nil? && version_string2.nil?
|
121
|
+
return -1 if version_string1.nil?
|
122
|
+
return 1 if version_string2.nil?
|
123
|
+
|
124
|
+
version_string1_array = version_string1.split('.') || []
|
125
|
+
version_string2_array = version_string2.split('.') || []
|
126
|
+
|
127
|
+
array_max_length = [version_string1_array.size, version_string2_array.size].max
|
128
|
+
|
129
|
+
version_string1_array += ['0'] * (array_max_length - version_string1_array.size)
|
130
|
+
version_string2_array += ['0'] * (array_max_length - version_string2_array.size)
|
131
|
+
|
132
|
+
compare_num = 0
|
133
|
+
(0..array_max_length).each do |i|
|
134
|
+
if version_string1_array[i] == version_string2_array[i]
|
135
|
+
compare_num = 0
|
136
|
+
elsif version_string1_array[i].to_i > version_string2_array[i].to_i
|
137
|
+
compare_num = 1
|
138
|
+
break
|
139
|
+
else
|
140
|
+
compare_num = -1
|
141
|
+
break
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
compare_num
|
146
|
+
end
|
147
|
+
|
148
|
+
private
|
149
|
+
|
150
|
+
# 从 RubyGems API 获取最新版本
|
151
|
+
def fetch_latest_version_from_api
|
152
|
+
uri = URI(RUBYGEMS_API)
|
153
|
+
|
154
|
+
# 创建 HTTP 连接,禁用代理
|
155
|
+
http = Net::HTTP.new(uri.host, uri.port, nil, nil)
|
156
|
+
http.use_ssl = true
|
157
|
+
http.open_timeout = 3 # 3秒超时
|
158
|
+
http.read_timeout = 3
|
159
|
+
|
160
|
+
puts " 🌐 直连 RubyGems API (跳过代理)...".green if ENV['PINDO_DEBUG']
|
161
|
+
|
162
|
+
request = Net::HTTP::Get.new(uri)
|
163
|
+
response = http.request(request)
|
164
|
+
|
165
|
+
if response.code == '200'
|
166
|
+
data = JSON.parse(response.body)
|
167
|
+
version = data['version']
|
168
|
+
puts " ✅ 获取到最新版本: #{version}".green if ENV['PINDO_DEBUG']
|
169
|
+
version
|
170
|
+
else
|
171
|
+
puts " ❌ API 响应错误: #{response.code}".yellow if ENV['PINDO_DEBUG']
|
172
|
+
nil
|
173
|
+
end
|
174
|
+
rescue => e
|
175
|
+
puts " ⚠️ 版本获取失败: #{e.message}".yellow if ENV['PINDO_DEBUG']
|
176
|
+
nil
|
177
|
+
end
|
178
|
+
|
179
|
+
# 从配置文件检查版本(原有逻辑)
|
180
|
+
def check_from_config_file
|
181
|
+
begin
|
182
|
+
pindo_dir = File.expand_path(ENV['PINDO_DIR'] || '~/.pindo')
|
183
|
+
pindo_common_configdir = File.join(pindo_dir, "pindo_common_config")
|
184
|
+
pindo_common_configfile_fullname = File.join(pindo_common_configdir, "pindo_config.json")
|
185
|
+
|
186
|
+
return unless File.exist?(pindo_common_configfile_fullname)
|
187
|
+
|
188
|
+
pindo_common_config_json = JSON.parse(File.read(pindo_common_configfile_fullname))
|
189
|
+
|
190
|
+
pindo_latest_version = pindo_common_config_json["pindo_latest_version"]
|
191
|
+
pindo_mini_version = pindo_common_config_json["pindo_mini_version"]
|
192
|
+
pindo_force_upgrade = pindo_common_config_json["pindo_force_upgrade"]
|
193
|
+
pindo_lates_update_info = pindo_common_config_json["pindo_lates_update_info"]
|
194
|
+
|
195
|
+
pindo_current_version = Pindo::VERSION
|
196
|
+
|
197
|
+
if pindo_force_upgrade
|
198
|
+
compare_num = version_greater_than(version_string1:pindo_current_version, version_string2:pindo_latest_version)
|
199
|
+
if compare_num < 0
|
200
|
+
puts
|
201
|
+
puts "最新版本是#{pindo_latest_version}目前可用, 可使用 gem install pindo 升级"
|
202
|
+
puts
|
203
|
+
puts pindo_lates_update_info if pindo_lates_update_info
|
204
|
+
puts
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
rescue => e
|
209
|
+
puts "有异常错误,请确认是否执行pindo setup 拉取最新配置, 更新配置任然有错误请执行gem install pindo 更新"
|
210
|
+
puts
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
# 检查并通知版本更新
|
215
|
+
def check_and_notify_with_version(latest_version)
|
216
|
+
return unless latest_version
|
217
|
+
|
218
|
+
current_version = Pindo::VERSION
|
219
|
+
|
220
|
+
# 检查是否有新版本
|
221
|
+
if newer_version?(latest_version, current_version)
|
222
|
+
# 更新缓存
|
223
|
+
save_update_cache(latest_version, true)
|
224
|
+
|
225
|
+
# 显示更新提示
|
226
|
+
show_update_banner(latest_version, current_version)
|
227
|
+
else
|
228
|
+
# 更新缓存(无新版本)
|
229
|
+
save_update_cache(latest_version, false)
|
230
|
+
puts " ✓ 已是最新版本 (#{current_version})".green if ENV['PINDO_DEBUG']
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
# 判断是否应该检查版本
|
235
|
+
def should_check?
|
236
|
+
# 检查缓存文件
|
237
|
+
if File.exist?(VERSION_INFO_FILE)
|
238
|
+
cache = load_cache
|
239
|
+
last_check = cache['last_check_at']
|
240
|
+
if last_check
|
241
|
+
time_since_check = Time.now - Time.parse(last_check)
|
242
|
+
return time_since_check > CHECK_INTERVAL
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
true
|
247
|
+
end
|
4
248
|
|
249
|
+
# 是否应该立即检查(用于强制更新)
|
250
|
+
def should_check_immediately?
|
251
|
+
return true unless File.exist?(VERSION_INFO_FILE)
|
5
252
|
|
6
|
-
|
7
|
-
|
8
|
-
def self.check_pindo_new_version
|
253
|
+
cache = load_cache
|
254
|
+
last_check = cache['last_check_at']
|
9
255
|
|
10
|
-
|
11
|
-
# puts "pindo #{Pindo::VERSION}"
|
12
|
-
begin
|
256
|
+
return true unless last_check
|
13
257
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
pindo_common_config_json = JSON.parse(File.read(pindo_common_configfile_fullname))
|
258
|
+
time_since_check = Time.now - Time.parse(last_check)
|
259
|
+
time_since_check > CHECK_INTERVAL
|
260
|
+
end
|
18
261
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
pindo_lates_update_info = pindo_common_config_json["pindo_lates_update_info"]
|
262
|
+
# 检查缓存中是否需要强制更新
|
263
|
+
def require_force_update_from_cache?
|
264
|
+
return false unless File.exist?(VERSION_INFO_FILE)
|
23
265
|
|
24
|
-
|
266
|
+
cache = load_cache
|
267
|
+
latest = cache['latest_version']
|
268
|
+
current = Pindo::VERSION
|
25
269
|
|
26
|
-
|
27
|
-
compare_num = Pindo::VersionCheck::version_greater_than(version_string1:pindo_current_version, version_string2:pindo_latest_version)
|
28
|
-
if compare_num < 0
|
29
|
-
# answer = agree("有可用的新版本,是否升级?(Y/n:")
|
30
|
-
# if answer
|
31
|
-
# Pindo::Command::Env::Upgrade::run([])
|
32
|
-
# end
|
33
|
-
puts
|
34
|
-
puts "最新版本是#{pindo_latest_version}目前可用, 可使用 gem install pindo 升级"
|
35
|
-
puts
|
36
|
-
puts pindo_lates_update_info
|
37
|
-
puts
|
38
|
-
end
|
270
|
+
return false unless latest
|
39
271
|
|
40
|
-
|
272
|
+
needs_major_or_minor_update?(latest, current)
|
273
|
+
end
|
41
274
|
|
42
|
-
|
43
|
-
|
44
|
-
|
275
|
+
# 判断是否是新版本
|
276
|
+
def newer_version?(latest, current)
|
277
|
+
return false unless latest && current
|
45
278
|
|
279
|
+
compare_result = version_greater_than(version_string1: current, version_string2: latest)
|
280
|
+
compare_result < 0
|
281
|
+
end
|
46
282
|
|
47
|
-
|
48
|
-
|
283
|
+
# 检查是否需要强制更新(主版本或次版本)
|
284
|
+
def needs_major_or_minor_update?(latest, current)
|
285
|
+
return false unless latest && current
|
49
286
|
|
50
|
-
|
287
|
+
latest_parts = latest.split('.').map(&:to_i)
|
288
|
+
current_parts = current.split('.').map(&:to_i)
|
51
289
|
|
52
|
-
|
290
|
+
# 主版本更新
|
291
|
+
return true if latest_parts[0] > current_parts[0]
|
53
292
|
|
54
|
-
|
55
|
-
|
56
|
-
pindo_common_configfile_fullname = File.join(pindo_common_configdir, "pindo_config.json")
|
57
|
-
pindo_common_config_json = JSON.parse(File.read(pindo_common_configfile_fullname))
|
293
|
+
# 次版本更新
|
294
|
+
return true if latest_parts[0] == current_parts[0] && latest_parts[1] > current_parts[1]
|
58
295
|
|
59
|
-
|
60
|
-
|
61
|
-
pindo_force_upgrade = pindo_common_config_json["pindo_force_upgrade"]
|
62
|
-
pindo_current_version = Pindo::VERSION
|
296
|
+
false
|
297
|
+
end
|
63
298
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
puts "最新版本 #{pindo_latest_version}"
|
69
|
-
puts "要求最低版本 #{pindo_mini_version}"
|
70
|
-
raise Informative, "请使用 gem install pindo 升级!"
|
71
|
-
end
|
72
|
-
end
|
299
|
+
# 加载缓存
|
300
|
+
def load_cache
|
301
|
+
YAML.load_file(VERSION_INFO_FILE) rescue {}
|
302
|
+
end
|
73
303
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
304
|
+
# 保存更新缓存
|
305
|
+
def save_update_cache(latest_version, has_update)
|
306
|
+
cache = {
|
307
|
+
'last_check_at' => Time.now.to_s,
|
308
|
+
'latest_version' => latest_version,
|
309
|
+
'new_version_available' => has_update,
|
310
|
+
'last_shown_at' => has_update ? Time.now.to_s : nil
|
311
|
+
}
|
312
|
+
save_cache(cache)
|
313
|
+
end
|
78
314
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
315
|
+
# 保存强制更新缓存
|
316
|
+
def save_force_update_cache(latest_version)
|
317
|
+
cache = {
|
318
|
+
'last_check_at' => Time.now.to_s,
|
319
|
+
'latest_version' => latest_version,
|
320
|
+
'new_version_available' => true,
|
321
|
+
'force_update_required' => true
|
322
|
+
}
|
323
|
+
save_cache(cache)
|
324
|
+
end
|
83
325
|
|
84
|
-
|
85
|
-
|
326
|
+
# 写入缓存文件
|
327
|
+
def save_cache(data)
|
328
|
+
FileUtils.mkdir_p(File.dirname(VERSION_INFO_FILE))
|
329
|
+
File.write(VERSION_INFO_FILE, data.to_yaml)
|
330
|
+
rescue => e
|
331
|
+
puts " ⚠️ 缓存保存失败: #{e.message}".yellow if ENV['PINDO_DEBUG']
|
332
|
+
end
|
86
333
|
|
87
|
-
|
334
|
+
# 显示更新提示横幅
|
335
|
+
def show_update_banner(latest, current)
|
336
|
+
puts
|
337
|
+
puts "┌─────────────────────────────────────────────────────┐".yellow
|
338
|
+
puts "│ 🎉 新版本可用! │".yellow
|
339
|
+
puts "│ │".yellow
|
340
|
+
puts "│ 当前版本: #{current.ljust(39)}│".yellow
|
341
|
+
puts "│ 最新版本: #{latest.ljust(39)}│".yellow
|
342
|
+
puts "│ │".yellow
|
343
|
+
puts "│ 更新命令: gem install pindo │".yellow
|
344
|
+
puts "│ │".yellow
|
345
|
+
puts "│ 禁用检查: export PINDO_NO_UPDATE_CHECK=1 │".yellow
|
346
|
+
puts "└─────────────────────────────────────────────────────┘".yellow
|
347
|
+
puts
|
348
|
+
end
|
88
349
|
|
89
|
-
|
90
|
-
|
350
|
+
# 显示强制更新消息
|
351
|
+
def show_force_update_message(latest, current)
|
352
|
+
latest_parts = latest.split('.').map(&:to_i)
|
353
|
+
current_parts = current.split('.').map(&:to_i)
|
91
354
|
|
92
|
-
|
93
|
-
|
94
|
-
if version_string1_array[i] == version_string2_array[i]
|
95
|
-
compare_num = 0
|
96
|
-
elsif version_string1_array[i].to_i > version_string2_array[i].to_i
|
97
|
-
compare_num = 1
|
98
|
-
break
|
99
|
-
else
|
100
|
-
compare_num = -1
|
101
|
-
break
|
102
|
-
end
|
103
|
-
end
|
355
|
+
is_major_update = latest_parts[0] > current_parts[0]
|
356
|
+
update_type = is_major_update ? "主版本" : "次版本"
|
104
357
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
358
|
+
puts "\n"
|
359
|
+
puts "╔═══════════════════════════════════════════════════════════╗".red
|
360
|
+
puts "║ ⚠️ 强制更新要求 ⚠️ ║".red
|
361
|
+
puts "╠═══════════════════════════════════════════════════════════╣".red
|
362
|
+
puts "║ ║".red
|
363
|
+
puts "║ 检测到#{update_type}更新,必须升级后才能继续使用: ║".red
|
364
|
+
puts "║ ║".red
|
365
|
+
puts "║ 当前版本: #{current.ljust(44)}║".red
|
366
|
+
puts "║ 最新版本: #{latest.ljust(44)}║".red
|
367
|
+
puts "║ ║".red
|
368
|
+
puts "║ 此更新包含重要变更,为确保功能正常,请立即更新: ║".red
|
369
|
+
puts "║ ║".red
|
370
|
+
puts "║ $ gem install pindo ║".red
|
371
|
+
puts "║ ║".red
|
372
|
+
puts "║ 如遇紧急情况需要临时跳过(不推荐): ║".red
|
373
|
+
puts "║ $ export PINDO_SKIP_FORCE_UPDATE=1 ║".red
|
374
|
+
puts "║ ║".red
|
375
|
+
puts "╚═══════════════════════════════════════════════════════════╝".red
|
376
|
+
puts "\n"
|
377
|
+
puts "程序将退出,请更新后重试。".red
|
378
|
+
end
|
379
|
+
end
|
380
|
+
end
|
381
|
+
end
|
data/lib/pindo.rb
CHANGED
@@ -9,7 +9,7 @@ module Pindo
|
|
9
9
|
autoload :Command, 'pindo/command'
|
10
10
|
autoload :Executable, 'pindo/base/executable'
|
11
11
|
autoload :Plistbuddyexecutable, 'pindo/base/plistbuddyexecutable'
|
12
|
-
|
12
|
+
|
13
13
|
require 'pindo/command'
|
14
14
|
require 'pindo/version'
|
15
15
|
|
@@ -17,10 +17,79 @@ module Pindo
|
|
17
17
|
class PindoApp
|
18
18
|
|
19
19
|
def run(argv)
|
20
|
+
begin
|
21
|
+
# 解析参数以确定是否是 help 或 version 命令
|
22
|
+
coerced_argv = CLAide::ARGV.coerce(argv)
|
23
|
+
|
24
|
+
# 显示欢迎界面(除了 help/version 命令和特定情况)
|
25
|
+
show_welcome_banner(argv, coerced_argv)
|
26
|
+
|
27
|
+
# 跳过 help/version 命令的版本检查
|
28
|
+
unless coerced_argv.flag?('help') || coerced_argv.flag?('version')
|
29
|
+
# 执行版本检查
|
30
|
+
begin
|
31
|
+
# 1. 强制更新检查(可能会退出程序)
|
32
|
+
Pindo::VersionCheck.check_force_update!
|
33
|
+
|
34
|
+
# 2. 常规版本检查
|
35
|
+
Pindo::VersionCheck.check_pindo_new_version
|
36
|
+
rescue => e
|
37
|
+
puts "⚠️ 版本检查出错: #{e.message}".yellow if ENV['PINDO_DEBUG']
|
38
|
+
# 版本检查失败不影响正常命令执行
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
rescue => e
|
43
|
+
# 参数解析失败,继续执行原有逻辑
|
44
|
+
puts "⚠️ 参数解析失败: #{e.message}".yellow if ENV['PINDO_DEBUG']
|
45
|
+
end
|
46
|
+
|
47
|
+
# 运行命令
|
48
|
+
Pindo::Command.run(argv)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
# 显示欢迎横幅
|
54
|
+
def show_welcome_banner(argv, coerced_argv)
|
55
|
+
require 'colored2'
|
56
|
+
|
57
|
+
# 不显示横幅的情况
|
58
|
+
return if ENV['PINDO_NO_BANNER'] == '1' # 环境变量禁用
|
59
|
+
return if coerced_argv.flag?('help') # help 命令
|
60
|
+
return if coerced_argv.flag?('version') # version 命令
|
61
|
+
return if argv.empty? # 无参数时(会显示帮助)
|
62
|
+
|
63
|
+
# 某些命令不显示横幅(可根据需要调整)
|
64
|
+
first_arg = argv.first.to_s.downcase
|
65
|
+
return if ['setup', 'env'].include?(first_arg)
|
66
|
+
|
67
|
+
# 显示欢迎界面
|
68
|
+
box_width = 62
|
69
|
+
title = "Pindo v#{Pindo::VERSION}"
|
70
|
+
subtitle = "Welcome to pindo, pindo make it easy!"
|
71
|
+
|
72
|
+
puts
|
73
|
+
puts "╔#{'═' * box_width}╗".cyan
|
74
|
+
puts "║#{title.center(box_width).green}║".cyan
|
75
|
+
puts "║#{' ' * box_width}║".cyan
|
76
|
+
puts "║#{subtitle.center(box_width).italic}║".cyan
|
77
|
+
puts "╚#{'═' * box_width}╝".cyan
|
78
|
+
puts
|
79
|
+
end
|
80
|
+
|
81
|
+
# 显示简单横幅(旧版本,保留备用)
|
82
|
+
def show_simple_banner
|
83
|
+
require 'colored2'
|
20
84
|
|
21
|
-
|
22
|
-
|
85
|
+
title = "Pindo v#{Pindo::VERSION}"
|
86
|
+
box_width = 60
|
23
87
|
|
88
|
+
puts
|
89
|
+
puts "╔#{'═' * box_width}╗".cyan
|
90
|
+
puts "║#{title.center(box_width).green}║".cyan
|
91
|
+
puts "╚#{'═' * box_width}╝".cyan
|
92
|
+
puts
|
24
93
|
end
|
25
94
|
|
26
95
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pindo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.3.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- wade
|
@@ -279,6 +279,7 @@ files:
|
|
279
279
|
- lib/pindo/base/funlog.rb
|
280
280
|
- lib/pindo/base/githelper.rb
|
281
281
|
- lib/pindo/base/hashhelper.rb
|
282
|
+
- lib/pindo/base/pindocontext.rb
|
282
283
|
- lib/pindo/base/plaininformative.rb
|
283
284
|
- lib/pindo/base/plistbuddyexecutable.rb
|
284
285
|
- lib/pindo/base/standarderror.rb
|
@@ -398,9 +399,11 @@ files:
|
|
398
399
|
- lib/pindo/command/web/run.rb
|
399
400
|
- lib/pindo/config/pindoconfig.rb
|
400
401
|
- lib/pindo/config/pindouserlocalconfig.rb
|
402
|
+
- lib/pindo/module/android/android_build_config_helper.rb
|
401
403
|
- lib/pindo/module/android/apk_helper.rb
|
402
404
|
- lib/pindo/module/android/base_helper.rb
|
403
405
|
- lib/pindo/module/android/build_helper.rb
|
406
|
+
- lib/pindo/module/android/gp_compliance_helper.rb
|
404
407
|
- lib/pindo/module/android/gradle_helper.rb
|
405
408
|
- lib/pindo/module/android/so_helper.rb
|
406
409
|
- lib/pindo/module/appselect.rb
|
@@ -412,6 +415,7 @@ files:
|
|
412
415
|
- lib/pindo/module/build/commonconfuseproj.rb
|
413
416
|
- lib/pindo/module/build/swarkhelper.rb
|
414
417
|
- lib/pindo/module/build/unityhelper.rb
|
418
|
+
- lib/pindo/module/build/versionhelper.rb
|
415
419
|
- lib/pindo/module/cert/certhelper.rb
|
416
420
|
- lib/pindo/module/cert/keychainhelper.rb
|
417
421
|
- lib/pindo/module/cert/pemhelper.rb
|