Problem:
Today Oolite Version Numbers look like this:
oolite-1.93.0.7823-260429-7b8fba2-x86_64.AppImage
oolite_test-1.93.0.7808-260426-d4a1548-x86_64.AppImage
The components of this version string are:
- The string "oolite"
- optionally a markup that this is the test or debug build
- 1.93.0 - the 'official', manually maintained version number
- an automatically calculated version number - the number of commits since start of the project on this branch
- the build date to accomodate for a nonsequential version number - not granular enough if multiple builds happen on the same day
- the Git commit hash
All these items are not good enough to decide what version you are running, or which is newer. Why so?
During development, all versions generated have the 1.93.0 equal, unless something is officially released as stable.
While we develop on different branches, the automatically calculated version number is not a sequence any more. It can even go backwards when we squash commits or move the branch pointers.
Thus the only item that uniquely marks up a build is the commit hash. A nuisance for humans to decide which of the builds is newer, or which of them came from even a different repository.
Alternative:
Let's look at semantic versioning - it is described at https://semver.org/. This scheme is already in use on OoliteStarter, version numbers there look like this:
v0.1.34
v0.1.35-kaleyard.17
v0.1.35-kaleyard.18
v0.1.35-kaleyard.19
v0.1.35-kaleyard.20
v0.1.35
Users can - without much thinking - identify which version comes from a branch and which is the official release. Users and computers can easily sort the versions to find out which is newer.
What this scheme does not cover, however is if a build came from a different repository.
Suggestion:
Let's change to semantic versioning plus add a feature to markup builds that come from a different repository. This markup could be as simple as replacing the project name string "oolite" with "customoolite", or as smart as adding the repository name (this would likely only work if built on Github).
Apart from just changing our build scripts we also need to change our behaviour. Commits on the master branch would always result in a new release. Development would have to happen on a feature branch, and every PR to master is a release already. Pre-release code freezes would become unnecessary. The time-to market for bugfixes or features would shrink, the agility of the project would pick up speed at the same time.
Problem:
Today Oolite Version Numbers look like this:
oolite-1.93.0.7823-260429-7b8fba2-x86_64.AppImage
oolite_test-1.93.0.7808-260426-d4a1548-x86_64.AppImage
The components of this version string are:
All these items are not good enough to decide what version you are running, or which is newer. Why so?
During development, all versions generated have the 1.93.0 equal, unless something is officially released as stable.
While we develop on different branches, the automatically calculated version number is not a sequence any more. It can even go backwards when we squash commits or move the branch pointers.
Thus the only item that uniquely marks up a build is the commit hash. A nuisance for humans to decide which of the builds is newer, or which of them came from even a different repository.
Alternative:
Let's look at semantic versioning - it is described at https://semver.org/. This scheme is already in use on OoliteStarter, version numbers there look like this:
v0.1.34
v0.1.35-kaleyard.17
v0.1.35-kaleyard.18
v0.1.35-kaleyard.19
v0.1.35-kaleyard.20
v0.1.35
Users can - without much thinking - identify which version comes from a branch and which is the official release. Users and computers can easily sort the versions to find out which is newer.
What this scheme does not cover, however is if a build came from a different repository.
Suggestion:
Let's change to semantic versioning plus add a feature to markup builds that come from a different repository. This markup could be as simple as replacing the project name string "oolite" with "customoolite", or as smart as adding the repository name (this would likely only work if built on Github).
Apart from just changing our build scripts we also need to change our behaviour. Commits on the master branch would always result in a new release. Development would have to happen on a feature branch, and every PR to master is a release already. Pre-release code freezes would become unnecessary. The time-to market for bugfixes or features would shrink, the agility of the project would pick up speed at the same time.