blob: 020d6075be8c008087f4e8d6c95efc17122be69a [file] [log] [blame] [view]
---
layout: doc
title: "Cobalt Versioning"
---
# Cobalt Versioning
Cobalt versions, as they appear in the user agent, have the following structure:
**[Feature Year]**.**[Purpose]**.**[Update Number]**.**[Build ID]**
The meansions of these components are described below.
Example Cobalt versions would be:
* `19.lts.1.40455`
* `19.lts.2.53047`
* `20.lts.1.64553`
## Feature Year
Cobalt features are tied to a yearly release cycle and this number indicates
the yearly feature set that this version of Cobalt supports. It is the last
two digits of the year of the target feature set. For example for the 2019
feature set, this value will be `19`.
## Purpose
The purpose of this build, usually named after the reason that a branch is cut.
On the master branch it will be `master`, and on LTS branches for example it
will be `lts`.
## Update Number
The current update revision number (e.g. release number) for a given pair of
values above. This will always be `0` on the master branch. When a release
branch is cut, will be modified to start at `1`, and be incremented each time a
release or update is released. It is possible that multiple updates are
released off of the same release branch, if new bugs are discovered and fixed.
## Build ID
The Cobalt Build ID represents **fine-grained** information about the state of
the source tree for a given build. An internal Cobalt build server generates a
monotonically increasing number for each unique set of sources that it
sees. When an open-source release is published,
a [`src/cobalt/build/build.id`](../build/build.id) file is included that
specifies the build ID of that source release. The Cobalt team can reproduce the
exact sources for a given Build ID.
Note that since the Build ID always increases with time, it means that the
latest version of an older Cobalt release can have a higher Build ID than the
latest version of a new Cobalt release. An example from above: Cobalt `4.16134`
was produced earlier than Cobalt `3.16138`, thus has a lower Build ID.
## Older Cobalt versioning scheme
A Cobalt version consists of two components: The Release Number and the Build
ID. Some real historical Cobalt version examples:
* `2.15147`
* `3.16138`
* `4.16134`
* `6.18971`
You get the idea. The number before the dot is the "Release Number." The number
after the dot is the "Build ID."
### Release Number
In older Cobalt versioning schemes, a "Cobalt release" is an official, tested
version of Cobalt that is intended to be deployable to production. The
"Release Number" is a single counting number, starting at "1" for our first
release, and increasing by one for every release thereafter. This number is
checked into [`src/cobalt/version.h`](../version.h), and represents **coarse**
information about the state of the source tree when we decided to do a release.
It is important to note that there are no point releases, or major or minor
releases. Each release gets its own unique counting number.
## Other Reading
* [Cobalt Branching](branching.md)