kettle-family 1.2.45 → 1.2.46

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: 0142ed9035a396a18beb14aeaee5371a3d64f42824d88a548cdddeebc74dc16b
4
- data.tar.gz: 5f798e5f0ff01e273045396527200782fc54460aa3c5055bc797c144237c10c1
3
+ metadata.gz: 927dd8ea2185b00cfff68f01eb09a93d0a1b7f48fcb2fc3c2a9c52b0c76898aa
4
+ data.tar.gz: a2d7f81ebc0e07a395bfefbf72685c6dff5951e5440c7f4f6e53904a16dace28
5
5
  SHA512:
6
- metadata.gz: 2bbf9ecb021fc52055dd92992d0325972597690c1f46101d77e6d5cf1fb150b1ebb6519a76fc9aeeef72b891b7b05fad4d52698a49f85bc4933ad20a10683969
7
- data.tar.gz: 675ddf3fb33b593341fcf5a53c7a0aff9a92d6df0449135f4541ea7a6ec39a423fe7ba945a8fd4770638aa9319bd5714c5f9d51d8d7b24f333d5f2501d9249a8
6
+ metadata.gz: ff77a0078c229e82e5d04952006502e188f26df36621079af986af2807dd2117988f7dbd0e8d5159f67669198fd275860e757ac3f3f0b4b558a7697a619e6e03
7
+ data.tar.gz: 75eca26e357b3570335ac16bd3668c01b3ab8482f6813431ad22e550b47bc5961432bcc1e88f7f83b57411c75fa55983e25ca1c77d0b1d4f8c754c52bf3f1b31
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,17 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.2.46] - 2026-08-10
34
+
35
+ - TAG: [v1.2.46][1.2.46t]
36
+ - COVERAGE: 93.63% -- 5083/5429 lines in 32 files
37
+ - BRANCH COVERAGE: 76.32% -- 2040/2673 branches in 32 files
38
+ - 29.72% documented
39
+
40
+ ### Fixed
41
+
42
+ - Delegate configured release secrets to kettle-release so its native OTP retry can complete all remaining release steps.
43
+
33
44
  ## [1.2.45] - 2026-08-09
34
45
 
35
46
  - TAG: [v1.2.45][1.2.45t]
@@ -1992,7 +2003,9 @@ Please file a bug if you notice a violation of semantic versioning.
1992
2003
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
1993
2004
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
1994
2005
 
1995
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.45...HEAD
2006
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.46...HEAD
2007
+ [1.2.46]: https://github.com/kettle-dev/kettle-family/compare/v1.2.45...v1.2.46
2008
+ [1.2.46t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.46
1996
2009
  [1.2.45]: https://github.com/kettle-dev/kettle-family/compare/v1.2.44...v1.2.45
1997
2010
  [1.2.45t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.45
1998
2011
  [1.2.44]: https://github.com/kettle-dev/kettle-family/compare/v1.2.43...v1.2.44
data/README.md CHANGED
@@ -850,7 +850,7 @@ Thanks for RTFM. ☺️
850
850
  [📌gitmoji]: https://gitmoji.dev
851
851
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
852
852
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
853
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-5.459-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
853
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-5.429-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
854
854
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
855
855
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
856
856
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -5,7 +5,7 @@ module Kettle
5
5
  # Version namespace for this gem.
6
6
  module Version
7
7
  # Current gem version.
8
- VERSION = "1.2.45"
8
+ VERSION = "1.2.46"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
@@ -17,7 +17,6 @@ module Kettle
17
17
  module Family
18
18
  class Workflow
19
19
  PreflightProgressMember = Struct.new(:name)
20
- RUBYGEMS_INVALID_OTP = /Your OTP code is incorrect\. Please check it and retry\./
21
20
 
22
21
  DEFAULT_COMMANDS = {
23
22
  "template" => "bundle exec kettle-jem install",
@@ -1128,7 +1127,6 @@ module Kettle
1128
1127
  wave_jobs = release_jobs(wave)
1129
1128
  mutex = Mutex.new
1130
1129
  stop = false
1131
- release_otp_coordinator&.queue_total = wave_jobs
1132
1130
  Array.new(wave_jobs) do
1133
1131
  Thread.new do # rubocop:disable ThreadSafety/NewThread -- family release intentionally runs independent members concurrently.
1134
1132
  runner = release_command_runner
@@ -1227,7 +1225,6 @@ module Kettle
1227
1225
  log_path: release_command_log_path(member, release_phase),
1228
1226
  passthrough_output: release_command_passthrough_output?
1229
1227
  )
1230
- release_result = retry_release_gem_push_after_invalid_otp(member: member, failed_result: release_result, runner: runner)
1231
1228
  memo << release_result
1232
1229
  emit_member_result_progress(member, memo.last, progress: progress)
1233
1230
  return memo unless memo.last.ok?
@@ -1267,41 +1264,13 @@ module Kettle
1267
1264
  execute: execute,
1268
1265
  accept: release_command_uses_kettle_release_yes? ? false : accept,
1269
1266
  gem_signing_password: release_command_delegates_secrets_to_kettle_release? ? nil : @gem_signing_password,
1270
- otp_coordinator: release_command_delegates_secrets_to_kettle_release? ? nil : release_otp_coordinator
1267
+ # RubyGems MFA belongs to the child release command. Keeping an OTP
1268
+ # coordinator here can make a family-level gem retry look successful
1269
+ # while skipping the child's checksums and GitHub release steps.
1270
+ otp_coordinator: nil
1271
1271
  )
1272
1272
  end
1273
1273
 
1274
- def release_otp_coordinator
1275
- return nil unless execute && release_command_interactive?
1276
-
1277
- @release_otp_coordinator ||= CommandRunner::OtpCoordinator.new(
1278
- secrets_provider: @secrets_provider,
1279
- event_handler: method(:handle_release_otp_event)
1280
- )
1281
- end
1282
-
1283
- def handle_release_otp_event(member_name, event)
1284
- progress = @release_progress
1285
- return unless progress
1286
-
1287
- member = release_progress_member_for(member_name)
1288
- if progress_io && suppress_release_secret_provider_event?(event, progress: progress)
1289
- return
1290
- end
1291
- if progress_io
1292
- if verbose || debug
1293
- emit_release_event_progress(member, event)
1294
- elsif progress.tty?
1295
- emit_release_event_status(member, event, progress: progress)
1296
- end
1297
- end
1298
- end
1299
-
1300
- def release_progress_member_for(member_name)
1301
- @release_progress_members_by_name ||= members.to_h { |member| [member.name, member] }
1302
- @release_progress_members_by_name.fetch(member_name.to_s) { PreflightProgressMember.new(member_name.to_s) }
1303
- end
1304
-
1305
1274
  def parallel_release_members?(release_members)
1306
1275
  execute &&
1307
1276
  release_jobs(release_members) > 1 &&
@@ -1927,38 +1896,6 @@ module Kettle
1927
1896
  verbose || debug
1928
1897
  end
1929
1898
 
1930
- # kettle-family normally owns the RubyGems OTP prompt so one code can be
1931
- # coordinated across concurrent member releases. If RubyGems rejects
1932
- # that code, the member's release command has already tagged and pushed
1933
- # the repository before attempting the gem upload. Retry only the
1934
- # existing artifact; rerunning the full release command would repeat git
1935
- # tagging and CI work and can fail for an unrelated reason.
1936
- def retry_release_gem_push_after_invalid_otp(member:, failed_result:, runner:)
1937
- return failed_result unless release_phase == "release_publish"
1938
- return failed_result if failed_result.ok?
1939
- return failed_result unless [failed_result.stdout, failed_result.stderr].any? { |output| output.to_s.match?(RUBYGEMS_INVALID_OTP) }
1940
-
1941
- gem_path = release_gem_path(member)
1942
- return failed_result unless gem_path
1943
-
1944
- puts "RubyGems rejected the first OTP; retrying the existing gem artifact with a fresh OTP..."
1945
- runner.call(
1946
- member: member,
1947
- phase: release_phase,
1948
- command: ["gem", "push", gem_path],
1949
- env: release_env_for_member(member),
1950
- interactive: true,
1951
- stdout_line_handler: release_event_line_handler(member, progress: @release_progress),
1952
- log_path: release_command_log_path(member, "release_publish_otp_retry"),
1953
- passthrough_output: release_command_passthrough_output?
1954
- )
1955
- end
1956
-
1957
- def release_gem_path(member)
1958
- suffix = "-#{member.version}.gem"
1959
- Dir.glob(File.join(member.root, "pkg", "*.gem")).find { |path| File.basename(path).end_with?(suffix) }
1960
- end
1961
-
1962
1899
  def kettle_release_command?(command)
1963
1900
  case command
1964
1901
  when Array
@@ -1990,6 +1927,9 @@ module Kettle
1990
1927
  args << "--skip-bundle-audit" if skip_bundle_audit
1991
1928
  args << "--skip-remotes=#{skip_remotes}" if skip_remotes && !skip_remotes.to_s.empty?
1992
1929
  args << "--required-remotes=#{required_remotes}" if required_remotes && !required_remotes.to_s.empty?
1930
+ if release_command_delegates_secrets_to_kettle_release? && !command_includes_arg?(command, "--secrets-provider")
1931
+ args << "--secrets-provider=1password"
1932
+ end
1993
1933
  args << "--yes" if release_command_uses_kettle_release_yes? && !command_includes_arg?(command, "--yes")
1994
1934
  args << "--events" unless command_includes_arg?(command, "--events")
1995
1935
  return command if args.empty?
@@ -2233,7 +2173,6 @@ module Kettle
2233
2173
  def release_command_delegates_secrets_to_kettle_release?
2234
2174
  kettle_release_supports_direct_secrets? &&
2235
2175
  kettle_release_command?(raw_release_command) &&
2236
- command_includes_arg?(raw_release_command, "--secrets-provider") &&
2237
2176
  release_secrets_provider_one_password?
2238
2177
  end
2239
2178
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-family
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.45
4
+ version: 1.2.46
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -360,10 +360,10 @@ licenses:
360
360
  - AGPL-3.0-only
361
361
  metadata:
362
362
  homepage_uri: https://kettle-family.galtzo.com
363
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.45
364
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.45/CHANGELOG.md
363
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.46
364
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.46/CHANGELOG.md
365
365
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
366
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.45
366
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.46
367
367
  funding_uri: https://github.com/sponsors/pboling
368
368
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
369
369
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file