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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1cacd44997c24011ea6c204ad739d11cea72da928bcaf7f5ebe9cd27f8b3cf96
4
- data.tar.gz: a75aa99478abefb2d716b187cc24ee28104f54c46f144f20ab126472c4c2cd08
3
+ metadata.gz: dcead1646646bd6ae965b52847fc093e2cb2a4ed56ed5a0a3155ebb28b3cdc47
4
+ data.tar.gz: 9080988bd10e6263c97bdd993cd0b0e37a6af49c327ce6c0e11041a34204be2b
5
5
  SHA512:
6
- metadata.gz: 9efa9ebffb78684ea4358f00900a377d903c598d2c982afdbbb749b650e6f69b41ab7cfa0fbd59c43619ffff1790287a052adaede75566e82c3f8c5d052ae34c
7
- data.tar.gz: fcbf7ec2dcc638fb83c95af834f38bd5fb9a8a453c806b550401bf51d3929877c15146f2f34aaff83e14d4f0219d710cd9ac84f7beadac82cbc4c768a1843b9d
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
@@ -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]
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gemchain
4
- VERSION = "0.3.0"
4
+ VERSION = "0.3.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemchain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kaka Ruto