View Source Version levels

Version level increases follow semantic versioning conventions.

Expublish.Semver defines the level type as:

@type level() :: :major | :minor | :patch | :rc | :beta | :alpha | :stable

Major releases reset minor and patch levels

# current version: "0.1.4"

expublish.major => "1.0.0"

Minor releases reset patch level

# current version: "0.1.4"

expublish.minor => "0.2.0"

First pre-release patches the current version by default

# current version: "0.0.0"

expublish.alpha  => "0.0.1-alpha"
expublish.beta   => "0.0.1-beta"
expublish.rc     => "0.0.1-rc"

Note that using a higher pre-release level does not increase the version number.

Pre-releases can be declared stable

# current version: "1.0.1-rc"

expublish.stable => "1.0.1"

Note that expublish.stable only drops the pre-release suffix but does not increase the version number.

An already stable version can not be redeclared stable

# current version: "1.0.1"

expublish.stable => Error: can not release already stable version "1.0.1"

Pre-release levels can not be applied backwards

# current version: "1.0.0-rc"

expublish.alpha  => Error: current version rc > alpha
expublish.beta   => Error: current version rc > beta
expublish.rc     => "1.0.1-rc"

Patch and current pre-release levels can be used interchangeably

# current version: "0.1.4-beta"

expublish.patch => "0.1.5-beta"
expublish.beta  => "0.1.6-beta"
expublish.patch => "0.1.7-beta"
expublish.rc    => "0.1.7-rc"
expublish.patch => "0.1.8-rc"

Pre-releases can increase by different version levels

# current version: "0.0.0"

expublish.alpha           => "0.0.1-alpha"
expublish.beta --as-minor => "0.1.0-beta"
expublish.rc --as-major   => "1.0.0-rc"

Pre-release levels can be skipped

# current version: "1.0.1-alpha"

expublish.rc => "1.0.1-rc"