Files
spring-cloud-release-tools/releaser-spring/src/main/java/releaser/internal/spring/ReleaserConfiguration.java
2020-03-04 13:15:13 +01:00

191 lines
6.6 KiB
Java

/*
* 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 releaser.internal.spring;
import java.util.ArrayList;
import java.util.List;
import releaser.internal.Releaser;
import releaser.internal.ReleaserProperties;
import releaser.internal.ReleaserPropertiesUpdater;
import releaser.internal.buildsystem.GradleUpdater;
import releaser.internal.buildsystem.ProjectPomUpdater;
import releaser.internal.docs.CustomProjectDocumentationUpdater;
import releaser.internal.docs.DocumentationUpdater;
import releaser.internal.git.ProjectGitHandler;
import releaser.internal.github.CustomGithubIssues;
import releaser.internal.github.ProjectGitHubHandler;
import releaser.internal.options.Parser;
import releaser.internal.postrelease.PostReleaseActions;
import releaser.internal.project.ProjectCommandExecutor;
import releaser.internal.sagan.SaganClient;
import releaser.internal.sagan.SaganUpdater;
import releaser.internal.tasks.ReleaserTask;
import releaser.internal.tasks.SingleProjectReleaserTask;
import releaser.internal.template.TemplateGenerator;
import releaser.internal.versions.VersionsFetcher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(ReleaserProperties.class)
class ReleaserConfiguration {
@Bean
@ConditionalOnMissingBean
OptionsAndPropertiesFactory optionsAndPropertiesFactory() {
return new OptionsAndPropertiesFactory();
}
@Bean
@ConditionalOnMissingBean
VersionsToBumpFactory versionsToBumpFactory(Releaser releaser,
ReleaserProperties properties) {
return new VersionsToBumpFactory(releaser, properties);
}
@Bean
@ConditionalOnMissingBean
ProjectsToRunFactory projectsToRunFactory(VersionsToBumpFactory versionsToBumpFactory,
Releaser releaser, ReleaserPropertiesUpdater updater) {
return new ProjectsToRunFactory(versionsToBumpFactory, releaser, updater);
}
@Bean
@ConditionalOnMissingBean
TasksToRunFactory tasksToRunFactory(ApplicationContext context) {
return new TasksToRunFactory(context);
}
@Bean
@ConditionalOnMissingBean
SpringReleaser springReleaser(OptionsAndPropertiesFactory optionsAndPropertiesFactory,
ProjectsToRunFactory projectsToRunFactory,
TasksToRunFactory tasksToRunFactory, FlowRunner flowRunner,
ReleaserProperties properties) {
return new DefaultSpringReleaser(properties, optionsAndPropertiesFactory,
projectsToRunFactory, tasksToRunFactory, flowRunner);
}
@Bean
@ConditionalOnMissingBean
ProjectCommandExecutor projectBuilder() {
return new ProjectCommandExecutor();
}
@Bean
@ConditionalOnMissingBean
VersionsFetcher versionsFetcher(ProjectPomUpdater updater,
ReleaserProperties properties) {
return new VersionsFetcher(properties, updater);
}
@Bean
@ConditionalOnMissingBean
ProjectGitHandler projectGitHandler(ReleaserProperties properties) {
return new ProjectGitHandler(properties);
}
@Bean
@ConditionalOnMissingBean
ProjectGitHubHandler projectGitHubHandler(
@Autowired(required = false) List<CustomGithubIssues> customGithubIssues,
ReleaserProperties properties) {
return new ProjectGitHubHandler(properties,
customGithubIssues != null ? customGithubIssues : new ArrayList<>());
}
@Bean
@ConditionalOnMissingBean
TemplateGenerator templateGenerator(ProjectGitHubHandler handler,
ReleaserProperties properties) {
return new TemplateGenerator(properties, handler);
}
@Bean
@ConditionalOnMissingBean
GradleUpdater gradleUpdater() {
return new GradleUpdater();
}
@Bean
@ConditionalOnMissingBean
SaganUpdater saganUpdater(SaganClient saganClient,
ReleaserProperties releaserProperties) {
return new SaganUpdater(saganClient, releaserProperties);
}
@Bean
@ConditionalOnMissingBean
PostReleaseActions postReleaseActions(ProjectGitHandler handler,
ProjectPomUpdater pomUpdater, GradleUpdater gradleUpdater,
ProjectCommandExecutor projectCommandExecutor,
ReleaserProperties releaserProperties, VersionsFetcher versionsFetcher,
ReleaserPropertiesUpdater releaserPropertiesUpdater) {
return new PostReleaseActions(handler, pomUpdater, gradleUpdater,
projectCommandExecutor, releaserProperties, versionsFetcher,
releaserPropertiesUpdater);
}
@Bean
@ConditionalOnMissingBean
DocumentationUpdater documentationUpdater(ProjectGitHandler projectGitHandler,
ReleaserProperties properties, TemplateGenerator templateGenerator,
@Autowired(
required = false) List<CustomProjectDocumentationUpdater> customProjectDocumentationUpdaters) {
return new DocumentationUpdater(projectGitHandler, properties, templateGenerator,
customProjectDocumentationUpdaters != null
? customProjectDocumentationUpdaters : new ArrayList<>());
}
@Bean
@ConditionalOnMissingBean
Releaser releaser(ProjectPomUpdater projectPomUpdater,
ProjectCommandExecutor projectCommandExecutor,
ProjectGitHandler projectGitHandler,
ProjectGitHubHandler projectGitHubHandler,
TemplateGenerator templateGenerator, GradleUpdater gradleUpdater,
SaganUpdater saganUpdater, DocumentationUpdater documentationUpdater,
PostReleaseActions postReleaseActions,
ReleaserProperties releaserProperties) {
return new Releaser(releaserProperties, projectPomUpdater, projectCommandExecutor,
projectGitHandler, projectGitHubHandler, templateGenerator, gradleUpdater,
saganUpdater, documentationUpdater, postReleaseActions);
}
@Bean
@ConditionalOnMissingBean
ReleaserPropertiesUpdater releaserPropertiesUpdater() {
return new ReleaserPropertiesUpdater();
}
@Bean
@ConditionalOnMissingBean
Parser optionsParser(List<ReleaserTask> allTasks,
List<SingleProjectReleaserTask> singleProjectReleaserTasks,
ConfigurableApplicationContext context) {
return new OptionsParser(allTasks, singleProjectReleaserTasks, context);
}
}