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.
- checksums.yaml +4 -4
- data/lib/pindo/base/funlog.rb +13 -0
- data/lib/pindo/base/git_handler.rb +247 -42
- data/lib/pindo/command/android/autobuild.rb +72 -30
- 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 +5 -14
- data/lib/pindo/command/appstore/autobuild.rb +64 -14
- data/lib/pindo/command/appstore/autoresign.rb +1 -3
- data/lib/pindo/command/ios/autobuild.rb +71 -53
- 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 +48 -20
- data/lib/pindo/command/jps.rb +1 -0
- data/lib/pindo/command/unity/autobuild.rb +99 -27
- 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 +71 -37
- 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/{resign → jps}/jps_resign_task.rb +13 -22
- data/lib/pindo/module/task/model/jps/jps_upload_media_task.rb +248 -0
- data/lib/pindo/module/task/model/jps/jps_upload_task.rb +38 -93
- data/lib/pindo/module/task/model/jps_task.rb +43 -0
- data/lib/pindo/module/task/model/resign/ipa_local_resign_task.rb +5 -0
- data/lib/pindo/module/task/model/unity/unity_config_task.rb +0 -4
- data/lib/pindo/module/task/model/unity/unity_export_task.rb +8 -7
- data/lib/pindo/module/task/model/unity/unity_update_task.rb +4 -3
- data/lib/pindo/module/task/model/unity/unity_yoo_asset_task.rb +8 -7
- data/lib/pindo/module/task/model/unity_task.rb +7 -2
- data/lib/pindo/module/task/pindo_task.rb +101 -1
- data/lib/pindo/module/task/task_manager.rb +29 -32
- data/lib/pindo/module/unity/nuget_helper.rb +7 -7
- 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 +15 -11
- 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,12 +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
14
|
require 'pindo/module/task/model/unity/unity_config_task'
|
|
14
15
|
require 'pindo/module/task/model/unity/unity_update_task'
|
|
15
16
|
require 'pindo/module/task/model/unity/unity_yoo_asset_task'
|
|
16
17
|
require 'pindo/module/task/model/unity/unity_export_task'
|
|
17
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'
|
|
18
21
|
require 'pindo/options/options'
|
|
19
22
|
|
|
20
23
|
module Pindo
|
|
@@ -61,17 +64,17 @@ module Pindo
|
|
|
61
64
|
|
|
62
65
|
# 定义此命令使用的参数项
|
|
63
66
|
def self.option_items
|
|
64
|
-
@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
|
+
)
|
|
65
73
|
end
|
|
66
74
|
|
|
67
75
|
# 命令的选项列表
|
|
68
76
|
def self.options
|
|
69
|
-
|
|
70
|
-
option_items.map { |item| item.to_claide_option }.concat([
|
|
71
|
-
['--skipconfig', '跳过Unity编译模式配置(加快构建速度)'],
|
|
72
|
-
['--skiplib', '跳过Unity必备库更新(加快构建速度)'],
|
|
73
|
-
['--skipyoo', '跳过YooAsset资源打包(加快构建速度)']
|
|
74
|
-
]).concat(super)
|
|
77
|
+
option_items.map(&:to_claide_option).concat(super)
|
|
75
78
|
end
|
|
76
79
|
|
|
77
80
|
def initialize(argv)
|
|
@@ -88,6 +91,11 @@ module Pindo
|
|
|
88
91
|
@args_skip_lib = argv.flag?('skiplib', false)
|
|
89
92
|
@args_skip_yoo = argv.flag?('skipyoo', false)
|
|
90
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_'
|
|
98
|
+
|
|
91
99
|
super(argv)
|
|
92
100
|
end
|
|
93
101
|
|
|
@@ -176,6 +184,18 @@ module Pindo
|
|
|
176
184
|
|
|
177
185
|
tasks = []
|
|
178
186
|
|
|
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
|
+
|
|
179
199
|
# 1. Unity 任务链(仅 Unity 工程)
|
|
180
200
|
if is_unity
|
|
181
201
|
# 确定 iOS 导出路径
|
|
@@ -183,15 +203,13 @@ module Pindo
|
|
|
183
203
|
ios_path = File.join(project_path, "GoodPlatform", "iOS")
|
|
184
204
|
ios_export_path = File.exist?(base_ios_path) ? base_ios_path : ios_path
|
|
185
205
|
|
|
186
|
-
# 记录上一个任务,用于依赖链
|
|
187
|
-
last_task = nil
|
|
188
|
-
|
|
189
206
|
# 1.1 Unity 配置编译模式任务(可选)
|
|
190
207
|
unless @args_skip_config
|
|
191
208
|
unity_config_task = Pindo::TaskSystem::UnityConfigTask.new(
|
|
192
209
|
'release', # AppStore 使用 release 模式
|
|
193
210
|
project_path: project_path
|
|
194
211
|
)
|
|
212
|
+
unity_config_task.dependencies << last_task.id
|
|
195
213
|
tasks << unity_config_task
|
|
196
214
|
last_task = unity_config_task
|
|
197
215
|
end
|
|
@@ -201,7 +219,7 @@ module Pindo
|
|
|
201
219
|
unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
|
|
202
220
|
project_path: project_path
|
|
203
221
|
)
|
|
204
|
-
unity_update_task.dependencies << last_task.id
|
|
222
|
+
unity_update_task.dependencies << last_task.id
|
|
205
223
|
tasks << unity_update_task
|
|
206
224
|
last_task = unity_update_task
|
|
207
225
|
end
|
|
@@ -212,7 +230,7 @@ module Pindo
|
|
|
212
230
|
'ios',
|
|
213
231
|
project_path: project_path
|
|
214
232
|
)
|
|
215
|
-
unity_yoo_task.dependencies << last_task.id
|
|
233
|
+
unity_yoo_task.dependencies << last_task.id
|
|
216
234
|
tasks << unity_yoo_task
|
|
217
235
|
last_task = unity_yoo_task
|
|
218
236
|
end
|
|
@@ -224,8 +242,9 @@ module Pindo
|
|
|
224
242
|
export_path: ios_export_path,
|
|
225
243
|
deploy_mode: 'release' # AppStore 使用 release 模式
|
|
226
244
|
)
|
|
227
|
-
unity_export_task.dependencies << last_task.id
|
|
245
|
+
unity_export_task.dependencies << last_task.id
|
|
228
246
|
tasks << unity_export_task
|
|
247
|
+
last_task = unity_export_task
|
|
229
248
|
end
|
|
230
249
|
|
|
231
250
|
# 2. 构建任务
|
|
@@ -248,9 +267,40 @@ module Pindo
|
|
|
248
267
|
mode: :release,
|
|
249
268
|
options: build_options
|
|
250
269
|
)
|
|
251
|
-
build_task.dependencies <<
|
|
270
|
+
build_task.dependencies << last_task.id
|
|
252
271
|
tasks << build_task
|
|
253
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
|
+
|
|
254
304
|
tasks
|
|
255
305
|
else
|
|
256
306
|
raise Informative, "当前目录不是工程目录,不能编译"
|
|
@@ -5,7 +5,6 @@ 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
9
|
require 'pindo/module/task/model/resign/ipa_local_resign_task'
|
|
11
10
|
require 'pindo/module/task/model/jps/jps_upload_task'
|
|
@@ -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,17 +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/
|
|
11
|
+
require 'pindo/module/task/model/git/git_commit_task'
|
|
12
|
+
require 'pindo/module/task/model/git/git_tag_task'
|
|
13
13
|
require 'pindo/module/task/model/unity/unity_update_task'
|
|
14
14
|
require 'pindo/module/task/model/unity/unity_yoo_asset_task'
|
|
15
15
|
require 'pindo/module/task/model/unity/unity_export_task'
|
|
16
16
|
require 'pindo/module/task/model/build_task'
|
|
17
17
|
require 'pindo/module/task/model/jps/jps_upload_task'
|
|
18
|
+
require 'pindo/module/task/model/jps/jps_message_task'
|
|
18
19
|
require 'pindo/options/options'
|
|
19
20
|
require 'pindo/options/helpers/bundleid_selector'
|
|
20
21
|
require 'pindo/config/build_info_manager'
|
|
@@ -32,9 +33,7 @@ module Pindo
|
|
|
32
33
|
def self.use_cache?
|
|
33
34
|
true # 此命令启用缓存
|
|
34
35
|
end
|
|
35
|
-
|
|
36
|
-
# ios:autobuild 与 unity:ipa 共享 'ios:autobuild' 缓存组
|
|
37
|
-
|
|
36
|
+
|
|
38
37
|
# 命令的详细说明,包含用法示例
|
|
39
38
|
self.description = <<-DESC
|
|
40
39
|
编译IPA,自动修改工程配置并支持上传到JPS测试平台。
|
|
@@ -74,7 +73,10 @@ module Pindo
|
|
|
74
73
|
@option_items ||= begin
|
|
75
74
|
items = Pindo::Options::OptionGroup.merge(
|
|
76
75
|
Pindo::Options::BuildOptions.select(:bundleid, :build_type),
|
|
77
|
-
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
|
|
78
80
|
)
|
|
79
81
|
|
|
80
82
|
# 为 bundleid 参数添加 value_block(交互式选择)
|
|
@@ -93,43 +95,32 @@ module Pindo
|
|
|
93
95
|
|
|
94
96
|
# 命令的选项列表
|
|
95
97
|
def self.options
|
|
96
|
-
|
|
97
|
-
option_items.map { |item| item.to_claide_option }.concat([
|
|
98
|
-
['--skiplib', '跳过Unity必备库更新(加快构建速度)'],
|
|
99
|
-
['--skipyoo', '跳过YooAsset资源打包(加快构建速度)']
|
|
100
|
-
]).concat(super)
|
|
98
|
+
option_items.map(&:to_claide_option).concat(super)
|
|
101
99
|
end
|
|
102
100
|
|
|
103
101
|
def initialize(argv)
|
|
104
|
-
# 检测是否是 help 请求(避免在 help 模式下执行交互式选择)
|
|
105
|
-
# 注意:不能使用 argv.flag?,因为会消费参数,导致父类获取不到
|
|
106
|
-
is_help = ARGV.include?('--help') || ARGV.include?('-h')
|
|
107
|
-
|
|
108
102
|
# 先提取 build_type(因为 bundleid 的 value_block 需要用到它)
|
|
109
103
|
@build_type = argv.option('build_type', 'dev')
|
|
110
104
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
@options = initialize_options(argv)
|
|
121
|
-
|
|
122
|
-
# 保存参数到实例变量
|
|
123
|
-
@build_type = @options[:build_type] || @build_type # 使用 options 中的值,如果没有则用之前提取的
|
|
124
|
-
@args_send_flag = @options[:send]
|
|
125
|
-
# send 依赖 upload:如果指定了 send,自动启用 upload
|
|
126
|
-
@args_upload_flag = @options[:send] || @options[:upload]
|
|
127
|
-
@args_proj_name = @options[:proj]
|
|
128
|
-
@args_bundle_id = @options[:bundleid]
|
|
129
|
-
end
|
|
105
|
+
@options = initialize_options(argv)
|
|
106
|
+
|
|
107
|
+
# 保存参数到实例变量
|
|
108
|
+
@build_type = @options[:build_type] || @build_type
|
|
109
|
+
@args_send_flag = @options[:send]
|
|
110
|
+
# send 依赖 upload:如果指定了 send,自动启用 upload
|
|
111
|
+
@args_upload_flag = @options[:send] || @options[:upload]
|
|
112
|
+
@args_proj_name = @options[:proj]
|
|
113
|
+
@args_bundle_id = @options[:bundleid]
|
|
130
114
|
|
|
131
|
-
|
|
132
|
-
@
|
|
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'
|
|
133
124
|
|
|
134
125
|
super
|
|
135
126
|
@additional_args = argv.remainder!
|
|
@@ -145,11 +136,7 @@ module Pindo
|
|
|
145
136
|
|
|
146
137
|
begin
|
|
147
138
|
# 加载 JPS 配置(如果存在)
|
|
148
|
-
|
|
149
|
-
context.load_and_apply_jps_config(pindo_project_dir)
|
|
150
|
-
|
|
151
|
-
# 注意:参数缓存已在 initialize 中通过 GlobalOptionsState 处理
|
|
152
|
-
# 不再使用 PindoContext 的缓存机制
|
|
139
|
+
Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir)
|
|
153
140
|
|
|
154
141
|
# 准备配置
|
|
155
142
|
config = prepare_ios_config(pindo_project_dir)
|
|
@@ -187,9 +174,15 @@ module Pindo
|
|
|
187
174
|
|
|
188
175
|
tasks = []
|
|
189
176
|
|
|
190
|
-
# 1. Git
|
|
191
|
-
|
|
192
|
-
|
|
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
|
|
193
186
|
|
|
194
187
|
# 2. Unity 任务链(仅 Unity 工程)
|
|
195
188
|
if is_unity
|
|
@@ -199,7 +192,7 @@ module Pindo
|
|
|
199
192
|
ios_export_path = File.exist?(base_ios_path) ? base_ios_path : ios_path
|
|
200
193
|
|
|
201
194
|
# 记录上一个任务,用于依赖链
|
|
202
|
-
last_task =
|
|
195
|
+
last_task = git_commit_task
|
|
203
196
|
|
|
204
197
|
# 2.1 Unity 更新必备库任务(可选)
|
|
205
198
|
unless @args_skip_lib
|
|
@@ -254,7 +247,11 @@ module Pindo
|
|
|
254
247
|
upload: @args_upload_flag,
|
|
255
248
|
send: @args_send_flag,
|
|
256
249
|
app_info_obj: config[:app_info_obj],
|
|
257
|
-
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
|
|
258
255
|
}
|
|
259
256
|
build_options[:unity_root_path] = config[:project_path] if is_unity
|
|
260
257
|
|
|
@@ -266,21 +263,42 @@ module Pindo
|
|
|
266
263
|
build_task.dependencies << tasks.last.id if tasks.any?
|
|
267
264
|
tasks << build_task
|
|
268
265
|
|
|
269
|
-
# 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. 上传和消息发送任务(如果需要)
|
|
270
278
|
if @args_upload_flag
|
|
279
|
+
# 4.1 创建上传任务
|
|
271
280
|
upload_task = Pindo::TaskSystem::JPSUploadTask.new(
|
|
272
281
|
'ipa',
|
|
273
282
|
File.join(ios_project_path, 'build'),
|
|
274
283
|
nil,
|
|
275
284
|
app_info_obj: config[:app_info_obj],
|
|
276
285
|
workflow_info: config[:workflow_info],
|
|
277
|
-
project_name: @args_proj_name
|
|
278
|
-
context: {
|
|
279
|
-
send_to_chat: @args_send_flag
|
|
280
|
-
},
|
|
281
|
-
dependencies: [build_task.id]
|
|
286
|
+
project_name: @args_proj_name
|
|
282
287
|
)
|
|
288
|
+
upload_task.dependencies << build_task.id
|
|
283
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
|
|
284
302
|
end
|
|
285
303
|
|
|
286
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
|