| # Release Process |
| |
| Release process of rdma-core library consists from three stages |
| |
| 1. Change library version, according to [Overall Package Version](versioning.md) guide. |
| 2. Push the change above to master branch and ensure that Travis CI reports successful build. |
| 3. Create local annotated signed tag vX.X.X (`git tag vX.X.X -a -s`). |
| 4. Issue `git release` command which will push tag, trigger Travis CI to upload |
| release tar.gz file and create release notes based on tag context with release notes in it. |
| |
| ## git release |
| |
| There are many implementations of different `git release` commands. We recommend you to use |
| the command from [this](https://github.com/mpalmer/github-release) repository due to its simplicity. |
| |
| --- |
| Copy&Paste from relevant [README](https://github.com/mpalmer/github-release/blob/master/README.md) |
| |
| --- |
| |
| This very simple gem provides a `git release` command, which will |
| automatically fill out any and all "release tags" into fully-blown "Github |
| Releases", complete with release notes, a heading, and all the other good |
| things in life. |
| |
| Using this gem, you can turn the following tag annotation: |
| |
| First Release |
| |
| It is with much fanfare and blowing of horns that I bequeath the |
| awesomeness of `git release` upon the world. |
| |
| Features in this release include: |
| |
| * Ability to create a release from a tag annotation or commit message; |
| * Automatically generates an OAuth token if needed; |
| * Feeds your cat while you're hacking(*) |
| |
| You should install it now! `gem install github-release` |
| |
| Into [this](https://github.com/mpalmer/github-release/releases/tag/v0.1.0) |
| simply by running |
| |
| git release |
| |
| ### Installation |
| |
| Simply install the gem: |
| |
| gem install github-release |
| |
| |
| ### Usage |
| |
| Using `git release` is very simple. Just make sure that your `origin` |
| remote points to your Github repo, and then run `git release`. All tags |
| that look like a "version tag" (see "Configuration", below) will be created |
| as Github releases (if they don't already exist) and the message from the |
| tag will be used as the release notes. |
| |
| The format of the release notes is quite straightforward -- the first line |
| of the message associated with the commit will be used as the "name" of the |
| release, with the rest of the message used as the "body" of the release. |
| The body will be interpreted as Github-flavoured markdown, so if you'd like |
| to get fancy, go for your life. |
| |
| The message associated with the "release tag" is either the tag's annotation |
| message (if it is an annotated tag) or else the commit log of the commit on |
| which the tag is placed. I *strongly* recommend annotated tags (but then |
| again, [I'm biased...](http://theshed.hezmatt.org/git-version-bump)) |
| |
| The first time you use `git release`, it will ask you for your Github |
| username and password. This is used to request an OAuth token to talk to |
| the Github API, which is then stored in your global git config. Hence you |
| *shouldn't* be asked for your credentials every time you use `git release`. |
| If you need to use multiple github accounts for different repos, you can |
| override the `release.api-token` config parameter in your repo configuration |
| (but you'll have to get your own OAuth token). |
| |
| |
| ### Configuration |
| |
| There are a few things you can configure to make `git release` work slightly |
| differently. None of them should be required for normal, sane use. |
| |
| * `release.remote` (default `origin`) -- The name of the remote which is |
| used to determine what github repository to send release notes to. |
| |
| * `release.api-token` (default is runtime generated) -- The OAuth token |
| to use to authenticate access to the Github API. When you first run `git |
| release`, you'll be prompted for a username and password to use to |
| generate an initial token; if you need to override it on a per-repo |
| basis, this is the key you'll use. |
| |
| * `release.tag-regex` (default `v\d+\.\d+(\.\d+)?$`) -- The regular |
| expression to filter which tags denote releases, as opposed to other tags |
| you might have decided to make. Only tags which match this regular |
| expression will be pushed up by `git release`, and only those tags will |
| be marked as releases. |