blob: fcedd27c467bfee4c0792c566814bb42d582516c [file] [log] [blame] [view] [edit]
# Versions and releases
MDC's version numbers strictly follow [semantic versioning v2.0.0](https://semver.org/spec/v2.0.0.html):
`MAJOR.minor.patch`. In short, if the current version is `1.1.1`, then:
* A major release has a version number of `2.0.0`.
* A minor release has a version number of `1.2.0`.
* A patch release has a version number of `1.1.2`.
> These are *engineering* version numbers, intended for communicating to our engineering clients
> what type of follow-up work a upgrading to a release might entail. Since every breaking change
> bumps the major version number, we'll quickly run up to "large" major versions. That's ok.
Major releases can contain breaking changes to clients, while minor and patch releases cannot.
## How do we determine which numbers need to change?
We follow the guidelines defined by the [semver v2.0.0](https://semver.org/spec/v2.0.0.html#semantic-versioning-specification-semver) specification.
Our public API includes the following:
- APIs that are present in non-private headers. A private header is one that is contained within a sub-directory named `private/` within a `src/` directory.
We define "backwards incompatible changes" to include the following:
- Any change that will result in a build breakage from the previous release.
## What is the source of truth for MDC's version number?
The [VERSION](https://github.com/material-components/material-components-ios/blob/develop/VERSION)
file contains the current version as a simple string (and nothing else). Our `scripts/release/bump`
script updates that number and copies it into all the locations that it needs to end up, e.g.
CocoaPods podspecs, etc. You can use the `scripts/print_version` script to print out the version
number of the library.