pindo 5.14.5 → 5.14.6

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.
@@ -1,63 +1,67 @@
1
- require 'highline/import'
2
- require 'fileutils'
3
1
  require 'pindo/module/pgyer/pgyerhelper'
2
+ require 'pindo/module/task/task_manager'
3
+ require 'pindo/module/task/model/jps/jps_resign_task'
4
+ require 'pindo/module/task/model/jps/jps_message_task'
5
+ require 'pindo/module/task/model/jps/jps_workflow_message_task'
6
+ require 'pindo/options/options'
4
7
 
5
8
  module Pindo
6
9
  class Command
7
10
  class Jps < Command
8
11
  class Resign < Jps
9
12
 
10
-
11
- self.summary = '重签名jps中的安装包'
13
+ self.summary = '重签名 JPS 中的安装包'
12
14
 
13
15
  self.description = <<-DESC
14
- 重签名jps中的安装包。
16
+ 重签名 JPS 中的安装包并发送测试消息。
15
17
 
16
18
  支持功能:
17
19
 
18
20
  * 选择证书重签名
19
- * 查看历史版本
20
- * 发送测试信息
21
+ * 查看历史版本(使用 --list 参数)
22
+ * 发送测试信息给自己(默认)
23
+ * 发送工作流消息到测试群(使用 --send 参数)
21
24
 
22
25
  使用示例:
23
26
 
24
- $ pindo jps resign # 重签名当前项目最新版本
27
+ $ pindo jps resign # 重签名当前项目最新版本并发送给自己
25
28
 
26
- $ pindo jps resign --proj=demo # 重签名指定项目
29
+ $ pindo jps resign --proj=demo # 重签名指定项目
27
30
 
28
- $ pindo jps resign --list # 列出历史版本供选择
31
+ $ pindo jps resign --list # 列出历史版本供选择
29
32
 
30
- $ pindo jps resign --certid=xxx # 使用指定证书重签名
33
+ $ pindo jps resign --bundleid=com.test.app # 使用指定 Bundle ID 的证书重签名
31
34
 
32
- $ pindo jps resign --send # 重签名后发送测试信息
35
+ $ pindo jps resign --send # 重签名后发送工作流消息到测试群
33
36
  DESC
34
37
 
35
- self.arguments = [
38
+ self.arguments = []
36
39
 
37
- ]
40
+ # 定义此命令使用的参数项
41
+ def self.option_items
42
+ @option_items ||= Pindo::Options::OptionGroup.merge(
43
+ Pindo::Options::JPSOptions.select(:proj, :send, :list),
44
+ Pindo::Options::BuildOptions.select(:bundleid)
45
+ )
46
+ end
38
47
 
39
48
  def self.options
40
- [
41
- ['--login', '强制再次登录jps网站'],
42
- ['--proj', '指定哪个项目(忽略大小写空格等等字符),用法:pindo jps resign --proj=prancksoundv4'],
43
- ['--list', '列出上传记录并选择,用法:pindo jps resign --list'],
44
- ['--send', '发送消息到项目群(注意:不带此参数也会发送给自己),用法:pindo jps resign --send'],
45
- ['--certid', '设置重签名的正式id,用法:pindo jps resign --resignid=com.test.bundleid'],
46
- ].concat(super)
49
+ option_items.map(&:to_claide_option).concat(super)
47
50
  end
48
51
 
49
-
50
52
  def initialize(argv)
53
+ # 使用 Options 系统解析参数
54
+ @options = initialize_options(argv)
51
55
 
52
- @args_login_flag = argv.flag?('login', false)
53
- @args_list_flag = argv.flag?('list', false)
54
- @args_send_flag = argv.flag?('send', false)
55
- @args_proj_name = argv.option('proj')
56
+ # JPS 参数
57
+ @args_proj_name = @options[:proj]
58
+ @args_list_flag = @options[:list] || false
59
+ @args_send_flag = @options[:send] || false
56
60
 
57
- @args_cert_id = argv.option('certid')
61
+ # Build 参数
62
+ @args_bundle_id = @options[:bundleid]
58
63
 
59
64
  super(argv)
60
- @additional_args = argv.remainder!
61
65
  end
62
66
 
63
67
  def validate!
@@ -65,79 +69,85 @@ module Pindo
65
69
  end
66
70
 
67
71
  def run
68
-
69
- PgyerHelper.share_instace.setForeLogin(beforeLogin:@args_login_flag)
70
- app_info_obj = PgyerHelper.share_instace.prepare_upload(working_directory:Dir.pwd, proj_name:@args_proj_name)
71
-
72
- if app_info_obj.nil?
73
- raise Informative, "#{proj_name} 错误, 请输入正确的App代号名称, jps网站没有该App"
74
- end
75
-
76
-
77
- version_item_obj = PgyerHelper.share_instace.get_versioon_history_item(app_info_obj:app_info_obj, list_select_flat:@args_list_flag)
78
-
79
- if version_item_obj.nil?
80
- raise Informative, "没有找到上传记录"
81
- end
82
-
83
- cert_List = PgyerHelper.share_instace.get_cert_list()
84
-
85
- if cert_List.nil? || cert_List.empty?
86
- raise Informative, "没有找到上传记录"
87
- end
88
-
89
- if @args_cert_id.nil? && cert_List.size > 0
90
-
91
- bundle_id_list = cert_List.map { |cert| [cert["certType"],cert["mainBundleId"]].join("_") }
92
- cli = HighLine.new
93
- @args_cert_id = cli.choose do |menu|
94
- menu.prompt = "请选择重签名的证书:"
95
- menu.choices(*bundle_id_list)
96
- end
97
-
98
- cert_item = cert_List.select{|certitem| [certitem["certType"],certitem["mainBundleId"]].join("_") == @args_cert_id}.first
99
- else
100
- cert_item = cert_List.select{|certitem| certitem["mainBundleId"] == @args_cert_id && certitem["certType"].downcase.include?("adhoc")}.first
101
- end
102
-
103
-
104
-
105
- result = PgyerHelper.share_instace.resign(package_id:version_item_obj["id"], cert_id:cert_item["id"])
106
-
107
- if result
108
- version_item_obj = PgyerHelper.share_instace.get_versioon_history_item(app_info_obj:app_info_obj, list_select_flat:false)
109
-
110
- if version_item_obj.nil?
111
- raise Informative, "没有找到上传记录"
112
- end
113
- PgyerHelper.share_instace.print_app_version_info(
114
- app_info_obj: app_info_obj,
115
- app_version_info_obj: version_item_obj
116
- )
117
-
118
- # 始终发送给自己
119
- PgyerHelper.share_instace.send_apptest_msg(
120
- app_info_obj: app_info_obj,
121
- app_version_info_obj: version_item_obj,
122
- receiveType: "self"
123
- )
124
-
125
- # 如果有 --send 参数,额外发送到测试群
126
- if @args_send_flag
127
- PgyerHelper.share_instace.send_apptest_msg(
128
- app_info_obj: app_info_obj,
129
- app_version_info_obj: version_item_obj,
130
- chatEnv: "DevTest",
131
- receiveType: "chat"
132
- )
133
- end
134
- end
135
-
136
-
137
-
72
+ # TODO: 此命令尚未完成,等待实现
73
+ puts "\n⚠️ 该命令功能尚未完成,敬请期待...\n"
74
+
75
+ # project_path = Dir.pwd
76
+
77
+ # # 1. 登录并获取 JPS 配置
78
+ # pgyer_helper = PgyerHelper.share_instace
79
+ # pgyer_helper.login
80
+
81
+ # app_info_obj, workflow_info = pgyer_helper.prepare_upload(
82
+ # working_directory: project_path,
83
+ # proj_name: @args_proj_name,
84
+ # package_type: 'ipa' # 获取 IPA 工作流信息
85
+ # )
86
+
87
+ # if app_info_obj.nil?
88
+ # raise Informative, "#{@args_proj_name} 错误,请输入正确的 App 代号名称"
89
+ # end
90
+
91
+ # # 2. 创建任务
92
+ # tasks = []
93
+
94
+ # # 2.1 创建重签名任务
95
+ # resign_task = Pindo::TaskSystem::JPSResignTask.new(
96
+ # app_info_obj: app_info_obj,
97
+ # project_name: @args_proj_name,
98
+ # cert_id: @args_bundle_id, # 使用 bundleid 参数
99
+ # list_flag: @args_list_flag
100
+ # )
101
+ # tasks << resign_task
102
+
103
+ # # 2.2 创建 JPSMessageTask(发送给自己,依赖重签名任务)
104
+ # message_task = Pindo::TaskSystem::JPSMessageTask.new(
105
+ # nil, # app_version_info 为 nil,从依赖任务获取
106
+ # app_info_obj: app_info_obj,
107
+ # project_name: @args_proj_name,
108
+ # send_message_type: 'self',
109
+ # dependencies: [resign_task.id]
110
+ # )
111
+ # tasks << message_task
112
+
113
+ # # 2.3 如果有 --send 参数,创建 JPSWorkFlowMessageTask(发送到工作流群组)
114
+ # if @args_send_flag
115
+ # # 获取 Git 工作流信息
116
+ # git_app_info_obj, git_workflow_info = pgyer_helper.prepare_upload(
117
+ # working_directory: project_path,
118
+ # proj_name: @args_proj_name,
119
+ # package_type: "",
120
+ # manage_type: "git"
121
+ # )
122
+
123
+ # workflow_message_task = Pindo::TaskSystem::JPSWorkFlowMessageTask.new(
124
+ # project_id: git_app_info_obj["id"],
125
+ # workflow_id: git_workflow_info["id"],
126
+ # branch: 'master',
127
+ # single: true,
128
+ # app_info_obj: git_app_info_obj,
129
+ # workflow_info: git_workflow_info
130
+ # )
131
+ # # 依赖重签名任务
132
+ # workflow_message_task.dependencies << resign_task.id
133
+ # tasks << workflow_message_task
134
+ # end
135
+
136
+ # # 3. 执行任务
137
+ # task_manager = Pindo::TaskSystem::TaskManager.instance
138
+ # task_manager.clear_all
139
+ # tasks.each { |task| task_manager.add_task(task) }
140
+ # task_manager.start
141
+
142
+ # # 4. 输出结果
143
+ # report = task_manager.execution_report
144
+ # if report[:success] > 0
145
+ # puts "\n✅ 重签名完成!"
146
+ # else
147
+ # raise Informative, "重签名失败"
148
+ # end
138
149
  end
139
150
 
140
-
141
151
  end
142
152
  end
143
153
  end
@@ -24,8 +24,8 @@ module Pindo
24
24
 
25
25
  支持功能:
26
26
 
27
- * 上传ipa/apk/html安装包
28
- * Unity工程自动检测iOS/Android/WebGL包
27
+ * 上传ipa/apk/app/exe/html安装包
28
+ * Unity工程自动检测iOS/Android/WebGL/Windows
29
29
  * 添加版本描述
30
30
  * 上传附件
31
31
  * 重签名
@@ -35,6 +35,8 @@ module Pindo
35
35
 
36
36
  $ pindo jps upload path/to/app.ipa # 上传指定安装包
37
37
 
38
+ $ pindo jps upload path/to/setup.exe # 上传 Windows 安装包
39
+
38
40
  $ pindo jps upload --proj=demo # 上传到指定项目
39
41
 
40
42
  $ pindo jps upload --desc="版本说明" # 添加版本描述
@@ -285,12 +287,14 @@ module Pindo
285
287
  ios_file = find_unity_ios_package(project_dir)
286
288
  android_file = find_unity_android_package(project_dir)
287
289
  webgl_file = find_unity_webgl_package(project_dir)
290
+ windows_file = find_unity_windows_package(project_dir)
288
291
 
289
292
  # 2. 收集找到的文件
290
293
  found_files = []
291
294
  found_files << { file: ios_file, type: 'ipa', name: 'iOS' } if ios_file
292
295
  found_files << { file: android_file, type: 'apk', name: 'Android' } if android_file
293
296
  found_files << { file: webgl_file, type: 'html', name: 'WebGL' } if webgl_file
297
+ found_files << { file: windows_file, type: 'exe', name: 'Windows' } if windows_file
294
298
 
295
299
  # 3. 如果没有找到任何文件,直接返回
296
300
  return if found_files.empty?
@@ -312,7 +316,7 @@ module Pindo
312
316
 
313
317
  # 在项目根目录查找包(兜底)
314
318
  def find_and_confirm_fallback_package(project_dir, tasks)
315
- build_path = File.join(project_dir, "*.{ipa,app,apk,html}")
319
+ build_path = File.join(project_dir, "*.{ipa,app,apk,exe,html}")
316
320
  file = Dir.glob(build_path).max_by {|f| File.mtime(f)}
317
321
  if file && confirm_file(file)
318
322
  file_type = determine_file_type(file)
@@ -390,6 +394,27 @@ module Pindo
390
394
  nil
391
395
  end
392
396
 
397
+ # 查找 Unity Windows 包
398
+ def find_unity_windows_package(project_dir)
399
+ windows_files = []
400
+
401
+ # 检测 BaseWindows
402
+ base_windows_dir = File.join(project_dir, "GoodPlatform/BaseWindows/build")
403
+ if File.exist?(base_windows_dir)
404
+ build_path = File.join(base_windows_dir, "*.exe")
405
+ windows_files.concat(Dir.glob(build_path))
406
+ end
407
+
408
+ # 检测 Windows
409
+ windows_dir = File.join(project_dir, "GoodPlatform/Windows/build")
410
+ if File.exist?(windows_dir)
411
+ build_path = File.join(windows_dir, "*.exe")
412
+ windows_files.concat(Dir.glob(build_path))
413
+ end
414
+
415
+ windows_files.max_by {|f| File.mtime(f)} if windows_files.any?
416
+ end
417
+
393
418
  # 确认文件(交互式)
394
419
  def confirm_file(file_path)
395
420
  answer = agree("需要上传文件: #{file_path} ?(Y/n)")
@@ -408,8 +433,10 @@ module Pindo
408
433
  'html'
409
434
  when '.app'
410
435
  'app'
436
+ when '.exe'
437
+ 'exe'
411
438
  else
412
- raise Informative, "不支持的文件类型: #{ext},支持的类型:.ipa, .apk, .html, .app"
439
+ raise Informative, "不支持的文件类型: #{ext},支持的类型:.ipa, .apk, .app, .exe, .html"
413
440
  end
414
441
  end
415
442
 
@@ -2,7 +2,6 @@ require 'pindo/command/jps/login'
2
2
  require 'pindo/command/jps/upload'
3
3
  require 'pindo/command/jps/media'
4
4
  require 'pindo/command/jps/download'
5
- require 'pindo/command/jps/comment'
6
5
  require 'pindo/command/jps/apptest'
7
6
  require 'pindo/command/jps/resign'
8
7
  require 'pindo/command/jps/bind'
@@ -36,43 +36,59 @@ module Pindo
36
36
  self.description = <<-DESC
37
37
  编译Unity工程,生成IPA、APK、Html文件(默认编译三个平台的包)并支持上传到JPS平台。
38
38
 
39
- 支持功能:
40
-
41
- * 多类型自动构建(IPA → APK → HTML)
39
+ 参数优先级说明(从低到高):
42
40
 
43
- * 支持选择性构建指定类型
41
+ 1. 无参数:
42
+ - Git 提交 → 编译所有平台包 → 打 Git Tag
44
43
 
45
- * 生成iOS IPA文件
44
+ 2. --upload:
45
+ - 在基础流程上增加:上传所有平台包 → 发送消息给自己
46
46
 
47
- * 生成Android APK文件
47
+ 3. --media:
48
+ - 自动启用 --upload
49
+ - 在 --upload 基础上增加:上传媒体附件(JPSMedia/ 目录)
48
50
 
49
- * 生成WebGL HTML包
51
+ 4. --bind:
52
+ - 自动启用 --media 和 --upload
53
+ - 在 --media 基础上增加:绑定 Git commit 到已上传的包
50
54
 
51
- * 支持上传到JPS测试平台
55
+ 5. --send:
56
+ - 自动启用 --bind、--media 和 --upload
57
+ - 在 --bind 基础上增加:发送工作流消息到测试群
52
58
 
53
- * 支持发送测试通知
59
+ 支持功能:
54
60
 
61
+ * 多平台自动构建(IPA、APK、HTML)
62
+ * 支持选择性构建指定平台(使用 --types 参数)
63
+ * 上传到 JPS 测试平台
64
+ * 上传媒体附件(图片、视频)
65
+ * 绑定 Git commit 到已上传的包
66
+ * 发送测试通知(自己/测试群)
55
67
  * 支持并发任务执行(使用 --multi 参数)
56
68
 
57
69
  使用示例:
58
70
 
59
- $ pindo unity autobuild # 编译所有类型(默认串行执行)
71
+ $ pindo unity autobuild --types=ipa # 仅编译 IPA
60
72
 
61
- $ pindo unity autobuild --multi # 使用并发模式执行(速度更快)
73
+ $ pindo unity autobuild --types=apk,html # 编译 APK 和 HTML
62
74
 
63
- $ pindo unity autobuild --types=ipa # 仅编译IPA
75
+ $ pindo unity autobuild --bundleid=com.example.app # 指定 Bundle ID (iOS)
64
76
 
65
- $ pindo unity autobuild --types=apk,html # 编译APK和HTML
77
+ $ pindo unity autobuild --bundle_name=com.example.app # 指定 Bundle Name (Android)
66
78
 
67
- $ pindo unity autobuild --types=ipa,apk # 编译IPA和APK
79
+ $ pindo unity autobuild --proj="My App" # 指定项目名称
68
80
 
69
- $ pindo unity autobuild --upload # 编译所有类型并上传到JPS
81
+ $ pindo unity autobuild # 编译所有平台、打tag
70
82
 
71
- $ pindo unity autobuild --proj="My App" # 指定项目名称
83
+ $ pindo unity autobuild --upload # 编译、打tag、上传、发上传消息
84
+
85
+ $ pindo unity autobuild --media # 编译、打tag、上传、发上传消息、上传媒体附件
86
+
87
+ $ pindo unity autobuild --bind # 编译、打tag、上传、发上传消息、上传媒体附件 + 绑定包到工作流
72
88
 
73
- $ pindo unity autobuild --media # 编译并上传媒体附件
89
+ $ pindo unity autobuild --send # 编译、打tag、上传、发上传消息、上传媒体附件、绑定包到工作流 + 发送群消息
74
90
 
75
- $ pindo unity autobuild --multi --upload # 并发执行并上传
91
+ $ pindo unity autobuild --multi # 使用并发模式执行
76
92
  DESC
77
93
 
78
94
  # 命令参数
@@ -83,6 +99,7 @@ module Pindo
83
99
  # 定义此命令使用的参数项
84
100
  def self.option_items
85
101
  @option_items ||= Pindo::Options::OptionGroup.merge(
102
+ Pindo::Options::BuildOptions.select(:bundleid, :bundle_name), # 添加 bundleid 和 bundle_name 参数
86
103
  Pindo::Options::JPSOptions.select(:proj, :upload, :send, :media),
87
104
  Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
88
105
  Pindo::Options::UnityOptions.select_with_defaults(skipconfig: true),
@@ -94,8 +111,6 @@ module Pindo
94
111
  # 命令选项
95
112
  def self.options
96
113
  [
97
- ['--bundleid=ID', '指定iOS打包的bundleID'],
98
- ['--bundle_name=NAME', '指定Android Package Name(如com.example.app,会拉取对应配置)'],
99
114
  ['--types=TYPES', '指定要构建的类型,逗号分隔(如:ipa,apk,html),默认全部类型'],
100
115
  ['--adhoc', '使用AdHoc证书打包iOS(默认使用Dev证书)'],
101
116
  ['--deploy', '使用发布证书打包iOS'],
@@ -108,15 +123,25 @@ module Pindo
108
123
  @options = initialize_options(argv)
109
124
 
110
125
  @args_proj_name = @options[:proj]
111
- @args_upload_flag = @options[:upload] || false
112
- @args_send_flag = @options[:send] || false
113
- @args_media_flag = @options[:media] || false
114
126
  @args_adhoc_flag = argv.flag?('adhoc', false)
115
127
  @args_deploy_flag = argv.flag?('deploy', false)
116
128
  @args_release_flag = argv.flag?('release', false)
117
- @args_bundle_id = argv.option('bundleid')
118
- @args_bundle_name = argv.option('bundle_name')
129
+ @args_bundle_id = @options[:bundleid] # 从 @options 获取,确保能被缓存
130
+ @args_bundle_name = @options[:bundle_name] # 从 @options 获取,确保能被缓存
119
131
  @args_types = argv.option('types')
132
+
133
+ # send、media 或 bind 都依赖 upload:如果指定了任一参数,自动启用 upload
134
+ @args_upload_flag = @options[:send] || @options[:bind] || @options[:media] || @options[:upload]
135
+
136
+ # media 任务是独立的,不依赖任何其他任务,但是为输入命令参数更加简单,如果有--bind和--send, 则默认认为一定会有--media参数
137
+ @args_media_flag = @options[:send] || @options[:bind] || @options[:media] || false
138
+
139
+ # send 都依赖 bind:如果指定了任一参数,自动启用 bind
140
+ @args_bind_flag = @options[:send] || @options[:bind] || false
141
+
142
+ @args_send_flag = @options[:send]
143
+
144
+ # Unity 参数
120
145
  @args_skip_lib = @options[:skiplib] || false
121
146
  @args_skip_yoo = @options[:skipyoo] || false
122
147
 
@@ -129,11 +154,6 @@ module Pindo
129
154
  @args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
130
155
  @args_tag_pre = @options[:tag_pre] || 'v'
131
156
 
132
- # 如果开启 send 或 media,自动开启 upload
133
- if @args_send_flag || @args_media_flag
134
- @args_upload_flag = true
135
- end
136
-
137
157
  super
138
158
  end
139
159
 
@@ -308,6 +328,7 @@ module Pindo
308
328
  end
309
329
 
310
330
  # 第四步:创建所有上传和消息发送任务(最后添加,只依赖对应平台的构建任务)
331
+ platform_upload_tasks = [] # 存储所有上传任务,用于后续绑定任务
311
332
  if @args_upload_flag
312
333
  selected_platforms.each do |platform|
313
334
  build_task = platform_build_tasks[platform]
@@ -316,29 +337,35 @@ module Pindo
316
337
  # 创建上传任务
317
338
  upload_task = create_upload_task(platform, all_platform_configs, build_task)
318
339
  all_tasks << upload_task
340
+ platform_upload_tasks << upload_task
319
341
 
320
- # 创建消息发送任务(只依赖上传任务)
342
+ # 创建消息发送任务(只依赖上传任务,固定发送给自己)
321
343
  message_task = Pindo::TaskSystem::JPSMessageTask.new(
322
344
  nil, # app_version_info 为 nil,从依赖任务获取
323
345
  app_info_obj: all_platform_configs["app_info_obj"],
324
346
  project_name: all_platform_configs["project_name"],
325
- send_message_type: @args_send_flag ? 'group' : 'self',
326
- dependencies: [upload_task.id] # 从 upload_task 获取数据
347
+ send_message_type: 'self' # 固定发送给自己
327
348
  )
349
+ message_task.dependencies << upload_task.id
328
350
  all_tasks << message_task
329
351
  end
330
352
  end
331
353
 
332
- # 第五步:创建媒体附件上传任务(如果需要,只依赖 Git 提交任务)
333
- if @args_media_flag
334
- # 获取 Git 管理类型的工作流(不同于包上传的工作流)
354
+ # 第五步:获取 Git 工作流信息(如果需要 media、bind 或 send)
355
+ git_app_info_obj = nil
356
+ git_workflow_info = nil
357
+ if @args_media_flag || @args_bind_flag || @args_send_flag
358
+ # 获取 Git 工作流信息(media、绑定、消息任务都需要)
335
359
  git_app_info_obj, git_workflow_info = PgyerHelper.share_instace.prepare_upload(
336
360
  working_directory: Dir.pwd,
337
361
  proj_name: all_platform_configs["project_name"],
338
362
  package_type: "", # package_type 在 manage_type=git 时会被忽略
339
363
  manage_type: "git"
340
364
  )
365
+ end
341
366
 
367
+ # 第六步:创建媒体附件上传任务(如果需要,只依赖 Git 提交任务)
368
+ if @args_media_flag
342
369
  media_upload_task = Pindo::TaskSystem::JPSUploadMediaTask.new(
343
370
  [], # 空数组,自动从 JPSMedia/ 目录查找
344
371
  Dir.pwd, # upload_path
@@ -346,11 +373,47 @@ module Pindo
346
373
  workflow_info: git_workflow_info,
347
374
  project_name: all_platform_configs["project_name"]
348
375
  )
349
- # 只依赖 Git 提交任务
376
+ # 依赖 Git 提交任务
350
377
  media_upload_task.dependencies << git_commit_task.id
351
378
  all_tasks << media_upload_task
352
379
  end
353
380
 
381
+ # 第七步:创建 Git Commit 绑定任务(如果需要,依赖所有平台的上传任务)
382
+ bind_package_task = nil # 声明变量以便后续工作流消息任务使用
383
+ if @args_bind_flag
384
+ bind_package_task = Pindo::TaskSystem::JPSBindPackageTask.new(
385
+ nil, # app_version_list 为 nil,从依赖任务获取
386
+ project_dir: Dir.pwd,
387
+ app_info_obj: git_app_info_obj, # 使用 Git app_info_obj
388
+ workflow_info: git_workflow_info, # 使用 Git workflow_info
389
+ project_name: all_platform_configs["project_name"]
390
+ )
391
+ # 依赖所有平台的上传任务和 Git 提交任务
392
+ platform_upload_tasks.each do |upload_task|
393
+ bind_package_task.dependencies << upload_task.id
394
+ end
395
+ bind_package_task.dependencies << git_commit_task.id
396
+ all_tasks << bind_package_task
397
+ end
398
+
399
+ # 第八步:创建工作流消息任务(如果需要,发送到测试群)
400
+ if @args_send_flag
401
+
402
+ workflow_message_task = Pindo::TaskSystem::JPSWorkFlowMessageTask.new(
403
+ project_id: git_app_info_obj["id"],
404
+ workflow_id: git_workflow_info["id"],
405
+ branch: 'master',
406
+ single: true,
407
+ app_info_obj: git_app_info_obj,
408
+ workflow_info: git_workflow_info
409
+ )
410
+ # 依赖 Git Commit、Git Tag 和 Bind Package 任务
411
+ workflow_message_task.dependencies << git_commit_task.id
412
+ workflow_message_task.dependencies << git_tag_task.id
413
+ workflow_message_task.dependencies << bind_package_task.id
414
+ all_tasks << workflow_message_task
415
+ end
416
+
354
417
  # 返回所有任务
355
418
  all_tasks
356
419
  end
@@ -410,8 +473,6 @@ module Pindo
410
473
  # 准备构建选项
411
474
  build_options = {
412
475
  proj_name: all_platform_configs["project_name"],
413
- upload: @args_upload_flag,
414
- send: @args_send_flag,
415
476
  app_info_obj: all_platform_configs["app_info_obj"], # 共享的项目信息
416
477
  workflow_info: platform_config["workflow_info"], # 平台特定的工作流
417
478
  project_path: platform_path,