kettle-family 1.2.63 → 1.2.64
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 +26 -1
- data/README.md +12 -7
- data/lib/kettle/family/cli.rb +4 -0
- data/lib/kettle/family/config.rb +4 -0
- data/lib/kettle/family/selection.rb +10 -2
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +116 -20
- data.tar.gz.sig +0 -0
- metadata +6 -6
- 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: 8f4a6c96b0c56553af85dc48776c9ef380f6fd5800a1f30a43c9d2248fba4808
|
|
4
|
+
data.tar.gz: 55e68a0f07097017844c35ba1b071fe6d2bcb989a7e054e6e0ec4e7efed78d32
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: aeab70a0e11ad88e43c23de8b0f408006de80a0e551612d777649c159d8ef869fe711a593d0b19706d12df94e17d6dc15fb532b9043a2f67092acf81e71ffd76
|
|
7
|
+
data.tar.gz: b23ee38b5cd4e71d766fdbcf8543a5a59fcb8a6b7502014f2daea60d47651f02159f0aecf8632f13f3d428bcc17c26ba6678fcffa073672dd34fc6ed07bbfbc0
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,29 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [1.2.64] - 2026-08-29
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.2.64][1.2.64t]
|
|
36
|
+
- COVERAGE: 93.10% -- 5383/5782 lines in 33 files
|
|
37
|
+
- BRANCH COVERAGE: 76.04% -- 2171/2855 branches in 33 files
|
|
38
|
+
- 30.00% documented
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- Make temporary CI/Appraisal dependency-bundle validation opt-in with release.validate_ci_bundles or --validate-ci-bundles.
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- Avoid refreshing inactive conditional Gemfile dependencies during release lockfile reconciliation.
|
|
47
|
+
|
|
48
|
+
- Avoid probing inactive conditional Gemfile dependencies before release reconciliation.
|
|
49
|
+
|
|
50
|
+
- Show dependency-floor reconciliation retries before release waves begin.
|
|
51
|
+
|
|
52
|
+
- Refresh each CI dependency bundle only for family dependencies declared by that bundle.
|
|
53
|
+
|
|
54
|
+
- Validate mixed release-state selectors before probing member release state.
|
|
55
|
+
|
|
33
56
|
## [1.2.63] - 2026-08-28
|
|
34
57
|
|
|
35
58
|
- TAG: [v1.2.63][1.2.63t]
|
|
@@ -2245,7 +2268,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
2245
2268
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
2246
2269
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
2247
2270
|
|
|
2248
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.
|
|
2271
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.64...HEAD
|
|
2272
|
+
[1.2.64]: https://github.com/kettle-dev/kettle-family/compare/v1.2.63...v1.2.64
|
|
2273
|
+
[1.2.64t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.64
|
|
2249
2274
|
[1.2.63]: https://github.com/kettle-dev/kettle-family/compare/v1.2.62...v1.2.63
|
|
2250
2275
|
[1.2.63t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.63
|
|
2251
2276
|
[1.2.62]: https://github.com/kettle-dev/kettle-family/compare/v1.2.61...v1.2.62
|
data/README.md
CHANGED
|
@@ -284,12 +284,17 @@ bundle lock --update RELEASED_MEMBER_NAMES --add-checksums
|
|
|
284
284
|
|
|
285
285
|
It then installs that exact locked bundle before starting the dependent release.
|
|
286
286
|
|
|
287
|
-
The
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
287
|
+
The root lockfile refresh and dependency-floor changes are committed before
|
|
288
|
+
that member's release starts, so later waves test and publish against the
|
|
289
|
+
versions produced by earlier waves rather than stale published versions. A
|
|
290
|
+
resumed `--only pend` publish also reconciles family dependencies that were
|
|
291
|
+
published by an earlier invocation.
|
|
292
|
+
|
|
293
|
+
Use `--validate-ci-bundles` (or `release.validate_ci_bundles: true`) to also
|
|
294
|
+
resolve each CI/Appraisal Gemfile into a temporary lockfile after the root
|
|
295
|
+
refresh. These temporary lockfiles are not committed; this is an optional
|
|
296
|
+
early registry-resolution gate for coordinated releases where waiting for CI
|
|
297
|
+
would be too late to discover an incompatible dependency floor.
|
|
293
298
|
|
|
294
299
|
This propagation runs for `kettle-family release --execute --publish` when
|
|
295
300
|
`release.auto_dependency_floors` is enabled (the default). It is distinct from
|
|
@@ -975,7 +980,7 @@ Thanks for RTFM. ☺️
|
|
|
975
980
|
[📌gitmoji]: https://gitmoji.dev
|
|
976
981
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
977
982
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
978
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-5.
|
|
983
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-5.782-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
979
984
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
980
985
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
981
986
|
[📄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
|
@@ -547,6 +547,7 @@ module Kettle
|
|
|
547
547
|
option :no_auto_floors, long: "--no-auto-floors", desc: "Do not raise family dependency floors between member releases" do
|
|
548
548
|
options[:no_auto_floors] = true
|
|
549
549
|
end
|
|
550
|
+
option :validate_ci_bundles, long: "--validate-ci-bundles", desc: "Validate temporary CI/Appraisal bundle locks after dependency-floor refreshes"
|
|
550
551
|
option :accept, desc: "Answer yes to confirmation prompts in interactive commands"
|
|
551
552
|
option :no_accept, long: "--no-accept", desc: "Wait for user input at confirmation prompts" do
|
|
552
553
|
options[:accept] = false
|
|
@@ -573,6 +574,7 @@ module Kettle
|
|
|
573
574
|
release_required_remotes: options[:required_remotes],
|
|
574
575
|
release_secrets_provider: options[:secrets_provider],
|
|
575
576
|
release_auto_dependency_floors: !truthy_option?(:no_auto_floors),
|
|
577
|
+
release_validate_ci_bundles: truthy_option?(:validate_ci_bundles),
|
|
576
578
|
accept: !options.key?(:accept) || options[:accept],
|
|
577
579
|
tag: truthy_option?(:tag),
|
|
578
580
|
push: truthy_option?(:push)
|
|
@@ -685,6 +687,7 @@ module Kettle
|
|
|
685
687
|
Orderer.new(members: members, mode: config.order_mode, hints: config.order_hints).ordered
|
|
686
688
|
end
|
|
687
689
|
state_event_tape = release_state_event_tape(command: command, config: config, options: options)
|
|
690
|
+
Selection.validate_release_state_only_filter!(effective_only)
|
|
688
691
|
release_state_results = release_state_results_for_selection(config: config, members: ordered, only: effective_only, jobs: options[:jobs])
|
|
689
692
|
selected = Selection.new(
|
|
690
693
|
members: ordered,
|
|
@@ -849,6 +852,7 @@ module Kettle
|
|
|
849
852
|
required_remotes: options[:release_required_remotes],
|
|
850
853
|
secrets_provider: release_secrets_provider(command: command, config: config, options: options),
|
|
851
854
|
auto_dependency_floors: options[:release_auto_dependency_floors],
|
|
855
|
+
validate_ci_bundles: options[:release_validate_ci_bundles],
|
|
852
856
|
gha_sha_pins_upgrade: options[:gha_sha_pins_upgrade],
|
|
853
857
|
gha_sha_pins_check: options[:check],
|
|
854
858
|
gha_sha_pins_ttl_days: options[:gha_sha_pins_ttl_days],
|
data/lib/kettle/family/config.rb
CHANGED
|
@@ -284,6 +284,10 @@ module Kettle
|
|
|
284
284
|
fetch_path("release", "auto_dependency_floors") != false
|
|
285
285
|
end
|
|
286
286
|
|
|
287
|
+
def release_validate_ci_bundles?
|
|
288
|
+
fetch_path("release", "validate_ci_bundles") == true
|
|
289
|
+
end
|
|
290
|
+
|
|
287
291
|
def release_family_changelog?
|
|
288
292
|
fetch_path("release", "family_changelog", "enabled") == true
|
|
289
293
|
end
|
|
@@ -21,6 +21,15 @@ module Kettle
|
|
|
21
21
|
STATUS_TOKEN_KEYS.key?(value.to_s)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
+
def self.validate_release_state_only_filter!(only)
|
|
25
|
+
names = only.to_s.split(",").map(&:strip).reject(&:empty?)
|
|
26
|
+
status_tokens = names.select { |name| status_token?(name) }
|
|
27
|
+
return if status_tokens.empty?
|
|
28
|
+
|
|
29
|
+
member_names = names - status_tokens
|
|
30
|
+
raise Error, "--only release-state tokens cannot be combined with member names: #{member_names.join(", ")}" unless member_names.empty?
|
|
31
|
+
end
|
|
32
|
+
|
|
24
33
|
def initialize(members:, release_state_results: nil, shared_version: false)
|
|
25
34
|
@members = members
|
|
26
35
|
@release_state_results = release_state_results
|
|
@@ -47,8 +56,7 @@ module Kettle
|
|
|
47
56
|
|
|
48
57
|
status_tokens = names.select { |name| self.class.status_token?(name) }
|
|
49
58
|
unless status_tokens.empty?
|
|
50
|
-
|
|
51
|
-
raise Error, "--only release-state tokens cannot be combined with member names: #{member_names.join(", ")}" unless member_names.empty?
|
|
59
|
+
self.class.validate_release_state_only_filter!(only)
|
|
52
60
|
|
|
53
61
|
return select_release_state_status(selected, status_tokens)
|
|
54
62
|
end
|
|
@@ -5,7 +5,7 @@ module Kettle
|
|
|
5
5
|
# Version namespace for this gem.
|
|
6
6
|
module Version
|
|
7
7
|
# Current gem version.
|
|
8
|
-
VERSION = "1.2.
|
|
8
|
+
VERSION = "1.2.64"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
@@ -106,7 +106,7 @@ module Kettle
|
|
|
106
106
|
REGISTRY_WAIT_ATTEMPTS = 15
|
|
107
107
|
REGISTRY_WAIT_INTERVAL_SECONDS = 15
|
|
108
108
|
|
|
109
|
-
def initialize(command:, config:, members:, family_members: nil, execute: false, accept: true, commit: true, allow_dirty: false, autostash: true, template_cleanup: true, publish: false, push: false, tag: false, start_step: nil, skip_steps: nil, fast_recovery: nil, fast_recovery_members: nil, skip_ci: false, skip_changelog: false, local_ci: false, continue_ci_failures: false, ci_workflows: nil, skip_bundle_audit: false, skip_remotes: nil, required_remotes: nil, auto_dependency_floors: nil, gha_sha_pins_upgrade: "patch", gha_sha_pins_check: false, gha_sha_pins_ttl_days: nil, env_overrides: {}, debug: false, verbose: false, gem_signing_password: nil, secrets_provider: nil, jobs: nil, progress_io: nil, reset_target: nil, bup_args: [], bex_args: [], start_member: nil, start_branch: nil, **options)
|
|
109
|
+
def initialize(command:, config:, members:, family_members: nil, execute: false, accept: true, commit: true, allow_dirty: false, autostash: true, template_cleanup: true, publish: false, push: false, tag: false, start_step: nil, skip_steps: nil, fast_recovery: nil, fast_recovery_members: nil, skip_ci: false, skip_changelog: false, local_ci: false, continue_ci_failures: false, ci_workflows: nil, skip_bundle_audit: false, skip_remotes: nil, required_remotes: nil, auto_dependency_floors: nil, validate_ci_bundles: nil, gha_sha_pins_upgrade: "patch", gha_sha_pins_check: false, gha_sha_pins_ttl_days: nil, env_overrides: {}, debug: false, verbose: false, gem_signing_password: nil, secrets_provider: nil, jobs: nil, progress_io: nil, reset_target: nil, bup_args: [], bex_args: [], start_member: nil, start_branch: nil, **options)
|
|
110
110
|
@command = command
|
|
111
111
|
@config = config
|
|
112
112
|
@members = members
|
|
@@ -143,6 +143,7 @@ module Kettle
|
|
|
143
143
|
@skip_remotes = validate_remote_list(skip_remotes, "--skip-remotes")
|
|
144
144
|
@required_remotes = validate_remote_list(required_remotes.nil? ? config.release_required_remotes : required_remotes, "--required-remotes")
|
|
145
145
|
@auto_dependency_floors = auto_dependency_floors.nil? ? config.release_auto_dependency_floors? : auto_dependency_floors
|
|
146
|
+
@validate_ci_bundles = validate_ci_bundles.nil? ? config.release_validate_ci_bundles? : validate_ci_bundles
|
|
146
147
|
@gha_sha_pins_upgrade = gha_sha_pins_upgrade
|
|
147
148
|
@gha_sha_pins_check = gha_sha_pins_check
|
|
148
149
|
@gha_sha_pins_ttl_days = gha_sha_pins_ttl_days.nil? ? 1.0 : gha_sha_pins_ttl_days.to_f
|
|
@@ -204,7 +205,7 @@ module Kettle
|
|
|
204
205
|
execute && release_command_delegates_secrets_to_kettle_release?
|
|
205
206
|
end
|
|
206
207
|
|
|
207
|
-
attr_reader :command, :config, :members, :family_members, :execute, :accept, :commit, :allow_dirty, :autostash, :template_cleanup, :publish, :push, :tag, :start_step, :skip_steps, :fast_recovery, :fast_recovery_members, :skip_ci, :skip_changelog, :local_ci, :continue_ci_failures, :ci_workflows, :skip_bundle_audit, :skip_remotes, :required_remotes, :auto_dependency_floors, :gha_sha_pins_upgrade, :gha_sha_pins_check, :gha_sha_pins_ttl_days, :env_overrides, :debug, :verbose, :jobs, :progress_io, :reset_target, :bup_args, :bex_args, :start_member, :start_branch
|
|
208
|
+
attr_reader :command, :config, :members, :family_members, :execute, :accept, :commit, :allow_dirty, :autostash, :template_cleanup, :publish, :push, :tag, :start_step, :skip_steps, :fast_recovery, :fast_recovery_members, :skip_ci, :skip_changelog, :local_ci, :continue_ci_failures, :ci_workflows, :skip_bundle_audit, :skip_remotes, :required_remotes, :auto_dependency_floors, :validate_ci_bundles, :gha_sha_pins_upgrade, :gha_sha_pins_check, :gha_sha_pins_ttl_days, :env_overrides, :debug, :verbose, :jobs, :progress_io, :reset_target, :bup_args, :bex_args, :start_member, :start_branch
|
|
208
209
|
|
|
209
210
|
def template_with_worktree_sync_results
|
|
210
211
|
runner = command_runner
|
|
@@ -1461,14 +1462,43 @@ module Kettle
|
|
|
1461
1462
|
published_members = published_family_dependencies_for(release_members)
|
|
1462
1463
|
return [] if published_members.empty?
|
|
1463
1464
|
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1465
|
+
with_dependency_floor_progress(release_members) do
|
|
1466
|
+
results = []
|
|
1467
|
+
append_dependency_floor_results(
|
|
1468
|
+
released_members: published_members,
|
|
1469
|
+
dependent_members: release_members,
|
|
1470
|
+
runner: release_command_runner,
|
|
1471
|
+
memo: results
|
|
1472
|
+
)
|
|
1473
|
+
results
|
|
1474
|
+
end
|
|
1475
|
+
end
|
|
1476
|
+
|
|
1477
|
+
# Startup reconciliation happens before release waves initialize their
|
|
1478
|
+
# progress renderer. Give its retrying Bundler work a dedicated renderer
|
|
1479
|
+
# so registry propagation is visible instead of appearing hung.
|
|
1480
|
+
def with_dependency_floor_progress(release_members)
|
|
1481
|
+
return yield if @release_progress
|
|
1482
|
+
|
|
1483
|
+
progress = start_dependency_floor_progress(release_members)
|
|
1484
|
+
@release_progress = progress
|
|
1485
|
+
yield
|
|
1486
|
+
ensure
|
|
1487
|
+
progress&.finish
|
|
1488
|
+
@release_progress = nil if progress
|
|
1489
|
+
end
|
|
1490
|
+
|
|
1491
|
+
def start_dependency_floor_progress(release_members)
|
|
1492
|
+
progress = WorkflowProgress.new(
|
|
1493
|
+
io: progress_io,
|
|
1494
|
+
label: "reconciling dependency floors for",
|
|
1495
|
+
total: release_members.length,
|
|
1496
|
+
jobs: 1,
|
|
1497
|
+
members: release_members
|
|
1470
1498
|
)
|
|
1471
|
-
|
|
1499
|
+
progress.start
|
|
1500
|
+
release_members.each { |member| progress.start_member(member, total: 0, status: "dependency floors") }
|
|
1501
|
+
progress
|
|
1472
1502
|
end
|
|
1473
1503
|
|
|
1474
1504
|
# A resumed --only pend release no longer includes members that finished
|
|
@@ -1476,7 +1506,9 @@ module Kettle
|
|
|
1476
1506
|
# next release wave so those already-published versions still update
|
|
1477
1507
|
# sibling floors and lockfiles.
|
|
1478
1508
|
def published_family_dependencies_for(release_members)
|
|
1479
|
-
dependency_names = release_members.flat_map
|
|
1509
|
+
dependency_names = release_members.flat_map do |member|
|
|
1510
|
+
publish ? active_release_dependency_names(member) : release_dependency_names(member)
|
|
1511
|
+
end.uniq
|
|
1480
1512
|
family_members_by_name = family_members.to_h { |member| [member.name, member] }
|
|
1481
1513
|
dependency_names.filter_map do |dependency_name|
|
|
1482
1514
|
member = family_members_by_name[dependency_name]
|
|
@@ -1497,6 +1529,14 @@ module Kettle
|
|
|
1497
1529
|
lockfile_ready_dependent_members = affected_dependent_members.select do |member|
|
|
1498
1530
|
dependency_floor_refresh_ready?(member, released_members: released_members)
|
|
1499
1531
|
end
|
|
1532
|
+
lockfile_refresh_members = if execute && publish
|
|
1533
|
+
lockfile_ready_dependent_members.filter_map do |member|
|
|
1534
|
+
active_released_members = active_release_dependencies_for(member, released_members)
|
|
1535
|
+
[member, active_released_members] unless active_released_members.empty?
|
|
1536
|
+
end
|
|
1537
|
+
else
|
|
1538
|
+
[]
|
|
1539
|
+
end
|
|
1500
1540
|
floor_results = DependencyFloor.new(
|
|
1501
1541
|
released_members: released_members,
|
|
1502
1542
|
dependent_members: dependent_members,
|
|
@@ -1505,16 +1545,18 @@ module Kettle
|
|
|
1505
1545
|
memo.concat(floor_results)
|
|
1506
1546
|
return if floor_results.any? && !floor_results.all?(&:ok?)
|
|
1507
1547
|
|
|
1508
|
-
append_dependency_floor_lockfile_results(
|
|
1548
|
+
append_dependency_floor_lockfile_results(dependent_members: lockfile_refresh_members, runner: runner, memo: memo)
|
|
1509
1549
|
return if memo.any? && !memo.last.ok?
|
|
1510
1550
|
|
|
1511
|
-
append_dependency_floor_bundle_install_results(dependent_members:
|
|
1551
|
+
append_dependency_floor_bundle_install_results(dependent_members: lockfile_refresh_members.map(&:first), runner: runner, memo: memo)
|
|
1512
1552
|
return if memo.any? && !memo.last.ok?
|
|
1513
1553
|
|
|
1514
|
-
|
|
1515
|
-
|
|
1554
|
+
if validate_ci_bundles
|
|
1555
|
+
append_dependency_floor_ci_bundle_results(dependent_members: lockfile_refresh_members, runner: runner, memo: memo)
|
|
1556
|
+
return if memo.any? && !memo.last.ok?
|
|
1557
|
+
end
|
|
1516
1558
|
|
|
1517
|
-
reconciled_members = (floor_results.map(&:member_name) +
|
|
1559
|
+
reconciled_members = (floor_results.map(&:member_name) + lockfile_refresh_members.map { |member, _released_members| member.name }).uniq
|
|
1518
1560
|
commit_dependency_floor_changes(dependent_members: reconciled_members, runner: runner, memo: memo) if reconciled_members.any? && execute && commit
|
|
1519
1561
|
end
|
|
1520
1562
|
|
|
@@ -1540,23 +1582,72 @@ module Kettle
|
|
|
1540
1582
|
Array(member.release_dependencies || member.dependencies).map(&:to_s)
|
|
1541
1583
|
end
|
|
1542
1584
|
|
|
1543
|
-
|
|
1585
|
+
# Prism-based discovery intentionally includes every literal Gemfile
|
|
1586
|
+
# declaration so release ordering is conservative. Lockfile refreshes
|
|
1587
|
+
# must instead use the Gemfile as evaluated in the release environment:
|
|
1588
|
+
# optional local/template declarations are not valid --update targets.
|
|
1589
|
+
def active_release_dependencies_for(member, released_members)
|
|
1590
|
+
runtime_names = Array(member.dependencies).map(&:to_s)
|
|
1591
|
+
gemfile_candidates = released_members.reject { |released_member| runtime_names.include?(released_member.name) }
|
|
1592
|
+
return released_members if gemfile_candidates.empty?
|
|
1593
|
+
|
|
1594
|
+
active_names = active_release_dependency_names(member)
|
|
1595
|
+
released_members.select { |released_member| active_names.include?(released_member.name) }
|
|
1596
|
+
end
|
|
1597
|
+
|
|
1598
|
+
def active_release_dependency_names(member)
|
|
1599
|
+
active_release_dependency_names_for_gemfile(member, File.join(member.root, "Gemfile"))
|
|
1600
|
+
end
|
|
1601
|
+
|
|
1602
|
+
def active_release_dependency_names_for_gemfile(member, gemfile)
|
|
1603
|
+
(Array(member.dependencies).map(&:to_s) + active_release_gemfile_dependency_names(member, gemfile)).reject do |name|
|
|
1604
|
+
name == member.name
|
|
1605
|
+
end
|
|
1606
|
+
end
|
|
1607
|
+
|
|
1608
|
+
def active_release_gemfile_dependency_names(member, gemfile = File.join(member.root, "Gemfile"))
|
|
1609
|
+
return [] unless File.file?(gemfile)
|
|
1610
|
+
|
|
1611
|
+
script = <<~RUBY
|
|
1612
|
+
require "bundler"
|
|
1613
|
+
dsl = Bundler::Dsl.evaluate(ARGV.fetch(0), nil, {})
|
|
1614
|
+
puts dsl.dependencies.map(&:name)
|
|
1615
|
+
RUBY
|
|
1616
|
+
stdout, stderr, status = Open3.capture3(
|
|
1617
|
+
release_lockfile_env(member).compact,
|
|
1618
|
+
RbConfig.ruby,
|
|
1619
|
+
"-e",
|
|
1620
|
+
script,
|
|
1621
|
+
gemfile,
|
|
1622
|
+
chdir: member.root
|
|
1623
|
+
)
|
|
1624
|
+
unless status.success?
|
|
1625
|
+
raise Error, "could not evaluate release Gemfile for #{member.name}: #{stderr.strip}"
|
|
1626
|
+
end
|
|
1627
|
+
|
|
1628
|
+
stdout.lines.map(&:strip).reject(&:empty?).uniq
|
|
1629
|
+
end
|
|
1630
|
+
|
|
1631
|
+
def append_dependency_floor_lockfile_results(dependent_members:, runner:, memo:)
|
|
1544
1632
|
return unless execute && publish
|
|
1545
1633
|
return if dependent_members.empty?
|
|
1546
1634
|
|
|
1547
|
-
dependent_members.each do |member|
|
|
1635
|
+
dependent_members.each do |member, released_members|
|
|
1548
1636
|
memo << wait_for_dependency_floor_lockfiles_result(member: member, released_members: released_members, runner: runner)
|
|
1549
1637
|
break unless memo.last.ok?
|
|
1550
1638
|
end
|
|
1551
1639
|
end
|
|
1552
1640
|
|
|
1553
|
-
def append_dependency_floor_ci_bundle_results(
|
|
1641
|
+
def append_dependency_floor_ci_bundle_results(dependent_members:, runner:, memo:)
|
|
1554
1642
|
return unless execute && publish
|
|
1555
1643
|
return if dependent_members.empty?
|
|
1556
1644
|
|
|
1557
|
-
dependent_members.each do |member|
|
|
1645
|
+
dependent_members.each do |member, released_members|
|
|
1558
1646
|
dependency_floor_ci_bundle_gemfiles(member).each do |gemfile|
|
|
1559
|
-
|
|
1647
|
+
gemfile_released_members = active_release_dependencies_for_gemfile(member, gemfile, released_members)
|
|
1648
|
+
next if gemfile_released_members.empty?
|
|
1649
|
+
|
|
1650
|
+
memo << wait_for_dependency_floor_ci_bundle_result(member: member, gemfile: gemfile, released_members: gemfile_released_members, runner: runner)
|
|
1560
1651
|
break unless memo.last.ok?
|
|
1561
1652
|
end
|
|
1562
1653
|
break if memo.any? && !memo.last.ok?
|
|
@@ -1686,6 +1777,11 @@ module Kettle
|
|
|
1686
1777
|
end.uniq.sort
|
|
1687
1778
|
end
|
|
1688
1779
|
|
|
1780
|
+
def active_release_dependencies_for_gemfile(member, gemfile, released_members)
|
|
1781
|
+
active_names = active_release_dependency_names_for_gemfile(member, gemfile)
|
|
1782
|
+
released_members.select { |released_member| active_names.include?(released_member.name) }
|
|
1783
|
+
end
|
|
1784
|
+
|
|
1689
1785
|
def workflow_bundle_gemfiles(member)
|
|
1690
1786
|
Dir.glob(File.join(member.root, ".github", "workflows", "*.{yml,yaml}")).flat_map do |path|
|
|
1691
1787
|
workflow_bundle_gemfile_entries(path).map do |entry|
|
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: 1.2.
|
|
4
|
+
version: 1.2.64
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -74,7 +74,7 @@ dependencies:
|
|
|
74
74
|
version: '1.0'
|
|
75
75
|
- - ">="
|
|
76
76
|
- !ruby/object:Gem::Version
|
|
77
|
-
version: 1.0.
|
|
77
|
+
version: 1.0.5
|
|
78
78
|
type: :runtime
|
|
79
79
|
prerelease: false
|
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -84,7 +84,7 @@ dependencies:
|
|
|
84
84
|
version: '1.0'
|
|
85
85
|
- - ">="
|
|
86
86
|
- !ruby/object:Gem::Version
|
|
87
|
-
version: 1.0.
|
|
87
|
+
version: 1.0.5
|
|
88
88
|
- !ruby/object:Gem::Dependency
|
|
89
89
|
name: kettle-dev
|
|
90
90
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -441,10 +441,10 @@ licenses:
|
|
|
441
441
|
- AGPL-3.0-only
|
|
442
442
|
metadata:
|
|
443
443
|
homepage_uri: https://kettle-family.galtzo.com
|
|
444
|
-
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.
|
|
445
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.
|
|
444
|
+
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.64
|
|
445
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.64/CHANGELOG.md
|
|
446
446
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
|
|
447
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.
|
|
447
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.64
|
|
448
448
|
funding_uri: https://github.com/sponsors/pboling
|
|
449
449
|
wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
|
|
450
450
|
news_uri: https://www.railsbling.com/tags/kettle-family
|
metadata.gz.sig
CHANGED
|
Binary file
|