kettle-dev 3.1.6 → 3.1.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +34 -1
- data/README.md +1 -1
- data/lib/kettle/dev/lockfile_reset.rb +7 -0
- data/lib/kettle/dev/release_cli.rb +104 -10
- data/lib/kettle/dev/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +10 -10
- metadata.gz.sig +1 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2de1266e7cdbbfd6174c040d8602cf8c3349a423bc301f071ba45da206cba969
|
|
4
|
+
data.tar.gz: f93264ee009dbede2c2ff3273a396916a31d51a70b1ac1cab817532e11f396f5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6a10b65136115e119f2b24eea184c114ea09ae969bed38f71005f39f0fe2f1f0ef1a9869449cf70cf895f075c0c01387918b02bafb914237ca3136d2f4ef868f
|
|
7
|
+
data.tar.gz: 9e14f9945043f4f104c65e34dae30e11301e84caa63f474555d0befe80a35508d604b331da62306808a927eb881e2a41a66562582896b4145cf22e9051db8c65
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,37 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [3.1.7] - 2026-10-04
|
|
34
|
+
|
|
35
|
+
- TAG: [v3.1.7][3.1.7t]
|
|
36
|
+
- COVERAGE: 91.75% -- 6261/6824 lines in 49 files
|
|
37
|
+
- BRANCH COVERAGE: 76.08% -- 2388/3139 branches in 49 files
|
|
38
|
+
- 51.34% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- kettle-release warns when the current branch is not among the release branches its family declares, naming the declaring config and the declared branches, instead of silently treating it as a feature branch destined for trunk.
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- Branch-stack release detection now also reads `release.member_target_branches.<gem>` from the family root config, so a member whose templated local `.kettle-family.yml` is absent (a fresh branch, or a linked worktree) no longer degrades silently into a trunk pull request and a merge into trunk.
|
|
47
|
+
|
|
48
|
+
- Branch-stack release detection no longer uses block-level `rescue` or `Array#filter_map`, which are Ruby 2.6+ and 2.7+ constructs; the gem supports Ruby 2.4. YAML loading is isolated in `safe_load_kettle_family_config` with a method-level rescue, restoring the explicit `begin`/`end` contract the surrounding code relies on.
|
|
49
|
+
|
|
50
|
+
- Preserve the selected Gemfile and lockfile when Bundler restarts during release lockfile reset.
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
|
|
54
|
+
- [kc] kettle-jem/prepare: updated 13 project files:
|
|
55
|
+
- dependencies (13)
|
|
56
|
+
|
|
57
|
+
- [kc] kettle-jem/template: updated 7 project files:
|
|
58
|
+
- code and tests (2)
|
|
59
|
+
- dependencies (1)
|
|
60
|
+
- documentation (1)
|
|
61
|
+
- other (2)
|
|
62
|
+
- workflows (1)
|
|
63
|
+
|
|
33
64
|
## [3.1.6] - 2026-10-02
|
|
34
65
|
|
|
35
66
|
- TAG: [v3.1.6][3.1.6t]
|
|
@@ -3953,7 +3984,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
3953
3984
|
- Selecting will run the selected workflow via `act`
|
|
3954
3985
|
- This may move to its own gem in the future.
|
|
3955
3986
|
|
|
3956
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.
|
|
3987
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.7...HEAD
|
|
3988
|
+
[3.1.7]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.6...v3.1.7
|
|
3989
|
+
[3.1.7t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.7
|
|
3957
3990
|
[3.1.6]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.5...v3.1.6
|
|
3958
3991
|
[3.1.6t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.6
|
|
3959
3992
|
[3.1.5]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.4...v3.1.5
|
data/README.md
CHANGED
|
@@ -1067,7 +1067,7 @@ Thanks for RTFM. ☺️
|
|
|
1067
1067
|
[📌gitmoji]: https://gitmoji.dev
|
|
1068
1068
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
1069
1069
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
1070
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.
|
|
1070
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.824-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
1071
1071
|
[🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
|
|
1072
1072
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
1073
1073
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -201,6 +201,13 @@ module Kettle
|
|
|
201
201
|
"BUNDLE_GEMFILE" => gemfile,
|
|
202
202
|
"BUNDLE_LOCKFILE" => path
|
|
203
203
|
)
|
|
204
|
+
if update_bundler
|
|
205
|
+
# Bundler's `update --bundler` restarts itself using its original
|
|
206
|
+
# environment. Preserve this reset's selected bundle across that
|
|
207
|
+
# restart instead of falling back to the member's default Gemfile.
|
|
208
|
+
env["BUNDLER_ORIG_BUNDLE_GEMFILE"] = gemfile
|
|
209
|
+
env["BUNDLER_ORIG_BUNDLE_LOCKFILE"] = path
|
|
210
|
+
end
|
|
204
211
|
env["KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY"] = "true" if skip_changelog_dependency
|
|
205
212
|
if isolated_gem_home
|
|
206
213
|
env["GEM_HOME"] = isolated_gem_home
|
|
@@ -2928,23 +2928,117 @@ module Kettle
|
|
|
2928
2928
|
return false if branch.to_s.empty?
|
|
2929
2929
|
return false if trunk && branch == trunk
|
|
2930
2930
|
|
|
2931
|
-
local_kettle_family_release_target_branches
|
|
2931
|
+
targets = local_kettle_family_release_target_branches
|
|
2932
|
+
return true if targets.include?(branch)
|
|
2933
|
+
|
|
2934
|
+
warn_undeclared_branch_stack_release(branch, targets)
|
|
2935
|
+
false
|
|
2932
2936
|
end
|
|
2933
2937
|
|
|
2938
|
+
# A member whose family declares a branch stack, releasing a branch that
|
|
2939
|
+
# is not in that list, gets merged into trunk and validated by a trunk
|
|
2940
|
+
# PR. That is almost always a wrong-branch release, not a feature
|
|
2941
|
+
# branch, so say so loudly instead of silently degrading.
|
|
2942
|
+
def warn_undeclared_branch_stack_release(branch, targets)
|
|
2943
|
+
declaring_root = family_declared_branch_stack_roots.first
|
|
2944
|
+
return unless declaring_root
|
|
2945
|
+
return if Array(@warned_undeclared_stack_branches).include?(branch)
|
|
2946
|
+
|
|
2947
|
+
@warned_undeclared_stack_branches = Array(@warned_undeclared_stack_branches) + [branch]
|
|
2948
|
+
warn(
|
|
2949
|
+
"[kettle-release] #{branch} is not a declared release branch for #{family_stack_gem_name.inspect} " \
|
|
2950
|
+
"in #{Kettle::Dev.display_path(declaring_root)}; it will be treated as a feature branch and merged into trunk. " \
|
|
2951
|
+
"Declared release branches: #{targets.join(", ")}"
|
|
2952
|
+
)
|
|
2953
|
+
end
|
|
2954
|
+
|
|
2955
|
+
# The member-local `.kettle-family.yml` is a templated copy that can be
|
|
2956
|
+
# absent on a fresh branch or in a worktree. The family root is the
|
|
2957
|
+
# authoritative declaration (`release.member_target_branches.<gem>`), so
|
|
2958
|
+
# consult it too and union the two. Silently returning [] when a family
|
|
2959
|
+
# config *does* declare a stack for this gem is what produced
|
|
2960
|
+
# PR-against-trunk releases and trunk merges for branch-stack members.
|
|
2934
2961
|
def local_kettle_family_release_target_branches
|
|
2962
|
+
branches = []
|
|
2935
2963
|
local_kettle_family_config_paths.each do |path|
|
|
2936
2964
|
next unless File.file?(path)
|
|
2937
2965
|
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2966
|
+
data = safe_load_kettle_family_config(path)
|
|
2967
|
+
next unless data
|
|
2968
|
+
|
|
2969
|
+
branches.concat(
|
|
2970
|
+
Array(dig_string_keys(data, "release", "target_branches")),
|
|
2971
|
+
Array(dig_string_keys(data, "branches", "release_targets"))
|
|
2972
|
+
)
|
|
2973
|
+
end
|
|
2974
|
+
branches.concat(family_root_release_target_branches)
|
|
2975
|
+
branches.map(&:to_s).reject(&:empty?).uniq
|
|
2976
|
+
end
|
|
2977
|
+
|
|
2978
|
+
def family_root_release_target_branches
|
|
2979
|
+
family_declared_branch_stack_roots.flat_map do |path|
|
|
2980
|
+
data = safe_load_kettle_family_config(path) || {}
|
|
2981
|
+
Array(dig_string_keys(data, "release", "member_target_branches", family_stack_gem_name))
|
|
2982
|
+
end
|
|
2983
|
+
end
|
|
2984
|
+
|
|
2985
|
+
# Family-root configs that declare a non-empty branch stack for this gem.
|
|
2986
|
+
def family_declared_branch_stack_roots
|
|
2987
|
+
gem_name = family_stack_gem_name
|
|
2988
|
+
return [] unless gem_name
|
|
2989
|
+
|
|
2990
|
+
family_root_config_paths.select do |path|
|
|
2991
|
+
data = safe_load_kettle_family_config(path)
|
|
2992
|
+
next false unless data
|
|
2993
|
+
|
|
2994
|
+
declared_stack_branches(data, gem_name).any?
|
|
2995
|
+
end
|
|
2996
|
+
end
|
|
2997
|
+
|
|
2998
|
+
# Only treat a parent directory as the family root when its config
|
|
2999
|
+
# actually lists this checkout as a member root.
|
|
3000
|
+
def family_root_config_paths
|
|
3001
|
+
[File.expand_path("..", @root)].map do |candidate|
|
|
3002
|
+
path = File.join(candidate, ".kettle-family.yml")
|
|
3003
|
+
next nil unless File.file?(path)
|
|
3004
|
+
|
|
3005
|
+
data = safe_load_kettle_family_config(path)
|
|
3006
|
+
next nil unless data
|
|
3007
|
+
|
|
3008
|
+
roots = Array(dig_string_keys(data, "members", "roots")).map(&:to_s)
|
|
3009
|
+
path if roots.include?(File.basename(@root))
|
|
3010
|
+
end.compact
|
|
3011
|
+
end
|
|
3012
|
+
|
|
3013
|
+
def declared_stack_branches(data, gem_name)
|
|
3014
|
+
Array(dig_string_keys(data, "release", "member_target_branches", gem_name)).map(&:to_s).reject(&:empty?)
|
|
3015
|
+
end
|
|
3016
|
+
|
|
3017
|
+
# YAML loading is isolated in a method body so a malformed config is
|
|
3018
|
+
# reported once instead of raising inside a block. Block-level `rescue`
|
|
3019
|
+
# is a Ruby 2.6+ construct and this gem supports Ruby 2.4.
|
|
3020
|
+
def safe_load_kettle_family_config(path)
|
|
3021
|
+
Kettle::Dev.safe_load_yaml_file(path) || {}
|
|
3022
|
+
rescue Psych::Exception => e
|
|
3023
|
+
warn("Ignoring invalid kettle-family config #{Kettle::Dev.display_path(path)}: #{e.message}")
|
|
3024
|
+
nil
|
|
3025
|
+
end
|
|
3026
|
+
|
|
3027
|
+
def family_stack_gem_name
|
|
3028
|
+
@family_stack_gem_name ||= begin
|
|
3029
|
+
name = ENV.fetch("K_CHANGELOG_GEM_NAME", "").to_s.strip
|
|
3030
|
+
name = detect_family_stack_gem_name_from_gemspec if name.empty?
|
|
3031
|
+
name.empty? ? nil : name
|
|
2946
3032
|
end
|
|
2947
|
-
|
|
3033
|
+
end
|
|
3034
|
+
|
|
3035
|
+
def detect_family_stack_gem_name_from_gemspec
|
|
3036
|
+
gemspecs = Dir[File.join(@root, "*.gemspec")]
|
|
3037
|
+
path = gemspecs.min
|
|
3038
|
+
return "" unless path
|
|
3039
|
+
|
|
3040
|
+
match = File.read(path).match(/spec\.name\s*=\s*(["'])([^"']+)\1/)
|
|
3041
|
+
match ? match[2].to_s : ""
|
|
2948
3042
|
end
|
|
2949
3043
|
|
|
2950
3044
|
def local_kettle_family_config_paths
|
data/lib/kettle/dev/version.rb
CHANGED
|
@@ -5,7 +5,7 @@ module Kettle
|
|
|
5
5
|
# Version namespace for this gem.
|
|
6
6
|
module Version
|
|
7
7
|
# Current gem version.
|
|
8
|
-
VERSION = "3.1.
|
|
8
|
+
VERSION = "3.1.7"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kettle-dev
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.1.
|
|
4
|
+
version: 3.1.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -256,7 +256,7 @@ dependencies:
|
|
|
256
256
|
version: '3.2'
|
|
257
257
|
- - ">="
|
|
258
258
|
- !ruby/object:Gem::Version
|
|
259
|
-
version: 3.2.
|
|
259
|
+
version: 3.2.5
|
|
260
260
|
type: :development
|
|
261
261
|
prerelease: false
|
|
262
262
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -266,7 +266,7 @@ dependencies:
|
|
|
266
266
|
version: '3.2'
|
|
267
267
|
- - ">="
|
|
268
268
|
- !ruby/object:Gem::Version
|
|
269
|
-
version: 3.2.
|
|
269
|
+
version: 3.2.5
|
|
270
270
|
- !ruby/object:Gem::Dependency
|
|
271
271
|
name: turbo_tests2
|
|
272
272
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -276,7 +276,7 @@ dependencies:
|
|
|
276
276
|
version: '3.2'
|
|
277
277
|
- - ">="
|
|
278
278
|
- !ruby/object:Gem::Version
|
|
279
|
-
version: 3.2.
|
|
279
|
+
version: 3.2.13
|
|
280
280
|
type: :development
|
|
281
281
|
prerelease: false
|
|
282
282
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -286,7 +286,7 @@ dependencies:
|
|
|
286
286
|
version: '3.2'
|
|
287
287
|
- - ">="
|
|
288
288
|
- !ruby/object:Gem::Version
|
|
289
|
-
version: 3.2.
|
|
289
|
+
version: 3.2.13
|
|
290
290
|
- !ruby/object:Gem::Dependency
|
|
291
291
|
name: stone_checksums
|
|
292
292
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -316,7 +316,7 @@ dependencies:
|
|
|
316
316
|
version: '2.0'
|
|
317
317
|
- - ">="
|
|
318
318
|
- !ruby/object:Gem::Version
|
|
319
|
-
version: 2.0.
|
|
319
|
+
version: 2.0.15
|
|
320
320
|
type: :development
|
|
321
321
|
prerelease: false
|
|
322
322
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -326,7 +326,7 @@ dependencies:
|
|
|
326
326
|
version: '2.0'
|
|
327
327
|
- - ">="
|
|
328
328
|
- !ruby/object:Gem::Version
|
|
329
|
-
version: 2.0.
|
|
329
|
+
version: 2.0.15
|
|
330
330
|
description: "\U0001F372 Kettle::Dev is a meta tool from kettle-dev to streamline
|
|
331
331
|
development and testing. Acts as a shim dependency, pulling in many other dependencies,
|
|
332
332
|
to give you OOTB productivity with a RubyGem, or Ruby app project. Configures a
|
|
@@ -422,10 +422,10 @@ licenses:
|
|
|
422
422
|
- AGPL-3.0-only
|
|
423
423
|
metadata:
|
|
424
424
|
homepage_uri: https://kettle-dev.galtzo.com
|
|
425
|
-
source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.1.
|
|
426
|
-
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.1.
|
|
425
|
+
source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.1.7
|
|
426
|
+
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.1.7/CHANGELOG.md
|
|
427
427
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
|
|
428
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.1.
|
|
428
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.1.7
|
|
429
429
|
funding_uri: https://github.com/sponsors/pboling
|
|
430
430
|
wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
|
|
431
431
|
news_uri: https://www.railsbling.com/tags/kettle-dev
|
metadata.gz.sig
CHANGED
|
@@ -1,5 +1 @@
|
|
|
1
|
-
�
|
|
2
|
-
)��a��]�m��Q7Ji�:VCH����ʔ��iap3\�l���n[�+���;�j���E���מj�-�2�xʙ1��D����f�٠r��F���v�?3DŽ�7aw�[D���j�H�䔆��H(6b3;��
|
|
3
|
-
��+��_ʝ�3iiI�q��@�y.Y�o�����$�㥆7�ws;�$��'��G����e��
|
|
4
|
-
r�f�.�eř�v�Ɲ%�W�GCk��l1n?
|
|
5
|
-
N����G�
|
|
1
|
+
Z5-w�5��:��7�睹��%ڔ�����0cfe�Y1��w�4��Po+̆�K�,������aM΅n�T�K�V�*E\�͕�u�M�C��v�0q�D��{@8��|�����@�W�4�0��qg�G�L��'y��k�a��B��i?���ND�&�n� �lw��M�E�B���ݓ<��#�r��2�������E y�6�����h���M��A(G8 Q��̊�1)=9�|8�Tyo&�3Fc�Y�щ�J�P�D]NA�1bS�Eђ��gJ�n���e5�u�<���d�o uq�&:Ĭ)��]ve�������^����0��S��ۖ�K�J��GZ3��5��}�toe$l��яpb� ������Dz
|