Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Extending SemVer for private nightly/continuous builds #46
In looking at SemVer, it seems to only be concerned with how you version public APIs, which is great. But one thing we're struggling with is how to best manage internal-only nightly/continuous builds.
We want to set up an internal package manager server (NuGet) to share libraries with other teams in our org who are not in our source repo. The problem becomes, when we're starting to work on 1.0.1beta, we need a way to version each build of it (multiple builds could happen in a day). We want to reserve 1.0.1beta for the actual public release of that beta.
If you're interested in the full details, I wrote it up in my blog.
One thought we had would be to have an optional extension to SemVer that made use of a fourth version part. This part would represent the build number for the release and is intended only for internal consumption. Sharing among teams. From a public API perspective, the build number should not be relied upon.
Internally, when sharing with other teams, we'll have the benefit of having all of our packages with the same public version, 1.0.1beta, but the build number can be used to determine last known good builds.
The sorting would be something like this (note, I'd probably use a number that represents the date in a real situation rather than 00X):
One reason we like this approach is that the public part of the version never changes for a release from build to build. So all of our tools and other collateral doesn't need to change once we stamp a build as final and simply remove the build number.
Would love to hear any thoughts on this proposal.
Just a follow-up.
For what it's worth, we're leaning towards what Debian does with it's versioning system: http://www.unix.com/man-page/all/5/deb-version/
We'll call it the "Debian flavored SemVer". ;)
This allows us to have the following version precedence (from lowest to highest)