Should we move towards Semantic Versioning?
Discussion
The article below discusses lots of aspects of Semantic Versioning. From the perspective of automation, it seems clear to me that it's the way to go: there are several libraries which implement the tenets involved in this matter. However, from the human perspective, the matter is debatable. The section I point out in the link below discusses some of these human factors. https://en.wikipedia.org/wiki/Software_versioning#Dropping_the_most_significant_element
The arcle below can be seen as a detailed study of the human factors pointed above. It's worth reading in full. http://dafoster.net/articles/2015/03/14/semantic-versioning-vs-romantic-versioning/
I vote for semantic versioning.
The only argument I see in favor of other schemes is basically marketing. Let's suppose that we release every 6 months. Let's say that next release is 2008.10. If that is the case, nothing prevents us from creating a metapackage which unites all concrete packages, whatever versions they are. This way, we keep semantic versioning, which is good for computers, whilst we expose some YYYY.MM, which is good for humans.
+1. I've been meaning to discuss this with folks for months. I agree that we should move past date versions and switch to semver.
There are some practical issues to discuss through. For some repos, it might make sense to follow react-js and react-native major/minor versioning. We could match the relevant repos to the versions of react they support.
Could that sort of a scheme help users match up the react versions with sri.
Let's suppose that we have several repositories, like ios, android, web, etc... which is really the case at the moment. Each repository has it's own, independent, versioning.
Now let's suppose that a certain repository should is in transition from react-native X to Y. We would like to release something in 2018.10 which supports X and Y, and we are working on a distinct release candidates for X and Y, I mean: X is at RC3 and Y is at RC1.
So, nothing prevents the following scenario, where we are working on both X and Y at the same time, for multiple repositories:
- ios 1.2.35-X-RC3
- ios 1.3.18-Y-RC1
- android 2.35.3-X-RC3
- android 2.36.11-Y-RC1
Then we have a metapackage (possibly provided by repository sri) which contains two branches:
- sri 2018.10.0-X-RC3
- sri 2018.10.0-Y-RC1
This way:
- Romantic versioning (sort of!) for the entire suite: users know that something is going to be released at 2018.10. Hot fixes to 2018.10 are numbered like 2018.10.1, 2018.10.2, etc. This is not really romantic versioning, but looks like... sort of.
- Semantic versioning per package, not concerning about release dates and/or marketing concerns and/or whatever determines when things are released.
- Identification of
react-native: it's theXorYin the version. - Nothing prevents from adding
react-jsto this equation. The same way you can have X and Y for one purpose, you could have A and B for another purpose. Just add more elements after the 3 groups of digits of the version.
According to http://semver.org, whatever follows the 3 groups of digits is user defined.