kettle-jem 7.1.24 → 7.1.26
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 +2 -3
- data/CHANGELOG.md +54 -1
- data/README.md +9 -1
- data/lib/kettle/jem/maintenance_changelog.rb +15 -17
- data/lib/kettle/jem/tasks/install_task.rb +1 -1
- data/lib/kettle/jem/templates/.structuredmerge/kettle-jem.yml.example +9 -1
- data/lib/kettle/jem/templates/gem.gemspec.example +1 -1
- data/lib/kettle/jem/templates/gemfiles/modular/coverage_local.gemfile.example +20 -2
- data/lib/kettle/jem/templates/gemfiles/modular/style.gemfile.example +1 -1
- data/lib/kettle/jem/templates/gemfiles/modular/templating_local.gemfile.example +20 -2
- data/lib/kettle/jem/templates/shim/gem.gemspec.example +1 -1
- data/lib/kettle/jem/version.rb +1 -1
- data/lib/kettle/jem.rb +41 -5
- data.tar.gz.sig +0 -0
- metadata +34 -34
- 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: 95ee5953f40a8942373ca016b41f67e812fcf90b0e13f4e5786609f3d9a38b86
|
|
4
|
+
data.tar.gz: c1afa212c3c6aa6995b25b78955bd878af0abe8aa3e77b5bbd7c4ae75598516c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 41d248dc8ef3148fed43dfb300bc5e6061ba5794dec1d423f12bf6f0522ec4218a1cfdde1130a14972dd0ba781d30d49eca30974f2dbfdda5529ffcf9a24f6b0
|
|
7
|
+
data.tar.gz: b4d92519f1a06e75010493a1fa107aa939220595e0dcd46ce7e0a3d573e20141422fa97b241d5811bd2cb40895c34b94acec14008160d6215ded967b2e8493cb
|
checksums.yaml.gz.sig
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
?:(-#���7H�I�bw��NF���S�E�ŬP���H��V
|
|
1
|
+
��)�<VŇ��䲈ŭ��� ���T�Y���9�?��ѢfG_]�T
|
|
2
|
+
7b�з VU�����V�0��C'ם|!7�P��|��:�5�'[3m\-%s�"c�N.>
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,55 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [7.1.26] - 2026-09-10
|
|
34
|
+
|
|
35
|
+
- TAG: [v7.1.26][7.1.26t]
|
|
36
|
+
- COVERAGE: 93.67% -- 11268/12030 lines in 16 files
|
|
37
|
+
- BRANCH COVERAGE: 77.10% -- 4794/6218 branches in 16 files
|
|
38
|
+
- 18.11% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- Curated Bundler binstub generation now includes `rubocop-gradual`.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- [kc] kettle-jem-deps-floor: Update kettle-jem template dependency floors:
|
|
47
|
+
- kettle-dev (>= 3.0.33 -> >= 3.0.34)
|
|
48
|
+
- kettle-family (>= 1.2.97 -> >= 1.2.100)
|
|
49
|
+
|
|
50
|
+
- [kc] kettle-jem/prepare: updated 10 project files:
|
|
51
|
+
- dependencies (10)
|
|
52
|
+
|
|
53
|
+
- [kc] kettle-jem/template: updated 5 project files:
|
|
54
|
+
- code and tests (1)
|
|
55
|
+
- dependencies (3)
|
|
56
|
+
- other (1)
|
|
57
|
+
|
|
58
|
+
### Fixed
|
|
59
|
+
|
|
60
|
+
- [kc] kettle-jem/template-file-tracking: Track distinct changed template files across repeated Unreleased template runs.
|
|
61
|
+
|
|
62
|
+
- Keep branch-stack release CI active by managing the r*_*-*-v* GitHub Actions push trigger.
|
|
63
|
+
|
|
64
|
+
- Allow KETTLE_DEV_DEV to override a directly declared kettle-dev development dependency in local coverage Gemfiles.
|
|
65
|
+
|
|
66
|
+
- Predeclare the intentional version_gem runtime-heads dependency overlap in generated Kettle Jem configuration.
|
|
67
|
+
|
|
68
|
+
- Preserve declared kettle-dev requirements when local coverage and templating Gemfiles replace it with a workspace path.
|
|
69
|
+
|
|
70
|
+
## [7.1.25] - 2026-09-08
|
|
71
|
+
|
|
72
|
+
- TAG: [v7.1.25][7.1.25t]
|
|
73
|
+
- COVERAGE: 93.66% -- 11248/12010 lines in 16 files
|
|
74
|
+
- BRANCH COVERAGE: 77.04% -- 4786/6212 branches in 16 files
|
|
75
|
+
- 18.14% documented
|
|
76
|
+
|
|
77
|
+
### Changed
|
|
78
|
+
|
|
79
|
+
- [kc] kettle-jem-deps-floor: Update kettle-jem template dependency floors:
|
|
80
|
+
- kettle-family (>= 1.2.96 -> >= 1.2.97)
|
|
81
|
+
|
|
33
82
|
## [7.1.24] - 2026-09-08
|
|
34
83
|
|
|
35
84
|
- TAG: [v7.1.24][7.1.24t]
|
|
@@ -1970,7 +2019,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
1970
2019
|
- Released kettle-jem as part of the initial StructuredMerge Ruby 7.0.0 gem set.
|
|
1971
2020
|
- Included packaged templates and parser-backed merge support for Ruby gem templating.
|
|
1972
2021
|
|
|
1973
|
-
[Unreleased]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.
|
|
2022
|
+
[Unreleased]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.26...HEAD
|
|
2023
|
+
[7.1.26]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.25...v7.1.26
|
|
2024
|
+
[7.1.26t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.1.26
|
|
2025
|
+
[7.1.25]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.24...v7.1.25
|
|
2026
|
+
[7.1.25t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.1.25
|
|
1974
2027
|
[7.1.24]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.23...v7.1.24
|
|
1975
2028
|
[7.1.24t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.1.24
|
|
1976
2029
|
[7.1.23]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.22...v7.1.23
|
data/README.md
CHANGED
|
@@ -293,6 +293,14 @@ workflows:
|
|
|
293
293
|
truffleruby-22.3: kettle-test --tag ~type:acceptance --example-status-log .rspec_status
|
|
294
294
|
```
|
|
295
295
|
|
|
296
|
+
### Branch-Stack CI
|
|
297
|
+
|
|
298
|
+
Generated GitHub Actions workflows run on the default branch, `*-stable`, and
|
|
299
|
+
branch-stack release names matching `r*_*-*-v*` (for example,
|
|
300
|
+
`r3_2-even-v24`). This keeps release CI active for every target that
|
|
301
|
+
`kettle-family` publishes from a branch stack. Existing project-specific push
|
|
302
|
+
branch patterns remain preserved during templating.
|
|
303
|
+
|
|
296
304
|
### Default Local Test Bundle
|
|
297
305
|
|
|
298
306
|
The root `Gemfile` is the default bundle for local commands such as
|
|
@@ -899,7 +907,7 @@ Thanks for RTFM. ☺️
|
|
|
899
907
|
[📌gitmoji]: https://gitmoji.dev
|
|
900
908
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
901
909
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
902
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-12.
|
|
910
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-12.030-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
903
911
|
[🔐security]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/SECURITY.md
|
|
904
912
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
905
913
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -104,14 +104,25 @@ module Kettle
|
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
key = TEMPLATE_CHANGELOG_KEYS.fetch(label, "kettle-jem/template")
|
|
107
|
-
|
|
107
|
+
tracked_paths = nil
|
|
108
|
+
entry = lambda do |matches|
|
|
109
|
+
existing_paths = matches.empty? ? [] : TemplateLock.maintenance_changelog_paths(project_root: project_root, key: key).to_a
|
|
110
|
+
tracked_paths = (existing_paths + changed_files).uniq.sort
|
|
111
|
+
template_run_entry(tracked_paths)
|
|
112
|
+
end
|
|
108
113
|
result = upsert_unreleased_entry(project_root: project_root, section: "Changed", key: key, entry: entry)
|
|
109
|
-
|
|
114
|
+
state_changed = TemplateLock.update_maintenance_changelog_paths(
|
|
115
|
+
project_root: project_root,
|
|
116
|
+
key: key,
|
|
117
|
+
paths: tracked_paths || changed_files
|
|
118
|
+
)
|
|
119
|
+
changelog = result.merge(changed_files: changed_files, tracked_paths: tracked_paths, entry: result.fetch(:entry))
|
|
110
120
|
changed_files_with_changelog = if result.fetch(:status) == "updated"
|
|
111
121
|
(Array(report.fetch(:changed_files, [])) + ["CHANGELOG.md"]).uniq.sort
|
|
112
122
|
else
|
|
113
123
|
Array(report.fetch(:changed_files, [])).uniq.sort
|
|
114
124
|
end
|
|
125
|
+
changed_files_with_changelog << KETTLE_LOCK_PATH if state_changed
|
|
115
126
|
report.merge(changelog: changelog, changed_files: changed_files_with_changelog)
|
|
116
127
|
end
|
|
117
128
|
|
|
@@ -121,8 +132,8 @@ module Kettle
|
|
|
121
132
|
end
|
|
122
133
|
end
|
|
123
134
|
|
|
124
|
-
def template_run_entry(changed_files
|
|
125
|
-
counts =
|
|
135
|
+
def template_run_entry(changed_files)
|
|
136
|
+
counts = {}
|
|
126
137
|
changed_files.group_by { |path| template_change_category(path) }.each do |category, paths|
|
|
127
138
|
counts[category] = counts.fetch(category, 0) + paths.length
|
|
128
139
|
end
|
|
@@ -133,19 +144,6 @@ module Kettle
|
|
|
133
144
|
["updated #{total} project file#{"s" unless total == 1}:", *details].join("\n")
|
|
134
145
|
end
|
|
135
146
|
|
|
136
|
-
def template_entry_counts(matches)
|
|
137
|
-
source = Array(matches).first.to_h.fetch(:source, "")
|
|
138
|
-
source.lines.filter_map do |line|
|
|
139
|
-
match = line.match(/\A\s{2,}- (.+?) \((\d+)\)\s*\z/)
|
|
140
|
-
next unless match
|
|
141
|
-
|
|
142
|
-
category = match[1].tr(" ", "_").to_sym
|
|
143
|
-
next unless TEMPLATE_CHANGE_CATEGORIES.key?(category) || category == :other
|
|
144
|
-
|
|
145
|
-
[category, match[2].to_i]
|
|
146
|
-
end.to_h
|
|
147
|
-
end
|
|
148
|
-
|
|
149
147
|
def template_change_category(path)
|
|
150
148
|
TEMPLATE_CHANGE_CATEGORIES.each do |category, matcher|
|
|
151
149
|
return category if matcher.call(path)
|
|
@@ -16,7 +16,7 @@ module Kettle
|
|
|
16
16
|
module InstallTask
|
|
17
17
|
module_function
|
|
18
18
|
|
|
19
|
-
CURATED_BINSTUB_GEMS = %w[appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover kettle-gha-pins stone_checksums].freeze
|
|
19
|
+
CURATED_BINSTUB_GEMS = %w[appraisal2 rake rbs rspec-core yard rubocop-gradual kettle-dev kettle-test kettle-soup-cover kettle-gha-pins stone_checksums].freeze
|
|
20
20
|
CURATED_BINSTUB_DISCRETE_EXECUTABLES = %w[
|
|
21
21
|
kettle-drift
|
|
22
22
|
yard
|
|
@@ -108,7 +108,15 @@ author_aliases:
|
|
|
108
108
|
dependency_conflicts:
|
|
109
109
|
# Set true only after every discovered conflict has an intentional action.
|
|
110
110
|
reviewed: false
|
|
111
|
-
resolve:
|
|
111
|
+
resolve:
|
|
112
|
+
# The gemspec defines the released runtime contract. runtime_heads
|
|
113
|
+
# intentionally resolves version_gem from main to detect upstream changes
|
|
114
|
+
# before release, so both declarations must remain.
|
|
115
|
+
- gem: version_gem
|
|
116
|
+
direct: "{KJ|GEMSPEC_PATH}"
|
|
117
|
+
modular: gemfiles/modular/runtime_heads.gemfile
|
|
118
|
+
action: keep_both
|
|
119
|
+
reason: "The gemspec declares the released runtime contract while runtime_heads intentionally tests version_gem from main."
|
|
112
120
|
|
|
113
121
|
# This project's identifying emoji.
|
|
114
122
|
# Used as the leading emoji in the README H1 heading and in the gemspec
|
|
@@ -118,7 +118,7 @@ Gem::Specification.new do |spec|
|
|
|
118
118
|
# and preferably a modular one (see gemfiles/modular/*.gemfile).
|
|
119
119
|
|
|
120
120
|
# Dev, Test, & Release Tasks
|
|
121
|
-
spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.
|
|
121
|
+
spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.34") # ruby >= {KJ|MIN_TEST_RUBY}
|
|
122
122
|
|
|
123
123
|
# Security
|
|
124
124
|
spec.add_development_dependency("bundler-audit", "~> 0.9.3") # ruby >= 2.0.0
|
|
@@ -6,11 +6,29 @@
|
|
|
6
6
|
{KJ|LOCAL_GEMFILE_NOMONO_BOOTSTRAP}
|
|
7
7
|
|
|
8
8
|
local_gems = %w[{KJ|KETTLE_DEV_LOCAL_GEMS}]
|
|
9
|
-
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
|
|
10
|
-
local_gems_to_eval = local_gems - %w[{KJ|PACKAGE_NAME}] - declared_gems
|
|
11
9
|
|
|
12
10
|
# export KETTLE_DEV_DEV=/path/to/my
|
|
13
11
|
platform :mri do
|
|
12
|
+
# Replace the gemspec dependency instead of declaring kettle-dev twice. Bundler
|
|
13
|
+
# rejects duplicate declarations with different requirements or sources.
|
|
14
|
+
kettle_dev_dependency = instance_variable_get(:@dependencies).to_a.find { |dependency| dependency.name == "kettle-dev" }
|
|
15
|
+
kettle_dev_local_path = nomono_gems(
|
|
16
|
+
gems: %w[kettle-dev],
|
|
17
|
+
prefix: "KETTLE_DEV",
|
|
18
|
+
path_env: "KETTLE_DEV_DEV",
|
|
19
|
+
vendored_gems_env: "VENDORED_GEMS",
|
|
20
|
+
vendor_gem_dir_env: "VENDOR_GEM_DIR",
|
|
21
|
+
debug_env: "KETTLE_DEV_DEBUG",
|
|
22
|
+
root: ["src", "my", "kettle-dev"]
|
|
23
|
+
).fetch("kettle-dev", nil)
|
|
24
|
+
if kettle_dev_dependency && kettle_dev_local_path
|
|
25
|
+
instance_variable_get(:@dependencies).delete(kettle_dev_dependency)
|
|
26
|
+
gem kettle_dev_dependency.name, *kettle_dev_dependency.requirements_list, path: kettle_dev_local_path
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
|
|
30
|
+
local_gems_to_eval = local_gems - %w[{KJ|PACKAGE_NAME}] - declared_gems
|
|
31
|
+
|
|
14
32
|
eval_nomono_gems(
|
|
15
33
|
gems: local_gems_to_eval,
|
|
16
34
|
prefix: "KETTLE_DEV",
|
|
@@ -25,7 +25,7 @@ platform :mri do
|
|
|
25
25
|
if ENV.fetch("RUBOCOP_LTS_DEV", "false").casecmp("false").zero?
|
|
26
26
|
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
|
|
27
27
|
gem "rubocop-lts", {KJ|RUBOCOP_LTS_CONSTRAINT} unless declared_gems.include?("rubocop-lts")
|
|
28
|
-
gem "rubocop-lts-rspec", "~> 1.0", ">= 1.0.
|
|
28
|
+
gem "rubocop-lts-rspec", "~> 1.0", ">= 1.0.6" unless declared_gems.include?("rubocop-lts-rspec")
|
|
29
29
|
gem "{KJ|RUBOCOP_RUBY_GEM}", {KJ|RUBOCOP_RUBY_CONSTRAINT} unless declared_gems.include?("{KJ|RUBOCOP_RUBY_GEM}")
|
|
30
30
|
else
|
|
31
31
|
eval_gemfile("style_local.gemfile")
|
|
@@ -43,9 +43,7 @@ structuredmerge_local_gems = %w[
|
|
|
43
43
|
kettle_dev_local_gems = %w[
|
|
44
44
|
{KJ|KETTLE_DEV_LOCAL_GEMS}
|
|
45
45
|
]
|
|
46
|
-
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
|
|
47
46
|
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[{KJ|PACKAGE_NAME}]
|
|
48
|
-
kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[{KJ|PACKAGE_NAME}] - (declared_gems - %w[kettle-dev])
|
|
49
47
|
|
|
50
48
|
if ENV.fetch("STRUCTUREDMERGE_DEV", "false").casecmp("false") != 0
|
|
51
49
|
eval_nomono_gems(
|
|
@@ -59,6 +57,26 @@ if ENV.fetch("STRUCTUREDMERGE_DEV", "false").casecmp("false") != 0
|
|
|
59
57
|
end
|
|
60
58
|
|
|
61
59
|
if ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false") != 0
|
|
60
|
+
# Replace the gemspec dependency instead of declaring kettle-dev twice. Bundler
|
|
61
|
+
# rejects duplicate declarations with different requirements or sources.
|
|
62
|
+
kettle_dev_dependency = instance_variable_get(:@dependencies).to_a.find { |dependency| dependency.name == "kettle-dev" }
|
|
63
|
+
kettle_dev_local_path = nomono_gems(
|
|
64
|
+
gems: %w[kettle-dev],
|
|
65
|
+
prefix: "KETTLE_DEV",
|
|
66
|
+
path_env: "KETTLE_DEV_DEV",
|
|
67
|
+
vendored_gems_env: "VENDORED_GEMS",
|
|
68
|
+
vendor_gem_dir_env: "VENDOR_GEM_DIR",
|
|
69
|
+
debug_env: "KETTLE_DEV_DEBUG",
|
|
70
|
+
root: ["src", "my", "kettle-dev"]
|
|
71
|
+
).fetch("kettle-dev", nil)
|
|
72
|
+
if kettle_dev_dependency && kettle_dev_local_path
|
|
73
|
+
instance_variable_get(:@dependencies).delete(kettle_dev_dependency)
|
|
74
|
+
gem kettle_dev_dependency.name, *kettle_dev_dependency.requirements_list, path: kettle_dev_local_path
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
|
|
78
|
+
kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[{KJ|PACKAGE_NAME}] - declared_gems
|
|
79
|
+
|
|
62
80
|
eval_nomono_gems(
|
|
63
81
|
gems: kettle_dev_local_gems_to_eval,
|
|
64
82
|
prefix: "KETTLE_DEV",
|
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
|
30
30
|
spec.add_dependency "{KJ|SHIMMED_GEM_NAME}"
|
|
31
31
|
|
|
32
32
|
# Dev, Test, & Release Tasks
|
|
33
|
-
spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.
|
|
33
|
+
spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.34") # ruby >= {KJ|MIN_TEST_RUBY}
|
|
34
34
|
|
|
35
35
|
# Tasks
|
|
36
36
|
spec.add_development_dependency "rake", "~> 13.0"
|
data/lib/kettle/jem/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 = "7.1.
|
|
8
|
+
VERSION = "7.1.26"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
data/lib/kettle/jem.rb
CHANGED
|
@@ -58,7 +58,7 @@ module Kettle
|
|
|
58
58
|
# set in place before Bundler is allowed to evaluate that destination.
|
|
59
59
|
TEMPLATE_MANAGED_DEPENDENCIES = [
|
|
60
60
|
{name: "nomono", requirements: ["~> 1.1", ">= 1.1.5"], bootstrap: true},
|
|
61
|
-
{name: "kettle-dev", requirements: ["~> 3.0", ">= 3.0.
|
|
61
|
+
{name: "kettle-dev", requirements: ["~> 3.0", ">= 3.0.34"], bootstrap: true},
|
|
62
62
|
{
|
|
63
63
|
name: "kettle-changelog",
|
|
64
64
|
requirements: ["~> 1.0", ">= 1.0.7"],
|
|
@@ -2087,6 +2087,7 @@ module Kettle
|
|
|
2087
2087
|
VERSION = 1
|
|
2088
2088
|
TEMPLATE_STATE_KEY = "template_state"
|
|
2089
2089
|
FILES_KEY = "files"
|
|
2090
|
+
MAINTENANCE_CHANGELOG_SUBKEY = "maintenance_changelog"
|
|
2090
2091
|
|
|
2091
2092
|
module_function
|
|
2092
2093
|
|
|
@@ -2155,6 +2156,34 @@ module Kettle
|
|
|
2155
2156
|
record.is_a?(Hash) ? record : {}
|
|
2156
2157
|
end
|
|
2157
2158
|
|
|
2159
|
+
def maintenance_changelog(lock)
|
|
2160
|
+
value = lock.dig(TEMPLATE_STATE_KEY, MAINTENANCE_CHANGELOG_SUBKEY)
|
|
2161
|
+
value.is_a?(Hash) ? value : {}
|
|
2162
|
+
end
|
|
2163
|
+
|
|
2164
|
+
def maintenance_changelog_paths(project_root:, key:)
|
|
2165
|
+
state = maintenance_changelog(load(project_root: project_root))
|
|
2166
|
+
return unless state.key?(key.to_s)
|
|
2167
|
+
|
|
2168
|
+
Array(state.fetch(key.to_s)).map(&:to_s).uniq.sort
|
|
2169
|
+
end
|
|
2170
|
+
|
|
2171
|
+
def update_maintenance_changelog_paths(project_root:, key:, paths:)
|
|
2172
|
+
lock = load(project_root: project_root)
|
|
2173
|
+
template_state = lock.fetch(TEMPLATE_STATE_KEY, {}).dup
|
|
2174
|
+
changelog = maintenance_changelog(lock).dup
|
|
2175
|
+
normalized_paths = Array(paths).map(&:to_s).uniq.sort
|
|
2176
|
+
return false if changelog[key.to_s] == normalized_paths
|
|
2177
|
+
|
|
2178
|
+
changelog[key.to_s] = normalized_paths
|
|
2179
|
+
template_state[MAINTENANCE_CHANGELOG_SUBKEY] = changelog
|
|
2180
|
+
lock[TEMPLATE_STATE_KEY] = template_state
|
|
2181
|
+
lock["version"] ||= VERSION
|
|
2182
|
+
lock[FILES_KEY] ||= {}
|
|
2183
|
+
write(project_root: project_root, lock: lock)
|
|
2184
|
+
true
|
|
2185
|
+
end
|
|
2186
|
+
|
|
2158
2187
|
def build_lock(template_state:, file_records:)
|
|
2159
2188
|
{
|
|
2160
2189
|
"version" => VERSION,
|
|
@@ -5206,6 +5235,7 @@ module Kettle
|
|
|
5206
5235
|
latest_replay = report.dig(:facts, :changelog, :latest_transfer_entry)
|
|
5207
5236
|
existing_state = TemplateLock.load(project_root: project_root, config_path: config_path)
|
|
5208
5237
|
existing_replay = existing_state.dig(TemplateLock::TEMPLATE_STATE_KEY, TemplateChecksums::CHANGELOG_REPLAY_SUBKEY)
|
|
5238
|
+
maintenance_changelog = TemplateLock.maintenance_changelog(existing_state)
|
|
5209
5239
|
changelog_replay = if latest_replay
|
|
5210
5240
|
{
|
|
5211
5241
|
TemplateChecksums::LAST_ENTRY_KEY_SUBKEY => latest_replay.fetch(:key),
|
|
@@ -5218,6 +5248,7 @@ module Kettle
|
|
|
5218
5248
|
"version" => VERSION,
|
|
5219
5249
|
"applied_at" => Time.now.utc.strftime("%Y-%m-%d"),
|
|
5220
5250
|
TemplateChecksums::CHANGELOG_REPLAY_SUBKEY => changelog_replay,
|
|
5251
|
+
TemplateLock::MAINTENANCE_CHANGELOG_SUBKEY => maintenance_changelog,
|
|
5221
5252
|
TemplateChecksums::CHECKSUMS_SUBKEY => TemplateChecksums.compute(
|
|
5222
5253
|
template_root: template_root_path(project_root, config: kettle_jem_config(project_root))
|
|
5223
5254
|
)
|
|
@@ -5465,9 +5496,9 @@ module Kettle
|
|
|
5465
5496
|
[
|
|
5466
5497
|
{name: "appraisal2", source: %(gem "appraisal2", "~> 3.2", ">= 3.2.3"\n)},
|
|
5467
5498
|
{name: "bundler-audit", source: %(gem "bundler-audit", "~> 0.9.3"\n)},
|
|
5468
|
-
{name: "kettle-dev", source: %(gem "kettle-dev", "~> 3.0", ">= 3.0.
|
|
5499
|
+
{name: "kettle-dev", source: %(gem "kettle-dev", "~> 3.0", ">= 3.0.34"\n)},
|
|
5469
5500
|
{name: "kettle-drift", source: %(gem "kettle-drift", "~> 1.0", ">= 1.0.13"\n)},
|
|
5470
|
-
{name: "kettle-family", source: %(gem "kettle-family", "~> 1.2", ">= 1.2.
|
|
5501
|
+
{name: "kettle-family", source: %(gem "kettle-family", "~> 1.2", ">= 1.2.100"\n)},
|
|
5471
5502
|
{name: PACKAGE_NAME, source: kettle_jem_dependency_source},
|
|
5472
5503
|
{name: "kettle-test", source: %(gem "kettle-test", "~> 2.0", ">= 2.0.21"\n)},
|
|
5473
5504
|
{name: "rake", source: %(gem "rake", "~> 13.0"\n)},
|
|
@@ -14366,6 +14397,7 @@ module Kettle
|
|
|
14366
14397
|
github_org = facts.fetch(:repository, {})[:slug].to_s.split("/", 2).first.to_s if github_org.empty?
|
|
14367
14398
|
tokens = {
|
|
14368
14399
|
"KJ|GEM_NAME" => package.fetch(:name).to_s,
|
|
14400
|
+
"KJ|GEMSPEC_PATH" => rubygems.fetch(:gemspec_path, "").to_s,
|
|
14369
14401
|
"KJ|PACKAGE_SUMMARY" => package.fetch(:summary, package.fetch(:description, "")).to_s,
|
|
14370
14402
|
"KJ|PACKAGE_DESCRIPTION" => package.fetch(:description, package.fetch(:summary, "")).to_s,
|
|
14371
14403
|
"KJ|GEMSPEC_PACKAGE_SUMMARY" => ruby_double_quoted_string_body(strip_leading_decorative_graphemes(package.fetch(:summary, package.fetch(:description, "")).to_s)),
|
|
@@ -15495,7 +15527,7 @@ module Kettle
|
|
|
15495
15527
|
def main_gemfile_kettle_family_gem(package_name)
|
|
15496
15528
|
return "" if package_name.to_s == "kettle-family"
|
|
15497
15529
|
|
|
15498
|
-
%(gem "kettle-family", "~> 1.2", ">= 1.2.
|
|
15530
|
+
%(gem "kettle-family", "~> 1.2", ">= 1.2.100"\n)
|
|
15499
15531
|
end
|
|
15500
15532
|
|
|
15501
15533
|
def main_gemfile_nomono_bootstrap(package_name)
|
|
@@ -18595,6 +18627,7 @@ module Kettle
|
|
|
18595
18627
|
)
|
|
18596
18628
|
recipe[:template_preference] = bootstrap.fetch(:template_preference)
|
|
18597
18629
|
recipe[:template_tokens] = {
|
|
18630
|
+
"KJ|GEMSPEC_PATH" => bootstrap[:gemspec_path].to_s,
|
|
18598
18631
|
"KJ|MIN_DIVERGENCE_THRESHOLD" => bootstrap.fetch(:min_divergence_threshold).to_s,
|
|
18599
18632
|
"KJ|MIN_RUBY" => bootstrap[:min_ruby].to_s,
|
|
18600
18633
|
"KJ|MIN_TEST_RUBY" => bootstrap[:test_min_ruby].to_s,
|
|
@@ -19847,7 +19880,10 @@ module Kettle
|
|
|
19847
19880
|
end
|
|
19848
19881
|
|
|
19849
19882
|
def github_actions_push_branches(content, default_branch:)
|
|
19850
|
-
|
|
19883
|
+
# Branch-stack releases use names such as r3_2-even-v24. They must run
|
|
19884
|
+
# the same push workflows as stable branches because kettle-release
|
|
19885
|
+
# monitors those runs before publishing the branch release.
|
|
19886
|
+
managed = [default_branch.to_s, "*-stable", "r*_*-*-v*"]
|
|
19851
19887
|
existing = yaml_scalar_sequence_at_path(content, %w[on push branches])
|
|
19852
19888
|
(managed + existing).uniq
|
|
19853
19889
|
end
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kettle-jem
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.1.
|
|
4
|
+
version: 7.1.26
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -226,7 +226,7 @@ dependencies:
|
|
|
226
226
|
version: '1.0'
|
|
227
227
|
- - ">="
|
|
228
228
|
- !ruby/object:Gem::Version
|
|
229
|
-
version: 1.0.
|
|
229
|
+
version: 1.0.7
|
|
230
230
|
type: :runtime
|
|
231
231
|
prerelease: false
|
|
232
232
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -236,27 +236,27 @@ dependencies:
|
|
|
236
236
|
version: '1.0'
|
|
237
237
|
- - ">="
|
|
238
238
|
- !ruby/object:Gem::Version
|
|
239
|
-
version: 1.0.
|
|
239
|
+
version: 1.0.7
|
|
240
240
|
- !ruby/object:Gem::Dependency
|
|
241
241
|
name: kettle-dev
|
|
242
242
|
requirement: !ruby/object:Gem::Requirement
|
|
243
243
|
requirements:
|
|
244
|
-
- - "
|
|
244
|
+
- - "~>"
|
|
245
245
|
- !ruby/object:Gem::Version
|
|
246
|
-
version: 3.0
|
|
247
|
-
- - "
|
|
246
|
+
version: '3.0'
|
|
247
|
+
- - ">="
|
|
248
248
|
- !ruby/object:Gem::Version
|
|
249
|
-
version:
|
|
249
|
+
version: 3.0.34
|
|
250
250
|
type: :runtime
|
|
251
251
|
prerelease: false
|
|
252
252
|
version_requirements: !ruby/object:Gem::Requirement
|
|
253
253
|
requirements:
|
|
254
|
-
- - "
|
|
254
|
+
- - "~>"
|
|
255
255
|
- !ruby/object:Gem::Version
|
|
256
|
-
version: 3.0
|
|
257
|
-
- - "
|
|
256
|
+
version: '3.0'
|
|
257
|
+
- - ">="
|
|
258
258
|
- !ruby/object:Gem::Version
|
|
259
|
-
version:
|
|
259
|
+
version: 3.0.34
|
|
260
260
|
- !ruby/object:Gem::Dependency
|
|
261
261
|
name: kettle-gha-pins
|
|
262
262
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -613,26 +613,6 @@ dependencies:
|
|
|
613
613
|
- - "~>"
|
|
614
614
|
- !ruby/object:Gem::Version
|
|
615
615
|
version: 0.9.3
|
|
616
|
-
- !ruby/object:Gem::Dependency
|
|
617
|
-
name: json
|
|
618
|
-
requirement: !ruby/object:Gem::Requirement
|
|
619
|
-
requirements:
|
|
620
|
-
- - "~>"
|
|
621
|
-
- !ruby/object:Gem::Version
|
|
622
|
-
version: '2.0'
|
|
623
|
-
- - ">="
|
|
624
|
-
- !ruby/object:Gem::Version
|
|
625
|
-
version: 2.21.2
|
|
626
|
-
type: :development
|
|
627
|
-
prerelease: false
|
|
628
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
629
|
-
requirements:
|
|
630
|
-
- - "~>"
|
|
631
|
-
- !ruby/object:Gem::Version
|
|
632
|
-
version: '2.0'
|
|
633
|
-
- - ">="
|
|
634
|
-
- !ruby/object:Gem::Version
|
|
635
|
-
version: 2.21.2
|
|
636
616
|
- !ruby/object:Gem::Dependency
|
|
637
617
|
name: rake
|
|
638
618
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -801,6 +781,26 @@ dependencies:
|
|
|
801
781
|
- - ">="
|
|
802
782
|
- !ruby/object:Gem::Version
|
|
803
783
|
version: 2.0.12
|
|
784
|
+
- !ruby/object:Gem::Dependency
|
|
785
|
+
name: json
|
|
786
|
+
requirement: !ruby/object:Gem::Requirement
|
|
787
|
+
requirements:
|
|
788
|
+
- - "~>"
|
|
789
|
+
- !ruby/object:Gem::Version
|
|
790
|
+
version: '2.0'
|
|
791
|
+
- - ">="
|
|
792
|
+
- !ruby/object:Gem::Version
|
|
793
|
+
version: 2.21.2
|
|
794
|
+
type: :development
|
|
795
|
+
prerelease: false
|
|
796
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
797
|
+
requirements:
|
|
798
|
+
- - "~>"
|
|
799
|
+
- !ruby/object:Gem::Version
|
|
800
|
+
version: '2.0'
|
|
801
|
+
- - ">="
|
|
802
|
+
- !ruby/object:Gem::Version
|
|
803
|
+
version: 2.21.2
|
|
804
804
|
description: "\U0001F52E Kettle::Jem provides gem scaffolding, templating, and setup
|
|
805
805
|
automation using the *-merge gem family for AST-based file merging and token-resolver
|
|
806
806
|
for template token resolution. Includes MergerConfig presets, YAML recipes, and
|
|
@@ -1016,10 +1016,10 @@ licenses:
|
|
|
1016
1016
|
- PolyForm-Small-Business-1.0.0
|
|
1017
1017
|
metadata:
|
|
1018
1018
|
homepage_uri: https://structuredmerge.org
|
|
1019
|
-
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.
|
|
1020
|
-
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.
|
|
1019
|
+
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.26
|
|
1020
|
+
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.26/CHANGELOG.md
|
|
1021
1021
|
bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
|
|
1022
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-jem/7.1.
|
|
1022
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-jem/7.1.26
|
|
1023
1023
|
funding_uri: https://github.com/sponsors/pboling
|
|
1024
1024
|
wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
|
|
1025
1025
|
news_uri: https://www.railsbling.com/tags/kettle-jem
|
metadata.gz.sig
CHANGED
|
Binary file
|