Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Understanding Spring Cloud Release Versions

Spring folks do a great job of releasing lots of quality projects. One of them we have been using is Spring Cloud and its various sub-projects.

One aspect that is really confusing to me is Spring Cloud version names. For ex., if you goto Spring Cloud it reads Camden or Angel or Brixton. Then if you goto specific project site, for ex., Spring Cloud Config it shows versions like 1.3.0 or 1.2.3

Two questions about these.

  1. From named versions (Camden, Brixton, Angel) it is hard to visualize which is the latest and its sequence. Is there a place it is well documented?

  2. How are named releases related to sub-projects numbered releases?

Thank you for your time.

like image 372
singularity Avatar asked Feb 08 '17 21:02

singularity


3 Answers

After posting the question, found some information about these versions in main page. This surely clears things up.

Spring Cloud is an umbrella project consisting of independent projects with, in principle, different release cadences. To manage the portfolio a BOM (Bill of Materials) is published with a curated set of dependencies on the individual project (see below). The release trains have names, not versions, to avoid confusion with the sub-projects. The names are an alphabetic sequence (so you can sort them chronologically) with names of London Tube stations ("Angel" is the first release, "Brixton" is the second). When point releases of the individual projects accumulate to a critical mass, or if there is a critical bug in one of them that needs to be available to everyone, the release train will push out "service releases" with names ending ".SRX", where "X" is a number.

like image 83
singularity Avatar answered Oct 16 '22 23:10

singularity


  • What is Spring Cloud?

Spring Cloud is an umbrella project consisting of independent projects with, in principle, different release cadences. To manage the portfolio a BOM (Bill of Materials) is published with a curated set of dependencies on the individual project (see below). The release trains have names, not versions, to avoid confusion with the sub-projects. The names are an alphabetic sequence (so you can sort them chronologically) with names of London Tube stations ("Angel" is the first release, "Brixton" is the second). When point releases of the individual projects accumulate to a critical mass, or if there is a critical bug in one of them that needs to be available to everyone, the release train will push out "service releases" with names ending ".SRX", where "X" is a number.

  • Often we have an already existing project based on Spring Boot, and we like to add one or more dependencies to it that come from the Spring Cloud project, then we are confronted with the problem which of that particular spring cloud project should I use that's compatible with my current version of Spring Boot?

    The release trains comatiblity with spring boot version is published on spring cloud's home page, here they are at the time of writing this:

    enter image description here

    Also the release notes of each release train might contain the different compatible releases of the individual sub-projects. Also here you can find their GH pages for a given release train and more info about the sub-projects it uses.

    Now to more accurately pin down the exact version of the particular sub-project that you are interested in, e.g. spring-cloud-starter-openfeign, one need to know that this umbrella project is nothing more than:

    • a main pom file spring-cloud-dependencies-parent which:

    • a child pom of a particular spring-boot-starter-parent, which can tell you what version of spring boot a given release train uses.

    • it also imports spring-cloud-dependencieswhich declares all the versions of the individual sub-projects that our release train is using, e.g. for Hoxton.SR3:

    <properties>
        <spring-cloud-kubernetes.version>1.1.2.RELEASE</spring-cloud-kubernetes.version>
        <spring-cloud-security.version>2.2.1.RELEASE</spring-cloud-security.version>
        <spring-cloud-config.version>2.2.2.RELEASE</spring-cloud-config.version>
        <spring-cloud-contract.version>2.2.2.RELEASE</spring-cloud-contract.version>
        <spring-cloud-netflix.version>2.2.2.RELEASE</spring-cloud-netflix.version>
        <spring-cloud-vault.version>2.2.2.RELEASE</spring-cloud-vault.version>
        <spring-cloud-openfeign.version>2.2.2.RELEASE</spring-cloud-openfeign.version>
        <spring-cloud-task.version>2.2.3.RELEASE</spring-cloud-task.version>
        <spring-cloud-stream.version>Horsham.SR3</spring-cloud-stream.version>
        <spring-cloud-commons.version>2.2.2.RELEASE</spring-cloud-commons.version>
        <spring-cloud-build.version>2.2.3.RELEASE</spring-cloud-build.version>
        <spring-cloud-zookeeper.version>2.2.1.RELEASE</spring-cloud-zookeeper.version>
        <spring-cloud-consul.version>2.2.2.RELEASE</spring-cloud-consul.version>
        <spring-cloud-bus.version>2.2.1.RELEASE</spring-cloud-bus.version>
        <spring-cloud-function.version>3.0.3.RELEASE</spring-cloud-function.version>
        <spring-cloud-sleuth.version>2.2.2.RELEASE</spring-cloud-sleuth.version>
        <spring-cloud-gateway.version>2.2.2.RELEASE</spring-cloud-gateway.version>
        <spring-cloud-gcp.version>1.2.2.RELEASE</spring-cloud-gcp.version>
        <spring-cloud-cloudfoundry.version>2.2.1.RELEASE</spring-cloud-cloudfoundry.version>
        <main.basedir>${basedir}/../..</main.basedir>
        <spring-cloud-circuitbreaker.version>1.0.2.RELEASE</spring-cloud-circuitbreaker.version>
        <spring-cloud-aws.version>2.2.1.RELEASE</spring-cloud-aws.version>
        <spring-cloud-cli.version>2.2.1.RELEASE</spring-cloud-cli.version>
    </properties>
    

    this tells me as an example, that I could use the 2.2.2.RELEASE version of open feign since my project's spring boot version is 2.2.5

    These pom files are all available for one to dig in if required on maven central:

    • Spring Cloud Dependencies
    • Spring Cloud Parent
like image 45
HackerMonkey Avatar answered Oct 16 '22 23:10

HackerMonkey


The Spring Cloud release naming has changed. Internally, they still use London Tube Station names but what is published to maven repositories follows Calendar Versioning. Explanation follows...

Notable Changes in the 2020 Release Train

We have changed our release train versioning scheme. We now follow Calendar Versioning or calver for short. We will follow the YYYY.MINOR.MICRO scheme where MINOR is an incrementing number that starts at zero each year. The MICRO segment corresponds to suffixes previously used: .0 is analogous to .RELEASE and .2 is analogous to .SR2. Pre-release suffixes will also change from using a . to a - for the separator, for example 2020.0.0-M1 and 2020.0.0-RC2. We will also stop prefixing snapshots with BUILD- – for example 2020.0.0-SNAPSHOT.

We will continue to use London Tube Station names for code names. The current codename is Ilford. These names will no longer be used in versions published to maven repositories.

Reference: https://spring.io/blog/2020/04/17/spring-cloud-2020-0-0-m1-released#notable-changes-in-the-2020-release-train

Compatibility Matrix with Spring Boot versions: https://spring.io/projects/spring-cloud#adding-spring-cloud-to-an-existing-spring-boot-application

like image 1
sdoxsee Avatar answered Oct 16 '22 23:10

sdoxsee