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
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
require 'highline/import'
|
|
2
2
|
require 'fileutils'
|
|
3
|
+
require 'pindo/base/git_handler'
|
|
3
4
|
require 'pindo/module/build/git_repo_helper'
|
|
5
|
+
require 'pindo/module/task/task_manager'
|
|
6
|
+
require 'pindo/module/task/model/git/git_commit_task'
|
|
7
|
+
require 'pindo/module/task/model/git/git_tag_task'
|
|
8
|
+
require 'pindo/options/options'
|
|
4
9
|
|
|
5
10
|
module Pindo
|
|
6
11
|
class Command
|
|
@@ -23,55 +28,82 @@ module Pindo
|
|
|
23
28
|
|
|
24
29
|
使用示例:
|
|
25
30
|
|
|
26
|
-
$ pindo utils tag
|
|
31
|
+
$ pindo utils tag # 使用默认参数创建tag
|
|
27
32
|
|
|
28
|
-
$ pindo utils tag --
|
|
33
|
+
$ pindo utils tag --ver_inc=main # 大版本号增加
|
|
29
34
|
|
|
30
|
-
$ pindo utils tag --
|
|
35
|
+
$ pindo utils tag --ver_inc=patch # 补丁版本号增加
|
|
31
36
|
|
|
32
|
-
$ pindo utils tag --
|
|
37
|
+
$ pindo utils tag --tag_type=recreate # 重新创建当前版本tag
|
|
33
38
|
|
|
34
|
-
$ pindo utils tag --
|
|
39
|
+
$ pindo utils tag --release_branch=main # 指定发布分支
|
|
35
40
|
DESC
|
|
36
41
|
|
|
37
42
|
# 命令的参数列表
|
|
38
43
|
self.arguments = []
|
|
39
44
|
|
|
45
|
+
# 定义此命令使用的参数项
|
|
46
|
+
def self.option_items
|
|
47
|
+
@option_items ||= Pindo::Options::GitOptions.all
|
|
48
|
+
end
|
|
49
|
+
|
|
40
50
|
# 命令的选项列表
|
|
41
51
|
def self.options
|
|
42
|
-
|
|
43
|
-
['--mode', '指定版本号增加模式(major/minor/patch),默认minor'],
|
|
44
|
-
['--retag', '强制重新打最新的tag'],
|
|
45
|
-
['--tag', '直接指定tag版本号(如 1.1.3),会自动添加v前缀']
|
|
46
|
-
].concat(super)
|
|
52
|
+
option_items.map(&:to_claide_option).concat(super)
|
|
47
53
|
end
|
|
48
54
|
|
|
49
55
|
def initialize(argv)
|
|
50
|
-
@
|
|
51
|
-
@force_retag = argv.flag?('retag', false)
|
|
52
|
-
@custom_tag = argv.option('tag')
|
|
56
|
+
@options = initialize_options(argv)
|
|
53
57
|
|
|
54
|
-
#
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
# Git 参数
|
|
59
|
+
@args_release_branch = @options[:release_branch] || 'master'
|
|
60
|
+
@args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc] || 'mini')
|
|
61
|
+
@args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
|
|
62
|
+
@args_tag_pre = @options[:tag_pre] || 'v'
|
|
58
63
|
|
|
59
64
|
super
|
|
60
65
|
@additional_args = argv.remainder!
|
|
61
66
|
end
|
|
62
67
|
|
|
63
68
|
def run
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
pindo_project_dir = Dir.pwd
|
|
70
|
+
|
|
71
|
+
# 验证是否是 Git 仓库
|
|
72
|
+
unless Pindo::GitHandler.is_git_directory?(local_repo_dir: pindo_project_dir)
|
|
73
|
+
raise Informative, "当前目录不是 Git 仓库"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# 创建任务列表
|
|
77
|
+
tasks = []
|
|
78
|
+
|
|
79
|
+
# 1. Git 提交任务
|
|
80
|
+
git_commit_task = Pindo::TaskSystem::GitCommitTask.new(
|
|
81
|
+
pindo_project_dir,
|
|
82
|
+
release_branch: @args_release_branch,
|
|
83
|
+
ver_inc: @args_ver_inc,
|
|
84
|
+
tag_type: @args_tag_type,
|
|
85
|
+
tag_pre: @args_tag_pre
|
|
86
|
+
)
|
|
87
|
+
tasks << git_commit_task
|
|
88
|
+
|
|
89
|
+
# 2. Git 标签任务(依赖提交任务)
|
|
90
|
+
git_tag_task = Pindo::TaskSystem::GitTagTask.new(
|
|
91
|
+
pindo_project_dir,
|
|
92
|
+
release_branch: @args_release_branch,
|
|
93
|
+
ver_inc: @args_ver_inc,
|
|
94
|
+
tag_type: @args_tag_type,
|
|
95
|
+
tag_pre: @args_tag_pre
|
|
72
96
|
)
|
|
97
|
+
git_tag_task.dependencies << git_commit_task.id
|
|
98
|
+
tasks << git_tag_task
|
|
99
|
+
|
|
100
|
+
# 添加到任务管理器并执行
|
|
101
|
+
task_manager = Pindo::TaskSystem::TaskManager.instance
|
|
102
|
+
task_manager.clear_all
|
|
103
|
+
tasks.each { |task| task_manager.add_task(task) }
|
|
104
|
+
task_manager.start
|
|
73
105
|
end
|
|
74
106
|
end
|
|
75
107
|
end
|
|
76
108
|
end
|
|
77
|
-
end
|
|
109
|
+
end
|
data/lib/pindo/command/utils.rb
CHANGED
|
@@ -8,7 +8,6 @@ require 'pindo/command/utils/device'
|
|
|
8
8
|
# require 'pindo/command/utils/boss'
|
|
9
9
|
require 'pindo/command/utils/renewcert'
|
|
10
10
|
require 'pindo/command/utils/repoinit'
|
|
11
|
-
require 'pindo/command/utils/feishu'
|
|
12
11
|
require 'pindo/command/utils/tag'
|
|
13
12
|
require 'pindo/command/utils/updateconfig'
|
|
14
13
|
require 'pindo/command/utils/fabric'
|
|
@@ -6,10 +6,15 @@ require 'pindo/base/executable'
|
|
|
6
6
|
require 'pindo/module/unity/unity_helper'
|
|
7
7
|
require 'pindo/module/build/build_helper'
|
|
8
8
|
require 'pindo/module/task/task_manager'
|
|
9
|
-
require 'pindo/module/task/model/
|
|
10
|
-
require 'pindo/module/task/model/
|
|
9
|
+
require 'pindo/module/task/model/git/git_commit_task'
|
|
10
|
+
require 'pindo/module/task/model/git/git_tag_task'
|
|
11
|
+
require 'pindo/module/task/model/unity/unity_update_task'
|
|
12
|
+
require 'pindo/module/task/model/unity/unity_yoo_asset_task'
|
|
13
|
+
require 'pindo/module/task/model/unity/unity_export_task'
|
|
11
14
|
require 'pindo/module/task/model/build_task'
|
|
12
|
-
require 'pindo/module/task/model/jps_upload_task'
|
|
15
|
+
require 'pindo/module/task/model/jps/jps_upload_task'
|
|
16
|
+
require 'pindo/module/task/model/jps/jps_message_task'
|
|
17
|
+
require 'pindo/options/options'
|
|
13
18
|
|
|
14
19
|
module Pindo
|
|
15
20
|
class Command
|
|
@@ -17,7 +22,6 @@ module Pindo
|
|
|
17
22
|
class Autobuild < Web
|
|
18
23
|
|
|
19
24
|
include Appselect
|
|
20
|
-
include Pindo::Githelper
|
|
21
25
|
|
|
22
26
|
self.summary = '打包Unity WebGL包'
|
|
23
27
|
|
|
@@ -54,30 +58,42 @@ module Pindo
|
|
|
54
58
|
# 暂无参数
|
|
55
59
|
]
|
|
56
60
|
|
|
61
|
+
# 定义此命令使用的参数项
|
|
62
|
+
def self.option_items
|
|
63
|
+
@option_items ||= Pindo::Options::OptionGroup.merge(
|
|
64
|
+
Pindo::Options::JPSOptions.select(:proj, :upload, :send),
|
|
65
|
+
Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
|
|
66
|
+
Pindo::Options::UnityOptions.select_with_defaults(skipconfig: true),
|
|
67
|
+
Pindo::Options::GitOptions.all
|
|
68
|
+
)
|
|
69
|
+
end
|
|
70
|
+
|
|
57
71
|
# 命令的选项列表
|
|
58
72
|
def self.options
|
|
59
73
|
[
|
|
60
74
|
['--bundleid', '指定打包的bundleID'],
|
|
61
|
-
# 指定上传到JPS的项目
|
|
62
|
-
['--proj', '指定上传到测试平台的项目名称'],
|
|
63
|
-
# 上传编译包
|
|
64
|
-
['--upload', '上传编译后的ipa到测试平台'],
|
|
65
|
-
# 发送通知
|
|
66
|
-
['--send', '上传成功后发送测试通知'],
|
|
67
|
-
# 编译完成后再本地打开webgl包
|
|
68
75
|
['--run', '编译完成后再本地打开webgl包']
|
|
69
|
-
].concat(super)
|
|
76
|
+
].concat(option_items.map(&:to_claide_option)).concat(super)
|
|
70
77
|
end
|
|
71
78
|
|
|
72
79
|
def initialize(argv)
|
|
80
|
+
@options = initialize_options(argv)
|
|
73
81
|
|
|
74
82
|
@args_deploy_flag = argv.flag?('deploy', false)
|
|
75
|
-
@args_adhoc_flag = argv.flag?('adhoc', false)
|
|
76
|
-
@args_upload_flag =
|
|
77
|
-
@args_send_flag =
|
|
78
|
-
@args_proj_name =
|
|
83
|
+
@args_adhoc_flag = argv.flag?('adhoc', false)
|
|
84
|
+
@args_upload_flag = @options[:upload] || false
|
|
85
|
+
@args_send_flag = @options[:send] || false
|
|
86
|
+
@args_proj_name = @options[:proj]
|
|
79
87
|
@args_bundle_id = argv.option('bundleid')
|
|
80
88
|
@args_run_flag = argv.flag?('run', false)
|
|
89
|
+
@args_skip_lib = @options[:skiplib] || false
|
|
90
|
+
@args_skip_yoo = @options[:skipyoo] || false
|
|
91
|
+
|
|
92
|
+
# Git 参数
|
|
93
|
+
@args_release_branch = @options[:release_branch] || 'master'
|
|
94
|
+
@args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc] || 'mini')
|
|
95
|
+
@args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
|
|
96
|
+
@args_tag_pre = @options[:tag_pre] || 'v'
|
|
81
97
|
|
|
82
98
|
if @args_send_flag
|
|
83
99
|
@args_upload_flag = true
|
|
@@ -96,10 +112,7 @@ module Pindo
|
|
|
96
112
|
pindo_project_dir = Dir.pwd
|
|
97
113
|
|
|
98
114
|
# 加载 JPS 配置(如果存在)
|
|
99
|
-
|
|
100
|
-
context.load_and_apply_jps_config(pindo_project_dir)
|
|
101
|
-
# 确认并应用缓存(如果有)
|
|
102
|
-
context.confirm_and_apply_cache
|
|
115
|
+
Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir)
|
|
103
116
|
|
|
104
117
|
# 准备配置
|
|
105
118
|
config = prepare_web_config(pindo_project_dir)
|
|
@@ -189,15 +202,55 @@ module Pindo
|
|
|
189
202
|
# Web 只支持 Unity 工程
|
|
190
203
|
tasks = []
|
|
191
204
|
|
|
192
|
-
# 1. Git
|
|
205
|
+
# 1. Git 提交任务(如果需要上传)
|
|
193
206
|
if @args_upload_flag
|
|
207
|
+
git_commit_task = Pindo::TaskSystem::GitCommitTask.new(
|
|
208
|
+
config[:project_path],
|
|
209
|
+
release_branch: @args_release_branch,
|
|
210
|
+
ver_inc: @args_ver_inc,
|
|
211
|
+
tag_type: @args_tag_type,
|
|
212
|
+
tag_pre: @args_tag_pre
|
|
213
|
+
)
|
|
214
|
+
tasks << git_commit_task
|
|
215
|
+
last_task = git_commit_task
|
|
216
|
+
|
|
217
|
+
# 2. Git 标签任务(依赖提交任务,在 Unity 导出之前创建)
|
|
194
218
|
git_tag_task = Pindo::TaskSystem::GitTagTask.new(
|
|
195
|
-
config[:project_path]
|
|
219
|
+
config[:project_path],
|
|
220
|
+
release_branch: @args_release_branch,
|
|
221
|
+
ver_inc: @args_ver_inc,
|
|
222
|
+
tag_type: @args_tag_type,
|
|
223
|
+
tag_pre: @args_tag_pre
|
|
196
224
|
)
|
|
225
|
+
git_tag_task.dependencies << git_commit_task.id
|
|
197
226
|
tasks << git_tag_task
|
|
227
|
+
last_task = git_tag_task
|
|
228
|
+
else
|
|
229
|
+
last_task = nil
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# 3. Unity 更新必备库任务(可选)
|
|
233
|
+
unless @args_skip_lib
|
|
234
|
+
unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
|
|
235
|
+
project_path: config[:project_path]
|
|
236
|
+
)
|
|
237
|
+
unity_update_task.dependencies << last_task.id if last_task
|
|
238
|
+
tasks << unity_update_task
|
|
239
|
+
last_task = unity_update_task
|
|
198
240
|
end
|
|
199
241
|
|
|
200
|
-
#
|
|
242
|
+
# 4. Unity YooAsset 资源构建任务(可选,依赖上一个任务)
|
|
243
|
+
unless @args_skip_yoo
|
|
244
|
+
unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
|
|
245
|
+
'web',
|
|
246
|
+
project_path: config[:project_path]
|
|
247
|
+
)
|
|
248
|
+
unity_yoo_task.dependencies << last_task.id if last_task
|
|
249
|
+
tasks << unity_yoo_task
|
|
250
|
+
last_task = unity_yoo_task
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
# 5. Unity 导出任务(依赖上一个任务)
|
|
201
254
|
# Web 平台导出路径
|
|
202
255
|
web_export_path = File.join(config[:project_path], "GoodPlatform", "WebGL")
|
|
203
256
|
|
|
@@ -205,16 +258,16 @@ module Pindo
|
|
|
205
258
|
unity_context[:project_name] = @args_proj_name if @args_proj_name
|
|
206
259
|
unity_context[:index_count] = config[:index_count]
|
|
207
260
|
|
|
208
|
-
|
|
261
|
+
unity_export_task = Pindo::TaskSystem::UnityExportTask.new(
|
|
209
262
|
'web',
|
|
210
263
|
project_path: config[:project_path],
|
|
211
264
|
export_path: web_export_path,
|
|
212
265
|
context: unity_context
|
|
213
266
|
)
|
|
214
|
-
|
|
215
|
-
tasks <<
|
|
267
|
+
unity_export_task.dependencies << last_task.id if last_task
|
|
268
|
+
tasks << unity_export_task
|
|
216
269
|
|
|
217
|
-
#
|
|
270
|
+
# 6. 构建任务(Web 只需要检查输出)
|
|
218
271
|
build_task = Pindo::TaskSystem::BuildTask.create_task(
|
|
219
272
|
platform: :web,
|
|
220
273
|
mode: :dev,
|
|
@@ -227,26 +280,37 @@ module Pindo
|
|
|
227
280
|
workflow_info: config[:workflow_info]
|
|
228
281
|
}
|
|
229
282
|
)
|
|
230
|
-
build_task.dependencies <<
|
|
283
|
+
build_task.dependencies << unity_export_task.id
|
|
231
284
|
tasks << build_task
|
|
232
285
|
|
|
233
|
-
#
|
|
286
|
+
# 7. 上传和消息发送任务(如果需要)
|
|
234
287
|
if @args_upload_flag
|
|
235
288
|
# WebGL 输出路径: GoodPlatform/WebGL/build
|
|
236
289
|
webgl_build_path = File.join(config[:project_path], 'GoodPlatform', 'WebGL', 'build')
|
|
290
|
+
|
|
291
|
+
# 7.1 创建上传任务
|
|
237
292
|
upload_task = Pindo::TaskSystem::JPSUploadTask.new(
|
|
238
293
|
'html',
|
|
239
294
|
webgl_build_path,
|
|
240
295
|
nil,
|
|
241
296
|
app_info_obj: config[:app_info_obj],
|
|
242
297
|
workflow_info: config[:workflow_info],
|
|
243
|
-
project_name: @args_proj_name
|
|
244
|
-
context: {
|
|
245
|
-
send_to_chat: @args_send_flag
|
|
246
|
-
},
|
|
247
|
-
dependencies: [build_task.id]
|
|
298
|
+
project_name: @args_proj_name
|
|
248
299
|
)
|
|
300
|
+
upload_task.dependencies << build_task.id
|
|
249
301
|
tasks << upload_task
|
|
302
|
+
|
|
303
|
+
# 7.2 创建消息发送任务(依赖上传任务)
|
|
304
|
+
# app_version_info 将从 upload_task 的数据参数中获取
|
|
305
|
+
message_task = Pindo::TaskSystem::JPSMessageTask.new(
|
|
306
|
+
nil, # app_version_info 为 nil,从依赖任务获取
|
|
307
|
+
app_info_obj: config[:app_info_obj],
|
|
308
|
+
project_name: @args_proj_name,
|
|
309
|
+
send_message_type: @args_send_flag ? 'group' : 'self',
|
|
310
|
+
data_dependencies: [upload_task.id] # 从 upload_task 获取数据
|
|
311
|
+
)
|
|
312
|
+
message_task.dependencies << upload_task.id # 执行顺序依赖
|
|
313
|
+
tasks << message_task
|
|
250
314
|
end
|
|
251
315
|
|
|
252
316
|
tasks
|
data/lib/pindo/command.rb
CHANGED
|
@@ -6,8 +6,6 @@ require 'pindo/version'
|
|
|
6
6
|
require 'pindo/base/funlog'
|
|
7
7
|
require 'pindo/base/hashhelper'
|
|
8
8
|
require 'pindo/base/plaininformative'
|
|
9
|
-
require 'pindo/base/githelper'
|
|
10
|
-
require 'pindo/base/pindocontext'
|
|
11
9
|
require 'pindo/client/giteeclient'
|
|
12
10
|
require 'pindo/config/pindoconfig'
|
|
13
11
|
|
|
@@ -22,7 +20,6 @@ module Pindo
|
|
|
22
20
|
|
|
23
21
|
class Command < CLAide::Command
|
|
24
22
|
|
|
25
|
-
include Pindo::Githelper
|
|
26
23
|
include Pindoconfig::Mixin
|
|
27
24
|
include Funlog::Mixin
|
|
28
25
|
|
|
@@ -61,8 +58,6 @@ module Pindo
|
|
|
61
58
|
def self.use_cache?
|
|
62
59
|
false # 默认不使用缓存
|
|
63
60
|
end
|
|
64
|
-
# 注意:缓存组的定义已经移至 PindoContext#get_command_group 中统一管理
|
|
65
|
-
# 使用命令名作为组名,如 ios:autobuild, and:autobuild, web:autobuild
|
|
66
61
|
|
|
67
62
|
# 自动推导命令名称
|
|
68
63
|
# @return [String] 命令名称,例如:Pindo::Command::Ios::Autobuild → 'ios:autobuild'
|
|
@@ -123,8 +118,6 @@ module Pindo
|
|
|
123
118
|
end
|
|
124
119
|
|
|
125
120
|
def self.run(argv)
|
|
126
|
-
# 直接调用父类的 run 方法
|
|
127
|
-
# PindoContext 的设置在 initialize 中处理
|
|
128
121
|
super(argv)
|
|
129
122
|
end
|
|
130
123
|
|
|
@@ -143,55 +136,6 @@ module Pindo
|
|
|
143
136
|
|
|
144
137
|
# 设置全局 verbose 标志
|
|
145
138
|
ENV['PINDO_VERBOSE'] = '1' if @args_verbose_flag
|
|
146
|
-
|
|
147
|
-
# 在非抽象命令初始化时设置上下文(但不在显示帮助时)
|
|
148
|
-
if !self.class.abstract_command? && !is_help_request
|
|
149
|
-
context = Pindo::PindoContext.instance
|
|
150
|
-
|
|
151
|
-
# 只在上下文未设置时才设置(避免重复设置)
|
|
152
|
-
if context.instance_variable_get(:@current_command).nil?
|
|
153
|
-
# 获取完整的命令路径
|
|
154
|
-
command_parts = []
|
|
155
|
-
current = self.class
|
|
156
|
-
while current < Pindo::Command
|
|
157
|
-
if current.command && current.command != 'pindo'
|
|
158
|
-
command_parts.unshift(current.command)
|
|
159
|
-
end
|
|
160
|
-
current = current.superclass
|
|
161
|
-
end
|
|
162
|
-
command_name = command_parts.empty? ? self.class.command : command_parts.join(':')
|
|
163
|
-
|
|
164
|
-
# 配置选项
|
|
165
|
-
cache_enabled_value = self.class.respond_to?(:use_cache?) ? self.class.use_cache? : false
|
|
166
|
-
options = {
|
|
167
|
-
cache_enabled: cache_enabled_value,
|
|
168
|
-
verbose: @args_verbose_flag
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
# 获取项目根目录(Git仓库根目录或当前目录)
|
|
172
|
-
project_dir = get_project_root_directory(Dir.pwd)
|
|
173
|
-
|
|
174
|
-
context.set_context(command_name, project_dir, options)
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
private
|
|
180
|
-
|
|
181
|
-
# 获取项目根目录(优先使用Git仓库根目录)
|
|
182
|
-
def get_project_root_directory(current_dir)
|
|
183
|
-
# 尝试获取Git仓库根目录
|
|
184
|
-
begin
|
|
185
|
-
git_root = `cd "#{current_dir}" && git rev-parse --show-toplevel 2>/dev/null`.strip
|
|
186
|
-
if $?.success? && !git_root.empty?
|
|
187
|
-
return git_root
|
|
188
|
-
end
|
|
189
|
-
rescue
|
|
190
|
-
# git命令失败,继续使用当前目录
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
# 如果不是Git仓库,返回当前目录
|
|
194
|
-
current_dir
|
|
195
139
|
end
|
|
196
140
|
|
|
197
141
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'singleton'
|
|
2
2
|
require 'fileutils'
|
|
3
|
-
require 'pindo/base/
|
|
3
|
+
require 'pindo/base/git_handler'
|
|
4
4
|
require 'pindo/config/pindoconfig'
|
|
5
5
|
|
|
6
6
|
module Pindo
|
|
@@ -9,7 +9,6 @@ module Pindo
|
|
|
9
9
|
# 负责管理应用配置仓库的拉取、更新等操作
|
|
10
10
|
class BuildInfoManager
|
|
11
11
|
include Singleton
|
|
12
|
-
include Pindo::Githelper
|
|
13
12
|
include Pindo::Pindoconfig::Mixin
|
|
14
13
|
|
|
15
14
|
class << self
|
|
@@ -30,7 +29,7 @@ module Pindo
|
|
|
30
29
|
|
|
31
30
|
# 获取配置仓库目录
|
|
32
31
|
begin
|
|
33
|
-
app_config_dir = clong_buildconfig_repo(repo_name: normalized_repo_name)
|
|
32
|
+
app_config_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: normalized_repo_name)
|
|
34
33
|
rescue StandardError => e
|
|
35
34
|
puts "拉取配置仓库失败: #{e.message}"
|
|
36
35
|
return false
|
|
@@ -71,7 +70,7 @@ module Pindo
|
|
|
71
70
|
gitee_client = GiteeClient.new(access_token: pindo_single_config.gitee_api_key)
|
|
72
71
|
|
|
73
72
|
# 获取模板配置仓库目录
|
|
74
|
-
demo_dir = clong_buildconfig_repo(repo_name: pindo_single_config.demo_bundle_id)
|
|
73
|
+
demo_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: pindo_single_config.demo_bundle_id)
|
|
75
74
|
|
|
76
75
|
# 确定仓库公开类型和所有者组织
|
|
77
76
|
public_type = 0
|
|
@@ -97,7 +96,7 @@ module Pindo
|
|
|
97
96
|
end
|
|
98
97
|
|
|
99
98
|
# 克隆配置仓库
|
|
100
|
-
app_config_dir = clong_buildconfig_repo(repo_name: repo_name)
|
|
99
|
+
app_config_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: repo_name)
|
|
101
100
|
system "open #{app_config_dir}"
|
|
102
101
|
|
|
103
102
|
if File.exist?(app_config_dir)
|
|
@@ -115,7 +114,7 @@ module Pindo
|
|
|
115
114
|
end
|
|
116
115
|
else
|
|
117
116
|
# 仓库已存在,直接打开
|
|
118
|
-
app_config_dir = clong_buildconfig_repo(repo_name: repo_name)
|
|
117
|
+
app_config_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: repo_name)
|
|
119
118
|
system "open #{app_config_dir}"
|
|
120
119
|
puts "⚠ 配置仓库已存在: #{app_config_dir}"
|
|
121
120
|
return app_config_dir
|
|
@@ -169,7 +168,7 @@ module Pindo
|
|
|
169
168
|
f.write(JSON.pretty_generate(git_repo_json))
|
|
170
169
|
end
|
|
171
170
|
|
|
172
|
-
git_addpush_repo(path: pindo_setting_dir, message: "add #{repo_name}")
|
|
171
|
+
Pindo::GitHandler.git_addpush_repo(path: pindo_setting_dir, message: "add #{repo_name}")
|
|
173
172
|
end
|
|
174
173
|
|
|
175
174
|
# 更新应用配置仓库(从模板复制)
|
|
@@ -201,7 +200,7 @@ module Pindo
|
|
|
201
200
|
end
|
|
202
201
|
|
|
203
202
|
# 提交并推送到远程仓库
|
|
204
|
-
git_addpush_repo(path: app_config_dir, message: "init app config")
|
|
203
|
+
Pindo::GitHandler.git_addpush_repo(path: app_config_dir, message: "init app config")
|
|
205
204
|
end
|
|
206
205
|
end
|
|
207
206
|
|
|
@@ -5,6 +5,7 @@ require_relative 'android_project_helper'
|
|
|
5
5
|
require_relative '../../base/executable'
|
|
6
6
|
require_relative 'android_res_helper'
|
|
7
7
|
require 'pindo/module/build/icon_downloader'
|
|
8
|
+
require 'pindo/module/build/git_repo_helper'
|
|
8
9
|
|
|
9
10
|
module Pindo
|
|
10
11
|
|
|
@@ -64,7 +65,7 @@ module Pindo
|
|
|
64
65
|
raise ArgumentError, "版本号不能为空" if version_code.nil?
|
|
65
66
|
|
|
66
67
|
# 验证version_code的有效性
|
|
67
|
-
unless valid_build_number?(version_code)
|
|
68
|
+
unless Pindo::GitRepoHelper.share_instance.valid_build_number?(version_code)
|
|
68
69
|
Funlog.instance.fancyinfo_error("Android versionCode必须在1到#{2**31-1}之间,当前值:#{version_code}")
|
|
69
70
|
return false
|
|
70
71
|
end
|
|
@@ -176,16 +177,6 @@ module Pindo
|
|
|
176
177
|
end
|
|
177
178
|
end
|
|
178
179
|
|
|
179
|
-
# 验证Build号是否在有效范围内
|
|
180
|
-
# @param build_number [Integer] Build号
|
|
181
|
-
# @return [Boolean] 是否有效
|
|
182
|
-
def self.valid_build_number?(build_number)
|
|
183
|
-
return false if build_number.nil?
|
|
184
|
-
|
|
185
|
-
# Android versionCode的有效范围是1到2^31-1
|
|
186
|
-
build_number >= 1 && build_number <= 2**31 - 1
|
|
187
|
-
end
|
|
188
|
-
|
|
189
180
|
# 使用package_name更新Android应用名称(strings.xml中的app_name)
|
|
190
181
|
# @param project_dir [String] Android项目目录路径
|
|
191
182
|
# @param package_name [String] 工作流的package_name(如:"Test Demo")
|
|
@@ -134,25 +134,12 @@ module Pindo
|
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
def get_selected_dev_bundleid()
|
|
137
|
-
|
|
138
|
-
env_bundleid = ENV['PINDO_BUNDLE_ID']
|
|
139
|
-
if env_bundleid && !env_bundleid.empty?
|
|
140
|
-
puts "\n使用环境变量指定的Bundle ID: #{env_bundleid}"
|
|
141
|
-
puts
|
|
142
|
-
# 保存到缓存
|
|
143
|
-
require_relative '../base/pindocontext'
|
|
144
|
-
context = Pindo::PindoContext.instance
|
|
145
|
-
context.set_selection(Pindo::PindoContext::SelectionKey::BUNDLE_ID, env_bundleid)
|
|
146
|
-
return env_bundleid
|
|
147
|
-
end
|
|
137
|
+
state = Pindo::Options::GlobalOptionsState.instance
|
|
148
138
|
|
|
149
|
-
#
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
if cached_bundleid
|
|
155
|
-
puts "\n使用之前选择的Bundle ID: #{cached_bundleid}"
|
|
139
|
+
# 检查 GlobalOptionsState 缓存(已包含环境变量和命令行参数)
|
|
140
|
+
cached_bundleid = state[:bundleid]
|
|
141
|
+
if cached_bundleid && !cached_bundleid.empty?
|
|
142
|
+
puts "\n使用已配置的Bundle ID: #{cached_bundleid}"
|
|
156
143
|
puts
|
|
157
144
|
return cached_bundleid
|
|
158
145
|
end
|
|
@@ -164,7 +151,7 @@ module Pindo
|
|
|
164
151
|
cli = HighLine.new
|
|
165
152
|
menu_choice="None"
|
|
166
153
|
puts
|
|
167
|
-
cli.choose do |menu|
|
|
154
|
+
cli.choose do |menu|
|
|
168
155
|
menu.header = "可用的Bundle Id如下:"
|
|
169
156
|
menu.prompt = "请选择使用的Bundle Id,请输入选项(1/2/3...):"
|
|
170
157
|
if !all_bundleid.nil? && all_bundleid.length > 0
|
|
@@ -183,8 +170,8 @@ module Pindo
|
|
|
183
170
|
menu_choice = "com.heroneverdie101"
|
|
184
171
|
end
|
|
185
172
|
|
|
186
|
-
#
|
|
187
|
-
|
|
173
|
+
# 保存选择到 GlobalOptionsState
|
|
174
|
+
state[:bundleid] = menu_choice
|
|
188
175
|
|
|
189
176
|
return menu_choice;
|
|
190
177
|
|
|
@@ -218,25 +205,12 @@ module Pindo
|
|
|
218
205
|
end
|
|
219
206
|
|
|
220
207
|
def get_selected_dev_bundle_name()
|
|
221
|
-
|
|
222
|
-
env_bundle_name = ENV['PINDO_BUNDLE_NAME']
|
|
223
|
-
if env_bundle_name && !env_bundle_name.empty?
|
|
224
|
-
puts "\n使用环境变量指定的Bundle Name: #{env_bundle_name}"
|
|
225
|
-
puts
|
|
226
|
-
# 保存到缓存
|
|
227
|
-
require_relative '../base/pindocontext'
|
|
228
|
-
context = Pindo::PindoContext.instance
|
|
229
|
-
context.set_selection(Pindo::PindoContext::SelectionKey::ANDROID_BUNDLE_NAME, env_bundle_name)
|
|
230
|
-
return env_bundle_name
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
# 检查缓存
|
|
234
|
-
require_relative '../base/pindocontext'
|
|
235
|
-
context = Pindo::PindoContext.instance
|
|
236
|
-
cached_bundle_name = context.get_selection(Pindo::PindoContext::SelectionKey::ANDROID_BUNDLE_NAME)
|
|
208
|
+
state = Pindo::Options::GlobalOptionsState.instance
|
|
237
209
|
|
|
238
|
-
|
|
239
|
-
|
|
210
|
+
# 检查 GlobalOptionsState 缓存(已包含环境变量和命令行参数)
|
|
211
|
+
cached_bundle_name = state[:bundle_name]
|
|
212
|
+
if cached_bundle_name && !cached_bundle_name.empty?
|
|
213
|
+
puts "\n使用已配置的Bundle Name: #{cached_bundle_name}"
|
|
240
214
|
puts
|
|
241
215
|
return cached_bundle_name
|
|
242
216
|
end
|
|
@@ -265,8 +239,8 @@ module Pindo
|
|
|
265
239
|
puts "选择的Bundle Name是: #{menu_choice}"
|
|
266
240
|
puts
|
|
267
241
|
|
|
268
|
-
#
|
|
269
|
-
|
|
242
|
+
# 保存选择到 GlobalOptionsState
|
|
243
|
+
state[:bundle_name] = menu_choice
|
|
270
244
|
|
|
271
245
|
return menu_choice
|
|
272
246
|
end
|
|
@@ -180,16 +180,13 @@ module Pindo
|
|
|
180
180
|
|
|
181
181
|
# 修改远程配置仓库
|
|
182
182
|
begin
|
|
183
|
-
|
|
184
|
-
include Pindo::Githelper
|
|
185
|
-
|
|
186
|
-
app_config_dir = clong_buildconfig_repo(repo_name: bundle_id)
|
|
183
|
+
app_config_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: bundle_id)
|
|
187
184
|
app_config_file = File.join(app_config_dir, "config.json")
|
|
188
185
|
|
|
189
186
|
if File.exist?(app_config_file)
|
|
190
187
|
modify_appconfig_file(config_file: app_config_file, app_info_detail: app)
|
|
191
|
-
prepare_gitenv()
|
|
192
|
-
git_addpush_repo(path: app_config_dir, message: "modify apple id")
|
|
188
|
+
Pindo::GitHandler.prepare_gitenv()
|
|
189
|
+
Pindo::GitHandler.git_addpush_repo(path: app_config_dir, message: "modify apple id")
|
|
193
190
|
end
|
|
194
191
|
rescue StandardError => e
|
|
195
192
|
puts "更新远程配置仓库失败: #{e.message}"
|