spring-projects-experimental / spring-boot-migrator

Spring Boot Migrator (SBM) is a tool for automated code migrations to upgrade or migrate to Spring Boot
Apache License 2.0
426 stars 87 forks source link

Add Windows build profile #1011

Open ammachado opened 7 months ago

ammachado commented 7 months ago

Add a new windows profile to the maven build to simulate Windows line endings on a Linux/macOS machine.

Build the build is still failing, even considering the work done on #958, #965 and #969.

Run mvn -Pwindows clean install to verify the failing tests.

fabapp2 commented 7 months ago

Hi @ammachado Thank you for keeping up the great work. 🚀

What doesn't work when you build the current main branch under Windows? "It works on my machine" 😬

image
ammachado commented 7 months ago

Hi @fabapp2, thanks for looking into this.

I'm using a Windows VM on my macOS machine, and I'm running the arm64 version of Windows 11 22H2 (Microsoft Windows [Version 10.0.22621.2715]), using Microsoft Build of OpenJDK with Hotspot 17.0.9+8:

openjdk version "17.0.9" 2023-10-17 LTS
OpenJDK Runtime Environment Microsoft-8552009 (build 17.0.9+8-LTS)
OpenJDK 64-Bit Server VM Microsoft-8552009 (build 17.0.9+8-LTS, mixed mode)

I had to make two small changes to get the project running: RocksDB is not supported on Windows Arm64 (no substitute) and Snappy must be upgraded to work on Windows Amr64:

diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/MavenPomCacheProvider.java b/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/MavenPomCacheProvider.java
index 1036ff29..095dbbb6 100644
--- a/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/MavenPomCacheProvider.java
+++ b/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/MavenPomCacheProvider.java
@@ -31,7 +31,7 @@ public class MavenPomCacheProvider {
        private final MavenPomCache pomCache;

        public MavenPomCacheProvider(Optional<MavenPomCache> mavenPomCacheProvider) {
-               this.pomCache = mavenPomCacheProvider.orElseGet(this::rocksdb);
+               this.pomCache = mavenPomCacheProvider.orElseGet(org.openrewrite.maven.cache.InMemoryMavenPomCache::new);
        }

        @NotNull
diff --git a/pom.xml b/pom.xml
index 17874499..ec6002c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -266,6 +266,12 @@
                 <artifactId>spring-asciidoctor-backends</artifactId>
                 <version>${spring-asciidoctor-backends.version}</version>
             </dependency>
+
+            <dependency>
+                <groupId>org.xerial.snappy</groupId>
+                <artifactId>snappy-java</artifactId>
+                <version>1.1.10.5</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
     <dependencies>

And this is what I get:

[INFO] Results:
[INFO]
[ERROR] Errors:
[ERROR]   RemovedPropertyTest.removeProperties:48 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   RemovedPropertyTest.removeProperties:48 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   RemovedPropertyTest.removeProperties:48 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   RemovedPropertyTest.removeProperties:48 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   RemovedPropertyTest.removeProperties:48 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   RemovedPropertyTest.removeProperties:48 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   RemovedPropertyTest.removeYaml:37 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   RemovedPropertyTest.removeYaml:37 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   RemovedPropertyTest.removeYaml:37 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   RemovedPropertyTest.removeYaml:37 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   RemovedPropertyTest.removeYaml:37 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   RemovedPropertyTest.removeYaml:37 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   UpdatePropertyTest.runPropertiesTestsDataSource:49 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   UpdatePropertyTest.runPropertiesTestsDataSource:49 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   UpdatePropertyTest.runPropertiesTestsDataSource:49 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   UpdatePropertyTest.runPropertiesTestsDataSource:49 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   UpdatePropertyTest.runYamlTestsData:37 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   UpdatePropertyTest.runYamlTestsData:37 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   UpdatePropertyTest.runYamlTestsData:37 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[ERROR]   UpdatePropertyTest.runYamlTestsData:37 » ArrayIndexOutOfBounds Index 1 out of bounds for length 1
[INFO]
[ERROR] Tests run: 238, Failures: 0, Errors: 20, Skipped: 4
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for spring-boot-migrator 0.15.2-SNAPSHOT:
[INFO]
[INFO] spring-boot-migrator ............................... SUCCESS [  1.385 s]
[INFO] test-helper ........................................ SUCCESS [  1.721 s]
[INFO] sbm-openrewrite .................................... SUCCESS [ 50.446 s]
[INFO] sbm-utils .......................................... SUCCESS [  0.160 s]
[INFO] sbm-core ........................................... SUCCESS [02:35 min]
[INFO] recipe-test-support ................................ SUCCESS [  0.181 s]
[INFO] sbm-support-boot ................................... SUCCESS [01:07 min]
[INFO] sbm-recipes-spring-framework ....................... SUCCESS [ 20.216 s]
[INFO] sbm-support-jee .................................... SUCCESS [ 15.997 s]
[INFO] sbm-recipes-jee-to-boot ............................ SUCCESS [02:04 min]
[INFO] sbm-recipes-mule-to-boot ........................... SUCCESS [02:02 min]
[INFO] sbm-recipes-spring-cloud ........................... SUCCESS [ 32.383 s]
[INFO] openrewrite-spring-recipes ......................... SUCCESS [ 16.272 s]
[INFO] sbm-support-weblogic ............................... SUCCESS [ 17.658 s]
[INFO] sbm-recipes-boot-upgrade ........................... FAILURE [03:31 min]
[INFO] spring-shell ....................................... SKIPPED
[INFO] spring-boot-upgrade ................................ SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  13:58 min
[INFO] Finished at: 2023-11-23T15:47:23-08:00
[INFO] ------------------------------------------------------------------------

This fixes the problem:

diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/config/ConfigRecipeTestHelper.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/config/ConfigRecipeTestHelper.java
index 9dc167e6..1901a597 100644
--- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/config/ConfigRecipeTestHelper.java
+++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/config/ConfigRecipeTestHelper.java
@@ -62,9 +62,9 @@ public class ConfigRecipeTestHelper {
     public static Pair<String, String> provideIO(String inputFilePath) throws IOException {

         String fileContent = Files.readString(Path.of(inputFilePath));
-        String[] k = fileContent.split("expected:.*" + LS);
+        String[] k = fileContent.split("expected:.*" + System.lineSeparator());

-        return new ImmutablePair<>(k[0].replaceAll("input:.*" + LS, ""), k[1]);
+        return new ImmutablePair<>(k[0].replaceAll("input:.*" + System.lineSeparator(), ""), k[1]);
     }