From b69384e96b23fe7a2abcf71989d6d9ca402c0ccc Mon Sep 17 00:00:00 2001 From: meganemura Date: Wed, 5 Aug 2026 21:51:47 +0900 Subject: [PATCH 1/3] Fix release date extraction for the current changelog header format MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit release_date_for in spec/support/build_metadata.rb matched the changelog's old `## VERSION (DATE)` header, but .changelog.yml has generated `## VERSION / DATE` headers since Bundler 4.0.9. The regex silently failed to match, so built_at was baked as nil into every release since, and Bundler::BuildMetadata.timestamp fell back to Time.now.utc on every invocation — `bundle version` always showed today's date instead of the real release date. spec/support/build_metadata.rb is release tooling for the bundler:build_metadata rake task, not part of the RSpec bundler suite; spec_helper.rb never requires it. The sibling release script tool/changelog.rb already has its test in test/test_changelog_generator.rb, so the regression test for this lives in test/test_build_metadata_generator.rb to match. Co-Authored-By: Claude Sonnet 5 --- spec/support/build_metadata.rb | 2 +- test/test_build_metadata_generator.rb | 36 +++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 test/test_build_metadata_generator.rb diff --git a/spec/support/build_metadata.rb b/spec/support/build_metadata.rb index 8469d96a7601..6cd6922c0261 100644 --- a/spec/support/build_metadata.rb +++ b/spec/support/build_metadata.rb @@ -45,7 +45,7 @@ def git_commit_sha def release_date_for(version, dir:) changelog = File.expand_path("CHANGELOG-bundler.md", dir) - File.readlines(changelog)[2].scan(/^## #{Regexp.escape(version)} \((.*)\)/).first&.first if File.exist?(changelog) + File.readlines(changelog)[2].scan(/^## #{Regexp.escape(version)} \/ (.*)$/).first&.first if File.exist?(changelog) end extend self diff --git a/test/test_build_metadata_generator.rb b/test/test_build_metadata_generator.rb new file mode 100644 index 000000000000..0b06a569e27a --- /dev/null +++ b/test/test_build_metadata_generator.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require "tmpdir" +require "bundler" +require_relative "../spec/support/build_metadata" +require_relative "rubygems/helper" + +class BuildMetadataGeneratorTest < Test::Unit::TestCase + def test_release_date_for_extracts_the_date_from_the_current_changelog_header_format + Dir.mktmpdir do |dir| + write_changelog(dir, "## 9.9.9 / 2026-08-05") + + assert_equal "2026-08-05", Spec::BuildMetadata.send(:release_date_for, "9.9.9", dir: dir) + end + end + + def test_release_date_for_returns_nil_when_the_changelog_has_no_entry_for_the_version + Dir.mktmpdir do |dir| + write_changelog(dir, "## 1.0.0 / 2026-01-01") + + assert_nil Spec::BuildMetadata.send(:release_date_for, "9.9.9", dir: dir) + end + end + + private + + def write_changelog(dir, header) + File.write(File.join(dir, "CHANGELOG-bundler.md"), <<~CHANGELOG) + # Changelog + + #{header} + + ### Enhancements: + CHANGELOG + end +end From 36ee802a7e944dfe7c7860c2e05a20ea78864c1b Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Tue, 25 Aug 2026 10:29:17 +0900 Subject: [PATCH 2/3] Update changelog fixture to the current header format The fixture changelog still used the old `## VERSION (DATE)` header, so the fixed `release_date_for` no longer matched it and the released case of the version spec failed. Co-Authored-By: Claude Fable 5 --- spec/support/path.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/support/path.rb b/spec/support/path.rb index 68baec93778f..2e7fcd95455d 100644 --- a/spec/support/path.rb +++ b/spec/support/path.rb @@ -307,7 +307,7 @@ def replace_required_ruby_version(version, dir:) def replace_changelog(version, dir:) changelog = File.expand_path("CHANGELOG-bundler.md", dir) contents = File.readlines(changelog) - contents = [contents[0], contents[1], "## #{version} (2100-01-01)\n", *contents[3..-1]].join + contents = [contents[0], contents[1], "## #{version} / 2100-01-01\n", *contents[3..-1]].join File.open(changelog, "w") {|f| f << contents } end From c4069df44ddeb068a57292e366b3ee306b69f539 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Tue, 25 Aug 2026 11:02:03 +0900 Subject: [PATCH 3/3] Use %r for the slash-containing regexp Fixes the Style/RegexpLiteral offense from CI. Co-Authored-By: Claude Fable 5 --- spec/support/build_metadata.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/support/build_metadata.rb b/spec/support/build_metadata.rb index 6cd6922c0261..373bd7e55d5d 100644 --- a/spec/support/build_metadata.rb +++ b/spec/support/build_metadata.rb @@ -45,7 +45,7 @@ def git_commit_sha def release_date_for(version, dir:) changelog = File.expand_path("CHANGELOG-bundler.md", dir) - File.readlines(changelog)[2].scan(/^## #{Regexp.escape(version)} \/ (.*)$/).first&.first if File.exist?(changelog) + File.readlines(changelog)[2].scan(%r{^## #{Regexp.escape(version)} / (.*)$}).first&.first if File.exist?(changelog) end extend self