I need advice on how to version builds based on shared and separate codes at the same time. I have a gradle project with multiple flavors. Large part of the code is shared. Some parts are flavor specific. Depending on which flavor I target, the corresponding code gets included.
I currently use semantic versioning. v1.2.0 was released before introducing any flavors. Now, if I make a change to flavor A specific code, I could release it as 1.2.1. But I make a change to the shared code next time around, should all flavors be released as 1.2.2? This will cause some flavors to jump versions in the future.
On the other hand, if I use separate version numbers for each flavor, it will be difficult to track common changes just by versions. Each flavor will have its own fix version for a specific bug for example.
Alternatively, I could maintain a single internal version for the common code, and separate versions for each flavor that can go out of sync. Again, this would make it a bit cumbersome to keep track of common features and bug fixes.
What do you think is the best approach?