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
|
@@ -6,12 +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/
|
|
9
|
+
require 'pindo/module/task/model/git/git_commit_task'
|
|
10
|
+
require 'pindo/module/task/model/git/git_tag_task'
|
|
10
11
|
require 'pindo/module/task/model/unity/unity_update_task'
|
|
11
12
|
require 'pindo/module/task/model/unity/unity_yoo_asset_task'
|
|
12
13
|
require 'pindo/module/task/model/unity/unity_export_task'
|
|
13
14
|
require 'pindo/module/task/model/build_task'
|
|
14
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'
|
|
15
18
|
|
|
16
19
|
module Pindo
|
|
17
20
|
class Command
|
|
@@ -19,7 +22,6 @@ module Pindo
|
|
|
19
22
|
class Autobuild < Web
|
|
20
23
|
|
|
21
24
|
include Appselect
|
|
22
|
-
include Pindo::Githelper
|
|
23
25
|
|
|
24
26
|
self.summary = '打包Unity WebGL包'
|
|
25
27
|
|
|
@@ -56,34 +58,42 @@ module Pindo
|
|
|
56
58
|
# 暂无参数
|
|
57
59
|
]
|
|
58
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
|
+
|
|
59
71
|
# 命令的选项列表
|
|
60
72
|
def self.options
|
|
61
73
|
[
|
|
62
74
|
['--bundleid', '指定打包的bundleID'],
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
# 上传编译包
|
|
66
|
-
['--upload', '上传编译后的ipa到测试平台'],
|
|
67
|
-
# 发送通知
|
|
68
|
-
['--send', '上传成功后发送测试通知'],
|
|
69
|
-
# 编译完成后再本地打开webgl包
|
|
70
|
-
['--run', '编译完成后再本地打开webgl包'],
|
|
71
|
-
['--skiplib', '跳过Unity必备库更新(加快构建速度)'],
|
|
72
|
-
['--skipyoo', '跳过YooAsset资源打包(加快构建速度)']
|
|
73
|
-
].concat(super)
|
|
75
|
+
['--run', '编译完成后再本地打开webgl包']
|
|
76
|
+
].concat(option_items.map(&:to_claide_option)).concat(super)
|
|
74
77
|
end
|
|
75
78
|
|
|
76
79
|
def initialize(argv)
|
|
80
|
+
@options = initialize_options(argv)
|
|
77
81
|
|
|
78
82
|
@args_deploy_flag = argv.flag?('deploy', false)
|
|
79
83
|
@args_adhoc_flag = argv.flag?('adhoc', false)
|
|
80
|
-
@args_upload_flag =
|
|
81
|
-
@args_send_flag =
|
|
82
|
-
@args_proj_name =
|
|
84
|
+
@args_upload_flag = @options[:upload] || false
|
|
85
|
+
@args_send_flag = @options[:send] || false
|
|
86
|
+
@args_proj_name = @options[:proj]
|
|
83
87
|
@args_bundle_id = argv.option('bundleid')
|
|
84
88
|
@args_run_flag = argv.flag?('run', false)
|
|
85
|
-
@args_skip_lib =
|
|
86
|
-
@args_skip_yoo =
|
|
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'
|
|
87
97
|
|
|
88
98
|
if @args_send_flag
|
|
89
99
|
@args_upload_flag = true
|
|
@@ -102,10 +112,7 @@ module Pindo
|
|
|
102
112
|
pindo_project_dir = Dir.pwd
|
|
103
113
|
|
|
104
114
|
# 加载 JPS 配置(如果存在)
|
|
105
|
-
|
|
106
|
-
context.load_and_apply_jps_config(pindo_project_dir)
|
|
107
|
-
# 确认并应用缓存(如果有)
|
|
108
|
-
context.confirm_and_apply_cache
|
|
115
|
+
Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir)
|
|
109
116
|
|
|
110
117
|
# 准备配置
|
|
111
118
|
config = prepare_web_config(pindo_project_dir)
|
|
@@ -195,18 +202,34 @@ module Pindo
|
|
|
195
202
|
# Web 只支持 Unity 工程
|
|
196
203
|
tasks = []
|
|
197
204
|
|
|
198
|
-
# 1. Git
|
|
205
|
+
# 1. Git 提交任务(如果需要上传)
|
|
199
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 导出之前创建)
|
|
200
218
|
git_tag_task = Pindo::TaskSystem::GitTagTask.new(
|
|
201
|
-
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
|
|
202
224
|
)
|
|
225
|
+
git_tag_task.dependencies << git_commit_task.id
|
|
203
226
|
tasks << git_tag_task
|
|
227
|
+
last_task = git_tag_task
|
|
228
|
+
else
|
|
229
|
+
last_task = nil
|
|
204
230
|
end
|
|
205
231
|
|
|
206
|
-
#
|
|
207
|
-
last_task = tasks.first
|
|
208
|
-
|
|
209
|
-
# 2. Unity 更新必备库任务(可选)
|
|
232
|
+
# 3. Unity 更新必备库任务(可选)
|
|
210
233
|
unless @args_skip_lib
|
|
211
234
|
unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
|
|
212
235
|
project_path: config[:project_path]
|
|
@@ -216,7 +239,7 @@ module Pindo
|
|
|
216
239
|
last_task = unity_update_task
|
|
217
240
|
end
|
|
218
241
|
|
|
219
|
-
#
|
|
242
|
+
# 4. Unity YooAsset 资源构建任务(可选,依赖上一个任务)
|
|
220
243
|
unless @args_skip_yoo
|
|
221
244
|
unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
|
|
222
245
|
'web',
|
|
@@ -227,7 +250,7 @@ module Pindo
|
|
|
227
250
|
last_task = unity_yoo_task
|
|
228
251
|
end
|
|
229
252
|
|
|
230
|
-
#
|
|
253
|
+
# 5. Unity 导出任务(依赖上一个任务)
|
|
231
254
|
# Web 平台导出路径
|
|
232
255
|
web_export_path = File.join(config[:project_path], "GoodPlatform", "WebGL")
|
|
233
256
|
|
|
@@ -244,7 +267,7 @@ module Pindo
|
|
|
244
267
|
unity_export_task.dependencies << last_task.id if last_task
|
|
245
268
|
tasks << unity_export_task
|
|
246
269
|
|
|
247
|
-
#
|
|
270
|
+
# 6. 构建任务(Web 只需要检查输出)
|
|
248
271
|
build_task = Pindo::TaskSystem::BuildTask.create_task(
|
|
249
272
|
platform: :web,
|
|
250
273
|
mode: :dev,
|
|
@@ -260,23 +283,34 @@ module Pindo
|
|
|
260
283
|
build_task.dependencies << unity_export_task.id
|
|
261
284
|
tasks << build_task
|
|
262
285
|
|
|
263
|
-
#
|
|
286
|
+
# 7. 上传和消息发送任务(如果需要)
|
|
264
287
|
if @args_upload_flag
|
|
265
288
|
# WebGL 输出路径: GoodPlatform/WebGL/build
|
|
266
289
|
webgl_build_path = File.join(config[:project_path], 'GoodPlatform', 'WebGL', 'build')
|
|
290
|
+
|
|
291
|
+
# 7.1 创建上传任务
|
|
267
292
|
upload_task = Pindo::TaskSystem::JPSUploadTask.new(
|
|
268
293
|
'html',
|
|
269
294
|
webgl_build_path,
|
|
270
295
|
nil,
|
|
271
296
|
app_info_obj: config[:app_info_obj],
|
|
272
297
|
workflow_info: config[:workflow_info],
|
|
273
|
-
project_name: @args_proj_name
|
|
274
|
-
context: {
|
|
275
|
-
send_to_chat: @args_send_flag
|
|
276
|
-
},
|
|
277
|
-
dependencies: [build_task.id]
|
|
298
|
+
project_name: @args_proj_name
|
|
278
299
|
)
|
|
300
|
+
upload_task.dependencies << build_task.id
|
|
279
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
|
|
280
314
|
end
|
|
281
315
|
|
|
282
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}"
|
|
@@ -14,24 +14,6 @@ module Pindo
|
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def delete_libtarget_firebase_shell(project_path)
|
|
18
|
-
puts "[-] 开始检查并删除 Unity-iPhone下的Firebase Crashlytics脚本..."
|
|
19
|
-
if File.directory?(File.join(project_path, 'Unity')) && File.exist?(File.join(project_path, 'Unity', 'Unity-iPhone.xcodeproj'))
|
|
20
|
-
unity_project_path = File.join(project_path, 'Unity', 'Unity-iPhone.xcodeproj')
|
|
21
|
-
xcdoe_unitylib_project = Xcodeproj::Project::open(unity_project_path)
|
|
22
|
-
xcdoe_unitylib_project.targets.each do |target|
|
|
23
|
-
target.shell_script_build_phases&.each do |phase|
|
|
24
|
-
if phase.name.eql?("Crashlytics Run Script")
|
|
25
|
-
puts " 从target:#{target.name}中删除: #{phase.name} ..."
|
|
26
|
-
target.build_phases.delete(phase)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
xcdoe_unitylib_project.save()
|
|
31
|
-
puts "[✔] 完成检查并删除 Unity-iPhone下的Firebase Crashlytics脚本..."
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
17
|
def unity_project?(project_path)
|
|
36
18
|
# 检查Unity工程的关键文件和目录
|
|
37
19
|
project_settings_path = File.join(project_path, "ProjectSettings")
|
|
@@ -208,6 +190,34 @@ module Pindo
|
|
|
208
190
|
target_dir: target_dir
|
|
209
191
|
)
|
|
210
192
|
end
|
|
193
|
+
|
|
194
|
+
# 加载 JPSBuildConfig.json 并设置项目名称到 GlobalOptionsState
|
|
195
|
+
# @param project_dir [String] 项目目录
|
|
196
|
+
# @return [String, nil] 项目名称(如果存在)
|
|
197
|
+
def load_jps_build_config(project_dir)
|
|
198
|
+
# 检测工程类型:Unity 工程配置在 ProjectSettings 目录
|
|
199
|
+
config_file = if unity_project?(project_dir)
|
|
200
|
+
File.join(project_dir, 'ProjectSettings', 'JPSBuildConfig.json')
|
|
201
|
+
else
|
|
202
|
+
File.join(project_dir, 'JPSBuildConfig.json')
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
return nil unless File.exist?(config_file)
|
|
206
|
+
|
|
207
|
+
begin
|
|
208
|
+
config = JSON.parse(File.read(config_file))
|
|
209
|
+
project_name = config['project_name']
|
|
210
|
+
if project_name && !project_name.empty?
|
|
211
|
+
# 设置到 GlobalOptionsState
|
|
212
|
+
Pindo::Options::GlobalOptionsState.instance[:proj] = project_name
|
|
213
|
+
puts "使用 JPS 配置的项目名称: #{project_name}"
|
|
214
|
+
return project_name
|
|
215
|
+
end
|
|
216
|
+
rescue => e
|
|
217
|
+
puts "加载 JPSBuildConfig.json 失败: #{e.message}" if ENV['PINDO_VERBOSE'] == '1'
|
|
218
|
+
end
|
|
219
|
+
nil
|
|
220
|
+
end
|
|
211
221
|
end
|
|
212
222
|
|
|
213
223
|
end
|