kettle-family 1.2.44 → 1.2.45
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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +18 -1
- data/README.md +1 -1
- data/lib/kettle/family/release_state_check.rb +19 -2
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +36 -1
- data.tar.gz.sig +0 -0
- metadata +10 -10
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0142ed9035a396a18beb14aeaee5371a3d64f42824d88a548cdddeebc74dc16b
|
|
4
|
+
data.tar.gz: 5f798e5f0ff01e273045396527200782fc54460aa3c5055bc797c144237c10c1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2bbf9ecb021fc52055dd92992d0325972597690c1f46101d77e6d5cf1fb150b1ebb6519a76fc9aeeef72b891b7b05fad4d52698a49f85bc4933ad20a10683969
|
|
7
|
+
data.tar.gz: 675ddf3fb33b593341fcf5a53c7a0aff9a92d6df0449135f4541ea7a6ec39a423fe7ba945a8fd4770638aa9319bd5714c5f9d51d8d7b24f333d5f2501d9249a8
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,21 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [1.2.45] - 2026-08-09
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.2.45][1.2.45t]
|
|
36
|
+
- COVERAGE: 93.59% -- 5109/5459 lines in 32 files
|
|
37
|
+
- BRANCH COVERAGE: 76.10% -- 2051/2695 branches in 32 files
|
|
38
|
+
- 29.64% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Run family release-state changelog probes outside the parent Bundler environment so --only pend can inspect all members.
|
|
43
|
+
|
|
44
|
+
- Retry the existing gem artifact with a fresh OTP when RubyGems rejects the first MFA code during a family release.
|
|
45
|
+
|
|
46
|
+
- Allow kettle-family to resolve against kettle-dev 3.x after the kettle-dev 3.0.0 executable split.
|
|
47
|
+
|
|
33
48
|
## [1.2.44] - 2026-08-09
|
|
34
49
|
|
|
35
50
|
- TAG: [v1.2.44][1.2.44t]
|
|
@@ -1977,7 +1992,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
1977
1992
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
1978
1993
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
1979
1994
|
|
|
1980
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.
|
|
1995
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.45...HEAD
|
|
1996
|
+
[1.2.45]: https://github.com/kettle-dev/kettle-family/compare/v1.2.44...v1.2.45
|
|
1997
|
+
[1.2.45t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.45
|
|
1981
1998
|
[1.2.44]: https://github.com/kettle-dev/kettle-family/compare/v1.2.43...v1.2.44
|
|
1982
1999
|
[1.2.44t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.44
|
|
1983
2000
|
[1.2.43]: https://github.com/kettle-dev/kettle-family/compare/v1.2.42...v1.2.43
|
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.
|
|
853
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-5.459-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
|
|
@@ -75,7 +75,11 @@ module Kettle
|
|
|
75
75
|
command = release_state_command
|
|
76
76
|
emit_event(event_handler, member: member, branch: branch, action: "member_start", status: "running", command: command)
|
|
77
77
|
emit_event(event_handler, member: member, branch: branch, action: "changelog_command", status: "running", command: command)
|
|
78
|
-
stdout, stderr, status =
|
|
78
|
+
stdout, stderr, status = capture_release_state(
|
|
79
|
+
env: release_state_env(member),
|
|
80
|
+
command: command,
|
|
81
|
+
workdir: release_state_workdir(member)
|
|
82
|
+
)
|
|
79
83
|
elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - started
|
|
80
84
|
success = status.success?
|
|
81
85
|
emit_event(event_handler, member: member, branch: branch, action: "changelog_command", status: success ? "ok" : "failed", elapsed_seconds: elapsed, status_code: status.exitstatus)
|
|
@@ -106,6 +110,15 @@ module Kettle
|
|
|
106
110
|
[RbConfig.ruby, "-S", "kettle-changelog", "--release-state", "--json"]
|
|
107
111
|
end
|
|
108
112
|
|
|
113
|
+
def capture_release_state(env:, command:, workdir:)
|
|
114
|
+
capture = -> { Open3.capture3(env, *command, chdir: workdir) }
|
|
115
|
+
# kettle-family can run as a standalone executable, but an active
|
|
116
|
+
# Bundler context must not leak into the standalone changelog probe.
|
|
117
|
+
return capture.call unless defined?(::Bundler)
|
|
118
|
+
|
|
119
|
+
::Bundler.with_unbundled_env(&capture)
|
|
120
|
+
end
|
|
121
|
+
|
|
109
122
|
def check_shared_changelog_member_or_local(member, branch: nil, event_handler: nil)
|
|
110
123
|
return check_member(member, branch: branch, event_handler: event_handler) if member_local_changelog?(member)
|
|
111
124
|
|
|
@@ -117,7 +130,11 @@ module Kettle
|
|
|
117
130
|
command = release_state_command
|
|
118
131
|
emit_event(event_handler, member: member, branch: branch, action: "member_start", status: "running", command: command)
|
|
119
132
|
emit_event(event_handler, member: member, branch: branch, action: "changelog_command", status: "running", command: command)
|
|
120
|
-
stdout, stderr, status =
|
|
133
|
+
stdout, stderr, status = capture_release_state(
|
|
134
|
+
env: shared_changelog_env(member),
|
|
135
|
+
command: command,
|
|
136
|
+
workdir: config.root
|
|
137
|
+
)
|
|
121
138
|
elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - started
|
|
122
139
|
success = status.success?
|
|
123
140
|
emit_event(event_handler, member: member, branch: branch, action: "changelog_command", status: success ? "ok" : "failed", elapsed_seconds: elapsed, status_code: status.exitstatus)
|
|
@@ -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.
|
|
8
|
+
VERSION = "1.2.45"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
@@ -17,6 +17,7 @@ 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\./
|
|
20
21
|
|
|
21
22
|
DEFAULT_COMMANDS = {
|
|
22
23
|
"template" => "bundle exec kettle-jem install",
|
|
@@ -1216,7 +1217,7 @@ module Kettle
|
|
|
1216
1217
|
memo.last(2).each { |result| emit_member_result_progress(member, result, progress: progress) }
|
|
1217
1218
|
return memo unless memo.last(2).all?(&:ok?)
|
|
1218
1219
|
|
|
1219
|
-
|
|
1220
|
+
release_result = runner.call(
|
|
1220
1221
|
member: member,
|
|
1221
1222
|
phase: release_phase,
|
|
1222
1223
|
command: release_command,
|
|
@@ -1226,6 +1227,8 @@ module Kettle
|
|
|
1226
1227
|
log_path: release_command_log_path(member, release_phase),
|
|
1227
1228
|
passthrough_output: release_command_passthrough_output?
|
|
1228
1229
|
)
|
|
1230
|
+
release_result = retry_release_gem_push_after_invalid_otp(member: member, failed_result: release_result, runner: runner)
|
|
1231
|
+
memo << release_result
|
|
1229
1232
|
emit_member_result_progress(member, memo.last, progress: progress)
|
|
1230
1233
|
return memo unless memo.last.ok?
|
|
1231
1234
|
|
|
@@ -1924,6 +1927,38 @@ module Kettle
|
|
|
1924
1927
|
verbose || debug
|
|
1925
1928
|
end
|
|
1926
1929
|
|
|
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
|
+
|
|
1927
1962
|
def kettle_release_command?(command)
|
|
1928
1963
|
case command
|
|
1929
1964
|
when Array
|
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.
|
|
4
|
+
version: 1.2.45
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -69,22 +69,22 @@ dependencies:
|
|
|
69
69
|
name: kettle-dev
|
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
|
71
71
|
requirements:
|
|
72
|
-
- - "~>"
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: '2.3'
|
|
75
72
|
- - ">="
|
|
76
73
|
- !ruby/object:Gem::Version
|
|
77
74
|
version: 2.5.26
|
|
75
|
+
- - "<"
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: 4.0.0
|
|
78
78
|
type: :runtime
|
|
79
79
|
prerelease: false
|
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
|
81
81
|
requirements:
|
|
82
|
-
- - "~>"
|
|
83
|
-
- !ruby/object:Gem::Version
|
|
84
|
-
version: '2.3'
|
|
85
82
|
- - ">="
|
|
86
83
|
- !ruby/object:Gem::Version
|
|
87
84
|
version: 2.5.26
|
|
85
|
+
- - "<"
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: 4.0.0
|
|
88
88
|
- !ruby/object:Gem::Dependency
|
|
89
89
|
name: kettle-test
|
|
90
90
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -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.
|
|
364
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.
|
|
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
|
|
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.
|
|
366
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.45
|
|
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
|