gemchain 0.2.3 → 0.2.4
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
- data/CHANGELOG.md +11 -0
- data/lib/gemchain/cli.rb +11 -4
- data/lib/gemchain/executor.rb +19 -6
- data/lib/gemchain/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 28efcb002b8ff78a3dad0554ff43dd7082221c42a927d0f61fd31d892fff87c1
|
|
4
|
+
data.tar.gz: 8e2f0892d8018723ce6f90c27abdd877249889b1f2bc357de0c9811083bf5fe5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 606408575bd7f7e3fd77d5b7185c37435617d8f8d728caeb42f4a42ddccd15c7570e1999ead8390703b31890720c23f886258493c79e3f066350c5a785fe98e5
|
|
7
|
+
data.tar.gz: 1afe1853d547bcf461a517b0f1216c206c84566ac1d3116aa7eefe8f72221e4d8b5e86bb82ed48bd5aba403d9652ea4204715dac90b493ccabdab3265b61e9b1
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
## [0.2.4] — 2026-09-17
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
|
|
5
|
+
- **Cascade continues past dependent failures** — when a dependent fails
|
|
6
|
+
(test, build, push, etc.), its remaining steps are skipped but the
|
|
7
|
+
cascade continues to the next gem. Healthy dependents are still updated
|
|
8
|
+
and released. Previously a single failure (e.g. missing git remote)
|
|
9
|
+
halted the entire cascade, leaving perfectly good dependents untouched.
|
|
10
|
+
The final report now lists which gems failed and which succeeded.
|
|
11
|
+
|
|
1
12
|
## [0.2.3] — 2026-08-13
|
|
2
13
|
|
|
3
14
|
### Fixed
|
data/lib/gemchain/cli.rb
CHANGED
|
@@ -120,10 +120,17 @@ module Gemchain
|
|
|
120
120
|
puts "\n Cascade complete."
|
|
121
121
|
end
|
|
122
122
|
else
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
puts "\n ⚠️ Cascade completed with failures:"
|
|
124
|
+
result.failed.each do |gem, message|
|
|
125
|
+
puts " ✖ #{gem}: #{message.split("\n").first}"
|
|
126
|
+
end
|
|
127
|
+
puts "\n ✅ Released: #{result.released.join(', ')}" unless result.released.empty?
|
|
128
|
+
puts " ⏭ Skipped: #{result.skipped.join(', ')}" unless result.skipped.empty?
|
|
129
|
+
if result.released.empty?
|
|
130
|
+
puts "\n No gems were released."
|
|
131
|
+
else
|
|
132
|
+
puts "\n Good dependents were updated successfully."
|
|
133
|
+
end
|
|
127
134
|
end
|
|
128
135
|
end
|
|
129
136
|
puts
|
data/lib/gemchain/executor.rb
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "open3"
|
|
4
|
+
require "set"
|
|
4
5
|
require "timeout"
|
|
5
6
|
|
|
6
7
|
module Gemchain
|
|
7
8
|
class ExecutionError < Error; end
|
|
8
9
|
|
|
9
10
|
# Executes a cascade plan: bumps versions, rewrites gemspec constraints,
|
|
10
|
-
# runs test suites, and releases gems to RubyGems
|
|
11
|
-
#
|
|
12
|
-
#
|
|
11
|
+
# runs test suites, and releases gems to RubyGems. On failure the
|
|
12
|
+
# remaining steps for the failing gem are skipped but the cascade
|
|
13
|
+
# continues to the next gem, so healthy dependents are still updated.
|
|
14
|
+
# All shell interaction goes through the +runner+ so the whole pipeline
|
|
15
|
+
# is testable without touching bundler, git, or RubyGems.
|
|
13
16
|
class Executor
|
|
14
17
|
Result = Struct.new(:success, :released, :skipped, :failed, keyword_init: true)
|
|
15
18
|
|
|
@@ -62,8 +65,16 @@ module Gemchain
|
|
|
62
65
|
def run
|
|
63
66
|
released = []
|
|
64
67
|
skipped = []
|
|
68
|
+
failed = {}
|
|
69
|
+
failed_gems = Set.new
|
|
65
70
|
|
|
66
71
|
@steps.each do |step|
|
|
72
|
+
# Skip remaining steps for a gem that already failed
|
|
73
|
+
if failed_gems.include?(step[:gem])
|
|
74
|
+
@output.puts " ⏭ Skipping remaining steps for #{step[:gem]} (previous step failed)"
|
|
75
|
+
next
|
|
76
|
+
end
|
|
77
|
+
|
|
67
78
|
begin
|
|
68
79
|
case step[:action]
|
|
69
80
|
when :bump
|
|
@@ -82,12 +93,14 @@ module Gemchain
|
|
|
82
93
|
end
|
|
83
94
|
end
|
|
84
95
|
rescue ExecutionError => e
|
|
85
|
-
|
|
86
|
-
|
|
96
|
+
@output.puts " ✖ #{step[:gem]}: #{e.message.split("\n").first}"
|
|
97
|
+
failed[step[:gem]] = e.message
|
|
98
|
+
failed_gems << step[:gem]
|
|
87
99
|
end
|
|
88
100
|
end
|
|
89
101
|
|
|
90
|
-
|
|
102
|
+
success = failed.empty?
|
|
103
|
+
Result.new(success: success, released: released, skipped: skipped, failed: failed.empty? ? nil : failed)
|
|
91
104
|
end
|
|
92
105
|
|
|
93
106
|
private
|
data/lib/gemchain/version.rb
CHANGED