gemchain 0.2.5 → 0.3.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
- data/CHANGELOG.md +9 -0
- data/lib/gemchain/executor.rb +46 -1
- 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: 1cacd44997c24011ea6c204ad739d11cea72da928bcaf7f5ebe9cd27f8b3cf96
|
|
4
|
+
data.tar.gz: a75aa99478abefb2d716b187cc24ee28104f54c46f144f20ab126472c4c2cd08
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9efa9ebffb78684ea4358f00900a377d903c598d2c982afdbbb749b650e6f69b41ab7cfa0fbd59c43619ffff1790287a052adaede75566e82c3f8c5d052ae34c
|
|
7
|
+
data.tar.gz: fcbf7ec2dcc638fb83c95af834f38bd5fb9a8a453c806b550401bf51d3929877c15146f2f34aaff83e14d4f0219d710cd9ac84f7beadac82cbc4c768a1843b9d
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
## [Unreleased]
|
|
2
|
+
|
|
3
|
+
## [0.3.0] - 2026-09-23
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Patch-level dependent releases roll over to the next minor after patch 9.
|
|
8
|
+
- Cascade releases finalize and stage changelog entries before publishing.
|
|
9
|
+
|
|
1
10
|
## [0.2.5] — 2026-09-22
|
|
2
11
|
|
|
3
12
|
### Added
|
data/lib/gemchain/executor.rb
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
require "open3"
|
|
4
4
|
require "set"
|
|
5
5
|
require "timeout"
|
|
6
|
+
require "date"
|
|
6
7
|
|
|
7
8
|
module Gemchain
|
|
8
9
|
class ExecutionError < Error; end
|
|
@@ -195,6 +196,7 @@ module Gemchain
|
|
|
195
196
|
return
|
|
196
197
|
end
|
|
197
198
|
|
|
199
|
+
finalize_changelog(dir, version, step[:dependency], step[:constraint])
|
|
198
200
|
files = release_files(dir)
|
|
199
201
|
@runner.run(["git", "add", *files], chdir: dir)
|
|
200
202
|
|
|
@@ -221,6 +223,8 @@ module Gemchain
|
|
|
221
223
|
# commonly ignore it).
|
|
222
224
|
def release_files(dir)
|
|
223
225
|
files = [gemspec_file(dir), version_file(dir)]
|
|
226
|
+
changelog = File.join(dir, "CHANGELOG.md")
|
|
227
|
+
files << changelog if File.file?(changelog)
|
|
224
228
|
lockfile = File.join(dir, "Gemfile.lock")
|
|
225
229
|
files << lockfile if File.exist?(lockfile) && !git_ignored?(dir, lockfile)
|
|
226
230
|
files
|
|
@@ -260,7 +264,48 @@ module Gemchain
|
|
|
260
264
|
case level
|
|
261
265
|
when :major then "#{parts[0] + 1}.0.0"
|
|
262
266
|
when :minor then "#{parts[0]}.#{parts[1] + 1}.0"
|
|
263
|
-
else
|
|
267
|
+
else
|
|
268
|
+
patch = parts[2] || 0
|
|
269
|
+
patch >= 9 ? "#{parts[0]}.#{parts[1] + 1}.0" : "#{parts[0]}.#{parts[1]}.#{patch + 1}"
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def finalize_changelog(dir, version, dependency, constraint)
|
|
274
|
+
path = File.join(dir, "CHANGELOG.md")
|
|
275
|
+
return unless File.file?(path)
|
|
276
|
+
|
|
277
|
+
content = File.read(path)
|
|
278
|
+
return if content.match?(/^## \[#{Regexp.escape(version)}\]/)
|
|
279
|
+
|
|
280
|
+
unreleased = content.match(/^## \[Unreleased\]\s*\n(.*?)(?=^## \[|\z)/m)
|
|
281
|
+
notes = unreleased ? unreleased[1].strip : ""
|
|
282
|
+
if dependency
|
|
283
|
+
note = "- Updated #{dependency} dependency to #{constraint}."
|
|
284
|
+
notes = append_changelog_note(notes, "Changed", note)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
release = "## [#{version}] - #{Date.today}\n"
|
|
288
|
+
release += "\n#{notes}\n" unless notes.empty?
|
|
289
|
+
replacement = "## [Unreleased]\n\n#{release}"
|
|
290
|
+
|
|
291
|
+
if unreleased
|
|
292
|
+
content = content.sub(unreleased[0], replacement)
|
|
293
|
+
elsif (title = content.match(/\A(# Changelog\s*\n)/i))
|
|
294
|
+
content = content.sub(title[0], "#{title[1]}\n#{replacement}\n")
|
|
295
|
+
else
|
|
296
|
+
content = "# Changelog\n\n#{replacement}\n#{content}"
|
|
297
|
+
end
|
|
298
|
+
File.write(path, content)
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
def append_changelog_note(notes, section, note)
|
|
302
|
+
heading = "### #{section}"
|
|
303
|
+
if notes.match?(/^#{Regexp.escape(heading)}\s*$/)
|
|
304
|
+
notes.sub(/^#{Regexp.escape(heading)}\s*$/, "#{heading}\n\n#{note}")
|
|
305
|
+
elsif notes.empty?
|
|
306
|
+
"#{heading}\n\n#{note}"
|
|
307
|
+
else
|
|
308
|
+
"#{notes}\n\n#{heading}\n\n#{note}"
|
|
264
309
|
end
|
|
265
310
|
end
|
|
266
311
|
|
data/lib/gemchain/version.rb
CHANGED