Build and Release Tagging

Skip to end of metadata
Go to start of metadata

Kinds of Tags

There are two kinds of tags...

  • Next version base tags, which have an "r" suffix. Example, "2.2.0r".
  • Final, shipped release tags. Example, "2.2.0".

Applying the Tags

How and when do we use those kinds of tags?

Let's follow an example, where we're working towards shipping 2.2.0, then we ship 2.2.0, and then we start working on the next release of 2.2.1...

  1. When we start working on a new release like 2.2.0, across its relevant components, we tag one of its commits (ideally, the first new commit meant for 2.2.0) with a next version base tag. In this case, we tag with "2.2.0r".
    • If there's no commits yet for a component for 2.2.0, perhaps because the component is rather stable and slowly changing, we can choose to either make a trivial change/commit, or just not tag the component with "2.2.0r" until later.
  2. Builds during the development cycle will look like 2.2.0r-57-g238485a. That is, "$(TAG)$(GIT_CHANGE_NUM)$(GIT_UNIQUE_HASH)".
    • The GIT_CHANGE_NUM increments with each build.
    • The GIT_UNIQUE_HASH uniquely identifies the build.
  3. We eventually release and ship the final, blessed version, such as 2.2.0r-117-g43211234.
  4. After shipping, we tag 2.2.0's relevant components with the final, shipped release tag of "2.2.0" for the historical record.
  5. Next, we start working towards shipping 2.2.1 and repeat the cycle.
    • That is, new commits meant for 2.2.1 are created by developers and submitted.
    • We tag one of those new commits meant for 2.2.1 with a next version base tag. In this case, "2.2.1r".

Use Annotated Tags

Taggers, be sure to use annotated tags (the -a flag when creating a git tag). For example...

git tag -a 2.2.0 -m 2.2.0
git push --tags origin

What and What Not To Tag

The set of component repositories that need tagging in a release are listed in the release-specific manifest XML files:

However, some components have their own versioning "namespace" and are often coming from pre-existing open-source community projects; and we do not tag them during our product releases. These include....

  • couchdb
  • memcached
  • memcachetest
  • libmemcached
  • sigar

Other external dependencies, such as those listed in the external/override XML files, (obviously) also should not be tagged during our product releases. These include...

  • otp
  • icu4c
  • spidermonkey
  • libevent
  • curl

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.