diff --git a/docs/pom.xml b/docs/pom.xml index 4422b0ac..fe59b962 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud.internal releaser-parent - 3.0.0-SNAPSHOT + 2.0.0-SNAPSHOT releaser-docs pom diff --git a/pom.xml b/pom.xml index 85f63bf5..03e024de 100644 --- a/pom.xml +++ b/pom.xml @@ -6,13 +6,13 @@ org.springframework.cloud.internal releaser-parent - 3.0.0-SNAPSHOT + 2.0.0-SNAPSHOT pom org.springframework.cloud spring-cloud-build - 4.0.3 + 3.1.8 @@ -28,9 +28,9 @@ UTF-8 - 17 + 11 - 2022.0.3 + 2021.0.8 1.315 0.0.9 diff --git a/projects/pom.xml b/projects/pom.xml index 26896f47..d876de7e 100644 --- a/projects/pom.xml +++ b/projects/pom.xml @@ -5,13 +5,13 @@ 4.0.0 releaser-projects - 3.0.0-SNAPSHOT + 2.0.0-SNAPSHOT pom org.springframework.cloud.internal releaser-parent - 3.0.0-SNAPSHOT + 2.0.0-SNAPSHOT .. diff --git a/projects/spring-cloud-stream/pom.xml b/projects/spring-cloud-stream/pom.xml index ac0baaf0..0589f99d 100644 --- a/projects/spring-cloud-stream/pom.xml +++ b/projects/spring-cloud-stream/pom.xml @@ -10,13 +10,13 @@ org.springframework.cloud.internal releaser-projects - 3.0.0-SNAPSHOT + 2.0.0-SNAPSHOT .. UTF-8 - 17 + 11 diff --git a/projects/spring-cloud-stream/src/main/java/releaser/cloud/buildsystem/SpringCloudStreamMavenBomParser.java b/projects/spring-cloud-stream/src/main/java/releaser/cloud/buildsystem/SpringCloudStreamMavenBomParser.java index 27756e44..6b42e6c9 100644 --- a/projects/spring-cloud-stream/src/main/java/releaser/cloud/buildsystem/SpringCloudStreamMavenBomParser.java +++ b/projects/spring-cloud-stream/src/main/java/releaser/cloud/buildsystem/SpringCloudStreamMavenBomParser.java @@ -138,30 +138,30 @@ class SpringCloudStreamMavenBomParser implements CustomBomParser { public Set setVersion(Set projects, String projectName, String version) { Set newProjects = new LinkedHashSet<>(projects); switch (projectName) { - case SPRING_BOOT: - case BOOT_STARTER_ARTIFACT_ID: - case BOOT_STARTER_PARENT_ARTIFACT_ID: - case BOOT_DEPENDENCIES_ARTIFACT_ID: - updateBootVersions(newProjects, version); - break; - case BUILD_ARTIFACT_ID: - case CLOUD_DEPENDENCIES_PARENT_ARTIFACT_ID: - updateBuildVersions(newProjects, version); - break; - case CLOUD_ARTIFACT_ID: - case CLOUD_DEPENDENCIES_ARTIFACT_ID: - case CLOUD_RELEASE_ARTIFACT_ID: - case CLOUD_STARTER_ARTIFACT_ID: - case CLOUD_STARTER_PARENT_ARTIFACT_ID: - updateSpringCloudVersions(newProjects, version); - break; - case STREAM_DEPS_ARTIFACT_ID: - case STREAM_STARTER_ARTIFACT_ID: - case STREAM_STARTER_BUILD_ARTIFACT_ID: - case STREAM_STARTER_PARENT_ARTIFACT_ID: - case STREAM_DOCS_ARTIFACT_ID: - updateStreamVersions(newProjects, version); - break; + case SPRING_BOOT: + case BOOT_STARTER_ARTIFACT_ID: + case BOOT_STARTER_PARENT_ARTIFACT_ID: + case BOOT_DEPENDENCIES_ARTIFACT_ID: + updateBootVersions(newProjects, version); + break; + case BUILD_ARTIFACT_ID: + case CLOUD_DEPENDENCIES_PARENT_ARTIFACT_ID: + updateBuildVersions(newProjects, version); + break; + case CLOUD_ARTIFACT_ID: + case CLOUD_DEPENDENCIES_ARTIFACT_ID: + case CLOUD_RELEASE_ARTIFACT_ID: + case CLOUD_STARTER_ARTIFACT_ID: + case CLOUD_STARTER_PARENT_ARTIFACT_ID: + updateSpringCloudVersions(newProjects, version); + break; + case STREAM_DEPS_ARTIFACT_ID: + case STREAM_STARTER_ARTIFACT_ID: + case STREAM_STARTER_BUILD_ARTIFACT_ID: + case STREAM_STARTER_PARENT_ARTIFACT_ID: + case STREAM_DOCS_ARTIFACT_ID: + updateStreamVersions(newProjects, version); + break; } return newProjects; } diff --git a/projects/spring-cloud/pom.xml b/projects/spring-cloud/pom.xml index 910c3b3a..fe172b5d 100644 --- a/projects/spring-cloud/pom.xml +++ b/projects/spring-cloud/pom.xml @@ -10,13 +10,13 @@ org.springframework.cloud.internal releaser-projects - 3.0.0-SNAPSHOT + 2.0.0-SNAPSHOT .. UTF-8 - 17 + 11 diff --git a/projects/spring-cloud/src/main/java/releaser/cloud/buildsystem/SpringCloudMavenBomParser.java b/projects/spring-cloud/src/main/java/releaser/cloud/buildsystem/SpringCloudMavenBomParser.java index 349704ca..48c9af0d 100644 --- a/projects/spring-cloud/src/main/java/releaser/cloud/buildsystem/SpringCloudMavenBomParser.java +++ b/projects/spring-cloud/src/main/java/releaser/cloud/buildsystem/SpringCloudMavenBomParser.java @@ -139,31 +139,31 @@ class SpringCloudMavenBomParser implements CustomBomParser { public Set setVersion(Set projects, String projectName, String version) { Set newProjects = new LinkedHashSet<>(projects); switch (projectName) { - case SPRING_BOOT: - case BOOT_STARTER_ARTIFACT_ID: - case BOOT_STARTER_PARENT_ARTIFACT_ID: - case BOOT_DEPENDENCIES_ARTIFACT_ID: - updateBootVersions(newProjects, version); - break; - case BUILD_ARTIFACT_ID: - case CLOUD_DEPENDENCIES_PARENT_ARTIFACT_ID: - updateBuildVersions(newProjects, version); - break; - case CLOUD_ARTIFACT_ID: - case CLOUD_DEPENDENCIES_ARTIFACT_ID: - case CLOUD_RELEASE_ARTIFACT_ID: - case CLOUD_STARTER_ARTIFACT_ID: - case CLOUD_STARTER_PARENT_ARTIFACT_ID: - case CLOUD_STARTER_BUILD_ARTIFACT_ID: - updateSpringCloudVersions(newProjects, version); - break; - case STREAM_DEPS_ARTIFACT_ID: - case STREAM_STARTER_ARTIFACT_ID: - case STREAM_STARTER_BUILD_ARTIFACT_ID: - case STREAM_STARTER_PARENT_ARTIFACT_ID: - case STREAM_DOCS_ARTIFACT_ID: - updateStreamVersions(newProjects, version); - break; + case SPRING_BOOT: + case BOOT_STARTER_ARTIFACT_ID: + case BOOT_STARTER_PARENT_ARTIFACT_ID: + case BOOT_DEPENDENCIES_ARTIFACT_ID: + updateBootVersions(newProjects, version); + break; + case BUILD_ARTIFACT_ID: + case CLOUD_DEPENDENCIES_PARENT_ARTIFACT_ID: + updateBuildVersions(newProjects, version); + break; + case CLOUD_ARTIFACT_ID: + case CLOUD_DEPENDENCIES_ARTIFACT_ID: + case CLOUD_RELEASE_ARTIFACT_ID: + case CLOUD_STARTER_ARTIFACT_ID: + case CLOUD_STARTER_PARENT_ARTIFACT_ID: + case CLOUD_STARTER_BUILD_ARTIFACT_ID: + updateSpringCloudVersions(newProjects, version); + break; + case STREAM_DEPS_ARTIFACT_ID: + case STREAM_STARTER_ARTIFACT_ID: + case STREAM_STARTER_BUILD_ARTIFACT_ID: + case STREAM_STARTER_PARENT_ARTIFACT_ID: + case STREAM_DOCS_ARTIFACT_ID: + updateStreamVersions(newProjects, version); + break; } return newProjects; } diff --git a/releaser-core/pom.xml b/releaser-core/pom.xml index 968d34e6..673be66d 100644 --- a/releaser-core/pom.xml +++ b/releaser-core/pom.xml @@ -10,7 +10,7 @@ org.springframework.cloud.internal releaser-parent - 3.0.0-SNAPSHOT + 2.0.0-SNAPSHOT .. diff --git a/releaser-core/src/main/java/releaser/internal/ReleaserProperties.java b/releaser-core/src/main/java/releaser/internal/ReleaserProperties.java index b61310be..25f7e237 100644 --- a/releaser-core/src/main/java/releaser/internal/ReleaserProperties.java +++ b/releaser-core/src/main/java/releaser/internal/ReleaserProperties.java @@ -27,7 +27,8 @@ import java.util.List; import java.util.Map; import java.util.StringJoiner; -import jakarta.validation.constraints.NotBlank; +import javax.validation.constraints.NotBlank; + import org.apache.commons.lang.SerializationUtils; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/releaser-spring/pom.xml b/releaser-spring/pom.xml index cec83d93..0e1d0499 100644 --- a/releaser-spring/pom.xml +++ b/releaser-spring/pom.xml @@ -10,13 +10,13 @@ org.springframework.cloud.internal releaser-parent - 3.0.0-SNAPSHOT + 2.0.0-SNAPSHOT .. UTF-8 - 17 + 11 diff --git a/releaser-spring/src/main/java/releaser/internal/spring/BatchConfiguration.java b/releaser-spring/src/main/java/releaser/internal/spring/BatchConfiguration.java index f2407e9b..0bc61646 100644 --- a/releaser-spring/src/main/java/releaser/internal/spring/BatchConfiguration.java +++ b/releaser-spring/src/main/java/releaser/internal/spring/BatchConfiguration.java @@ -16,15 +16,24 @@ package releaser.internal.spring; +import javax.sql.DataSource; + import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; import releaser.internal.ReleaserProperties; +import org.springframework.batch.core.configuration.annotation.BatchConfigurer; +import org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer; +import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.explore.JobExplorer; +import org.springframework.batch.core.explore.support.JobExplorerFactoryBean; import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.dao.Jackson2ExecutionContextStringSerializer; +import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; @@ -34,6 +43,7 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.transaction.PlatformTransactionManager; @Configuration +@EnableBatchProcessing class BatchConfiguration { @Bean @@ -66,11 +76,11 @@ class BatchConfiguration { @Bean @ConditionalOnMissingBean - FlowRunner flowRunner(JobRepository jobRepository, PlatformTransactionManager manager, + FlowRunner flowRunner(StepBuilderFactory stepBuilderFactory, JobBuilderFactory jobBuilderFactory, ProjectsToRunFactory projectsToRunFactory, JobLauncher jobLauncher, FlowRunnerTaskExecutorSupplier flowRunnerTaskExecutorSupplier, ConfigurableApplicationContext context, ReleaserProperties releaserProperties, BuildReportHandler reportHandler) { - return new SpringBatchFlowRunner(jobRepository, manager, projectsToRunFactory, jobLauncher, + return new SpringBatchFlowRunner(stepBuilderFactory, jobBuilderFactory, projectsToRunFactory, jobLauncher, flowRunnerTaskExecutorSupplier, context, releaserProperties, reportHandler); } @@ -85,28 +95,32 @@ class BatchConfiguration { serializer.setObjectMapper(objectMapper); return serializer; } - /* - * // Needed to add this to serialize the exceptions - * - * @Bean BatchConfigurer myBatchConfigurer(DataSource dataSource, - * Jackson2ExecutionContextStringSerializer - * myJackson2ExecutionContextStringSerializer, PlatformTransactionManager - * transactionManager) { return new DefaultBatchConfigurer(dataSource) { - * - * @Override protected JobExplorer createJobExplorer() throws Exception { - * JobExplorerFactoryBean jobExplorerFactoryBean = new JobExplorerFactoryBean(); - * jobExplorerFactoryBean.setDataSource(dataSource); - * jobExplorerFactoryBean.setSerializer(myJackson2ExecutionContextStringSerializer); - * jobExplorerFactoryBean.afterPropertiesSet(); return - * jobExplorerFactoryBean.getObject(); } - * - * @Override protected JobRepository createJobRepository() throws Exception { - * JobRepositoryFactoryBean jobRepositoryFactoryBean = new JobRepositoryFactoryBean(); - * jobRepositoryFactoryBean.setDataSource(dataSource); - * jobRepositoryFactoryBean.setSerializer(myJackson2ExecutionContextStringSerializer); - * jobRepositoryFactoryBean.setTransactionManager(transactionManager); - * jobRepositoryFactoryBean.afterPropertiesSet(); return - * jobRepositoryFactoryBean.getObject(); } }; } - */ + + // Needed to add this to serialize the exceptions + @Bean + BatchConfigurer myBatchConfigurer(DataSource dataSource, + Jackson2ExecutionContextStringSerializer myJackson2ExecutionContextStringSerializer, + PlatformTransactionManager transactionManager) { + return new DefaultBatchConfigurer(dataSource) { + @Override + protected JobExplorer createJobExplorer() throws Exception { + JobExplorerFactoryBean jobExplorerFactoryBean = new JobExplorerFactoryBean(); + jobExplorerFactoryBean.setDataSource(dataSource); + jobExplorerFactoryBean.setSerializer(myJackson2ExecutionContextStringSerializer); + jobExplorerFactoryBean.afterPropertiesSet(); + return jobExplorerFactoryBean.getObject(); + } + + @Override + protected JobRepository createJobRepository() throws Exception { + JobRepositoryFactoryBean jobRepositoryFactoryBean = new JobRepositoryFactoryBean(); + jobRepositoryFactoryBean.setDataSource(dataSource); + jobRepositoryFactoryBean.setSerializer(myJackson2ExecutionContextStringSerializer); + jobRepositoryFactoryBean.setTransactionManager(transactionManager); + jobRepositoryFactoryBean.afterPropertiesSet(); + return jobRepositoryFactoryBean.getObject(); + } + }; + } } diff --git a/releaser-spring/src/main/java/releaser/internal/spring/SpringBatchBuildReportHandler.java b/releaser-spring/src/main/java/releaser/internal/spring/SpringBatchBuildReportHandler.java index 62afaf1f..105776c8 100644 --- a/releaser-spring/src/main/java/releaser/internal/spring/SpringBatchBuildReportHandler.java +++ b/releaser-spring/src/main/java/releaser/internal/spring/SpringBatchBuildReportHandler.java @@ -16,8 +16,7 @@ package releaser.internal.spring; -import java.time.ZoneOffset; -import java.time.format.DateTimeFormatterBuilder; +import java.text.SimpleDateFormat; import java.time.temporal.ChronoUnit; import java.util.Arrays; import java.util.Comparator; @@ -62,10 +61,8 @@ class SpringBatchBuildReportHandler implements BuildReportHandler { private List buildTable(List stepContexts) { return stepContexts.stream().map(step -> { - String date = step.getStartTime() - .format(new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd HH:mm:ss.SSS").toFormatter()); - long millis = ChronoUnit.MILLIS.between(step.getStartTime().toInstant(ZoneOffset.UTC), - step.getEndTime().toInstant(ZoneOffset.UTC)); + String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(step.getStartTime()); + long millis = ChronoUnit.MILLIS.between(step.getStartTime().toInstant(), step.getEndTime().toInstant()); ExecutionContext context = step.getExecutionContext(); ExecutionResultReport entity = (ExecutionResultReport) context.get("entity"); if (entity == null) { diff --git a/releaser-spring/src/main/java/releaser/internal/spring/SpringBatchFlowRunner.java b/releaser-spring/src/main/java/releaser/internal/spring/SpringBatchFlowRunner.java index 1341beff..20652de9 100644 --- a/releaser-spring/src/main/java/releaser/internal/spring/SpringBatchFlowRunner.java +++ b/releaser-spring/src/main/java/releaser/internal/spring/SpringBatchFlowRunner.java @@ -50,6 +50,8 @@ import org.springframework.batch.core.Step; import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.StepExecutionListener; import org.springframework.batch.core.UnexpectedJobExecutionException; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.job.builder.FlowBuilder; import org.springframework.batch.core.job.builder.FlowJobBuilder; import org.springframework.batch.core.job.builder.JobBuilder; @@ -57,14 +59,11 @@ import org.springframework.batch.core.job.builder.JobFlowBuilder; import org.springframework.batch.core.job.flow.Flow; import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.core.listener.StepExecutionListenerSupport; -import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.core.step.builder.StepBuilder; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.DisposableBean; import org.springframework.boot.SpringApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.task.TaskExecutor; -import org.springframework.transaction.PlatformTransactionManager; class SpringBatchFlowRunner implements FlowRunner, Closeable { @@ -74,9 +73,9 @@ class SpringBatchFlowRunner implements FlowRunner, Closeable { private final ConsoleInputStepSkipper stepSkipper; - private final JobRepository jobRepository; + private final StepBuilderFactory stepBuilderFactory; - private final PlatformTransactionManager manager; + private final JobBuilderFactory jobBuilderFactory; private final ProjectsToRunFactory projectsToRunFactory; @@ -90,12 +89,12 @@ class SpringBatchFlowRunner implements FlowRunner, Closeable { private final ReleaserProperties releaserProperties; - SpringBatchFlowRunner(JobRepository jobRepository, PlatformTransactionManager manager, + SpringBatchFlowRunner(StepBuilderFactory stepBuilderFactory, JobBuilderFactory jobBuilderFactory, ProjectsToRunFactory projectsToRunFactory, JobLauncher jobLauncher, FlowRunnerTaskExecutorSupplier flowRunnerTaskExecutorSupplier, ConfigurableApplicationContext context, ReleaserProperties releaserProperties, BuildReportHandler reportHandler) { - this.jobRepository = jobRepository; - this.manager = manager; + this.stepBuilderFactory = stepBuilderFactory; + this.jobBuilderFactory = jobBuilderFactory; this.projectsToRunFactory = projectsToRunFactory; this.jobLauncher = jobLauncher; this.flowRunnerTaskExecutorSupplier = flowRunnerTaskExecutorSupplier; @@ -111,7 +110,7 @@ class SpringBatchFlowRunner implements FlowRunner, Closeable { } private Step createStep(ReleaserTask releaserTask, NamedArgumentsSupplier argsSupplier) { - return new StepBuilder(argsSupplier.projectName + "_" + releaserTask.name(), jobRepository) + return this.stepBuilderFactory.get(argsSupplier.projectName + "_" + releaserTask.name()) .tasklet((contribution, chunkContext) -> { Arguments args = argsSupplier.get(); FlowRunner.Decision decision = beforeTask(args.options, args.properties, releaserTask); @@ -139,7 +138,7 @@ class SpringBatchFlowRunner implements FlowRunner, Closeable { log.info("Skipping step [{}]", releaserTask.name()); } return RepeatStatus.FINISHED; - }, this.manager).listener(releaserListener(argsSupplier, releaserTask)).build(); + }).listener(releaserListener(argsSupplier, releaserTask)).build(); } private List addExceptionToErrors(List errors, RuntimeException exception) { @@ -305,7 +304,7 @@ class SpringBatchFlowRunner implements FlowRunner, Closeable { } private Job buildJobForFlows(Iterator flowsIterator) { - JobBuilder release = new JobBuilder("release_" + System.currentTimeMillis(), this.jobRepository); + JobBuilder release = this.jobBuilderFactory.get("release_" + System.currentTimeMillis()); StuffToRun stuffToRun = flowsIterator.next(); Flow first = stuffToRun.flow; JobFlowBuilder start = release.start(first); @@ -363,7 +362,7 @@ class SpringBatchFlowRunner implements FlowRunner, Closeable { log.info("No release train post release tasks to run, will do nothing"); return ExecutionResult.success(); } - Job job = new JobBuilder(name, this.jobRepository).start(flow).build().build(); + Job job = this.jobBuilderFactory.get(name).start(flow).build().build(); return runJob(job); } @@ -512,14 +511,14 @@ class ConsoleInputStepSkipper { public boolean skipStep() { String input = chosenOption(); switch (input.toLowerCase()) { - case "s": - return true; - case "q": - reportHandler.reportBuildSummary(); - System.exit(SpringApplication.exit(this.context, () -> 0)); - return true; - default: - return false; + case "s": + return true; + case "q": + reportHandler.reportBuildSummary(); + System.exit(SpringApplication.exit(this.context, () -> 0)); + return true; + default: + return false; } } diff --git a/releaser-test/pom.xml b/releaser-test/pom.xml index 3ed9a482..86becaf2 100644 --- a/releaser-test/pom.xml +++ b/releaser-test/pom.xml @@ -10,13 +10,13 @@ org.springframework.cloud.internal releaser-parent - 3.0.0-SNAPSHOT + 2.0.0-SNAPSHOT .. UTF-8 - 17 + 11 diff --git a/releaser-test/src/main/java/releaser/internal/spring/AbstractSpringAcceptanceTests.java b/releaser-test/src/main/java/releaser/internal/spring/AbstractSpringAcceptanceTests.java index 62cc121f..0b73ffa8 100644 --- a/releaser-test/src/main/java/releaser/internal/spring/AbstractSpringAcceptanceTests.java +++ b/releaser-test/src/main/java/releaser/internal/spring/AbstractSpringAcceptanceTests.java @@ -50,14 +50,14 @@ import releaser.internal.sagan.Project; import releaser.internal.sagan.Release; import releaser.internal.tasks.ReleaserTask; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.batch.core.repository.JobRepository; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; -import org.springframework.transaction.PlatformTransactionManager; import org.springframework.util.FileSystemUtils; import static org.assertj.core.api.BDDAssertions.then; @@ -320,11 +320,11 @@ public abstract class AbstractSpringAcceptanceTests { public static class DefaultTestConfiguration { @Bean - SpringBatchFlowRunner mySpringBatchFlowRunner(JobRepository jobRepository, PlatformTransactionManager manager, - ProjectsToRunFactory projectsToRunFactory, JobLauncher jobLauncher, + SpringBatchFlowRunner mySpringBatchFlowRunner(StepBuilderFactory stepBuilderFactory, + JobBuilderFactory jobBuilderFactory, ProjectsToRunFactory projectsToRunFactory, JobLauncher jobLauncher, FlowRunnerTaskExecutorSupplier flowRunnerTaskExecutorSupplier, ConfigurableApplicationContext context, ReleaserProperties releaserProperties, BuildReportHandler reportHandler) { - return new SpringBatchFlowRunner(jobRepository, manager, projectsToRunFactory, jobLauncher, + return new SpringBatchFlowRunner(stepBuilderFactory, jobBuilderFactory, projectsToRunFactory, jobLauncher, flowRunnerTaskExecutorSupplier, context, releaserProperties, reportHandler) { @Override Decision decide(Options options, ReleaserTask task) {