pindo 5.13.7 → 5.13.10

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/base/git_handler.rb +247 -42
  3. data/lib/pindo/command/android/autobuild.rb +104 -31
  4. data/lib/pindo/command/android/autoresign.rb +23 -322
  5. data/lib/pindo/command/android/keystore.rb +7 -130
  6. data/lib/pindo/command/appstore/adhocbuild.rb +52 -15
  7. data/lib/pindo/command/appstore/autobuild.rb +104 -8
  8. data/lib/pindo/command/appstore/autoresign.rb +3 -5
  9. data/lib/pindo/command/ios/autobuild.rb +96 -32
  10. data/lib/pindo/command/ios/build.rb +8 -186
  11. data/lib/pindo/command/jps/media.rb +146 -0
  12. data/lib/pindo/command/jps/upload.rb +49 -21
  13. data/lib/pindo/command/jps.rb +1 -0
  14. data/lib/pindo/command/unity/autobuild.rb +141 -32
  15. data/lib/pindo/command/unity/packpush.rb +5 -8
  16. data/lib/pindo/command/utils/repoinit.rb +0 -2
  17. data/lib/pindo/command/utils/tag.rb +58 -26
  18. data/lib/pindo/command/utils.rb +0 -1
  19. data/lib/pindo/command/web/autobuild.rb +98 -34
  20. data/lib/pindo/command.rb +0 -56
  21. data/lib/pindo/config/build_info_manager.rb +7 -8
  22. data/lib/pindo/module/android/android_config_helper.rb +2 -11
  23. data/lib/pindo/module/appselect.rb +15 -41
  24. data/lib/pindo/module/appstore/itcapp_helper.rb +3 -6
  25. data/lib/pindo/module/build/build_helper.rb +28 -18
  26. data/lib/pindo/module/build/git_repo_helper.rb +284 -405
  27. data/lib/pindo/module/cert/pem_helper.rb +3 -6
  28. data/lib/pindo/module/pgyer/pgyerhelper.rb +193 -25
  29. data/lib/pindo/module/task/model/appstore/appstore_task.rb +5 -0
  30. data/lib/pindo/module/task/model/build/android_build_adhoc_task.rb +13 -187
  31. data/lib/pindo/module/task/model/build/android_build_dev_task.rb +36 -34
  32. data/lib/pindo/module/task/model/build/android_build_gplay_task.rb +13 -187
  33. data/lib/pindo/module/task/model/build/ios_build_adhoc_task.rb +9 -6
  34. data/lib/pindo/module/task/model/build/ios_build_appstore_task.rb +9 -6
  35. data/lib/pindo/module/task/model/build/ios_build_dev_task.rb +37 -32
  36. data/lib/pindo/module/task/model/build/web_build_dev_task.rb +7 -5
  37. data/lib/pindo/module/task/model/build_task.rb +8 -11
  38. data/lib/pindo/module/task/model/git/git_commit_task.rb +118 -0
  39. data/lib/pindo/module/task/model/git/git_tag_task.rb +125 -0
  40. data/lib/pindo/module/task/model/git_task.rb +75 -0
  41. data/lib/pindo/module/task/model/jps/jps_message_task.rb +178 -0
  42. data/lib/pindo/module/task/model/{jps_resign_task.rb → jps/jps_resign_task.rb} +14 -23
  43. data/lib/pindo/module/task/model/jps/jps_upload_media_task.rb +248 -0
  44. data/lib/pindo/module/task/model/{jps_upload_task.rb → jps/jps_upload_task.rb} +39 -94
  45. data/lib/pindo/module/task/model/jps_task.rb +43 -0
  46. data/lib/pindo/module/task/model/{ipa_local_resign_task.rb → resign/ipa_local_resign_task.rb} +7 -2
  47. data/lib/pindo/module/task/model/unity/unity_config_task.rb +103 -0
  48. data/lib/pindo/module/task/model/{unity_export_task.rb → unity/unity_export_task.rb} +76 -78
  49. data/lib/pindo/module/task/model/unity/unity_update_task.rb +95 -0
  50. data/lib/pindo/module/task/model/unity/unity_yoo_asset_task.rb +156 -0
  51. data/lib/pindo/module/task/model/unity_task.rb +118 -0
  52. data/lib/pindo/module/task/pindo_task.rb +101 -1
  53. data/lib/pindo/module/task/task_manager.rb +29 -24
  54. data/lib/pindo/module/unity/nuget_helper.rb +7 -7
  55. data/lib/pindo/module/unity/unity_command_helper.rb +188 -0
  56. data/lib/pindo/module/unity/unity_env_helper.rb +208 -0
  57. data/lib/pindo/module/unity/unity_helper.rb +189 -746
  58. data/lib/pindo/module/unity/unity_proc_helper.rb +390 -0
  59. data/lib/pindo/options/core/global_options_state.rb +96 -26
  60. data/lib/pindo/options/core/option_configuration.rb +3 -0
  61. data/lib/pindo/options/core/option_item.rb +36 -0
  62. data/lib/pindo/options/groups/build_options.rb +23 -6
  63. data/lib/pindo/options/groups/git_options.rb +115 -0
  64. data/lib/pindo/options/groups/jps_options.rb +7 -0
  65. data/lib/pindo/options/groups/option_group.rb +15 -0
  66. data/lib/pindo/options/groups/unity_options.rb +49 -0
  67. data/lib/pindo/options/options.rb +2 -0
  68. data/lib/pindo/version.rb +2 -2
  69. metadata +25 -14
  70. data/lib/pindo/base/githelper.rb +0 -686
  71. data/lib/pindo/base/pindocontext.rb +0 -602
  72. data/lib/pindo/command/utils/feishu.rb +0 -134
  73. data/lib/pindo/module/build/version_helper.rb +0 -146
  74. data/lib/pindo/module/task/model/git_tag_task.rb +0 -80
@@ -1,6 +1,11 @@
1
1
  require 'highline/import'
2
2
  require 'fileutils'
3
+ require 'pindo/base/git_handler'
3
4
  require 'pindo/module/build/git_repo_helper'
5
+ require 'pindo/module/task/task_manager'
6
+ require 'pindo/module/task/model/git/git_commit_task'
7
+ require 'pindo/module/task/model/git/git_tag_task'
8
+ require 'pindo/options/options'
4
9
 
5
10
  module Pindo
6
11
  class Command
@@ -23,55 +28,82 @@ module Pindo
23
28
 
24
29
  使用示例:
25
30
 
26
- $ pindo utils tag # 使用minor模式创建tag
31
+ $ pindo utils tag # 使用默认参数创建tag
27
32
 
28
- $ pindo utils tag --mode=major # 使用major模式创建tag
33
+ $ pindo utils tag --ver_inc=main # 大版本号增加
29
34
 
30
- $ pindo utils tag --mode=patch # 使用patch模式创建tag
35
+ $ pindo utils tag --ver_inc=patch # 补丁版本号增加
31
36
 
32
- $ pindo utils tag --tag=1.1.3 # 直接指定版本号创建tag(会自动添加v前缀)
37
+ $ pindo utils tag --tag_type=recreate # 重新创建当前版本tag
33
38
 
34
- $ pindo utils tag --retag # 强制重新打tag
39
+ $ pindo utils tag --release_branch=main # 指定发布分支
35
40
  DESC
36
41
 
37
42
  # 命令的参数列表
38
43
  self.arguments = []
39
44
 
45
+ # 定义此命令使用的参数项
46
+ def self.option_items
47
+ @option_items ||= Pindo::Options::GitOptions.all
48
+ end
49
+
40
50
  # 命令的选项列表
41
51
  def self.options
42
- [
43
- ['--mode', '指定版本号增加模式(major/minor/patch),默认minor'],
44
- ['--retag', '强制重新打最新的tag'],
45
- ['--tag', '直接指定tag版本号(如 1.1.3),会自动添加v前缀']
46
- ].concat(super)
52
+ option_items.map(&:to_claide_option).concat(super)
47
53
  end
48
54
 
49
55
  def initialize(argv)
50
- @mode = argv.option('mode') || 'minor'
51
- @force_retag = argv.flag?('retag', false)
52
- @custom_tag = argv.option('tag')
56
+ @options = initialize_options(argv)
53
57
 
54
- # 如果指定了自定义tag,不需要验证mode
55
- unless @custom_tag || ['major', 'minor', 'patch'].include?(@mode)
56
- raise Informative, "mode参数必须是 major, minor 或 patch"
57
- end
58
+ # Git 参数
59
+ @args_release_branch = @options[:release_branch] || 'master'
60
+ @args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc] || 'mini')
61
+ @args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
62
+ @args_tag_pre = @options[:tag_pre] || 'v'
58
63
 
59
64
  super
60
65
  @additional_args = argv.remainder!
61
66
  end
62
67
 
63
68
  def run
64
- current_project_dir = Dir.pwd
65
-
66
- GitRepoHelper.share_instance.create_and_push_tag(
67
- project_dir: current_project_dir,
68
- mode: @mode,
69
- force_retag: @force_retag,
70
- custom_tag: @custom_tag,
71
- release_branch: 'master'
69
+ pindo_project_dir = Dir.pwd
70
+
71
+ # 验证是否是 Git 仓库
72
+ unless Pindo::GitHandler.is_git_directory?(local_repo_dir: pindo_project_dir)
73
+ raise Informative, "当前目录不是 Git 仓库"
74
+ end
75
+
76
+ # 创建任务列表
77
+ tasks = []
78
+
79
+ # 1. Git 提交任务
80
+ git_commit_task = Pindo::TaskSystem::GitCommitTask.new(
81
+ pindo_project_dir,
82
+ release_branch: @args_release_branch,
83
+ ver_inc: @args_ver_inc,
84
+ tag_type: @args_tag_type,
85
+ tag_pre: @args_tag_pre
86
+ )
87
+ tasks << git_commit_task
88
+
89
+ # 2. Git 标签任务(依赖提交任务)
90
+ git_tag_task = Pindo::TaskSystem::GitTagTask.new(
91
+ pindo_project_dir,
92
+ release_branch: @args_release_branch,
93
+ ver_inc: @args_ver_inc,
94
+ tag_type: @args_tag_type,
95
+ tag_pre: @args_tag_pre
72
96
  )
97
+ git_tag_task.dependencies << git_commit_task.id
98
+ tasks << git_tag_task
99
+
100
+ # 添加到任务管理器并执行
101
+ task_manager = Pindo::TaskSystem::TaskManager.instance
102
+ task_manager.clear_all
103
+ tasks.each { |task| task_manager.add_task(task) }
104
+ task_manager.start
73
105
  end
74
106
  end
75
107
  end
76
108
  end
77
- end
109
+ end
@@ -8,7 +8,6 @@ require 'pindo/command/utils/device'
8
8
  # require 'pindo/command/utils/boss'
9
9
  require 'pindo/command/utils/renewcert'
10
10
  require 'pindo/command/utils/repoinit'
11
- require 'pindo/command/utils/feishu'
12
11
  require 'pindo/command/utils/tag'
13
12
  require 'pindo/command/utils/updateconfig'
14
13
  require 'pindo/command/utils/fabric'
@@ -6,10 +6,15 @@ require 'pindo/base/executable'
6
6
  require 'pindo/module/unity/unity_helper'
7
7
  require 'pindo/module/build/build_helper'
8
8
  require 'pindo/module/task/task_manager'
9
- require 'pindo/module/task/model/git_tag_task'
10
- require 'pindo/module/task/model/unity_export_task'
9
+ require 'pindo/module/task/model/git/git_commit_task'
10
+ require 'pindo/module/task/model/git/git_tag_task'
11
+ require 'pindo/module/task/model/unity/unity_update_task'
12
+ require 'pindo/module/task/model/unity/unity_yoo_asset_task'
13
+ require 'pindo/module/task/model/unity/unity_export_task'
11
14
  require 'pindo/module/task/model/build_task'
12
- require 'pindo/module/task/model/jps_upload_task'
15
+ require 'pindo/module/task/model/jps/jps_upload_task'
16
+ require 'pindo/module/task/model/jps/jps_message_task'
17
+ require 'pindo/options/options'
13
18
 
14
19
  module Pindo
15
20
  class Command
@@ -17,7 +22,6 @@ module Pindo
17
22
  class Autobuild < Web
18
23
 
19
24
  include Appselect
20
- include Pindo::Githelper
21
25
 
22
26
  self.summary = '打包Unity WebGL包'
23
27
 
@@ -54,30 +58,42 @@ module Pindo
54
58
  # 暂无参数
55
59
  ]
56
60
 
61
+ # 定义此命令使用的参数项
62
+ def self.option_items
63
+ @option_items ||= Pindo::Options::OptionGroup.merge(
64
+ Pindo::Options::JPSOptions.select(:proj, :upload, :send),
65
+ Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
66
+ Pindo::Options::UnityOptions.select_with_defaults(skipconfig: true),
67
+ Pindo::Options::GitOptions.all
68
+ )
69
+ end
70
+
57
71
  # 命令的选项列表
58
72
  def self.options
59
73
  [
60
74
  ['--bundleid', '指定打包的bundleID'],
61
- # 指定上传到JPS的项目
62
- ['--proj', '指定上传到测试平台的项目名称'],
63
- # 上传编译包
64
- ['--upload', '上传编译后的ipa到测试平台'],
65
- # 发送通知
66
- ['--send', '上传成功后发送测试通知'],
67
- # 编译完成后再本地打开webgl包
68
75
  ['--run', '编译完成后再本地打开webgl包']
69
- ].concat(super)
76
+ ].concat(option_items.map(&:to_claide_option)).concat(super)
70
77
  end
71
78
 
72
79
  def initialize(argv)
80
+ @options = initialize_options(argv)
73
81
 
74
82
  @args_deploy_flag = argv.flag?('deploy', false)
75
- @args_adhoc_flag = argv.flag?('adhoc', false)
76
- @args_upload_flag = argv.flag?('upload', false)
77
- @args_send_flag = argv.flag?('send', false)
78
- @args_proj_name = argv.option('proj')
83
+ @args_adhoc_flag = argv.flag?('adhoc', false)
84
+ @args_upload_flag = @options[:upload] || false
85
+ @args_send_flag = @options[:send] || false
86
+ @args_proj_name = @options[:proj]
79
87
  @args_bundle_id = argv.option('bundleid')
80
88
  @args_run_flag = argv.flag?('run', false)
89
+ @args_skip_lib = @options[:skiplib] || false
90
+ @args_skip_yoo = @options[:skipyoo] || false
91
+
92
+ # Git 参数
93
+ @args_release_branch = @options[:release_branch] || 'master'
94
+ @args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc] || 'mini')
95
+ @args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
96
+ @args_tag_pre = @options[:tag_pre] || 'v'
81
97
 
82
98
  if @args_send_flag
83
99
  @args_upload_flag = true
@@ -96,10 +112,7 @@ module Pindo
96
112
  pindo_project_dir = Dir.pwd
97
113
 
98
114
  # 加载 JPS 配置(如果存在)
99
- context = Pindo::PindoContext.instance
100
- context.load_and_apply_jps_config(pindo_project_dir)
101
- # 确认并应用缓存(如果有)
102
- context.confirm_and_apply_cache
115
+ Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir)
103
116
 
104
117
  # 准备配置
105
118
  config = prepare_web_config(pindo_project_dir)
@@ -189,15 +202,55 @@ module Pindo
189
202
  # Web 只支持 Unity 工程
190
203
  tasks = []
191
204
 
192
- # 1. Git 标签任务(如果需要上传)
205
+ # 1. Git 提交任务(如果需要上传)
193
206
  if @args_upload_flag
207
+ git_commit_task = Pindo::TaskSystem::GitCommitTask.new(
208
+ config[:project_path],
209
+ release_branch: @args_release_branch,
210
+ ver_inc: @args_ver_inc,
211
+ tag_type: @args_tag_type,
212
+ tag_pre: @args_tag_pre
213
+ )
214
+ tasks << git_commit_task
215
+ last_task = git_commit_task
216
+
217
+ # 2. Git 标签任务(依赖提交任务,在 Unity 导出之前创建)
194
218
  git_tag_task = Pindo::TaskSystem::GitTagTask.new(
195
- config[:project_path]
219
+ config[:project_path],
220
+ release_branch: @args_release_branch,
221
+ ver_inc: @args_ver_inc,
222
+ tag_type: @args_tag_type,
223
+ tag_pre: @args_tag_pre
196
224
  )
225
+ git_tag_task.dependencies << git_commit_task.id
197
226
  tasks << git_tag_task
227
+ last_task = git_tag_task
228
+ else
229
+ last_task = nil
230
+ end
231
+
232
+ # 3. Unity 更新必备库任务(可选)
233
+ unless @args_skip_lib
234
+ unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
235
+ project_path: config[:project_path]
236
+ )
237
+ unity_update_task.dependencies << last_task.id if last_task
238
+ tasks << unity_update_task
239
+ last_task = unity_update_task
198
240
  end
199
241
 
200
- # 2. Unity 导出任务
242
+ # 4. Unity YooAsset 资源构建任务(可选,依赖上一个任务)
243
+ unless @args_skip_yoo
244
+ unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
245
+ 'web',
246
+ project_path: config[:project_path]
247
+ )
248
+ unity_yoo_task.dependencies << last_task.id if last_task
249
+ tasks << unity_yoo_task
250
+ last_task = unity_yoo_task
251
+ end
252
+
253
+ # 5. Unity 导出任务(依赖上一个任务)
201
254
  # Web 平台导出路径
202
255
  web_export_path = File.join(config[:project_path], "GoodPlatform", "WebGL")
203
256
 
@@ -205,16 +258,16 @@ module Pindo
205
258
  unity_context[:project_name] = @args_proj_name if @args_proj_name
206
259
  unity_context[:index_count] = config[:index_count]
207
260
 
208
- unity_task = Pindo::TaskSystem::UnityExportTask.new(
261
+ unity_export_task = Pindo::TaskSystem::UnityExportTask.new(
209
262
  'web',
210
263
  project_path: config[:project_path],
211
264
  export_path: web_export_path,
212
265
  context: unity_context
213
266
  )
214
- unity_task.dependencies << tasks.first.id if tasks.any?
215
- tasks << unity_task
267
+ unity_export_task.dependencies << last_task.id if last_task
268
+ tasks << unity_export_task
216
269
 
217
- # 3. 构建任务(Web 只需要检查输出)
270
+ # 6. 构建任务(Web 只需要检查输出)
218
271
  build_task = Pindo::TaskSystem::BuildTask.create_task(
219
272
  platform: :web,
220
273
  mode: :dev,
@@ -227,26 +280,37 @@ module Pindo
227
280
  workflow_info: config[:workflow_info]
228
281
  }
229
282
  )
230
- build_task.dependencies << unity_task.id
283
+ build_task.dependencies << unity_export_task.id
231
284
  tasks << build_task
232
285
 
233
- # 4. 上传任务(如果需要)
286
+ # 7. 上传和消息发送任务(如果需要)
234
287
  if @args_upload_flag
235
288
  # WebGL 输出路径: GoodPlatform/WebGL/build
236
289
  webgl_build_path = File.join(config[:project_path], 'GoodPlatform', 'WebGL', 'build')
290
+
291
+ # 7.1 创建上传任务
237
292
  upload_task = Pindo::TaskSystem::JPSUploadTask.new(
238
293
  'html',
239
294
  webgl_build_path,
240
295
  nil,
241
296
  app_info_obj: config[:app_info_obj],
242
297
  workflow_info: config[:workflow_info],
243
- project_name: @args_proj_name,
244
- context: {
245
- send_to_chat: @args_send_flag
246
- },
247
- dependencies: [build_task.id]
298
+ project_name: @args_proj_name
248
299
  )
300
+ upload_task.dependencies << build_task.id
249
301
  tasks << upload_task
302
+
303
+ # 7.2 创建消息发送任务(依赖上传任务)
304
+ # app_version_info 将从 upload_task 的数据参数中获取
305
+ message_task = Pindo::TaskSystem::JPSMessageTask.new(
306
+ nil, # app_version_info 为 nil,从依赖任务获取
307
+ app_info_obj: config[:app_info_obj],
308
+ project_name: @args_proj_name,
309
+ send_message_type: @args_send_flag ? 'group' : 'self',
310
+ data_dependencies: [upload_task.id] # 从 upload_task 获取数据
311
+ )
312
+ message_task.dependencies << upload_task.id # 执行顺序依赖
313
+ tasks << message_task
250
314
  end
251
315
 
252
316
  tasks
data/lib/pindo/command.rb CHANGED
@@ -6,8 +6,6 @@ require 'pindo/version'
6
6
  require 'pindo/base/funlog'
7
7
  require 'pindo/base/hashhelper'
8
8
  require 'pindo/base/plaininformative'
9
- require 'pindo/base/githelper'
10
- require 'pindo/base/pindocontext'
11
9
  require 'pindo/client/giteeclient'
12
10
  require 'pindo/config/pindoconfig'
13
11
 
@@ -22,7 +20,6 @@ module Pindo
22
20
 
23
21
  class Command < CLAide::Command
24
22
 
25
- include Pindo::Githelper
26
23
  include Pindoconfig::Mixin
27
24
  include Funlog::Mixin
28
25
 
@@ -61,8 +58,6 @@ module Pindo
61
58
  def self.use_cache?
62
59
  false # 默认不使用缓存
63
60
  end
64
- # 注意:缓存组的定义已经移至 PindoContext#get_command_group 中统一管理
65
- # 使用命令名作为组名,如 ios:autobuild, and:autobuild, web:autobuild
66
61
 
67
62
  # 自动推导命令名称
68
63
  # @return [String] 命令名称,例如:Pindo::Command::Ios::Autobuild → 'ios:autobuild'
@@ -123,8 +118,6 @@ module Pindo
123
118
  end
124
119
 
125
120
  def self.run(argv)
126
- # 直接调用父类的 run 方法
127
- # PindoContext 的设置在 initialize 中处理
128
121
  super(argv)
129
122
  end
130
123
 
@@ -143,55 +136,6 @@ module Pindo
143
136
 
144
137
  # 设置全局 verbose 标志
145
138
  ENV['PINDO_VERBOSE'] = '1' if @args_verbose_flag
146
-
147
- # 在非抽象命令初始化时设置上下文(但不在显示帮助时)
148
- if !self.class.abstract_command? && !is_help_request
149
- context = Pindo::PindoContext.instance
150
-
151
- # 只在上下文未设置时才设置(避免重复设置)
152
- if context.instance_variable_get(:@current_command).nil?
153
- # 获取完整的命令路径
154
- command_parts = []
155
- current = self.class
156
- while current < Pindo::Command
157
- if current.command && current.command != 'pindo'
158
- command_parts.unshift(current.command)
159
- end
160
- current = current.superclass
161
- end
162
- command_name = command_parts.empty? ? self.class.command : command_parts.join(':')
163
-
164
- # 配置选项
165
- cache_enabled_value = self.class.respond_to?(:use_cache?) ? self.class.use_cache? : false
166
- options = {
167
- cache_enabled: cache_enabled_value,
168
- verbose: @args_verbose_flag
169
- }
170
-
171
- # 获取项目根目录(Git仓库根目录或当前目录)
172
- project_dir = get_project_root_directory(Dir.pwd)
173
-
174
- context.set_context(command_name, project_dir, options)
175
- end
176
- end
177
- end
178
-
179
- private
180
-
181
- # 获取项目根目录(优先使用Git仓库根目录)
182
- def get_project_root_directory(current_dir)
183
- # 尝试获取Git仓库根目录
184
- begin
185
- git_root = `cd "#{current_dir}" && git rev-parse --show-toplevel 2>/dev/null`.strip
186
- if $?.success? && !git_root.empty?
187
- return git_root
188
- end
189
- rescue
190
- # git命令失败,继续使用当前目录
191
- end
192
-
193
- # 如果不是Git仓库,返回当前目录
194
- current_dir
195
139
  end
196
140
 
197
141
  end
@@ -1,6 +1,6 @@
1
1
  require 'singleton'
2
2
  require 'fileutils'
3
- require 'pindo/base/githelper'
3
+ require 'pindo/base/git_handler'
4
4
  require 'pindo/config/pindoconfig'
5
5
 
6
6
  module Pindo
@@ -9,7 +9,6 @@ module Pindo
9
9
  # 负责管理应用配置仓库的拉取、更新等操作
10
10
  class BuildInfoManager
11
11
  include Singleton
12
- include Pindo::Githelper
13
12
  include Pindo::Pindoconfig::Mixin
14
13
 
15
14
  class << self
@@ -30,7 +29,7 @@ module Pindo
30
29
 
31
30
  # 获取配置仓库目录
32
31
  begin
33
- app_config_dir = clong_buildconfig_repo(repo_name: normalized_repo_name)
32
+ app_config_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: normalized_repo_name)
34
33
  rescue StandardError => e
35
34
  puts "拉取配置仓库失败: #{e.message}"
36
35
  return false
@@ -71,7 +70,7 @@ module Pindo
71
70
  gitee_client = GiteeClient.new(access_token: pindo_single_config.gitee_api_key)
72
71
 
73
72
  # 获取模板配置仓库目录
74
- demo_dir = clong_buildconfig_repo(repo_name: pindo_single_config.demo_bundle_id)
73
+ demo_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: pindo_single_config.demo_bundle_id)
75
74
 
76
75
  # 确定仓库公开类型和所有者组织
77
76
  public_type = 0
@@ -97,7 +96,7 @@ module Pindo
97
96
  end
98
97
 
99
98
  # 克隆配置仓库
100
- app_config_dir = clong_buildconfig_repo(repo_name: repo_name)
99
+ app_config_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: repo_name)
101
100
  system "open #{app_config_dir}"
102
101
 
103
102
  if File.exist?(app_config_dir)
@@ -115,7 +114,7 @@ module Pindo
115
114
  end
116
115
  else
117
116
  # 仓库已存在,直接打开
118
- app_config_dir = clong_buildconfig_repo(repo_name: repo_name)
117
+ app_config_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: repo_name)
119
118
  system "open #{app_config_dir}"
120
119
  puts "⚠ 配置仓库已存在: #{app_config_dir}"
121
120
  return app_config_dir
@@ -169,7 +168,7 @@ module Pindo
169
168
  f.write(JSON.pretty_generate(git_repo_json))
170
169
  end
171
170
 
172
- git_addpush_repo(path: pindo_setting_dir, message: "add #{repo_name}")
171
+ Pindo::GitHandler.git_addpush_repo(path: pindo_setting_dir, message: "add #{repo_name}")
173
172
  end
174
173
 
175
174
  # 更新应用配置仓库(从模板复制)
@@ -201,7 +200,7 @@ module Pindo
201
200
  end
202
201
 
203
202
  # 提交并推送到远程仓库
204
- git_addpush_repo(path: app_config_dir, message: "init app config")
203
+ Pindo::GitHandler.git_addpush_repo(path: app_config_dir, message: "init app config")
205
204
  end
206
205
  end
207
206
 
@@ -5,6 +5,7 @@ require_relative 'android_project_helper'
5
5
  require_relative '../../base/executable'
6
6
  require_relative 'android_res_helper'
7
7
  require 'pindo/module/build/icon_downloader'
8
+ require 'pindo/module/build/git_repo_helper'
8
9
 
9
10
  module Pindo
10
11
 
@@ -64,7 +65,7 @@ module Pindo
64
65
  raise ArgumentError, "版本号不能为空" if version_code.nil?
65
66
 
66
67
  # 验证version_code的有效性
67
- unless valid_build_number?(version_code)
68
+ unless Pindo::GitRepoHelper.share_instance.valid_build_number?(version_code)
68
69
  Funlog.instance.fancyinfo_error("Android versionCode必须在1到#{2**31-1}之间,当前值:#{version_code}")
69
70
  return false
70
71
  end
@@ -176,16 +177,6 @@ module Pindo
176
177
  end
177
178
  end
178
179
 
179
- # 验证Build号是否在有效范围内
180
- # @param build_number [Integer] Build号
181
- # @return [Boolean] 是否有效
182
- def self.valid_build_number?(build_number)
183
- return false if build_number.nil?
184
-
185
- # Android versionCode的有效范围是1到2^31-1
186
- build_number >= 1 && build_number <= 2**31 - 1
187
- end
188
-
189
180
  # 使用package_name更新Android应用名称(strings.xml中的app_name)
190
181
  # @param project_dir [String] Android项目目录路径
191
182
  # @param package_name [String] 工作流的package_name(如:"Test Demo")
@@ -134,25 +134,12 @@ module Pindo
134
134
  end
135
135
 
136
136
  def get_selected_dev_bundleid()
137
- # 检查环境变量
138
- env_bundleid = ENV['PINDO_BUNDLE_ID']
139
- if env_bundleid && !env_bundleid.empty?
140
- puts "\n使用环境变量指定的Bundle ID: #{env_bundleid}"
141
- puts
142
- # 保存到缓存
143
- require_relative '../base/pindocontext'
144
- context = Pindo::PindoContext.instance
145
- context.set_selection(Pindo::PindoContext::SelectionKey::BUNDLE_ID, env_bundleid)
146
- return env_bundleid
147
- end
137
+ state = Pindo::Options::GlobalOptionsState.instance
148
138
 
149
- # 检查缓存
150
- require_relative '../base/pindocontext'
151
- context = Pindo::PindoContext.instance
152
- cached_bundleid = context.get_selection(Pindo::PindoContext::SelectionKey::BUNDLE_ID)
153
-
154
- if cached_bundleid
155
- puts "\n使用之前选择的Bundle ID: #{cached_bundleid}"
139
+ # 检查 GlobalOptionsState 缓存(已包含环境变量和命令行参数)
140
+ cached_bundleid = state[:bundleid]
141
+ if cached_bundleid && !cached_bundleid.empty?
142
+ puts "\n使用已配置的Bundle ID: #{cached_bundleid}"
156
143
  puts
157
144
  return cached_bundleid
158
145
  end
@@ -164,7 +151,7 @@ module Pindo
164
151
  cli = HighLine.new
165
152
  menu_choice="None"
166
153
  puts
167
- cli.choose do |menu| # you can also use constants like :blue
154
+ cli.choose do |menu|
168
155
  menu.header = "可用的Bundle Id如下:"
169
156
  menu.prompt = "请选择使用的Bundle Id,请输入选项(1/2/3...):"
170
157
  if !all_bundleid.nil? && all_bundleid.length > 0
@@ -183,8 +170,8 @@ module Pindo
183
170
  menu_choice = "com.heroneverdie101"
184
171
  end
185
172
 
186
- # 保存选择到缓存
187
- context.set_selection(Pindo::PindoContext::SelectionKey::BUNDLE_ID, menu_choice)
173
+ # 保存选择到 GlobalOptionsState
174
+ state[:bundleid] = menu_choice
188
175
 
189
176
  return menu_choice;
190
177
 
@@ -218,25 +205,12 @@ module Pindo
218
205
  end
219
206
 
220
207
  def get_selected_dev_bundle_name()
221
- # 检查环境变量
222
- env_bundle_name = ENV['PINDO_BUNDLE_NAME']
223
- if env_bundle_name && !env_bundle_name.empty?
224
- puts "\n使用环境变量指定的Bundle Name: #{env_bundle_name}"
225
- puts
226
- # 保存到缓存
227
- require_relative '../base/pindocontext'
228
- context = Pindo::PindoContext.instance
229
- context.set_selection(Pindo::PindoContext::SelectionKey::ANDROID_BUNDLE_NAME, env_bundle_name)
230
- return env_bundle_name
231
- end
232
-
233
- # 检查缓存
234
- require_relative '../base/pindocontext'
235
- context = Pindo::PindoContext.instance
236
- cached_bundle_name = context.get_selection(Pindo::PindoContext::SelectionKey::ANDROID_BUNDLE_NAME)
208
+ state = Pindo::Options::GlobalOptionsState.instance
237
209
 
238
- if cached_bundle_name
239
- puts "\n使用之前选择的Bundle Name: #{cached_bundle_name}"
210
+ # 检查 GlobalOptionsState 缓存(已包含环境变量和命令行参数)
211
+ cached_bundle_name = state[:bundle_name]
212
+ if cached_bundle_name && !cached_bundle_name.empty?
213
+ puts "\n使用已配置的Bundle Name: #{cached_bundle_name}"
240
214
  puts
241
215
  return cached_bundle_name
242
216
  end
@@ -265,8 +239,8 @@ module Pindo
265
239
  puts "选择的Bundle Name是: #{menu_choice}"
266
240
  puts
267
241
 
268
- # 保存选择到缓存
269
- context.set_selection(Pindo::PindoContext::SelectionKey::ANDROID_BUNDLE_NAME, menu_choice)
242
+ # 保存选择到 GlobalOptionsState
243
+ state[:bundle_name] = menu_choice
270
244
 
271
245
  return menu_choice
272
246
  end
@@ -180,16 +180,13 @@ module Pindo
180
180
 
181
181
  # 修改远程配置仓库
182
182
  begin
183
- require_relative '../../base/githelper'
184
- include Pindo::Githelper
185
-
186
- app_config_dir = clong_buildconfig_repo(repo_name: bundle_id)
183
+ app_config_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: bundle_id)
187
184
  app_config_file = File.join(app_config_dir, "config.json")
188
185
 
189
186
  if File.exist?(app_config_file)
190
187
  modify_appconfig_file(config_file: app_config_file, app_info_detail: app)
191
- prepare_gitenv()
192
- git_addpush_repo(path: app_config_dir, message: "modify apple id")
188
+ Pindo::GitHandler.prepare_gitenv()
189
+ Pindo::GitHandler.git_addpush_repo(path: app_config_dir, message: "modify apple id")
193
190
  end
194
191
  rescue StandardError => e
195
192
  puts "更新远程配置仓库失败: #{e.message}"