/ VERSIONING.md
VERSIONING.md
 1  # Versioning
 2  
 3  This document describes the versioning scheme used by the Radicle Stack, ie.
 4  the package that includes the Radicle CLI (`rad`), Radicle Node
 5  (`radicle-node`) and other binaries. It is not relevant to the Rust *crate*
 6  versions which follow [Semantic Versioning][semver].
 7  
 8  [semver]: https://semver.org/
 9  
10  ## Format
11  
12  Versioning of the Radicle Stack is based on Git tags. During the build phase,
13  we search for the most recent tag that starts with a `v` character, eg.
14  `v1.0.0`, and use that as the basis for computing the version.
15  
16  If we're building code that is pointed to by that tag directly, that code will
17  inherit that version number, with the `v` character stripped. For example:
18  
19      1.0.0
20  
21  If on the other hand, the commit we are building has no version tag pointing to
22  it, the output of `git describe` is used as-is. This indicates a development
23  version that is not released and not meant to be packaged or distributed. For
24  example:
25  
26      1.0.0-6-ga3ffe51d
27  
28  Tags used for versioning are always annotated and signed, and follow the format:
29  
30      "v" <major> "." <minor> "." <patch>
31  
32  When the tag is parsed, we strip the `v` prefix, which results in a version
33  matching:
34  
35      <major> "." <minor> "." <patch>
36  
37  For pre-releases or release candidates, we add the `-rc` suffix, plus a number.
38  For example:
39  
40      1.0.0-rc.2
41  
42  These releases are meant to be packaged.
43  
44  ## Semantics
45  
46  The Radicle version numbers do not follow strict rules, but these are the
47  guidelines we use:
48  
49  1. Increment the `<major>` number when significant changes and/or improvements
50     are made to the Radicle Stack. This should happen rarely.
51  2. Increment the `<minor>` number when new features are added or existing
52     features are improved in a noticeable way.
53  3. Increment the `<patch>` number when bugs are fixed, docs are updated or
54     features are tweaked.
55  
56  Unless clearly stated in the documentation, none of the user-facing commands
57  should be considered stable APIs, and may therefore break in `<minor>` or
58  `<major>` version updates. If command output is considered stable, and an
59  effort is made to maintain that stability, this will be stated in the command's
60  documentation.