kettle-family 0.2.7 → 1.0.0
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 +40 -1
- data/README.md +9 -29
- data/lib/kettle/family/cli.rb +4 -0
- data/lib/kettle/family/config.rb +4 -2
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/version_bump.rb +34 -5
- data/lib/kettle/family/workflow.rb +16 -2
- data/sig/kettle/family.rbs +67 -0
- data.tar.gz.sig +0 -0
- metadata +30 -48
- metadata.gz.sig +0 -0
- data/AGPL-3.0-only.md +0 -235
- data/CITATION.cff +0 -20
- data/CODE_OF_CONDUCT.md +0 -134
- data/CONTRIBUTING.md +0 -275
- data/FUNDING.md +0 -70
- data/RUBOCOP.md +0 -71
- data/SECURITY.md +0 -21
- data/certs/pboling.pem +0 -27
- data/sig/kettle/family/version.rbs +0 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5bca5a6ab33a2d894ba06b7b75827b8849476922494bbf02df50efb0d9a0edac
|
|
4
|
+
data.tar.gz: 9dc491d15e3f89e737961bf87f103a982bddafc6183dc26f8d2287b84dce7d12
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9ebfabcd00bbb7631fe7ef8f3aae71e283b2bfda98a7c60e8b28551e7e3401f219916408c0fafa7321a62dc3ff44fd02a9a44a7461684399a672df9af89d0adf
|
|
7
|
+
data.tar.gz: 9d72e678c1f451b101b3dc297da6b320321a2fec0b1c723a6c174a5e2a5f5f1d0175ef120c276ca1f52df115a70f87a8d6f76a4a7e30eba7fb2b137eade11b29
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,43 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [1.0.0] - 2026-07-17
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.0.0][1.0.0t]
|
|
36
|
+
- COVERAGE: 95.22% -- 2370/2489 lines in 23 files
|
|
37
|
+
- BRANCH COVERAGE: 76.87% -- 801/1042 branches in 23 files
|
|
38
|
+
- 29.29% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- `kettle-family release` now accepts `--ci-workflows` and forwards the
|
|
43
|
+
comma-separated workflow subset to member `kettle-release` runs.
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- Promoted the gems that provide built-in `kettle-family` workflow commands to
|
|
48
|
+
runtime dependencies: `kettle-dev` for release/changelog/SHA-pin/version
|
|
49
|
+
tooling and `kettle-test` for test runs.
|
|
50
|
+
- Moved the `kettle-jem` templating provider to the templating Gemfile while
|
|
51
|
+
the next `kettle-jem` release depends on unreleased `kettle-family` fixes.
|
|
52
|
+
- Raised the runtime Ruby floor to 4.0.0.
|
|
53
|
+
|
|
54
|
+
- kettle-jem-template-20260716-001 - Shim gemspec manifests now include
|
|
55
|
+
`LICENSE.md` instead of nonexistent `LICENSE.txt`.
|
|
56
|
+
- kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
|
|
57
|
+
repository-only files by default to reduce downstream distro packaging churn.
|
|
58
|
+
|
|
59
|
+
### Fixed
|
|
60
|
+
|
|
61
|
+
- Root-mode family changelog release commands now pass the configured family
|
|
62
|
+
name to `kettle-changelog`, allowing shared root changelogs to run from
|
|
63
|
+
repositories that do not have a root gemspec.
|
|
64
|
+
- `kettle-family bump-version` now recognizes exact same-version family
|
|
65
|
+
dependencies written as `= #{spec.version}` instead of failing with a
|
|
66
|
+
misleading ambiguous dependency error.
|
|
67
|
+
- `kettle-family release --ci-workflows` now validates workflow names before
|
|
68
|
+
forwarding them to shell-backed `kettle-release` commands.
|
|
69
|
+
|
|
33
70
|
## [0.2.7] - 2026-07-15
|
|
34
71
|
|
|
35
72
|
- TAG: [v0.2.7][0.2.7t]
|
|
@@ -699,7 +736,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
699
736
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
700
737
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
701
738
|
|
|
702
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/
|
|
739
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.0.0...HEAD
|
|
740
|
+
[1.0.0]: https://github.com/kettle-dev/kettle-family/compare/v0.2.7...v1.0.0
|
|
741
|
+
[1.0.0t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.0.0
|
|
703
742
|
[0.2.7]: https://github.com/kettle-dev/kettle-family/compare/v0.2.6...v0.2.7
|
|
704
743
|
[0.2.7t]: https://github.com/kettle-dev/kettle-family/releases/tag/v0.2.7
|
|
705
744
|
[0.2.6]: https://github.com/kettle-dev/kettle-family/compare/v0.2.5...v0.2.6
|
data/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# 👩👩👧👧 Kettle::Family
|
|
4
4
|
|
|
5
|
-
[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: AGPL-3.0-only][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![
|
|
5
|
+
[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: AGPL-3.0-only][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf]
|
|
6
6
|
|
|
7
7
|
`if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][✉️discord-invite], as I may have missed the [discord notification][✉️discord-invite].
|
|
8
8
|
|
|
@@ -44,10 +44,7 @@ while RubyGems MFA prompts remain interactive.
|
|
|
44
44
|
|
|
45
45
|
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|
|
46
46
|
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
47
|
-
| Works with JRuby | [![JRuby 10.0 Compat][💎jruby-10.0i]][🚎jruby-10.0-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
|
|
48
|
-
| Works with Truffle Ruby | [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf]|
|
|
49
47
|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
|
|
50
|
-
| Works with MRI Ruby 3 | [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
|
|
51
48
|
| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
|
|
52
49
|
| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
|
|
53
50
|
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
|
|
@@ -58,8 +55,8 @@ while RubyGems MFA prompts remain interactive.
|
|
|
58
55
|
|
|
59
56
|
### Compatibility
|
|
60
57
|
|
|
61
|
-
Compatible with MRI Ruby
|
|
62
|
-
CI workflows and Appraisals are generated for MRI Ruby
|
|
58
|
+
Compatible with MRI Ruby 4.0.0+, and concordant releases of JRuby, and TruffleRuby.
|
|
59
|
+
CI workflows and Appraisals are generated for MRI Ruby 4.0.0+.
|
|
63
60
|
This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
|
|
64
61
|
may be higher than the gem's runtime compatibility floor when legacy Rubies are
|
|
65
62
|
not practical for the current toolchain.
|
|
@@ -220,6 +217,11 @@ release:
|
|
|
220
217
|
command: bundle exec kettle-changelog
|
|
221
218
|
```
|
|
222
219
|
|
|
220
|
+
For `changelog.mode: root`, release commands pass `K_CHANGELOG_GEM_NAME` as the
|
|
221
|
+
configured family name and `K_CHANGELOG_VERSION_FILE` when `version_file` is
|
|
222
|
+
configured, so `kettle-changelog` can operate from a repository root without a
|
|
223
|
+
root gemspec.
|
|
224
|
+
|
|
223
225
|
For a flat repository that releases from multiple long-lived branches, list the
|
|
224
226
|
release branches under `release.target_branches`. The branch list is processed
|
|
225
227
|
in order. Each branch must be clean enough for `git checkout`, and each branch
|
|
@@ -539,23 +541,12 @@ Thanks for RTFM. ☺️
|
|
|
539
541
|
[🏀codecovi]: https://codecov.io/gh/kettle-dev/kettle-family/graph/badge.svg
|
|
540
542
|
[🏀coveralls]: https://coveralls.io/github/kettle-dev/kettle-family?branch=main
|
|
541
543
|
[🏀coveralls-img]: https://coveralls.io/repos/github/kettle-dev/kettle-family/badge.svg?branch=main
|
|
542
|
-
[🚎ruby-3.2-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/ruby-3.2.yml
|
|
543
|
-
[🚎ruby-3.3-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/ruby-3.3.yml
|
|
544
|
-
[🚎ruby-3.4-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/ruby-3.4.yml
|
|
545
|
-
[🚎jruby-10.0-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/jruby-10.0.yml
|
|
546
|
-
[🚎truby-24.2-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/truffleruby-24.2.yml
|
|
547
|
-
[🚎truby-25.0-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/truffleruby-25.0.yml
|
|
548
|
-
[🚎truby-33.0-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/truffleruby-33.0.yml
|
|
549
544
|
[🚎2-cov-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/coverage.yml
|
|
550
545
|
[🚎2-cov-wfi]: https://github.com/kettle-dev/kettle-family/actions/workflows/coverage.yml/badge.svg
|
|
551
546
|
[🚎3-hd-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/heads.yml
|
|
552
547
|
[🚎3-hd-wfi]: https://github.com/kettle-dev/kettle-family/actions/workflows/heads.yml/badge.svg
|
|
553
548
|
[🚎5-st-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/style.yml
|
|
554
549
|
[🚎5-st-wfi]: https://github.com/kettle-dev/kettle-family/actions/workflows/style.yml/badge.svg
|
|
555
|
-
[🚎9-t-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/truffle.yml
|
|
556
|
-
[🚎9-t-wfi]: https://github.com/kettle-dev/kettle-family/actions/workflows/truffle.yml/badge.svg
|
|
557
|
-
[🚎10-j-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/jruby.yml
|
|
558
|
-
[🚎10-j-wfi]: https://github.com/kettle-dev/kettle-family/actions/workflows/jruby.yml/badge.svg
|
|
559
550
|
[🚎11-c-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/current.yml
|
|
560
551
|
[🚎11-c-wfi]: https://github.com/kettle-dev/kettle-family/actions/workflows/current.yml/badge.svg
|
|
561
552
|
[🚎12-crh-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/dep-heads.yml
|
|
@@ -564,19 +555,8 @@ Thanks for RTFM. ☺️
|
|
|
564
555
|
[🚎13-🔒️-wfi]: https://github.com/kettle-dev/kettle-family/actions/workflows/locked_deps.yml/badge.svg
|
|
565
556
|
[🚎14-🔓️-wf]: https://github.com/kettle-dev/kettle-family/actions/workflows/unlocked_deps.yml
|
|
566
557
|
[🚎14-🔓️-wfi]: https://github.com/kettle-dev/kettle-family/actions/workflows/unlocked_deps.yml/badge.svg
|
|
567
|
-
[💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
568
|
-
[💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
569
|
-
[💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
570
558
|
[💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
|
|
571
559
|
[💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
|
|
572
|
-
[💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
573
|
-
[💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
574
|
-
[💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
575
|
-
[💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
|
|
576
|
-
[💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
|
|
577
|
-
[💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
578
|
-
[💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
|
|
579
|
-
[💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
|
|
580
560
|
[🤝gh-issues]: https://github.com/kettle-dev/kettle-family/issues
|
|
581
561
|
[🤝gh-pulls]: https://github.com/kettle-dev/kettle-family/pulls
|
|
582
562
|
[🤝gl-issues]: https://gitlab.com/kettle-dev/kettle-family/-/issues
|
|
@@ -603,7 +583,7 @@ Thanks for RTFM. ☺️
|
|
|
603
583
|
[📌gitmoji]: https://gitmoji.dev
|
|
604
584
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
605
585
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
606
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-2.
|
|
586
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-2.489-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
607
587
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
608
588
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
609
589
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
data/lib/kettle/family/cli.rb
CHANGED
|
@@ -146,6 +146,7 @@ module Kettle
|
|
|
146
146
|
release_skip_steps: nil,
|
|
147
147
|
release_local_ci: false,
|
|
148
148
|
release_continue_ci_failures: false,
|
|
149
|
+
release_ci_workflows: nil,
|
|
149
150
|
release_skip_bundle_audit: false,
|
|
150
151
|
accept: true,
|
|
151
152
|
tag: false,
|
|
@@ -404,6 +405,7 @@ module Kettle
|
|
|
404
405
|
option :skip_steps, long: "--skip-steps", value: {type: String, usage: "LIST"}, desc: "Pass skip_steps=LIST through to kettle-release commands"
|
|
405
406
|
option :local_ci, long: "--local-ci", desc: "Pass --local-ci through to kettle-release commands"
|
|
406
407
|
option :continue_ci_failures, long: "--continue-ci-failures", desc: "Set K_RELEASE_CI_CONTINUE=true for release commands"
|
|
408
|
+
option :ci_workflows, long: "--ci-workflows", value: {type: String, usage: "LIST"}, desc: "Pass a comma-separated CI workflow monitor subset through to kettle-release commands"
|
|
407
409
|
option :skip_bundle_audit, long: "--skip-bundle-audit", desc: "Skip bundle:audit/update during release rake checks"
|
|
408
410
|
option :no_auto_floors, long: "--no-auto-floors", desc: "Do not raise family dependency floors between member releases" do
|
|
409
411
|
options[:no_auto_floors] = true
|
|
@@ -424,6 +426,7 @@ module Kettle
|
|
|
424
426
|
release_skip_steps: options[:skip_steps],
|
|
425
427
|
release_local_ci: truthy_option?(:local_ci),
|
|
426
428
|
release_continue_ci_failures: truthy_option?(:continue_ci_failures),
|
|
429
|
+
release_ci_workflows: options[:ci_workflows],
|
|
427
430
|
release_skip_bundle_audit: truthy_option?(:skip_bundle_audit),
|
|
428
431
|
release_auto_dependency_floors: !truthy_option?(:no_auto_floors),
|
|
429
432
|
accept: !options.key?(:accept) || options[:accept],
|
|
@@ -562,6 +565,7 @@ module Kettle
|
|
|
562
565
|
skip_steps: options[:release_skip_steps],
|
|
563
566
|
local_ci: options[:release_local_ci],
|
|
564
567
|
continue_ci_failures: options[:release_continue_ci_failures],
|
|
568
|
+
ci_workflows: options[:release_ci_workflows],
|
|
565
569
|
skip_bundle_audit: options[:release_skip_bundle_audit],
|
|
566
570
|
auto_dependency_floors: options[:release_auto_dependency_floors],
|
|
567
571
|
gha_sha_pins_upgrade: options[:gha_sha_pins_upgrade],
|
data/lib/kettle/family/config.rb
CHANGED
|
@@ -167,9 +167,11 @@ module Kettle
|
|
|
167
167
|
end
|
|
168
168
|
|
|
169
169
|
def changelog_env
|
|
170
|
-
|
|
170
|
+
env = {}
|
|
171
|
+
env["K_CHANGELOG_VERSION_FILE"] = changelog_version_file.to_s if changelog_version_file
|
|
172
|
+
env["K_CHANGELOG_GEM_NAME"] = family_name.to_s if shared_changelog?
|
|
171
173
|
|
|
172
|
-
|
|
174
|
+
env
|
|
173
175
|
end
|
|
174
176
|
|
|
175
177
|
def template_command
|
|
@@ -80,27 +80,56 @@ module Kettle
|
|
|
80
80
|
parse_result = with_dev_errors { Kettle::Dev::VersionBump.parse_source(source, member.gemspec_path) }
|
|
81
81
|
|
|
82
82
|
Kettle::Dev::VersionBump.each_node(parse_result.value).filter_map do |node|
|
|
83
|
-
dependency_edit_for(member
|
|
83
|
+
dependency_edit_for(member, source, node)
|
|
84
84
|
end
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
-
def dependency_edit_for(
|
|
87
|
+
def dependency_edit_for(member, source, node)
|
|
88
88
|
return unless node.is_a?(Prism::CallNode) && DEPENDENCY_METHODS.include?(node.name)
|
|
89
89
|
|
|
90
90
|
args = node.arguments&.arguments || []
|
|
91
91
|
name_node, requirement_node = args
|
|
92
92
|
return unless name_node.is_a?(Prism::StringNode) && member_names.include?(name_node.unescaped)
|
|
93
93
|
return unless requirement_node
|
|
94
|
-
|
|
94
|
+
dependency_target_version = member_target_versions.fetch(name_node.unescaped)
|
|
95
|
+
if same_version_dependency_requirement?(node, requirement_node)
|
|
96
|
+
return if dependency_target_version == target_version_for(member)
|
|
97
|
+
|
|
98
|
+
raise Error, "dynamic family dependency #{name_node.unescaped.inspect} in #{member.gemspec_path} uses #{call_receiver_name(node)}.version, but target version is #{dependency_target_version}"
|
|
99
|
+
end
|
|
100
|
+
raise Error, "unsupported dynamic family dependency #{name_node.unescaped.inspect} in #{member.gemspec_path}" unless requirement_node.is_a?(Prism::StringNode)
|
|
95
101
|
|
|
96
102
|
current = requirement_node.unescaped
|
|
97
|
-
dependency_target_version = member_target_versions.fetch(name_node.unescaped)
|
|
98
103
|
exact_prefix = "= "
|
|
99
104
|
return unless current.start_with?(exact_prefix)
|
|
100
105
|
return if current == "#{exact_prefix}#{dependency_target_version}"
|
|
101
106
|
|
|
102
107
|
replacement = Kettle::Dev::VersionBump.quote_like(requirement_node.location.slice, "#{exact_prefix}#{dependency_target_version}")
|
|
103
|
-
Kettle::Dev::VersionBump.file_edit(
|
|
108
|
+
Kettle::Dev::VersionBump.file_edit(member.gemspec_path, source, requirement_node.location.start_offset, requirement_node.location.end_offset, replacement)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def same_version_dependency_requirement?(dependency_call_node, requirement_node)
|
|
112
|
+
return false unless requirement_node.is_a?(Prism::InterpolatedStringNode)
|
|
113
|
+
|
|
114
|
+
literal_prefix, embedded_version = requirement_node.parts
|
|
115
|
+
return false unless literal_prefix.is_a?(Prism::StringNode) && literal_prefix.unescaped == "= "
|
|
116
|
+
return false unless embedded_version.is_a?(Prism::EmbeddedStatementsNode)
|
|
117
|
+
|
|
118
|
+
statements = embedded_version.statements&.body || []
|
|
119
|
+
return false unless statements.length == 1
|
|
120
|
+
|
|
121
|
+
version_call = statements.first
|
|
122
|
+
version_call.is_a?(Prism::CallNode) &&
|
|
123
|
+
version_call.name == :version &&
|
|
124
|
+
call_receiver_name(version_call) == call_receiver_name(dependency_call_node)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def call_receiver_name(node)
|
|
128
|
+
receiver = node.receiver
|
|
129
|
+
return unless receiver
|
|
130
|
+
return receiver.name.to_s if receiver.respond_to?(:name)
|
|
131
|
+
|
|
132
|
+
receiver.location.slice
|
|
104
133
|
end
|
|
105
134
|
|
|
106
135
|
def target_version_for(member)
|
|
@@ -46,7 +46,7 @@ module Kettle
|
|
|
46
46
|
REGISTRY_WAIT_ATTEMPTS = 15
|
|
47
47
|
REGISTRY_WAIT_INTERVAL_SECONDS = 15
|
|
48
48
|
|
|
49
|
-
def initialize(command:, config:, members:, execute: false, accept: true, commit: true, allow_dirty: false, publish: false, push: false, tag: false, start_step: nil, skip_steps: nil, local_ci: false, continue_ci_failures: false, skip_bundle_audit: false, auto_dependency_floors: nil, gha_sha_pins_upgrade: "patch", gha_sha_pins_check: false, env_overrides: {}, debug: false, gem_signing_password: nil, jobs: nil, progress_io: nil, bup_args: [], bex_args: [], start_member: nil, start_branch: nil)
|
|
49
|
+
def initialize(command:, config:, members:, execute: false, accept: true, commit: true, allow_dirty: false, publish: false, push: false, tag: false, start_step: nil, skip_steps: nil, local_ci: false, continue_ci_failures: false, ci_workflows: nil, skip_bundle_audit: false, auto_dependency_floors: nil, gha_sha_pins_upgrade: "patch", gha_sha_pins_check: false, env_overrides: {}, debug: false, gem_signing_password: nil, jobs: nil, progress_io: nil, bup_args: [], bex_args: [], start_member: nil, start_branch: nil, **options)
|
|
50
50
|
@command = command
|
|
51
51
|
@config = config
|
|
52
52
|
@members = members
|
|
@@ -61,6 +61,7 @@ module Kettle
|
|
|
61
61
|
@skip_steps = skip_steps
|
|
62
62
|
@local_ci = local_ci
|
|
63
63
|
@continue_ci_failures = continue_ci_failures
|
|
64
|
+
@ci_workflows = validate_ci_workflows(ci_workflows)
|
|
64
65
|
@skip_bundle_audit = skip_bundle_audit
|
|
65
66
|
@auto_dependency_floors = auto_dependency_floors.nil? ? config.release_auto_dependency_floors? : auto_dependency_floors
|
|
66
67
|
@gha_sha_pins_upgrade = gha_sha_pins_upgrade
|
|
@@ -89,7 +90,7 @@ module Kettle
|
|
|
89
90
|
|
|
90
91
|
private
|
|
91
92
|
|
|
92
|
-
attr_reader :command, :config, :members, :execute, :accept, :commit, :allow_dirty, :publish, :push, :tag, :start_step, :skip_steps, :local_ci, :continue_ci_failures, :skip_bundle_audit, :auto_dependency_floors, :gha_sha_pins_upgrade, :gha_sha_pins_check, :env_overrides, :debug, :jobs, :progress_io, :bup_args, :bex_args, :start_member, :start_branch
|
|
93
|
+
attr_reader :command, :config, :members, :execute, :accept, :commit, :allow_dirty, :publish, :push, :tag, :start_step, :skip_steps, :local_ci, :continue_ci_failures, :ci_workflows, :skip_bundle_audit, :auto_dependency_floors, :gha_sha_pins_upgrade, :gha_sha_pins_check, :env_overrides, :debug, :jobs, :progress_io, :bup_args, :bex_args, :start_member, :start_branch
|
|
93
94
|
|
|
94
95
|
def current_branch_results(workflow_members)
|
|
95
96
|
return check_results(workflow_members) if command == "check"
|
|
@@ -290,6 +291,7 @@ module Kettle
|
|
|
290
291
|
skip_steps: skip_steps,
|
|
291
292
|
local_ci: local_ci,
|
|
292
293
|
continue_ci_failures: continue_ci_failures,
|
|
294
|
+
ci_workflows: ci_workflows,
|
|
293
295
|
skip_bundle_audit: skip_bundle_audit,
|
|
294
296
|
auto_dependency_floors: auto_dependency_floors,
|
|
295
297
|
gha_sha_pins_upgrade: gha_sha_pins_upgrade,
|
|
@@ -641,6 +643,7 @@ module Kettle
|
|
|
641
643
|
args = []
|
|
642
644
|
args << "start_step=#{start_step}" if start_step
|
|
643
645
|
args << "skip_steps=#{skip_steps}" if skip_steps && !skip_steps.to_s.empty?
|
|
646
|
+
args << "--ci-workflows=#{ci_workflows}" if ci_workflows && !ci_workflows.to_s.empty?
|
|
644
647
|
args << "--local-ci" if local_ci
|
|
645
648
|
args << "--skip-bundle-audit" if skip_bundle_audit
|
|
646
649
|
return command if args.empty?
|
|
@@ -648,6 +651,16 @@ module Kettle
|
|
|
648
651
|
command.is_a?(Array) ? [*command, *args] : "#{command} #{args.join(" ")}"
|
|
649
652
|
end
|
|
650
653
|
|
|
654
|
+
def validate_ci_workflows(value)
|
|
655
|
+
return nil if value.nil? || value.to_s.empty?
|
|
656
|
+
|
|
657
|
+
workflows = value.to_s.split(",").map(&:strip)
|
|
658
|
+
invalid = workflows.find { |workflow| workflow.empty? || !workflow.match?(/\A[A-Za-z0-9_.\/-]+\z/) }
|
|
659
|
+
raise Error, "invalid --ci-workflows value #{value.inspect}" if invalid
|
|
660
|
+
|
|
661
|
+
workflows.join(",")
|
|
662
|
+
end
|
|
663
|
+
|
|
651
664
|
def release_env
|
|
652
665
|
env = base_release_env
|
|
653
666
|
env.merge!(env_overrides)
|
|
@@ -659,6 +672,7 @@ module Kettle
|
|
|
659
672
|
env["KETTLE_FAMILY_CONFIG"] = config.path if config.path
|
|
660
673
|
env.merge!(TEMPLATE_QUIET_ENV) unless debug
|
|
661
674
|
env["K_RELEASE_CI_CONTINUE"] = "true" if continue_ci_failures
|
|
675
|
+
env["K_RELEASE_CI_WORKFLOWS"] = ci_workflows if ci_workflows && !ci_workflows.to_s.empty?
|
|
662
676
|
env["KETTLE_DEV_SKIP_BUNDLE_AUDIT"] = "true" if skip_bundle_audit
|
|
663
677
|
env
|
|
664
678
|
end
|
data/sig/kettle/family.rbs
CHANGED
|
@@ -1,5 +1,72 @@
|
|
|
1
1
|
module Kettle
|
|
2
2
|
module Family
|
|
3
3
|
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
4
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
5
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
6
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
7
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
8
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
9
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
10
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
11
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
12
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
13
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
14
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
15
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
16
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
17
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
18
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
19
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
20
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
21
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
22
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
23
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
24
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
25
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
26
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
27
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
28
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
29
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
30
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
31
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
32
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
33
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
34
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
35
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
36
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
37
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
38
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
39
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
40
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
41
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
42
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
43
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
44
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
45
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
46
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
47
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
48
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
49
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
50
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
51
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
52
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
53
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
54
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
55
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
56
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
57
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
58
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
59
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
60
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
61
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
62
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
63
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
64
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
65
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
66
|
+
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
67
|
+
module Version
|
|
68
|
+
VERSION: String
|
|
69
|
+
end
|
|
70
|
+
VERSION: String
|
|
4
71
|
end
|
|
5
72
|
end
|
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: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -74,7 +74,7 @@ dependencies:
|
|
|
74
74
|
version: '2.3'
|
|
75
75
|
- - ">="
|
|
76
76
|
- !ruby/object:Gem::Version
|
|
77
|
-
version: 2.3.
|
|
77
|
+
version: 2.3.4
|
|
78
78
|
type: :runtime
|
|
79
79
|
prerelease: false
|
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -84,7 +84,27 @@ dependencies:
|
|
|
84
84
|
version: '2.3'
|
|
85
85
|
- - ">="
|
|
86
86
|
- !ruby/object:Gem::Version
|
|
87
|
-
version: 2.3.
|
|
87
|
+
version: 2.3.4
|
|
88
|
+
- !ruby/object:Gem::Dependency
|
|
89
|
+
name: kettle-test
|
|
90
|
+
requirement: !ruby/object:Gem::Requirement
|
|
91
|
+
requirements:
|
|
92
|
+
- - "~>"
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '2.0'
|
|
95
|
+
- - ">="
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: 2.0.10
|
|
98
|
+
type: :runtime
|
|
99
|
+
prerelease: false
|
|
100
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
101
|
+
requirements:
|
|
102
|
+
- - "~>"
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
104
|
+
version: '2.0'
|
|
105
|
+
- - ">="
|
|
106
|
+
- !ruby/object:Gem::Version
|
|
107
|
+
version: 2.0.10
|
|
88
108
|
- !ruby/object:Gem::Dependency
|
|
89
109
|
name: tsort
|
|
90
110
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -167,26 +187,6 @@ dependencies:
|
|
|
167
187
|
- - ">="
|
|
168
188
|
- !ruby/object:Gem::Version
|
|
169
189
|
version: 3.1.4
|
|
170
|
-
- !ruby/object:Gem::Dependency
|
|
171
|
-
name: kettle-test
|
|
172
|
-
requirement: !ruby/object:Gem::Requirement
|
|
173
|
-
requirements:
|
|
174
|
-
- - "~>"
|
|
175
|
-
- !ruby/object:Gem::Version
|
|
176
|
-
version: '2.0'
|
|
177
|
-
- - ">="
|
|
178
|
-
- !ruby/object:Gem::Version
|
|
179
|
-
version: 2.0.10
|
|
180
|
-
type: :development
|
|
181
|
-
prerelease: false
|
|
182
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
183
|
-
requirements:
|
|
184
|
-
- - "~>"
|
|
185
|
-
- !ruby/object:Gem::Version
|
|
186
|
-
version: '2.0'
|
|
187
|
-
- - ">="
|
|
188
|
-
- !ruby/object:Gem::Version
|
|
189
|
-
version: 2.0.10
|
|
190
190
|
- !ruby/object:Gem::Dependency
|
|
191
191
|
name: turbo_tests2
|
|
192
192
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -196,7 +196,7 @@ dependencies:
|
|
|
196
196
|
version: '3.1'
|
|
197
197
|
- - ">="
|
|
198
198
|
- !ruby/object:Gem::Version
|
|
199
|
-
version: 3.1.
|
|
199
|
+
version: 3.1.14
|
|
200
200
|
type: :development
|
|
201
201
|
prerelease: false
|
|
202
202
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -206,7 +206,7 @@ dependencies:
|
|
|
206
206
|
version: '3.1'
|
|
207
207
|
- - ">="
|
|
208
208
|
- !ruby/object:Gem::Version
|
|
209
|
-
version: 3.1.
|
|
209
|
+
version: 3.1.14
|
|
210
210
|
- !ruby/object:Gem::Dependency
|
|
211
211
|
name: ruby-progressbar
|
|
212
212
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -268,28 +268,11 @@ email:
|
|
|
268
268
|
executables:
|
|
269
269
|
- kettle-family
|
|
270
270
|
extensions: []
|
|
271
|
-
extra_rdoc_files:
|
|
272
|
-
- CHANGELOG.md
|
|
273
|
-
- CITATION.cff
|
|
274
|
-
- CODE_OF_CONDUCT.md
|
|
275
|
-
- CONTRIBUTING.md
|
|
276
|
-
- FUNDING.md
|
|
277
|
-
- LICENSE.md
|
|
278
|
-
- README.md
|
|
279
|
-
- RUBOCOP.md
|
|
280
|
-
- SECURITY.md
|
|
271
|
+
extra_rdoc_files: []
|
|
281
272
|
files:
|
|
282
|
-
- AGPL-3.0-only.md
|
|
283
273
|
- CHANGELOG.md
|
|
284
|
-
- CITATION.cff
|
|
285
|
-
- CODE_OF_CONDUCT.md
|
|
286
|
-
- CONTRIBUTING.md
|
|
287
|
-
- FUNDING.md
|
|
288
274
|
- LICENSE.md
|
|
289
275
|
- README.md
|
|
290
|
-
- RUBOCOP.md
|
|
291
|
-
- SECURITY.md
|
|
292
|
-
- certs/pboling.pem
|
|
293
276
|
- exe/kettle-family
|
|
294
277
|
- lib/kettle/family.rb
|
|
295
278
|
- lib/kettle/family/branch_lane_audit.rb
|
|
@@ -315,16 +298,15 @@ files:
|
|
|
315
298
|
- lib/kettle/family/version_gem.rb
|
|
316
299
|
- lib/kettle/family/workflow.rb
|
|
317
300
|
- sig/kettle/family.rbs
|
|
318
|
-
- sig/kettle/family/version.rbs
|
|
319
301
|
homepage: https://github.com/kettle-dev/kettle-family
|
|
320
302
|
licenses:
|
|
321
303
|
- AGPL-3.0-only
|
|
322
304
|
metadata:
|
|
323
305
|
homepage_uri: https://kettle-family.galtzo.com
|
|
324
|
-
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/
|
|
325
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/
|
|
306
|
+
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.0.0
|
|
307
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.0.0/CHANGELOG.md
|
|
326
308
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
|
|
327
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.
|
|
309
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.0.0
|
|
328
310
|
funding_uri: https://github.com/sponsors/pboling
|
|
329
311
|
wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
|
|
330
312
|
news_uri: https://www.railsbling.com/tags/kettle-family
|
|
@@ -347,7 +329,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
347
329
|
requirements:
|
|
348
330
|
- - ">="
|
|
349
331
|
- !ruby/object:Gem::Version
|
|
350
|
-
version:
|
|
332
|
+
version: 4.0.0
|
|
351
333
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
352
334
|
requirements:
|
|
353
335
|
- - ">="
|
metadata.gz.sig
CHANGED
|
Binary file
|