Skip to content

Should we use Semantic Versioning in release numbers #3709

@romani

Description

@romani

http://semver.org
format must be "X.Y.Z", some tools warn about this - https://www.versioneye.com/java/com.puppycrawl.tools:checkstyle/7.4

so, do we need to switch to that version format ?

Benefits:

  • follow the standard user can clearly see backward-incomptible fixes

Inconveniences and nuances:

  • does not work well with time-based releases, we can not make all "planned" updates in one iteration, so we will trigger increment of major version too often to my mind. I even think to use continuous releases, but it also have problem with semantic versions - 1, 2
  • extra 0 at the end of release
  • we do not completely follow "backwards-compatible" in common sense, we introduce NOT backwards-compatible changes in minor release. We do this as too much in checkstyle is exposed to user.
  • maven release plugin will automatically update version to X.Y.Z+1. So for 7.4.0 it will do 7.4.1 , so we will need to be caution during release.

Why we use time-based releases ?

Maintainers team is tiny. Non of maintainers focused on project full hours and do progress base on their free time. So big updates are impossible to accomplish in one release. There are many occasional contributors that provide fixes to bugs. All this contributors need is to pass acceptance of fix and start to use result as soon as possible (the only incentive to contribute). So delay in release will discourage contributors - not acceptable. I selected 1 month period , only because release process is time consuming and I do not want to spend my time on releases only. This period is easy to remember for me.
In short: why we are small team that do maintenance during free time (unpredictable time) so we should appreciate contribution from aside, so release often, tom time-based.

What is api changes for Checkstyle ?

Checkstyle has api package for projects that want to embed it (plugins, ....). Checkstyle exposing configuration file there all properties and modules are mentioned. We have huge problems in API classes and maintaining badly designed modules and their properties.
Change in API affect other projects that use us, checkstyle in modules affect all our users.
So all modules and module's properties are critical point in backward compatibility.
During last 3 years, we did a brake in 17 releases. Some modules are still so badly designed so we will continue that brake way for sure (still too much to break). API is slightly changed during this time.

What does checkstyle numbers mean now ?

it is partly semantic.
Major version is major milestone - so all "planned" fixes will eventually appear in it. I usually bind it to API classes major refactoring, big features introduction, runtime jdk change.
Minor version is minor milestones and minor breaking compatibilities - I consider changes on breaking changes in modules as minor break. I bump minor if new functionality is appear.
Patch version - is purely semantic patch version, completely compatible, no new functionality.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions