Skip to content

Unify the RubyGems and Bundler changelogs - #9847

Open
hsbt wants to merge 5 commits into
masterfrom
changelog-unification
Open

Unify the RubyGems and Bundler changelogs#9847
hsbt wants to merge 5 commits into
masterfrom
changelog-unification

Conversation

@hsbt

@hsbt hsbt commented Sep 2, 2026

Copy link
Copy Markdown
Member

RubyGems and Bundler now share a single CHANGELOG.md with one set of sections per release. bundle version takes its date from the same .changelog.yml header template the changelog is cut from, instead of parsing it back out of the changelog header.

I folded the 4.0.0 and later Bundler sections into the matching RubyGems sections category by category (20 sections, 175 entries, 11 duplicates dropped) and moved the older Bundler history verbatim to doc/CHANGELOG-bundler-2.x.md. A PR labelled for both libraries yields one entry. Only labels mapping to different sections are rejected.

The 4.0 branch keeps its two changelogs, so the release task still writes both there and regenerates the section on master from the same pull requests instead of cherry-picking. Cutting keeps every released section in place, replaces the prerelease sections of a final release, and leaves out entries already shipped by a lower line, with a note saying so. ruby/ruby's sync_default_gems.rb needs no change.

🤖 Generated with Claude Code

hsbt and others added 5 commits September 3, 2026 16:37
`bundle version` printed a date that spec/support/build_metadata.rb parsed
back out of the top changelog header with a regex, which silently
returned nil whenever the header format changed, as it did in 4.0.9.

Extract the header rendering into ChangelogHeader so both the changelog
cut and the build metadata produce the date from the same
`.changelog.yml` template, and pass the stamp explicitly from the spec
fixture instead of rewriting a changelog for it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
RubyGems and Bundler have been versioned in lockstep since 4.0.0 and
ship as a single GitHub release, but the release tooling still cut two
changelogs from two identical configs and cherry-picked both commits
into master.

Collapse `.changelog.yml` into one config where the `rubygems:` and
`bundler:` labels map to the same sections, so a PR labelled for both
libraries gets one entry and only labels pointing at different sections
are rejected. The release task now makes one changelog commit and, for
patch releases, regenerates the section on master from the same pull
requests instead of cherry-picking, since the 4.0 branch keeps its
per-library changelogs until it is EOL. Cutting keeps every released
section in place, replaces the prerelease sections of a final release,
and leaves out of a minor release the entries its previous line already
shipped, with a note saying so.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Merge the 4.0.0 and later sections of CHANGELOG-bundler.md into the
matching sections of CHANGELOG.md category by category, dropping the 11
entries whose pull request was already listed there. The pre-4.0
Bundler history, which used its own version numbers, moves verbatim to
doc/CHANGELOG-bundler-2.x.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The per-library changelogs for the 4.0 branch were built lazily after
the release branch checkout, so they read that branch's rubygems-only
`.changelog.yml` and wrote an empty Bundler section. Build them with
the rest of the release object so master's config is the one in effect.

Also keep the already-released dedupe to minor and major releases,
substitute changelog placeholders in one pass so titles containing
backslashes or placeholders come through verbatim, refuse to prepare a
release from a dirty tree or a stale local stable branch, return to the
starting branch when the preparation finishes, skip the master
changelog pull request when nothing changed, fail on a `gh` search
error, and cover the layout choice with tests.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Describe the label rule the unified changelog enforces, the 4.0 branch
that still keeps two changelogs, and the branches a dry run leaves
behind, fix the stale label list and dead link the release guide
pointed at, and make the changelog cross-links absolute so they resolve
inside the gem and in rdoc.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@hsbt
hsbt force-pushed the changelog-unification branch from 916eae0 to b0fcd41 Compare September 3, 2026 07:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant