gemchain 0.3.0 → 0.3.1
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 +9 -0
- data/lib/gemchain/executor.rb +22 -0
- 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: dcead1646646bd6ae965b52847fc093e2cb2a4ed56ed5a0a3155ebb28b3cdc47
|
|
4
|
+
data.tar.gz: 9080988bd10e6263c97bdd993cd0b0e37a6af49c327ce6c0e11041a34204be2b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8ccb6c8541fdde2944698cc1b9c46f70c1874651b3eb89687f9b72826a3d82c278e638d2be6b4ae54fe2fc3bb0a6fc2b3108c0f4c5cd4cd26fab169e07e79761
|
|
7
|
+
data.tar.gz: 402900440c2500eac0ceff372cc98480ad81088bf2f08f892c3b7424a89eca618cdd6e5b5d69ec341fcd386273b1526612e9a80f5b3ac8cae17c20b43acc61f5
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.3.1] - 2026-09-25
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Dependents are no longer released when the source gem's release did not
|
|
8
|
+
happen — a failed or declined source release now skips every dependent
|
|
9
|
+
step, so no dependent is ever published with a constraint pointing at an
|
|
10
|
+
unpublished version.
|
|
11
|
+
|
|
3
12
|
## [0.3.0] - 2026-09-23
|
|
4
13
|
|
|
5
14
|
### Added
|
data/lib/gemchain/executor.rb
CHANGED
|
@@ -12,6 +12,12 @@ module Gemchain
|
|
|
12
12
|
# runs test suites, and releases gems to RubyGems. On failure the
|
|
13
13
|
# remaining steps for the failing gem are skipped but the cascade
|
|
14
14
|
# continues to the next gem, so healthy dependents are still updated.
|
|
15
|
+
#
|
|
16
|
+
# One ordering rule overrides that continuation: a dependent is released
|
|
17
|
+
# only after the gem it depends on is itself on RubyGems. A source whose
|
|
18
|
+
# tests failed, or whose release was declined or failed, leaves every
|
|
19
|
+
# dependent untouched — a constraint pointing at an unpublished version
|
|
20
|
+
# is unresolvable for anyone bundling the dependent fresh.
|
|
15
21
|
# All shell interaction goes through the +runner+ so the whole pipeline
|
|
16
22
|
# is testable without touching bundler, git, or RubyGems.
|
|
17
23
|
class Executor
|
|
@@ -69,6 +75,12 @@ module Gemchain
|
|
|
69
75
|
failed = {}
|
|
70
76
|
failed_gems = Set.new
|
|
71
77
|
|
|
78
|
+
# The source gem is the one the plan bumps; its steps carry no
|
|
79
|
+
# :dependency. A plan without source steps is a dependents-only
|
|
80
|
+
# cascade, where the source is already published by premise.
|
|
81
|
+
source_gem = @steps.find { |step| step[:dependency].nil? }&.fetch(:gem, nil)
|
|
82
|
+
source_released = source_gem.nil?
|
|
83
|
+
|
|
72
84
|
@steps.each do |step|
|
|
73
85
|
# Skip remaining steps for a gem that already failed
|
|
74
86
|
if failed_gems.include?(step[:gem])
|
|
@@ -76,6 +88,15 @@ module Gemchain
|
|
|
76
88
|
next
|
|
77
89
|
end
|
|
78
90
|
|
|
91
|
+
# No source on RubyGems, no dependents released: a constraint
|
|
92
|
+
# pointing at an unpublished version cannot be resolved by anyone
|
|
93
|
+
# bundling the dependent fresh.
|
|
94
|
+
if !source_released && !source_gem.nil? && step[:gem] != source_gem
|
|
95
|
+
@output.puts " ⏭ Skipping #{step[:gem]} — #{source_gem} was not released, so its dependents cannot be"
|
|
96
|
+
skipped << step[:gem] unless skipped.include?(step[:gem])
|
|
97
|
+
next
|
|
98
|
+
end
|
|
99
|
+
|
|
79
100
|
begin
|
|
80
101
|
case step[:action]
|
|
81
102
|
when :bump
|
|
@@ -88,6 +109,7 @@ module Gemchain
|
|
|
88
109
|
if release_confirmed?(step)
|
|
89
110
|
progress(step) { release(step) }
|
|
90
111
|
released << step[:gem]
|
|
112
|
+
source_released = true if step[:gem] == source_gem
|
|
91
113
|
else
|
|
92
114
|
@output.puts " ⏭ Skipped release of #{step[:gem]} (declined)"
|
|
93
115
|
skipped << step[:gem]
|
data/lib/gemchain/version.rb
CHANGED