pindo 5.19.1 → 5.19.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: db02bf00df627b07423ebd53475c538b60a4d5d8d567b2bb81a61390aaae73bc
4
- data.tar.gz: 5252fb968e7bde86a095a78dce92599c9614061c1da9666e8cf2bea03927c8c6
3
+ metadata.gz: 5a77caec349df71376df7ea433567423ae745f767297fb29377e265f123b63d8
4
+ data.tar.gz: 5f8040b7e13937405b635906ad34dcd4466af83292d65b823968d22fce9f3081
5
5
  SHA512:
6
- metadata.gz: fa95f45065b4a8635c4d12c5a4c1d3a95e678df97724103857e055d9088d8f8613fddef8786229163bbd8ad01c87242e396e5b79e1c5f4d92411b61192e3bde1
7
- data.tar.gz: 931bd858133452f7cc5a3edafc60cbe7c4f56b5d0f8da6d720f24c23f7974cfe2c823e0bbc7e1d1a04bc8f99faa581ef7c52ae99b0676ec6cfc4e407411e3e05
6
+ metadata.gz: 9fb90c4d057aab583df7780e4e8880c47507da9c64f9b05dfb48b778c87ae1695cf33711c6b777ad6540284f97a101ba5c28f10e8d6a91dfc6243b6a4a25843f
7
+ data.tar.gz: 57f746e6f8a01dcebab6615d1e30de5d7b6a1eb2b221bf8db50a10c66a0aab240279064b86f89bef7e0ccace8186eaf87da42a008a2f50f2a403f0d5ee5ec593
@@ -216,12 +216,17 @@ module Pindo
216
216
  def remote_tag_commit(local_repo_dir: nil, tag_name: nil)
217
217
  return nil if local_repo_dir.nil? || !File.exist?(local_repo_dir)
218
218
  tag_ref = "refs/tags/#{tag_name}"
219
- res_data = git_remote!(local_repo_dir, %W(-C #{local_repo_dir} ls-remote --tags origin #{tag_ref}))
220
- lines = res_data.to_s.lines.map(&:strip).reject(&:empty?)
221
- return nil if lines.empty?
222
- # annotated tag ^{} 解引用行才是真实 commit,优先取它
223
- deref = lines.find { |l| l.include?("^{}") }
224
- (deref || lines.first).split(/\s+/).first
219
+ peeled_ref = "#{tag_ref}^{}"
220
+ # annotated tag 需要 ^{} 解引用行才能拿到真实 commit;但只传 tag_ref 精确过滤时,
221
+ # git ls-remote 不会附带 ^{} 行,必须显式把 peeled_ref 一起传入才能拿到它
222
+ res_data = git_remote!(local_repo_dir, %W(-C #{local_repo_dir} ls-remote --tags origin #{tag_ref} #{peeled_ref}))
223
+ entries = res_data.to_s.lines.map { |l| l.strip.split(/\s+/, 2) }
224
+ .select { |sha, ref| sha && ref }
225
+ return nil if entries.empty?
226
+ # 优先取 ^{} 行(annotated tag 的真实 commit);lightweight tag 只有 tag_ref 行且本身即 commit
227
+ peeled = entries.find { |_sha, ref| ref == peeled_ref }
228
+ plain = entries.find { |_sha, ref| ref == tag_ref }
229
+ (peeled || plain)&.first
225
230
  end
226
231
 
227
232
  def remote_tag_exists?(local_repo_dir: nil, tag_name: nil)
@@ -98,7 +98,7 @@ module Pindo
98
98
  @option_items ||= Pindo::Options::OptionGroup.merge(
99
99
  Pindo::Options::BuildOptions.select(:bundle_name, :release),
100
100
  Pindo::Options::JPSOptions.select(:conf, :upload, :media, :bind, :send),
101
- Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
101
+ Pindo::Options::UnityOptions.select(:skiplib, :skipyoo, :kill_unity),
102
102
  Pindo::Options::UnityOptions.select_with_defaults(skipmacro: true),
103
103
  Pindo::Options::TaskOptions.select(:multi),
104
104
  Pindo::Options::GitOptions.all
@@ -130,6 +130,7 @@ module Pindo
130
130
  # Unity 参数
131
131
  @args_skip_lib = @options[:skiplib] || false
132
132
  @args_skip_yoo = @options[:skipyoo] || false
133
+ @args_kill_unity = @options[:kill_unity] || false
133
134
 
134
135
  # Task 参数
135
136
  @args_multi_flag = @options[:multi] || false
@@ -313,7 +314,8 @@ module Pindo
313
314
  # 2.1 Unity 更新必备库任务(可选)
314
315
  unless @args_skip_lib
315
316
  unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
316
- project_path: config[:project_path]
317
+ project_path: config[:project_path],
318
+ auto_kill: @args_kill_unity
317
319
  )
318
320
  unity_update_task.dependencies << last_task.id
319
321
  tasks << unity_update_task
@@ -324,7 +326,8 @@ module Pindo
324
326
  unless @args_skip_yoo
325
327
  unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
326
328
  'android',
327
- project_path: config[:project_path]
329
+ project_path: config[:project_path],
330
+ auto_kill: @args_kill_unity
328
331
  )
329
332
  unity_yoo_task.dependencies << last_task.id
330
333
  tasks << unity_yoo_task
@@ -339,7 +342,8 @@ module Pindo
339
342
  'android',
340
343
  project_path: config[:project_path],
341
344
  export_path: android_export_path,
342
- context: unity_context
345
+ context: unity_context,
346
+ auto_kill: @args_kill_unity
343
347
  )
344
348
  unity_export_task.dependencies << last_task.id
345
349
  tasks << unity_export_task
@@ -101,7 +101,7 @@ module Pindo
101
101
  @option_items ||= Pindo::Options::OptionGroup.merge(
102
102
  Pindo::Options::BuildOptions.select(:bundleid, :build_type),
103
103
  Pindo::Options::JPSOptions.select(:conf, :upload, :media, :bind, :send),
104
- Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
104
+ Pindo::Options::UnityOptions.select(:skiplib, :skipyoo, :kill_unity),
105
105
  Pindo::Options::UnityOptions.select_with_defaults(skipmacro: true),
106
106
  Pindo::Options::TaskOptions.select(:multi),
107
107
  Pindo::Options::GitOptions.all
@@ -141,6 +141,7 @@ module Pindo
141
141
  # Unity 参数
142
142
  @args_skip_lib = @options[:skiplib] || false
143
143
  @args_skip_yoo = @options[:skipyoo] || false
144
+ @args_kill_unity = @options[:kill_unity] || false
144
145
 
145
146
  # Task 参数
146
147
  @args_multi_flag = @options[:multi] || false
@@ -282,7 +283,8 @@ module Pindo
282
283
  # 2.1 Unity 更新必备库任务(可选)
283
284
  unless @args_skip_lib
284
285
  unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
285
- project_path: config[:project_path]
286
+ project_path: config[:project_path],
287
+ auto_kill: @args_kill_unity
286
288
  )
287
289
  unity_update_task.dependencies << last_task.id
288
290
  tasks << unity_update_task
@@ -293,7 +295,8 @@ module Pindo
293
295
  unless @args_skip_yoo
294
296
  unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
295
297
  'ios',
296
- project_path: config[:project_path]
298
+ project_path: config[:project_path],
299
+ auto_kill: @args_kill_unity
297
300
  )
298
301
  unity_yoo_task.dependencies << last_task.id
299
302
  tasks << unity_yoo_task
@@ -309,7 +312,8 @@ module Pindo
309
312
  project_path: config[:project_path],
310
313
  export_path: ios_export_path,
311
314
  deploy_mode: @build_type, # 根据 build_type 传递部署模式
312
- context: unity_context
315
+ context: unity_context,
316
+ auto_kill: @args_kill_unity
313
317
  )
314
318
  unity_export_task.dependencies << last_task.id
315
319
  tasks << unity_export_task
@@ -90,7 +90,7 @@ module Pindo
90
90
 
91
91
  $ pindo unity autobuild --multi # 使用并发模式执行
92
92
 
93
- $ pindo unity autobuild --kill-unity # 自动关闭 Unity 进程(不询问确认)
93
+ $ pindo unity autobuild --kill_unity # 自动关闭 Unity 进程(不询问确认)
94
94
  DESC
95
95
 
96
96
  # 命令参数
@@ -38,6 +38,11 @@ module Pindo
38
38
 
39
39
  $ pindo unity packbuild --ver-inc=patch # 打包并增加修订版本号
40
40
 
41
+ $ pindo unity packbuild --force # 非交互:自动确认版本号(CI 用)
42
+
43
+ # 等价于 --force,便于 CI 环境变量注入
44
+ $ PINDO_AUTO_CONFIRM=1 pindo unity packbuild
45
+
41
46
  DESC
42
47
 
43
48
  def self.arguments
@@ -46,7 +51,10 @@ module Pindo
46
51
 
47
52
  # 定义此命令使用的参数项
48
53
  def self.option_items
49
- @option_items ||= Pindo::Options::GitOptions.all
54
+ @option_items ||= Pindo::Options::OptionGroup.merge(
55
+ Pindo::Options::GitOptions.all,
56
+ Pindo::Options::CommonOptions.select(:force)
57
+ )
50
58
  end
51
59
 
52
60
  def self.options
@@ -55,20 +63,24 @@ module Pindo
55
63
 
56
64
  def initialize(argv)
57
65
  @options = initialize_options(argv)
58
-
66
+
59
67
  # Git 参数
60
68
  @args_release_branch = @options[:release_branch] || 'master'
61
69
  @args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc])
62
70
  @args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type])
63
71
  @args_tag_pre = @options[:tag_pre] || 'v'
64
72
 
73
+ # 非交互:--force 或 PINDO_AUTO_CONFIRM 时自动确认版本号,不弹询问
74
+ @force_flag = @options[:force] || false
75
+
65
76
  super
66
77
  end
67
78
 
68
79
  def run
69
80
  package_dir = Dir.pwd
70
81
  # 1. Git 提交任务 (确保工作区干净,或提交预构建更改)
71
- # 默认自动提交(packbuild 场景需要确保代码已提交)
82
+ # packbuild 会自动生成 Release Notes 并需提交,因此始终非交互、默认强制提交(不弹菜单);
83
+ # 选非 commit 会导致生成的 Release Notes 不被提交、tag 与内容不一致,故不开放交互菜单。
72
84
  git_commit_opt = Pindo::Options::GitOptions.parse_git_commit_type(@options[:git_commit]) || Pindo::UncommittedFilesProcessType::COMMIT
73
85
 
74
86
  process_type = Pindo::GitHandler.get_uncommitted_files_process_type(
@@ -117,7 +129,10 @@ module Pindo
117
129
  # Tag 不存在或不在 HEAD,需要用户确认
118
130
  puts ""
119
131
  puts "即将编译 NuGet Package 的版本是 #{q.yellow}"
120
- if agree("确认是否继续? (Y/n)")
132
+ if non_interactive?
133
+ puts "自动确认版本号: #{q.yellow}(--force / PINDO_AUTO_CONFIRM)"
134
+ confirmed_version = q
135
+ elsif agree("确认是否继续? (Y/n)")
121
136
  confirmed_version = q
122
137
  else
123
138
  puts ""
@@ -208,6 +223,13 @@ module Pindo
208
223
  end
209
224
  end
210
225
 
226
+ private
227
+
228
+ # 是否非交互模式:--force 参数或 PINDO_AUTO_CONFIRM 环境变量
229
+ def non_interactive?
230
+ @force_flag || (ENV['PINDO_AUTO_CONFIRM'] && !ENV['PINDO_AUTO_CONFIRM'].empty?)
231
+ end
232
+
211
233
  end
212
234
  end
213
235
  end
@@ -40,6 +40,9 @@ module Pindo
40
40
 
41
41
  # 批量上传(Shell 脚本)
42
42
  $ for file in *.nupkg; do pindo unity packpush --force "$file"; done
43
+
44
+ # 等价于 --force,便于 CI 环境变量注入
45
+ $ PINDO_AUTO_CONFIRM=1 pindo unity packpush
43
46
  DESC
44
47
 
45
48
  def self.arguments
@@ -90,7 +93,8 @@ module Pindo
90
93
  @args_nupkg_file = Pindo::Unity::NugetHelper.find_nupkg_file(package_dir)
91
94
 
92
95
  # 如果没有找到文件,让用户手动输入
93
- if @args_nupkg_file.nil? || !File.exist?(@args_nupkg_file)
96
+ # 非交互(--force / PINDO_AUTO_CONFIRM)时不询问,直接进入后续报错,避免 CI 卡住
97
+ if !non_interactive? && (@args_nupkg_file.nil? || !File.exist?(@args_nupkg_file))
94
98
  @args_nupkg_file = ask('需要上传的文件:') || nil
95
99
  if @args_nupkg_file
96
100
  @args_nupkg_file = @args_nupkg_file.strip.gsub(/\\ /, ' ')
@@ -126,14 +130,12 @@ module Pindo
126
130
  # 检查是否需要跳过确认
127
131
  # 支持两种方式:
128
132
  # 1. --force 参数
129
- # 2. NUGET_UPLOAD_FORCE 环境变量
130
- force_upload = @force_flag || (ENV['NUGET_UPLOAD_FORCE'] && !ENV['NUGET_UPLOAD_FORCE'].empty?)
131
-
132
- if force_upload
133
+ # 2. PINDO_AUTO_CONFIRM 环境变量
134
+ if non_interactive?
133
135
  if @force_flag
134
136
  puts "🚀 检测到 --force 参数,跳过确认直接上传..."
135
137
  else
136
- puts "🚀 检测到 NUGET_UPLOAD_FORCE 环境变量,跳过确认直接上传..."
138
+ puts "🚀 检测到 PINDO_AUTO_CONFIRM 环境变量,跳过确认直接上传..."
137
139
  end
138
140
  else
139
141
  # 确认上传
@@ -165,6 +167,11 @@ module Pindo
165
167
 
166
168
  private
167
169
 
170
+ # 是否非交互模式:--force 参数或 PINDO_AUTO_CONFIRM 环境变量
171
+ def non_interactive?
172
+ @force_flag || (ENV['PINDO_AUTO_CONFIRM'] && !ENV['PINDO_AUTO_CONFIRM'].empty?)
173
+ end
174
+
168
175
  # 获取包信息(用于确认显示)
169
176
  def get_package_info_for_upload(package_dir)
170
177
  # 优先从 .nuspec 文件读取
@@ -94,7 +94,7 @@ module Pindo
94
94
  @option_items ||= Pindo::Options::OptionGroup.merge(
95
95
  Pindo::Options::BuildOptions.select(:bundleid),
96
96
  Pindo::Options::JPSOptions.select(:conf, :upload, :send, :media, :bind),
97
- Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
97
+ Pindo::Options::UnityOptions.select(:skiplib, :skipyoo, :kill_unity),
98
98
  Pindo::Options::UnityOptions.select_with_defaults(skipmacro: true),
99
99
  Pindo::Options::TaskOptions.select(:multi),
100
100
  Pindo::Options::UtilsOptions.select(:run),
@@ -128,6 +128,7 @@ module Pindo
128
128
  # Unity 参数
129
129
  @args_skip_lib = @options[:skiplib] || false
130
130
  @args_skip_yoo = @options[:skipyoo] || false
131
+ @args_kill_unity = @options[:kill_unity] || false
131
132
 
132
133
  # Task 参数
133
134
  @args_multi_flag = @options[:multi] || false
@@ -283,7 +284,8 @@ module Pindo
283
284
  # 3. Unity 更新必备库任务(可选)
284
285
  unless @args_skip_lib
285
286
  unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
286
- project_path: config[:project_path]
287
+ project_path: config[:project_path],
288
+ auto_kill: @args_kill_unity
287
289
  )
288
290
  unity_update_task.dependencies << last_task.id if last_task
289
291
  tasks << unity_update_task
@@ -294,7 +296,8 @@ module Pindo
294
296
  unless @args_skip_yoo
295
297
  unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
296
298
  'web',
297
- project_path: config[:project_path]
299
+ project_path: config[:project_path],
300
+ auto_kill: @args_kill_unity
298
301
  )
299
302
  unity_yoo_task.dependencies << last_task.id if last_task
300
303
  tasks << unity_yoo_task
@@ -313,7 +316,8 @@ module Pindo
313
316
  'web',
314
317
  project_path: config[:project_path],
315
318
  export_path: web_export_path,
316
- context: unity_context
319
+ context: unity_context,
320
+ auto_kill: @args_kill_unity
317
321
  )
318
322
  unity_export_task.dependencies << last_task.id if last_task
319
323
  tasks << unity_export_task
@@ -51,7 +51,7 @@ module Pindo
51
51
  env_name: 'PINDO_KILL_UNITY',
52
52
  default_value: false,
53
53
  optional: true,
54
- example: 'pindo unity autobuild --kill-unity'
54
+ example: 'pindo unity autobuild --kill_unity'
55
55
  )
56
56
  }
57
57
  end
data/lib/pindo/version.rb CHANGED
@@ -6,7 +6,7 @@ require 'time'
6
6
 
7
7
  module Pindo
8
8
 
9
- VERSION = "5.19.1"
9
+ VERSION = "5.19.3"
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.19.1
4
+ version: 5.19.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - wade