pindo 5.14.4 → 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.
- checksums.yaml +4 -4
- data/lib/pindo/base/git_handler.rb +140 -65
- data/lib/pindo/client/httpclient.rb +88 -12
- data/lib/pindo/command/android/autobuild.rb +100 -32
- data/lib/pindo/command/appstore/bundleid.rb +1 -1
- data/lib/pindo/command/appstore/pem.rb +1 -1
- data/lib/pindo/command/ios/autobuild.rb +116 -56
- data/lib/pindo/command/jps/apptest.rb +129 -50
- data/lib/pindo/command/jps/bind.rb +284 -121
- data/lib/pindo/command/jps/media.rb +1 -15
- data/lib/pindo/command/jps/resign.rb +109 -99
- data/lib/pindo/command/jps/upload.rb +31 -4
- data/lib/pindo/command/jps.rb +0 -1
- data/lib/pindo/command/unity/autobuild.rb +100 -39
- data/lib/pindo/command/web/autobuild.rb +95 -27
- data/lib/pindo/command.rb +23 -15
- data/lib/pindo/module/pgyer/pgyerhelper.rb +181 -0
- data/lib/pindo/module/task/model/git/git_commit_task.rb +55 -4
- data/lib/pindo/module/task/model/git/git_tag_task.rb +5 -4
- data/lib/pindo/module/task/model/jps/jps_bind_package_task.rb +233 -0
- data/lib/pindo/module/task/model/jps/jps_message_task.rb +9 -6
- data/lib/pindo/module/task/model/jps/jps_resign_task.rb +20 -21
- data/lib/pindo/module/task/model/jps/jps_upload_media_task.rb +57 -22
- data/lib/pindo/module/task/model/jps/jps_upload_task.rb +4 -4
- data/lib/pindo/module/task/model/jps/jps_workflow_message_task.rb +190 -0
- data/lib/pindo/options/core/option_configuration.rb +4 -36
- data/lib/pindo/options/core/option_initializer.rb +6 -3
- data/lib/pindo/options/core/option_item.rb +0 -3
- data/lib/pindo/options/groups/jps_options.rb +30 -10
- data/lib/pindo/version.rb +1 -1
- metadata +12 -37
- data/lib/pindo/command/jps/comment.rb +0 -84
|
@@ -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
|
-
重签名
|
|
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 --
|
|
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
|
-
|
|
53
|
-
@
|
|
54
|
-
@
|
|
55
|
-
@
|
|
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
|
-
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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, .
|
|
439
|
+
raise Informative, "不支持的文件类型: #{ext},支持的类型:.ipa, .apk, .app, .exe, .html"
|
|
413
440
|
end
|
|
414
441
|
end
|
|
415
442
|
|
data/lib/pindo/command/jps.rb
CHANGED
|
@@ -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
|
-
|
|
44
|
+
2. --upload:
|
|
45
|
+
- 在基础流程上增加:上传所有平台包 → 发送消息给自己
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
3. --media:
|
|
48
|
+
- 自动启用 --upload
|
|
49
|
+
- 在 --upload 基础上增加:上传媒体附件(JPSMedia/ 目录)
|
|
48
50
|
|
|
49
|
-
|
|
51
|
+
4. --bind:
|
|
52
|
+
- 自动启用 --media 和 --upload
|
|
53
|
+
- 在 --media 基础上增加:绑定 Git commit 到已上传的包
|
|
50
54
|
|
|
51
|
-
|
|
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 --
|
|
73
|
+
$ pindo unity autobuild --types=apk,html # 编译 APK 和 HTML
|
|
62
74
|
|
|
63
|
-
$ pindo unity autobuild --
|
|
75
|
+
$ pindo unity autobuild --bundleid=com.example.app # 指定 Bundle ID (iOS)
|
|
64
76
|
|
|
65
|
-
$ pindo unity autobuild --
|
|
77
|
+
$ pindo unity autobuild --bundle_name=com.example.app # 指定 Bundle Name (Android)
|
|
66
78
|
|
|
67
|
-
$ pindo unity autobuild --
|
|
79
|
+
$ pindo unity autobuild --proj="My App" # 指定项目名称
|
|
68
80
|
|
|
69
|
-
$ pindo unity autobuild
|
|
81
|
+
$ pindo unity autobuild # 编译所有平台、打tag
|
|
70
82
|
|
|
71
|
-
$ pindo unity autobuild --
|
|
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 --
|
|
89
|
+
$ pindo unity autobuild --send # 编译、打tag、上传、发上传消息、上传媒体附件、绑定包到工作流 + 发送群消息
|
|
74
90
|
|
|
75
|
-
$ pindo unity autobuild --multi
|
|
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 =
|
|
118
|
-
@args_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:
|
|
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
|
-
#
|
|
333
|
-
|
|
334
|
-
|
|
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
|
-
#
|
|
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,
|