From 19316f3f0dac6aada9942472a73c844d45d924ad Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Thu, 16 Dec 2021 15:52:26 -0500 Subject: [PATCH] Fix wiki updates with calver releases --- .../docs/ReleaseTrainContentsUpdater.java | 5 +- .../internal/project/ProjectVersion.java | 13 +- .../main/resources/templates/cloud/blog.hbs | 2 +- .../ReleaseTrainContentsUpdaterTests.java | 47 ++ .../Spring-Cloud-2020.0-Release-Notes.md | 539 ++++++++++++++++++ .../spring-cloud-wiki/git/COMMIT_EDITMSG | 1 + .../projects/spring-cloud-wiki/git/index | Bin 881 -> 985 bytes .../projects/spring-cloud-wiki/git/logs/HEAD | 1 + .../git/logs/refs/heads/master | 1 + .../1f/a2c37fe634da1c5e640dcb461711d356f660f2 | 1 + .../35/e014e66523b759069c13bdb290a453e75ca14c | Bin 0 -> 6550 bytes .../b4/e40ce66b58da90ff7fc067259a647f422c1e89 | Bin 0 -> 368 bytes .../spring-cloud-wiki/git/refs/heads/master | 2 +- 13 files changed, 607 insertions(+), 5 deletions(-) create mode 100644 releaser-core/src/test/resources/projects/spring-cloud-wiki/Spring-Cloud-2020.0-Release-Notes.md create mode 100644 releaser-core/src/test/resources/projects/spring-cloud-wiki/git/COMMIT_EDITMSG create mode 100644 releaser-core/src/test/resources/projects/spring-cloud-wiki/git/objects/1f/a2c37fe634da1c5e640dcb461711d356f660f2 create mode 100644 releaser-core/src/test/resources/projects/spring-cloud-wiki/git/objects/35/e014e66523b759069c13bdb290a453e75ca14c create mode 100644 releaser-core/src/test/resources/projects/spring-cloud-wiki/git/objects/b4/e40ce66b58da90ff7fc067259a647f422c1e89 diff --git a/releaser-core/src/main/java/releaser/internal/docs/ReleaseTrainContentsUpdater.java b/releaser-core/src/main/java/releaser/internal/docs/ReleaseTrainContentsUpdater.java index 400ef564..3b5211fd 100644 --- a/releaser-core/src/main/java/releaser/internal/docs/ReleaseTrainContentsUpdater.java +++ b/releaser-core/src/main/java/releaser/internal/docs/ReleaseTrainContentsUpdater.java @@ -72,7 +72,10 @@ class ReleaseTrainContentsUpdater { } File releaseTrainWiki = this.handler.cloneReleaseTrainWiki(); ProjectVersion releaseTrain = projects.releaseTrain(this.properties); - String releaseTrainName = releaseTrain.major(); + // When using calver this need to be a major plus minor (ie if the release is + // 2020.0.1, the name of the wiki page is 2020.0) + String releaseTrainName = releaseTrain.isCalver() ? releaseTrain.majorAndMinor() + : releaseTrain.major(); String wikiPagePrefix = this.properties.getGit().getReleaseTrainWikiPagePrefix(); String releaseTrainDocFileName = releaseTrainDocFileName(releaseTrainName, wikiPagePrefix); diff --git a/releaser-core/src/main/java/releaser/internal/project/ProjectVersion.java b/releaser-core/src/main/java/releaser/internal/project/ProjectVersion.java index 5edcde5f..0d532da5 100644 --- a/releaser-core/src/main/java/releaser/internal/project/ProjectVersion.java +++ b/releaser-core/src/main/java/releaser/internal/project/ProjectVersion.java @@ -194,7 +194,7 @@ public class ProjectVersion implements Comparable, Serializable throw new IllegalStateException("Version can't end with a delimiter!"); } SplitVersion splitByHyphen = tryHyphenSeparatedVersion(version); - if (splitByHyphen != null) { + if (splitByHyphen != null && !splitByHyphen.calverReleaseTrain()) { return splitByHyphen; } return dotSeparatedReleaseTrainsAndVersions(version); @@ -314,6 +314,15 @@ public class ProjectVersion implements Comparable, Serializable return this.assertVersion().major; } + public boolean isCalver() { + return this.assertVersion().calverReleaseTrain(); + } + + public String majorAndMinor() { + return this.assertVersion().major + this.assertVersion().delimiter + + this.assertVersion().minor; + } + /** * Compute the previous patch's version, without any prefix or suffix (ie * MAJOR.MINOR.PATCH only). If the patch number is already at 0, returns an empty @@ -740,7 +749,7 @@ public class ProjectVersion implements Comparable, Serializable return isOldReleaseTrain() || calverReleaseTrain(); } - private boolean calverReleaseTrain() { + public boolean calverReleaseTrain() { try { return Integer.parseInt(this.major) >= 2020; } diff --git a/releaser-core/src/main/resources/templates/cloud/blog.hbs b/releaser-core/src/main/resources/templates/cloud/blog.hbs index d3aff91c..4fd2664c 100644 --- a/releaser-core/src/main/resources/templates/cloud/blog.hbs +++ b/releaser-core/src/main/resources/templates/cloud/blog.hbs @@ -1,4 +1,4 @@ -On behalf of the community, I am pleased to announce that the {{ availability }} of the [Spring Cloud {{ releaseName }}](https://cloud.spring.io) Release Train is available today. The release can be found in {{ releaseLink }}. You can check out the {{ releaseName }} [release notes for more information](https://github.com/spring-projects/spring-cloud/wiki/Spring-Cloud-{{ releaseName }}-Release-Notes). +On behalf of the community, I am pleased to announce that the {{ availability }} of the [Spring Cloud {{ releaseName }}](https://cloud.spring.io) Release Train is available today. The release can be found in {{ releaseLink }}. You can check out the {{ releaseName }} [release notes for more information](https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-{{ releaseName }}-Release-Notes). ## Notable Changes in the {{ releaseName }} Release Train {{#each projects}} diff --git a/releaser-core/src/test/java/releaser/internal/docs/ReleaseTrainContentsUpdaterTests.java b/releaser-core/src/test/java/releaser/internal/docs/ReleaseTrainContentsUpdaterTests.java index 9033acd0..8da7cbae 100644 --- a/releaser-core/src/test/java/releaser/internal/docs/ReleaseTrainContentsUpdaterTests.java +++ b/releaser-core/src/test/java/releaser/internal/docs/ReleaseTrainContentsUpdaterTests.java @@ -165,6 +165,25 @@ public class ReleaseTrainContentsUpdaterTests { .contains("Updating project page to release train [Greenwich.RELEASE]"); } + @Test + public void should_generate_the_contents_of_wiki_when_release_train_missing_calvar() + throws GitAPIException, IOException { + this.properties.getMetaRelease().setEnabled(true); + this.properties.getGit().setUpdateReleaseTrainWiki(true); + this.properties.getGit() + .setReleaseTrainWikiUrl(this.wikiRepo.getAbsolutePath() + "/"); + + File file = this.updater.updateReleaseTrainWiki(freshNewReleaseTrainCalver()); + + BDDAssertions.then(file).isNotNull(); + BDDAssertions.then(calverWikiEntryContent(file)).contains("# 2020.0.5").contains( + "Spring Cloud Consul `2.0.1.RELEASE` ([issues](http://www.foo.com/))"); + BDDAssertions + .then(GitTestUtils.openGitProject(file).log().call().iterator().next() + .getShortMessage()) + .contains("Updating project page to release train [2020.0.5]"); + } + private String edgwareWikiEntryContent(File file) throws IOException { return string(file, "Spring-Cloud-Edgware-Release-Notes.md"); } @@ -173,6 +192,10 @@ public class ReleaseTrainContentsUpdaterTests { return string(file, "Spring-Cloud-Greenwich-Release-Notes.md"); } + private String calverWikiEntryContent(File file) throws IOException { + return string(file, "Spring-Cloud-2020.0-Release-Notes.md"); + } + private String string(File file, String s) throws IOException { return new String(Files.readAllBytes(new File(file, s).toPath())); } @@ -249,4 +272,28 @@ public class ReleaseTrainContentsUpdaterTests { new ProjectVersion("spring-cloud-function", "1.0.0.RELEASE")); } + Projects freshNewReleaseTrainCalver() { + return new Projects(new ProjectVersion("spring-cloud-aws", "3.0.0.RELEASE"), + new ProjectVersion("spring-cloud-bus", "2.0.0.RELEASE"), + new ProjectVersion("spring-cloud-cli", "2.0.0.RELEASE"), + new ProjectVersion("spring-cloud-commons", "2.0.1.RELEASE"), + new ProjectVersion("spring-cloud-contract", "2.0.1.RELEASE"), + new ProjectVersion("spring-cloud-config", "2.0.1.RELEASE"), + new ProjectVersion("spring-cloud-netflix", "2.0.1.RELEASE"), + new ProjectVersion("spring-cloud-security", "2.0.0.RELEASE"), + new ProjectVersion("spring-cloud-cloudfoundry", "2.0.0.RELEASE"), + new ProjectVersion("spring-cloud-consul", "2.0.1.RELEASE"), + new ProjectVersion("spring-cloud-sleuth", "2.0.1.RELEASE"), + new ProjectVersion("spring-cloud-stream", "2020.0.0"), + new ProjectVersion("spring-cloud-zookeeper", "2.0.0.RELEASE"), + new ProjectVersion("spring-boot", "2.0.4.RELEASE"), + new ProjectVersion("spring-cloud-task", "2.0.0.RELEASE"), + // newer release train, current version in file is 2020.0.4 + new ProjectVersion("spring-cloud-release", "2020.0.5"), + new ProjectVersion("spring-cloud-vault", "2.0.1.RELEASE"), + new ProjectVersion("spring-cloud-gateway", "2.0.1.RELEASE"), + new ProjectVersion("spring-cloud-openfeign", "2.0.1.RELEASE"), + new ProjectVersion("spring-cloud-function", "1.0.0.RELEASE")); + } + } diff --git a/releaser-core/src/test/resources/projects/spring-cloud-wiki/Spring-Cloud-2020.0-Release-Notes.md b/releaser-core/src/test/resources/projects/spring-cloud-wiki/Spring-Cloud-2020.0-Release-Notes.md new file mode 100644 index 00000000..35e014e6 --- /dev/null +++ b/releaser-core/src/test/resources/projects/spring-cloud-wiki/Spring-Cloud-2020.0-Release-Notes.md @@ -0,0 +1,539 @@ +# 2020.0.4 + +[All Issues](https://github.com/orgs/spring-cloud/projects/64) + +2021-09-22 + +- Spring Cloud Cloudfoundry `3.0.2` +- Spring Cloud Config `3.0.5` +- Spring Cloud Contract `3.0.4` +- Spring Cloud Consul `3.0.4` +- Spring Cloud Gateway `3.0.4` +- Spring Cloud Netflix `3.0.4` +- Spring Cloud Vault `3.0.4` +- Spring Cloud Kubernetes `2.0.4` +- Spring Cloud Circuitbreaker `2.0.2` +- Spring Cloud Bus `3.0.3` +- Spring Cloud Cli `3.0.3` +- Spring Cloud Zookeeper `3.0.4` +- Spring Cloud Sleuth `3.0.4` +- Spring Cloud Starter Build `2020.0.4` +- Spring Cloud Task `2.3.2` +- Spring Cloud Commons `3.0.4` +- Spring Cloud Openfeign `3.0.4` + + +# 2020.0.3 + +## Breaking changes + +Actuator is no longer a required dependency of config server [1742](https://github.com/spring-cloud/spring-cloud-config/issues/1742) + +[All Issues](https://github.com/orgs/spring-cloud/projects/61) + +2021-05-28 + +- Spring Cloud Cloudfoundry `3.0.2` +- Spring Cloud Config `3.0.4` ([issues](https://github.com/spring-cloud/spring-cloud-config/milestone/89?closed=1)) +- Spring Cloud Contract `3.0.3` ([issues](https://github.com/spring-cloud/spring-cloud-contract/milestone/77?closed=1)) +- Spring Cloud Consul `3.0.3` ([issues](https://github.com/spring-cloud/spring-cloud-consul/milestone/57?closed=1)) +- Spring Cloud Gateway `3.0.3` ([issues](https://github.com/spring-cloud/spring-cloud-gateway/milestone/51?closed=1)) +- Spring Cloud Netflix `3.0.3` ([issues](https://github.com/spring-cloud/spring-cloud-netflix/milestone/102?closed=1)) +- Spring Cloud Vault `3.0.3` +- Spring Cloud Kubernetes `2.0.3` ([issues](https://github.com/spring-cloud/spring-cloud-kubernetes/milestone/31?closed=1)) +- Spring Cloud Circuitbreaker `2.0.2` +- Spring Cloud Bus `3.0.3` +- Spring Cloud Cli `3.0.3` +- Spring Cloud Zookeeper `3.0.3` ([issues](https://github.com/spring-cloud/spring-cloud-zookeeper/milestone/37?closed=1)) +- Spring Cloud Sleuth `3.0.3` ([issues](https://github.com/spring-cloud/spring-cloud-sleuth/milestone/90?closed=1)) +- Spring Cloud Starter Build `2020.0.3` +- Spring Cloud Task `2.3.2` +- Spring Cloud Commons `3.0.3` ([issues](https://github.com/spring-cloud/spring-cloud-commons/milestone/89?closed=1)) +- Spring Cloud Openfeign `3.0.3` ([issues](https://github.com/spring-cloud/spring-cloud-openfeign/milestone/36?closed=1)) + + +This release makes it possible for all projects except for Spring Cloud Contract to use Spring Boot 2.5. Spring Boot 2.5 includes a major update of Groovy that can lead to various issues while using Spring Cloud Contract. + +# 2020.0.2 + +[All Issues](https://github.com/orgs/spring-cloud/projects/53) + +2021-03-17 + +- Spring Cloud Cloudfoundry `3.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-cloudfoundry/milestone/16?closed=1)) +- Spring Cloud Commons `3.0.2` ([issues](https://github.com/spring-cloud/spring-cloud-commons/milestone/87?closed=1)) +- Spring Cloud Config `3.0.3` ([issues](https://github.com/spring-cloud/spring-cloud-config/milestone/88?closed=1)) +- Spring Cloud Contract `3.0.2` ([issues](https://github.com/spring-cloud/spring-cloud-contract/milestone/75?closed=1)) +- Spring Cloud Consul `3.0.2` ([issues](https://github.com/spring-cloud/spring-cloud-consul/milestone/56?closed=1)) +- Spring Cloud Gateway `3.0.2` ([issues](https://github.com/spring-cloud/spring-cloud-gateway/milestone/49?closed=1)) +- Spring Cloud Netflix `3.0.2` ([issues](https://github.com/spring-cloud/spring-cloud-netflix/milestone/100?closed=1)) +- Spring Cloud Circuitbreaker `2.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-circuitbreaker/milestone/8?closed=1)) +- Spring Cloud Zookeeper `3.0.2` +- Spring Cloud Kubernetes `2.0.2` ([issues](https://github.com/spring-cloud/spring-cloud-kubernetes/milestone/30?closed=1)) +- Spring Cloud Vault `3.0.2` ([issues](https://github.com/spring-cloud/spring-cloud-vault/milestone/47?closed=1)) +- Spring Cloud Task `2.3.1` +- Spring Cloud Sleuth `3.0.2` ([issues](https://github.com/spring-cloud/spring-cloud-sleuth/milestone/88?closed=1)) +- Spring Cloud Bus `3.0.2` +- Spring Cloud Cli `3.0.2` +- Spring Cloud Starter Build `2020.0.2` +- Spring Cloud Openfeign `3.0.2` ([issues](https://github.com/spring-cloud/spring-cloud-openfeign/milestone/34?closed=1)) + +# 2020.0.1 + +[All Issues](https://github.com/orgs/spring-cloud/projects/52) + +2021-01-27 + +- Spring Cloud Openfeign `3.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-openfeign/milestone/33?closed=1)) +- Spring Cloud Config `3.0.2` ([issues](https://github.com/spring-cloud/spring-cloud-config/milestone/87?closed=1)) +- Spring Cloud Commons `3.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-commons/milestone/86?closed=1)) +- Spring Cloud Contract `3.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-contract/milestone/74?closed=1)) +- Spring Cloud Consul `3.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-consul/milestone/54?closed=1)) +- Spring Cloud Gateway `3.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-gateway/milestone/48?closed=1)) +- Spring Cloud Netflix `3.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-netflix/milestone/99?closed=1)) +- Spring Cloud Zookeeper `3.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-zookeeper/milestone/34?closed=1)) +- Spring Cloud Vault `3.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-vault/milestone/46?closed=1)) +- Spring Cloud Kubernetes `2.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-kubernetes/milestone/29?closed=1)) +- Spring Cloud Sleuth `3.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-sleuth/milestone/87?closed=1)) +- Spring Cloud Bus `3.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-bus/milestone/47?closed=1)) +- Spring Cloud Cli `3.0.1` ([issues](https://github.com/spring-cloud/spring-cloud-cli/milestone/24?closed=1)) +- Spring Cloud Starter Build `2020.0.1` + +# 2020.0.0 + +## Known Issues + +- 2020.0.0 Spring Cloud Consul: Retry support has not been added yet using `spring.config.import=consul:`. Follow the [issue here](https://github.com/spring-cloud/spring-cloud-consul/issues/703). The workaround is to use the old bootstrap style by including `spring-cloud-starter-bootstrap`. + +Spring Cloud Config [3.0.1](https://github.com/spring-cloud/spring-cloud-config/milestone/85?closed=1) has been released to fix the issues below. Please use version 2020.0.1 which includes all the fixes below. + +- 2020.0.0 Spring Cloud Config: Retry support is missing for `spring.config.import=configserver:`. Follow the issue [here](github.com/spring-cloud/spring-cloud-config/issues/1775). For a workaround, continue to use `bootstrap.{yml|properties}` and add a dependency on `spring-cloud-starter-bootstrap` to restore the old behavior. +- 2020.0.0 Spring Cloud Config: spring-cloud-config-dependencies imports a milestone of spring-vault. Follow the issue [here](github.com/spring-cloud/spring-cloud-config/issues/1776). See [a workaround here](https://github.com/spring-cloud/spring-cloud-config/issues/1776#issuecomment-749782456) +- 2020.0.0 Spring Cloud Config: using `spring.config.import` value of `spring.profiles.active` not being used. Follow the issue and see workarounds [here](https://github.com/spring-cloud/spring-cloud-config/issues/1777). +- 2020.0.0 Spring Cloud Config: Multi-document YAML and properties files from config server have the same property source name which leads to a missing property source. Follow the issue [here](https://github.com/spring-cloud/spring-cloud-config/issues/1778). + +## Breaking changes + +- As [announced](https://spring.io/blog/2019/12/23/spring-cloud-roadmap-and-hoxton-and-greenwich-maintenance-and-eol-announcements), the following modules have been removed from spring-cloud-netflix: + - spring-cloud-netflix-archaius + - spring-cloud-netflix-concurrency-limits + - spring-cloud-netflix-core + - spring-cloud-netflix-dependencies + - spring-cloud-netflix-hystrix + - spring-cloud-netflix-hystrix-contract + - spring-cloud-netflix-hystrix-dashboard + - spring-cloud-netflix-hystrix-stream + - spring-cloud-netflix-ribbon + - spring-cloud-netflix-sidecar + - spring-cloud-netflix-turbine + - spring-cloud-netflix-turbine-stream + - spring-cloud-netflix-zuul + - spring-cloud-starter-netflix-archaius + - spring-cloud-starter-netflix-hystrix + - spring-cloud-starter-netflix-hystrix-dashboard + - spring-cloud-starter-netflix-ribbon + - spring-cloud-starter-netflix-turbine + - spring-cloud-starter-netflix-turbine-stream + - spring-cloud-starter-netflix-zuul + - Support for ribbon, hystrix and zuul was removed across the release train projects. + +- Bootstrap, provided by spring-cloud-commons, is no longer enabled by default. If your project requires it, it can be re-enabled by properties or by a new starter. + - To re-enable by properties set `spring.cloud.bootstrap.enabled=true` or `spring.config.use-legacy-processing=true`. These need to be set as an environment variable, java system property or a command line argument. + - The other option is to include the new `spring-cloud-starter-bootstrap`. + +- Support has been added for the new Spring Boot `spring.config.import` syntax for Config Server, Consul, Zookeeper and Vault. The existing properties to configure the different services are still supported but need to be put in `application.properties` or `application.yml`. + - `spring.config.import=configserver:` + - `spring.config.import=consul:` + - `spring.config.import=zookeeper:` + - `spring.config.import=vault:` + +- Spring Cloud Consul removed the old tags-as-metadata functionality [issue](https://github.com/spring-cloud/spring-cloud-consul/issues/630) + +- Previously the property to disable the Spring Cloud Config Client Health Indicator was `health.config.enabled=false`. It is now `management.health.config.enabled=false` following the Spring Boot convention. + +- Spring Cloud Security was removed and code was moved to the individual Spring Cloud projects. + +- The `spring-cloud-gateway-core` module was moved to `spring-cloud-gateway-server`. If you are using `spring-cloud-gateway-starter` this will not be an issue. + +- The implementation of spring-cloud-bus was migrated to use spring-cloud-function instead of the legacy annotation-driven model. This should have minimal effect on users. + +- `spring-cloud-stream` is now an optional dependency of `spring-cloud-bus`. If you are using a binder other than rabbitmq or kafka you will need to inclue the new `spring-cloud-starter-bus-stream`. + +- Actuator endpoints with invalid characters (dashes) have been updated to remove them: + - `bus-env` is now `busenv` + - `bus-refresh` is now `busrefresh` + - `service-registry` is now `serviceregistry` + +- In Spring Cloud Config, the endpoints from the resource API that used the `useDefaultLabel` query parameter have [been removed](https://github.com/spring-cloud/spring-cloud-config/issues/1643). +- As [announced](https://spring.io/blog/2020/04/17/spring-cloud-2020-0-0-m1-released) Spring Cloud GCP is no longer part of the Spring Cloud release train + +### Spring Cloud Kubernetes + +#### Code Refactoring +* Code that was not dependent on any Kubernetes client was moved into a module name `spring-cloud-kubernetes-commons` +* Packages were renamed to be Fabric8 specific. Any package that began with `org.springframework.cloud.kubernetes` has been renamed too `org.springframework.cloud.kubernetes.fabric8` + +#### Kubernetes Client Implementations +* There are alternate implementations for much of the functionality in Spring Cloud Kubernetes using the [Kubernetes Java Client](https://github.com/kubernetes-client/java). + +| Functionality | Starter | +| ---------------- | --------------- | +| Kubernetes Detection | spring-cloud-kubernetes-client | +| Configuration | spring-cloud-starter-kubernetes-client-config | +| Loadbalancer | spring-cloud-starter-kubernetes-client-loadbalancer | +| Discovery | spring-cloud-starter-kubernetes-client-all | + +NOTE: When using the new Informer based DiscoveryClient you must give cluster wide permissions to the app due to [a bug in the Kubernetes Java Client](https://github.com/kubernetes-client/java/pull/1409) + + +#### Configuration Change Listener +* Classes related to event based and polling configuration change listeners have now been split up [PR 644](https://github.com/spring-cloud/spring-cloud-kubernetes/pull/644) + +#### Renamed Starters + +| Old Starter | Renamed Starter | +| ---------------- | --------------- | +| spring-cloud-starter-kubernetes | spring-cloud-starter-kubernetes-fabric8 | +| spring-cloud-starter-kubernetes-config | spring-cloud-starter-kubernetes-fabric8-config | +| spring-cloud-starter-kubernetes-all | spring-cloud-starter-kubernetes-fabric8-all | +| spring-cloud-starter-kubernetes-loadbalancer | spring-cloud-starter-kubernetes-fabric8-loadbalancer | + + +### Spring Cloud Sleuth + +Most notable breaking changes: + +#### `3.0.0-RC1` + +##### Moving OpenTelemetry support to incubator + +OpenTelemetry was unable to provide a reliable GA date of their modules. We've decided to remove OpenTelemetry support from Spring Cloud Sleuth and move it to incubator https://github.com/spring-cloud-incubator/spring-cloud-sleuth-otel/ . If you want to continue using OpenTelemetry with Spring Cloud Sleuth you need to add the Spring repositories, the `spring-cloud-sleuth-otel-dependencies` BOM and `spring-cloud-sleuth-otel-autoconfigure` dependency. + +We have released a `1.0.0-M1` of Spring Cloud Sleuth OTel that is compatible with the `2020.0.0-RC1` release train. + +.Maven +```xml + + 1.0.0-M1 + + + + + + org.springframework.cloud + spring-cloud-dependencies + + ${release.train.version} + pom + import + + + org.springframework.cloud + spring-cloud-sleuth-otel-dependencies + + ${spring-cloud-sleuth-otel.version} + import + pom + + + + + + org.springframework.cloud + spring-cloud-starter-sleuth + + + org.springframework.cloud + spring-cloud-sleuth-brave + + + + + org.springframework.cloud + spring-cloud-sleuth-otel-autoconfigure + + + + + + spring-snapshots + https://repo.spring.io/snapshot + true + + + spring-milestones + https://repo.spring.io/milestone + + + + + spring-snapshots + https://repo.spring.io/snapshot + + + spring-milestones + https://repo.spring.io/milestone + + +``` + +.Gradle +``` +ext { + springCloudSleuthOtelVersion = "1.0.0-M1" +} + +dependencyManagement { + imports { + mavenBom "org.springframework.cloud:spring-cloud-dependencies:${releaseTrainVersion}" + mavenBom "org.springframework.cloud:spring-cloud-sleuth-otel-dependencies:${springCloudSleuthOtelVersion}" + } +} + +dependencies { + implementation("org.springframework.cloud:spring-cloud-starter-sleuth") { + exclude group: 'org.springframework.cloud', module: 'spring-cloud-sleuth-brave' + } + implementation "org.springframework.cloud:spring-cloud-sleuth-otel-autoconfigure" +} + +repositories { + mavenCentral() + maven { + url "https://repo.spring.io/snapshot" + } + maven { + url "https://repo.spring.io/milestone" + } + maven { + url "https://repo.spring.io/release" + } +} +``` + +#### `3.0.0-M6` + +##### Modules + +* New modules: `spring-cloud-sleuth-autoconfigure`, `spring-cloud-sleuth-api`, `spring-cloud-sleuth-instrumentation` + `spring-cloud-sleuth-core` removed and changed to `spring-cloud-sleuth-instrumentation` & `spring-cloud-sleuth-api` +* Removed `spring-cloud-starter-sleuth-otel` + To add OpenTelemetry support you need to add `spring-cloud-starter-sleuth` (adds Brave by default), exclude Brave and add `spring-cloud-sleuth-otel` dependency +* Except for the tests, `spring-cloud-sleuth-autoconfigure` is the only module that can have access to `@Configuration`, `@ConfiguraationProperties` classes. + Tests have been added to ensure such separation. + +##### Package moving + +* `org.springframework.cloud.sleuth.api` -> `org.springframework.cloud.sleuth` +* `org.springframework.cloud.sleuth.brave.autoconfig` -> `org.springframework.cloud.sleuth.autoconfig.brave` +* `org.springframework.cloud.sleuth.otel.autoconfig` -> `org.springframework.cloud.sleuth.autoconfig.otel` +* `org.springframework.cloud.sleuth` -> `org.springframework.cloud.sleuth` +* Instrumentation: `org.springframework.cloud.sleuth.annotation` -> `org.springframework.cloud.sleuth.instrument.annotation` +* All the autoconfiguration classes were moved under `org.springframework.cloud/sleuth.autoconfig` package + +##### Global class modifications + +* Any class registered as a bean is now public + +##### Classes + +* `RateLimitingSampler` constructor changed +* Merged a lot of auto configuration classes into one (e.g. `BraveAutoConfiguration` now imports various other configurations) +* Renamed `TraceBraveAutoConfiguration` to `BraveAutoConfiguration` +* Renamed `TraceOtelAutoConfiguration` to `OtelAutoConfiguration` +* Removed all `NoOp` implementations of the API + +To see the whole list check [this Github page](https://github.com/spring-cloud/spring-cloud-sleuth/issues?q=label%3A%22breaking+change%22+is%3Aclosed) and search for `3.0.0` milestones. + +You can also check the [Sleuth 3.0.0 migration guide](https://github.com/spring-cloud/spring-cloud-sleuth/wiki/Spring-Cloud-Sleuth-3.0-Migration-Guide). + +#### Up till `3.0.0-M5` + +* Introduces abstraction over tracers [PR 1757](https://github.com/spring-cloud/spring-cloud-sleuth/pull/1757) + * You can use Spring Cloud Sleuth's abstraction over Span's lifecycle [Check the docs](https://docs.spring.io/spring-cloud-sleuth/docs/3.0.x-SNAPSHOT/reference/html/using.html#using) + * You can use Brave or OpenTelemetry directly +* Module change / removal + * Point of entry should be `spring-cloud-starter-sleuth` (Brave support) or `spring-cloud-starter-otel` (OpenTelemetry support). + * If you want to use Zipkin: `spring-cloud-starter-zipkin` is removed and you should replace is with `spring-cloud-sleuth-zipkin` dependency. +* Enable reactor manual instrumentation when in gateway breaking change enhancement [Issue 1710](https://github.com/spring-cloud/spring-cloud-sleuth/issues/1710) +* Remove the legacy Sleuth keys, span naming breaking change [Issue 1564](https://github.com/spring-cloud/spring-cloud-sleuth/issues/1564) +* Remove the legacy MDC entries and remain with the Brave MDC ones only breaking change enhancement [Issue 1221](https://github.com/spring-cloud/spring-cloud-sleuth/issues/1221) + +# 2020.0.0-RC1 + +[All Issues](https://github.com/orgs/spring-cloud/projects/50) + +2020-12-11 + +- Spring Cloud Circuitbreaker `2.0.0-RC1` ([issues](https://github.com/spring-cloud/spring-cloud-circuitbreaker/milestone/7?closed=1)) +- Spring Cloud Contract `3.0.0-RC1` ([issues](https://github.com/spring-cloud/spring-cloud-contract/milestone/73?closed=1)) +- Spring Cloud Kubernetes `2.0.0-RC1` ([issues](https://github.com/spring-cloud/spring-cloud-kubernetes/milestone/27?closed=1)) +- Spring Cloud Commons `3.0.0-RC1` +- Spring Cloud Openfeign `3.0.0-RC1` +- Spring Cloud Cloudfoundry `3.0.0-RC1` +- Spring Cloud Security `3.0.0-RC1` +- Spring Cloud Bus `3.0.0-RC1` +- Spring Cloud Cli `3.0.0-RC1` +- Spring Cloud Zookeeper `3.0.0-RC1` ([issues](https://github.com/spring-cloud/spring-cloud-zookeeper/milestone/32?closed=1)) +- Spring Cloud Sleuth `3.0.0-RC1` ([issues](https://github.com/spring-cloud/spring-cloud-sleuth/milestone/85?closed=1)) +- Spring Cloud Consul `3.0.0-RC1` +- Spring Cloud Starter Build `2020.0.0-RC1` +- Spring Cloud Gateway `3.0.0-RC1` +- Spring Cloud Netflix `3.0.0-RC1` ([issues](https://github.com/spring-cloud/spring-cloud-netflix/milestone/97?closed=1)) +- Spring Cloud Vault `3.0.0-RC1` ([issues](https://github.com/spring-cloud/spring-cloud-vault/milestone/43?closed=1)) +- Spring Cloud Config `3.0.0-RC1` ([issues](https://github.com/spring-cloud/spring-cloud-config/milestone/83?closed=1)) + + +# 2020.0.0-M6 + +[All Issues](https://github.com/orgs/spring-cloud/projects/49) + +2020-12-01 + +- Spring Cloud Sleuth `3.0.0-M6` ([issues](https://github.com/spring-cloud/spring-cloud-sleuth/milestone/84?closed=1)) +- Spring Cloud Consul `3.0.0-M6` +- Spring Cloud Gateway `3.0.0-M6` +- Spring Cloud Zookeeper `3.0.0-M6` +- Spring Cloud Config `3.0.0-M6` +- Spring Cloud Cloudfoundry `3.0.0-M6` +- Spring Cloud Netflix `3.0.0-M6` +- Spring Cloud Kubernetes `2.0.0-M6` +- Spring Cloud Circuitbreaker `2.0.0-M6` +- Spring Cloud Contract `3.0.0-M6` ([issues](https://github.com/spring-cloud/spring-cloud-contract/milestone/72?closed=1)) +- Spring Cloud Starter Build `2020.0.0-M6` +- Spring Cloud Security `3.0.0-M6` +- Spring Cloud Bus `3.0.0-M6` +- Spring Cloud Cli `3.0.0-M6` +- Spring Cloud Vault `3.0.0-M6` +- Spring Cloud Openfeign `3.0.0-M6` +- Spring Cloud Commons `3.0.0-M6` + +# 2020.0.0-M5 + +[All Issues](https://github.com/orgs/spring-cloud/projects/46) + +2020-11-17 + +- Spring Cloud Consul `3.0.0-M5` +- Spring Cloud Gateway `3.0.0-M5` +- Spring Cloud Zookeeper `3.0.0-M5` +- Spring Cloud Sleuth `3.0.0-M5` ([issues](https://github.com/spring-cloud/spring-cloud-sleuth/milestone/81?closed=1)) +- Spring Cloud Cloudfoundry `3.0.0-M5` +- Spring Cloud Config `3.0.0-M5` ([issues](https://github.com/spring-cloud/spring-cloud-config/milestone/82?closed=1)) +- Spring Cloud Kubernetes `2.0.0-M5` ([issues](https://github.com/spring-cloud/spring-cloud-kubernetes/milestone/24?closed=1)) +- Spring Cloud Netflix `3.0.0-M5` ([issues](https://github.com/spring-cloud/spring-cloud-netflix/milestone/95?closed=1)) +- Spring Cloud Starter Build `2020.0.0-M5` +- Spring Cloud Circuitbreaker `2.0.0-M5` ([issues](https://github.com/spring-cloud/spring-cloud-circuitbreaker/milestone/6?closed=1)) +- Spring Cloud Contract `3.0.0-M5` ([issues](https://github.com/spring-cloud/spring-cloud-contract/milestone/70?closed=1)) +- Spring Cloud Security `3.0.0-M5` +- Spring Cloud Bus `3.0.0-M5` ([issues](https://github.com/spring-cloud/spring-cloud-bus/milestone/46?closed=1)) +- Spring Cloud Cli `3.0.0-M5` +- Spring Cloud Openfeign `3.0.0-M5` ([issues](https://github.com/spring-cloud/spring-cloud-openfeign/milestone/30?closed=1)) +- Spring Cloud Vault `3.0.0-M5` +- Spring Cloud Commons `3.0.0-M5` ([issues](https://github.com/spring-cloud/spring-cloud-commons/milestone/80?closed=1)) + + + + +# 2020.0.0-M4 + +[All Issues](https://github.com/orgs/spring-cloud/projects/43) + +2020-10-05 + +- Spring Cloud Sleuth `3.0.0-M4` ([issues](https://github.com/spring-cloud/spring-cloud-sleuth/milestone/79?closed=1)) +- Spring Cloud Consul `3.0.0-M4` ([issues](https://github.com/spring-cloud/spring-cloud-consul/milestone/51?closed=1)) +- Spring Cloud Config `3.0.0-M4` ([issues](https://github.com/spring-cloud/spring-cloud-config/milestone/80?closed=1)) +- Spring Cloud Kubernetes `2.0.0-M4` ([issues](https://github.com/spring-cloud/spring-cloud-kubernetes/milestone/21?closed=1)) +- Spring Cloud Gateway `3.0.0-M4` +- Spring Cloud Circuitbreaker `2.0.0-M4` +- Spring Cloud Contract `3.0.0-M4` ([issues](https://github.com/spring-cloud/spring-cloud-contract/milestone/68?closed=1)) +- Spring Cloud Starter Build `2020.0.0-M4` +- Spring Cloud Netflix `3.0.0-M4` ([issues](https://github.com/spring-cloud/spring-cloud-netflix/milestone/92?closed=1)) +- Spring Cloud Cloudfoundry `3.0.0-M4` +- Spring Cloud Security `3.0.0-M4` +- Spring Cloud Cli `3.0.0-M4` +- Spring Cloud Bus `3.0.0-M4` ([issues](https://github.com/spring-cloud/spring-cloud-bus/milestone/45?closed=1)) +- Spring Cloud Zookeeper `3.0.0-M4` ([issues](https://github.com/spring-cloud/spring-cloud-zookeeper/milestone/31?closed=1)) +- Spring Cloud Commons `3.0.0-M4` ([issues](https://github.com/spring-cloud/spring-cloud-commons/milestone/77?closed=1)) +- Spring Cloud Openfeign `3.0.0-M4` ([issues](https://github.com/spring-cloud/spring-cloud-openfeign/milestone/25?closed=1)) +- Spring Cloud Vault `3.0.0-M4` ([issues](https://github.com/spring-cloud/spring-cloud-vault/milestone/42?closed=1)) + + + + +# 2020.0.0-M3 + +[All Issues](https://github.com/orgs/spring-cloud/projects/42) + +2020-07-23 + +- Spring Cloud Sleuth `3.0.0-M3` +- Spring Cloud Kubernetes `2.0.0-M3` +- Spring Cloud Consul `3.0.0-M3` +- Spring Cloud Config `3.0.0-M3` ([issues](https://github.com/spring-cloud/spring-cloud-config/milestone/77?closed=1)) +- Spring Cloud Gateway `3.0.0-M3` +- Spring Cloud Starter Build `2020.0.0-M3` +- Spring Cloud Circuitbreaker `2.0.0-M3` +- Spring Cloud Contract `3.0.0-M3` ([issues](https://github.com/spring-cloud/spring-cloud-contract/milestone/67?closed=1)) +- Spring Cloud Cloudfoundry `3.0.0-M3` +- Spring Cloud Security `3.0.0-M3` +- Spring Cloud Netflix `3.0.0-M3` +- Spring Cloud Cli `3.0.0-M3` +- Spring Cloud Bus `3.0.0-M3` +- Spring Cloud Zookeeper `3.0.0-M3` +- Spring Cloud Commons `3.0.0-M3` +- Spring Cloud Vault `3.0.0-M3` +- Spring Cloud Openfeign `3.0.0-M3` + + +# 2020.0.0-M2 + +[All Issues](https://github.com/orgs/spring-cloud/projects/39) + +2020-05-29 + +- Spring Cloud Netflix `3.0.0-M2` +- Spring Cloud Sleuth `3.0.0-M2` +- Spring Cloud Consul `3.0.0-M2` +- Spring Cloud Kubernetes `2.0.0-M2` +- Spring Cloud Gateway `3.0.0-M2` ([issues](https://github.com/spring-cloud/spring-cloud-gateway/milestone/38?closed=1)) +- Spring Cloud Circuitbreaker `2.0.0-M2` +- Spring Cloud Contract `3.0.0-M2` ([issues](https://github.com/spring-cloud/spring-cloud-contract/milestone/65?closed=1)) +- Spring Cloud Starter Build `2020.0.0-M2` +- Spring Cloud Config `3.0.0-M2` +- Spring Cloud Build `3.0.0-M2` +- Spring Cloud Cloudfoundry `3.0.0-M2` +- Spring Cloud Security `3.0.0-M2` +- Spring Cloud Bus `3.0.0-M2` +- Spring Cloud Cli `3.0.0-M2` +- Spring Cloud Vault `3.0.0-M2` +- Spring Cloud Zookeeper `3.0.0-M2` +- Spring Cloud Commons `3.0.0-M2` +- Spring Cloud Openfeign `3.0.0-M2` + + +# 2020.0.0-M1 + +2020-04-16 + +- Spring Cloud Netflix `3.0.0.M1` ([issues](https://github.com/spring-cloud/spring-cloud-netflix/milestone/88?closed=1)) +- Spring Cloud Function `3.1.0.M1` +- Spring Cloud Sleuth `3.0.0.M1` ([issues](https://github.com/spring-cloud/spring-cloud-sleuth/milestone/74?closed=1)) +- Spring Cloud Consul `3.0.0.M1` ([issues](https://github.com/spring-cloud/spring-cloud-consul/milestone/47?closed=1)) +- Spring Cloud Kubernetes `2.0.0.M1` +- Spring Cloud Gateway `3.0.0.M1` ([issues](https://github.com/spring-cloud/spring-cloud-gateway/milestone/36?closed=1)) +- Spring Cloud Circuitbreaker `2.0.0.M1` +- Spring Cloud Contract `3.0.0.M1` ([issues](https://github.com/spring-cloud/spring-cloud-contract/milestone/63?closed=1)) +- Spring Cloud Starter Build `2020.0.0-M1` +- Spring Cloud Config `3.0.0.M1` +- Spring Cloud Build `3.0.0.M1` +- Spring Cloud Cloudfoundry `3.0.0.M1` +- Spring Cloud Security `3.0.0.M1` +- Spring Cloud Bus `3.0.0.M1` +- Spring Cloud Vault `3.0.0.M1` +- Spring Cloud Zookeeper `3.0.0.M1` ([issues](https://github.com/spring-cloud/spring-cloud-zookeeper/milestone/28?closed=1)) +- Spring Cloud Commons `3.0.0.M1` ([issues](https://github.com/spring-cloud/spring-cloud-commons/milestone/72?closed=1)) +- Spring Cloud Openfeign `3.0.0.M1` ([issues](https://github.com/spring-cloud/spring-cloud-openfeign/milestone/23?closed=1)) + + diff --git a/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/COMMIT_EDITMSG b/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/COMMIT_EDITMSG new file mode 100644 index 00000000..abfb3053 --- /dev/null +++ b/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/COMMIT_EDITMSG @@ -0,0 +1 @@ +adding Spring Clouud 2020.0 release notes diff --git a/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/index b/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/index index 6d24ea12dfb771512016b0b8cc273ed9f6b2a30b..a7171b93a32cbedcce7af3a11c023801cfaf68dc 100644 GIT binary patch delta 339 zcmey!c9WgQ#WTp6fq{Vuh&d>9A52SP_thDtZA|)B{s=^4~$QA|MS_^b)S<3sazurGf$1mM1*V qvLkLy_+Nh@U3FGUy_1eyXQYvBwAhtTGi2Bo9^Y&+>+vU(kM9Akx_>zU delta 253 zcmcb~{*jHx#WTp6fq{Vuh&d+m1WY_~Lm~RwlgsAE7K=w;yB-DFr GBme-WWmE|O diff --git a/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/logs/HEAD b/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/logs/HEAD index 03769567..15e49d8a 100644 --- a/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/logs/HEAD +++ b/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/logs/HEAD @@ -1 +1,2 @@ 0000000000000000000000000000000000000000 3fa536308bcdaf5c4670c0c438ead6b3cad990da Marcin Grzejszczak 1540806486 +0100 clone: from git@github.com:spring-projects/spring-cloud.wiki.git +3fa536308bcdaf5c4670c0c438ead6b3cad990da 1fa2c37fe634da1c5e640dcb461711d356f660f2 Ryan Baxter 1639686770 -0500 commit: adding Spring Clouud 2020.0 release notes diff --git a/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/logs/refs/heads/master b/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/logs/refs/heads/master index 03769567..15e49d8a 100644 --- a/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/logs/refs/heads/master +++ b/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/logs/refs/heads/master @@ -1 +1,2 @@ 0000000000000000000000000000000000000000 3fa536308bcdaf5c4670c0c438ead6b3cad990da Marcin Grzejszczak 1540806486 +0100 clone: from git@github.com:spring-projects/spring-cloud.wiki.git +3fa536308bcdaf5c4670c0c438ead6b3cad990da 1fa2c37fe634da1c5e640dcb461711d356f660f2 Ryan Baxter 1639686770 -0500 commit: adding Spring Clouud 2020.0 release notes diff --git a/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/objects/1f/a2c37fe634da1c5e640dcb461711d356f660f2 b/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/objects/1f/a2c37fe634da1c5e640dcb461711d356f660f2 new file mode 100644 index 00000000..8fbe5806 --- /dev/null +++ b/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/objects/1f/a2c37fe634da1c5e640dcb461711d356f660f2 @@ -0,0 +1 @@ +xkN1 STnN"!pqRwSYg 57, 69Tx(JTB)ڐ|lZ9jC qp0܂x((%J לm~?3O0ʟy\2%p.&/m,Z< =+_>j~Q \ No newline at end of file diff --git a/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/objects/35/e014e66523b759069c13bdb290a453e75ca14c b/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/objects/35/e014e66523b759069c13bdb290a453e75ca14c new file mode 100644 index 0000000000000000000000000000000000000000..7d124dbe22ed1c6fdde7eda7156f4ada1595c4c8 GIT binary patch literal 6550 zcmV;H8ENKt0li)ObKA&~zF(Jr#hiUPTZuu6)YC3miLA{!x~$eNOP8%gbyWn(5s4KD zaPg3=UHgB(ujc{GV1|$cy0WR-6@kHYPfz#PuK_ZN(+L|Ljt&m~<2f5`kGA{U{oP*g z>LiZYS)P|X|G$@uqFCi`27`H2EXqlLnl1-vHqQt7DvOeNFpbl4HdtlpFML|$gZTk>_QA=r!-Lh`#LR?S$5CHJD@ijJ7d!1I-1M7d%n9x7ETL!f7f?E zFXMH0--iXi3l(Yi;h%VM9Y>$nJ^hccjMozWdpY4*!V8|W@rVTJvKD32GAbq+4{vxT zN4d*?S7HK^%#J%j9Idab;{7S?p93dAAEGN=x>M=fLx408dd ziDBK@x~b66;B2Q&9;g34bnL#Y-!#mct7_9N6L!0k%>{THG+%GGZ1IH`%-!97G?;g1 z9N_}_1cUQd)M@yL?sQY_Yz)df`=-o#y~_ohO2%Uz=A13zl5-XnY?bDDG>JL8hSv!Z z2tVOVfgl`g{H61r{aKxSWAp2(rI`Ou3o?JIH~( z&(ievo)wF*VAC*RU~a}R?`@bxDFOqD{OoQ46bCW#m0n)@hHpg_wt)lN+o>GbPB1)p zgaaFPcNP>Qs_4+zxS_Ri&4^NJm<%dL-ATKO+Gf_LMvU5BOI5H@yT-#qQ$?MXDm_zi z^9F%{L=M#$2g>@DSPhBS8D%)9oCLnj3?J$iR`9FN{=`c+QoZp^99 z3Ef-%IKUm(@Vea><@LI|CbZNU-*7XpL}{6y;Wy>TXTmCGD6?a#6afUUZkF z>lxbA_0;r%-Ph^~*4i){KF~-JHz6zMF^u!TQW{snl|R~uYQrD3(X{+gccLDD)P~BI zKk81^^+&JUykNr@bf@c0mfECj0DX6=4$!yhaMP`IC+l@cqV2h9nkp-J@p0IE>LkaSp7b+DS%TgkW8N<39T#jpOtV z*&S!HhQ}5><4>>S5pbyr<-zvOR-avB#=A7T2{S6KQ?XR#qC_f1MR$T^GzVI*SYF&C zb)4L*ER-@x#kQ>F2f3^s1l1#BB$Le~lU&>t6`F@n=N``*TY6}u9zwc8vMMbXx$iX! z^0W?>`%XAy*k>PQ-cAWOYQ1@sCVC%-lpaqPMw*Q*o+iLVNV?_ot@{oRoBIxtF2Mka ziwXm4cN&k%>T_ei1@r7m?zhoPks71gDCQ5R5`D0TjsAg(62?})qLOzJB_-E8KCbqy z|NH$i{(|xax&lSS^RHtTLOGzcn8K`^qatrnb~S(|&!}vifsR%wz6fulH0!rnkdUM` zxwMU-q7TNHG!#(}(bZ`xhN$NRpj*cC4TQN5VP0_9p()Ld=12-Hl@kqvgZ<~?ZwjV( zQUnLPuMZAKyLrv9Z@Atv;Gz(Jdb$dr!oF3$&sw{tydEMg!dttEYn#@q84&hc)Lt*;md^Z&7BWa@c5?3 z@K2y^QnY>by&%lcu#3vPZ4B&wT4ot_>Vi00M#Tf8Gu}3v2_J3a7WeRa(dS1DA*~ka z%wxvR!hA7F!)*4L!Qg<0%eIkOG?}DH+lV}x@oAW~4JpcO5+$utQ$yh5AL8h@vW$Ji zv};gW(Yo`^u`PSCW@ykV=jKD}rPv(VBC0h*TSV4;!Vuks3K}V5klejuN(ut|Xehfw zM454Ee&IAj`$1T%ZcIQYqois=0AvD2odprhy`t;4Pz?llfJ5U%2DDi;US8RabD#uT z8)Ec~UsFY_&(5ydJ%Ch`(5-c9hTv)0hL~_%4veP_)W+ICJY)&KLvSgM5%iVnTvF7a z9-~3VQ#pcW?a2g~^y|1q(Ro{BCES`DZNa?-F`tJ(63jT|0_f#v5eg$DOgL7FpaqN* zC5RZ!6rS8hS(*s{Lk$&@#VhtpcpI`DIKh{iL7XL^FpFeJJ~M_{u`rtp&sD9B!XU&# z8B13MMV~V0R=pjug(MNR#lA z1i3>fkZ%zozE=4W=~h{o;$Pt>6nGr2R&g{9NmTt>59Icm_Ykup;gHUzQjlgo1+H|I z{m@X6dbJL!$`o(Lt>Z)-iZQT2wHxY8laOv@!#X}L!g(Hqd9dU~i1uE{uHpY_`C%L( zc##QU9SuA-Copoq{he)8K?C+N;|RpdJf_B>5g%a(XHiaCF0MD3h7fTcE20hk8xLa~ z4mwL_v_()m0;TanT-9o(t@1jIbB<*84EsvCFmxPN63#iyCd6?^#npFkvUWhA}xxARE5>P>7KXM)M5qV}W;+4(FyH&`Jlf0O8O~Mg~DrlK2UlATFj4W*M@GgjUXDLIrS_ zFVYgl0}&=Jqa<2FrW_!E({}(o(8_YbtSuQCU5vGMU|A9&@o*KkiPKv4V_1$)iXlT( zGb5M<+k}UhFAFD=s963=FntqV--P7Blq?nS3mleu-vYyBt{gknI1s4o(`GnQwn`CI z(+0sVq6FDj1ch6Kbo3C*W-lo;;rW&kL(49{*aqp(Nzh9jIFGSDxWd~?E_8u@Ys{hh z8NWuFy|BjUYkHglUyPjtw6ptqu)0&-pe3CpwiQUvAQOUml_KmXwE%UQRGoZ0BUw{r zi!_VO1%G`ngN7eN6j8?P*OH?$wt`H6ao8K7Cs$@Z@pO0tC{?-i{w``;v@MU!pGMn* z?OmkccK$>;cR>GJ4k0s9HJWYNLV17sQEIC`V2CwA#igZKuxUkQl<+;bXR7PT;^uR> zUSQNGh;0g31@iU&C@%@w5_XaCYqJn$6(;wro`#_SN(f!U9Mm#JaH0@OB)_&H)s<)+ z1&%@WV>rD5NJFFH!?Dlwpbn9K2q#%IJp^*_X>=V;`;47{icIp7S0c?}j03=Z zi89x;_f${l%OI|%J%&0^u?>(?6HD2np6y>thNyH)A~wXK9M+iyjXBnLNu@P`zHntY zh)V}*Yyd@R0eG=2Q5sZRtHDuvWJD>}UK>;;ppz9`8CU;@B1g%PSJ7)>zz5JS4k*^7 zLctgIgB1)=xWm4%3w3bo3kC#@e{kEmf?)C(1;}%o!|)Atfr-ujGW4{%nLS$XM`c*PmH}ozQs_05(OrN zeiSH^W*~@VGg*g4QE^hvDeR>i#ujzcn8B)yeq>__+mp74w? zCJyr)#tyvFp#i4=ORbc`{}qBU3dQ6e>dluYuaWY|sZ@=KqC8>BIf8ijgcZB`_=)ZB z?t1m!R300PYYmcX!VFlFu<=g{k(3SK?DrS;0l|m138@i)QVCr8@)JzOWD9OzWU4{U zkyMz6RbOFKrC$#}QCZ2uL)GLS!+L=GKJfCa4XxP zz212Wi=(KN@)q%~gwRs?M!*}TE#e5=cJS#`wD*Jpoud*0b*7UamvHk4NsP7~Y!ne; zIicjH*R#ivYb`}#giIM}0##JtVPQL>M8MvkFnvA~_8h^7$ogrY{mfqg8Bm%NH5fdt z0zaF8?j4FK>%x2;Mzw&+94UvPa*N3+d!QyARBN)$O!kC>wBYf8Rhh|M2>ZwMP)FG@ zl3-}_D&k!qj|7IgszNO!LN+xn<2W=MQGCO58Clu^iNTK5_ZhQyAI?P~Z2kDKEK-e7 z$jfx3G`)ux{h7;8fxJ}FweYVf2r&=Kf5*?o895p`3b#&4;l#)W%Rokgl^ zNnd$e_9Pvy9x^o4Ua<-SMUM}F@A#k|@a!i4R?Cx@G{$QU+1S|i97kWV@Gg0PQ z;O#Z?XylIsu4_*#0prMYOcE2TE83!?3fl4{T%q7q0MT$!LPeRy$Jz(eqblpAo~<5! zG@wBWS@aagN2*$SOg#(;U-n&&0XNkU2{{dhYL;CFtJee`$ze6VX7OlX(=&c6w{f(J z%XyT1GF-ZpT;saSUbV8W@`JClX-gVSj$F#sLN^hNkG8{+5E5KJ!hrW#IEy*O0X_b? zV7~(!B({iZvjpM~(DQ$&!%1)1Gwu1G^}hCcwXdm>Pt3xq<1jR*{AWoq$2**hc(xW$ z-dM<1%?^&=RNnHEdWnjmug|*AZg>jIdx27$3>3+)*7Ct%y=e-f> zjRYrv5V5>K<2UTZTH(ETrDA#vvgD{%Dj@fT5ZG7oZ@aSe=xs3tXW^eviOM!>nTU-) zMdF@?@yjhiT3j*~Necx8v1bnemE3R1{!{0uENqiWRLG{M_$q8iCjTm(JKt9ozvt{+ zrdU1HGJZm(MrB-Y8ciD|PfL{JS8E2XqII{ZH z)%!$qX7=CynL{v#rG8T902*^yVTwrWh{a3g_`C^kGhJ(&5iiZbgXVbsp3YgJPp{4f z;M|b5AbE@ORPwcr$!e!=CTLjBU+Xs}DG#75012Y^X?qK)8c$E833{5U(p|k1DcTI- zl=}YU{KtPeRc&gyc_2_<5topQs1$09DxN5eQHS}G*fIJySedMdb9Bq8u}ziYoKt^8 zH72Rf@LX5YDPyOCKGxY%)Rr3Br~PHY@xvoY3m%?M;8DMp+2iIm9_Wi19!HF#HRI8z z)1nC;Me1==(^O}+#R3=BVtZe2LDlMf9GQM?yZyRNO2khPfRc9B@~^6=s_ZIyEV3(& z^VldFuV-(d*{cd2W8HX>wXWyvJwDTd=BZF!vIc6=2$e*U6x^UwBX7yZAKDIIdf2e=3$Da@ZSiDPh!wL;pyBnobbM#R0mU$}9+>*ZBEmG7!sI(55 z^63q`5@!J3i!bY7)8|ip6+o(v>X-ic*S9hCW&f~q@`uq#7f$~qJru6|DavsRZ923% zwnWt}=X7vWo@b}C{M$J9pwC}ZW1o^OdI=o|KCsP#V_L@5g{(4&NALulKA^tQyhIiB zi46g@g1hJ@8eGWAnTVeQNh1J_;9OG(-V+6R&=xrSzbht=9_io#-wML^oFP_1>>y4j zO`yXlUlDWELt^xcn)lSa7#{2$bYoU_WAM0)$NngiQj!xIe~9%Kw;a+{$euU3+f-JZ@HSW4 zm99AYY;5dqo1w}G|67oiDS$!u(4uQ0@cI5m0K7|QYcv3Fy8vu!D+*OzMd>PQ+dIvW zrJ<};A8Q~$L;pM@94q&XvA4`O!1ywg-dWGEhN^o;xG3%!E*JCF~;JD|mW#yjxj#u)GIW@l^A{SwXH|Kks85drD zRmL^+enZUGa`&UJO)YmvxLWRxY1r^yXI*h^xb?$^KHG7*YuI3S?x4wZirR38ZF=l6 z$nK>5QB@njH4&pbZI5p>J}uyc0qdOnxo2mrP+14x7}yzWtO<>sYWq})gLNCw_h4Py z2e=#nb7f=#Sa-(o4um0%-Bxkbv8`vzT+HjvRH~zTgSDMDaoK?E%Bl&r-C3JT*ftnD zv>3xVOAE#~`?xn=$Ivj2_bK2K8nH+NU%P***umF>w(sb`Fw7XKJ6QlHy<8|Aro1WPH&i9(&%`>nWymem(cCHz`?YDhcYc2S@ zTs9q4cP2d!s?9O`>ICO5e-1XgL(K5ey=x+O_r*1kyUp{up;~vc-l{{J{x-3dZg~8eI9AlCUV;&btml90W1Y>dK-Mye}fMXi!blXm-h~W5$0+DVZ+D;RMGK6vW4X;f>%CLeySDNFOYz#VuBH&(uf{g) z&mGV(Eq8#&K;1!2L+JiZ)wwLy8u8suTa2*AXj~4lPP+)zokd?9(}wG7F~G~EiDT{n zRqYmC{ovfa?=?_&m}8*s5YxciyQXovcWuLQ@4M#dj%k{wJHjT3e;Zf`d)S!bt2it@RtE z4#@aKVuQ>k%y~ejwTfX?f>deA$6*6xHet~RGFD%uq04JQ##JqFS%Zvk879d1?t4JS zH>?3Nz9BWp`0ko8;=A935gOCgf_*v4sMYgW#rRD~dvX*jVsGqp6ZSSC?afgvHS6{M IACw5j=py{Cw*UYD literal 0 HcmV?d00001 diff --git a/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/objects/b4/e40ce66b58da90ff7fc067259a647f422c1e89 b/releaser-core/src/test/resources/projects/spring-cloud-wiki/git/objects/b4/e40ce66b58da90ff7fc067259a647f422c1e89 new file mode 100644 index 0000000000000000000000000000000000000000..6cc45a7f828e76b2eb9a1d220be13a3b0251530a GIT binary patch literal 368 zcmV-$0gwK80V^p=O;s>8vtTeZFfcPQQSivmP1Q>*PR`6s$xmiDajPYuK`;N{l3%~2 z()51%G(SG|7OF6~peQphUDr7$zcfYH$iT=z&p+?HUH@a5F0 z(1ME|vV0t8S%c?c)9;d)Q;g{hpaD#LI(d%29=Z1~P$kH89Awym?r!Xcg@WIC-=$ect