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
|
@@ -9,9 +9,15 @@ require 'pindo/module/xcode/xcode_app_config'
|
|
|
9
9
|
require 'pindo/module/xcode/xcode_build_helper'
|
|
10
10
|
require 'pindo/config/ios_config_parser'
|
|
11
11
|
require 'pindo/config/build_info_manager'
|
|
12
|
+
require 'pindo/config/pindoconfig'
|
|
12
13
|
require 'pindo/module/task/task_manager'
|
|
13
|
-
require 'pindo/module/task/model/
|
|
14
|
+
require 'pindo/module/task/model/unity/unity_config_task'
|
|
15
|
+
require 'pindo/module/task/model/unity/unity_update_task'
|
|
16
|
+
require 'pindo/module/task/model/unity/unity_yoo_asset_task'
|
|
17
|
+
require 'pindo/module/task/model/unity/unity_export_task'
|
|
14
18
|
require 'pindo/module/task/model/build_task'
|
|
19
|
+
require 'pindo/module/task/model/git/git_commit_task'
|
|
20
|
+
require 'pindo/module/task/model/git/git_tag_task'
|
|
15
21
|
require 'pindo/options/options'
|
|
16
22
|
|
|
17
23
|
module Pindo
|
|
@@ -58,13 +64,17 @@ module Pindo
|
|
|
58
64
|
|
|
59
65
|
# 定义此命令使用的参数项
|
|
60
66
|
def self.option_items
|
|
61
|
-
@option_items ||= Pindo::Options::
|
|
67
|
+
@option_items ||= Pindo::Options::OptionGroup.merge(
|
|
68
|
+
Pindo::Options::BuildOptions.select(:bundleid),
|
|
69
|
+
Pindo::Options::UnityOptions.all,
|
|
70
|
+
Pindo::Options::GitOptions.except(:tag_pre),
|
|
71
|
+
Pindo::Options::GitOptions.select_with_defaults(tag_pre: 'ios_release_')
|
|
72
|
+
)
|
|
62
73
|
end
|
|
63
74
|
|
|
64
75
|
# 命令的选项列表
|
|
65
76
|
def self.options
|
|
66
|
-
|
|
67
|
-
option_items.map { |item| item.to_claide_option }.concat(super)
|
|
77
|
+
option_items.map(&:to_claide_option).concat(super)
|
|
68
78
|
end
|
|
69
79
|
|
|
70
80
|
def initialize(argv)
|
|
@@ -77,6 +87,14 @@ module Pindo
|
|
|
77
87
|
# 保存参数到实例变量
|
|
78
88
|
# 优先使用选项参数,如果没有则使用位置参数
|
|
79
89
|
@args_bundle_id = @options[:bundleid] || positional_bundleid
|
|
90
|
+
@args_skip_config = argv.flag?('skipconfig', false)
|
|
91
|
+
@args_skip_lib = argv.flag?('skiplib', false)
|
|
92
|
+
@args_skip_yoo = argv.flag?('skipyoo', false)
|
|
93
|
+
|
|
94
|
+
# Git 参数
|
|
95
|
+
@args_release_branch = @options[:release_branch] || 'master'
|
|
96
|
+
@args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
|
|
97
|
+
@args_tag_pre = @options[:tag_pre] || 'ios_release_'
|
|
80
98
|
|
|
81
99
|
super(argv)
|
|
82
100
|
end
|
|
@@ -166,20 +184,67 @@ module Pindo
|
|
|
166
184
|
|
|
167
185
|
tasks = []
|
|
168
186
|
|
|
169
|
-
#
|
|
187
|
+
# 0. Git 提交任务(使用 IosConfigParser 的版本号)
|
|
188
|
+
fixed_version = Pindo::IosConfigParser.instance.app_version
|
|
189
|
+
git_commit_task = Pindo::TaskSystem::GitCommitTask.new(
|
|
190
|
+
project_path,
|
|
191
|
+
release_branch: @args_release_branch,
|
|
192
|
+
tag_type: @args_tag_type,
|
|
193
|
+
tag_pre: @args_tag_pre,
|
|
194
|
+
fixed_version: fixed_version
|
|
195
|
+
)
|
|
196
|
+
tasks << git_commit_task
|
|
197
|
+
last_task = git_commit_task
|
|
198
|
+
|
|
199
|
+
# 1. Unity 任务链(仅 Unity 工程)
|
|
170
200
|
if is_unity
|
|
171
201
|
# 确定 iOS 导出路径
|
|
172
202
|
base_ios_path = File.join(project_path, "GoodPlatform", "BaseiOS")
|
|
173
203
|
ios_path = File.join(project_path, "GoodPlatform", "iOS")
|
|
174
204
|
ios_export_path = File.exist?(base_ios_path) ? base_ios_path : ios_path
|
|
175
205
|
|
|
176
|
-
|
|
206
|
+
# 1.1 Unity 配置编译模式任务(可选)
|
|
207
|
+
unless @args_skip_config
|
|
208
|
+
unity_config_task = Pindo::TaskSystem::UnityConfigTask.new(
|
|
209
|
+
'release', # AppStore 使用 release 模式
|
|
210
|
+
project_path: project_path
|
|
211
|
+
)
|
|
212
|
+
unity_config_task.dependencies << last_task.id
|
|
213
|
+
tasks << unity_config_task
|
|
214
|
+
last_task = unity_config_task
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# 1.2 Unity 更新必备库任务(可选)
|
|
218
|
+
unless @args_skip_lib
|
|
219
|
+
unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
|
|
220
|
+
project_path: project_path
|
|
221
|
+
)
|
|
222
|
+
unity_update_task.dependencies << last_task.id
|
|
223
|
+
tasks << unity_update_task
|
|
224
|
+
last_task = unity_update_task
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
# 1.3 Unity YooAsset 资源构建任务(可选,依赖上一个任务)
|
|
228
|
+
unless @args_skip_yoo
|
|
229
|
+
unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
|
|
230
|
+
'ios',
|
|
231
|
+
project_path: project_path
|
|
232
|
+
)
|
|
233
|
+
unity_yoo_task.dependencies << last_task.id
|
|
234
|
+
tasks << unity_yoo_task
|
|
235
|
+
last_task = unity_yoo_task
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# 1.4 Unity 导出任务(依赖上一个任务)
|
|
239
|
+
unity_export_task = Pindo::TaskSystem::UnityExportTask.new(
|
|
177
240
|
'ios',
|
|
178
241
|
project_path: project_path,
|
|
179
242
|
export_path: ios_export_path,
|
|
180
243
|
deploy_mode: 'release' # AppStore 使用 release 模式
|
|
181
244
|
)
|
|
182
|
-
|
|
245
|
+
unity_export_task.dependencies << last_task.id
|
|
246
|
+
tasks << unity_export_task
|
|
247
|
+
last_task = unity_export_task
|
|
183
248
|
end
|
|
184
249
|
|
|
185
250
|
# 2. 构建任务
|
|
@@ -202,9 +267,40 @@ module Pindo
|
|
|
202
267
|
mode: :release,
|
|
203
268
|
options: build_options
|
|
204
269
|
)
|
|
205
|
-
build_task.dependencies <<
|
|
270
|
+
build_task.dependencies << last_task.id
|
|
206
271
|
tasks << build_task
|
|
207
272
|
|
|
273
|
+
# 3. Git 标签任务 - 项目仓库(使用 IosConfigParser 的版本号)
|
|
274
|
+
fixed_version = Pindo::IosConfigParser.instance.app_version
|
|
275
|
+
git_tag_task = Pindo::TaskSystem::GitTagTask.new(
|
|
276
|
+
project_path,
|
|
277
|
+
release_branch: @args_release_branch,
|
|
278
|
+
tag_type: @args_tag_type,
|
|
279
|
+
tag_pre: @args_tag_pre,
|
|
280
|
+
fixed_version: fixed_version
|
|
281
|
+
)
|
|
282
|
+
git_tag_task.dependencies << build_task.id
|
|
283
|
+
tasks << git_tag_task
|
|
284
|
+
|
|
285
|
+
# 4. Git 标签任务 - 配置仓库(使用 IosConfigParser 的版本号)
|
|
286
|
+
app_repo_name = Pindo::IosConfigParser.instance.app_repo_name
|
|
287
|
+
if app_repo_name && !app_repo_name.empty?
|
|
288
|
+
pindo_dir = File.expand_path(Pindoconfig.instance.pindo_dir)
|
|
289
|
+
config_repo_path = File.join(pindo_dir, app_repo_name)
|
|
290
|
+
|
|
291
|
+
if File.exist?(config_repo_path)
|
|
292
|
+
config_git_tag_task = Pindo::TaskSystem::GitTagTask.new(
|
|
293
|
+
config_repo_path,
|
|
294
|
+
release_branch: @args_release_branch,
|
|
295
|
+
tag_type: @args_tag_type,
|
|
296
|
+
tag_pre: @args_tag_pre,
|
|
297
|
+
fixed_version: fixed_version
|
|
298
|
+
)
|
|
299
|
+
config_git_tag_task.dependencies << git_tag_task.id
|
|
300
|
+
tasks << config_git_tag_task
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
|
|
208
304
|
tasks
|
|
209
305
|
else
|
|
210
306
|
raise Informative, "当前目录不是工程目录,不能编译"
|
|
@@ -5,10 +5,9 @@ require 'fileutils'
|
|
|
5
5
|
require 'pindo/base/executable'
|
|
6
6
|
require 'pindo/config/ios_config_parser'
|
|
7
7
|
require 'pindo/config/build_info_manager'
|
|
8
|
-
require 'pindo/base/pindocontext'
|
|
9
8
|
require 'pindo/module/task/task_manager'
|
|
10
|
-
require 'pindo/module/task/model/ipa_local_resign_task'
|
|
11
|
-
require 'pindo/module/task/model/jps_upload_task'
|
|
9
|
+
require 'pindo/module/task/model/resign/ipa_local_resign_task'
|
|
10
|
+
require 'pindo/module/task/model/jps/jps_upload_task'
|
|
12
11
|
require 'pindo/options/options'
|
|
13
12
|
|
|
14
13
|
module Pindo
|
|
@@ -139,8 +138,7 @@ module Pindo
|
|
|
139
138
|
def run
|
|
140
139
|
begin
|
|
141
140
|
# 加载 JPS 配置(如果存在)
|
|
142
|
-
|
|
143
|
-
context.load_and_apply_jps_config(Dir.pwd)
|
|
141
|
+
Pindo::BuildHelper.share_instance.load_jps_build_config(Dir.pwd)
|
|
144
142
|
|
|
145
143
|
# 1. 查找或指定 IPA 文件
|
|
146
144
|
ipa_file_path = find_ipa_file()
|
|
@@ -4,15 +4,18 @@ require 'find'
|
|
|
4
4
|
require 'fileutils'
|
|
5
5
|
require 'pindo/base/executable'
|
|
6
6
|
require 'pindo/module/build/build_helper'
|
|
7
|
-
require 'pindo/module/build/
|
|
7
|
+
require 'pindo/module/build/git_repo_helper'
|
|
8
8
|
require 'pindo/module/xcode/xcode_build_config'
|
|
9
9
|
require 'pindo/module/xcode/xcode_build_helper'
|
|
10
|
-
require 'pindo/base/pindocontext'
|
|
11
10
|
require 'pindo/module/task/task_manager'
|
|
12
|
-
require 'pindo/module/task/model/
|
|
13
|
-
require 'pindo/module/task/model/
|
|
11
|
+
require 'pindo/module/task/model/git/git_commit_task'
|
|
12
|
+
require 'pindo/module/task/model/git/git_tag_task'
|
|
13
|
+
require 'pindo/module/task/model/unity/unity_update_task'
|
|
14
|
+
require 'pindo/module/task/model/unity/unity_yoo_asset_task'
|
|
15
|
+
require 'pindo/module/task/model/unity/unity_export_task'
|
|
14
16
|
require 'pindo/module/task/model/build_task'
|
|
15
|
-
require 'pindo/module/task/model/jps_upload_task'
|
|
17
|
+
require 'pindo/module/task/model/jps/jps_upload_task'
|
|
18
|
+
require 'pindo/module/task/model/jps/jps_message_task'
|
|
16
19
|
require 'pindo/options/options'
|
|
17
20
|
require 'pindo/options/helpers/bundleid_selector'
|
|
18
21
|
require 'pindo/config/build_info_manager'
|
|
@@ -30,9 +33,7 @@ module Pindo
|
|
|
30
33
|
def self.use_cache?
|
|
31
34
|
true # 此命令启用缓存
|
|
32
35
|
end
|
|
33
|
-
|
|
34
|
-
# ios:autobuild 与 unity:ipa 共享 'ios:autobuild' 缓存组
|
|
35
|
-
|
|
36
|
+
|
|
36
37
|
# 命令的详细说明,包含用法示例
|
|
37
38
|
self.description = <<-DESC
|
|
38
39
|
编译IPA,自动修改工程配置并支持上传到JPS测试平台。
|
|
@@ -72,7 +73,10 @@ module Pindo
|
|
|
72
73
|
@option_items ||= begin
|
|
73
74
|
items = Pindo::Options::OptionGroup.merge(
|
|
74
75
|
Pindo::Options::BuildOptions.select(:bundleid, :build_type),
|
|
75
|
-
Pindo::Options::JPSOptions.select(:proj, :upload, :send)
|
|
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
|
|
76
80
|
)
|
|
77
81
|
|
|
78
82
|
# 为 bundleid 参数添加 value_block(交互式选择)
|
|
@@ -91,25 +95,33 @@ module Pindo
|
|
|
91
95
|
|
|
92
96
|
# 命令的选项列表
|
|
93
97
|
def self.options
|
|
94
|
-
|
|
95
|
-
option_items.map { |item| item.to_claide_option }.concat(super)
|
|
98
|
+
option_items.map(&:to_claide_option).concat(super)
|
|
96
99
|
end
|
|
97
100
|
|
|
98
101
|
def initialize(argv)
|
|
99
102
|
# 先提取 build_type(因为 bundleid 的 value_block 需要用到它)
|
|
100
103
|
@build_type = argv.option('build_type', 'dev')
|
|
101
104
|
|
|
102
|
-
# 一行代码完成参数初始化(自动推导命令名、自动启用缓存)
|
|
103
105
|
@options = initialize_options(argv)
|
|
104
106
|
|
|
105
107
|
# 保存参数到实例变量
|
|
106
|
-
@build_type = @options[:build_type] || @build_type
|
|
108
|
+
@build_type = @options[:build_type] || @build_type
|
|
107
109
|
@args_send_flag = @options[:send]
|
|
108
110
|
# send 依赖 upload:如果指定了 send,自动启用 upload
|
|
109
111
|
@args_upload_flag = @options[:send] || @options[:upload]
|
|
110
112
|
@args_proj_name = @options[:proj]
|
|
111
113
|
@args_bundle_id = @options[:bundleid]
|
|
112
114
|
|
|
115
|
+
# Unity 参数
|
|
116
|
+
@args_skip_lib = @options[:skiplib] || false
|
|
117
|
+
@args_skip_yoo = @options[:skipyoo] || false
|
|
118
|
+
|
|
119
|
+
# Git 参数
|
|
120
|
+
@args_release_branch = @options[:release_branch] || 'master'
|
|
121
|
+
@args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc] || 'mini')
|
|
122
|
+
@args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
|
|
123
|
+
@args_tag_pre = @options[:tag_pre] || 'v'
|
|
124
|
+
|
|
113
125
|
super
|
|
114
126
|
@additional_args = argv.remainder!
|
|
115
127
|
end
|
|
@@ -124,11 +136,7 @@ module Pindo
|
|
|
124
136
|
|
|
125
137
|
begin
|
|
126
138
|
# 加载 JPS 配置(如果存在)
|
|
127
|
-
|
|
128
|
-
context.load_and_apply_jps_config(pindo_project_dir)
|
|
129
|
-
|
|
130
|
-
# 注意:参数缓存已在 initialize 中通过 GlobalOptionsState 处理
|
|
131
|
-
# 不再使用 PindoContext 的缓存机制
|
|
139
|
+
Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir)
|
|
132
140
|
|
|
133
141
|
# 准备配置
|
|
134
142
|
config = prepare_ios_config(pindo_project_dir)
|
|
@@ -166,29 +174,60 @@ module Pindo
|
|
|
166
174
|
|
|
167
175
|
tasks = []
|
|
168
176
|
|
|
169
|
-
# 1. Git
|
|
170
|
-
|
|
171
|
-
|
|
177
|
+
# 1. Git 提交任务
|
|
178
|
+
git_commit_task = Pindo::TaskSystem::GitCommitTask.new(
|
|
179
|
+
config[:project_path],
|
|
180
|
+
release_branch: @args_release_branch,
|
|
181
|
+
ver_inc: @args_ver_inc,
|
|
182
|
+
tag_type: @args_tag_type,
|
|
183
|
+
tag_pre: @args_tag_pre
|
|
184
|
+
)
|
|
185
|
+
tasks << git_commit_task
|
|
172
186
|
|
|
173
|
-
# 2. Unity
|
|
187
|
+
# 2. Unity 任务链(仅 Unity 工程)
|
|
174
188
|
if is_unity
|
|
175
189
|
# 确定 iOS 导出路径
|
|
176
190
|
base_ios_path = File.join(config[:project_path], "GoodPlatform", "BaseiOS")
|
|
177
191
|
ios_path = File.join(config[:project_path], "GoodPlatform", "iOS")
|
|
178
192
|
ios_export_path = File.exist?(base_ios_path) ? base_ios_path : ios_path
|
|
179
193
|
|
|
194
|
+
# 记录上一个任务,用于依赖链
|
|
195
|
+
last_task = git_commit_task
|
|
196
|
+
|
|
197
|
+
# 2.1 Unity 更新必备库任务(可选)
|
|
198
|
+
unless @args_skip_lib
|
|
199
|
+
unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
|
|
200
|
+
project_path: config[:project_path]
|
|
201
|
+
)
|
|
202
|
+
unity_update_task.dependencies << last_task.id
|
|
203
|
+
tasks << unity_update_task
|
|
204
|
+
last_task = unity_update_task
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# 2.2 Unity YooAsset 资源构建任务(可选,依赖上一个任务)
|
|
208
|
+
unless @args_skip_yoo
|
|
209
|
+
unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
|
|
210
|
+
'ios',
|
|
211
|
+
project_path: config[:project_path]
|
|
212
|
+
)
|
|
213
|
+
unity_yoo_task.dependencies << last_task.id
|
|
214
|
+
tasks << unity_yoo_task
|
|
215
|
+
last_task = unity_yoo_task
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# 2.3 Unity 导出任务(依赖上一个任务)
|
|
180
219
|
unity_context = {}
|
|
181
220
|
unity_context[:project_name] = @args_proj_name if @args_proj_name
|
|
182
221
|
|
|
183
|
-
|
|
222
|
+
unity_export_task = Pindo::TaskSystem::UnityExportTask.new(
|
|
184
223
|
'ios',
|
|
185
224
|
project_path: config[:project_path],
|
|
186
225
|
export_path: ios_export_path,
|
|
187
226
|
deploy_mode: @build_type, # 根据 build_type 传递部署模式
|
|
188
227
|
context: unity_context
|
|
189
228
|
)
|
|
190
|
-
|
|
191
|
-
tasks <<
|
|
229
|
+
unity_export_task.dependencies << last_task.id
|
|
230
|
+
tasks << unity_export_task
|
|
192
231
|
end
|
|
193
232
|
|
|
194
233
|
# 3. 构建任务
|
|
@@ -208,7 +247,11 @@ module Pindo
|
|
|
208
247
|
upload: @args_upload_flag,
|
|
209
248
|
send: @args_send_flag,
|
|
210
249
|
app_info_obj: config[:app_info_obj],
|
|
211
|
-
workflow_info: config[:workflow_info]
|
|
250
|
+
workflow_info: config[:workflow_info],
|
|
251
|
+
# Git 版本参数
|
|
252
|
+
ver_inc: @args_ver_inc,
|
|
253
|
+
tag_type: @args_tag_type,
|
|
254
|
+
tag_pre: @args_tag_pre
|
|
212
255
|
}
|
|
213
256
|
build_options[:unity_root_path] = config[:project_path] if is_unity
|
|
214
257
|
|
|
@@ -220,21 +263,42 @@ module Pindo
|
|
|
220
263
|
build_task.dependencies << tasks.last.id if tasks.any?
|
|
221
264
|
tasks << build_task
|
|
222
265
|
|
|
223
|
-
# 4.
|
|
266
|
+
# 4. Git 标签任务(依赖第一个编译任务)
|
|
267
|
+
git_tag_task = Pindo::TaskSystem::GitTagTask.new(
|
|
268
|
+
config[:project_path],
|
|
269
|
+
release_branch: @args_release_branch,
|
|
270
|
+
ver_inc: @args_ver_inc,
|
|
271
|
+
tag_type: @args_tag_type,
|
|
272
|
+
tag_pre: @args_tag_pre
|
|
273
|
+
)
|
|
274
|
+
git_tag_task.dependencies << build_task.id
|
|
275
|
+
tasks << git_tag_task
|
|
276
|
+
|
|
277
|
+
# 5. 上传和消息发送任务(如果需要)
|
|
224
278
|
if @args_upload_flag
|
|
279
|
+
# 4.1 创建上传任务
|
|
225
280
|
upload_task = Pindo::TaskSystem::JPSUploadTask.new(
|
|
226
281
|
'ipa',
|
|
227
282
|
File.join(ios_project_path, 'build'),
|
|
228
283
|
nil,
|
|
229
284
|
app_info_obj: config[:app_info_obj],
|
|
230
285
|
workflow_info: config[:workflow_info],
|
|
231
|
-
project_name: @args_proj_name
|
|
232
|
-
context: {
|
|
233
|
-
send_to_chat: @args_send_flag
|
|
234
|
-
},
|
|
235
|
-
dependencies: [build_task.id]
|
|
286
|
+
project_name: @args_proj_name
|
|
236
287
|
)
|
|
288
|
+
upload_task.dependencies << build_task.id
|
|
237
289
|
tasks << upload_task
|
|
290
|
+
|
|
291
|
+
# 4.2 创建消息发送任务(依赖上传任务)
|
|
292
|
+
# app_version_info 将从 upload_task 的数据参数中获取
|
|
293
|
+
message_task = Pindo::TaskSystem::JPSMessageTask.new(
|
|
294
|
+
nil, # app_version_info 为 nil,从依赖任务获取
|
|
295
|
+
app_info_obj: config[:app_info_obj],
|
|
296
|
+
project_name: @args_proj_name,
|
|
297
|
+
send_message_type: @args_send_flag ? 'group' : 'self',
|
|
298
|
+
data_dependencies: [upload_task.id] # 从 upload_task 获取数据
|
|
299
|
+
)
|
|
300
|
+
message_task.dependencies << upload_task.id # 执行顺序依赖
|
|
301
|
+
tasks << message_task
|
|
238
302
|
end
|
|
239
303
|
|
|
240
304
|
tasks
|
|
@@ -1,209 +1,31 @@
|
|
|
1
|
-
require 'highline/import'
|
|
2
|
-
require 'fileutils'
|
|
3
|
-
require 'json'
|
|
4
|
-
require 'xcodeproj'
|
|
5
|
-
require 'gym'
|
|
6
|
-
require 'pindo/module/build/build_helper'
|
|
7
|
-
require 'pindo/module/build/git_repo_helper'
|
|
8
|
-
require 'pindo/module/xcode/xcode_build_config'
|
|
9
|
-
require 'pindo/module/xcode/xcode_build_helper'
|
|
10
|
-
|
|
11
1
|
module Pindo
|
|
12
2
|
class Command
|
|
13
3
|
class Ios < Command
|
|
14
4
|
class Build < Ios
|
|
15
5
|
|
|
16
|
-
# 命令的简要说明
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
# 启用缓存机制
|
|
20
|
-
def self.use_cache?
|
|
21
|
-
true # 此命令启用缓存
|
|
22
|
-
end
|
|
23
|
-
# 缓存组已在 PindoContext#get_command_group 中定义
|
|
24
|
-
# ios:build 与 ios:autobuild 共享 'ios:autobuild' 缓存组
|
|
6
|
+
# 命令的简要说明
|
|
7
|
+
# TODO: 待实现
|
|
8
|
+
self.summary = '编译IPA,不修改工程内容,支持上传到JPS测试平台(暂未实现)'
|
|
25
9
|
|
|
26
|
-
# 命令的详细说明,包含用法示例
|
|
27
10
|
self.description = <<-DESC
|
|
28
11
|
编译iOS工程并生成IPA文件,不修改工程任何配置。
|
|
29
12
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
* 编译iOS工程
|
|
33
|
-
|
|
34
|
-
* 生成IPA文件
|
|
35
|
-
|
|
36
|
-
* 支持上传到JPS测试平台
|
|
37
|
-
|
|
38
|
-
* 支持发送测试通知
|
|
39
|
-
|
|
40
|
-
使用示例:
|
|
41
|
-
|
|
42
|
-
$ pindo ios build # 编译IPA
|
|
43
|
-
|
|
44
|
-
$ pindo ios build --upload # 编译并上传到JPS
|
|
45
|
-
|
|
46
|
-
$ pindo ios build --send # 编译、上传并发送通知
|
|
47
|
-
|
|
48
|
-
$ pindo ios build --proj="My App" # 指定项目名称
|
|
13
|
+
注意: 此命令暂未实现,请使用 pindo ios autobuild 命令。
|
|
49
14
|
DESC
|
|
50
15
|
|
|
51
|
-
self.arguments = [
|
|
52
|
-
|
|
53
|
-
]
|
|
16
|
+
self.arguments = []
|
|
54
17
|
|
|
55
18
|
def self.options
|
|
56
|
-
[
|
|
57
|
-
['--proj', '指定上传到测试平台的项目名称'],
|
|
58
|
-
['--upload', '上传编译后的ipa到测试平台'],
|
|
59
|
-
['--send', '上传成功后发送测试通知'],
|
|
60
|
-
].concat(super)
|
|
19
|
+
[].concat(super)
|
|
61
20
|
end
|
|
62
21
|
|
|
63
22
|
def initialize(argv)
|
|
64
|
-
|
|
65
|
-
@args_upload_flag = argv.flag?('upload', false)
|
|
66
|
-
@args_send_flag = argv.flag?('send', false)
|
|
67
|
-
@args_proj_name = argv.option('proj')
|
|
68
|
-
|
|
69
|
-
if @args_send_flag
|
|
70
|
-
@args_upload_flag = true
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
|
|
74
23
|
super
|
|
75
|
-
@additional_args = argv.remainder!
|
|
76
24
|
end
|
|
77
25
|
|
|
78
26
|
def run
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
build_helper = Pindo::BuildHelper.share_instance
|
|
82
|
-
project_type = build_helper.project_type(pindo_project_dir)
|
|
83
|
-
|
|
84
|
-
args_temp = []
|
|
85
|
-
args_temp << "--proj=#{@args_proj_name}" if @args_proj_name
|
|
86
|
-
args_temp << "--upload" if @args_upload_flag
|
|
87
|
-
args_temp << "--send" if @args_send_flag
|
|
88
|
-
case project_type
|
|
89
|
-
when :ios
|
|
90
|
-
ios_build
|
|
91
|
-
when :android
|
|
92
|
-
raise Informative, "Android 工程, 请使用 pindo and build"
|
|
93
|
-
when :unity
|
|
94
|
-
raise Informative, "Unity 工程, 请使用 pindo unity autobuild --types=ipa"
|
|
95
|
-
else
|
|
96
|
-
raise Informative, "当前目录不是工程目录,不能编译"
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def ios_build
|
|
102
|
-
|
|
103
|
-
pindo_project_dir = Dir.pwd
|
|
104
|
-
build_helper = Pindo::BuildHelper.share_instance
|
|
105
|
-
if @args_upload_flag
|
|
106
|
-
git_repo_helper = Pindo::GitRepoHelper.share_instance
|
|
107
|
-
is_need_add_tag, tag_action_parms = git_repo_helper.check_is_need_add_tag?(pindo_project_dir)
|
|
108
|
-
if is_need_add_tag
|
|
109
|
-
git_repo_helper.create_and_push_tag(
|
|
110
|
-
project_dir: pindo_project_dir,
|
|
111
|
-
mode: 'minor',
|
|
112
|
-
force_retag: tag_action_parms&.include?('--retag') || false,
|
|
113
|
-
custom_tag: nil,
|
|
114
|
-
release_branch: 'master'
|
|
115
|
-
)
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
new_project_fullname = Dir.glob(File.join(pindo_project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
|
|
120
|
-
puts "new_project_fullname: #{new_project_fullname}"
|
|
121
|
-
if !new_project_fullname.nil? && File.exist?(new_project_fullname)
|
|
122
|
-
Pindo::XcodeBuildHelper.delete_libtarget_firebase_shell(pindo_project_dir)
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
app_info_obj = nil
|
|
126
|
-
workflow_info = nil
|
|
127
|
-
if @args_upload_flag
|
|
128
|
-
proj_name = @args_proj_name
|
|
129
|
-
# 传入 package_type 获取 workflow_info
|
|
130
|
-
app_info_obj, workflow_info = PgyerHelper.share_instace.prepare_upload(
|
|
131
|
-
working_directory: Dir.pwd,
|
|
132
|
-
proj_name: proj_name,
|
|
133
|
-
package_type: 'ipa'
|
|
134
|
-
)
|
|
135
|
-
|
|
136
|
-
# ===== 使用 workflow 配置更新项目 =====
|
|
137
|
-
if workflow_info && workflow_info[:package_name]
|
|
138
|
-
workflow_packname = workflow_info[:package_name]
|
|
139
|
-
project_id = app_info_obj ? app_info_obj["id"] : nil
|
|
140
|
-
|
|
141
|
-
puts "\n使用工作流配置更新 iOS 项目:"
|
|
142
|
-
puts " Workflow Package Name: #{workflow_packname}"
|
|
143
|
-
|
|
144
|
-
# 一次性更新 Display Name、Bundle ID、URL Schemes 和 JPS 快捷操作
|
|
145
|
-
Pindo::XcodeBuildConfig.update_project_with_workflow(
|
|
146
|
-
project_dir: pindo_project_dir,
|
|
147
|
-
workflow_packname: workflow_packname,
|
|
148
|
-
project_id: project_id
|
|
149
|
-
)
|
|
150
|
-
|
|
151
|
-
# 根据实际的 Bundle ID 更新 URL Schemes
|
|
152
|
-
Pindo::XcodeBuildConfig.update_url_schemes_with_bundleid(
|
|
153
|
-
project_dir: pindo_project_dir,
|
|
154
|
-
package_name: workflow_packname
|
|
155
|
-
)
|
|
156
|
-
else
|
|
157
|
-
raise Informative, "未获取到工作流信息"
|
|
158
|
-
end
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
# 使用 XcodeBuildHelper 进行构建
|
|
163
|
-
Dir.chdir(pindo_project_dir)
|
|
164
|
-
ipa_file_upload = Pindo::XcodeBuildHelper.build_project(
|
|
165
|
-
project_dir: pindo_project_dir,
|
|
166
|
-
icloud_id: nil
|
|
167
|
-
)
|
|
168
|
-
|
|
169
|
-
if ipa_file_upload.nil?
|
|
170
|
-
raise Informative, "构建失败:未生成 IPA 文件"
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
174
|
-
|
|
175
|
-
description = nil
|
|
176
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
177
|
-
app_info_obj: app_info_obj,
|
|
178
|
-
ipa_file_upload: ipa_file_upload,
|
|
179
|
-
description: description,
|
|
180
|
-
workflow_info: workflow_info
|
|
181
|
-
)
|
|
182
|
-
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
183
|
-
PgyerHelper.share_instace.print_app_version_info(
|
|
184
|
-
app_info_obj: app_info_obj,
|
|
185
|
-
app_version_info_obj: result_data["data"]
|
|
186
|
-
)
|
|
187
|
-
if @args_send_flag
|
|
188
|
-
# 始终发送给自己
|
|
189
|
-
PgyerHelper.share_instace.send_apptest_msg(
|
|
190
|
-
app_info_obj: app_info_obj,
|
|
191
|
-
app_version_info_obj: result_data["data"],
|
|
192
|
-
receiveType: "self"
|
|
193
|
-
)
|
|
194
|
-
|
|
195
|
-
# 额外发送到测试群
|
|
196
|
-
PgyerHelper.share_instace.send_apptest_msg(
|
|
197
|
-
app_info_obj: app_info_obj,
|
|
198
|
-
app_version_info_obj: result_data["data"],
|
|
199
|
-
chatEnv: "DevTest",
|
|
200
|
-
receiveType: "chat"
|
|
201
|
-
)
|
|
202
|
-
end
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
system "open #{pindo_project_dir}"
|
|
27
|
+
# TODO: 待实现
|
|
28
|
+
raise Informative, "pindo ios build 命令暂未实现,请使用 pindo ios autobuild"
|
|
207
29
|
end
|
|
208
30
|
|
|
209
31
|
end
|