Skip to content

How to maintain Ruby OpenSSL

Kazuki Yamaguchi edited this page Dec 15, 2017 · 1 revision

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' contains commits that will go into the next maintenance release for the latest feature release.

    • 'maint-X.Y' contains commits that will go into the next maintenance release for the X.Y.0 feature release (X.Y is not the latest one).

  • At the point a release is created, 'master' must be a superset of 'maint', 'maint' 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 branch.

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

    $ vim ext/openssl/ossl_version.h openssl.gemspec
    $ vim History.md
    
  3. Create an annotated tag.

    $ git commit -am 'Ruby/OpenSSL 2.1.1'
    $ git tag v2.1.1 -sm 'Ruby/OpenSSL 2.1.1'
    
  4. Update gh-pages branch, and push to github.com/ruby/openssl.git.

    $ ./tool/update-gh-pages
    $ git push upstream maint master v2.1.1 gh-pages
    
  5. Build the gem and upload it to rubygems.org.

    $ gem build openssl.gemspec
    $ gem push openssl-2.1.1.gem
    
  6. If it's a feature release, slide the branch names.

    $ git branch -m maint maint-2.1
    $ git branch maint master