I have a question about versioning when I depend on a third party (TP) project's versioning. Our current process is to release a new version every time TP creates a release with security fixes. The problem is when a TP release contains new funcionally that we want to use in some but not all of the projects we maintain.
Scenario
Current project structure
Third party project (version 5.5)
My base project (version 1.2 (inherits v5.x))
My project 1
My project 2
My project 3
New project structure
Third party project (version 5.6)
My base project (version 1.3 (inherits v5.x))
My project 1
My project 3
Third party project (version 6.0)
My base project (version ?? (inherits v6.x))
My project 2
Key points
- They are Maven projects and are inheriting from the parent project pom.xml
- I cannot use the import scope because both projects (TP and Base projects) modify the lifecycle of the application.
- In order to move from TP version 5.6 to 6.0 it is necesary a costly migration process.
- Both new versions (5.6 & 6.0) have security fixes so it is advisable to update all the projects
- Version 6.0 has new features that we need on My Project 2
- TP might release version 7.0 and I would have 3 active versions of My base.
Question
I would like to have some advice about how to version My Base Project to keep more than one active version at the same time.
My current options are:
- Match the version number of TP by updating the version number for MyBase to 5.6 and 6.0 respectively. This approach might generate gaps if I decide not to upgrade a specify version.
- Use the semantic versioning and increase minor and micro version number for keeping both versions (Thank you Berin Loritsch). As a variant I coult increase major version number if the changes affects to end users (Thank you Ryathal)
- Use semantic versioning plus sign to mark the one of the versions. How to Name Different Branches with Identical Functionality in Semantic Versioning
- Get rid of My base project and add the features of it in each of My projects. This option will have maintainability issues so I don't thing it would be the better way.