Changed modules

This commit is contained in:
Marcin Grzejszczak
2019-09-06 11:58:14 +02:00
parent 16ee34af23
commit d9fb18dca4
106 changed files with 1627 additions and 1476 deletions

View File

@@ -26,10 +26,10 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.CustomBomParser;
import org.springframework.cloud.release.internal.buildsystem.PomReader;
import org.springframework.cloud.release.internal.buildsystem.Project;
import org.springframework.cloud.release.internal.buildsystem.VersionsFromBom;
import org.springframework.cloud.release.internal.buildsystem.VersionsFromBomBuilder;
import org.springframework.cloud.release.internal.project.Project;
import org.springframework.cloud.release.internal.tech.PomReader;
import org.springframework.util.StringUtils;
import static org.springframework.cloud.release.cloud.buildsystem.SpringCloudBomConstants.BOOT_DEPENDENCIES_ARTIFACT_ID;
@@ -44,7 +44,7 @@ import static org.springframework.cloud.release.cloud.buildsystem.SpringCloudBom
import static org.springframework.cloud.release.cloud.buildsystem.SpringCloudBomConstants.CLOUD_STARTER_PARENT_ARTIFACT_ID;
import static org.springframework.cloud.release.cloud.buildsystem.SpringCloudBomConstants.SPRING_BOOT;
public class SpringCloudMavenBomParser implements CustomBomParser {
class SpringCloudMavenBomParser implements CustomBomParser {
private static final Logger log = LoggerFactory
.getLogger(SpringCloudMavenBomParser.class);

View File

@@ -23,9 +23,9 @@ import java.nio.file.Files;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.docs.CustomProjectDocumentationUpdater;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.project.ProjectVersion;
/**
* @author Marcin Grzejszczak

View File

@@ -24,13 +24,13 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.buildsystem.GradleUpdater;
import org.springframework.cloud.release.internal.buildsystem.ProjectPomUpdater;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.docs.DocumentationUpdater;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.github.ProjectGitHubHandler;
import org.springframework.cloud.release.internal.postrelease.PostReleaseActions;
import org.springframework.cloud.release.internal.project.ProcessedProject;
import org.springframework.cloud.release.internal.project.ProjectCommandExecutor;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.cloud.release.internal.sagan.SaganUpdater;
import org.springframework.cloud.release.internal.tech.MakeBuildUnstableException;
@@ -48,8 +48,6 @@ public class Releaser implements ReleaserPropertiesAware {
private static boolean SKIP_SNAPSHOT_ASSERTION = false;
private ReleaserProperties releaserProperties;
private final ProjectPomUpdater projectPomUpdater;
private final ProjectCommandExecutor projectCommandExecutor;
@@ -68,6 +66,8 @@ public class Releaser implements ReleaserPropertiesAware {
private final PostReleaseActions postReleaseActions;
private ReleaserProperties releaserProperties;
public Releaser(ReleaserProperties releaserProperties,
ProjectPomUpdater projectPomUpdater,
ProjectCommandExecutor projectCommandExecutor,

View File

@@ -968,6 +968,11 @@ public class ReleaserProperties implements Serializable {
public static class Gradle implements Serializable {
/**
* Placeholder for system properties.
*/
public static final String SYSTEM_PROPS_PLACEHOLDER = "{{systemProps}}";
/**
* A mapping that should be applied to {@code gradle.properties} in order to
* perform a substitution of properties. The mapping is from a property inside
@@ -998,11 +1003,6 @@ public class ReleaserProperties implements Serializable {
"^.*spring-cloud-contract-maven-plugin/target/.*$",
"^.*samples/standalone/[a-z]+/.*$");
/**
* Placeholder for system properties.
*/
public static final String SYSTEM_PROPS_PLACEHOLDER = "{{systemProps}}";
/**
* Command to be executed to build the project.
*/

View File

@@ -21,6 +21,7 @@ import java.util.LinkedHashSet;
import java.util.Set;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.project.Project;
import org.springframework.lang.Nullable;
/**
@@ -28,6 +29,21 @@ import org.springframework.lang.Nullable;
*/
public interface CustomBomParser {
CustomBomParser NO_OP = new CustomBomParser() {
@Override
public boolean isApplicable(File thisProjectRoot, ReleaserProperties properties,
Set<Project> projects) {
return true;
}
@Override
public VersionsFromBom parseBom(File thisProjectRoot,
ReleaserProperties properties) {
return VersionsFromBom.EMPTY_VERSION;
}
};
/**
* Different projects can have different parsers. This method will tell whether the
* current parser should be applied or not.
@@ -69,19 +85,4 @@ public interface CustomBomParser {
return new File(thisProjectRoot, "build.gradle").exists();
}
CustomBomParser NO_OP = new CustomBomParser() {
@Override
public boolean isApplicable(File thisProjectRoot, ReleaserProperties properties,
Set<Project> projects) {
return true;
}
@Override
public VersionsFromBom parseBom(File thisProjectRoot,
ReleaserProperties properties) {
return VersionsFromBom.EMPTY_VERSION;
}
};
}

View File

@@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.ReleaserPropertiesAware;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
/**

View File

@@ -31,6 +31,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.project.Project;
import org.springframework.cloud.release.internal.tech.PomReader;
/**
* Parses the poms for a given project and populates versions from a release train.

View File

@@ -40,6 +40,8 @@ import org.codehaus.stax2.XMLInputFactory2;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.project.Project;
import org.springframework.cloud.release.internal.tech.PomReader;
import org.springframework.util.StringUtils;
import static org.springframework.util.StringUtils.hasText;

View File

@@ -38,6 +38,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.ReleaserPropertiesAware;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.project.Project;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
/**
@@ -60,10 +62,10 @@ public class ProjectPomUpdater implements ReleaserPropertiesAware {
private final PomUpdater pomUpdater = new PomUpdater();
private ReleaserProperties properties;
private final List<BomParser> bomParsers;
private ReleaserProperties properties;
public ProjectPomUpdater(ReleaserProperties properties, List<BomParser> bomParsers) {
this.properties = properties;
this.gitRepo = new ProjectGitHandler(properties);

View File

@@ -26,6 +26,8 @@ import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.project.Project;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
/**
@@ -174,6 +176,10 @@ public class VersionsFromBom {
this.projects.removeIf(project -> expectedProjectName.equals(project.name));
}
public Set<Project> projects() {
return this.projects;
}
@Override
public String toString() {
return "Projects=\n\t" + this.projects.stream().map(Object::toString)

View File

@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -23,6 +23,7 @@ import java.util.List;
import java.util.Set;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.project.Project;
public class VersionsFromBomBuilder {

View File

@@ -18,13 +18,30 @@ package org.springframework.cloud.release.internal.docs;
import java.io.File;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
/**
* @author Marcin Grzejszczak
*/
public interface CustomProjectDocumentationUpdater {
/**
* NO OP implementation of the updater.
*/
CustomProjectDocumentationUpdater NO_OP = new CustomProjectDocumentationUpdater() {
@Override
public boolean isApplicable(File clonedDocumentationProject,
ProjectVersion currentProject, String bomBranch) {
return true;
}
@Override
public File updateDocsRepo(File clonedDocumentationProject,
ProjectVersion currentProject, String bomBranch) {
return clonedDocumentationProject;
}
};
/**
* Different projects can have different documentation updaters. This method will tell
* whether the current updater should be applied or not. Updates the documentation
@@ -48,21 +65,4 @@ public interface CustomProjectDocumentationUpdater {
File updateDocsRepo(File clonedDocumentationProject, ProjectVersion currentProject,
String bomBranch);
/**
* NO OP implementation of the updater.
*/
CustomProjectDocumentationUpdater NO_OP = new CustomProjectDocumentationUpdater() {
@Override
public boolean isApplicable(File clonedDocumentationProject,
ProjectVersion currentProject, String bomBranch) {
return true;
}
@Override
public File updateDocsRepo(File clonedDocumentationProject,
ProjectVersion currentProject, String bomBranch) {
return clonedDocumentationProject;
}
};
}

View File

@@ -17,11 +17,12 @@
package org.springframework.cloud.release.internal.docs;
import java.io.File;
import java.util.List;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.ReleaserPropertiesAware;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.cloud.release.internal.template.TemplateGenerator;
@@ -38,9 +39,10 @@ public class DocumentationUpdater implements ReleaserPropertiesAware {
public DocumentationUpdater(ProjectGitHandler gitHandler,
ReleaserProperties properties, TemplateGenerator templateGenerator,
ProjectDocumentationUpdater updater) {
List<CustomProjectDocumentationUpdater> updaters) {
this.properties = properties;
this.projectDocumentationUpdater = updater;
this.projectDocumentationUpdater = new ProjectDocumentationUpdater(properties,
gitHandler, updaters);
this.releaseTrainContentsUpdater = new ReleaseTrainContentsUpdater(
this.properties, gitHandler, templateGenerator);
}

View File

@@ -24,24 +24,24 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.ReleaserPropertiesAware;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.project.ProjectVersion;
/**
* @author Marcin Grzejszczak
*/
public class ProjectDocumentationUpdater implements ReleaserPropertiesAware {
class ProjectDocumentationUpdater implements ReleaserPropertiesAware {
private static final Logger log = LoggerFactory
.getLogger(ProjectDocumentationUpdater.class);
private final ProjectGitHandler gitHandler;
private ReleaserProperties properties;
private final List<CustomProjectDocumentationUpdater> updaters;
public ProjectDocumentationUpdater(ReleaserProperties properties,
private ReleaserProperties properties;
ProjectDocumentationUpdater(ReleaserProperties properties,
ProjectGitHandler gitHandler,
List<CustomProjectDocumentationUpdater> updaters) {
this.gitHandler = gitHandler;

View File

@@ -32,8 +32,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.ReleaserPropertiesAware;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.cloud.release.internal.tech.HandlebarsHelper;
import org.springframework.cloud.release.internal.template.TemplateGenerator;

View File

@@ -21,7 +21,7 @@ import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
/**

View File

@@ -27,7 +27,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.ReleaserPropertiesAware;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.tech.TemporaryFileStorage;
import org.springframework.util.StringUtils;
@@ -57,6 +57,10 @@ public class ProjectGitHandler implements ReleaserPropertiesAware {
registerShutdownHook();
}
static void clearCache() {
CACHE.clear();
}
private void registerShutdownHook() {
Runtime.getRuntime().addShutdownHook(new Thread(TemporaryFileStorage::cleanup));
}
@@ -79,10 +83,6 @@ public class ProjectGitHandler implements ReleaserPropertiesAware {
}
}
static void clearCache() {
CACHE.clear();
}
public void commitAfterBumpingVersions(File project, ProjectVersion bumpedVersion) {
if (bumpedVersion.isSnapshot()) {
log.info("Snapshot version [{}] found. Will only commit the changed poms",

View File

@@ -30,7 +30,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;

View File

@@ -32,7 +32,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;

View File

@@ -21,7 +21,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.ReleaserPropertiesAware;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.cloud.release.internal.tech.TemporaryFileStorage;

View File

@@ -34,10 +34,10 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.GradleUpdater;
import org.springframework.cloud.release.internal.buildsystem.ProjectPomUpdater;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.project.ProcessedProject;
import org.springframework.cloud.release.internal.project.ProjectCommandExecutor;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.cloud.release.internal.versions.VersionsFetcher;
import org.springframework.core.NestedExceptionUtils;

View File

@@ -17,7 +17,6 @@
package org.springframework.cloud.release.internal.project;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
/**
* Represents a processed project.

View File

@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.cloud.release.internal.buildsystem;
package org.springframework.cloud.release.internal.project;
/**
* Represents a single project.
@@ -23,10 +23,19 @@ package org.springframework.cloud.release.internal.buildsystem;
*/
public class Project {
/**
* An empty project.
*/
public static Project EMPTY_PROJECT = new Project("", "");
/**
* Project name.
*/
public final String name;
/**
* Project version.
*/
public final String version;
public Project(String name, String version) {

View File

@@ -40,7 +40,6 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.ReleaserPropertiesAware;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.util.StringUtils;
/**
@@ -304,47 +303,6 @@ class CommandPicker {
private static final Log log = LogFactory.getLog(CommandPicker.class);
private enum ProjectType {
MAVEN, GRADLE, BASH;
}
/**
* Enumeration over commonly used Maven profiles.
*/
private enum MavenProfile {
/**
* Profile used for milestone versions.
*/
MILESTONE,
/**
* Profile used for ga versions.
*/
CENTRAL,
/**
* Profile used to run integration tests.
*/
INTEGRATION,
/**
* Profile used to run guides publishing.
*/
GUIDES;
/**
* Converts the profile to lowercase, maven command line property.
* @return profile with prepended -P
*/
public String asMavenProfile() {
return "-P" + this.name().toLowerCase();
}
}
private final ReleaserProperties releaserProperties;
private final ProjectType projectType;
@@ -530,6 +488,47 @@ class CommandPicker {
.collect(Collectors.joining(" "));
}
private enum ProjectType {
MAVEN, GRADLE, BASH;
}
/**
* Enumeration over commonly used Maven profiles.
*/
private enum MavenProfile {
/**
* Profile used for milestone versions.
*/
MILESTONE,
/**
* Profile used for ga versions.
*/
CENTRAL,
/**
* Profile used to run integration tests.
*/
INTEGRATION,
/**
* Profile used to run guides publishing.
*/
GUIDES;
/**
* Converts the profile to lowercase, maven command line property.
* @return profile with prepended -P
*/
public String asMavenProfile() {
return "-P" + this.name().toLowerCase();
}
}
}
class HtmlFileWalker extends SimpleFileVisitor<Path> {

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.cloud.release.internal.buildsystem;
package org.springframework.cloud.release.internal.project;
import java.io.File;
import java.util.Arrays;
@@ -25,7 +25,7 @@ import java.util.regex.Pattern;
import org.apache.maven.model.Model;
import org.springframework.cloud.release.internal.project.ProjectCommandExecutor;
import org.springframework.cloud.release.internal.tech.PomReader;
import org.springframework.util.StringUtils;
/**

View File

@@ -26,8 +26,6 @@ import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.Project;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
/**
* Abstraction over collection of projects.

View File

@@ -28,7 +28,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.util.StringUtils;
/**

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.cloud.release.internal.buildsystem;
package org.springframework.cloud.release.internal.tech;
import java.io.File;
import java.io.FileReader;

View File

@@ -39,7 +39,7 @@ import org.springframework.boot.context.properties.source.MapConfigurationProper
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.ReleaserPropertiesAware;
import org.springframework.cloud.release.internal.buildsystem.ProjectPomUpdater;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.core.io.InputStreamResource;
import org.springframework.util.StringUtils;
@@ -54,12 +54,12 @@ public class VersionsFetcher implements ReleaserPropertiesAware {
private static final Logger log = LoggerFactory.getLogger(VersionsFetcher.class);
private ReleaserProperties properties;
private final ProjectPomUpdater projectPomUpdater;
private final ToPropertiesConverter toPropertiesConverter;
private ReleaserProperties properties;
public VersionsFetcher(ReleaserProperties properties,
ProjectPomUpdater projectPomUpdater) {
this.properties = properties;

View File

@@ -2,16 +2,17 @@ On behalf of the community, I am pleased to announce that the {{ availability }}
## Notable Changes in the {{ releaseName }} Release Train
{{#each projects}}
### {{ name }}
### {{ name }}
Some text related to project
Some text related to project
{{/each}}
The following modules were updated as part of {{ releaseVersion }}:
| Module | Version | Issues
|--- |--- |--- |---
{{#each projects}}| {{name}} | {{version}} | {{#if closedMilestoneUrl}}([issues]({{{ closedMilestoneUrl }}})){{/if}}{{^closedMilestoneUrl}}&nbsp;{{/closedMilestoneUrl}}
| Module | Version | Issues
|--- |--- |--- |---
{{#each projects}}| {{name}} | {{version}} | {{#if
closedMilestoneUrl}}([issues]({{{ closedMilestoneUrl }}})){{/if}}{{^closedMilestoneUrl}}&nbsp;{{/closedMilestoneUrl}}
{{/each}}
As always, we welcome feedback on [GitHub](https://github.com/spring-cloud/), on [Gitter](https://gitter.im/spring-cloud/spring-cloud), on [Stack Overflow](https://stackoverflow.com/questions/tagged/spring-cloud), or on [Twitter](https://twitter.com/SpringCloud).
@@ -19,16 +20,17 @@ As always, we welcome feedback on [GitHub](https://github.com/spring-cloud/), on
To get started with Maven with a BOM (dependency management only):
```
{{#if nonRelease}}<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>{{/if}}
{{#if nonRelease}}
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>{{/if}}
<dependencyManagement>
<dependencies>
<dependency>
@@ -57,28 +59,28 @@ or with Gradle:
```
buildscript {
dependencies {
classpath "io.spring.gradle:dependency-management-plugin:1.0.2.RELEASE"
}
dependencies {
classpath "io.spring.gradle:dependency-management-plugin:1.0.2.RELEASE"
}
}
{{#if nonRelease}}repositories {
maven {
url 'https://repo.spring.io/milestone'
}
maven {
url 'https://repo.spring.io/milestone'
}
}{{/if}}
apply plugin: "io.spring.dependency-management"
dependencyManagement {
imports {
mavenBom 'org.springframework.cloud:spring-cloud-dependencies:{{ releaseVersion }}'
}
imports {
mavenBom 'org.springframework.cloud:spring-cloud-dependencies:{{ releaseVersion }}'
}
}
dependencies {
compile 'org.springframework.cloud:spring-cloud-starter-config'
compile 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
...
compile 'org.springframework.cloud:spring-cloud-starter-config'
compile 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
...
}
```

View File

@@ -5,15 +5,15 @@ title: Spring Cloud
badges:
# Customize your project's badges. Delete any entries that do not apply.
custom:
- name: Source (GitHub)
url: https://github.com/spring-cloud
icon: github
# Customize your project's badges. Delete any entries that do not apply.
custom:
- name: Source (GitHub)
url: https://github.com/spring-cloud
icon: github
- name: StackOverflow
url: https://stackoverflow.com/questions/tagged/spring-cloud
icon: stackoverflow
- name: StackOverflow
url: https://stackoverflow.com/questions/tagged/spring-cloud
icon: stackoverflow
---
@@ -42,7 +42,7 @@ Spring Cloud builds on Spring Boot by providing a bunch of libraries
that enhance the behaviour of an application when added to the
classpath. You can take advantage of the basic default behaviour to
get started really quickly, and then when you need to, you can
configure or extend to create a custom solution.
configure or extend to create a custom solution.
<span id="quick-start"></span>
@@ -59,7 +59,8 @@ and eureka (change the artifact ids to pull in other starters):
## Features
Spring Cloud focuses on providing good out of box experience for typical use cases and extensibility mechanism to cover others.
Spring Cloud focuses on providing good out of box experience for typical use cases and extensibility mechanism to cover
others.
* Distributed/versioned configuration
* Service registration and discovery
@@ -79,9 +80,9 @@ annotation. Example application that is a discovery client:
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
@@ -91,119 +92,160 @@ public class Application {
<!-- Spring Cloud Config -->
{% capture project_description %}
Centralized external configuration management backed by a git repository. The configuration resources map directly to Spring `Environment` but could be used by non-Spring applications if desired.
Centralized external configuration management backed by a git repository. The configuration resources map directly to
Spring `Environment` but could be used by non-Spring applications if desired.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-config" repo_url="https://github.com/spring-cloud/spring-cloud-config" project_title="Spring Cloud Config" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-config"
repo_url="https://github.com/spring-cloud/spring-cloud-config" project_title="Spring Cloud Config"
project_description=project_description %}
<!-- Spring Cloud Netflix -->
{% capture project_description %}
Integration with various Netflix OSS components (Eureka, Hystrix, Zuul, Archaius, etc.).
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-netflix" repo_url="https://github.com/spring-cloud/spring-cloud-netflix" project_title="Spring Cloud Netflix" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-netflix"
repo_url="https://github.com/spring-cloud/spring-cloud-netflix" project_title="Spring Cloud Netflix"
project_description=project_description %}
<!-- Spring Cloud Bus -->
{% capture project_description %}
An event bus for linking services and service instances together with distributed messaging. Useful for propagating state changes across a cluster (e.g. config change events).
An event bus for linking services and service instances together with distributed messaging. Useful for propagating
state changes across a cluster (e.g. config change events).
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-bus" repo_url="https://github.com/spring-cloud/spring-cloud-bus" project_title="Spring Cloud Bus" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-bus"
repo_url="https://github.com/spring-cloud/spring-cloud-bus" project_title="Spring Cloud Bus"
project_description=project_description %}
<!-- Spring Cloud Cloudfoundry -->
{% capture project_description %}
Integrates your application with Pivotal Cloud Foundry. Provides a service discovery implementation and also makes it easy to implement SSO and OAuth2 protected resources.
Integrates your application with Pivotal Cloud Foundry. Provides a service discovery implementation and also makes it
easy to implement SSO and OAuth2 protected resources.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-cloudfoundry" repo_url="https://github.com/spring-cloud/spring-cloud-cloudfoundry" project_title="Spring Cloud for Cloud Foundry" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-cloudfoundry"
repo_url="https://github.com/spring-cloud/spring-cloud-cloudfoundry" project_title="Spring Cloud for Cloud Foundry"
project_description=project_description %}
<!-- Spring Cloud Open Service Broker -->
{% capture project_description %}
Provides a starting point for building a service broker that implements the Open Service Broker API.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-open-service-broker/" repo_url="https://github.com/spring-cloud/spring-cloud-open-service-broker" project_title="Spring Cloud Open Service Broker" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-open-service-broker/"
repo_url="https://github.com/spring-cloud/spring-cloud-open-service-broker" project_title="Spring Cloud Open Service
Broker" project_description=project_description %}
<!-- Spring Cloud Cluster -->
{% capture project_description %}
Leadership election and common stateful patterns with an abstraction and implementation for Zookeeper, Redis, Hazelcast, Consul.
Leadership election and common stateful patterns with an abstraction and implementation for Zookeeper, Redis, Hazelcast,
Consul.
{% endcapture %}
{% include project_block.md site_url="/spring-cloud" repo_url="https://github.com/spring-cloud/spring-cloud-cluster" project_title="Spring Cloud Cluster" project_description=project_description %}
{% include project_block.md site_url="/spring-cloud" repo_url="https://github.com/spring-cloud/spring-cloud-cluster"
project_title="Spring Cloud Cluster" project_description=project_description %}
<!-- Spring Cloud Consul -->
{% capture project_description %}
Service discovery and configuration management with Hashicorp Consul.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-consul" repo_url="https://github.com/spring-cloud/spring-cloud-consul" project_title="Spring Cloud Consul" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-consul"
repo_url="https://github.com/spring-cloud/spring-cloud-consul" project_title="Spring Cloud Consul"
project_description=project_description %}
<!-- Spring Cloud Security -->
{% capture project_description %}
Provides support for load-balanced OAuth2 rest client and authentication header relays in a Zuul proxy.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-security" repo_url="https://github.com/spring-cloud/spring-cloud-security" project_title="Spring Cloud Security" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-security"
repo_url="https://github.com/spring-cloud/spring-cloud-security" project_title="Spring Cloud Security"
project_description=project_description %}
<!-- Spring Cloud Sleuth -->
{% capture project_description %}
Distributed tracing for Spring Cloud applications, compatible with Zipkin, HTrace and log-based (e.g. ELK) tracing.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-sleuth" repo_url="https://github.com/spring-cloud/spring-cloud-sleuth" project_title="Spring Cloud Sleuth" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-sleuth"
repo_url="https://github.com/spring-cloud/spring-cloud-sleuth" project_title="Spring Cloud Sleuth"
project_description=project_description %}
<!-- Spring Cloud Data Flow -->
{% capture project_description %}
A cloud-native orchestration service for composable microservice applications on modern runtimes. Easy-to-use DSL, drag-and-drop GUI, and REST-APIs together simplifies the overall orchestration of microservice based data pipelines.
A cloud-native orchestration service for composable microservice applications on modern runtimes. Easy-to-use DSL,
drag-and-drop GUI, and REST-APIs together simplifies the overall orchestration of microservice based data pipelines.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-dataflow" repo_url="https://github.com/spring-cloud/spring-cloud-dataflow" project_title="Spring Cloud Data Flow" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-dataflow"
repo_url="https://github.com/spring-cloud/spring-cloud-dataflow" project_title="Spring Cloud Data Flow"
project_description=project_description %}
<!-- Spring Cloud Stream -->
{% capture project_description %}
A lightweight event-driven microservices framework to quickly build applications that can connect to external systems. Simple declarative model to send and receive messages using Apache Kafka or RabbitMQ between Spring Boot apps.
A lightweight event-driven microservices framework to quickly build applications that can connect to external systems.
Simple declarative model to send and receive messages using Apache Kafka or RabbitMQ between Spring Boot apps.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-stream" repo_url="https://github.com/spring-cloud/spring-cloud-stream" project_title="Spring Cloud Stream" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-stream"
repo_url="https://github.com/spring-cloud/spring-cloud-stream" project_title="Spring Cloud Stream"
project_description=project_description %}
<!-- Spring Cloud Stream App Starters -->
{% capture project_description %}
Spring Cloud Stream App Starters are Spring Boot based Spring Integration applications that provide integration with external systems.
Spring Cloud Stream App Starters are Spring Boot based Spring Integration applications that provide integration with
external systems.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-stream-app-starters" repo_url="https://github.com/spring-cloud/spring-cloud-stream-app-starters" project_title="Spring Cloud Stream App Starters" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-stream-app-starters"
repo_url="https://github.com/spring-cloud/spring-cloud-stream-app-starters" project_title="Spring Cloud Stream App
Starters" project_description=project_description %}
<!-- Spring Cloud Task -->
{% capture project_description %}
A short-lived microservices framework to quickly build applications that perform finite amounts of data processing. Simple declarative for adding both functional and non-functional features to Spring Boot apps.
A short-lived microservices framework to quickly build applications that perform finite amounts of data processing.
Simple declarative for adding both functional and non-functional features to Spring Boot apps.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-task" repo_url="https://github.com/spring-cloud/spring-cloud-task" project_title="Spring Cloud Task" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-task"
repo_url="https://github.com/spring-cloud/spring-cloud-task" project_title="Spring Cloud Task"
project_description=project_description %}
<!-- Spring Cloud Task App Starters -->
{% capture project_description %}
Spring Cloud Task App Starters are Spring Boot applications that may be any process including Spring Batch jobs that do not run forever, and they end/stop after a finite period of data processing.
Spring Cloud Task App Starters are Spring Boot applications that may be any process including Spring Batch jobs that do
not run forever, and they end/stop after a finite period of data processing.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-task-app-starters" repo_url="https://github.com/spring-cloud/spring-cloud-task-app-starters" project_title="Spring Cloud Task App Starters" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-task-app-starters"
repo_url="https://github.com/spring-cloud/spring-cloud-task-app-starters" project_title="Spring Cloud Task App Starters"
project_description=project_description %}
<!-- Spring Cloud Zookeeper -->
{% capture project_description %}
Service discovery and configuration management with Apache Zookeeper.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-zookeeper" repo_url="https://github.com/spring-cloud/spring-cloud-zookeeper" project_title="Spring Cloud Zookeeper" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-zookeeper"
repo_url="https://github.com/spring-cloud/spring-cloud-zookeeper" project_title="Spring Cloud Zookeeper"
project_description=project_description %}
<!-- Spring Cloud AWS -->
{% capture project_description %}
Easy integration with hosted Amazon Web Services. It offers a convenient way to interact with AWS provided services using well-known Spring idioms and APIs, such as the messaging or caching API. Developers can build their application around the hosted services without having to care about infrastructure or maintenance.
Easy integration with hosted Amazon Web Services. It offers a convenient way to interact with AWS provided services
using well-known Spring idioms and APIs, such as the messaging or caching API. Developers can build their application
around the hosted services without having to care about infrastructure or maintenance.
{% endcapture %}
{% capture site_url %}
{{ site.projects_site_url }}/spring-cloud-aws
{% endcapture %}
{% include project_block.md site_url=site_url repo_url="https://github.com/spring-cloud/spring-cloud-aws" project_title="Spring Cloud for Amazon Web Services" project_description=project_description %}
{% include project_block.md site_url=site_url repo_url="https://github.com/spring-cloud/spring-cloud-aws"
project_title="Spring Cloud for Amazon Web Services" project_description=project_description %}
<!-- Spring Cloud Connectors -->
{% capture project_description %}
@@ -215,57 +257,77 @@ databases and message brokers (the project formerly known as "Spring Cloud").
{{ site.projects_site_url }}/spring-cloud-connectors
{% endcapture %}
{% include project_block.md site_url=site_url repo_url="https://github.com/spring-cloud/spring-cloud-connectors" project_title="Spring Cloud Connectors" project_description=project_description %}
{% include project_block.md site_url=site_url repo_url="https://github.com/spring-cloud/spring-cloud-connectors"
project_title="Spring Cloud Connectors" project_description=project_description %}
<!-- Spring Cloud Starters -->
{% capture project_description %}
Spring Boot-style starter projects to ease dependency management for consumers of Spring Cloud. (Discontinued as a project and merged with the other projects after Angel.SR2.)
Spring Boot-style starter projects to ease dependency management for consumers of Spring Cloud. (Discontinued as a
project and merged with the other projects after Angel.SR2.)
{% endcapture %}
{% include project_block.md site_url="https://github.com/spring-cloud/spring-cloud-starters" repo_url="https://github.com/spring-cloud/spring-cloud-starters" project_title="Spring Cloud Starters" project_description=project_description %}
{% include project_block.md site_url="https://github.com/spring-cloud/spring-cloud-starters"
repo_url="https://github.com/spring-cloud/spring-cloud-starters" project_title="Spring Cloud Starters"
project_description=project_description %}
<!-- Spring Cloud CLI -->
{% capture project_description %}
Spring Boot CLI plugin for creating Spring Cloud component applications quickly in Groovy
{% endcapture %}
{% include project_block.md site_url="https://github.com/spring-cloud/spring-cloud-cli" repo_url="https://github.com/spring-cloud/spring-cloud-cli" project_title="Spring Cloud CLI" project_description=project_description %}
{% include project_block.md site_url="https://github.com/spring-cloud/spring-cloud-cli"
repo_url="https://github.com/spring-cloud/spring-cloud-cli" project_title="Spring Cloud CLI"
project_description=project_description %}
<!-- Spring Cloud Contract -->
{% capture project_description %}
Spring Cloud Contract is an umbrella project holding solutions that help users in successfully implementing the Consumer Driven Contracts approach.
Spring Cloud Contract is an umbrella project holding solutions that help users in successfully implementing the Consumer
Driven Contracts approach.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-contract" repo_url="https://github.com/spring-cloud/spring-cloud-contract" project_title="Spring Cloud Contract" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-contract"
repo_url="https://github.com/spring-cloud/spring-cloud-contract" project_title="Spring Cloud Contract"
project_description=project_description %}
<!-- Spring Cloud Gateway -->
{% capture project_description %}
Spring Cloud Gateway is an intelligent and programmable router based on Project Reactor.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-gateway" repo_url="https://github.com/spring-cloud/spring-cloud-gateway" project_title="Spring Cloud Gateway" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-gateway"
repo_url="https://github.com/spring-cloud/spring-cloud-gateway" project_title="Spring Cloud Gateway"
project_description=project_description %}
<!-- Spring Cloud OpenFeign -->
{% capture project_description %}
Spring Cloud OpenFeign provides integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms.
Spring Cloud OpenFeign provides integrations for Spring Boot apps through autoconfiguration and binding to the Spring
Environment and other Spring programming model idioms.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-openfeign" repo_url="https://github.com/spring-cloud/spring-cloud-openfeign" project_title="Spring Cloud OpenFeign" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-openfeign"
repo_url="https://github.com/spring-cloud/spring-cloud-openfeign" project_title="Spring Cloud OpenFeign"
project_description=project_description %}
<!-- Spring Cloud Pipelines -->
{% capture project_description %}
Spring Cloud Pipelines provides an opinionated deployment pipeline with steps to ensure that your application can be deployed in zero downtime fashion and easilly rolled back of something goes wrong.
Spring Cloud Pipelines provides an opinionated deployment pipeline with steps to ensure that your application can be
deployed in zero downtime fashion and easilly rolled back of something goes wrong.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-pipelines" repo_url="https://github.com/spring-cloud/spring-cloud-pipelines" project_title="Spring Cloud Pipelines" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-pipelines"
repo_url="https://github.com/spring-cloud/spring-cloud-pipelines" project_title="Spring Cloud Pipelines"
project_description=project_description %}
<!-- Spring Cloud Function -->
{% capture project_description %}
Spring Cloud Function promotes the implementation of business logic via functions. It supports a uniform programming model across serverless providers, as well as the ability to run standalone (locally or in a PaaS).
Spring Cloud Function promotes the implementation of business logic via functions. It supports a uniform programming
model across serverless providers, as well as the ability to run standalone (locally or in a PaaS).
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-function" repo_url="https://github.com/spring-cloud/spring-cloud-function" project_title="Spring Cloud Function" project_description=project_description %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-function"
repo_url="https://github.com/spring-cloud/spring-cloud-function" project_title="Spring Cloud Function"
project_description=project_description %}
## Release Trains
Spring Cloud is an umbrella project consisting of independent projects with, in principle, different
@@ -273,7 +335,7 @@ release cadences. To manage the portfolio a BOM (Bill of Materials) is published
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
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.
@@ -282,7 +344,7 @@ Release train contents:
<!-- BEGIN COMPONENTS -->
|Component |{{lastGaTrainName}}|{{currentGaTrainName}}|{{currentSnapshotTrainName}}|
|Component |{{lastGaTrainName}}|{{currentGaTrainName}}|{{currentSnapshotTrainName}}|
|--------------------------------------|-----------------|---------------------|------------------------|
{{#each projects}} |{{componentName}}|{{lastGaVersion}}|{{currentGaVersion}}|{{currentSnapshotVersion}}|
{{/each}}
@@ -292,22 +354,26 @@ Release train contents:
Finchley builds and works with Spring Boot 2.0.x, and is not expected
to work with Spring Boot 1.5.x.
Note: The Dalston release train will [reach end-of-life](https://spring.io/blog/2018/06/19/spring-cloud-finchley-release-is-available) in December 2018. Edgware will follow the end-of-life cycle of Spring Boot 1.5.x.
Note: The Dalston release train will [reach
end-of-life](https://spring.io/blog/2018/06/19/spring-cloud-finchley-release-is-available) in December 2018. Edgware
will follow the end-of-life cycle of Spring Boot 1.5.x.
The Dalston and Edgware release trains build on Spring Boot 1.5.x, and
are not expected to work with Spring Boot 2.0.x.
NOTE: The Camden release train was [marked end-of-life](https://spring.io/blog/2018/06/19/spring-cloud-finchley-release-is-available).
NOTE: The Camden release train was [marked
end-of-life](https://spring.io/blog/2018/06/19/spring-cloud-finchley-release-is-available).
The Camden release train builds on Spring Boot 1.4.x, but is also
tested with 1.5.x.
NOTE: The Brixton and Angel release trains were [marked end-of-life](https://spring.io/blog/2017/07/21/spring-cloud-dalston-sr2-is-available-now#end-of-life-for-angel-and-brixton-release-trains)
NOTE: The Brixton and Angel release trains were [marked
end-of-life](https://spring.io/blog/2017/07/21/spring-cloud-dalston-sr2-is-available-now#end-of-life-for-angel-and-brixton-release-trains)
(EOL) in July 2017.
The Brixton release train builds on Spring Boot 1.3.x, but is also
tested with 1.4.x.
The Angel release train builds on Spring Boot 1.2.x, and is
incompatible in some areas with Spring Boot 1.3.x. Brixton builds on
Spring Boot 1.3.x and is similarly incompatible with 1.2.x. Some
@@ -335,8 +401,9 @@ Spring dependency management plugin.
> Spring Cloud. The opposite is not true: using the Cloud parent
> makes it impossible, or at least unreliable, to also use the
> Boot BOM to change the version of Spring Boot and its dependencies.
> NOTE: If you find anything wrong or outdated on this page, please open an issue in [this](https://github.com/spring-projects/spring-cloud) repo.
> NOTE: If you find anything wrong or outdated on this page, please open an issue in
[this](https://github.com/spring-projects/spring-cloud) repo.
{% endcapture %}

View File

@@ -0,0 +1,27 @@
/*
* Copyright 2013-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.cloud.release.cloud.buildsystem;
import org.springframework.cloud.release.internal.buildsystem.CustomBomParser;
public class SpringCloudMavenBomParserAccessor {
public static CustomBomParser cloud() {
return new SpringCloudMavenBomParser();
}
}

View File

@@ -32,10 +32,12 @@ import org.junit.rules.TemporaryFolder;
import org.mockito.BDDMockito;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.buildsystem.TestUtils;
import org.springframework.cloud.release.internal.docs.ProjectDocumentationUpdater;
import org.springframework.cloud.release.internal.docs.DocumentationUpdater;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.github.ProjectGitHubHandler;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.template.TemplateGenerator;
import org.springframework.util.FileSystemUtils;
import static org.assertj.core.api.BDDAssertions.then;
@@ -54,6 +56,8 @@ public class SpringCloudCustomProjectDocumentationUpdaterTests {
ProjectGitHandler handler;
ProjectGitHubHandler gitHubHandler;
File clonedDocProject;
ReleaserProperties properties = new ReleaserProperties();
@@ -69,6 +73,7 @@ public class SpringCloudCustomProjectDocumentationUpdaterTests {
file("/projects/spring-cloud-static/").toURI().toString());
this.handler = new ProjectGitHandler(this.properties);
this.clonedDocProject = this.handler.cloneDocumentationProject();
this.gitHubHandler = new ProjectGitHubHandler(this.properties);
}
@Test
@@ -106,8 +111,9 @@ public class SpringCloudCustomProjectDocumentationUpdaterTests {
};
BDDAssertions
.thenThrownBy(() -> new ProjectDocumentationUpdater(properties,
this.handler, Collections.singletonList(customUpdater))
.thenThrownBy(() -> new DocumentationUpdater(this.handler, properties,
templateGenerator(properties),
Collections.singletonList(customUpdater))
.updateDocsRepo(releaseTrainVersion, "vAngel.SR33"))
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("The URL to the documentation repo not found");
@@ -126,10 +132,10 @@ public class SpringCloudCustomProjectDocumentationUpdaterTests {
}
@NotNull
private ProjectDocumentationUpdater projectDocumentationUpdater(
private DocumentationUpdater projectDocumentationUpdater(
ReleaserProperties properties) {
return new ProjectDocumentationUpdater(properties, this.handler,
Collections.singletonList(
return new DocumentationUpdater(this.handler, properties,
templateGenerator(properties), Collections.singletonList(
new SpringCloudCustomProjectDocumentationUpdater(this.handler) {
@Override
boolean isNewerOrEqualReleaseTrain(String storedReleaseTrain,
@@ -142,10 +148,10 @@ public class SpringCloudCustomProjectDocumentationUpdaterTests {
}
@NotNull
private ProjectDocumentationUpdater projectDocumentationUpdaterWithNoIndexHtml(
private DocumentationUpdater projectDocumentationUpdaterWithNoIndexHtml(
ReleaserProperties properties) {
return new ProjectDocumentationUpdater(properties, this.handler,
Collections.singletonList(
return new DocumentationUpdater(this.handler, properties,
templateGenerator(properties), Collections.singletonList(
new SpringCloudCustomProjectDocumentationUpdater(this.handler) {
@Override
File indexHtml(File clonedDocumentationProject,
@@ -155,6 +161,11 @@ public class SpringCloudCustomProjectDocumentationUpdaterTests {
}));
}
@NotNull
private TemplateGenerator templateGenerator(ReleaserProperties properties) {
return new TemplateGenerator(properties, this.gitHubHandler);
}
@NotNull
private ProjectGitHandler projectGitHandler(ReleaserProperties properties) {
return new ProjectGitHandler(properties);

View File

@@ -30,11 +30,11 @@ import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.springframework.cloud.release.internal.buildsystem.MavenBomParserAccessor;
import org.springframework.cloud.release.internal.buildsystem.PomReader;
import org.springframework.cloud.release.internal.buildsystem.ProjectPomUpdater;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.buildsystem.TestUtils;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.cloud.release.internal.tech.PomReader;
import org.springframework.util.FileSystemUtils;
import static org.assertj.core.api.BDDAssertions.then;

View File

@@ -33,12 +33,12 @@ import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.boot.test.rule.OutputCapture;
import org.springframework.cloud.release.internal.buildsystem.GradleUpdater;
import org.springframework.cloud.release.internal.buildsystem.ProjectPomUpdater;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.docs.DocumentationUpdater;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.github.ProjectGitHubHandler;
import org.springframework.cloud.release.internal.postrelease.PostReleaseActions;
import org.springframework.cloud.release.internal.project.ProjectCommandExecutor;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.cloud.release.internal.sagan.SaganUpdater;
import org.springframework.cloud.release.internal.template.TemplateGenerator;

View File

@@ -18,14 +18,14 @@ package org.springframework.cloud.release.internal.buildsystem;
import java.util.Collections;
import org.springframework.cloud.release.cloud.buildsystem.SpringCloudMavenBomParser;
import org.springframework.cloud.release.cloud.buildsystem.SpringCloudMavenBomParserAccessor;
import org.springframework.cloud.release.internal.ReleaserProperties;
public class MavenBomParserAccessor {
public static BomParser cloudMavenBomParser(ReleaserProperties properties) {
return new MavenBomParser(properties,
Collections.singletonList(new SpringCloudMavenBomParser()));
Collections.singletonList(SpringCloudMavenBomParserAccessor.cloud()));
}
}

View File

@@ -24,6 +24,7 @@ import org.junit.Test;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.git.GitRepoTests;
import org.springframework.cloud.release.internal.project.Project;
import static org.assertj.core.api.BDDAssertions.then;
import static org.assertj.core.api.BDDAssertions.thenThrownBy;

View File

@@ -27,6 +27,7 @@ import org.junit.Before;
import org.junit.Test;
import org.springframework.cloud.release.internal.git.GitRepoTests;
import org.springframework.cloud.release.internal.tech.PomReader;
import static org.assertj.core.api.BDDAssertions.then;
import static org.assertj.core.api.BDDAssertions.thenThrownBy;

View File

@@ -33,6 +33,8 @@ import org.junit.rules.TemporaryFolder;
import org.springframework.boot.test.rule.OutputCapture;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.git.GitRepoTests;
import org.springframework.cloud.release.internal.project.Project;
import org.springframework.cloud.release.internal.tech.PomReader;
import org.springframework.util.FileSystemUtils;
/**

View File

@@ -27,6 +27,7 @@ import org.mockito.BDDMockito;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
/**

View File

@@ -26,6 +26,7 @@ import org.junit.Before;
import org.junit.Test;
import org.springframework.cloud.release.internal.git.GitRepoTests;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import static org.assertj.core.api.BDDAssertions.then;
import static org.assertj.core.api.BDDAssertions.thenThrownBy;

View File

@@ -25,6 +25,7 @@ import java.util.Set;
import org.junit.Test;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import static org.assertj.core.api.BDDAssertions.then;

View File

@@ -25,6 +25,8 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.cloud.release.internal.project.Project;
import static org.mockito.BDDMockito.then;
/**

View File

@@ -28,6 +28,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.project.Project;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.then;

View File

@@ -23,8 +23,9 @@ import java.util.Set;
import org.junit.Test;
import org.springframework.cloud.release.cloud.buildsystem.SpringCloudMavenBomParser;
import org.springframework.cloud.release.cloud.buildsystem.SpringCloudMavenBomParserAccessor;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.project.Project;
import static org.assertj.core.api.BDDAssertions.then;
@@ -41,7 +42,8 @@ public class VersionsFromBomTests {
public void should_add_boot_to_versions_when_version_is_created() {
VersionsFromBom versionsFromBom = new VersionsFromBomBuilder()
.releaserProperties(new ReleaserProperties())
.parsers(Collections.singletonList(new SpringCloudMavenBomParser()))
.parsers(Collections
.singletonList(SpringCloudMavenBomParserAccessor.cloud()))
.retrieveFromBom();
versionsFromBom.setVersion("spring-boot", "1.2.3.RELEASE");
@@ -246,7 +248,8 @@ public class VersionsFromBomTests {
private VersionsFromBom mixedVersions() {
return new VersionsFromBomBuilder().releaserProperties(new ReleaserProperties())
.parsers(Collections.singletonList(new SpringCloudMavenBomParser()))
.parsers(Collections
.singletonList(SpringCloudMavenBomParserAccessor.cloud()))
.projects(mixedProjects()).merged();
}

View File

@@ -23,7 +23,7 @@ import org.assertj.core.api.BDDAssertions;
import org.junit.Test;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
/**

View File

@@ -29,11 +29,11 @@ import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.buildsystem.TestUtils;
import org.springframework.cloud.release.internal.git.GitTestUtils;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.github.ProjectGitHubHandler;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.cloud.release.internal.template.TemplateGenerator;
import org.springframework.util.FileSystemUtils;

View File

@@ -21,7 +21,7 @@ import java.util.List;
import org.assertj.core.api.BDDAssertions;
import org.junit.Test;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
/**

View File

@@ -25,7 +25,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;

View File

@@ -33,7 +33,7 @@ import org.mockito.BDDMockito;
import org.springframework.boot.test.rule.OutputCapture;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import static org.assertj.core.api.BDDAssertions.then;

View File

@@ -30,7 +30,7 @@ import org.junit.rules.TemporaryFolder;
import org.springframework.boot.test.rule.OutputCapture;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import static org.assertj.core.api.BDDAssertions.then;
import static org.assertj.core.api.BDDAssertions.thenThrownBy;

View File

@@ -30,7 +30,7 @@ import org.junit.rules.TemporaryFolder;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.GradleUpdater;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.util.FileSystemUtils;

View File

@@ -39,15 +39,15 @@ import org.mockito.BDDMockito;
import org.springframework.cloud.release.internal.PomUpdateAcceptanceTests;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.GradleUpdater;
import org.springframework.cloud.release.internal.buildsystem.PomReader;
import org.springframework.cloud.release.internal.buildsystem.ProjectPomUpdater;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.buildsystem.TestUtils;
import org.springframework.cloud.release.internal.git.GitTestUtils;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.project.ProcessedProject;
import org.springframework.cloud.release.internal.project.ProjectCommandExecutor;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.cloud.release.internal.tech.PomReader;
import org.springframework.cloud.release.internal.versions.VersionsFetcher;
import org.springframework.util.FileSystemUtils;
import org.springframework.util.LinkedMultiValueMap;

View File

@@ -32,7 +32,6 @@ import org.junit.rules.TemporaryFolder;
import org.springframework.boot.test.rule.OutputCapture;
import org.springframework.cloud.release.internal.PomUpdateAcceptanceTests;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.buildsystem.TestUtils;
import org.springframework.util.FileSystemUtils;

View File

@@ -31,7 +31,7 @@ import org.mockito.BDDMockito;
import org.mockito.Mockito;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.BDDMockito.given;

View File

@@ -24,8 +24,8 @@ import java.util.HashSet;
import org.junit.Test;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.github.ProjectGitHubHandler;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import static org.assertj.core.api.BDDAssertions.then;
@@ -118,8 +118,8 @@ public class TemplateGeneratorTests {
.contains("The release can be found in [Maven Central]")
.contains("### Spring Cloud Sleuth")
.contains(
"| Spring Cloud Sleuth | 1.0.0.RELEASE | ([issues](https://foo.bar.com))")
.contains("| Spring Cloud Foo\t| 1.0.2.RELEASE\t| &nbsp;")
"| Spring Cloud Sleuth | 1.0.0.RELEASE | ([issues](https://foo.bar.com))")
.contains("| Spring Cloud Foo | 1.0.2.RELEASE | &nbsp;")
.contains("<version>Dalston.RELEASE</version>").contains(
"mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Dalston.RELEASE'");
}
@@ -143,7 +143,7 @@ public class TemplateGeneratorTests {
.contains("The release can be found in [Maven Central]")
.contains("### Spring Cloud Sleuth")
.contains(
"| Spring Cloud Sleuth\t| 1.0.0.RELEASE\t| ([issues](https://foo.bar.com))")
"| Spring Cloud Sleuth | 1.0.0.RELEASE | ([issues](https://foo.bar.com))")
.contains("<version>Dalston.RELEASE</version>").contains(
"mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Dalston.RELEASE'");
}
@@ -167,7 +167,7 @@ public class TemplateGeneratorTests {
.contains("The release can be found in [Maven Central]")
.contains("### Spring Cloud Sleuth")
.contains(
"| Spring Cloud Sleuth | 1.0.0.RELEASE | ([issues](https://foo.bar.com))")
"| Spring Cloud Sleuth | 1.0.0.RELEASE | ([issues](https://foo.bar.com))")
.contains("<version>Dalston.SR1</version>").contains(
"mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Dalston.SR1'");
}
@@ -191,7 +191,7 @@ public class TemplateGeneratorTests {
.contains("The release can be found in [Maven Central]")
.contains("### Spring Cloud Sleuth")
.contains(
"| Spring Cloud Sleuth | 1.0.0.RELEASE | ([issues](https://foo.bar.com))")
"| Spring Cloud Sleuth | 1.0.0.RELEASE | ([issues](https://foo.bar.com))")
.contains("<version>Dalston.SR1</version>").contains(
"mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Dalston.SR1'");
}
@@ -215,7 +215,7 @@ public class TemplateGeneratorTests {
.contains("The release can be found in [Spring Milestone]")
.contains("### Spring Cloud Sleuth")
.contains(
"| Spring Cloud Sleuth\t| 1.0.0.M1\t| ([issues](https://foo.bar.com))")
"| Spring Cloud Sleuth | 1.0.0.M1 | ([issues](https://foo.bar.com))")
.contains("<id>spring-milestones</id>")
.contains("url 'https://repo.spring.io/milestone'")
.contains("<version>Dalston.M1</version>").contains(
@@ -241,7 +241,7 @@ public class TemplateGeneratorTests {
.contains("The release can be found in [Spring Milestone]")
.contains("### Spring Cloud Sleuth")
.contains(
"| Spring Cloud Sleuth\t| 1.0.0.M1\t| ([issues](https://foo.bar.com))")
"| Spring Cloud Sleuth | 1.0.0.M1 | ([issues](https://foo.bar.com))")
.contains("<id>spring-milestones</id>")
.contains("url 'https://repo.spring.io/milestone'")
.contains("<version>Dalston.M1</version>").contains(
@@ -267,7 +267,7 @@ public class TemplateGeneratorTests {
.contains("The release can be found in [Spring Milestone]")
.contains("### Spring Cloud Sleuth")
.contains(
"| Spring Cloud Sleuth\t| 1.0.0.RC1\t| ([issues](https://foo.bar.com))")
"| Spring Cloud Sleuth | 1.0.0.RC1 | ([issues](https://foo.bar.com))")
.contains("<id>spring-milestones</id>")
.contains("url 'https://repo.spring.io/milestone'")
.contains("<version>Dalston.RC1</version>").contains(
@@ -293,7 +293,7 @@ public class TemplateGeneratorTests {
.contains("The release can be found in [Spring Milestone]")
.contains("### Spring Cloud Sleuth")
.contains(
"| Spring Cloud Sleuth\t| 1.0.0.RC1\t| ([issues](https://foo.bar.com))")
"| Spring Cloud Sleuth | 1.0.0.RC1 | ([issues](https://foo.bar.com))")
.contains("<id>spring-milestones</id>")
.contains("url 'https://repo.spring.io/milestone'")
.contains("<version>Dalston.RC1</version>").contains(

View File

@@ -31,8 +31,8 @@ import org.junit.jupiter.api.Test;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.MavenBomParserAccessor;
import org.springframework.cloud.release.internal.buildsystem.ProjectPomUpdater;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.buildsystem.TestUtils;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.util.FileSystemUtils;

View File

@@ -38,7 +38,8 @@ public class BootstrapClientApplicationTests {
public void contextLoads() throws Exception {
assertThat(2).isEqualTo(this.server.getTomcat().getMaxThreads());
// The application.yml is never read because spring.config.name=sample
assertThat("application").isEqualTo(this.server.getServlet().getApplicationDisplayName());
assertThat("application")
.isEqualTo(this.server.getServlet().getApplicationDisplayName());
}
}

View File

@@ -26,8 +26,6 @@ import org.springframework.cloud.config.client.ConfigServicePropertySourceLocato
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.assertNotNull;
@RunWith(SpringRunner.class)
@SpringBootTest
@DirtiesContext
@@ -41,7 +39,8 @@ public class BootstrapDecryptionClientApplicationTests {
@Test
public void contextLoads() throws Exception {
assertThat(new String[] { "http://localhost:8888" }).isEqualTo(this.config.getUri());
assertThat(new String[] { "http://localhost:8888" })
.isEqualTo(this.config.getUri());
// The application.yml is never read because spring.config.name=sample
assertThat(this.locator).isNotNull();
}

View File

@@ -52,6 +52,7 @@ import static org.junit.Assert.fail;
public class StandaloneClientApplicationTests {
private static ConfigurableApplicationContext context;
@Autowired
private ConfigServicePropertySourceLocator locator;

View File

@@ -18,7 +18,7 @@
# This example catches duplicate Signed-off-by lines.
test "" = "$(grep '^Signed-off-by: ' "$1" |
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
echo >&2 Duplicate Signed-off-by lines.
exit 1
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
echo >&2 Duplicate Signed-off-by lines.
exit 1
}

View File

@@ -7,12 +7,11 @@
#
# To enable this hook, rename this file to "pre-commit".
if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
if git rev-parse --verify HEAD >/dev/null 2>&1; then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
# If you want to allow non-ASCII filenames set this variable to true.
@@ -25,13 +24,12 @@ exec 1>&2
# them from being added to the repository. We exploit the fact that the
# printable range starts at the space character and ends with tilde.
if [ "$allownonascii" != "true" ] &&
# Note that the use of brackets around a tr range is ok here, (it's
# even required, for portability to Solaris 10's /usr/bin/tr), since
# the square bracket bytes happen to fall in the designated range.
test $(git diff --cached --name-only --diff-filter=A -z $against |
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
cat <<\EOF
# Note that the use of brackets around a tr range is ok here, (it's
# even required, for portability to Solaris 10's /usr/bin/tr), since
# the square bracket bytes happen to fall in the designated range.
test $(git diff --cached --name-only --diff-filter=A -z $against |
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0; then
cat <<\EOF
Error: Attempt to add a non-ASCII file name.
This can cause problems if you want to work with people on other platforms.
@@ -42,7 +40,7 @@ If you know what you are doing you can disable this check using:
git config hooks.allownonascii true
EOF
exit 1
exit 1
fi
# If there are whitespace errors, print the offending file names and fail.

View File

@@ -24,30 +24,26 @@ url="$2"
z40=0000000000000000000000000000000000000000
while read local_ref local_sha remote_ref remote_sha
do
if [ "$local_sha" = $z40 ]
then
# Handle delete
:
else
if [ "$remote_sha" = $z40 ]
then
# New branch, examine all commits
range="$local_sha"
else
# Update to existing branch, examine new commits
range="$remote_sha..$local_sha"
fi
while read local_ref local_sha remote_ref remote_sha; do
if [ "$local_sha" = $z40 ]; then
# Handle delete
:
else
if [ "$remote_sha" = $z40 ]; then
# New branch, examine all commits
range="$local_sha"
else
# Update to existing branch, examine new commits
range="$remote_sha..$local_sha"
fi
# Check for WIP commit
commit=`git rev-list -n 1 --grep '^WIP' "$range"`
if [ -n "$commit" ]
then
echo >&2 "Found WIP commit in $local_ref, not pushing"
exit 1
fi
fi
# Check for WIP commit
commit=$(git rev-list -n 1 --grep '^WIP' "$range")
if [ -n "$commit" ]; then
echo >&2 "Found WIP commit in $local_ref, not pushing"
exit 1
fi
fi
done
exit 0

View File

@@ -17,20 +17,19 @@
publish=next
basebranch="$1"
if test "$#" = 2
then
topic="refs/heads/$2"
if test "$#" = 2; then
topic="refs/heads/$2"
else
topic=`git symbolic-ref HEAD` ||
exit 0 ;# we do not interrupt rebasing detached HEAD
topic=$(git symbolic-ref HEAD) ||
exit 0 # we do not interrupt rebasing detached HEAD
fi
case "$topic" in
refs/heads/??/*)
;;
refs/heads/??/*) ;;
*)
exit 0 ;# we do not interrupt others.
;;
exit 0 # we do not interrupt others.
;;
esac
# Now we are dealing with a topic branch being rebased
@@ -38,34 +37,31 @@ esac
# Does the topic really exist?
git show-ref -q "$topic" || {
echo >&2 "No such branch $topic"
exit 1
echo >&2 "No such branch $topic"
exit 1
}
# Is topic fully merged to master?
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
if test -z "$not_in_master"
then
echo >&2 "$topic is fully merged to master; better remove it."
exit 1 ;# we could allow it, but there is no point.
not_in_master=$(git rev-list --pretty=oneline ^master "$topic")
if test -z "$not_in_master"; then
echo >&2 "$topic is fully merged to master; better remove it."
exit 1 # we could allow it, but there is no point.
fi
# Is topic ever merged to next? If so you should not be rebasing it.
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
only_next_2=`git rev-list ^master ${publish} | sort`
if test "$only_next_1" = "$only_next_2"
then
not_in_topic=`git rev-list "^$topic" master`
if test -z "$not_in_topic"
then
echo >&2 "$topic is already up to date with master"
exit 1 ;# we could allow it, but there is no point.
else
exit 0
fi
only_next_1=$(git rev-list ^master "^$topic" ${publish} | sort)
only_next_2=$(git rev-list ^master ${publish} | sort)
if test "$only_next_1" = "$only_next_2"; then
not_in_topic=$(git rev-list "^$topic" master)
if test -z "$not_in_topic"; then
echo >&2 "$topic is already up to date with master"
exit 1 # we could allow it, but there is no point.
else
exit 0
fi
else
not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
/usr/bin/perl -e '
not_in_next=$(git rev-list --pretty=oneline ^${publish} "$topic")
/usr/bin/perl -e '
my $topic = $ARGV[0];
my $msg = "* $topic has commits already merged to public branch:\n";
my (%not_in_next) = map {
@@ -85,7 +81,7 @@ else
}
}
' "$topic" "$not_in_next" "$not_in_master"
exit 1
exit 1
fi
<<\DOC_END

View File

@@ -6,19 +6,18 @@
#
# To enable this hook, rename this file to "pre-receive".
if test -n "$GIT_PUSH_OPTION_COUNT"
then
i=0
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
do
eval "value=\$GIT_PUSH_OPTION_$i"
case "$value" in
echoback=*)
echo "echo from the pre-receive-hook: ${value#*=}" >&2
;;
reject)
exit 1
esac
i=$((i + 1))
done
if test -n "$GIT_PUSH_OPTION_COUNT"; then
i=0
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"; do
eval "value=\$GIT_PUSH_OPTION_$i"
case "$value" in
echoback=*)
echo "echo from the pre-receive-hook: ${value#*=}" >&2
;;
reject)
exit 1
;;
esac
i=$((i + 1))
done
fi

View File

@@ -31,15 +31,15 @@ newrev="$3"
# --- Safety check
if [ -z "$GIT_DIR" ]; then
echo "Don't run this script from the command line." >&2
echo " (if you want, you could supply GIT_DIR then run" >&2
echo " $0 <ref> <oldrev> <newrev>)" >&2
exit 1
echo "Don't run this script from the command line." >&2
echo " (if you want, you could supply GIT_DIR then run" >&2
echo " $0 <ref> <oldrev> <newrev>)" >&2
exit 1
fi
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
exit 1
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
exit 1
fi
# --- Config
@@ -53,75 +53,74 @@ allowmodifytag=$(git config --bool hooks.allowmodifytag)
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
case "$projectdesc" in
"Unnamed repository"* | "")
echo "*** Project description file hasn't been set" >&2
exit 1
;;
echo "*** Project description file hasn't been set" >&2
exit 1
;;
esac
# --- Check types
# if $newrev is 0000...0000, it's a commit to delete a ref.
zero="0000000000000000000000000000000000000000"
if [ "$newrev" = "$zero" ]; then
newrev_type=delete
newrev_type=delete
else
newrev_type=$(git cat-file -t $newrev)
newrev_type=$(git cat-file -t $newrev)
fi
case "$refname","$newrev_type" in
refs/tags/*,commit)
# un-annotated tag
short_refname=${refname##refs/tags/}
if [ "$allowunannotated" != "true" ]; then
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
exit 1
fi
;;
refs/tags/*,delete)
# delete tag
if [ "$allowdeletetag" != "true" ]; then
echo "*** Deleting a tag is not allowed in this repository" >&2
exit 1
fi
;;
refs/tags/*,tag)
# annotated tag
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
then
echo "*** Tag '$refname' already exists." >&2
echo "*** Modifying a tag is not allowed in this repository." >&2
exit 1
fi
;;
refs/heads/*,commit)
# branch
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
echo "*** Creating a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/heads/*,delete)
# delete branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/remotes/*,commit)
# tracking branch
;;
refs/remotes/*,delete)
# delete tracking branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
exit 1
fi
;;
*)
# Anything else (is there anything else?)
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
exit 1
;;
refs/tags/*,commit)
# un-annotated tag
short_refname=${refname##refs/tags/}
if [ "$allowunannotated" != "true" ]; then
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
exit 1
fi
;;
refs/tags/*,delete)
# delete tag
if [ "$allowdeletetag" != "true" ]; then
echo "*** Deleting a tag is not allowed in this repository" >&2
exit 1
fi
;;
refs/tags/*,tag)
# annotated tag
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname >/dev/null 2>&1; then
echo "*** Tag '$refname' already exists." >&2
echo "*** Modifying a tag is not allowed in this repository." >&2
exit 1
fi
;;
refs/heads/*,commit)
# branch
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
echo "*** Creating a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/heads/*,delete)
# delete branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/remotes/*,commit)
# tracking branch
;;
refs/remotes/*,delete)
# delete tracking branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
exit 1
fi
;;
*)
# Anything else (is there anything else?)
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
exit 1
;;
esac
# --- Finished

View File

@@ -34,151 +34,158 @@
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -z "$MAVEN_SKIP_RC" ]; then
if [ -f /etc/mavenrc ] ; then
if [ -f /etc/mavenrc ]; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
if [ -f "$HOME/.mavenrc" ]; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
cygwin=false
darwin=false
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
#
# Look for the Apple JDKs first to preserve the existing behaviour, and then look
# for the new JDKs provided by Oracle.
#
if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
#
# Apple JDKs
#
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
fi
case "$(uname)" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true ;;
Darwin*)
darwin=true
#
# Look for the Apple JDKs first to preserve the existing behaviour, and then look
# for the new JDKs provided by Oracle.
#
if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ]; then
#
# Apple JDKs
#
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
fi
if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
#
# Apple JDKs
#
export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
fi
if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ]; then
#
# Apple JDKs
#
export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
fi
if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
#
# Oracle JDKs
#
export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
fi
if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ]; then
#
# Oracle JDKs
#
export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
fi
if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
#
# Apple JDKs
#
export JAVA_HOME=`/usr/libexec/java_home`
fi
;;
if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
#
# Apple JDKs
#
export JAVA_HOME=$(/usr/libexec/java_home)
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
if [ -z "$JAVA_HOME" ]; then
if [ -r /etc/gentoo-release ]; then
JAVA_HOME=$(java-config --jre-home)
fi
fi
if [ -z "$M2_HOME" ] ; then
if [ -z "$M2_HOME" ]; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
while [ -h "$PRG" ]; do
ls=$(ls -ld "$PRG")
link=$(expr "$ls" : '.*-> \(.*\)$')
if expr "$link" : '/.*' >/dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
PRG="$(dirname "$PRG")/$link"
fi
done
saveddir=`pwd`
saveddir=$(pwd)
M2_HOME=`dirname "$PRG"`/..
M2_HOME=$(dirname "$PRG")/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
M2_HOME=$(cd "$M2_HOME" && pwd)
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
M2_HOME=$(cygpath --unix "$M2_HOME")
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
fi
# For Migwn, ensure paths are in UNIX format before anything is touched
if $mingw ; then
if $mingw; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
M2_HOME="$( (
cd "$M2_HOME"
pwd
))"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
JAVA_HOME="$( (
cd "$JAVA_HOME"
pwd
))"
# TODO classpath?
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
javaExecutable="$(which javac)"
if [ -n "$javaExecutable" ] && ! [ "$(expr \"$javaExecutable\" : '\([^ ]*\)')" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
readLink=$(which readlink)
if [ ! $(expr "$readLink" : '\([^ ]*\)') = "no" ]; then
if $darwin; then
javaHome="$(dirname \"$javaExecutable\")"
javaExecutable="$(cd \"$javaHome\" && pwd -P)/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
javaExecutable="$(readlink -f \"$javaExecutable\")"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
javaHome="$(dirname \"$javaExecutable\")"
javaHome=$(expr "$javaHome" : '\(.*\)/bin')
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
if [ -z "$JAVACMD" ]; then
if [ -n "$JAVA_HOME" ]; then
if [ -x "$JAVA_HOME/jre/sh/java" ]; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
JAVACMD="$(which java)"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
if [ ! -x "$JAVACMD" ]; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
if [ -z "$JAVA_HOME" ]; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
@@ -187,11 +194,11 @@ CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
M2_HOME=$(cygpath --path --windows "$M2_HOME")
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
fi
# traverses directory structure from process work directory to filesystem root
@@ -199,12 +206,15 @@ fi
find_maven_basedir() {
local basedir=$(pwd)
local wdir=$(pwd)
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
while [ "$wdir" != '/' ]; do
if [ -d "$wdir"/.mvn ]; then
basedir=$wdir
break
fi
wdir=$(cd "$wdir/.."; pwd)
wdir=$(
cd "$wdir/.."
pwd
)
done
echo "${basedir}"
}
@@ -212,7 +222,7 @@ find_maven_basedir() {
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
echo "$(tr -s '\n' ' ' <"$1")"
fi
}
@@ -227,15 +237,15 @@ export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
echo "Running version check"
VERSION=$( sed '\!<parent!,\!</parent!d' `dirname $0`/pom.xml | grep '<version' | head -1 | sed -e 's/.*<version>//' -e 's!</version>.*$!!' )
VERSION=$(sed '\!<parent!,\!</parent!d' $(dirname $0)/pom.xml | grep '<version' | head -1 | sed -e 's/.*<version>//' -e 's!</version>.*$!!')
echo "The found version is [${VERSION}]"
if echo $VERSION | egrep -q 'M|RC'; then
echo Activating \"milestone\" profile for version=\"$VERSION\"
echo $MAVEN_ARGS | grep -q milestone || MAVEN_ARGS="$MAVEN_ARGS -Pmilestone"
echo Activating \"milestone\" profile for version=\"$VERSION\"
echo $MAVEN_ARGS | grep -q milestone || MAVEN_ARGS="$MAVEN_ARGS -Pmilestone"
else
echo Deactivating \"milestone\" profile for version=\"$VERSION\"
echo $MAVEN_ARGS | grep -q milestone && MAVEN_ARGS=$(echo $MAVEN_ARGS | sed -e 's/-Pmilestone//')
echo Deactivating \"milestone\" profile for version=\"$VERSION\"
echo $MAVEN_ARGS | grep -q milestone && MAVEN_ARGS=$(echo $MAVEN_ARGS | sed -e 's/-Pmilestone//')
fi
exec "$JAVACMD" \

View File

@@ -36,6 +36,7 @@ public class ZuulApplicationTests {
@Value("${local.server.port}")
int port;
private TestRestTemplate restTemplate = new TestRestTemplate();
@Test

View File

@@ -6,7 +6,7 @@ REPO_URL="${REPO_URL:-https://github.com/spring-cloud-samples/tests.git}"
REPO_BRANCH="${REPO_BRANCH:-master}"
if [[ -d zuul-config-discovery ]]; then
REPO_LOCAL="${REPO_LOCAL:-.}"
else
else
REPO_LOCAL="${REPO_LOCAL:-tests}"
fi
WAIT_TIME="${WAIT_TIME:-5}"
@@ -15,31 +15,31 @@ DEFAULT_VERSION="${DEFAULT_VERSION:-1.0.0.BUILD-SNAPSHOT}"
# Parse the script arguments
while getopts ":r" opt; do
case $opt in
r)
RESET=0
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
case $opt in
r)
RESET=0
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
# Clone or update the repository
if [[ ! -e "${REPO_LOCAL}/.git" ]]; then
git clone "${REPO_URL}" "${REPO_LOCAL}"
cd "${REPO_LOCAL}"
git clone "${REPO_URL}" "${REPO_LOCAL}"
cd "${REPO_LOCAL}"
else
cd "${REPO_LOCAL}"
if [[ $RESET ]]; then
git reset --hard
git pull "${REPO_URL}" "${REPO_BRANCH}"
fi
cd "${REPO_LOCAL}"
if [[ $RESET ]]; then
git reset --hard
git pull "${REPO_URL}" "${REPO_BRANCH}"
fi
fi
./mvnw --fail-at-end clean package

View File

@@ -1 +1 @@
touch generate.log
touch generate.log

View File

@@ -1,63 +1,55 @@
// Do not edit this file (e.g. go instead to src/main/asciidoc)
Spring Cloud Release Train is a curated set of dependencies across a
range of Spring Cloud projects. You consume it by using the
spring-cloud-dependencies POM to manage dependencies in Maven or
Gradle. 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).
Spring Cloud Release Train is a curated set of dependencies across a range of Spring Cloud projects.
You consume it by using the spring-cloud-dependencies POM to manage dependencies in Maven or Gradle.
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).
== Contributing
Spring Cloud is released under the non-restrictive Apache 2.0 license,
and follows a very standard Github development process, using Github
tracker for issues and merging pull requests into master. If you want
to contribute even something trivial please do not hesitate, but
follow the guidelines below.
Spring Cloud is released under the non-restrictive Apache 2.0 license, and follows a very standard Github development process, using Github tracker for issues and merging pull requests into master.
If you want to contribute even something trivial please do not hesitate, but follow the guidelines below.
=== Sign the Contributor License Agreement
Before we accept a non-trivial patch or pull request we will need you to sign the
https://cla.pivotal.io/sign/spring[Contributor License Agreement].
Signing the contributor's agreement does not grant anyone commit rights to the main
repository, but it does mean that we can accept your contributions, and you will get an
author credit if we do. Active contributors might be asked to join the core team, and
given the ability to merge pull requests.
Signing the contributor's agreement does not grant anyone commit rights to the main repository, but it does mean that we can accept your contributions, and you will get an author credit if we do.
Active contributors might be asked to join the core team, and given the ability to merge pull requests.
=== Code of Conduct
This project adheres to the Contributor Covenant https://github.com/spring-cloud/spring-cloud-build/blob/master/docs/src/main/asciidoc/code-of-conduct.adoc[code of
conduct]. By participating, you are expected to uphold this code. Please report
unacceptable behavior to spring-code-of-conduct@pivotal.io.
conduct].
By participating, you are expected to uphold this code.
Please report unacceptable behavior to spring-code-of-conduct@pivotal.io.
=== Code Conventions and Housekeeping
None of these is essential for a pull request, but they will all help. They can also be
added after the original pull request but before a merge.
* Use the Spring Framework code format conventions. If you use Eclipse
you can import formatter settings using the
None of these is essential for a pull request, but they will all help.
They can also be added after the original pull request but before a merge.
* Use the Spring Framework code format conventions.
If you use Eclipse you can import formatter settings using the
`eclipse-code-formatter.xml` file from the
https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring
Cloud Build] project. If using IntelliJ, you can use the
Cloud Build] project.
If using IntelliJ, you can use the
https://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter
Plugin] to import the same file.
* Make sure all new `.java` files to have a simple Javadoc class comment with at least an
`@author` tag identifying you, and preferably at least a paragraph on what the class is
for.
* Add the ASF license header comment to all new `.java` files (copy from existing files
in the project)
* Add yourself as an `@author` to the .java files that you modify substantially (more
than cosmetic changes).
`@author` tag identifying you, and preferably at least a paragraph on what the class is for.
* Add the ASF license header comment to all new `.java` files (copy from existing files in the project)
* Add yourself as an `@author` to the .java files that you modify substantially (more than cosmetic changes).
* Add some Javadocs and, if you change the namespace, some XSD doc elements.
* A few unit tests would help a lot as well -- someone has to do it.
* If no-one else is using your branch, please rebase it against the current master (or
other target branch in the main project).
* When writing a commit message please follow https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[these conventions],
if you are fixing an existing issue please add `Fixes gh-XXXX` at the end of the commit
message (where XXXX is the issue number).
* If no-one else is using your branch, please rebase it against the current master (or other target branch in the main project).
* When writing a commit message please follow https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[these conventions], if you are fixing an existing issue please add `Fixes gh-XXXX` at the end of the commit message (where XXXX is the issue number).
== Building and Deploying
Since there is no code to compile in the starters they should do not need to compile, but a compiler has to be available because they are built and deployed as JAR artifacts. To install locally:
Since there is no code to compile in the starters they should do not need to compile, but a compiler has to be available because they are built and deployed as JAR artifacts.
To install locally:
----

View File

@@ -6,7 +6,8 @@ include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/maste
== Building and Deploying
Since there is no code to compile in the starters they should do not need to compile, but a compiler has to be available because they are built and deployed as JAR artifacts. To install locally:
Since there is no code to compile in the starters they should do not need to compile, but a compiler has to be available because they are built and deployed as JAR artifacts.
To install locally:
----

View File

@@ -1,7 +1,4 @@
Spring Cloud Release Train is a curated set of dependencies across a
range of Spring Cloud projects. You consume it by using the
spring-cloud-dependencies POM to manage dependencies in Maven or
Gradle. 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).
Spring Cloud Release Train is a curated set of dependencies across a range of Spring Cloud projects.
You consume it by using the spring-cloud-dependencies POM to manage dependencies in Maven or Gradle.
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).

View File

@@ -11,7 +11,8 @@ include::intro.adoc[]
== Using Spring Cloud Dependencies with Spring IO Platform
The Spring IO Platform is a modular, enterprise-grade curated set of dependencies. To use the Spring Cloud Starters with Spring IO Platform, you must import the Spring Cloud Dependencies bill of materials (BOM) first.
The Spring IO Platform is a modular, enterprise-grade curated set of dependencies.
To use the Spring Cloud Starters with Spring IO Platform, you must import the Spring Cloud Dependencies bill of materials (BOM) first.
To use version {springioplatformversion} of the Spring IO Platform and Spring Cloud Release Train {springcloudversion} with Maven, update the pom.xml as follows:

View File

@@ -1,7 +1,7 @@
<!DOCTYPE HTML>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="1; url=https://cloud.spring.io/spring-cloud-static/Dalston.SR3/">
<meta content="1; url=https://cloud.spring.io/spring-cloud-static/Dalston.SR3/" http-equiv="refresh">
<script>
window.location.href = "https://cloud.spring.io/spring-cloud-static/Dalston.SR3/"

View File

@@ -18,7 +18,7 @@
# This example catches duplicate Signed-off-by lines.
test "" = "$(grep '^Signed-off-by: ' "$1" |
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
echo >&2 Duplicate Signed-off-by lines.
exit 1
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
echo >&2 Duplicate Signed-off-by lines.
exit 1
}

View File

@@ -7,12 +7,11 @@
#
# To enable this hook, rename this file to "pre-commit".
if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
if git rev-parse --verify HEAD >/dev/null 2>&1; then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
# If you want to allow non-ASCII filenames set this variable to true.
@@ -25,13 +24,12 @@ exec 1>&2
# them from being added to the repository. We exploit the fact that the
# printable range starts at the space character and ends with tilde.
if [ "$allownonascii" != "true" ] &&
# Note that the use of brackets around a tr range is ok here, (it's
# even required, for portability to Solaris 10's /usr/bin/tr), since
# the square bracket bytes happen to fall in the designated range.
test $(git diff --cached --name-only --diff-filter=A -z $against |
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
cat <<\EOF
# Note that the use of brackets around a tr range is ok here, (it's
# even required, for portability to Solaris 10's /usr/bin/tr), since
# the square bracket bytes happen to fall in the designated range.
test $(git diff --cached --name-only --diff-filter=A -z $against |
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0; then
cat <<\EOF
Error: Attempt to add a non-ASCII file name.
This can cause problems if you want to work with people on other platforms.
@@ -42,7 +40,7 @@ If you know what you are doing you can disable this check using:
git config hooks.allownonascii true
EOF
exit 1
exit 1
fi
# If there are whitespace errors, print the offending file names and fail.

View File

@@ -24,30 +24,26 @@ url="$2"
z40=0000000000000000000000000000000000000000
while read local_ref local_sha remote_ref remote_sha
do
if [ "$local_sha" = $z40 ]
then
# Handle delete
:
else
if [ "$remote_sha" = $z40 ]
then
# New branch, examine all commits
range="$local_sha"
else
# Update to existing branch, examine new commits
range="$remote_sha..$local_sha"
fi
while read local_ref local_sha remote_ref remote_sha; do
if [ "$local_sha" = $z40 ]; then
# Handle delete
:
else
if [ "$remote_sha" = $z40 ]; then
# New branch, examine all commits
range="$local_sha"
else
# Update to existing branch, examine new commits
range="$remote_sha..$local_sha"
fi
# Check for WIP commit
commit=`git rev-list -n 1 --grep '^WIP' "$range"`
if [ -n "$commit" ]
then
echo >&2 "Found WIP commit in $local_ref, not pushing"
exit 1
fi
fi
# Check for WIP commit
commit=$(git rev-list -n 1 --grep '^WIP' "$range")
if [ -n "$commit" ]; then
echo >&2 "Found WIP commit in $local_ref, not pushing"
exit 1
fi
fi
done
exit 0

View File

@@ -17,20 +17,19 @@
publish=next
basebranch="$1"
if test "$#" = 2
then
topic="refs/heads/$2"
if test "$#" = 2; then
topic="refs/heads/$2"
else
topic=`git symbolic-ref HEAD` ||
exit 0 ;# we do not interrupt rebasing detached HEAD
topic=$(git symbolic-ref HEAD) ||
exit 0 # we do not interrupt rebasing detached HEAD
fi
case "$topic" in
refs/heads/??/*)
;;
refs/heads/??/*) ;;
*)
exit 0 ;# we do not interrupt others.
;;
exit 0 # we do not interrupt others.
;;
esac
# Now we are dealing with a topic branch being rebased
@@ -38,34 +37,31 @@ esac
# Does the topic really exist?
git show-ref -q "$topic" || {
echo >&2 "No such branch $topic"
exit 1
echo >&2 "No such branch $topic"
exit 1
}
# Is topic fully merged to master?
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
if test -z "$not_in_master"
then
echo >&2 "$topic is fully merged to master; better remove it."
exit 1 ;# we could allow it, but there is no point.
not_in_master=$(git rev-list --pretty=oneline ^master "$topic")
if test -z "$not_in_master"; then
echo >&2 "$topic is fully merged to master; better remove it."
exit 1 # we could allow it, but there is no point.
fi
# Is topic ever merged to next? If so you should not be rebasing it.
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
only_next_2=`git rev-list ^master ${publish} | sort`
if test "$only_next_1" = "$only_next_2"
then
not_in_topic=`git rev-list "^$topic" master`
if test -z "$not_in_topic"
then
echo >&2 "$topic is already up to date with master"
exit 1 ;# we could allow it, but there is no point.
else
exit 0
fi
only_next_1=$(git rev-list ^master "^$topic" ${publish} | sort)
only_next_2=$(git rev-list ^master ${publish} | sort)
if test "$only_next_1" = "$only_next_2"; then
not_in_topic=$(git rev-list "^$topic" master)
if test -z "$not_in_topic"; then
echo >&2 "$topic is already up to date with master"
exit 1 # we could allow it, but there is no point.
else
exit 0
fi
else
not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
/usr/bin/perl -e '
not_in_next=$(git rev-list --pretty=oneline ^${publish} "$topic")
/usr/bin/perl -e '
my $topic = $ARGV[0];
my $msg = "* $topic has commits already merged to public branch:\n";
my (%not_in_next) = map {
@@ -85,7 +81,7 @@ else
}
}
' "$topic" "$not_in_next" "$not_in_master"
exit 1
exit 1
fi
<<\DOC_END

View File

@@ -6,19 +6,18 @@
#
# To enable this hook, rename this file to "pre-receive".
if test -n "$GIT_PUSH_OPTION_COUNT"
then
i=0
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
do
eval "value=\$GIT_PUSH_OPTION_$i"
case "$value" in
echoback=*)
echo "echo from the pre-receive-hook: ${value#*=}" >&2
;;
reject)
exit 1
esac
i=$((i + 1))
done
if test -n "$GIT_PUSH_OPTION_COUNT"; then
i=0
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"; do
eval "value=\$GIT_PUSH_OPTION_$i"
case "$value" in
echoback=*)
echo "echo from the pre-receive-hook: ${value#*=}" >&2
;;
reject)
exit 1
;;
esac
i=$((i + 1))
done
fi

View File

@@ -31,15 +31,15 @@ newrev="$3"
# --- Safety check
if [ -z "$GIT_DIR" ]; then
echo "Don't run this script from the command line." >&2
echo " (if you want, you could supply GIT_DIR then run" >&2
echo " $0 <ref> <oldrev> <newrev>)" >&2
exit 1
echo "Don't run this script from the command line." >&2
echo " (if you want, you could supply GIT_DIR then run" >&2
echo " $0 <ref> <oldrev> <newrev>)" >&2
exit 1
fi
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
exit 1
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
exit 1
fi
# --- Config
@@ -53,75 +53,74 @@ allowmodifytag=$(git config --bool hooks.allowmodifytag)
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
case "$projectdesc" in
"Unnamed repository"* | "")
echo "*** Project description file hasn't been set" >&2
exit 1
;;
echo "*** Project description file hasn't been set" >&2
exit 1
;;
esac
# --- Check types
# if $newrev is 0000...0000, it's a commit to delete a ref.
zero="0000000000000000000000000000000000000000"
if [ "$newrev" = "$zero" ]; then
newrev_type=delete
newrev_type=delete
else
newrev_type=$(git cat-file -t $newrev)
newrev_type=$(git cat-file -t $newrev)
fi
case "$refname","$newrev_type" in
refs/tags/*,commit)
# un-annotated tag
short_refname=${refname##refs/tags/}
if [ "$allowunannotated" != "true" ]; then
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
exit 1
fi
;;
refs/tags/*,delete)
# delete tag
if [ "$allowdeletetag" != "true" ]; then
echo "*** Deleting a tag is not allowed in this repository" >&2
exit 1
fi
;;
refs/tags/*,tag)
# annotated tag
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
then
echo "*** Tag '$refname' already exists." >&2
echo "*** Modifying a tag is not allowed in this repository." >&2
exit 1
fi
;;
refs/heads/*,commit)
# branch
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
echo "*** Creating a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/heads/*,delete)
# delete branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/remotes/*,commit)
# tracking branch
;;
refs/remotes/*,delete)
# delete tracking branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
exit 1
fi
;;
*)
# Anything else (is there anything else?)
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
exit 1
;;
refs/tags/*,commit)
# un-annotated tag
short_refname=${refname##refs/tags/}
if [ "$allowunannotated" != "true" ]; then
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
exit 1
fi
;;
refs/tags/*,delete)
# delete tag
if [ "$allowdeletetag" != "true" ]; then
echo "*** Deleting a tag is not allowed in this repository" >&2
exit 1
fi
;;
refs/tags/*,tag)
# annotated tag
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname >/dev/null 2>&1; then
echo "*** Tag '$refname' already exists." >&2
echo "*** Modifying a tag is not allowed in this repository." >&2
exit 1
fi
;;
refs/heads/*,commit)
# branch
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
echo "*** Creating a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/heads/*,delete)
# delete branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/remotes/*,commit)
# tracking branch
;;
refs/remotes/*,delete)
# delete tracking branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
exit 1
fi
;;
*)
# Anything else (is there anything else?)
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
exit 1
;;
esac
# --- Finished

View File

@@ -1,13 +1,6 @@
Spring Cloud provides tools for developers to quickly build some of
the common patterns in distributed systems (e.g. configuration
management, service discovery, circuit breakers, intelligent routing,
micro-proxy, control bus, one-time tokens, global locks, leadership
election, distributed sessions, cluster state). Coordination of
distributed systems leads to boiler plate patterns, and using Spring
Cloud developers can quickly stand up services and applications that
implement those patterns. They will work well in any distributed
environment, including the developer's own laptop, bare metal data
centres, and managed platforms such as Cloud Foundry.
Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state).
Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns.
They will work well in any distributed environment, including the developer's own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.
See https://projects.spring.io/spring-cloud[projects.spring.io/spring-cloud] for details.

View File

@@ -1,4 +1,5 @@
Spring Cloud Angel focuses on providing good out of box experience for typical use cases and extensibility mechanism to cover others. Many of the features are implemented by Netflix OSS, with wrappers for Spring Boot apps being the main focus of Spring Cloud.
Spring Cloud Angel focuses on providing good out of box experience for typical use cases and extensibility mechanism to cover others.
Many of the features are implemented by Netflix OSS, with wrappers for Spring Boot apps being the main focus of Spring Cloud.
- Distributed/versioned configuration (git, svn, spring-cloud-config)
- Service registration and discovery (eureka, spring-cloud-netflix)
@@ -11,28 +12,39 @@ Spring Cloud Angel focuses on providing good out of box experience for typical u
== Main Projects
=== Spring Cloud Config
Centralized external configuration management backed by a git repository. The configuration resources map directly to Spring `Environment` but could be used by non-Spring applications if desired.
Centralized external configuration management backed by a git repository.
The configuration resources map directly to Spring `Environment` but could be used by non-Spring applications if desired.
=== Spring Cloud Netflix
Integration with various Netflix OSS components (Eureka, Hystrix, Zuul, Archaius, etc.).
=== Spring Cloud Bus
An event bus for linking services and service instances together with distributed messaging. Useful for propagating state changes across a cluster (e.g. config change events).
An event bus for linking services and service instances together with distributed messaging.
Useful for propagating state changes across a cluster (e.g. config change events).
=== Spring Cloud Security
Provides support for load-balanced OAuth2 rest client and authentication header relays in a Zuul proxy.
=== Spring Cloud AWS
Easy integration with hosted Amazon Web Services. It offers a convenient way to interact with AWS provided services using well-known Spring idioms and APIs, such as the messaging or caching API. Developers can build their application around the hosted services without having to care about infrastructure or maintenance.
Easy integration with hosted Amazon Web Services.
It offers a convenient way to interact with AWS provided services using well-known Spring idioms and APIs, such as the messaging or caching API. Developers can build their application around the hosted services without having to care about infrastructure or maintenance.
=== Spring Cloud Connectors
Makes it easy for PaaS applications in a variety of platforms to connect to backend services like
databases and message brokers (the project formerly known as "Spring Cloud").
Makes it easy for PaaS applications in a variety of platforms to connect to backend services like databases and message brokers (the project formerly known as "Spring Cloud").
=== Spring Cloud Starters
Spring Boot-style starter projects to ease dependency management for consumers of Spring Cloud. (Discontinued as a project and merged with the other projects after Angel.SR2.)
Spring Boot-style starter projects to ease dependency management for consumers of Spring Cloud.
(Discontinued as a project and merged with the other projects after Angel.SR2.)
=== Spring Cloud CLI
Spring Boot CLI plugin for creating Spring Cloud component applications quickly in Groovy
Spring Cloud Angel builds on Spring Boot 1.2.x, and parts of it (notably the OAuth2 support that moved to Spring Boot) does not work with Spring Boot 1.3.x.

View File

@@ -1,28 +1,40 @@
Spring Cloud Brixton builds on Spring Boot 1.3.x. It adds the following new projects:
Spring Cloud Brixton builds on Spring Boot 1.3.x.
It adds the following new projects:
=== Spring Cloud Zookeeper
Service discovery and configuration management with Apache Zookeeper.
=== Spring Cloud Cloudfoundry
Integrates your application with Pivotal Cloudfoundry. Provides a service discovery implementation and also makes it easy to implement SSO and OAuth2 protected resources, and also to create a Cloudfoundry service broker.
Integrates your application with Pivotal Cloudfoundry.
Provides a service discovery implementation and also makes it easy to implement SSO and OAuth2 protected resources, and also to create a Cloudfoundry service broker.
=== Spring Cloud Cluster
Leadership election and common stateful patterns with an abstraction and implementation for Zookeeper, Redis, Hazelcast, Consul. (Now deprecated and superseded by Spring Integration.)
Leadership election and common stateful patterns with an abstraction and implementation for Zookeeper, Redis, Hazelcast, Consul.
(Now deprecated and superseded by Spring Integration.)
=== Spring Cloud Consul
Service discovery and configuration management with Hashicorp Consul.
=== Spring Cloud Sleuth
Distributed tracing for Spring Cloud applications, compatible with Zipkin, HTrace and log-based (e.g. ELK) tracing.
=== Spring Cloud Stream
Messaging microservices with Redis, Rabbit or Kafka. Simple declarative model to send and receive messages in a Spring Cloud app.
Messaging microservices with Redis, Rabbit or Kafka.
Simple declarative model to send and receive messages in a Spring Cloud app.
=== Spring Cloud Task
Short lived microservices. Simple declarative for adding both functional and non-functional features to Spring Boot apps.
Short lived microservices.
Simple declarative for adding both functional and non-functional features to Spring Boot apps.
=== Spring Cloud Zookeeper
Service discovery and configuration management with Apache Zookeeper.
Spring Cloud Brixton builds with Spring Boot 1.3.x but it should work with 1.4.x as well (we do compatibility tests and hope to be able to fix any issues that crop up).
@@ -40,12 +52,17 @@ Some of the highlights of the Brixton release train are:
* Cluster Leadership election and locks via Spring Cloud Cluster
* Export of Spring Boot metrics to Amazon Cloudwatch, and native support for Amazon RDS
== Notes:
Starting with Brixton, Zuul will no longer automatically send all headers to downstream services. By default `Cookie`, `Set-Cookie` and `Authorization` *are not* sent to downstream services. To return to the Angel behaviour, set `zuul.sensitiveHeaders=""` in the Zuul configuration. See https://cloud.spring.io/spring-cloud-static/Brixton.SR6/#_cookies_and_sensitive_headers[the documentation] for more information.
Starting with Brixton, Zuul will no longer automatically send all headers to downstream services.
By default `Cookie`, `Set-Cookie` and `Authorization` *are not* sent to downstream services.
To return to the Angel behaviour, set `zuul.sensitiveHeaders=""` in the Zuul configuration.
See https://cloud.spring.io/spring-cloud-static/Brixton.SR6/#_cookies_and_sensitive_headers[the documentation] for more information.
A `@LoadBalanced` `RestTemplate` is no longer created by default. See the https://cloud.spring.io/spring-cloud-static/spring-cloud.html=_spring_resttemplate_as_a_load_balancer_client[updated documentation for details]. You need to create it in your applications configuration. For example:
A `@LoadBalanced` `RestTemplate` is no longer created by default.
See the https://cloud.spring.io/spring-cloud-static/spring-cloud.html=_spring_resttemplate_as_a_load_balancer_client[updated documentation for details].
You need to create it in your applications configuration.
For example:
```java
@Configuration
@@ -63,7 +80,9 @@ Please note the correct BOM to use is `spring-cloud-dependencies` not `spring-cl
=== Migrating Spring Cloud Hystrix, Turbine and Bus with AMQP
The Bus, Hystrix and Turbine support that used to be implemented on top of Spring AMQP have all been migrated to use Spring Cloud Stream. The old artifacts still exist, but are deprecated and will be removed at some point. Instead of the `spring-cloud-*-amqp` artifacts you should use whatever raw feature you need, plus a stream binder of your choice, e.g. `spring-cloud-netflix-hystrix-stream` and `spring-cloud-starter-stream-rabbit` instead of `spring-cloud-netflix-hystrix-amqp`.
The Bus, Hystrix and Turbine support that used to be implemented on top of Spring AMQP have all been migrated to use Spring Cloud Stream.
The old artifacts still exist, but are deprecated and will be removed at some point.
Instead of the `spring-cloud-*-amqp` artifacts you should use whatever raw feature you need, plus a stream binder of your choice, e.g. `spring-cloud-netflix-hystrix-stream` and `spring-cloud-starter-stream-rabbit` instead of `spring-cloud-netflix-hystrix-amqp`.
|===
|Angel | Brixton (with AMQP) | Brixton (with Kafka) |
@@ -92,4 +111,5 @@ NOTE: There is still a `spring-cloud-netflix-hystrix-amqp` in the Brixton releas
- 2016/11/24 - Sleuth version `1.0.11.RELEASE` https://github.com/spring-cloud/spring-cloud-sleuth/milestone/17?closed=1[(issues)]
- 2016/11/23 - Config version `1.1.3.RELEASE` https://github.com/spring-cloud/spring-cloud-config/milestone/21?closed=1[(issues)]
Note: There was an XXE vulnerability in xstream (which is used by Eureka), so please upgrade to Brixton.SR7 to pull in the latest version of that library which fixed the issue (https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-3674).
Note:
There was an XXE vulnerability in xstream (which is used by Eureka), so please upgrade to Brixton.SR7 to pull in the latest version of that library which fixed the issue (https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-3674).

View File

@@ -18,7 +18,7 @@
# This example catches duplicate Signed-off-by lines.
test "" = "$(grep '^Signed-off-by: ' "$1" |
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
echo >&2 Duplicate Signed-off-by lines.
exit 1
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
echo >&2 Duplicate Signed-off-by lines.
exit 1
}

View File

@@ -7,12 +7,11 @@
#
# To enable this hook, rename this file to "pre-commit".
if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
if git rev-parse --verify HEAD >/dev/null 2>&1; then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
# If you want to allow non-ASCII filenames set this variable to true.
@@ -25,13 +24,12 @@ exec 1>&2
# them from being added to the repository. We exploit the fact that the
# printable range starts at the space character and ends with tilde.
if [ "$allownonascii" != "true" ] &&
# Note that the use of brackets around a tr range is ok here, (it's
# even required, for portability to Solaris 10's /usr/bin/tr), since
# the square bracket bytes happen to fall in the designated range.
test $(git diff --cached --name-only --diff-filter=A -z $against |
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
cat <<\EOF
# Note that the use of brackets around a tr range is ok here, (it's
# even required, for portability to Solaris 10's /usr/bin/tr), since
# the square bracket bytes happen to fall in the designated range.
test $(git diff --cached --name-only --diff-filter=A -z $against |
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0; then
cat <<\EOF
Error: Attempt to add a non-ASCII file name.
This can cause problems if you want to work with people on other platforms.
@@ -42,7 +40,7 @@ If you know what you are doing you can disable this check using:
git config hooks.allownonascii true
EOF
exit 1
exit 1
fi
# If there are whitespace errors, print the offending file names and fail.

View File

@@ -24,30 +24,26 @@ url="$2"
z40=0000000000000000000000000000000000000000
while read local_ref local_sha remote_ref remote_sha
do
if [ "$local_sha" = $z40 ]
then
# Handle delete
:
else
if [ "$remote_sha" = $z40 ]
then
# New branch, examine all commits
range="$local_sha"
else
# Update to existing branch, examine new commits
range="$remote_sha..$local_sha"
fi
while read local_ref local_sha remote_ref remote_sha; do
if [ "$local_sha" = $z40 ]; then
# Handle delete
:
else
if [ "$remote_sha" = $z40 ]; then
# New branch, examine all commits
range="$local_sha"
else
# Update to existing branch, examine new commits
range="$remote_sha..$local_sha"
fi
# Check for WIP commit
commit=`git rev-list -n 1 --grep '^WIP' "$range"`
if [ -n "$commit" ]
then
echo >&2 "Found WIP commit in $local_ref, not pushing"
exit 1
fi
fi
# Check for WIP commit
commit=$(git rev-list -n 1 --grep '^WIP' "$range")
if [ -n "$commit" ]; then
echo >&2 "Found WIP commit in $local_ref, not pushing"
exit 1
fi
fi
done
exit 0

View File

@@ -17,20 +17,19 @@
publish=next
basebranch="$1"
if test "$#" = 2
then
topic="refs/heads/$2"
if test "$#" = 2; then
topic="refs/heads/$2"
else
topic=`git symbolic-ref HEAD` ||
exit 0 ;# we do not interrupt rebasing detached HEAD
topic=$(git symbolic-ref HEAD) ||
exit 0 # we do not interrupt rebasing detached HEAD
fi
case "$topic" in
refs/heads/??/*)
;;
refs/heads/??/*) ;;
*)
exit 0 ;# we do not interrupt others.
;;
exit 0 # we do not interrupt others.
;;
esac
# Now we are dealing with a topic branch being rebased
@@ -38,34 +37,31 @@ esac
# Does the topic really exist?
git show-ref -q "$topic" || {
echo >&2 "No such branch $topic"
exit 1
echo >&2 "No such branch $topic"
exit 1
}
# Is topic fully merged to master?
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
if test -z "$not_in_master"
then
echo >&2 "$topic is fully merged to master; better remove it."
exit 1 ;# we could allow it, but there is no point.
not_in_master=$(git rev-list --pretty=oneline ^master "$topic")
if test -z "$not_in_master"; then
echo >&2 "$topic is fully merged to master; better remove it."
exit 1 # we could allow it, but there is no point.
fi
# Is topic ever merged to next? If so you should not be rebasing it.
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
only_next_2=`git rev-list ^master ${publish} | sort`
if test "$only_next_1" = "$only_next_2"
then
not_in_topic=`git rev-list "^$topic" master`
if test -z "$not_in_topic"
then
echo >&2 "$topic is already up to date with master"
exit 1 ;# we could allow it, but there is no point.
else
exit 0
fi
only_next_1=$(git rev-list ^master "^$topic" ${publish} | sort)
only_next_2=$(git rev-list ^master ${publish} | sort)
if test "$only_next_1" = "$only_next_2"; then
not_in_topic=$(git rev-list "^$topic" master)
if test -z "$not_in_topic"; then
echo >&2 "$topic is already up to date with master"
exit 1 # we could allow it, but there is no point.
else
exit 0
fi
else
not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
/usr/bin/perl -e '
not_in_next=$(git rev-list --pretty=oneline ^${publish} "$topic")
/usr/bin/perl -e '
my $topic = $ARGV[0];
my $msg = "* $topic has commits already merged to public branch:\n";
my (%not_in_next) = map {
@@ -85,7 +81,7 @@ else
}
}
' "$topic" "$not_in_next" "$not_in_master"
exit 1
exit 1
fi
<<\DOC_END

View File

@@ -6,19 +6,18 @@
#
# To enable this hook, rename this file to "pre-receive".
if test -n "$GIT_PUSH_OPTION_COUNT"
then
i=0
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
do
eval "value=\$GIT_PUSH_OPTION_$i"
case "$value" in
echoback=*)
echo "echo from the pre-receive-hook: ${value#*=}" >&2
;;
reject)
exit 1
esac
i=$((i + 1))
done
if test -n "$GIT_PUSH_OPTION_COUNT"; then
i=0
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"; do
eval "value=\$GIT_PUSH_OPTION_$i"
case "$value" in
echoback=*)
echo "echo from the pre-receive-hook: ${value#*=}" >&2
;;
reject)
exit 1
;;
esac
i=$((i + 1))
done
fi

View File

@@ -31,15 +31,15 @@ newrev="$3"
# --- Safety check
if [ -z "$GIT_DIR" ]; then
echo "Don't run this script from the command line." >&2
echo " (if you want, you could supply GIT_DIR then run" >&2
echo " $0 <ref> <oldrev> <newrev>)" >&2
exit 1
echo "Don't run this script from the command line." >&2
echo " (if you want, you could supply GIT_DIR then run" >&2
echo " $0 <ref> <oldrev> <newrev>)" >&2
exit 1
fi
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
exit 1
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
exit 1
fi
# --- Config
@@ -53,75 +53,74 @@ allowmodifytag=$(git config --bool hooks.allowmodifytag)
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
case "$projectdesc" in
"Unnamed repository"* | "")
echo "*** Project description file hasn't been set" >&2
exit 1
;;
echo "*** Project description file hasn't been set" >&2
exit 1
;;
esac
# --- Check types
# if $newrev is 0000...0000, it's a commit to delete a ref.
zero="0000000000000000000000000000000000000000"
if [ "$newrev" = "$zero" ]; then
newrev_type=delete
newrev_type=delete
else
newrev_type=$(git cat-file -t $newrev)
newrev_type=$(git cat-file -t $newrev)
fi
case "$refname","$newrev_type" in
refs/tags/*,commit)
# un-annotated tag
short_refname=${refname##refs/tags/}
if [ "$allowunannotated" != "true" ]; then
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
exit 1
fi
;;
refs/tags/*,delete)
# delete tag
if [ "$allowdeletetag" != "true" ]; then
echo "*** Deleting a tag is not allowed in this repository" >&2
exit 1
fi
;;
refs/tags/*,tag)
# annotated tag
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
then
echo "*** Tag '$refname' already exists." >&2
echo "*** Modifying a tag is not allowed in this repository." >&2
exit 1
fi
;;
refs/heads/*,commit)
# branch
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
echo "*** Creating a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/heads/*,delete)
# delete branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/remotes/*,commit)
# tracking branch
;;
refs/remotes/*,delete)
# delete tracking branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
exit 1
fi
;;
*)
# Anything else (is there anything else?)
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
exit 1
;;
refs/tags/*,commit)
# un-annotated tag
short_refname=${refname##refs/tags/}
if [ "$allowunannotated" != "true" ]; then
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
exit 1
fi
;;
refs/tags/*,delete)
# delete tag
if [ "$allowdeletetag" != "true" ]; then
echo "*** Deleting a tag is not allowed in this repository" >&2
exit 1
fi
;;
refs/tags/*,tag)
# annotated tag
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname >/dev/null 2>&1; then
echo "*** Tag '$refname' already exists." >&2
echo "*** Modifying a tag is not allowed in this repository." >&2
exit 1
fi
;;
refs/heads/*,commit)
# branch
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
echo "*** Creating a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/heads/*,delete)
# delete branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/remotes/*,commit)
# tracking branch
;;
refs/remotes/*,delete)
# delete tracking branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
exit 1
fi
;;
*)
# Anything else (is there anything else?)
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
exit 1
;;
esac
# --- Finished

View File

@@ -18,7 +18,7 @@
# This example catches duplicate Signed-off-by lines.
test "" = "$(grep '^Signed-off-by: ' "$1" |
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
echo >&2 Duplicate Signed-off-by lines.
exit 1
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
echo >&2 Duplicate Signed-off-by lines.
exit 1
}

View File

@@ -7,12 +7,11 @@
#
# To enable this hook, rename this file to "pre-commit".
if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
if git rev-parse --verify HEAD >/dev/null 2>&1; then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
# If you want to allow non-ASCII filenames set this variable to true.
@@ -25,13 +24,12 @@ exec 1>&2
# them from being added to the repository. We exploit the fact that the
# printable range starts at the space character and ends with tilde.
if [ "$allownonascii" != "true" ] &&
# Note that the use of brackets around a tr range is ok here, (it's
# even required, for portability to Solaris 10's /usr/bin/tr), since
# the square bracket bytes happen to fall in the designated range.
test $(git diff --cached --name-only --diff-filter=A -z $against |
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
cat <<\EOF
# Note that the use of brackets around a tr range is ok here, (it's
# even required, for portability to Solaris 10's /usr/bin/tr), since
# the square bracket bytes happen to fall in the designated range.
test $(git diff --cached --name-only --diff-filter=A -z $against |
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0; then
cat <<\EOF
Error: Attempt to add a non-ASCII file name.
This can cause problems if you want to work with people on other platforms.
@@ -42,7 +40,7 @@ If you know what you are doing you can disable this check using:
git config hooks.allownonascii true
EOF
exit 1
exit 1
fi
# If there are whitespace errors, print the offending file names and fail.

View File

@@ -24,30 +24,26 @@ url="$2"
z40=0000000000000000000000000000000000000000
while read local_ref local_sha remote_ref remote_sha
do
if [ "$local_sha" = $z40 ]
then
# Handle delete
:
else
if [ "$remote_sha" = $z40 ]
then
# New branch, examine all commits
range="$local_sha"
else
# Update to existing branch, examine new commits
range="$remote_sha..$local_sha"
fi
while read local_ref local_sha remote_ref remote_sha; do
if [ "$local_sha" = $z40 ]; then
# Handle delete
:
else
if [ "$remote_sha" = $z40 ]; then
# New branch, examine all commits
range="$local_sha"
else
# Update to existing branch, examine new commits
range="$remote_sha..$local_sha"
fi
# Check for WIP commit
commit=`git rev-list -n 1 --grep '^WIP' "$range"`
if [ -n "$commit" ]
then
echo >&2 "Found WIP commit in $local_ref, not pushing"
exit 1
fi
fi
# Check for WIP commit
commit=$(git rev-list -n 1 --grep '^WIP' "$range")
if [ -n "$commit" ]; then
echo >&2 "Found WIP commit in $local_ref, not pushing"
exit 1
fi
fi
done
exit 0

View File

@@ -17,20 +17,19 @@
publish=next
basebranch="$1"
if test "$#" = 2
then
topic="refs/heads/$2"
if test "$#" = 2; then
topic="refs/heads/$2"
else
topic=`git symbolic-ref HEAD` ||
exit 0 ;# we do not interrupt rebasing detached HEAD
topic=$(git symbolic-ref HEAD) ||
exit 0 # we do not interrupt rebasing detached HEAD
fi
case "$topic" in
refs/heads/??/*)
;;
refs/heads/??/*) ;;
*)
exit 0 ;# we do not interrupt others.
;;
exit 0 # we do not interrupt others.
;;
esac
# Now we are dealing with a topic branch being rebased
@@ -38,34 +37,31 @@ esac
# Does the topic really exist?
git show-ref -q "$topic" || {
echo >&2 "No such branch $topic"
exit 1
echo >&2 "No such branch $topic"
exit 1
}
# Is topic fully merged to master?
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
if test -z "$not_in_master"
then
echo >&2 "$topic is fully merged to master; better remove it."
exit 1 ;# we could allow it, but there is no point.
not_in_master=$(git rev-list --pretty=oneline ^master "$topic")
if test -z "$not_in_master"; then
echo >&2 "$topic is fully merged to master; better remove it."
exit 1 # we could allow it, but there is no point.
fi
# Is topic ever merged to next? If so you should not be rebasing it.
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
only_next_2=`git rev-list ^master ${publish} | sort`
if test "$only_next_1" = "$only_next_2"
then
not_in_topic=`git rev-list "^$topic" master`
if test -z "$not_in_topic"
then
echo >&2 "$topic is already up to date with master"
exit 1 ;# we could allow it, but there is no point.
else
exit 0
fi
only_next_1=$(git rev-list ^master "^$topic" ${publish} | sort)
only_next_2=$(git rev-list ^master ${publish} | sort)
if test "$only_next_1" = "$only_next_2"; then
not_in_topic=$(git rev-list "^$topic" master)
if test -z "$not_in_topic"; then
echo >&2 "$topic is already up to date with master"
exit 1 # we could allow it, but there is no point.
else
exit 0
fi
else
not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
/usr/bin/perl -e '
not_in_next=$(git rev-list --pretty=oneline ^${publish} "$topic")
/usr/bin/perl -e '
my $topic = $ARGV[0];
my $msg = "* $topic has commits already merged to public branch:\n";
my (%not_in_next) = map {
@@ -85,7 +81,7 @@ else
}
}
' "$topic" "$not_in_next" "$not_in_master"
exit 1
exit 1
fi
<<\DOC_END

View File

@@ -6,19 +6,18 @@
#
# To enable this hook, rename this file to "pre-receive".
if test -n "$GIT_PUSH_OPTION_COUNT"
then
i=0
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
do
eval "value=\$GIT_PUSH_OPTION_$i"
case "$value" in
echoback=*)
echo "echo from the pre-receive-hook: ${value#*=}" >&2
;;
reject)
exit 1
esac
i=$((i + 1))
done
if test -n "$GIT_PUSH_OPTION_COUNT"; then
i=0
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"; do
eval "value=\$GIT_PUSH_OPTION_$i"
case "$value" in
echoback=*)
echo "echo from the pre-receive-hook: ${value#*=}" >&2
;;
reject)
exit 1
;;
esac
i=$((i + 1))
done
fi

View File

@@ -31,15 +31,15 @@ newrev="$3"
# --- Safety check
if [ -z "$GIT_DIR" ]; then
echo "Don't run this script from the command line." >&2
echo " (if you want, you could supply GIT_DIR then run" >&2
echo " $0 <ref> <oldrev> <newrev>)" >&2
exit 1
echo "Don't run this script from the command line." >&2
echo " (if you want, you could supply GIT_DIR then run" >&2
echo " $0 <ref> <oldrev> <newrev>)" >&2
exit 1
fi
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
exit 1
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
exit 1
fi
# --- Config
@@ -53,75 +53,74 @@ allowmodifytag=$(git config --bool hooks.allowmodifytag)
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
case "$projectdesc" in
"Unnamed repository"* | "")
echo "*** Project description file hasn't been set" >&2
exit 1
;;
echo "*** Project description file hasn't been set" >&2
exit 1
;;
esac
# --- Check types
# if $newrev is 0000...0000, it's a commit to delete a ref.
zero="0000000000000000000000000000000000000000"
if [ "$newrev" = "$zero" ]; then
newrev_type=delete
newrev_type=delete
else
newrev_type=$(git cat-file -t $newrev)
newrev_type=$(git cat-file -t $newrev)
fi
case "$refname","$newrev_type" in
refs/tags/*,commit)
# un-annotated tag
short_refname=${refname##refs/tags/}
if [ "$allowunannotated" != "true" ]; then
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
exit 1
fi
;;
refs/tags/*,delete)
# delete tag
if [ "$allowdeletetag" != "true" ]; then
echo "*** Deleting a tag is not allowed in this repository" >&2
exit 1
fi
;;
refs/tags/*,tag)
# annotated tag
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
then
echo "*** Tag '$refname' already exists." >&2
echo "*** Modifying a tag is not allowed in this repository." >&2
exit 1
fi
;;
refs/heads/*,commit)
# branch
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
echo "*** Creating a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/heads/*,delete)
# delete branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/remotes/*,commit)
# tracking branch
;;
refs/remotes/*,delete)
# delete tracking branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
exit 1
fi
;;
*)
# Anything else (is there anything else?)
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
exit 1
;;
refs/tags/*,commit)
# un-annotated tag
short_refname=${refname##refs/tags/}
if [ "$allowunannotated" != "true" ]; then
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
exit 1
fi
;;
refs/tags/*,delete)
# delete tag
if [ "$allowdeletetag" != "true" ]; then
echo "*** Deleting a tag is not allowed in this repository" >&2
exit 1
fi
;;
refs/tags/*,tag)
# annotated tag
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname >/dev/null 2>&1; then
echo "*** Tag '$refname' already exists." >&2
echo "*** Modifying a tag is not allowed in this repository." >&2
exit 1
fi
;;
refs/heads/*,commit)
# branch
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
echo "*** Creating a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/heads/*,delete)
# delete branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/remotes/*,commit)
# tracking branch
;;
refs/remotes/*,delete)
# delete tracking branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
exit 1
fi
;;
*)
# Anything else (is there anything else?)
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
exit 1
;;
esac
# --- Finished

View File

@@ -306,7 +306,7 @@ initializr:
- name: Mobile
id: mobile
description: Simplify the development of mobile web applications with Spring Mobile
versionRange : "[1.5.0.RELEASE, 2.0.0.M1)"
versionRange: "[1.5.0.RELEASE, 2.0.0.M1)"
- name: Template Engines
content:
- name: Thymeleaf
@@ -1240,10 +1240,10 @@ initializr:
id: groovy
default: false
bootVersions:
- name : Latest SNAPSHOT
- name: Latest SNAPSHOT
id: 2.2.0.BUILD-SNAPSHOT
default: false
- name : 2.1.1.
- name: 2.1.1.
id: 2.1.1.RELEASE
default: true

View File

@@ -21,423 +21,433 @@ icon: stackoverflow
<html lang="en-US">
{% capture billboard_description %}
Spring Cloud provides tools for developers to quickly build some of
the common patterns in distributed systems (e.g. configuration
management, service discovery, circuit breakers, intelligent routing,
micro-proxy, control bus, one-time tokens, global locks, leadership
election, distributed sessions, cluster state). Coordination of
distributed systems leads to boiler plate patterns, and using Spring
Cloud developers can quickly stand up services and applications that
implement those patterns. They will work well in any distributed
environment, including the developer's own laptop, bare metal data
centres, and managed platforms such as Cloud Foundry.
{% endcapture %}
{% capture main_content %}
Spring Cloud builds on Spring Boot by providing a bunch of libraries
that enhance the behaviour of an application when added to the
classpath. You can take advantage of the basic default behaviour to
get started really quickly, and then when you need to, you can
configure or extend to create a custom solution.
<span id="quick-start"></span>
## Quick Start
The release train label (see below) is actually only used explicitly
in one artifact: "spring-cloud-dependencies" (all the others have
normal numeric release labels tied to their parent project). The
dependencies POM is the one you can use as a BOM for dependency
management. Example using the latest version with the config client
and eureka (change the artifact ids to pull in other starters):
{% include download_widget.md %}
## Features
Spring Cloud focuses on providing good out of box experience for typical use cases and extensibility mechanism to cover
others.
* Distributed/versioned configuration
* Service registration and discovery
* Routing
* Service-to-service calls
* Load balancing
* Circuit Breakers
* Global locks
* Leadership election and cluster state
* Distributed messaging
Spring Cloud takes a very declarative approach, and often you get a
lot of fetaures with just a classpath change and/or an
annotation. Example application that is a discovery client:
```java
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
<a name="main-projects"></a>
## Main Projects
<!-- Spring Cloud Config -->
{% capture project_description %}
Centralized external configuration management backed by a git repository. The configuration resources map directly to
Spring `Environment` but could be used by non-Spring applications if desired.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-config"
repo_url="https://github.com/spring-cloud/spring-cloud-config" project_title="Spring Cloud Config"
project_description=project_description %}
<!-- Spring Cloud Netflix -->
{% capture project_description %}
Integration with various Netflix OSS components (Eureka, Hystrix, Zuul, Archaius, etc.).
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-netflix"
repo_url="https://github.com/spring-cloud/spring-cloud-netflix" project_title="Spring Cloud Netflix"
project_description=project_description %}
<!-- Spring Cloud Bus -->
{% capture project_description %}
An event bus for linking services and service instances together with distributed messaging. Useful for propagating
state changes across a cluster (e.g. config change events).
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-bus"
repo_url="https://github.com/spring-cloud/spring-cloud-bus" project_title="Spring Cloud Bus"
project_description=project_description %}
<!-- Spring Cloud Cloudfoundry -->
{% capture project_description %}
Integrates your application with Pivotal Cloud Foundry. Provides a service discovery implementation and also makes it
easy to implement SSO and OAuth2 protected resources.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-cloudfoundry"
repo_url="https://github.com/spring-cloud/spring-cloud-cloudfoundry" project_title="Spring Cloud for Cloud Foundry"
project_description=project_description %}
<!-- Spring Cloud Open Service Broker -->
{% capture project_description %}
Provides a starting point for building a service broker that implements the Open Service Broker API.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-open-service-broker/"
repo_url="https://github.com/spring-cloud/spring-cloud-open-service-broker" project_title="Spring Cloud Open Service
Broker" project_description=project_description %}
<!-- Spring Cloud Cluster -->
{% capture project_description %}
Leadership election and common stateful patterns with an abstraction and implementation for Zookeeper, Redis, Hazelcast,
Consul.
{% endcapture %}
{% include project_block.md site_url="/spring-cloud" repo_url="https://github.com/spring-cloud/spring-cloud-cluster"
project_title="Spring Cloud Cluster" project_description=project_description %}
<!-- Spring Cloud Consul -->
{% capture project_description %}
Service discovery and configuration management with Hashicorp Consul.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-consul"
repo_url="https://github.com/spring-cloud/spring-cloud-consul" project_title="Spring Cloud Consul"
project_description=project_description %}
<!-- Spring Cloud Security -->
{% capture project_description %}
Provides support for load-balanced OAuth2 rest client and authentication header relays in a Zuul proxy.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-security"
repo_url="https://github.com/spring-cloud/spring-cloud-security" project_title="Spring Cloud Security"
project_description=project_description %}
<!-- Spring Cloud Sleuth -->
{% capture project_description %}
Distributed tracing for Spring Cloud applications, compatible with Zipkin, HTrace and log-based (e.g. ELK) tracing.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-sleuth"
repo_url="https://github.com/spring-cloud/spring-cloud-sleuth" project_title="Spring Cloud Sleuth"
project_description=project_description %}
<!-- Spring Cloud Data Flow -->
{% capture project_description %}
A cloud-native orchestration service for composable microservice applications on modern runtimes. Easy-to-use DSL,
drag-and-drop GUI, and REST-APIs together simplifies the overall orchestration of microservice based data pipelines.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-dataflow"
repo_url="https://github.com/spring-cloud/spring-cloud-dataflow" project_title="Spring Cloud Data Flow"
project_description=project_description %}
<!-- Spring Cloud Stream -->
{% capture project_description %}
A lightweight event-driven microservices framework to quickly build applications that can connect to external systems.
Simple declarative model to send and receive messages using Apache Kafka or RabbitMQ between Spring Boot apps.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-stream"
repo_url="https://github.com/spring-cloud/spring-cloud-stream" project_title="Spring Cloud Stream"
project_description=project_description %}
<!-- Spring Cloud Stream App Starters -->
{% capture project_description %}
Spring Cloud Stream App Starters are Spring Boot based Spring Integration applications that provide integration with
external systems.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-stream-app-starters"
repo_url="https://github.com/spring-cloud/spring-cloud-stream-app-starters" project_title="Spring Cloud Stream App
Starters" project_description=project_description %}
<!-- Spring Cloud Task -->
{% capture project_description %}
A short-lived microservices framework to quickly build applications that perform finite amounts of data processing.
Simple declarative for adding both functional and non-functional features to Spring Boot apps.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-task"
repo_url="https://github.com/spring-cloud/spring-cloud-task" project_title="Spring Cloud Task"
project_description=project_description %}
<!-- Spring Cloud Task App Starters -->
{% capture project_description %}
Spring Cloud Task App Starters are Spring Boot applications that may be any process including Spring Batch jobs that do
not run forever, and they end/stop after a finite period of data processing.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-task-app-starters"
repo_url="https://github.com/spring-cloud/spring-cloud-task-app-starters" project_title="Spring Cloud Task App Starters"
project_description=project_description %}
<!-- Spring Cloud Zookeeper -->
{% capture project_description %}
Service discovery and configuration management with Apache Zookeeper.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-zookeeper"
repo_url="https://github.com/spring-cloud/spring-cloud-zookeeper" project_title="Spring Cloud Zookeeper"
project_description=project_description %}
<!-- Spring Cloud AWS -->
{% capture project_description %}
Easy integration with hosted Amazon Web Services. It offers a convenient way to interact with AWS provided services
using well-known Spring idioms and APIs, such as the messaging or caching API. Developers can build their application
around the hosted services without having to care about infrastructure or maintenance.
{% endcapture %}
{% capture site_url %}
{{ site.projects_site_url }}/spring-cloud-aws
{% endcapture %}
{% include project_block.md site_url=site_url repo_url="https://github.com/spring-cloud/spring-cloud-aws"
project_title="Spring Cloud for Amazon Web Services" project_description=project_description %}
<!-- Spring Cloud Connectors -->
{% capture project_description %}
Makes it easy for PaaS applications in a variety of platforms to connect to backend services like
databases and message brokers (the project formerly known as "Spring Cloud").
{% endcapture %}
{% capture site_url %}
{{ site.projects_site_url }}/spring-cloud-connectors
{% endcapture %}
{% include project_block.md site_url=site_url repo_url="https://github.com/spring-cloud/spring-cloud-connectors"
project_title="Spring Cloud Connectors" project_description=project_description %}
<!-- Spring Cloud Starters -->
{% capture project_description %}
Spring Boot-style starter projects to ease dependency management for consumers of Spring Cloud. (Discontinued as a
project and merged with the other projects after Angel.SR2.)
{% endcapture %}
{% include project_block.md site_url="https://github.com/spring-cloud/spring-cloud-starters"
repo_url="https://github.com/spring-cloud/spring-cloud-starters" project_title="Spring Cloud Starters"
project_description=project_description %}
<!-- Spring Cloud CLI -->
{% capture project_description %}
Spring Boot CLI plugin for creating Spring Cloud component applications quickly in Groovy
{% endcapture %}
{% include project_block.md site_url="https://github.com/spring-cloud/spring-cloud-cli"
repo_url="https://github.com/spring-cloud/spring-cloud-cli" project_title="Spring Cloud CLI"
project_description=project_description %}
<!-- Spring Cloud Contract -->
{% capture project_description %}
Spring Cloud Contract is an umbrella project holding solutions that help users in successfully implementing the Consumer
Driven Contracts approach.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-contract"
repo_url="https://github.com/spring-cloud/spring-cloud-contract" project_title="Spring Cloud Contract"
project_description=project_description %}
<!-- Spring Cloud Gateway -->
{% capture project_description %}
Spring Cloud Gateway is an intelligent and programmable router based on Project Reactor.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-gateway"
repo_url="https://github.com/spring-cloud/spring-cloud-gateway" project_title="Spring Cloud Gateway"
project_description=project_description %}
<!-- Spring Cloud OpenFeign -->
{% capture project_description %}
Spring Cloud OpenFeign provides integrations for Spring Boot apps through autoconfiguration and binding to the Spring
Environment and other Spring programming model idioms.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-openfeign"
repo_url="https://github.com/spring-cloud/spring-cloud-openfeign" project_title="Spring Cloud OpenFeign"
project_description=project_description %}
<!-- Spring Cloud Pipelines -->
{% capture project_description %}
Spring Cloud Pipelines provides an opinionated deployment pipeline with steps to ensure that your application can be
deployed in zero downtime fashion and easilly rolled back of something goes wrong.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-pipelines"
repo_url="https://github.com/spring-cloud/spring-cloud-pipelines" project_title="Spring Cloud Pipelines"
project_description=project_description %}
<!-- Spring Cloud Function -->
{% capture project_description %}
Spring Cloud Function promotes the implementation of business logic via functions. It supports a uniform programming
model across serverless providers, as well as the ability to run standalone (locally or in a PaaS).
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-function"
repo_url="https://github.com/spring-cloud/spring-cloud-function" project_title="Spring Cloud Function"
project_description=project_description %}
## Release Trains
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.
Release train contents:
<!-- BEGIN COMPONENTS -->
|Component | Edgware.SR5 | Finchley.SR1 | Finchley.BUILD-SNAPSHOT|
|--------------------------------------|-----------------|---------------------|------------------------|
|spring-cloud-aws | 1.2.3.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-cloud-bus | 1.3.3.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-cloud-cli | 1.4.1.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-cloud-commons | 1.3.5.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-contract | 1.2.6.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-config | 1.4.5.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-netflix | 1.4.6.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-security | 1.2.3.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-cloud-cloudfoundry | 1.1.2.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-cloud-consul | 1.3.5.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-sleuth | 1.3.5.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-stream | Ditmars.SR4 | Elmhurst.SR1 | Elmhurst.BUILD-SNAPSHOT|
|spring-cloud-zookeeper | 1.2.2.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-boot | 1.5.16.RELEASE | 2.0.4.RELEASE | 2.0.4.BUILD-SNAPSHOT |
|spring-cloud-task | 1.2.3.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-cloud-vault | 1.1.2.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-gateway | 1.0.2.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-openfeign | | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-function | 1.0.1.RELEASE | 1.0.0.RELEASE | 1.0.1.BUILD-SNAPSHOT |
<!-- END COMPONENTS -->
Finchley builds and works with Spring Boot 2.0.x, and is not expected
to work with Spring Boot 1.5.x.
Note: The Dalston release train will [reach
end-of-life](https://spring.io/blog/2018/06/19/spring-cloud-finchley-release-is-available) in December 2018. Edgware
will follow the end-of-life cycle of Spring Boot 1.5.x.
The Dalston and Edgware release trains build on Spring Boot 1.5.x, and
are not expected to work with Spring Boot 2.0.x.
NOTE: The Camden release train was [marked
end-of-life](https://spring.io/blog/2018/06/19/spring-cloud-finchley-release-is-available).
The Camden release train builds on Spring Boot 1.4.x, but is also
tested with 1.5.x.
NOTE: The Brixton and Angel release trains were [marked
end-of-life](https://spring.io/blog/2017/07/21/spring-cloud-dalston-sr2-is-available-now#end-of-life-for-angel-and-brixton-release-trains)
(EOL) in July 2017.
The Brixton release train builds on Spring Boot 1.3.x, but is also
tested with 1.4.x.
The Angel release train builds on Spring Boot 1.2.x, and is
incompatible in some areas with Spring Boot 1.3.x. Brixton builds on
Spring Boot 1.3.x and is similarly incompatible with 1.2.x. Some
libraries and most apps built on Angel will run fine on Brixton, but
changes will be required anywhere that the OAuth2 features from
spring-cloud-security 1.0.x are used (they were mostly moved to Spring
Boot in 1.3.0).
Use your dependency management tools to control the version. If you
are using Maven remember that the first version declared wins, so
declare the BOMs in order, with the first one usually being the most
recent (e.g. if you want to use Spring Boot 1.3.6 with Brixton.RELEASE, put
the Boot BOM first). The same rule applies to Gradle if you use the
Spring dependency management plugin.
> NOTE: The release train contains a
> `spring-cloud-dependencies` as well as the
> `spring-cloud-starter-parent`. You can use the parent as you would
> the `spring-boot-starter-parent` (if you are using Maven).
> If you only need dependency management, the "dependencies"
> version is a BOM-only version of the same thing (it just
> contains dependency management and no plugin declarations
> or direct references to Spring or Spring Boot). If you are
> using the Spring Boot parent POM, then you can use the BOM from
> Spring Cloud. The opposite is not true: using the Cloud parent
> makes it impossible, or at least unreliable, to also use the
> Boot BOM to change the version of Spring Boot and its dependencies.
> NOTE: If you find anything wrong or outdated on this page, please open an issue in
[this](https://github.com/spring-projects/spring-cloud) repo.
{% endcapture %}
{% capture related_resources %}
### Sample Projects
* [Config Server](https://github.com/spring-cloud-samples/configserver)
* [Service Registry](https://github.com/spring-cloud-samples/eureka)
* [Circuit Breaker Dashboard](https://github.com/spring-cloud-samples/hystrix-dashboard)
* [Business Application](https://github.com/spring-cloud-samples/customers-stores) (Customers and Stores)
* [OAuth2 Authorization Server](https://github.com/spring-cloud-samples/authserver)
* [OAuth2 SSO Client](https://github.com/spring-cloud-samples/sso)
* [Integration Test Samples](https://github.com/spring-cloud-samples/tests)
* [Spring Cloud Contract Samples](https://github.com/spring-cloud-samples/spring-cloud-contract-samples)
{% endcapture %}
{% include project_page.html %}
{% capture billboard_description %}
Spring Cloud provides tools for developers to quickly build some of
the common patterns in distributed systems (e.g. configuration
management, service discovery, circuit breakers, intelligent routing,
micro-proxy, control bus, one-time tokens, global locks, leadership
election, distributed sessions, cluster state). Coordination of
distributed systems leads to boiler plate patterns, and using Spring
Cloud developers can quickly stand up services and applications that
implement those patterns. They will work well in any distributed
environment, including the developer's own laptop, bare metal data
centres, and managed platforms such as Cloud Foundry.
{% endcapture %}
{% capture main_content %}
Spring Cloud builds on Spring Boot by providing a bunch of libraries
that enhance the behaviour of an application when added to the
classpath. You can take advantage of the basic default behaviour to
get started really quickly, and then when you need to, you can
configure or extend to create a custom solution.
<span id="quick-start"></span>
## Quick Start
The release train label (see below) is actually only used explicitly
in one artifact: "spring-cloud-dependencies" (all the others have
normal numeric release labels tied to their parent project). The
dependencies POM is the one you can use as a BOM for dependency
management. Example using the latest version with the config client
and eureka (change the artifact ids to pull in other starters):
{% include download_widget.md %}
## Features
Spring Cloud focuses on providing good out of box experience for typical use cases and extensibility mechanism to
cover
others.
* Distributed/versioned configuration
* Service registration and discovery
* Routing
* Service-to-service calls
* Load balancing
* Circuit Breakers
* Global locks
* Leadership election and cluster state
* Distributed messaging
Spring Cloud takes a very declarative approach, and often you get a
lot of fetaures with just a classpath change and/or an
annotation. Example application that is a discovery client:
```java
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
<a name="main-projects"></a>
## Main Projects
<!-- Spring Cloud Config -->
{% capture project_description %}
Centralized external configuration management backed by a git repository. The configuration resources map directly
to
Spring `Environment` but could be used by non-Spring applications if desired.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-config"
repo_url="https://github.com/spring-cloud/spring-cloud-config" project_title="Spring Cloud Config"
project_description=project_description %}
<!-- Spring Cloud Netflix -->
{% capture project_description %}
Integration with various Netflix OSS components (Eureka, Hystrix, Zuul, Archaius, etc.).
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-netflix"
repo_url="https://github.com/spring-cloud/spring-cloud-netflix" project_title="Spring Cloud Netflix"
project_description=project_description %}
<!-- Spring Cloud Bus -->
{% capture project_description %}
An event bus for linking services and service instances together with distributed messaging. Useful for propagating
state changes across a cluster (e.g. config change events).
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-bus"
repo_url="https://github.com/spring-cloud/spring-cloud-bus" project_title="Spring Cloud Bus"
project_description=project_description %}
<!-- Spring Cloud Cloudfoundry -->
{% capture project_description %}
Integrates your application with Pivotal Cloud Foundry. Provides a service discovery implementation and also makes
it
easy to implement SSO and OAuth2 protected resources.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-cloudfoundry"
repo_url="https://github.com/spring-cloud/spring-cloud-cloudfoundry" project_title="Spring Cloud for Cloud Foundry"
project_description=project_description %}
<!-- Spring Cloud Open Service Broker -->
{% capture project_description %}
Provides a starting point for building a service broker that implements the Open Service Broker API.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-open-service-broker/"
repo_url="https://github.com/spring-cloud/spring-cloud-open-service-broker" project_title="Spring Cloud Open Service
Broker" project_description=project_description %}
<!-- Spring Cloud Cluster -->
{% capture project_description %}
Leadership election and common stateful patterns with an abstraction and implementation for Zookeeper, Redis,
Hazelcast,
Consul.
{% endcapture %}
{% include project_block.md site_url="/spring-cloud" repo_url="https://github.com/spring-cloud/spring-cloud-cluster"
project_title="Spring Cloud Cluster" project_description=project_description %}
<!-- Spring Cloud Consul -->
{% capture project_description %}
Service discovery and configuration management with Hashicorp Consul.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-consul"
repo_url="https://github.com/spring-cloud/spring-cloud-consul" project_title="Spring Cloud Consul"
project_description=project_description %}
<!-- Spring Cloud Security -->
{% capture project_description %}
Provides support for load-balanced OAuth2 rest client and authentication header relays in a Zuul proxy.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-security"
repo_url="https://github.com/spring-cloud/spring-cloud-security" project_title="Spring Cloud Security"
project_description=project_description %}
<!-- Spring Cloud Sleuth -->
{% capture project_description %}
Distributed tracing for Spring Cloud applications, compatible with Zipkin, HTrace and log-based (e.g. ELK) tracing.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-sleuth"
repo_url="https://github.com/spring-cloud/spring-cloud-sleuth" project_title="Spring Cloud Sleuth"
project_description=project_description %}
<!-- Spring Cloud Data Flow -->
{% capture project_description %}
A cloud-native orchestration service for composable microservice applications on modern runtimes. Easy-to-use DSL,
drag-and-drop GUI, and REST-APIs together simplifies the overall orchestration of microservice based data pipelines.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-dataflow"
repo_url="https://github.com/spring-cloud/spring-cloud-dataflow" project_title="Spring Cloud Data Flow"
project_description=project_description %}
<!-- Spring Cloud Stream -->
{% capture project_description %}
A lightweight event-driven microservices framework to quickly build applications that can connect to external
systems.
Simple declarative model to send and receive messages using Apache Kafka or RabbitMQ between Spring Boot apps.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-stream"
repo_url="https://github.com/spring-cloud/spring-cloud-stream" project_title="Spring Cloud Stream"
project_description=project_description %}
<!-- Spring Cloud Stream App Starters -->
{% capture project_description %}
Spring Cloud Stream App Starters are Spring Boot based Spring Integration applications that provide integration with
external systems.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-stream-app-starters"
repo_url="https://github.com/spring-cloud/spring-cloud-stream-app-starters" project_title="Spring Cloud Stream App
Starters" project_description=project_description %}
<!-- Spring Cloud Task -->
{% capture project_description %}
A short-lived microservices framework to quickly build applications that perform finite amounts of data processing.
Simple declarative for adding both functional and non-functional features to Spring Boot apps.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-task"
repo_url="https://github.com/spring-cloud/spring-cloud-task" project_title="Spring Cloud Task"
project_description=project_description %}
<!-- Spring Cloud Task App Starters -->
{% capture project_description %}
Spring Cloud Task App Starters are Spring Boot applications that may be any process including Spring Batch jobs that
do
not run forever, and they end/stop after a finite period of data processing.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-task-app-starters"
repo_url="https://github.com/spring-cloud/spring-cloud-task-app-starters" project_title="Spring Cloud Task App
Starters"
project_description=project_description %}
<!-- Spring Cloud Zookeeper -->
{% capture project_description %}
Service discovery and configuration management with Apache Zookeeper.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-zookeeper"
repo_url="https://github.com/spring-cloud/spring-cloud-zookeeper" project_title="Spring Cloud Zookeeper"
project_description=project_description %}
<!-- Spring Cloud AWS -->
{% capture project_description %}
Easy integration with hosted Amazon Web Services. It offers a convenient way to interact with AWS provided services
using well-known Spring idioms and APIs, such as the messaging or caching API. Developers can build their
application
around the hosted services without having to care about infrastructure or maintenance.
{% endcapture %}
{% capture site_url %}
{{ site.projects_site_url }}/spring-cloud-aws
{% endcapture %}
{% include project_block.md site_url=site_url repo_url="https://github.com/spring-cloud/spring-cloud-aws"
project_title="Spring Cloud for Amazon Web Services" project_description=project_description %}
<!-- Spring Cloud Connectors -->
{% capture project_description %}
Makes it easy for PaaS applications in a variety of platforms to connect to backend services like
databases and message brokers (the project formerly known as "Spring Cloud").
{% endcapture %}
{% capture site_url %}
{{ site.projects_site_url }}/spring-cloud-connectors
{% endcapture %}
{% include project_block.md site_url=site_url repo_url="https://github.com/spring-cloud/spring-cloud-connectors"
project_title="Spring Cloud Connectors" project_description=project_description %}
<!-- Spring Cloud Starters -->
{% capture project_description %}
Spring Boot-style starter projects to ease dependency management for consumers of Spring Cloud. (Discontinued as a
project and merged with the other projects after Angel.SR2.)
{% endcapture %}
{% include project_block.md site_url="https://github.com/spring-cloud/spring-cloud-starters"
repo_url="https://github.com/spring-cloud/spring-cloud-starters" project_title="Spring Cloud Starters"
project_description=project_description %}
<!-- Spring Cloud CLI -->
{% capture project_description %}
Spring Boot CLI plugin for creating Spring Cloud component applications quickly in Groovy
{% endcapture %}
{% include project_block.md site_url="https://github.com/spring-cloud/spring-cloud-cli"
repo_url="https://github.com/spring-cloud/spring-cloud-cli" project_title="Spring Cloud CLI"
project_description=project_description %}
<!-- Spring Cloud Contract -->
{% capture project_description %}
Spring Cloud Contract is an umbrella project holding solutions that help users in successfully implementing the
Consumer
Driven Contracts approach.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-contract"
repo_url="https://github.com/spring-cloud/spring-cloud-contract" project_title="Spring Cloud Contract"
project_description=project_description %}
<!-- Spring Cloud Gateway -->
{% capture project_description %}
Spring Cloud Gateway is an intelligent and programmable router based on Project Reactor.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-gateway"
repo_url="https://github.com/spring-cloud/spring-cloud-gateway" project_title="Spring Cloud Gateway"
project_description=project_description %}
<!-- Spring Cloud OpenFeign -->
{% capture project_description %}
Spring Cloud OpenFeign provides integrations for Spring Boot apps through autoconfiguration and binding to the
Spring
Environment and other Spring programming model idioms.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-openfeign"
repo_url="https://github.com/spring-cloud/spring-cloud-openfeign" project_title="Spring Cloud OpenFeign"
project_description=project_description %}
<!-- Spring Cloud Pipelines -->
{% capture project_description %}
Spring Cloud Pipelines provides an opinionated deployment pipeline with steps to ensure that your application can be
deployed in zero downtime fashion and easilly rolled back of something goes wrong.
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-pipelines"
repo_url="https://github.com/spring-cloud/spring-cloud-pipelines" project_title="Spring Cloud Pipelines"
project_description=project_description %}
<!-- Spring Cloud Function -->
{% capture project_description %}
Spring Cloud Function promotes the implementation of business logic via functions. It supports a uniform programming
model across serverless providers, as well as the ability to run standalone (locally or in a PaaS).
{% endcapture %}
{% include project_block.md site_url="https://cloud.spring.io/spring-cloud-function"
repo_url="https://github.com/spring-cloud/spring-cloud-function" project_title="Spring Cloud Function"
project_description=project_description %}
## Release Trains
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.
Release train contents:
<!-- BEGIN COMPONENTS -->
|Component | Edgware.SR5 | Finchley.SR1 | Finchley.BUILD-SNAPSHOT|
|--------------------------------------|-----------------|---------------------|------------------------|
|spring-cloud-aws | 1.2.3.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-cloud-bus | 1.3.3.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-cloud-cli | 1.4.1.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-cloud-commons | 1.3.5.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-contract | 1.2.6.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-config | 1.4.5.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-netflix | 1.4.6.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-security | 1.2.3.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-cloud-cloudfoundry | 1.1.2.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-cloud-consul | 1.3.5.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-sleuth | 1.3.5.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-stream | Ditmars.SR4 | Elmhurst.SR1 | Elmhurst.BUILD-SNAPSHOT|
|spring-cloud-zookeeper | 1.2.2.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-boot | 1.5.16.RELEASE | 2.0.4.RELEASE | 2.0.4.BUILD-SNAPSHOT |
|spring-cloud-task | 1.2.3.RELEASE | 2.0.0.RELEASE | 2.0.1.BUILD-SNAPSHOT |
|spring-cloud-vault | 1.1.2.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-gateway | 1.0.2.RELEASE | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-openfeign | | 2.0.1.RELEASE | 2.0.2.BUILD-SNAPSHOT |
|spring-cloud-function | 1.0.1.RELEASE | 1.0.0.RELEASE | 1.0.1.BUILD-SNAPSHOT |
<!-- END COMPONENTS -->
Finchley builds and works with Spring Boot 2.0.x, and is not expected
to work with Spring Boot 1.5.x.
Note: The Dalston release train will [reach
end-of-life](https://spring.io/blog/2018/06/19/spring-cloud-finchley-release-is-available) in December 2018. Edgware
will follow the end-of-life cycle of Spring Boot 1.5.x.
The Dalston and Edgware release trains build on Spring Boot 1.5.x, and
are not expected to work with Spring Boot 2.0.x.
NOTE: The Camden release train was [marked
end-of-life](https://spring.io/blog/2018/06/19/spring-cloud-finchley-release-is-available).
The Camden release train builds on Spring Boot 1.4.x, but is also
tested with 1.5.x.
NOTE: The Brixton and Angel release trains were [marked
end-of-life](https://spring.io/blog/2017/07/21/spring-cloud-dalston-sr2-is-available-now#end-of-life-for-angel-and-brixton-release-trains)
(EOL) in July 2017.
The Brixton release train builds on Spring Boot 1.3.x, but is also
tested with 1.4.x.
The Angel release train builds on Spring Boot 1.2.x, and is
incompatible in some areas with Spring Boot 1.3.x. Brixton builds on
Spring Boot 1.3.x and is similarly incompatible with 1.2.x. Some
libraries and most apps built on Angel will run fine on Brixton, but
changes will be required anywhere that the OAuth2 features from
spring-cloud-security 1.0.x are used (they were mostly moved to Spring
Boot in 1.3.0).
Use your dependency management tools to control the version. If you
are using Maven remember that the first version declared wins, so
declare the BOMs in order, with the first one usually being the most
recent (e.g. if you want to use Spring Boot 1.3.6 with Brixton.RELEASE, put
the Boot BOM first). The same rule applies to Gradle if you use the
Spring dependency management plugin.
> NOTE: The release train contains a
> `spring-cloud-dependencies` as well as the
> `spring-cloud-starter-parent`. You can use the parent as you would
> the `spring-boot-starter-parent` (if you are using Maven).
> If you only need dependency management, the "dependencies"
> version is a BOM-only version of the same thing (it just
> contains dependency management and no plugin declarations
> or direct references to Spring or Spring Boot). If you are
> using the Spring Boot parent POM, then you can use the BOM from
> Spring Cloud. The opposite is not true: using the Cloud parent
> makes it impossible, or at least unreliable, to also use the
> Boot BOM to change the version of Spring Boot and its dependencies.
> NOTE: If you find anything wrong or outdated on this page, please open an issue in
[this](https://github.com/spring-projects/spring-cloud) repo.
{% endcapture %}
{% capture related_resources %}
### Sample Projects
* [Config Server](https://github.com/spring-cloud-samples/configserver)
* [Service Registry](https://github.com/spring-cloud-samples/eureka)
* [Circuit Breaker Dashboard](https://github.com/spring-cloud-samples/hystrix-dashboard)
* [Business Application](https://github.com/spring-cloud-samples/customers-stores) (Customers and Stores)
* [OAuth2 Authorization Server](https://github.com/spring-cloud-samples/authserver)
* [OAuth2 SSO Client](https://github.com/spring-cloud-samples/sso)
* [Integration Test Samples](https://github.com/spring-cloud-samples/tests)
* [Spring Cloud Contract Samples](https://github.com/spring-cloud-samples/spring-cloud-contract-samples)
{% endcapture %}
{% include project_page.html %}
</html>

View File

@@ -25,8 +25,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.Releaser;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.buildsystem.ProjectVersion;
import org.springframework.cloud.release.internal.project.ProcessedProject;
import org.springframework.cloud.release.internal.project.ProjectVersion;
import org.springframework.cloud.release.internal.project.Projects;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;

View File

@@ -27,7 +27,6 @@ import org.springframework.cloud.release.internal.buildsystem.GradleUpdater;
import org.springframework.cloud.release.internal.buildsystem.ProjectPomUpdater;
import org.springframework.cloud.release.internal.docs.CustomProjectDocumentationUpdater;
import org.springframework.cloud.release.internal.docs.DocumentationUpdater;
import org.springframework.cloud.release.internal.docs.ProjectDocumentationUpdater;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.github.ProjectGitHubHandler;
import org.springframework.cloud.release.internal.options.Parser;
@@ -109,19 +108,11 @@ class ReleaserConfiguration {
@Autowired(required = false)
List<CustomProjectDocumentationUpdater> customProjectDocumentationUpdaters = new ArrayList<>();
@Bean
ProjectDocumentationUpdater projectDocumentationUpdater(
ProjectGitHandler projectGitHandler) {
return new ProjectDocumentationUpdater(this.properties, projectGitHandler,
this.customProjectDocumentationUpdaters);
}
@Bean
DocumentationUpdater documentationUpdater(ProjectGitHandler projectGitHandler,
ReleaserProperties properties, TemplateGenerator templateGenerator,
ProjectDocumentationUpdater projectDocumentationUpdater) {
ReleaserProperties properties, TemplateGenerator templateGenerator) {
return new DocumentationUpdater(projectGitHandler, properties, templateGenerator,
projectDocumentationUpdater);
this.customProjectDocumentationUpdaters);
}
@Bean

Some files were not shown because too many files have changed in this diff Show More