Hey all,

I'm planning to change the way we version the Cordova CLI.

TL;DR
---

  2.7.0+1.0.5  === Cordova 2.7.0 and npm module version 1.0.5
  2.7.1+1.0.12 === Cordova 2.7.1 and npm module version 1.0.12

Current State
---

Today, the Cordova CLI uses a major.minor.patch version identifiers to
publish to npm. The major and minor identifiers track the Cordova framework
version, while the patch identifier is reserved for tracking Cordova CLI's
updates.

For example, the current release is 2.6.2. This means it supports Cordova
2.6.x and has released two npm version updates since Cordova 2.6.0.

The Problem
---

The problem is that this approach to versioning does not accurately
represent the Cordova framework or the npm module.

When the Cordova framework releases a minor patch, such as Cordova 2.6.1,
then the npm module cannot represent that update.

When the Cordova CLI changes the public module's API, it cannot represent
it. This would typically be reserved for a major or minor identifier.

The Solution
---

In semantic versioning, the version precedance is as follows [1]:

1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 <
1.0.0-rc.1+build.1 < 1.0.0 < 1.0.0+0.3.7 < 1.3.7+build <
1.3.7+build.2.b8f12d7 < 1.3.7+build.11.e0f985a

We can adopt the following scheme to accurately track both the Cordova
framework version and the npm version:

major.minor.patch+major.minor.patch

The first three m.m.p are to track the Cordova framework.
The second three m.m.p track the npm module.

I would prefer to flip these, but to keep tagging consistent and backwards
compatible, we must keep the Cordova framework as the first three
identifies.

Examples:

  2.7.0-rc.1+1.0.0
  2.7.0+1.0.5
  2.7.1+1.0.12

The Benefits
---

Now Cordova users know exactly what Cordova version is used by the CLI:

  2.7.0+1.0.5  === Cordova 2.7.0
  2.7.1+1.0.12 === Cordova 2.7.1

Now npm module users can rely on semantic versioning (normal node practice):

  2.7.0+1.0.5  === Cordova CLI is 1.0.5
  2.7.1+1.0.12 === Cordova CLI is 1.0.12
  2.7.1+1.1.0 === Cordova CLI is 1.1.0 - sweet, a nice API was added!
  2.7.1+2.0.0 === Cordova CLI is 2.0.0 - oh no! my old APIs are removed!

[1] http://semver.org/ @see 12)

Reply via email to