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.
- checksums.yaml +4 -4
- data/lib/pindo/base/git_handler.rb +247 -42
- data/lib/pindo/command/android/autobuild.rb +104 -31
- data/lib/pindo/command/android/autoresign.rb +23 -322
- data/lib/pindo/command/android/keystore.rb +7 -130
- data/lib/pindo/command/appstore/adhocbuild.rb +52 -15
- data/lib/pindo/command/appstore/autobuild.rb +104 -8
- data/lib/pindo/command/appstore/autoresign.rb +3 -5
- data/lib/pindo/command/ios/autobuild.rb +96 -32
- data/lib/pindo/command/ios/build.rb +8 -186
- data/lib/pindo/command/jps/media.rb +146 -0
- data/lib/pindo/command/jps/upload.rb +49 -21
- data/lib/pindo/command/jps.rb +1 -0
- data/lib/pindo/command/unity/autobuild.rb +141 -32
- data/lib/pindo/command/unity/packpush.rb +5 -8
- data/lib/pindo/command/utils/repoinit.rb +0 -2
- data/lib/pindo/command/utils/tag.rb +58 -26
- data/lib/pindo/command/utils.rb +0 -1
- data/lib/pindo/command/web/autobuild.rb +98 -34
- data/lib/pindo/command.rb +0 -56
- data/lib/pindo/config/build_info_manager.rb +7 -8
- data/lib/pindo/module/android/android_config_helper.rb +2 -11
- data/lib/pindo/module/appselect.rb +15 -41
- data/lib/pindo/module/appstore/itcapp_helper.rb +3 -6
- data/lib/pindo/module/build/build_helper.rb +28 -18
- data/lib/pindo/module/build/git_repo_helper.rb +284 -405
- data/lib/pindo/module/cert/pem_helper.rb +3 -6
- data/lib/pindo/module/pgyer/pgyerhelper.rb +193 -25
- data/lib/pindo/module/task/model/appstore/appstore_task.rb +5 -0
- data/lib/pindo/module/task/model/build/android_build_adhoc_task.rb +13 -187
- data/lib/pindo/module/task/model/build/android_build_dev_task.rb +36 -34
- data/lib/pindo/module/task/model/build/android_build_gplay_task.rb +13 -187
- data/lib/pindo/module/task/model/build/ios_build_adhoc_task.rb +9 -6
- data/lib/pindo/module/task/model/build/ios_build_appstore_task.rb +9 -6
- data/lib/pindo/module/task/model/build/ios_build_dev_task.rb +37 -32
- data/lib/pindo/module/task/model/build/web_build_dev_task.rb +7 -5
- data/lib/pindo/module/task/model/build_task.rb +8 -11
- data/lib/pindo/module/task/model/git/git_commit_task.rb +118 -0
- data/lib/pindo/module/task/model/git/git_tag_task.rb +125 -0
- data/lib/pindo/module/task/model/git_task.rb +75 -0
- data/lib/pindo/module/task/model/jps/jps_message_task.rb +178 -0
- data/lib/pindo/module/task/model/{jps_resign_task.rb → jps/jps_resign_task.rb} +14 -23
- data/lib/pindo/module/task/model/jps/jps_upload_media_task.rb +248 -0
- data/lib/pindo/module/task/model/{jps_upload_task.rb → jps/jps_upload_task.rb} +39 -94
- data/lib/pindo/module/task/model/jps_task.rb +43 -0
- data/lib/pindo/module/task/model/{ipa_local_resign_task.rb → resign/ipa_local_resign_task.rb} +7 -2
- data/lib/pindo/module/task/model/unity/unity_config_task.rb +103 -0
- data/lib/pindo/module/task/model/{unity_export_task.rb → unity/unity_export_task.rb} +76 -78
- data/lib/pindo/module/task/model/unity/unity_update_task.rb +95 -0
- data/lib/pindo/module/task/model/unity/unity_yoo_asset_task.rb +156 -0
- data/lib/pindo/module/task/model/unity_task.rb +118 -0
- data/lib/pindo/module/task/pindo_task.rb +101 -1
- data/lib/pindo/module/task/task_manager.rb +29 -24
- data/lib/pindo/module/unity/nuget_helper.rb +7 -7
- data/lib/pindo/module/unity/unity_command_helper.rb +188 -0
- data/lib/pindo/module/unity/unity_env_helper.rb +208 -0
- data/lib/pindo/module/unity/unity_helper.rb +189 -746
- data/lib/pindo/module/unity/unity_proc_helper.rb +390 -0
- data/lib/pindo/options/core/global_options_state.rb +96 -26
- data/lib/pindo/options/core/option_configuration.rb +3 -0
- data/lib/pindo/options/core/option_item.rb +36 -0
- data/lib/pindo/options/groups/build_options.rb +23 -6
- data/lib/pindo/options/groups/git_options.rb +115 -0
- data/lib/pindo/options/groups/jps_options.rb +7 -0
- data/lib/pindo/options/groups/option_group.rb +15 -0
- data/lib/pindo/options/groups/unity_options.rb +49 -0
- data/lib/pindo/options/options.rb +2 -0
- data/lib/pindo/version.rb +2 -2
- metadata +25 -14
- data/lib/pindo/base/githelper.rb +0 -686
- data/lib/pindo/base/pindocontext.rb +0 -602
- data/lib/pindo/command/utils/feishu.rb +0 -134
- data/lib/pindo/module/build/version_helper.rb +0 -146
- 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/
|
|
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
|
|
54
|
-
['--ipa', '强制指定上传的ipa
|
|
55
|
-
['--
|
|
56
|
-
|
|
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
|
-
#
|
|
145
|
-
|
|
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. 查找并创建上传任务
|
data/lib/pindo/command/jps.rb
CHANGED
|
@@ -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/
|
|
13
|
-
require 'pindo/module/task/model/
|
|
14
|
-
require 'pindo/module/task/model/
|
|
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 =
|
|
88
|
-
@args_upload_flag =
|
|
89
|
-
@args_send_flag =
|
|
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::
|
|
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
|
-
#
|
|
173
|
-
|
|
174
|
-
|
|
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
|
-
#
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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,
|
|
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
|
-
#
|
|
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}"
|