pindo 5.14.6 → 5.14.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da83c30dd943e6edfa9320b5944d43b76fd467c2ebdf1aff2f010a07235628a9
4
- data.tar.gz: a05b5d981a1431cfc9c0659d20966f4eaafee7433de93d27ebddb11310a57678
3
+ metadata.gz: 0e61c4fa7bc1f944011a7d2da6ea5f88e6964cf4156fbfc820a82f87f8376b15
4
+ data.tar.gz: '0826f4b21c1fdd8145763b8357dddfa7f6c06a461b128bb458b7c75886ba5208'
5
5
  SHA512:
6
- metadata.gz: bf83411f15e4a91b3c80d5add990d84e6a00513deee5943304a0a5cb72a29d9495d8cbbd14da5e8463bd4345d2e778997e7947cb7bc681d4046e362eb7fadb1d
7
- data.tar.gz: efee3ed4cf27cc7206f57543865397dc126d3c4e902451a59b617e2547fa8c5fae96330dcd9c9b9f3b2ddc12545024537fe46620199a3261a32da8afb1dc7902
6
+ metadata.gz: a1379dd0f212e82aad3c889d9c06374810441728700616d9a2293c647bbe0272318d744dcfd4056edf69d8bde847a9394225c334a3909e419f34321d38d9f29f
7
+ data.tar.gz: df9c68524dbdbd81f29e3134c9b1a25de3e6fc57e29346b5beae93bcccb8ac1186bbfe7e3f4a86dbfb81ebc5356f91eeb852cf9a6f504144225c3715e9a63975
@@ -89,7 +89,7 @@ module Pindo
89
89
  def self.option_items
90
90
  @option_items ||= Pindo::Options::OptionGroup.merge(
91
91
  Pindo::Options::BuildOptions.select(:bundle_name), # 添加 bundle_name 参数
92
- Pindo::Options::JPSOptions.select(:proj, :upload, :send, :media),
92
+ Pindo::Options::JPSOptions.select(:proj, :upload, :media, :bind, :send),
93
93
  Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
94
94
  Pindo::Options::UnityOptions.select_with_defaults(skipconfig: true),
95
95
  Pindo::Options::TaskOptions.select(:multi),
@@ -100,7 +100,7 @@ module Pindo
100
100
  def self.option_items
101
101
  @option_items ||= Pindo::Options::OptionGroup.merge(
102
102
  Pindo::Options::BuildOptions.select(:bundleid, :build_type),
103
- Pindo::Options::JPSOptions.select(:proj, :upload, :send, :media, :bind),
103
+ Pindo::Options::JPSOptions.select(:proj, :upload, :media, :bind, :send),
104
104
  Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
105
105
  Pindo::Options::UnityOptions.select_with_defaults(skipconfig: true),
106
106
  Pindo::Options::TaskOptions.select(:multi),
@@ -100,7 +100,7 @@ module Pindo
100
100
  def self.option_items
101
101
  @option_items ||= Pindo::Options::OptionGroup.merge(
102
102
  Pindo::Options::BuildOptions.select(:bundleid, :bundle_name), # 添加 bundleid 和 bundle_name 参数
103
- Pindo::Options::JPSOptions.select(:proj, :upload, :send, :media),
103
+ Pindo::Options::JPSOptions.select(:proj, :upload, :send, :media, :bind),
104
104
  Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
105
105
  Pindo::Options::UnityOptions.select_with_defaults(skipconfig: true),
106
106
  Pindo::Options::TaskOptions.select(:multi),
@@ -93,7 +93,7 @@ module Pindo
93
93
  def self.option_items
94
94
  @option_items ||= Pindo::Options::OptionGroup.merge(
95
95
  Pindo::Options::BuildOptions.select(:bundleid), # 添加 bundleid 参数
96
- Pindo::Options::JPSOptions.select(:proj, :upload, :send, :media),
96
+ Pindo::Options::JPSOptions.select(:proj, :upload, :send, :media, :bind),
97
97
  Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
98
98
  Pindo::Options::UnityOptions.select_with_defaults(skipconfig: true),
99
99
  Pindo::Options::TaskOptions.select(:multi),
@@ -239,6 +239,13 @@ module Pindo
239
239
  puts "选择的Bundle Name是: #{menu_choice}"
240
240
  puts
241
241
 
242
+ # 去除通配符后缀(如 com.test.* -> com.test)
243
+ if menu_choice.end_with?(".*")
244
+ menu_choice = menu_choice.sub(/\.\*$/, '')
245
+ puts "去除通配符后的Bundle Name: #{menu_choice}"
246
+ puts
247
+ end
248
+
242
249
  # 保存选择到 GlobalOptionsState
243
250
  state[:bundle_name] = menu_choice
244
251
 
@@ -270,6 +277,13 @@ module Pindo
270
277
  puts "选择的Bundle Name是: #{menu_choice}"
271
278
  puts
272
279
 
280
+ # 去除通配符后缀(如 com.test.* -> com.test)
281
+ if menu_choice.end_with?(".*")
282
+ menu_choice = menu_choice.sub(/\.\*$/, '')
283
+ puts "去除通配符后的Bundle Name: #{menu_choice}"
284
+ puts
285
+ end
286
+
273
287
  return menu_choice
274
288
  end
275
289
 
@@ -1551,11 +1551,83 @@ module Pindo
1551
1551
  end
1552
1552
  end
1553
1553
 
1554
- # 获取工作流中已绑定的包 ID
1554
+ # 获取特定 commit 已绑定的包 ID
1555
1555
  #
1556
+ # @param commit_id [String] Git commit SHA(必需)
1557
+ # @param workflow_id [Integer, String] 工作流 ID(必需,API 需要)
1558
+ # @return [Array<String>] 已绑定的包 ID 数组
1559
+ def get_commit_bound_package_ids(commit_id:, workflow_id:)
1560
+ return [] if commit_id.nil? || commit_id.empty?
1561
+ return [] if workflow_id.nil?
1562
+
1563
+ begin
1564
+ # 使用 commit_log/preview API 直接查询特定 commit
1565
+ result = @pgyer_client.get_commit_log_preview(
1566
+ workflowId: workflow_id,
1567
+ commitIds: [commit_id],
1568
+ params: { onlyCliff: false } # 需要完整信息
1569
+ )
1570
+
1571
+ # 兼容两种响应格式
1572
+ response_code = result&.dig("code") || result&.dig("meta", "code")
1573
+
1574
+ if result && (response_code == 0 || response_code == 200)
1575
+ # 从响应中提取 commit 信息
1576
+ # preview API 可能返回数组或单个对象
1577
+ commit_data = result&.dig("data")
1578
+ commit_list = commit_data.is_a?(Array) ? commit_data : [commit_data].compact
1579
+
1580
+ # 查找匹配的 commit
1581
+ commit_info = commit_list.find { |item| item && item["commitId"] == commit_id }
1582
+
1583
+ if commit_info && commit_info["bindVersions"]
1584
+ # 从 bindVersions 中提取所有平台的 projectPackageId
1585
+ bind_versions = commit_info["bindVersions"]
1586
+ package_ids = []
1587
+
1588
+ # 遍历所有平台(ipa, apk, zip, mac, exe 等)
1589
+ bind_versions.each do |_platform, version_info|
1590
+ if version_info && version_info["projectPackageId"]
1591
+ package_ids << version_info["projectPackageId"]
1592
+ end
1593
+ end
1594
+
1595
+ return package_ids.compact.uniq
1596
+ else
1597
+ # 如果没有找到或没有绑定信息,返回空数组(可能是首次绑定)
1598
+ if ENV['PINDO_DEBUG']
1599
+ puts "[PINDO_DEBUG] Commit #{commit_id[0..7]} 没有绑定信息"
1600
+ end
1601
+ return []
1602
+ end
1603
+ else
1604
+ # 如果获取失败,返回空数组(不阻止绑定流程)
1605
+ if ENV['PINDO_DEBUG']
1606
+ error_msg = result&.dig("msg") || result&.dig("meta", "message") || "未知错误"
1607
+ puts "[PINDO_DEBUG] 获取 commit 绑定包失败: #{error_msg}"
1608
+ end
1609
+ return []
1610
+ end
1611
+ rescue => e
1612
+ # 异常时返回空数组,不阻止绑定流程
1613
+ if ENV['PINDO_DEBUG']
1614
+ puts "[PINDO_DEBUG] 获取 commit 绑定包异常: #{e.message}"
1615
+ puts "[PINDO_DEBUG] Backtrace: #{e.backtrace[0..2].join("\n")}"
1616
+ end
1617
+ return []
1618
+ end
1619
+ end
1620
+
1621
+ # 获取工作流中已绑定的包 ID(已废弃,请使用 get_commit_bound_package_ids)
1622
+ #
1623
+ # @deprecated 使用 get_commit_bound_package_ids(commit_id:, workflow_id:) 替代
1556
1624
  # @param workflow_id [Integer, String] 工作流 ID
1557
1625
  # @return [Array<String>] 已绑定的包 ID 数组
1558
1626
  def get_workflow_bound_package_ids(workflow_id:)
1627
+ if ENV['PINDO_DEBUG']
1628
+ puts "[PINDO_DEBUG] ⚠️ get_workflow_bound_package_ids 已废弃,请使用 get_commit_bound_package_ids"
1629
+ end
1630
+
1559
1631
  return [] if workflow_id.nil?
1560
1632
 
1561
1633
  begin
@@ -142,24 +142,27 @@ module Pindo
142
142
  raise "缺少 workflow_info,无法获取 workflow_id"
143
143
  end
144
144
 
145
- # 7. 获取工作流中已绑定的包 ID
146
- existing_bound_ids = pgyer_helper.get_workflow_bound_package_ids(workflow_id: workflow_id)
145
+ # 7. 获取当前 commit 已绑定的包 ID
146
+ existing_bound_ids = pgyer_helper.get_commit_bound_package_ids(
147
+ commit_id: @git_commit_id,
148
+ workflow_id: workflow_id
149
+ )
147
150
 
148
151
  if existing_bound_ids.any?
149
- puts " 📋 工作流中已绑定的包: #{existing_bound_ids.size} 个"
152
+ puts " 📋 当前 Commit 已绑定的包: #{existing_bound_ids.size} 个"
150
153
  end
151
154
 
152
- # 8. 合并已绑定的包 ID 和新的包 ID(去重)
155
+ # 8. 合并当前 commit 已绑定的 ID 和新上传的包 ID(去重)
153
156
  merged_package_ids = (existing_bound_ids + project_package_ids).uniq
154
157
 
155
158
  puts " 📦 合并后的包 ID 数量: #{merged_package_ids.size} 个"
156
159
  if merged_package_ids.size > project_package_ids.size
157
160
  puts " └─ 新增: #{project_package_ids.size} 个"
158
- puts " └─ 已存在: #{existing_bound_ids.size} 个"
161
+ puts " └─ 已绑定: #{existing_bound_ids.size} 个"
159
162
  end
160
163
  puts ""
161
164
 
162
- # 9. 批量绑定所有包
165
+ # 9. 批量绑定所有包(API 是覆盖式,所以需要包含已绑定的)
163
166
  Funlog.instance.fancyinfo_start("正在绑定 #{merged_package_ids.size} 个项目包...")
164
167
 
165
168
  bind_result = pgyer_helper.bind_commit_to_package(
@@ -37,8 +37,9 @@ module Pindo
37
37
  optional: true,
38
38
  cacheable: true, # 存入文件缓存
39
39
  verify_block: proc do |value|
40
- unless value =~ /^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/i
41
- raise "Package Name 格式错误: #{value},应该类似 com.example.app"
40
+ # 允许标准格式(com.example.app)或带通配符格式(com.example.*)
41
+ unless value =~ /^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_\*]*)+$/i
42
+ raise "Package Name 格式错误: #{value},应该类似 com.example.app 或 com.example.*"
42
43
  end
43
44
  end,
44
45
  example: 'pindo android autobuild --bundle_name=com.example.app'
data/lib/pindo/version.rb CHANGED
@@ -6,7 +6,7 @@ require 'time'
6
6
 
7
7
  module Pindo
8
8
 
9
- VERSION = "5.14.6"
9
+ VERSION = "5.14.7"
10
10
 
11
11
  class VersionCheck
12
12
  RUBYGEMS_API = 'https://rubygems.org/api/v1/gems/pindo.json'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pindo
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.14.6
4
+ version: 5.14.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - wade
@@ -189,20 +189,20 @@ dependencies:
189
189
  requirements:
190
190
  - - "~>"
191
191
  - !ruby/object:Gem::Version
192
- version: '1.8'
192
+ version: '1.9'
193
193
  - - ">="
194
194
  - !ruby/object:Gem::Version
195
- version: 1.8.1
195
+ version: 1.9.0
196
196
  type: :runtime
197
197
  prerelease: false
198
198
  version_requirements: !ruby/object:Gem::Requirement
199
199
  requirements:
200
200
  - - "~>"
201
201
  - !ruby/object:Gem::Version
202
- version: '1.8'
202
+ version: '1.9'
203
203
  - - ">="
204
204
  - !ruby/object:Gem::Version
205
- version: 1.8.1
205
+ version: 1.9.0
206
206
  - !ruby/object:Gem::Dependency
207
207
  name: bundler
208
208
  requirement: !ruby/object:Gem::Requirement