pindo 5.13.9 → 5.13.11

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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/base/funlog.rb +13 -0
  3. data/lib/pindo/base/git_handler.rb +247 -42
  4. data/lib/pindo/command/android/autobuild.rb +72 -30
  5. data/lib/pindo/command/android/autoresign.rb +23 -322
  6. data/lib/pindo/command/android/keystore.rb +7 -130
  7. data/lib/pindo/command/appstore/adhocbuild.rb +5 -14
  8. data/lib/pindo/command/appstore/autobuild.rb +64 -14
  9. data/lib/pindo/command/appstore/autoresign.rb +1 -3
  10. data/lib/pindo/command/ios/autobuild.rb +71 -53
  11. data/lib/pindo/command/ios/build.rb +8 -186
  12. data/lib/pindo/command/jps/media.rb +146 -0
  13. data/lib/pindo/command/jps/upload.rb +48 -20
  14. data/lib/pindo/command/jps.rb +1 -0
  15. data/lib/pindo/command/unity/autobuild.rb +99 -27
  16. data/lib/pindo/command/unity/packpush.rb +5 -8
  17. data/lib/pindo/command/utils/repoinit.rb +0 -2
  18. data/lib/pindo/command/utils/tag.rb +58 -26
  19. data/lib/pindo/command/utils.rb +0 -1
  20. data/lib/pindo/command/web/autobuild.rb +71 -37
  21. data/lib/pindo/command.rb +0 -56
  22. data/lib/pindo/config/build_info_manager.rb +7 -8
  23. data/lib/pindo/module/android/android_config_helper.rb +2 -11
  24. data/lib/pindo/module/appselect.rb +15 -41
  25. data/lib/pindo/module/appstore/itcapp_helper.rb +3 -6
  26. data/lib/pindo/module/build/build_helper.rb +28 -18
  27. data/lib/pindo/module/build/git_repo_helper.rb +284 -405
  28. data/lib/pindo/module/cert/pem_helper.rb +3 -6
  29. data/lib/pindo/module/pgyer/pgyerhelper.rb +193 -25
  30. data/lib/pindo/module/task/model/appstore/appstore_task.rb +5 -0
  31. data/lib/pindo/module/task/model/build/android_build_adhoc_task.rb +13 -187
  32. data/lib/pindo/module/task/model/build/android_build_dev_task.rb +36 -34
  33. data/lib/pindo/module/task/model/build/android_build_gplay_task.rb +13 -187
  34. data/lib/pindo/module/task/model/build/ios_build_adhoc_task.rb +9 -6
  35. data/lib/pindo/module/task/model/build/ios_build_appstore_task.rb +9 -6
  36. data/lib/pindo/module/task/model/build/ios_build_dev_task.rb +37 -32
  37. data/lib/pindo/module/task/model/build/web_build_dev_task.rb +7 -5
  38. data/lib/pindo/module/task/model/build_task.rb +8 -11
  39. data/lib/pindo/module/task/model/git/git_commit_task.rb +118 -0
  40. data/lib/pindo/module/task/model/git/git_tag_task.rb +125 -0
  41. data/lib/pindo/module/task/model/git_task.rb +75 -0
  42. data/lib/pindo/module/task/model/jps/jps_message_task.rb +178 -0
  43. data/lib/pindo/module/task/model/{resign → jps}/jps_resign_task.rb +13 -22
  44. data/lib/pindo/module/task/model/jps/jps_upload_media_task.rb +248 -0
  45. data/lib/pindo/module/task/model/jps/jps_upload_task.rb +38 -93
  46. data/lib/pindo/module/task/model/jps_task.rb +43 -0
  47. data/lib/pindo/module/task/model/resign/ipa_local_resign_task.rb +5 -0
  48. data/lib/pindo/module/task/model/unity/unity_config_task.rb +0 -4
  49. data/lib/pindo/module/task/model/unity/unity_export_task.rb +8 -7
  50. data/lib/pindo/module/task/model/unity/unity_update_task.rb +4 -3
  51. data/lib/pindo/module/task/model/unity/unity_yoo_asset_task.rb +8 -7
  52. data/lib/pindo/module/task/model/unity_task.rb +7 -2
  53. data/lib/pindo/module/task/pindo_task.rb +101 -1
  54. data/lib/pindo/module/task/task_manager.rb +29 -32
  55. data/lib/pindo/module/unity/nuget_helper.rb +7 -7
  56. data/lib/pindo/options/core/global_options_state.rb +96 -26
  57. data/lib/pindo/options/core/option_configuration.rb +3 -0
  58. data/lib/pindo/options/core/option_item.rb +36 -0
  59. data/lib/pindo/options/groups/build_options.rb +23 -6
  60. data/lib/pindo/options/groups/git_options.rb +115 -0
  61. data/lib/pindo/options/groups/jps_options.rb +7 -0
  62. data/lib/pindo/options/groups/option_group.rb +15 -0
  63. data/lib/pindo/options/groups/unity_options.rb +49 -0
  64. data/lib/pindo/options/options.rb +2 -0
  65. data/lib/pindo/version.rb +2 -2
  66. metadata +15 -11
  67. data/lib/pindo/base/githelper.rb +0 -686
  68. data/lib/pindo/base/pindocontext.rb +0 -602
  69. data/lib/pindo/command/utils/feishu.rb +0 -134
  70. data/lib/pindo/module/build/version_helper.rb +0 -146
  71. 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
@@ -7,7 +7,9 @@ require 'pindo/module/build/git_repo_helper'
7
7
  require 'pindo/module/build/build_helper'
8
8
  require 'pindo/module/task/task_manager'
9
9
  require 'pindo/module/task/model/jps/jps_upload_task'
10
- require 'pindo/module/task/model/git_tag_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'
@@ -13,9 +13,12 @@ require 'pindo/module/task/model/unity/unity_update_task'
13
13
  require 'pindo/module/task/model/unity/unity_yoo_asset_task'
14
14
  require 'pindo/module/task/model/unity/unity_export_task'
15
15
  require 'pindo/module/task/model/jps/jps_upload_task'
16
- require 'pindo/module/task/model/git_tag_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'
17
19
  require 'pindo/config/build_info_manager'
18
20
  require 'pindo/config/ios_config_parser'
21
+ require 'pindo/options/options'
19
22
 
20
23
  module Pindo
21
24
  class Command
@@ -23,8 +26,7 @@ module Pindo
23
26
  class Autobuild < Unity
24
27
 
25
28
  include Appselect
26
-
27
- include Pindo::Githelper
29
+
28
30
  # Unity 多平台编译和上传命令
29
31
  self.summary = '编译Unity工程,生成IPA、APK、Html文件(默认编译三个平台的包)并支持上传到JPS平台'
30
32
 
@@ -68,37 +70,49 @@ module Pindo
68
70
  # 暂无参数
69
71
  ]
70
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
+
71
83
  # 命令选项
72
84
  def self.options
73
85
  [
74
86
  ['--bundleid=ID', '指定iOS打包的bundleID'],
75
87
  ['--bundle_name=NAME', '指定Android Package Name(如com.example.app,会拉取对应配置)'],
76
- ['--proj=NAME', '指定上传到测试平台的项目名称'],
77
88
  ['--types=TYPES', '指定要构建的类型,逗号分隔(如:ipa,apk,html),默认全部类型'],
78
- ['--upload', '上传编译后的IPA/APK到测试平台'],
79
- ['--send', '发送通知到测试群组(同时也会发送给自己)'],
80
89
  ['--adhoc', '使用AdHoc证书打包iOS(默认使用Dev证书)'],
81
90
  ['--deploy', '使用发布证书打包iOS'],
82
- ['--release', '使用Release模式构建Android(默认使用Debug)'],
83
- ['--skiplib', '跳过Unity必备库更新(加快构建速度)'],
84
- ['--skipyoo', '跳过YooAsset资源打包(加快构建速度)']
85
- ].concat(super)
91
+ ['--release', '使用Release模式构建Android(默认使用Debug)']
92
+ ].concat(option_items.map(&:to_claide_option)).concat(super)
86
93
  end
87
94
 
88
95
 
89
96
  def initialize(argv)
97
+ @options = initialize_options(argv)
90
98
 
91
- @args_proj_name = argv.option('proj')
92
- @args_upload_flag = argv.flag?('upload', false)
93
- @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
94
102
  @args_adhoc_flag = argv.flag?('adhoc', false)
95
103
  @args_deploy_flag = argv.flag?('deploy', false)
96
104
  @args_release_flag = argv.flag?('release', false)
97
105
  @args_bundle_id = argv.option('bundleid')
98
106
  @args_bundle_name = argv.option('bundle_name')
99
107
  @args_types = argv.option('types')
100
- @args_skip_lib = argv.flag?('skiplib', false)
101
- @args_skip_yoo = argv.flag?('skipyoo', false)
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'
102
116
 
103
117
  # 如果开启 send,自动开启 upload
104
118
  if @args_send_flag
@@ -175,12 +189,39 @@ module Pindo
175
189
  all_tasks = []
176
190
  platform_build_tasks = {} # 存储平台对应的构建任务
177
191
 
178
- # 第零步:创建 Git 标签任务(所有编译场景都需要打 Tag)
179
- git_tag_task = Pindo::TaskSystem::GitTagTask.new(Dir.pwd)
180
- 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
181
205
 
182
206
  # 记录依赖任务(用于后续平台任务的依赖链)
183
- common_dependency_task = git_tag_task
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
184
225
 
185
226
  # 第一步:创建 Unity 更新任务(所有平台共享,可选)
186
227
  unless @args_skip_lib
@@ -225,13 +266,43 @@ module Pindo
225
266
  platform_build_tasks[platform] = build_task
226
267
  end
227
268
 
228
- # 第二步:创建所有上传任务(最后添加,只依赖对应平台的构建任务)
229
- # 注意: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
+ # 第四步:创建所有上传和消息发送任务(最后添加,只依赖对应平台的构建任务)
230
287
  if @args_upload_flag
231
288
  selected_platforms.each do |platform|
232
289
  build_task = platform_build_tasks[platform]
290
+ platform_config = all_platform_configs[platform]
291
+
292
+ # 创建上传任务
233
293
  upload_task = create_upload_task(platform, all_platform_configs, build_task)
234
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
235
306
  end
236
307
  end
237
308
 
@@ -298,7 +369,11 @@ module Pindo
298
369
  send: @args_send_flag,
299
370
  app_info_obj: all_platform_configs["app_info_obj"], # 共享的项目信息
300
371
  workflow_info: platform_config["workflow_info"], # 平台特定的工作流
301
- 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
302
377
  }
303
378
 
304
379
  # 设置平台特定参数
@@ -352,12 +427,9 @@ module Pindo
352
427
  nil,
353
428
  app_info_obj: all_platform_configs["app_info_obj"], # 使用共享的项目信息
354
429
  workflow_info: platform_config["workflow_info"], # 使用平台特定的工作流
355
- project_name: all_platform_configs["project_name"],
356
- context: {
357
- send_to_chat: @args_send_flag # 是否发送到测试群
358
- },
359
- dependencies: [build_task.id] # 依赖构建任务
430
+ project_name: all_platform_configs["project_name"]
360
431
  )
432
+ upload_task.dependencies << build_task.id # 依赖构建任务
361
433
 
362
434
  upload_task
363
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
 
@@ -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'