Skip to content

How to maintain Ruby OpenSSL

Kazuki Yamaguchi edited this page Oct 8, 2025 · 2 revisions

How to maintain Ruby/OpenSSL

This document describes how I (rhe) manage ruby-openssl.git and make releases.

Policy

  • Feature releases are named as vX.Y.0 and meant to contain enhancements, including bugfixes, new features, and deprecations. Backwards-incompatible changes should only happen in major releases (i.e., when X is changed).

  • Maintenance releases are named as vX.Y.Z and can contain only bugfixes.

  • The following integration branches are used.

    • 'master' contains commits that will go into the next feature release.

    • 'maint-X.Y' contains commits that will go into the next maintenance release for the X.Y.0 feature release.

  • At the point a release is created, 'master' must be a superset of 'maint-X.Y', 'maint-X.Y' must be a superset of 'maint-X.Y-1', and so on.

  • A bugfix should first land in the {branch tracking oldest supported version, branch where the bug was introduced} and be merged "upwards". Backporting should be avoided as much as possible. Strictly following this rule makes easy to check later which releases fixed the bug (e.g., by "git tag --contains").

Making a release

A maintenance release is created from a maintenance branch described above. A feature release is created from 'master'.

  1. Merge changes from even older maintenance branches.

    $ git checkout maint-3.3; git merge maint-3.2
    
  2. Bump the version number and write a History.md entry.

    $ vim lib/openssl/version.rb openssl.gemspec
    $ vim History.md
    
  3. Create an annotated tag.

    $ git commit -am 'Ruby/OpenSSL 3.3.1'
    $ git tag v3.3.1 -sm 'Ruby/OpenSSL 3.3.1'
    
  4. Push the tag to github.com/ruby/openssl.git. GitHub Actions workflow will push the built .gem to rubygems.org.

    $ git push upstream maint-3.3 v3.3.1
    
  5. Build the gem and upload it to rubygems.org. (Only for <= 3.1 branches)

    $ gem build openssl.gemspec
    $ gem push openssl-3.1.2.gem
    
Clone this wiki locally