From 72d7033af52e7fb7946167e1adec26568824752c Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Mon, 10 Mar 2025 13:58:29 +0530 Subject: [PATCH] chore(dependency): upgrade spring boot from 2.7.x to 3.0.x and spring cloud from 2021.0.x to 2022.0.x Upgrading spring boot 2.7.18 to 3.0.13 and spring cloud 2021.0.8 to 2022.0.5. Spring cloud release 2022.0.x is compatible with spring boot 3.0.x. https://github.com/spring-cloud/spring-cloud-release/wiki/Supported-Versions#supported-releases Removing bean of WebSecurityConfigurerAdapter, as in spring security 6.0 it is no more required. https://github.com/spring-projects/spring-security/pull/11923 https://www.baeldung.com/spring-security-migrate-5-to-6#2-websecurityconfigureradapter =============================================================================================== refactor(dependency): replace javax with jakarta during upgrade of spring boot 3.0.x Spring Boot 3.0 has migrated from Java EE to Jakarta EE APIs for all dependencies. https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes#third-party-library-upgrades So, replacing the imports with `javax` to `jakarta`. =============================================================================================== refactor(dependency): migrate rxjava to rxjava3 during upgrade of spring boot 3.0.x Spring boot 3.x deprecated and removed rxjava, and rxjava3 has been added. So, update the dependency. https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide#rxjava And refactored the code to accomodate changes required by rxjava2 and rxjava3 following the changelogs. https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0 https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-3.0 ================================================================================================ refactor(util): replace SocketUtils with TestSocketUtils during upgrade of spring boot 3.0.x `org.springframework.util.SocketUtils` has been deprecated in spring framework 5.3.x and removed from 6.0. `org.springframework.test.util.TestSocketUtils` has been introduced as a replacement of `SocketUtils`. https://github.com/spring-projects/spring-framework/issues/28052 https://github.com/spring-projects/spring-framework/issues/28210 --- halyard-config/halyard-config.gradle | 2 +- .../config/error/v1/ConfigNotFoundException.java | 2 +- .../v1/persistentStorage/OraclePersistentStore.java | 4 ++-- halyard-core/halyard-core.gradle | 2 +- .../halyard/core/error/v1/HalException.java | 2 +- .../halyard/core/job/v1/JobExecutorLocal.java | 9 ++++----- halyard-deploy/halyard-deploy.gradle | 2 +- .../distributed/google/GoogleProviderUtils.java | 4 ++-- .../spinnaker/halyard/config/v1/SecurityConfig.java | 12 +++++++----- .../halyard/errors/v1/HalconfigExceptionHandler.java | 2 +- 10 files changed, 21 insertions(+), 20 deletions(-) diff --git a/halyard-config/halyard-config.gradle b/halyard-config/halyard-config.gradle index 20cd9b1586..9cf7e711fc 100644 --- a/halyard-config/halyard-config.gradle +++ b/halyard-config/halyard-config.gradle @@ -40,7 +40,7 @@ dependencies { implementation 'com.jcraft:jsch' implementation 'de.huxhorn.sulky:de.huxhorn.sulky.ulid' implementation "net.logstash.logback:logstash-logback-encoder" - implementation "javax.validation:validation-api" + implementation "jakarta.validation:jakarta.validation-api" // TODO: add clouddriverDCOS once that's merged implementation project(':halyard-core') diff --git a/halyard-config/src/main/java/com/netflix/spinnaker/halyard/config/error/v1/ConfigNotFoundException.java b/halyard-config/src/main/java/com/netflix/spinnaker/halyard/config/error/v1/ConfigNotFoundException.java index 71e443f91a..9aed2c632e 100644 --- a/halyard-config/src/main/java/com/netflix/spinnaker/halyard/config/error/v1/ConfigNotFoundException.java +++ b/halyard-config/src/main/java/com/netflix/spinnaker/halyard/config/error/v1/ConfigNotFoundException.java @@ -19,7 +19,7 @@ import com.netflix.spinnaker.halyard.core.error.v1.HalException; import com.netflix.spinnaker.halyard.core.problem.v1.Problem; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import lombok.Getter; /** diff --git a/halyard-config/src/main/java/com/netflix/spinnaker/halyard/config/model/v1/persistentStorage/OraclePersistentStore.java b/halyard-config/src/main/java/com/netflix/spinnaker/halyard/config/model/v1/persistentStorage/OraclePersistentStore.java index aa185f7f3b..1c43e7d54a 100644 --- a/halyard-config/src/main/java/com/netflix/spinnaker/halyard/config/model/v1/persistentStorage/OraclePersistentStore.java +++ b/halyard-config/src/main/java/com/netflix/spinnaker/halyard/config/model/v1/persistentStorage/OraclePersistentStore.java @@ -14,8 +14,8 @@ import com.netflix.spinnaker.halyard.config.model.v1.node.PersistentStore; import com.netflix.spinnaker.halyard.config.model.v1.node.Secret; import com.netflix.spinnaker.halyard.config.model.v1.node.SecretFile; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/halyard-core/halyard-core.gradle b/halyard-core/halyard-core.gradle index dd1bae32ad..ba752a52da 100644 --- a/halyard-core/halyard-core.gradle +++ b/halyard-core/halyard-core.gradle @@ -15,7 +15,7 @@ dependencies { implementation 'org.apache.commons:commons-exec' implementation 'org.apache.commons:commons-compress:1.20' implementation 'commons-io:commons-io' - implementation 'io.reactivex:rxjava' + implementation 'io.reactivex.rxjava3:rxjava' implementation 'com.hubspot.jinjava:jinjava:2.2.3' implementation 'org.spockframework:spock-spring' implementation 'org.yaml:snakeyaml:1.24' diff --git a/halyard-core/src/main/java/com/netflix/spinnaker/halyard/core/error/v1/HalException.java b/halyard-core/src/main/java/com/netflix/spinnaker/halyard/core/error/v1/HalException.java index bab1624bcb..e1b6d21b91 100644 --- a/halyard-core/src/main/java/com/netflix/spinnaker/halyard/core/error/v1/HalException.java +++ b/halyard-core/src/main/java/com/netflix/spinnaker/halyard/core/error/v1/HalException.java @@ -20,10 +20,10 @@ import com.netflix.spinnaker.halyard.core.problem.v1.Problem; import com.netflix.spinnaker.halyard.core.problem.v1.ProblemBuilder; import com.netflix.spinnaker.halyard.core.problem.v1.ProblemSet; +import jakarta.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import javax.servlet.http.HttpServletResponse; import lombok.Getter; /** This is the exception class that needs to be thrown by all validators. */ diff --git a/halyard-core/src/main/java/com/netflix/spinnaker/halyard/core/job/v1/JobExecutorLocal.java b/halyard-core/src/main/java/com/netflix/spinnaker/halyard/core/job/v1/JobExecutorLocal.java index af77d79418..30f2add124 100644 --- a/halyard-core/src/main/java/com/netflix/spinnaker/halyard/core/job/v1/JobExecutorLocal.java +++ b/halyard-core/src/main/java/com/netflix/spinnaker/halyard/core/job/v1/JobExecutorLocal.java @@ -17,6 +17,8 @@ package com.netflix.spinnaker.halyard.core.job.v1; +import io.reactivex.rxjava3.core.Scheduler; +import io.reactivex.rxjava3.schedulers.Schedulers; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; @@ -26,9 +28,6 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.exec.*; -import rx.Scheduler; -import rx.functions.Action0; -import rx.schedulers.Schedulers; @Slf4j public class JobExecutorLocal extends JobExecutor { @@ -64,9 +63,9 @@ public String startJob( scheduler .createWorker() .schedule( - new Action0() { + new Runnable() { @Override - public void call() { + public void run() { PumpStreamHandler pumpStreamHandler = new PumpStreamHandler(stdOut, stdErr, stdIn); CommandLine commandLine; diff --git a/halyard-deploy/halyard-deploy.gradle b/halyard-deploy/halyard-deploy.gradle index 3368309c22..d3c6107132 100644 --- a/halyard-deploy/halyard-deploy.gradle +++ b/halyard-deploy/halyard-deploy.gradle @@ -29,7 +29,7 @@ dependencies { implementation project(':halyard-backup') testImplementation 'org.spockframework:spock-core' - testImplementation 'org.springframework:spring-test' + implementation 'org.springframework:spring-test' testRuntimeOnly 'net.bytebuddy:byte-buddy' testRuntimeOnly 'org.objenesis:objenesis' } diff --git a/halyard-deploy/src/main/java/com/netflix/spinnaker/halyard/deploy/spinnaker/v1/service/distributed/google/GoogleProviderUtils.java b/halyard-deploy/src/main/java/com/netflix/spinnaker/halyard/deploy/spinnaker/v1/service/distributed/google/GoogleProviderUtils.java index 1d78ec13b0..1781c63b18 100644 --- a/halyard-deploy/src/main/java/com/netflix/spinnaker/halyard/deploy/spinnaker/v1/service/distributed/google/GoogleProviderUtils.java +++ b/halyard-deploy/src/main/java/com/netflix/spinnaker/halyard/deploy/spinnaker/v1/service/distributed/google/GoogleProviderUtils.java @@ -58,7 +58,7 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.http.client.utils.URIBuilder; -import org.springframework.util.SocketUtils; +import org.springframework.test.util.TestSocketUtils; @Slf4j class GoogleProviderUtils { @@ -188,7 +188,7 @@ private static Proxy openSshTunnel(String ip, int port, String keyFile) } } - int localPort = SocketUtils.findAvailableTcpPort(); + int localPort = TestSocketUtils.findAvailableTcpPort(); command.clear(); command.add("ssh"); diff --git a/halyard-web/src/main/java/com/netflix/spinnaker/halyard/config/v1/SecurityConfig.java b/halyard-web/src/main/java/com/netflix/spinnaker/halyard/config/v1/SecurityConfig.java index 36bd595a7d..ab93552a8f 100644 --- a/halyard-web/src/main/java/com/netflix/spinnaker/halyard/config/v1/SecurityConfig.java +++ b/halyard-web/src/main/java/com/netflix/spinnaker/halyard/config/v1/SecurityConfig.java @@ -16,15 +16,17 @@ package com.netflix.spinnaker.halyard.config.v1; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.web.SecurityFilterChain; @Configuration -public class SecurityConfig extends WebSecurityConfigurerAdapter { +public class SecurityConfig { - @Override - public void configure(HttpSecurity http) throws Exception { - http.csrf().disable().authorizeRequests().anyRequest().permitAll(); + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http.authorizeHttpRequests().anyRequest().permitAll().and().csrf().disable(); + return http.build(); } } diff --git a/halyard-web/src/main/java/com/netflix/spinnaker/halyard/errors/v1/HalconfigExceptionHandler.java b/halyard-web/src/main/java/com/netflix/spinnaker/halyard/errors/v1/HalconfigExceptionHandler.java index 3431e57412..003c93f61d 100644 --- a/halyard-web/src/main/java/com/netflix/spinnaker/halyard/errors/v1/HalconfigExceptionHandler.java +++ b/halyard-web/src/main/java/com/netflix/spinnaker/halyard/errors/v1/HalconfigExceptionHandler.java @@ -18,7 +18,7 @@ import com.netflix.spinnaker.halyard.core.DaemonResponse; import com.netflix.spinnaker.halyard.core.error.v1.HalException; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody;