kettle-dev 3.0.9 → 3.0.11

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: b33eb850afdd492ae8078a8670f93e7f452665f60feed6fe56da0ec7501fb688
4
- data.tar.gz: b9e680943a5054b237b7b747ea85af306e428ffc6d39af8b4ec316e1e254aa54
3
+ metadata.gz: 8705b505fb67483562906f08b0f5b0364b1ca70b29dd280aa43b8d8253462c9c
4
+ data.tar.gz: b50dcb48986f104a45ca91ede2e689c93b4fba14488a78ab040e2697f74e3800
5
5
  SHA512:
6
- metadata.gz: 0254c1bd4f95fff49146664b9e2071b213b722c736ef2d196fbefc0480d06900e1494dca631c7f7afaabfeb444b964aca179d2cedfa834225aa11d6c40ac5255
7
- data.tar.gz: 30b20f7364cd3e4e5fee5354cee5cb03daabc8219fe3695ae3585dd98695d1102068392a24477e11ca3423d52660206cc8b86c65b1ef50134f74ece81ecd4c75
6
+ metadata.gz: 8cc4266eb73a959dee5394c22662632d7da905329221b3ac18d12b5b670eab11b96a6228f39a5280423b3fe8b5f1067c5aa8a0982c3306d3bfef85b39d647488
7
+ data.tar.gz: bc3e6ff554d12422ccdd5c8a3381ca8756020556466afcef1b2fa34a5e54aceba1ba8310348d0dd36927fbd391197b05306a118fb128236518f6828c546c6cbb
checksums.yaml.gz.sig CHANGED
@@ -1,2 +1,2 @@
1
- �S���\�������Դ���.oкDaI�Hh���S����w�]�5�<ض�A߹��ot��s¸ŷ���%7cȤ���7�Q>(�r6 N���3;9�YŇ\I���%*2K�� a� ���Ff7#�����
2
- ��%LEma�6�m:��z���֨��>N�.F�������-b'�طc$�;2ط����pVj&��C����-����
1
+ �?u}N1�������(ĭ
2
+ ��3h�
data/CHANGELOG.md CHANGED
@@ -30,6 +30,32 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [3.0.11] - 2026-08-24
34
+
35
+ - TAG: [v3.0.11][3.0.11t]
36
+ - COVERAGE: 91.27% -- 5699/6244 lines in 47 files
37
+ - BRANCH COVERAGE: 76.11% -- 2176/2859 branches in 47 files
38
+ - 51.11% documented
39
+
40
+ ### Fixed
41
+
42
+ - Run release changelog coverage against the registry-backed dependency graph instead of inheriting local templating paths.
43
+
44
+ - Reset dynamic Bundler parent markers before switching a child process to another Gemfile, so release changelog coverage runs the target project specs.
45
+
46
+ ## [3.0.10] - 2026-08-23
47
+
48
+ - TAG: [v3.0.10][3.0.10t]
49
+ - COVERAGE: 91.15% -- 5688/6240 lines in 47 files
50
+ - BRANCH COVERAGE: 76.13% -- 2175/2857 branches in 47 files
51
+ - 50.62% documented
52
+
53
+ ### Fixed
54
+
55
+ - Omit the standalone kettle-changelog dependency from normal release-time Bundler resolution, preventing unpublished downstream gem cycles in monorepo release waves.
56
+
57
+ - Use a dependency-specific environment switch when omitting kettle-changelog from release Bundler resolution.
58
+
33
59
  ## [3.0.9] - 2026-08-23
34
60
 
35
61
  - TAG: [v3.0.9][3.0.9t]
@@ -3516,7 +3542,11 @@ Please file a bug if you notice a violation of semantic versioning.
3516
3542
  - Selecting will run the selected workflow via `act`
3517
3543
  - This may move to its own gem in the future.
3518
3544
 
3519
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.9...HEAD
3545
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.11...HEAD
3546
+ [3.0.11]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.10...v3.0.11
3547
+ [3.0.11t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.11
3548
+ [3.0.10]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.9...v3.0.10
3549
+ [3.0.10t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.10
3520
3550
  [3.0.9]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.8...v3.0.9
3521
3551
  [3.0.9t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.9
3522
3552
  [3.0.8]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.7...v3.0.8
data/README.md CHANGED
@@ -463,6 +463,10 @@ What it does:
463
463
  variables, known local-template toggles, and writes checksums while
464
464
  updating path-sourced and checksum-gap gems back to released registry
465
465
  versions.
466
+ - Release lockfile resets set `KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY=true`.
467
+ This does not skip changelog generation; it keeps the development-only
468
+ `kettle-changelog` gem out of the release bundle so unpublished family
469
+ gems cannot enter Bundler's resolution graph.
466
470
  - During `kettle-release`, release lockfiles are reset before the release
467
471
  prep commit. Before pushing, `kettle-release` validates those committed
468
472
  lockfiles again; if local paths or checksum gaps reappear, it prints the
@@ -1008,7 +1012,7 @@ Thanks for RTFM. ☺️
1008
1012
  [📌gitmoji]: https://gitmoji.dev
1009
1013
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1010
1014
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1011
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.237-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1015
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.244-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1012
1016
  [🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
1013
1017
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1014
1018
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -12,6 +12,14 @@ module Kettle
12
12
  BUNDLER_VERSION
13
13
  ].freeze
14
14
 
15
+ # Bundler uses these markers to restore the environment of the parent
16
+ # bundle. They are not inert when a child explicitly selects another
17
+ # Gemfile: Bundler can use BUNDLER_ORIG_BUNDLE_GEMFILE to reselect the
18
+ # parent bundle. Clear the dynamic keys along with RESET_ENV_KEYS.
19
+ RESET_ENV_PREFIXES = %w[
20
+ BUNDLER_ORIG_
21
+ ].freeze
22
+
15
23
  INERT_ENV_KEYS = %w[
16
24
  BUNDLE_DEBUG
17
25
  BUNDLE_QUIET
@@ -22,16 +30,18 @@ module Kettle
22
30
  BUNDLER_DEBUG
23
31
  ].freeze
24
32
 
25
- INERT_ENV_PREFIXES = %w[
26
- BUNDLER_ORIG_
27
- ].freeze
28
-
29
33
  module_function
30
34
 
31
35
  def unbundled_env
32
- RESET_ENV_KEYS.each_with_object({}) do |key, env|
36
+ env = RESET_ENV_KEYS.each_with_object({}) do |key, result|
37
+ result[key] = nil
38
+ end
39
+ ENV.each_key do |key|
40
+ next unless RESET_ENV_PREFIXES.any? { |prefix| key.start_with?(prefix) }
41
+
33
42
  env[key] = nil
34
43
  end
44
+ env
35
45
  end
36
46
 
37
47
  def warn_unexpected_env!(stream: $stderr)
@@ -45,6 +55,7 @@ module Kettle
45
55
  )
46
56
  end
47
57
 
58
+ # rubocop:disable ThreadSafety/ClassInstanceVariable -- warning state is intentionally shared by module functions.
48
59
  def reset_warning_cache!
49
60
  @warned_unexpected_env_keys = {}
50
61
  end
@@ -56,7 +67,7 @@ module Kettle
56
67
  def expected_env_key?(key)
57
68
  RESET_ENV_KEYS.include?(key) ||
58
69
  INERT_ENV_KEYS.include?(key) ||
59
- INERT_ENV_PREFIXES.any? { |prefix| key.start_with?(prefix) }
70
+ RESET_ENV_PREFIXES.any? { |prefix| key.start_with?(prefix) }
60
71
  end
61
72
 
62
73
  def warned_unexpected_env?(keys)
@@ -67,6 +78,7 @@ module Kettle
67
78
  @warned_unexpected_env_keys[signature] = true
68
79
  false
69
80
  end
81
+ # rubocop:enable ThreadSafety/ClassInstanceVariable
70
82
  end
71
83
  end
72
84
  end
@@ -34,18 +34,31 @@ module Kettle
34
34
  @release_platforms = {}
35
35
  end
36
36
 
37
- def reset(target)
37
+ def reset(target, skip_changelog_dependency: false)
38
38
  BundlerEnvGuard.warn_unexpected_env!
39
39
  paths = lockfile_paths_for(target)
40
40
  force_full_update = release_lockfiles_target?(target)
41
+ skip_changelog_dependency ||= force_full_update
41
42
  platforms = release_platforms_for(paths) if force_full_update
42
43
  uninstall_unreleased_local_gems(paths) if force_full_update
43
44
  paths.each do |path|
44
- reset_lockfile!(path, full_update: force_full_update, platforms: platforms&.fetch(path)) if force_full_update || normalization_needed?(path)
45
+ if force_full_update || normalization_needed?(path)
46
+ reset_lockfile!(
47
+ path,
48
+ full_update: force_full_update,
49
+ platforms: platforms&.fetch(path),
50
+ skip_changelog_dependency: skip_changelog_dependency
51
+ )
52
+ end
45
53
  end
46
54
  if force_full_update && uninstall_unreleased_local_gems(paths)
47
55
  paths.each do |path|
48
- reset_lockfile!(path, full_update: true, platforms: platforms.fetch(path))
56
+ reset_lockfile!(
57
+ path,
58
+ full_update: true,
59
+ platforms: platforms.fetch(path),
60
+ skip_changelog_dependency: skip_changelog_dependency
61
+ )
49
62
  end
50
63
  end
51
64
  diagnostics = paths.flat_map { |path| diagnostics(path) }
@@ -54,7 +67,7 @@ module Kettle
54
67
  paths
55
68
  end
56
69
 
57
- def reset_lockfile!(path, full_update: false, platforms: nil)
70
+ def reset_lockfile!(path, full_update: false, platforms: nil, skip_changelog_dependency: false)
58
71
  gemfile = gemfile_for_lockfile(path)
59
72
  unless gemfile && File.file?(gemfile)
60
73
  warn("Cannot reset #{display_path(path)} because its Gemfile was not found.")
@@ -67,6 +80,7 @@ module Kettle
67
80
  gemfile: gemfile,
68
81
  full_update: full_update,
69
82
  platforms: platforms,
83
+ skip_changelog_dependency: skip_changelog_dependency,
70
84
  isolated_gem_home: gem_home
71
85
  )
72
86
  if full_update || has_local_path_remote?(path)
@@ -77,7 +91,7 @@ module Kettle
77
91
  end
78
92
  end
79
93
 
80
- def reset_command(path:, gemfile:, full_update: false, platforms: nil, isolated_gem_home: nil)
94
+ def reset_command(path:, gemfile:, full_update: false, platforms: nil, skip_changelog_dependency: false, isolated_gem_home: nil)
81
95
  update_gems = (full_update || has_local_path_remote?(path)) ? [] : reset_update_gems(path)
82
96
  platforms ||= reset_platforms(path)
83
97
  removed_platforms = full_update ? [] : lockfile_platforms(path) - platforms
@@ -85,6 +99,7 @@ module Kettle
85
99
  "BUNDLE_GEMFILE" => gemfile,
86
100
  "BUNDLE_LOCKFILE" => path
87
101
  )
102
+ env["KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY"] = "true" if skip_changelog_dependency
88
103
  if isolated_gem_home
89
104
  env["GEM_HOME"] = isolated_gem_home
90
105
  env["GEM_PATH"] = isolated_gem_home
@@ -689,7 +689,10 @@ module Kettle
689
689
  emit_release_lockfile_event(action: "reset", status: "started", stage: stage, attempt: attempt, attempts: attempts)
690
690
  puts "Resetting release lockfiles with local path dependencies disabled #{stage} (attempt #{attempt}/#{attempts})..."
691
691
  begin
692
- lockfile_reset.reset(Kettle::Dev::LockfileReset::RELEASE_LOCKFILES_TARGET)
692
+ lockfile_reset.reset(
693
+ Kettle::Dev::LockfileReset::RELEASE_LOCKFILES_TARGET,
694
+ skip_changelog_dependency: true
695
+ )
693
696
  emit_release_lockfile_event(action: "reset", status: "ok", stage: stage, attempt: attempt, attempts: attempts)
694
697
  break
695
698
  rescue Kettle::Dev::Error => error
@@ -775,7 +778,7 @@ module Kettle
775
778
  end
776
779
 
777
780
  def normalize_release_lockfile!(path)
778
- lockfile_reset.reset_lockfile!(path)
781
+ lockfile_reset.reset_lockfile!(path, skip_changelog_dependency: true)
779
782
  end
780
783
 
781
784
  def release_gemfile_for_lockfile(path)
@@ -783,7 +786,7 @@ module Kettle
783
786
  end
784
787
 
785
788
  def release_lockfile_normalization_env
786
- lockfile_reset.normalization_env
789
+ lockfile_reset.normalization_env.merge("KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY" => "true")
787
790
  end
788
791
 
789
792
  def release_lockfile_diagnostics(path)
@@ -899,7 +902,10 @@ module Kettle
899
902
  escaped_gemfile = Shellwords.escape(gemfile)
900
903
  command = +"env -u BUNDLE_GEMFILE -u BUNDLE_LOCKFILE"
901
904
  if (local_root = release_changelog_local_root)
902
- command << " KETTLE_DEV_DEV=false KETTLE_CHANGELOG_DEV_ROOT=#{Shellwords.escape(local_root)}"
905
+ # Changelog coverage runs before the release lockfile reset. Keep it
906
+ # on the registry-backed release graph instead of reintroducing local
907
+ # sibling paths through the inherited templating switch.
908
+ command << " KETTLE_DEV_DEV=false K_JEM_TEMPLATING=false KETTLE_CHANGELOG_DEV_ROOT=#{Shellwords.escape(local_root)}"
903
909
  end
904
910
  command << " BUNDLE_GEMFILE=#{escaped_gemfile} bundle exec kettle-changelog"
905
911
  command
@@ -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.0.9"
8
+ VERSION = "3.0.11"
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.0.9
4
+ version: 3.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -400,10 +400,10 @@ licenses:
400
400
  - AGPL-3.0-only
401
401
  metadata:
402
402
  homepage_uri: https://kettle-dev.galtzo.com
403
- source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.0.9
404
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.9/CHANGELOG.md
403
+ source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.0.11
404
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.11/CHANGELOG.md
405
405
  bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
406
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.0.9
406
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.0.11
407
407
  funding_uri: https://github.com/sponsors/pboling
408
408
  wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
409
409
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file