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
@@ -0,0 +1,146 @@
1
+ require 'highline/import'
2
+ require 'fileutils'
3
+ require 'json'
4
+ require 'pindo/module/pgyer/pgyerhelper'
5
+ require 'pindo/module/task/task_manager'
6
+ require 'pindo/module/task/model/jps/jps_upload_media_task'
7
+
8
+ module Pindo
9
+ class Command
10
+ class Jps < Command
11
+ class Media < Jps
12
+
13
+ self.summary = '上传media文件到jps提交记录'
14
+
15
+ self.description = <<-DESC
16
+ 上传media文件(图片、视频等)到jps提交记录。
17
+
18
+ 支持功能:
19
+
20
+ * 上传多个media文件(图片、视频等)
21
+ * 并发上传,支持重试
22
+ * 自动关联到指定的commit记录
23
+ * 支持追加模式(保留已有附件)
24
+ * 自动模式:从项目 JPSMedia/ 目录查找文件
25
+
26
+ 使用示例:
27
+
28
+ $ pindo jps media # 自动模式:使用 HEAD commit,从 JPSMedia/ 查找文件
29
+
30
+ $ pindo jps media path/to/1.png path/to/2.mov # 自动模式:使用 HEAD commit,上传指定文件
31
+
32
+ $ pindo jps media --commit_id=9e959ffd # 指定 git commit id
33
+
34
+ $ pindo jps media --workflow_id=2720 # 指定工作流ID
35
+
36
+ $ pindo jps media --proj=demo *.png # 指定项目
37
+
38
+ DESC
39
+
40
+ self.arguments = [
41
+ CLAide::Argument.new('files...', false),
42
+ ]
43
+
44
+ def self.options
45
+ [
46
+ ['--commit_id', '指定 git commit id(默认使用 HEAD)'],
47
+ ['--workflow_id', '指定工作流ID(用于查找 commit_log)'],
48
+ ['--proj', '指定项目代号名称'],
49
+ ['--login', '强制再次登录jps网站'],
50
+ ].concat(super)
51
+ end
52
+
53
+ def initialize(argv)
54
+ # 收集所有文件参数
55
+ @file_paths = []
56
+ while (arg = argv.shift_argument)
57
+ @file_paths << arg.strip.gsub(/\"/, '')
58
+ end
59
+
60
+ @args_commit_id = argv.option('commit_id')
61
+ @args_workflow_id = argv.option('workflow_id')
62
+ @args_proj_name = argv.option('proj')
63
+ @args_login_flag = argv.flag?('login', false)
64
+
65
+ # 转换 workflow_id 为整数
66
+ if @args_workflow_id
67
+ @args_workflow_id = @args_workflow_id.to_i
68
+ end
69
+
70
+ super(argv)
71
+ end
72
+
73
+ def validate!
74
+ super
75
+ # 不再强制要求参数,Task 会自动从 git 获取
76
+ end
77
+
78
+ def run
79
+ project_path = Dir.pwd
80
+
81
+ # 展开文件路径(支持通配符)
82
+ expanded_files = expand_file_paths(@file_paths)
83
+
84
+ # 设置 PgyerHelper 登录选项
85
+ PgyerHelper.share_instace.setForeLogin(beforeLogin: @args_login_flag)
86
+
87
+ # 创建并执行任务
88
+ # 所有逻辑都在 Task 中处理:
89
+ # - 自动查找 git 仓库和 HEAD 信息
90
+ # - 自动查找 JPSMedia/ 目录
91
+ # - 匹配 git_commit_id 到 JPS commit_log
92
+ task = Pindo::TaskSystem::JPSUploadMediaTask.new(
93
+ expanded_files,
94
+ git_commit_id: @args_commit_id,
95
+ workflow_id: @args_workflow_id,
96
+ project_name: @args_proj_name,
97
+ project_path: project_path
98
+ )
99
+
100
+ task_manager = Pindo::TaskSystem::TaskManager.instance
101
+ task_manager.clear_all
102
+ task_manager.add_task(task)
103
+ task_manager.start
104
+
105
+ # 输出结果
106
+ report = task_manager.execution_report
107
+ if report[:success] > 0
108
+ puts "\n上传完成!"
109
+ else
110
+ raise Informative, "上传失败"
111
+ end
112
+ end
113
+
114
+ private
115
+
116
+ # 展开文件路径(支持通配符和目录)
117
+ def expand_file_paths(paths)
118
+ return [] if paths.nil? || paths.empty?
119
+
120
+ expanded = []
121
+ media_extensions = %w[png jpg jpeg gif bmp webp mp4 mov avi mkv webm]
122
+
123
+ paths.each do |path|
124
+ if path.include?('*')
125
+ # 通配符展开
126
+ expanded.concat(Dir.glob(path))
127
+ elsif File.directory?(path)
128
+ # 目录:查找所有图片和视频文件
129
+ pattern = File.join(path, "**", "*.{#{media_extensions.join(',')}}")
130
+ expanded.concat(Dir.glob(pattern))
131
+ elsif File.exist?(path)
132
+ # 单个文件
133
+ expanded << path
134
+ else
135
+ Funlog.instance.warning("文件不存在: #{path}")
136
+ end
137
+ end
138
+
139
+ # 去重并过滤有效文件
140
+ expanded.uniq.select { |f| File.file?(f) }
141
+ end
142
+
143
+ end
144
+ end
145
+ end
146
+ end
@@ -6,8 +6,10 @@ require 'pindo/module/pgyer/pgyerhelper'
6
6
  require 'pindo/module/build/git_repo_helper'
7
7
  require 'pindo/module/build/build_helper'
8
8
  require 'pindo/module/task/task_manager'
9
- require 'pindo/module/task/model/jps_upload_task'
10
- require 'pindo/module/task/model/git_tag_task'
9
+ require 'pindo/module/task/model/jps/jps_upload_task'
10
+ require 'pindo/module/task/model/git/git_commit_task'
11
+ require 'pindo/module/task/model/git/git_tag_task'
12
+ require 'pindo/options/options'
11
13
 
12
14
  module Pindo
13
15
  class Command
@@ -42,29 +44,34 @@ module Pindo
42
44
  $ pindo jps upload --resign # 上传后重签名
43
45
 
44
46
  $ pindo jps upload --send # 上传后发送企业微信测试信息
47
+
48
+ $ pindo jps upload --ver_inc=main # 大版本号增加
49
+
50
+ $ pindo jps upload --tag_type=recreate # 重新创建当前版本tag
45
51
  DESC
46
52
 
47
53
  self.arguments = [
48
54
  CLAide::Argument.new('path/to/demo.ipa', false),
49
55
  ]
50
56
 
57
+ # 定义此命令使用的参数项
58
+ def self.option_items
59
+ @option_items ||= Pindo::Options::OptionGroup.merge(
60
+ Pindo::Options::JPSOptions.except(:upload), # 排除 upload 参数(本命令就是上传)
61
+ Pindo::Options::GitOptions.all
62
+ )
63
+ end
64
+
51
65
  def self.options
52
66
  [
53
- ['--login', '强制再次登录jps网站,用法: pindo jps upload --login'],
54
- ['--ipa', '强制指定上传的ipa文件: pindo jps upload --ipa=path/to/demo.ipa'],
55
- ['--proj', '指定哪个项目(忽略大小写空格等等字符),用法:pindo jps upload --proj=prancksoundv4'],
56
- ['--attach', '指定需要和ipa一起上传的附件: pindo jps upload --attach=path/to/attach.zip'],
57
- ['--send', '发送消息到项目群(注意:不带此参数也会发送给自己),用法:pindo jps upload --send'],
58
- ['--desc', '指定上传的备注信息: -pindo jps upload -desc="1.upload message"'],
59
- ['--resign', '上传到之后是否重签名,用法:pindo jps upload --resign'],
60
- ['--certid', '设置重签名的正式id,用法:pindo jps upload --certid=com.test.bundleid'],
61
-
62
- ].concat(super)
67
+ ['--login', '强制再次登录jps网站'],
68
+ ['--ipa', '强制指定上传的ipa文件'],
69
+ ['--attach', '指定需要和ipa一起上传的附件'],
70
+ ].concat(option_items.map(&:to_claide_option)).concat(super)
63
71
  end
64
72
 
65
73
 
66
74
  def initialize(argv)
67
-
68
75
  @args_ipa_file = argv.shift_argument
69
76
  @ipa_file = argv.option('ipa')
70
77
 
@@ -76,20 +83,27 @@ module Pindo
76
83
  end
77
84
 
78
85
  @args_login_flag = argv.flag?('login', false)
79
- @args_send_flag = argv.flag?('send', false)
80
- @args_resign_flag = argv.flag?('resign', false)
81
-
82
- @args_proj_name = argv.option('proj')
83
86
  @args_attach_name = argv.option('attach')
84
- @args_upload_desc = argv.option('desc')
85
- @args_cert_id = argv.option('certid')
86
87
 
88
+ # 使用 Options 系统解析参数
89
+ @options = initialize_options(argv)
87
90
 
91
+ # JPS 参数
92
+ @args_proj_name = @options[:proj]
93
+ @args_send_flag = @options[:send] || false
94
+ @args_resign_flag = @options[:resign] || false
95
+ @args_upload_desc = @options[:desc]
96
+ @args_cert_id = @options[:certid]
88
97
 
89
98
  if @args_upload_desc && !@args_upload_desc.empty?
90
99
  @args_upload_desc = @args_upload_desc.strip.gsub(/\"/, '')
91
100
  end
92
101
 
102
+ # Git 参数
103
+ @args_release_branch = @options[:release_branch] || 'master'
104
+ @args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc] || 'mini')
105
+ @args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
106
+ @args_tag_pre = @options[:tag_pre] || 'v'
93
107
 
94
108
  if !@args_cert_id.nil? && !@args_cert_id.empty?
95
109
  @args_resign_flag = true
@@ -141,8 +155,22 @@ module Pindo
141
155
  def make_upload_tasks(project_dir)
142
156
  tasks = []
143
157
 
144
- # 1. Git Tag 任务(检查并添加标签)
145
- git_tag_task = Pindo::TaskSystem::GitTagTask.new(project_dir)
158
+ # Git 参数
159
+ git_options = {
160
+ release_branch: @args_release_branch,
161
+ ver_inc: @args_ver_inc,
162
+ tag_type: @args_tag_type,
163
+ tag_pre: @args_tag_pre
164
+ }
165
+
166
+ # 1. Git 提交和标签任务
167
+ # 1.1 Git 提交任务
168
+ git_commit_task = Pindo::TaskSystem::GitCommitTask.new(project_dir, git_options)
169
+ tasks << git_commit_task
170
+
171
+ # 1.2 Git 标签任务(依赖提交任务)
172
+ git_tag_task = Pindo::TaskSystem::GitTagTask.new(project_dir, git_options)
173
+ git_tag_task.dependencies << git_commit_task.id
146
174
  tasks << git_tag_task
147
175
 
148
176
  # 2. 查找并创建上传任务
@@ -1,5 +1,6 @@
1
1
  require 'pindo/command/jps/login'
2
2
  require 'pindo/command/jps/upload'
3
+ require 'pindo/command/jps/media'
3
4
  require 'pindo/command/jps/download'
4
5
  require 'pindo/command/jps/comment'
5
6
  require 'pindo/command/jps/apptest'
@@ -9,11 +9,16 @@ require 'pindo/module/build/git_repo_helper'
9
9
  require 'pindo/module/task/pindo_task'
10
10
  require 'pindo/module/task/task_manager'
11
11
  require 'pindo/module/task/model/build_task'
12
- require 'pindo/module/task/model/unity_export_task'
13
- require 'pindo/module/task/model/jps_upload_task'
14
- require 'pindo/module/task/model/git_tag_task'
12
+ require 'pindo/module/task/model/unity/unity_update_task'
13
+ require 'pindo/module/task/model/unity/unity_yoo_asset_task'
14
+ require 'pindo/module/task/model/unity/unity_export_task'
15
+ require 'pindo/module/task/model/jps/jps_upload_task'
16
+ require 'pindo/module/task/model/jps/jps_message_task'
17
+ require 'pindo/module/task/model/git/git_commit_task'
18
+ require 'pindo/module/task/model/git/git_tag_task'
15
19
  require 'pindo/config/build_info_manager'
16
20
  require 'pindo/config/ios_config_parser'
21
+ require 'pindo/options/options'
17
22
 
18
23
  module Pindo
19
24
  class Command
@@ -21,8 +26,7 @@ module Pindo
21
26
  class Autobuild < Unity
22
27
 
23
28
  include Appselect
24
-
25
- include Pindo::Githelper
29
+
26
30
  # Unity 多平台编译和上传命令
27
31
  self.summary = '编译Unity工程,生成IPA、APK、Html文件(默认编译三个平台的包)并支持上传到JPS平台'
28
32
 
@@ -66,33 +70,49 @@ module Pindo
66
70
  # 暂无参数
67
71
  ]
68
72
 
73
+ # 定义此命令使用的参数项
74
+ def self.option_items
75
+ @option_items ||= Pindo::Options::OptionGroup.merge(
76
+ Pindo::Options::JPSOptions.select(:proj, :upload, :send),
77
+ Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
78
+ Pindo::Options::UnityOptions.select_with_defaults(skipconfig: true),
79
+ Pindo::Options::GitOptions.all
80
+ )
81
+ end
82
+
69
83
  # 命令选项
70
84
  def self.options
71
85
  [
72
86
  ['--bundleid=ID', '指定iOS打包的bundleID'],
73
87
  ['--bundle_name=NAME', '指定Android Package Name(如com.example.app,会拉取对应配置)'],
74
- ['--proj=NAME', '指定上传到测试平台的项目名称'],
75
88
  ['--types=TYPES', '指定要构建的类型,逗号分隔(如:ipa,apk,html),默认全部类型'],
76
- ['--upload', '上传编译后的IPA/APK到测试平台'],
77
- ['--send', '发送通知到测试群组(同时也会发送给自己)'],
78
89
  ['--adhoc', '使用AdHoc证书打包iOS(默认使用Dev证书)'],
79
90
  ['--deploy', '使用发布证书打包iOS'],
80
- ['--release', '使用Release模式构建Android(默认使用Debug)'],
81
- ].concat(super)
91
+ ['--release', '使用Release模式构建Android(默认使用Debug)']
92
+ ].concat(option_items.map(&:to_claide_option)).concat(super)
82
93
  end
83
94
 
84
95
 
85
96
  def initialize(argv)
97
+ @options = initialize_options(argv)
86
98
 
87
- @args_proj_name = argv.option('proj')
88
- @args_upload_flag = argv.flag?('upload', false)
89
- @args_send_flag = argv.flag?('send', false)
99
+ @args_proj_name = @options[:proj]
100
+ @args_upload_flag = @options[:upload] || false
101
+ @args_send_flag = @options[:send] || false
90
102
  @args_adhoc_flag = argv.flag?('adhoc', false)
91
103
  @args_deploy_flag = argv.flag?('deploy', false)
92
104
  @args_release_flag = argv.flag?('release', false)
93
105
  @args_bundle_id = argv.option('bundleid')
94
106
  @args_bundle_name = argv.option('bundle_name')
95
107
  @args_types = argv.option('types')
108
+ @args_skip_lib = @options[:skiplib] || false
109
+ @args_skip_yoo = @options[:skipyoo] || false
110
+
111
+ # Git 参数
112
+ @args_release_branch = @options[:release_branch] || 'master'
113
+ @args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc] || 'mini')
114
+ @args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
115
+ @args_tag_pre = @options[:tag_pre] || 'v'
96
116
 
97
117
  # 如果开启 send,自动开启 upload
98
118
  if @args_send_flag
@@ -137,7 +157,7 @@ module Pindo
137
157
  pindo_project_dir = Dir.pwd
138
158
 
139
159
  # 检查是否是Unity工程
140
- unity_helper = Pindo::Client::UnityHelper.share_instance
160
+ unity_helper = Pindo::Unity::UnityHelper.share_instance
141
161
  unless unity_helper.unity_project?(pindo_project_dir)
142
162
  raise Informative, "当前目录不是Unity工程,请在Unity工程根目录下执行此命令"
143
163
  end
@@ -169,32 +189,120 @@ module Pindo
169
189
  all_tasks = []
170
190
  platform_build_tasks = {} # 存储平台对应的构建任务
171
191
 
172
- # 第零步:创建 Git 标签任务(所有编译场景都需要打 Tag)
173
- git_tag_task = Pindo::TaskSystem::GitTagTask.new(Dir.pwd)
174
- all_tasks << git_tag_task
192
+ # 按优先级排序:iOS Android → Web
193
+ platform_order = ['ios', 'android', 'web']
194
+ selected_platforms = selected_platforms.sort_by { |p| platform_order.index(p) || 999 }
195
+
196
+ # 第零步:创建 Git 提交任务
197
+ git_commit_task = Pindo::TaskSystem::GitCommitTask.new(
198
+ Dir.pwd,
199
+ release_branch: @args_release_branch,
200
+ ver_inc: @args_ver_inc,
201
+ tag_type: @args_tag_type,
202
+ tag_pre: @args_tag_pre
203
+ )
204
+ all_tasks << git_commit_task
205
+
206
+ # 记录依赖任务(用于后续平台任务的依赖链)
207
+ common_dependency_task = git_commit_task
208
+
209
+ # 判断是否只有 web 平台(web 平台需要在导出前创建 Tag)
210
+ only_web_platform = selected_platforms == ['web']
211
+
212
+ # 如果只有 web 平台,在 Unity 导出之前创建 Git 标签任务
213
+ if only_web_platform
214
+ git_tag_task = Pindo::TaskSystem::GitTagTask.new(
215
+ Dir.pwd,
216
+ release_branch: @args_release_branch,
217
+ ver_inc: @args_ver_inc,
218
+ tag_type: @args_tag_type,
219
+ tag_pre: @args_tag_pre
220
+ )
221
+ git_tag_task.dependencies << git_commit_task.id
222
+ all_tasks << git_tag_task
223
+ common_dependency_task = git_tag_task
224
+ end
225
+
226
+ # 第一步:创建 Unity 更新任务(所有平台共享,可选)
227
+ unless @args_skip_lib
228
+ unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
229
+ project_path: Dir.pwd
230
+ )
231
+ unity_update_task.dependencies << common_dependency_task.id
232
+ all_tasks << unity_update_task
233
+ common_dependency_task = unity_update_task
234
+ end
175
235
 
176
- # 第一步:为每个平台创建导出和构建任务
236
+ # 存储每个平台的 YooAsset 任务(每个平台有自己的 YooAsset 任务)
237
+ platform_yoo_tasks = {}
238
+
239
+ # 第二步:为每个平台创建导出和构建任务
177
240
  selected_platforms.each do |platform|
178
241
  platform_config = all_platform_configs[platform]
179
242
 
180
- # 1. 创建 Unity 导出任务(依赖 Git 标签任务)
181
- unity_task = create_unity_export_task(platform, all_platform_configs)
182
- unity_task.dependencies << git_tag_task.id
183
- all_tasks << unity_task
243
+ # 记录当前平台的依赖任务
244
+ platform_dependency_task = common_dependency_task
245
+
246
+ # 2.1 创建 Unity YooAsset 资源构建任务(可选,依赖共同任务)
247
+ unless @args_skip_yoo
248
+ unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
249
+ platform,
250
+ project_path: Dir.pwd
251
+ )
252
+ unity_yoo_task.dependencies << platform_dependency_task.id
253
+ all_tasks << unity_yoo_task
254
+ platform_yoo_tasks[platform] = unity_yoo_task
255
+ platform_dependency_task = unity_yoo_task
256
+ end
257
+
258
+ # 2.2 创建 Unity 导出任务(依赖上一个任务)
259
+ unity_export_task = create_unity_export_task(platform, all_platform_configs)
260
+ unity_export_task.dependencies << platform_dependency_task.id
261
+ all_tasks << unity_export_task
184
262
 
185
- # 2. 创建构建任务(依赖导出任务)
186
- build_task = create_build_task(platform, platform_config, all_platform_configs, unity_task)
263
+ # 2.3 创建构建任务(依赖导出任务)
264
+ build_task = create_build_task(platform, platform_config, all_platform_configs, unity_export_task)
187
265
  all_tasks << build_task
188
266
  platform_build_tasks[platform] = build_task
189
267
  end
190
268
 
191
- # 第二步:创建所有上传任务(最后添加,只依赖对应平台的构建任务)
192
- # 注意:create_upload_task 内部已设置 dependencies: [build_task.id]
269
+ # 第三步:创建 Git 标签任务(依赖第一个平台的构建任务)
270
+ # 注意:如果只有 web 平台,GitTagTask 已在前面创建,这里跳过
271
+ unless only_web_platform
272
+ first_build_task = platform_build_tasks[selected_platforms.first]
273
+ if first_build_task
274
+ git_tag_task = Pindo::TaskSystem::GitTagTask.new(
275
+ Dir.pwd,
276
+ release_branch: @args_release_branch,
277
+ ver_inc: @args_ver_inc,
278
+ tag_type: @args_tag_type,
279
+ tag_pre: @args_tag_pre
280
+ )
281
+ git_tag_task.dependencies << first_build_task.id
282
+ all_tasks << git_tag_task
283
+ end
284
+ end
285
+
286
+ # 第四步:创建所有上传和消息发送任务(最后添加,只依赖对应平台的构建任务)
193
287
  if @args_upload_flag
194
288
  selected_platforms.each do |platform|
195
289
  build_task = platform_build_tasks[platform]
290
+ platform_config = all_platform_configs[platform]
291
+
292
+ # 创建上传任务
196
293
  upload_task = create_upload_task(platform, all_platform_configs, build_task)
197
294
  all_tasks << upload_task
295
+
296
+ # 创建消息发送任务(依赖上传任务)
297
+ message_task = Pindo::TaskSystem::JPSMessageTask.new(
298
+ nil, # app_version_info 为 nil,从依赖任务获取
299
+ app_info_obj: all_platform_configs["app_info_obj"],
300
+ project_name: all_platform_configs["project_name"],
301
+ send_message_type: @args_send_flag ? 'group' : 'self',
302
+ data_dependencies: [upload_task.id] # 从 upload_task 获取数据
303
+ )
304
+ message_task.dependencies << upload_task.id # 执行顺序依赖
305
+ all_tasks << message_task
198
306
  end
199
307
  end
200
308
 
@@ -261,7 +369,11 @@ module Pindo
261
369
  send: @args_send_flag,
262
370
  app_info_obj: all_platform_configs["app_info_obj"], # 共享的项目信息
263
371
  workflow_info: platform_config["workflow_info"], # 平台特定的工作流
264
- project_path: platform_path
372
+ project_path: platform_path,
373
+ # Git 版本参数
374
+ ver_inc: @args_ver_inc,
375
+ tag_type: @args_tag_type,
376
+ tag_pre: @args_tag_pre
265
377
  }
266
378
 
267
379
  # 设置平台特定参数
@@ -315,12 +427,9 @@ module Pindo
315
427
  nil,
316
428
  app_info_obj: all_platform_configs["app_info_obj"], # 使用共享的项目信息
317
429
  workflow_info: platform_config["workflow_info"], # 使用平台特定的工作流
318
- project_name: all_platform_configs["project_name"],
319
- context: {
320
- send_to_chat: @args_send_flag # 是否发送到测试群
321
- },
322
- dependencies: [build_task.id] # 依赖构建任务
430
+ project_name: all_platform_configs["project_name"]
323
431
  )
432
+ upload_task.dependencies << build_task.id # 依赖构建任务
324
433
 
325
434
  upload_task
326
435
  end
@@ -9,9 +9,6 @@ module Pindo
9
9
  class Command
10
10
  class Unity < Command
11
11
  class Packpush < Unity
12
- include Pindo::Githelper
13
- extend Pindo::Executable
14
- executable :git
15
12
 
16
13
  self.summary = 'NuGet: 将NuGet包到推送到JPS系统'
17
14
 
@@ -311,9 +308,9 @@ module Pindo
311
308
 
312
309
  def check_uncommitted_files(package_dir)
313
310
  # 获取未跟踪和已修改的文件
314
- untracked_files = git!(%W(-C #{package_dir} ls-files --others --exclude-standard)).strip
315
- modified_files = git!(%W(-C #{package_dir} diff --name-only)).strip
316
- staged_files = git!(%W(-C #{package_dir} diff --cached --name-only)).strip
311
+ untracked_files = Pindo::GitHandler.git!(%W(-C #{package_dir} ls-files --others --exclude-standard)).strip
312
+ modified_files = Pindo::GitHandler.git!(%W(-C #{package_dir} diff --name-only)).strip
313
+ staged_files = Pindo::GitHandler.git!(%W(-C #{package_dir} diff --cached --name-only)).strip
317
314
 
318
315
  all_uncommitted = []
319
316
  all_uncommitted += untracked_files.split("\n").reject(&:empty?) if !untracked_files.empty?
@@ -386,8 +383,8 @@ module Pindo
386
383
 
387
384
  # 提交 .gitignore 的更改
388
385
  begin
389
- git!(%W(-C #{package_dir} add .gitignore))
390
- git!(%W(-C #{package_dir} commit -m "chore: 添加 build 目录到 .gitignore"))
386
+ Pindo::GitHandler.git!(%W(-C #{package_dir} add .gitignore))
387
+ Pindo::GitHandler.git!(%W(-C #{package_dir} commit -m "chore: 添加 build 目录到 .gitignore"))
391
388
  puts "✅ 已提交 .gitignore 更改"
392
389
  rescue => e
393
390
  puts "⚠️ 提交 .gitignore 失败: #{e.message}"
@@ -6,8 +6,6 @@ module Pindo
6
6
  class Utils < Command
7
7
  class Repoinit < Utils
8
8
 
9
- include Pindo::Githelper
10
-
11
9
  # 命令的简要说明 - 初始化git仓库配置
12
10
  self.summary = '初始化git仓库中git cliff的配置'
13
11