pindo 5.13.1 → 5.13.3

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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/base/git_handler.rb +692 -0
  3. data/lib/pindo/command/android/autobuild.rb +2 -2
  4. data/lib/pindo/command/appstore/adhocbuild.rb +256 -311
  5. data/lib/pindo/command/appstore/autobuild.rb +203 -0
  6. data/lib/pindo/command/appstore/autoresign.rb +35 -17
  7. data/lib/pindo/command/appstore/bundleid.rb +120 -0
  8. data/lib/pindo/command/appstore/cert.rb +212 -0
  9. data/lib/pindo/command/appstore/configproj.rb +81 -0
  10. data/lib/pindo/command/{deploy → appstore}/getitcinfo.rb +76 -91
  11. data/lib/pindo/command/appstore/iap.rb +788 -24
  12. data/lib/pindo/command/appstore/initconfig.rb +105 -0
  13. data/lib/pindo/command/appstore/itcapp.rb +95 -13
  14. data/lib/pindo/command/{deploy → appstore}/itcinfo.rb +90 -118
  15. data/lib/pindo/command/appstore/pem.rb +136 -0
  16. data/lib/pindo/command/appstore/pullconfig.rb +99 -0
  17. data/lib/pindo/command/appstore/quswark.rb +87 -0
  18. data/lib/pindo/command/appstore/quswauth.rb +67 -0
  19. data/lib/pindo/command/appstore/tag.rb +77 -0
  20. data/lib/pindo/command/appstore.rb +13 -1
  21. data/lib/pindo/command/env/quarkenv.rb +11 -13
  22. data/lib/pindo/command/env/swarkenv.rb +11 -16
  23. data/lib/pindo/command/ios/applovin.rb +24 -182
  24. data/lib/pindo/command/ios/autobuild.rb +64 -43
  25. data/lib/pindo/command/ios/autoresign.rb +34 -19
  26. data/lib/pindo/command/ios/build.rb +9 -6
  27. data/lib/pindo/command/ios/cert.rb +27 -20
  28. data/lib/pindo/command/ios/podupdate.rb +6 -37
  29. data/lib/pindo/command/jps/upload.rb +3 -3
  30. data/lib/pindo/command/unity/autobuild.rb +2 -2
  31. data/lib/pindo/command/utils/clearcert.rb +2 -17
  32. data/lib/pindo/command/{deploy → utils}/fabric.rb +13 -13
  33. data/lib/pindo/command/utils/renewcert.rb +62 -38
  34. data/lib/pindo/command/utils/renewproj.rb +0 -3
  35. data/lib/pindo/command/{deploy → utils}/updateconfig.rb +6 -7
  36. data/lib/pindo/command/utils.rb +2 -0
  37. data/lib/pindo/command/web/autobuild.rb +2 -2
  38. data/lib/pindo/command.rb +30 -3
  39. data/lib/pindo/config/build_info_manager.rb +176 -0
  40. data/lib/pindo/config/ios_config_parser.rb +404 -0
  41. data/lib/pindo/module/android/android_config_helper.rb +9 -5
  42. data/lib/pindo/module/appstore/bundleid_helper.rb +349 -0
  43. data/lib/pindo/module/appstore/itcapp_helper.rb +228 -0
  44. data/lib/pindo/module/build/build_helper.rb +12 -0
  45. data/lib/pindo/module/build/swark_helper.rb +116 -77
  46. data/lib/pindo/module/cert/cert_helper.rb +74 -0
  47. data/lib/pindo/module/cert/pem_helper.rb +72 -0
  48. data/lib/pindo/module/cert/{xcodecerthelper.rb → xcode_cert_helper.rb} +211 -6
  49. data/lib/pindo/module/pgyer/pgyerhelper.rb +13 -5
  50. data/lib/pindo/module/task/model/appstore/appstore_task.rb +18 -0
  51. data/lib/pindo/module/task/model/appstore/appstore_upload_ipa_task.rb +151 -0
  52. data/lib/pindo/module/task/model/appstore/appstore_upload_metadata_task.rb +250 -0
  53. data/lib/pindo/module/task/model/appstore/appstore_upload_screenshot_task.rb +276 -0
  54. data/lib/pindo/module/task/model/build/android_build_adhoc_task.rb +210 -0
  55. data/lib/pindo/module/task/model/build/{android_dev_build_task.rb → android_build_dev_task.rb} +2 -2
  56. data/lib/pindo/module/task/model/build/android_build_gplay_task.rb +210 -0
  57. data/lib/pindo/module/task/model/build/android_build_task.rb +13 -0
  58. data/lib/pindo/module/task/model/build/ios_build_adhoc_task.rb +342 -0
  59. data/lib/pindo/module/task/model/build/ios_build_appstore_task.rb +341 -0
  60. data/lib/pindo/module/task/model/build/{ios_dev_build_task.rb → ios_build_dev_task.rb} +40 -59
  61. data/lib/pindo/module/task/model/build/ios_build_task.rb +23 -0
  62. data/lib/pindo/module/task/model/build/{web_dev_build_task.rb → web_build_dev_task.rb} +1 -1
  63. data/lib/pindo/module/task/model/build_task.rb +15 -12
  64. data/lib/pindo/module/task/model/jps_resign_task.rb +185 -0
  65. data/lib/pindo/module/task/model/{upload_task.rb → jps_upload_task.rb} +3 -3
  66. data/lib/pindo/module/task/model/unity_export_task.rb +3 -1
  67. data/lib/pindo/module/unity/unity_helper.rb +2 -1
  68. data/lib/pindo/module/xcode/applovin_xcode_helper.rb +271 -0
  69. data/lib/pindo/module/xcode/cocoapods_helper.rb +153 -0
  70. data/lib/pindo/module/xcode/ipa_resign_helper.rb +210 -0
  71. data/lib/pindo/module/xcode/{xcodeappconfig.rb → xcode_app_config.rb} +79 -0
  72. data/lib/pindo/module/xcode/xcode_build_config.rb +152 -17
  73. data/lib/pindo/module/xcode/xcode_build_helper.rb +151 -1
  74. data/lib/pindo/module/xcode/xcode_swark_helper.rb +341 -0
  75. data/lib/pindo/options/core/global_options_state.rb +268 -0
  76. data/lib/pindo/options/core/option_configuration.rb +206 -0
  77. data/lib/pindo/options/core/option_initializer.rb +51 -0
  78. data/lib/pindo/options/core/option_item.rb +144 -0
  79. data/lib/pindo/options/core/option_value_parser.rb +54 -0
  80. data/lib/pindo/options/groups/build_options.rb +60 -0
  81. data/lib/pindo/options/groups/jps_options.rb +70 -0
  82. data/lib/pindo/options/groups/option_group.rb +73 -0
  83. data/lib/pindo/options/helpers/bundleid_selector.rb +103 -0
  84. data/lib/pindo/options/options.rb +14 -0
  85. data/lib/pindo/version.rb +1 -1
  86. metadata +51 -40
  87. data/lib/pindo/command/appstore/import.rb +0 -259
  88. data/lib/pindo/command/deploy/build.rb +0 -250
  89. data/lib/pindo/command/deploy/bundleid.rb +0 -259
  90. data/lib/pindo/command/deploy/cert.rb +0 -202
  91. data/lib/pindo/command/deploy/check.rb +0 -93
  92. data/lib/pindo/command/deploy/configproj.rb +0 -120
  93. data/lib/pindo/command/deploy/confusecode.rb +0 -262
  94. data/lib/pindo/command/deploy/confuseproj.rb +0 -122
  95. data/lib/pindo/command/deploy/iap.rb +0 -826
  96. data/lib/pindo/command/deploy/initconfig.rb +0 -138
  97. data/lib/pindo/command/deploy/itcapp.rb +0 -146
  98. data/lib/pindo/command/deploy/pem.rb +0 -55
  99. data/lib/pindo/command/deploy/pullconfig.rb +0 -56
  100. data/lib/pindo/command/deploy/pushconfig.rb +0 -93
  101. data/lib/pindo/command/deploy/quswark.rb +0 -156
  102. data/lib/pindo/command/deploy/quswauth.rb +0 -76
  103. data/lib/pindo/command/deploy/reportbug.rb +0 -145
  104. data/lib/pindo/command/deploy/resign.rb +0 -300
  105. data/lib/pindo/command/deploy/tag.rb +0 -108
  106. data/lib/pindo/command/deploy/uploadipa.rb +0 -73
  107. data/lib/pindo/command/deploy.rb +0 -42
  108. data/lib/pindo/command/dev/autobuild.rb +0 -117
  109. data/lib/pindo/command/dev/build.rb +0 -94
  110. data/lib/pindo/command/dev/debug.rb +0 -112
  111. data/lib/pindo/module/task/model/build/android_release_build_task.rb +0 -29
  112. data/lib/pindo/module/task/model/build/ios_adhoc_build_task.rb +0 -53
  113. data/lib/pindo/module/task/model/build/ios_release_build_task.rb +0 -53
  114. data/lib/pindo/options/appconfigoptions.rb +0 -24
  115. data/lib/pindo/options/deployoptions.rb +0 -372
@@ -6,7 +6,7 @@ require 'pindo/module/pgyer/pgyerhelper'
6
6
  require 'pindo/module/build/git_repo_helper'
7
7
  require 'pindo/module/build/build_helper'
8
8
  require 'pindo/module/task/task_manager'
9
- require 'pindo/module/task/model/upload_task'
9
+ require 'pindo/module/task/model/jps_upload_task'
10
10
  require 'pindo/module/task/model/git_tag_task'
11
11
 
12
12
  module Pindo
@@ -386,8 +386,8 @@ module Pindo
386
386
  raise Informative, "#{@args_proj_name} 错误, 请输入正确的App代号名称, jps网站没有该App"
387
387
  end
388
388
 
389
- # 创建 UploadTask
390
- Pindo::TaskSystem::UploadTask.new(
389
+ # 创建 JPSUploadTask
390
+ Pindo::TaskSystem::JPSUploadTask.new(
391
391
  file_type,
392
392
  upload_path,
393
393
  upload_file,
@@ -10,7 +10,7 @@ require 'pindo/module/task/pindo_task'
10
10
  require 'pindo/module/task/task_manager'
11
11
  require 'pindo/module/task/model/build_task'
12
12
  require 'pindo/module/task/model/unity_export_task'
13
- require 'pindo/module/task/model/upload_task'
13
+ require 'pindo/module/task/model/jps_upload_task'
14
14
  require 'pindo/module/task/model/git_tag_task'
15
15
 
16
16
  module Pindo
@@ -307,7 +307,7 @@ module Pindo
307
307
  [platform, platform_path]
308
308
  end
309
309
 
310
- upload_task = Pindo::TaskSystem::UploadTask.new(
310
+ upload_task = Pindo::TaskSystem::JPSUploadTask.new(
311
311
  file_type,
312
312
  upload_path,
313
313
  nil,
@@ -2,7 +2,7 @@
2
2
  require 'highline/import'
3
3
  require 'fileutils'
4
4
  require 'json'
5
- require 'open3'
5
+ require 'pindo/module/cert/cert_helper'
6
6
 
7
7
  module Pindo
8
8
  class Command
@@ -61,22 +61,7 @@ module Pindo
61
61
  end
62
62
 
63
63
  def run
64
- output, _ = Open3.capture2('security find-identity -p codesigning')
65
- identity_ids_0 = []
66
- identity_ids_1 = output.split("\n").map { |line| line.split(' ')[1] if line.include?('Apple Development') }.compact
67
- identity_ids_2 = output.split("\n").map { |line| line.split(' ')[1] if line.include?('Apple Distribution') }.compact
68
- identity_ids = identity_ids_0 + identity_ids_1 + identity_ids_2
69
- identity_ids = identity_ids.uniq
70
- puts identity_ids
71
-
72
- identity_ids.each do |identity_id|
73
- system "security delete-certificate -Z #{identity_id}"
74
- end
75
-
76
- profile_file_dir = File.expand_path("~/Library/MobileDevice")
77
- profile_file_patb = File.join(profile_file_dir, "Provisioning Profiles")
78
- FileUtils.rm_rf(profile_file_patb)
79
-
64
+ Pindo::CertHelper.clean_local_certs
80
65
  end
81
66
  end
82
67
  end
@@ -1,15 +1,15 @@
1
1
  require 'highline/import'
2
2
  require 'xcodeproj'
3
- require 'find'
3
+ require 'find'
4
4
  require 'fileutils'
5
5
  require 'sigh'
6
6
 
7
7
  module Pindo
8
8
  class Command
9
- class Deploy < Command
10
- class Fabric < Deploy
11
-
12
-
9
+ class Utils < Command
10
+ class Fabric < Utils
11
+
12
+
13
13
  self.summary = '上传dsym文件到Firebase'
14
14
 
15
15
  self.description = <<-DESC
@@ -21,12 +21,12 @@ module Pindo
21
21
  - 支持iOS项目的符号文件上传
22
22
 
23
23
  使用示例:
24
- pindo deploy fabric
25
- cd your-project && pindo deploy fabric
24
+ pindo utils fabric
25
+ cd your-project && pindo utils fabric
26
26
  DESC
27
27
 
28
28
  self.arguments = [
29
-
29
+
30
30
  ]
31
31
 
32
32
  def run
@@ -39,7 +39,7 @@ module Pindo
39
39
  if path.to_s.end_with?(".app.dSYM.zip") then
40
40
  dsyms_file = path
41
41
  puts "DSYMS ++++++++++ #{dsyms_file}"
42
- puts
42
+ puts
43
43
  end
44
44
  end
45
45
 
@@ -50,18 +50,18 @@ module Pindo
50
50
  google_plist_path = File.join(current_project_dir, "AppEntry/GoogleService-Info.plist")
51
51
 
52
52
  command = upload_tool_path + " -gsp " + google_plist_path + " -p ios " + dsyms_file
53
- puts
53
+ puts
54
54
  puts command
55
- puts
55
+ puts
56
56
  system command
57
57
 
58
58
  end
59
59
 
60
-
60
+
61
61
  end
62
62
 
63
63
 
64
64
  end
65
65
  end
66
66
  end
67
- end
67
+ end
@@ -1,5 +1,5 @@
1
1
  require 'fileutils'
2
- require 'pindo/module/cert/xcodecerthelper'
2
+ require 'pindo/module/cert/xcode_cert_helper'
3
3
  require 'pindo/module/cert/cert_helper'
4
4
 
5
5
  module Pindo
@@ -8,7 +8,6 @@ module Pindo
8
8
  class Renewcert < Utils
9
9
 
10
10
  include Appselect
11
- include XcodeCertHelper
12
11
 
13
12
  self.summary = '重新创建当前账号下所有的Provisioning Profile文件'
14
13
 
@@ -104,83 +103,108 @@ module Pindo
104
103
 
105
104
  def fixed_cert(bundle_id:nil, renew_flag:false, upload_flag:false, fixed_bundleid_flag: false)
106
105
 
107
- args_temp = []
108
- args_temp << "#{bundle_id}"
106
+ # 拉取应用配置
107
+ require 'pindo/config/build_info_manager'
108
+ Pindo::BuildInfoManager.share_instance.pull_appconfig_with_reponame(
109
+ repo_name: bundle_id,
110
+ target_dir: Dir.pwd
111
+ )
109
112
 
110
- Pindo::Command::Deploy::Pullconfig::run(args_temp)
113
+ config_file_path = File.join(Dir.pwd, "config.json")
111
114
 
112
115
  if fixed_bundleid_flag
113
- Pindo::Command::Deploy::Bundleid::run([])
116
+ # 读取 config.json
117
+ config_json = JSON.parse(File.read(config_file_path))
118
+
119
+ # 使用 BundleIdHelper 创建 Bundle ID
120
+ require 'pindo/module/appstore/bundleid_helper'
121
+ Pindo::BundleIdHelper.execute_bundleid_creation(
122
+ config_json: config_json,
123
+ sign_flag: false
124
+ )
114
125
  end
115
126
 
116
127
  if @fast_flag
117
128
 
118
129
  if @dev_bundle_id_array.include?(bundle_id) || @tool_bundle_id_array.include?(bundle_id)
119
130
  args_temp = []
120
- args_temp << "--a=#{bundle_id}"
121
- args_temp << "--dev"
131
+ args_temp << "--config=#{config_file_path}"
132
+ args_temp << "--build_type=dev"
122
133
  if renew_flag
123
- args_temp << "--renew"
134
+ args_temp << "--renew"
124
135
  end
125
136
  if upload_flag
126
- args_temp << "--upload"
137
+ args_temp << "--upload"
127
138
  end
128
- Pindo::Command::Deploy::Cert::run(args_temp)
139
+ Pindo::Command::Appstore::Cert::run(args_temp)
129
140
  end
130
141
 
131
142
  if @deploy_bundle_id_array.include?(bundle_id)
132
143
  args_temp = []
133
- args_temp << "--a=#{bundle_id}"
134
- args_temp << "--adhoc"
144
+ args_temp << "--config=#{config_file_path}"
145
+ args_temp << "--build_type=adhoc"
135
146
  if renew_flag
136
- args_temp << "--renew"
147
+ args_temp << "--renew"
137
148
  end
138
149
  if upload_flag
139
- args_temp << "--upload"
150
+ args_temp << "--upload"
140
151
  end
141
- Pindo::Command::Deploy::Cert::run(args_temp)
152
+ Pindo::Command::Appstore::Cert::run(args_temp)
142
153
  end
143
154
 
144
155
  else
145
156
 
146
157
  args_temp = []
147
- args_temp << "--a=#{bundle_id}"
148
- args_temp << "--dev"
158
+ args_temp << "--config=#{config_file_path}"
159
+ args_temp << "--build_type=dev"
149
160
  if renew_flag
150
- args_temp << "--renew"
161
+ args_temp << "--renew"
151
162
  end
152
163
  if upload_flag
153
- args_temp << "--upload"
164
+ args_temp << "--upload"
154
165
  end
155
- Pindo::Command::Deploy::Cert::run(args_temp)
166
+ Pindo::Command::Appstore::Cert::run(args_temp)
156
167
 
157
168
  args_temp = []
158
- args_temp << "--a=#{bundle_id}"
159
- args_temp << "--adhoc"
169
+ args_temp << "--config=#{config_file_path}"
170
+ args_temp << "--build_type=adhoc"
160
171
  if renew_flag
161
- args_temp << "--renew"
172
+ args_temp << "--renew"
162
173
  end
163
174
  if upload_flag
164
- args_temp << "--upload"
175
+ args_temp << "--upload"
165
176
  end
166
- Pindo::Command::Deploy::Cert::run(args_temp)
177
+ Pindo::Command::Appstore::Cert::run(args_temp)
167
178
  end
168
179
  end
169
180
 
170
181
 
171
182
  def fixed_push(bundle_id:nil, fixed_bundleid: false)
172
-
173
- Pindo::Command::Deploy::Pullconfig::run(args_temp)
174
-
175
- args_temp = []
176
- args_temp << "--a=#{bundle_id}"
177
- args_temp << "--dev"
178
- Pindo::Command::Deploy::Pem::run(args_temp)
179
-
180
- args_temp = []
181
- args_temp << "--a=#{bundle_id}"
182
- args_temp << "--adhoc"
183
- Pindo::Command::Deploy::Pem::run(args_temp)
183
+
184
+ # 拉取应用配置
185
+ require 'pindo/config/build_info_manager'
186
+ Pindo::BuildInfoManager.share_instance.pull_appconfig_with_reponame(
187
+ repo_name: bundle_id,
188
+ target_dir: Dir.pwd
189
+ )
190
+
191
+ config_file_path = File.join(Dir.pwd, "config.json")
192
+ config_json = JSON.parse(File.read(config_file_path))
193
+
194
+ # 使用 PemHelper 创建开发证书
195
+ require 'pindo/module/cert/pem_helper'
196
+ Pindo::PemHelper.execute_pem_creation(
197
+ config_json: config_json,
198
+ dev_flag: true,
199
+ deploy_repo_name: nil
200
+ )
201
+
202
+ # 使用 PemHelper 创建生产证书
203
+ Pindo::PemHelper.execute_pem_creation(
204
+ config_json: config_json,
205
+ dev_flag: false,
206
+ deploy_repo_name: nil
207
+ )
184
208
 
185
209
  end
186
210
 
@@ -9,9 +9,6 @@ module Pindo
9
9
  class Utils < Command
10
10
  class Renewproj < Utils
11
11
 
12
- include Command::DeployOptions
13
-
14
-
15
12
  self.summary = '重新创建Xcode工程'
16
13
 
17
14
  self.description = <<-DESC
@@ -5,10 +5,9 @@ require 'highline'
5
5
 
6
6
  module Pindo
7
7
  class Command
8
- class Deploy < Command
9
- class Updateconfig < Deploy
10
-
11
- include Command::DeployOptions
8
+ class Utils < Command
9
+ class Updateconfig < Utils
10
+
12
11
  include Hashhelper
13
12
  include Appselect
14
13
 
@@ -22,9 +21,9 @@ module Pindo
22
21
  - 保留用户自定义配置的同时更新模板结构
23
22
 
24
23
  使用示例:
25
- pindo deploy updateconfig path/to/config.json
26
- pindo deploy updateconfig ./config.json
27
- pindo deploy updateconfig config.json
24
+ pindo utils updateconfig path/to/config.json
25
+ pindo utils updateconfig ./config.json
26
+ pindo utils updateconfig config.json
28
27
  DESC
29
28
 
30
29
  self.arguments = [
@@ -10,6 +10,8 @@ require 'pindo/command/utils/renewcert'
10
10
  require 'pindo/command/utils/repoinit'
11
11
  require 'pindo/command/utils/feishu'
12
12
  require 'pindo/command/utils/tag'
13
+ require 'pindo/command/utils/updateconfig'
14
+ require 'pindo/command/utils/fabric'
13
15
 
14
16
 
15
17
  module Pindo
@@ -9,7 +9,7 @@ require 'pindo/module/task/task_manager'
9
9
  require 'pindo/module/task/model/git_tag_task'
10
10
  require 'pindo/module/task/model/unity_export_task'
11
11
  require 'pindo/module/task/model/build_task'
12
- require 'pindo/module/task/model/upload_task'
12
+ require 'pindo/module/task/model/jps_upload_task'
13
13
 
14
14
  module Pindo
15
15
  class Command
@@ -234,7 +234,7 @@ module Pindo
234
234
  if @args_upload_flag
235
235
  # WebGL 输出路径: GoodPlatform/WebGL/build
236
236
  webgl_build_path = File.join(config[:project_path], 'GoodPlatform', 'WebGL', 'build')
237
- upload_task = Pindo::TaskSystem::UploadTask.new(
237
+ upload_task = Pindo::TaskSystem::JPSUploadTask.new(
238
238
  'html',
239
239
  webgl_build_path,
240
240
  nil,
data/lib/pindo/command.rb CHANGED
@@ -28,16 +28,15 @@ module Pindo
28
28
 
29
29
  require "fastlane"
30
30
  require "match"
31
- require 'pindo/options/deployoptions'
31
+ require 'pindo/options/options'
32
32
  require 'pindo/module/appselect'
33
33
  require 'pindo/module/build/confuse_xcodeproj'
34
- require 'pindo/module/cert/xcodecerthelper'
34
+ require 'pindo/module/cert/xcode_cert_helper'
35
35
 
36
36
  require 'pindo/module/appstore/appstore_in_app_purchase'
37
37
  require 'pindo/module/appstore/appstore_metadata_fastlane_helper'
38
38
  require 'pindo/module/appstore/appstore_metadata_connect_api_helper'
39
39
 
40
- require 'pindo/command/deploy'
41
40
  require 'pindo/command/env'
42
41
  require 'pindo/command/utils'
43
42
  require 'pindo/command/jps'
@@ -65,6 +64,34 @@ module Pindo
65
64
  # 注意:缓存组的定义已经移至 PindoContext#get_command_group 中统一管理
66
65
  # 使用命令名作为组名,如 ios:autobuild, and:autobuild, web:autobuild
67
66
 
67
+ # 自动推导命令名称
68
+ # @return [String] 命令名称,例如:Pindo::Command::Ios::Autobuild → 'ios:autobuild'
69
+ def self.command_name
70
+ @command_name ||= begin
71
+ # 从类名推导,例如:
72
+ # Pindo::Command::Ios::Autobuild → ['Ios', 'Autobuild'] → 'ios:autobuild'
73
+ parts = name.split('::').drop(2) # 去掉 'Pindo' 和 'Command'
74
+ parts.map(&:downcase).join(':')
75
+ end
76
+ end
77
+
78
+ # 初始化参数(便捷方法)
79
+ # @param argv [CLAide::ARGV] 命令行参数
80
+ # @param command_name [String, nil] 命令名称(可选,默认自动推导)
81
+ # @param directory [String, nil] 工作目录(可选,默认当前目录)
82
+ # @param enable_cache [Boolean, nil] 是否启用缓存(可选,默认使用 use_cache?)
83
+ # @return [OptionConfiguration] 参数配置对象
84
+ def initialize_options(argv, command_name: nil, directory: nil, enable_cache: nil)
85
+ Pindo::Options::OptionInitializer.initialize(
86
+ self,
87
+ argv,
88
+ self.class.option_items,
89
+ command_name || self.class.command_name,
90
+ directory: directory,
91
+ enable_cache: enable_cache.nil? ? self.class.use_cache? : enable_cache
92
+ )
93
+ end
94
+
68
95
 
69
96
  DEFAULT_ROOT_OPTIONS = [
70
97
  ['--version', '查看pindo版本'],
@@ -0,0 +1,176 @@
1
+ require 'singleton'
2
+ require 'fileutils'
3
+ require 'pindo/base/githelper'
4
+
5
+ module Pindo
6
+
7
+ # 构建信息管理器
8
+ # 负责管理应用配置仓库的拉取、更新等操作
9
+ class BuildInfoManager
10
+ include Singleton
11
+ include Pindo::Githelper
12
+
13
+ class << self
14
+ def share_instance
15
+ instance
16
+ end
17
+ end
18
+
19
+ # 拉取应用配置仓库
20
+ # @param repo_name [String] 仓库名称(Bundle ID)
21
+ # @param target_dir [String, nil] 目标目录(默认:当前目录)
22
+ # @return [Boolean] 是否成功拉取配置
23
+ def pull_appconfig_with_reponame(repo_name:, target_dir: nil)
24
+ return false if repo_name.nil? || repo_name.empty?
25
+
26
+ # 规范化仓库名称:去除尾部的 .* (通配符转换)
27
+ normalized_repo_name = repo_name.end_with?('.*') ? repo_name.chomp('.*') : repo_name
28
+
29
+ # 获取配置仓库目录
30
+ begin
31
+ app_config_dir = clong_buildconfig_repo(repo_name: normalized_repo_name)
32
+ rescue StandardError => e
33
+ puts "拉取配置仓库失败: #{e.message}"
34
+ return false
35
+ end
36
+
37
+ # 确定目标目录
38
+ target_dir ||= Dir.pwd
39
+
40
+ # 如果配置仓库目录与目标目录不同,且存在 config.json,则复制
41
+ if !app_config_dir.eql?(target_dir) && File.exist?(File.join(app_config_dir, 'config.json'))
42
+ begin
43
+ FileUtils.cp_r(File.join(app_config_dir, "config.json"), target_dir)
44
+ puts "✓ 配置文件已复制到: #{target_dir}"
45
+ return true
46
+ rescue StandardError => e
47
+ puts "复制配置文件失败: #{e.message}"
48
+ return false
49
+ end
50
+ elsif app_config_dir.eql?(target_dir)
51
+ puts "✓ 配置文件已存在于目标目录"
52
+ return true
53
+ else
54
+ puts "⚠ 配置仓库中未找到 config.json"
55
+ return false
56
+ end
57
+ end
58
+
59
+ # 创建应用配置仓库
60
+ # @param bundle_id [String] Bundle ID(作为仓库名称)
61
+ # @param test_flag [Boolean] 是否为测试环境(默认:false)
62
+ # @return [String, nil] 成功返回配置仓库目录路径,失败返回 nil
63
+ def create_appconfig_with_bundleid(bundle_id:, test_flag: false)
64
+ return nil if bundle_id.nil? || bundle_id.empty?
65
+
66
+ require_relative '../client/giteeclient'
67
+
68
+ # 获取 Gitee 客户端
69
+ gitee_client = GiteeClient.new(access_token: pindo_single_config.gitee_api_key)
70
+
71
+ # 获取模板配置仓库目录
72
+ demo_dir = clong_buildconfig_repo(repo_name: pindo_single_config.demo_bundle_id)
73
+
74
+ # 确定仓库公开类型和所有者组织
75
+ public_type = 0
76
+ owner_org = pindo_single_config.build_deploy_org
77
+ repo_name = bundle_id
78
+
79
+ if test_flag
80
+ owner_org = pindo_single_config.build_test_org
81
+ public_type = 2
82
+ end
83
+
84
+ # 创建 Gitee 仓库
85
+ success = gitee_client.gitee_create_repo(
86
+ owner: owner_org,
87
+ repo_name: repo_name,
88
+ public_type: public_type
89
+ )
90
+
91
+ if success
92
+ # 如果是测试环境,修改仓库设置
93
+ if test_flag
94
+ modify_repo_setting(repo_name: repo_name, owner_org: owner_org)
95
+ end
96
+
97
+ # 克隆配置仓库
98
+ app_config_dir = clong_buildconfig_repo(repo_name: repo_name)
99
+ system "open #{app_config_dir}"
100
+
101
+ if File.exist?(app_config_dir)
102
+ # 从模板仓库复制配置文件
103
+ update_appconfig_repo(
104
+ bundle_id: bundle_id,
105
+ demo_dir: demo_dir,
106
+ app_config_dir: app_config_dir
107
+ )
108
+ puts "✓ 配置仓库创建成功: #{app_config_dir}"
109
+ return app_config_dir
110
+ else
111
+ puts "❌ 创建应用配置仓库失败"
112
+ return nil
113
+ end
114
+ else
115
+ # 仓库已存在,直接打开
116
+ app_config_dir = clong_buildconfig_repo(repo_name: repo_name)
117
+ system "open #{app_config_dir}"
118
+ puts "⚠ 配置仓库已存在: #{app_config_dir}"
119
+ return app_config_dir
120
+ end
121
+ end
122
+
123
+ private
124
+
125
+ # 修改仓库设置(测试环境)
126
+ def modify_repo_setting(repo_name:, owner_org:)
127
+ pindo_setting_dir = pindo_single_config.pindo_env_configdir
128
+ git_repo_file = pindo_single_config.git_base_url_fullname
129
+ git_repo_json = JSON.parse(File.read(git_repo_file))
130
+ git_repo_json ||= {}
131
+
132
+ if git_repo_json
133
+ git_repo_json[repo_name] = owner_org
134
+ end
135
+
136
+ File.open(git_repo_file, "w") do |f|
137
+ f.write(JSON.pretty_generate(git_repo_json))
138
+ end
139
+
140
+ git_addpush_repo(path: pindo_setting_dir, message: "add #{repo_name}")
141
+ end
142
+
143
+ # 更新应用配置仓库(从模板复制)
144
+ def update_appconfig_repo(bundle_id:, demo_dir:, app_config_dir:)
145
+ return unless File.exist?(demo_dir)
146
+
147
+ # 复制 config.json
148
+ if File.exist?(File.join(demo_dir, "config.json"))
149
+ FileUtils.cp_r(File.join(demo_dir, "config.json"), app_config_dir)
150
+ end
151
+
152
+ # 复制 fastlane 目录
153
+ if File.exist?(File.join(demo_dir, "fastlane"))
154
+ FileUtils.cp_r(File.join(demo_dir, "fastlane"), app_config_dir)
155
+ end
156
+
157
+ # 复制 launch 目录
158
+ if File.exist?(File.join(demo_dir, "launch"))
159
+ FileUtils.cp_r(File.join(demo_dir, "launch"), app_config_dir)
160
+ end
161
+
162
+ # 替换 config.json 中的 Bundle ID
163
+ config_file = File.join(app_config_dir, "config.json")
164
+ if File.exist?(config_file)
165
+ text = File.read(config_file)
166
+ demo_bundle_id = pindo_single_config.demo_bundle_id
167
+ new_contents = text.gsub(/#{demo_bundle_id}/, bundle_id)
168
+ File.open(config_file, "w") { |file| file.puts new_contents }
169
+ end
170
+
171
+ # 提交并推送到远程仓库
172
+ git_addpush_repo(path: app_config_dir, message: "init app config")
173
+ end
174
+ end
175
+
176
+ end