kettle-dev 3.1.28 → 3.1.29
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 +38 -1
- data/README.md +1 -1
- data/exe/kettle-release +2 -0
- data/lib/kettle/dev/bundler_pinning.rb +43 -8
- data/lib/kettle/dev/rakelib/bundle_audit.rake +39 -1
- data/lib/kettle/dev/version.rb +1 -1
- data.tar.gz.sig +6 -2
- metadata +12 -12
- 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: b5bbcae9e4ae2d02da16163b286f45912220cd5efba41059ece7180b8f8f87bf
|
|
4
|
+
data.tar.gz: ca49ffbec4f7e7ab8063fb8dc12751e097cedd7c5401aa7ea6a379331d3f0c48
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5109ef39ece4dcd59b0277b25b28c29463c48f8f3bfecbc3508fe9742cd8860e734629c18b377b150ef81894cb78e4f5fbe2d515ffd20c1a591b7936f5d95cf9
|
|
7
|
+
data.tar.gz: bae2bd4613e1666fdd80c40a3ad24fc43d2950de94c6983bbf954ed8658ed09f89b4e121d7d70bbe987ba64dd89e04d787dd75156fa54ea7609c006ff43ed791
|
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.29] - 2026-11-15
|
|
34
|
+
|
|
35
|
+
- TAG: [v3.1.29][3.1.29t]
|
|
36
|
+
- COVERAGE: 91.95% -- 5856/6369 lines in 48 files
|
|
37
|
+
- BRANCH COVERAGE: 75.81% -- 2247/2964 branches in 48 files
|
|
38
|
+
- 53.68% documented
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- [kc] kettle-jem/prepare: updated 14 project files:
|
|
43
|
+
- dependencies (14)
|
|
44
|
+
|
|
45
|
+
- [kc] kettle-jem/template: updated 17 project files:
|
|
46
|
+
- code and tests (2)
|
|
47
|
+
- dependencies (3)
|
|
48
|
+
- other (3)
|
|
49
|
+
- workflows (9)
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
|
|
53
|
+
- `BundlerPinning.install_stable` no longer reinstalls an exact Bundler version
|
|
54
|
+
that is already installed, and serializes installs with a blocking `flock` in
|
|
55
|
+
the gem dir. Rewriting an installed Bundler in place made parallel family
|
|
56
|
+
members that were loading it fail with `LoadError` for files under
|
|
57
|
+
`bundler-X/lib/bundler`.
|
|
58
|
+
|
|
59
|
+
- `bundle:audit:update` is serialized across processes with a blocking `flock`
|
|
60
|
+
on a lock file next to the shared ruby-advisory-db, and a failed update is a
|
|
61
|
+
warning (audit uses the existing copy) when a local database exists. Fixes
|
|
62
|
+
`cannot lock ref 'refs/remotes/origin/master'` in parallel releases ([#57](https://github.com/kettle-dev/kettle-dev/issues/57)).
|
|
63
|
+
|
|
33
64
|
## [3.1.28] - 2026-11-08
|
|
34
65
|
|
|
35
66
|
- TAG: [v3.1.28][3.1.28t]
|
|
@@ -1901,6 +1932,10 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
1901
1932
|
|
|
1902
1933
|
### Added
|
|
1903
1934
|
|
|
1935
|
+
- `KETTLE_DEV_SKIP_AUDIT_UPDATE=true` (also `1`/`yes`/`on`) skips only
|
|
1936
|
+
`bundle:audit:update` while `bundle:audit` still runs, so a coordinator such
|
|
1937
|
+
as kettle-family can update the shared advisory database once ([#57](https://github.com/kettle-dev/kettle-dev/issues/57)).
|
|
1938
|
+
|
|
1904
1939
|
- `kettle-pre-release` now skips volatile star-history image URLs by default
|
|
1905
1940
|
during Markdown image validation, and accepts additional
|
|
1906
1941
|
`.kettle-family.yml` or `KETTLE_FAMILY_CONFIG` patterns under
|
|
@@ -4304,7 +4339,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
4304
4339
|
- Selecting will run the selected workflow via `act`
|
|
4305
4340
|
- This may move to its own gem in the future.
|
|
4306
4341
|
|
|
4307
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.
|
|
4342
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.29...HEAD
|
|
4343
|
+
[3.1.29]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.28...v3.1.29
|
|
4344
|
+
[3.1.29t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.29
|
|
4308
4345
|
[3.1.28]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.27...v3.1.28
|
|
4309
4346
|
[3.1.28t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.28
|
|
4310
4347
|
[3.1.27]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.26...v3.1.27
|
data/README.md
CHANGED
|
@@ -1048,7 +1048,7 @@ Thanks for RTFM. ☺️
|
|
|
1048
1048
|
[📌gitmoji]: https://gitmoji.dev
|
|
1049
1049
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
1050
1050
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
1051
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.
|
|
1051
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.369-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
1052
1052
|
[🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
|
|
1053
1053
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
1054
1054
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
data/exe/kettle-release
CHANGED
|
@@ -137,6 +137,8 @@ if ARGV.include?("-h") || ARGV.include?("--help")
|
|
|
137
137
|
# Use slower appraisal:update instead of default appraisal:generate
|
|
138
138
|
KETTLE_DEV_SKIP_BUNDLE_AUDIT=true
|
|
139
139
|
# Skip bundle:audit/update during release rake checks
|
|
140
|
+
KETTLE_DEV_SKIP_AUDIT_UPDATE=true
|
|
141
|
+
# Skip only bundle:audit:update (advisory-db pull); bundle:audit still runs
|
|
140
142
|
GITHUB_TOKEN / GH_TOKEN # Optional; enables GitHub release creation and API queries
|
|
141
143
|
GITLAB_TOKEN / GL_TOKEN # Optional; enables GitLab API queries when applicable
|
|
142
144
|
DEBUG=true # Print backtraces on errors
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "bundler"
|
|
4
|
+
require "fileutils"
|
|
4
5
|
require "rubygems/dependency_installer"
|
|
5
6
|
|
|
6
7
|
module Kettle
|
|
@@ -58,15 +59,49 @@ module Kettle
|
|
|
58
59
|
# stable when nil. rubygems.org only, never prereleases, and a spec
|
|
59
60
|
# reset so the just-installed version is visible to later gem lookups
|
|
60
61
|
# in this process. Returns the installed specs.
|
|
62
|
+
#
|
|
63
|
+
# An exact version that is already installed is NOT reinstalled:
|
|
64
|
+
# RubyGems rewrites an installed gem's files in place, and parallel
|
|
65
|
+
# family members that are loading that Bundler at the time die with
|
|
66
|
+
# LoadError for random files under bundler-X/lib/bundler. Installs are
|
|
67
|
+
# also serialized across processes with a blocking flock in the gem dir,
|
|
68
|
+
# and the installed check is repeated once the lock is held, so only the
|
|
69
|
+
# first of several concurrent members actually installs.
|
|
61
70
|
def install_stable(version = nil)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
return [] if version && version_installed?(version)
|
|
72
|
+
|
|
73
|
+
with_install_lock do
|
|
74
|
+
next [] if version && version_installed?(version)
|
|
75
|
+
|
|
76
|
+
original_sources = Gem.sources.to_a
|
|
77
|
+
begin
|
|
78
|
+
Gem.sources = [RUBYGEMS_SOURCE]
|
|
79
|
+
requirements = version ? ["= #{version}"] : []
|
|
80
|
+
specs = Gem::DependencyInstaller.new(domain: :remote, prerelease: false, document: []).install("bundler", *requirements)
|
|
81
|
+
Gem::Specification.reset
|
|
82
|
+
specs
|
|
83
|
+
ensure
|
|
84
|
+
Gem.sources = original_sources if original_sources
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# True when bundler-VERSION's gemspec is on disk in any Gem.path entry.
|
|
90
|
+
# Reads the specifications dir directly (see installed_stable) so a
|
|
91
|
+
# bundle-scoped spec index cannot hide an installed version.
|
|
92
|
+
def version_installed?(version)
|
|
93
|
+
Array(Gem.path).any? do |base|
|
|
94
|
+
File.file?(File.join(base, "specifications", "bundler-#{version}.gemspec"))
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def with_install_lock(&block)
|
|
99
|
+
dir = Gem.dir
|
|
100
|
+
FileUtils.mkdir_p(dir)
|
|
101
|
+
File.open(File.join(dir, ".kettle-bundler-install.lock"), File::RDWR | File::CREAT, 0o644) do |lock|
|
|
102
|
+
lock.flock(File::LOCK_EX)
|
|
103
|
+
block.call
|
|
104
|
+
end
|
|
70
105
|
end
|
|
71
106
|
|
|
72
107
|
# The version a release should pin BUNDLED WITH to: the registry's
|
|
@@ -1,6 +1,43 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
skip_bundle_audit = %w[1 true yes on].include?(ENV.fetch("KETTLE_DEV_SKIP_BUNDLE_AUDIT", "").downcase)
|
|
4
|
+
# Skips only the advisory database update; bundle:audit itself still runs.
|
|
5
|
+
skip_audit_update = %w[1 true yes on].include?(ENV.fetch("KETTLE_DEV_SKIP_AUDIT_UPDATE", "").downcase)
|
|
6
|
+
|
|
7
|
+
# Replaces bundler-audit's `bundle:audit:update` body. The ruby-advisory-db
|
|
8
|
+
# lives in one directory shared by every process (e.g. parallel family
|
|
9
|
+
# releases), so the update is serialized with a blocking flock on a lock file
|
|
10
|
+
# next to the database, and a failed update is non-fatal when a usable local
|
|
11
|
+
# copy exists.
|
|
12
|
+
redefine_audit_update_task = lambda do
|
|
13
|
+
require "fileutils"
|
|
14
|
+
require "bundler/audit/database"
|
|
15
|
+
Rake::Task["bundle:audit:update"].clear
|
|
16
|
+
# rubocop:disable Rake/DuplicateTask
|
|
17
|
+
desc("Updates the bundler-audit vulnerability database (serialized; see KETTLE_DEV_SKIP_AUDIT_UPDATE)")
|
|
18
|
+
task("bundle:audit:update") do
|
|
19
|
+
if skip_audit_update
|
|
20
|
+
warn("NOTE: bundle:audit:update skipped because KETTLE_DEV_SKIP_AUDIT_UPDATE is enabled")
|
|
21
|
+
next
|
|
22
|
+
end
|
|
23
|
+
db_path = Bundler::Audit::Database.path
|
|
24
|
+
lock_path = "#{db_path.to_s.chomp("/")}.lock"
|
|
25
|
+
FileUtils.mkdir_p(File.dirname(lock_path))
|
|
26
|
+
ok = File.open(lock_path, File::RDWR | File::CREAT, 0o644) do |lock|
|
|
27
|
+
lock.flock(File::LOCK_EX) # blocks until other updaters finish
|
|
28
|
+
system("bundler-audit", "update")
|
|
29
|
+
end
|
|
30
|
+
unless ok
|
|
31
|
+
if Bundler::Audit::Database.exists?(db_path)
|
|
32
|
+
warn("WARNING: bundle:audit:update failed; auditing with the existing local database at #{db_path}")
|
|
33
|
+
else
|
|
34
|
+
warn("ERROR: bundle:audit:update failed and no local advisory database exists at #{db_path}")
|
|
35
|
+
exit($?&.exitstatus || 1)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
# rubocop:enable Rake/DuplicateTask
|
|
40
|
+
end
|
|
4
41
|
|
|
5
42
|
define_bundle_audit_stub_tasks = lambda do |description_prefix, warning|
|
|
6
43
|
desc("#{description_prefix} bundle:audit")
|
|
@@ -8,7 +45,7 @@ define_bundle_audit_stub_tasks = lambda do |description_prefix, warning|
|
|
|
8
45
|
warn(warning.call("bundle:audit"))
|
|
9
46
|
end
|
|
10
47
|
desc("#{description_prefix} bundle:audit:update")
|
|
11
|
-
task("bundle:audit:update") do
|
|
48
|
+
task("bundle:audit:update") do # rubocop:disable Rake/DuplicateTask
|
|
12
49
|
warn(warning.call("bundle:audit:update"))
|
|
13
50
|
end
|
|
14
51
|
end
|
|
@@ -24,6 +61,7 @@ else
|
|
|
24
61
|
require "bundler/audit/task"
|
|
25
62
|
|
|
26
63
|
Bundler::Audit::Task.new
|
|
64
|
+
redefine_audit_update_task.call
|
|
27
65
|
Kettle::Dev.register_default("bundle:audit:update")
|
|
28
66
|
Kettle::Dev.register_default("bundle:audit")
|
|
29
67
|
rescue LoadError
|
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.29"
|
|
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
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
Zpܪ7����:�}���c2:,:�.�[�0����ߑ!@�î�s��(��+�B����*��P�+��F��}T���>����m�Cvx��-� +5��x
|
|
2
|
+
��WɶRh�T���-�N9��\�ut��:��G��
|
|
3
|
+
fy&�V��x
|
|
4
|
+
f:|�l ^�`��"^ɒ�>]�I('ڕ�k
|
|
5
|
+
���
|
|
6
|
+
�K3��W��'�7��Ja��A���"���iF}O49���\��}�cR,\p��(�y/���@��@e�Y<p�O��"��i�:}�6�js���ƃ�RʏCO �T
|
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.29
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -120,7 +120,7 @@ dependencies:
|
|
|
120
120
|
version: '2.0'
|
|
121
121
|
- - ">="
|
|
122
122
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: 2.0.
|
|
123
|
+
version: 2.0.30
|
|
124
124
|
type: :runtime
|
|
125
125
|
prerelease: false
|
|
126
126
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -130,7 +130,7 @@ dependencies:
|
|
|
130
130
|
version: '2.0'
|
|
131
131
|
- - ">="
|
|
132
132
|
- !ruby/object:Gem::Version
|
|
133
|
-
version: 2.0.
|
|
133
|
+
version: 2.0.30
|
|
134
134
|
- !ruby/object:Gem::Dependency
|
|
135
135
|
name: ruby-progressbar
|
|
136
136
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -276,7 +276,7 @@ dependencies:
|
|
|
276
276
|
version: '4.0'
|
|
277
277
|
- - ">="
|
|
278
278
|
- !ruby/object:Gem::Version
|
|
279
|
-
version: 4.0.
|
|
279
|
+
version: 4.0.2
|
|
280
280
|
type: :development
|
|
281
281
|
prerelease: false
|
|
282
282
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -286,7 +286,7 @@ dependencies:
|
|
|
286
286
|
version: '4.0'
|
|
287
287
|
- - ">="
|
|
288
288
|
- !ruby/object:Gem::Version
|
|
289
|
-
version: 4.0.
|
|
289
|
+
version: 4.0.2
|
|
290
290
|
- !ruby/object:Gem::Dependency
|
|
291
291
|
name: stone_checksums
|
|
292
292
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -296,7 +296,7 @@ dependencies:
|
|
|
296
296
|
version: '1.0'
|
|
297
297
|
- - ">="
|
|
298
298
|
- !ruby/object:Gem::Version
|
|
299
|
-
version: 1.0.
|
|
299
|
+
version: 1.0.10
|
|
300
300
|
type: :development
|
|
301
301
|
prerelease: false
|
|
302
302
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -306,7 +306,7 @@ dependencies:
|
|
|
306
306
|
version: '1.0'
|
|
307
307
|
- - ">="
|
|
308
308
|
- !ruby/object:Gem::Version
|
|
309
|
-
version: 1.0.
|
|
309
|
+
version: 1.0.10
|
|
310
310
|
- !ruby/object:Gem::Dependency
|
|
311
311
|
name: gitmoji-regex
|
|
312
312
|
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.16
|
|
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.16
|
|
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
|
|
@@ -423,10 +423,10 @@ licenses:
|
|
|
423
423
|
- AGPL-3.0-only
|
|
424
424
|
metadata:
|
|
425
425
|
homepage_uri: https://kettle-dev.galtzo.com
|
|
426
|
-
source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.1.
|
|
427
|
-
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.1.
|
|
426
|
+
source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.1.29
|
|
427
|
+
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.1.29/CHANGELOG.md
|
|
428
428
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
|
|
429
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.1.
|
|
429
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.1.29
|
|
430
430
|
funding_uri: https://github.com/sponsors/pboling
|
|
431
431
|
wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
|
|
432
432
|
news_uri: https://www.railsbling.com/tags/kettle-dev
|
metadata.gz.sig
CHANGED
|
Binary file
|