This is an automated email from the ASF dual-hosted git repository.

songxiaosheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-spi-extensions.git


The following commit(s) were added to refs/heads/master by this push:
     new 92a9754  build: CI support unit test on Windows platform && Add 
Dependabot config (#309)
92a9754 is described below

commit 92a97540af22dac5f9c42b228023f3df2440abeb
Author: aofall <[email protected]>
AuthorDate: Wed Apr 17 15:34:07 2024 +0800

    build: CI support unit test on Windows platform && Add Dependabot config 
(#309)
    
    * Adjust CI workflow to support unit testing on Windows platform
    
    * Add Dependabot config
    
    * fix windows unit test failed
    
    * fix windows platform unit test failed
    
    * fix windows platform unit test failed
    
    * fix windows platform unit test failed
    
    * fix windows platform unit test failed
    
    * fix windows platform unit test failed
    
    * fix windows platform unit test failed
    
    * update license check
    
    * Upload surefire-reports if failure
    
    ---------
    
    Co-authored-by: xiaosheng <[email protected]>
---
 .github/dependabot.yaml                            |  15 ++
 .github/workflows/build-and-test-pr.yml            | 145 +++++++++----------
 .github/workflows/build-and-test-scheduled-3.1.yml | 149 +++++++++-----------
 .github/workflows/build-and-test-scheduled-3.2.yml | 149 +++++++++-----------
 .../workflows/build-and-test-scheduled-main.yml    | 136 +++++++-----------
 .github/workflows/release-test.yml                 | 153 +++++++++------------
 6 files changed, 325 insertions(+), 422 deletions(-)

diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml
new file mode 100644
index 0000000..805733a
--- /dev/null
+++ b/.github/dependabot.yaml
@@ -0,0 +1,15 @@
+version: 2
+updates:
+
+  - package-ecosystem: "maven"
+    directory: "/"
+    open-pull-requests-limit: 20
+    # Ignore major version updates
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-major"]
+    schedule:
+      interval: "weekly"
+      day: "monday"
+      time: "03:00"
+      timezone: "US/Eastern"
diff --git a/.github/workflows/build-and-test-pr.yml 
b/.github/workflows/build-and-test-pr.yml
index fd9a81a..8dcdee3 100644
--- a/.github/workflows/build-and-test-pr.yml
+++ b/.github/workflows/build-and-test-pr.yml
@@ -23,9 +23,10 @@ jobs:
     name: "Check License"
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v4
+      - name: Checkout
+        uses: actions/checkout@v4
       - name: Check License
-        uses: apache/skywalking-eyes@e1a02359b239bd28de3f6d35fdc870250fa513d5
+        uses: apache/[email protected]
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       - name: "Set up JDK 21"
@@ -34,7 +35,7 @@ jobs:
           distribution: 'zulu'
           java-version: 21
       - name: Restore Maven local repository cache
-        uses: actions/cache@v3
+        uses: actions/cache@v4
         with:
           path: ~/.m2/repository
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@@ -52,10 +53,17 @@ jobs:
   build-tools:
     name: "Build-tools"
     needs: check-license
-    runs-on: ubuntu-latest
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
+      fail-fast: false
     outputs:
       cache-key: ${{ steps.dubbo-build-tools.cache }}
     steps:
+      - name: Support long paths on Windows
+        if: ${{ startsWith( matrix.os, 'windows') }}
+        run: git config --system core.longpaths true
       - uses: actions/checkout@v4
         name: build tools
         with:
@@ -67,7 +75,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 21
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -95,7 +103,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 8
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -139,15 +147,17 @@ jobs:
           echo "dubbo-spi-extensions version: $REVISION"
   # Download dependencies Prepare for unit test
   unit-test-prepare:
-    name: "Preparation for Unit Test"
-    needs: [check-license, build-source]
-    runs-on: ubuntu-latest
+    name: "Preparation for Unit Test On ${{ matrix.os }}"
+    needs: [check-license]
+    runs-on: ${{ matrix.os }}
     strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
       fail-fast: false
     env:
       ZOOKEEPER_VERSION: 3.6.3
     steps:
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache zookeeper binary archive"
         id: "cache-zookeeper"
         with:
@@ -161,6 +171,20 @@ jobs:
         with:
           release: false  # support cache, see 
https://github.com/msys2/setup-msys2#context
       - name: "Download zookeeper binary archive in Linux OS"
+        if: ${{ startsWith( matrix.os, 'ubuntu') && 
steps.cache-zookeeper.outputs.cache-hit != 'true' }}
+        run: |
+          mkdir -p ${{ github.workspace }}/.tmp/zookeeper
+          wget -c https://archive.apache.org/dist/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c https://apache.website-solution.net/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://apache.stu.edu.tw/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://ftp.jaist.ac.jp/pub/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://apache.mirror.cdnetworks.com/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://mirror.apache-kr.org/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
+          echo "list the downloaded zookeeper binary archive"
+          ls -al ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
+      - name: "Download zookeeper binary archive in Windows OS"
+        if: ${{ startsWith( matrix.os, 'windows') && 
steps.cache-zookeeper.outputs.cache-hit != 'true' }}
+        shell: msys2 {0}
         run: |
           mkdir -p ${{ github.workspace }}/.tmp/zookeeper
           wget -c https://archive.apache.org/dist/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
@@ -171,7 +195,7 @@ jobs:
           wget -c http://mirror.apache-kr.org/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
           echo "list the downloaded zookeeper binary archive"
           ls -al ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache secret key"
         id: "cache-secret-cert"
         with:
@@ -188,17 +212,24 @@ jobs:
           cat rsa_public.pem
           echo "--- End Print Rsa Public Key"
   # Start unit test
-  unit-test-jdk8:
+  unit-test:
     needs: [check-license, build-source, unit-test-prepare]
-    name: "Unit Test On ubuntu-latest with JDK8"
-    runs-on: ubuntu-latest
+    name: "Unit Test ${{ matrix.os }} with JDK ${{ matrix.jdk }}"
+    runs-on: ${{ matrix.os }}
     strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
+        jdk: [ 8, 11 ]
       fail-fast: false
     env:
       DISABLE_FILE_SYSTEM_TEST: true
       CURRENT_ROLE: ${{ matrix.case-role }}
       DUBBO_DEFAULT_SERIALIZATION: fastjson2
     steps:
+      - name: Support Windows
+        if: ${{ startsWith( matrix.os, 'windows') }}
+        run: |
+          git config --system core.longpaths true
       - uses: actions/checkout@v4
         with:
           fetch-depth: 0
@@ -207,7 +238,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 8
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -215,7 +246,7 @@ jobs:
           restore-keys: |
             ${{ runner.os }}-maven-
             ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache zookeeper binary archive"
         id: "cache-zookeeper"
         with:
@@ -223,7 +254,7 @@ jobs:
           key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }}
           restore-keys: |
             zookeeper-${{ runner.os }}-
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache secret key"
         id: "cache-secret-cert"
         with:
@@ -243,78 +274,26 @@ jobs:
       #        run: |
       #          source ${{ github.workspace }}/.tmp/decrypted-sonarcloud-token
       #          ./mvnw --batch-mode --no-snapshot-updates -e 
--no-transfer-progress --fail-fast clean test verify 
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 
-Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache 
-Dsonar.projectKey=apache_dubbo -DtrimStackTrace=false 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip [...]
-      - name: "Test with Maven without SonarCloud Scan"
+      - name: "Test with Maven without SonarCloud Scan On Linux"
+        if: ${{ startsWith( matrix.os, 'linux') || startsWith( matrix.os, 
'ubuntu') }}
         timeout-minutes: 70
         run: |
-          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 -DtrimStackTrace=false 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip=false 
-Dcheckstyle_unix.skip=false -Drat.skip=false -Dmaven.javadoc.skip=true 
-DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper
-      - name: "Upload coverage result"
-        uses: actions/upload-artifact@v4
-        with:
-          name: coverage-result-jdk8
-          path: "**/target/site/**/jacoco.xml"
-  unit-test-jdk11:
-    needs: [ check-license, build-source, unit-test-prepare ]
-    name: "Unit Test On ubuntu-latest with JDK11"
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-    env:
-      DISABLE_FILE_SYSTEM_TEST: true
-      CURRENT_ROLE: ${{ matrix.case-role }}
-      DUBBO_DEFAULT_SERIALIZATION: fastjson2
-    steps:
-      - uses: actions/checkout@v4
-        with:
-          fetch-depth: 0
-      - name: "Set up JDK ${{ matrix.jdk }}"
-        uses: actions/setup-java@v4
-        with:
-          distribution: 'zulu'
-          java-version: 11
-      - uses: actions/cache@v3
-        name: "Cache local Maven repository"
-        with:
-          path: ~/.m2/repository
-          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ 
github.run_id }}
-          restore-keys: |
-            ${{ runner.os }}-maven-
-            ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-      - uses: actions/cache@v3
-        name: "Cache zookeeper binary archive"
-        id: "cache-zookeeper"
-        with:
-          path: ${{ github.workspace }}/.tmp/zookeeper
-          key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }}
-          restore-keys: |
-            zookeeper-${{ runner.os }}-
-      - uses: actions/cache@v3
-        name: "Cache secret key"
-        id: "cache-secret-cert"
-        with:
-          path: ${{ github.workspace }}/.tmp/rsa
-          key: secret-rsa-${{ runner.os }}-${{ github.run_id }}
-      #      - name: "Get sonarcloud token"
-      #        if: ${{ github.repository == 'apache/dubbo-spi-extensions' }}
-      #        run: |
-      #          curl "http://dubbo-vm.apache.org:8000/token?workflow_id=${{ 
github.run_id }}" -o ${{ github.workspace }}/.tmp/encrypted-sonarcloud-token
-      #          openssl rsautl -decrypt -in ${{ github.workspace 
}}/.tmp/encrypted-sonarcloud-token -out ${{ github.workspace 
}}/.tmp/decrypted-sonarcloud-token -inkey ${{ github.workspace 
}}/.tmp/rsa/rsa_private.pem
-      #      - name: "Test with Maven with SonarCloud Scan"
-      #        if: ${{ github.repository == 'apache/dubbo-spi-extensions' }}
-      #        timeout-minutes: 70
-      #        env:
-      #          # Needed to get some information about the pull request, if 
any
-      #          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      #        run: |
-      #          source ${{ github.workspace }}/.tmp/decrypted-sonarcloud-token
-      #          ./mvnw --batch-mode --no-snapshot-updates -e 
--no-transfer-progress --fail-fast clean test verify 
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 
-Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache 
-Dsonar.projectKey=apache_dubbo -DtrimStackTrace=false 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip [...]
-      - name: "Test with Maven without SonarCloud Scan"
+          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-D"maven.wagon.httpconnectionManager.ttlSeconds=120" -Pjacoco 
-DtrimStackTrace=false -D"maven.wagon.http.retryHandler.count=5" 
-DskipTests=false -DskipIntegrationTests=false -D"checkstyle.skip=false" 
-D"checkstyle_unix.skip=false" -D"rat.skip=false" -D"maven.javadoc.skip=true" 
-D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper"
+      - name: "Test with Maven without SonarCloud Scan On Windows"
+        if: ${{ startsWith( matrix.os, 'windows')  }}
         timeout-minutes: 70
         run: |
-          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 -DtrimStackTrace=false 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip=false 
-Dcheckstyle_unix.skip=false -Drat.skip=false -Dmaven.javadoc.skip=true 
-DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper
+          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-D"maven.wagon.httpconnectionManager.ttlSeconds=120" -Pjacoco 
-DtrimStackTrace=false -D"maven.wagon.http.retryHandler.count=5" 
-DskipTests=false -DskipIntegrationTests=false -D"checkstyle.skip=false" 
-D"checkstyle_unix.skip=true" -D"rat.skip=false" -D"maven.javadoc.skip=true" 
-D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper"
+      - name: "Upload surefire-reports if failure"
+        if: ${{ failure() }}
+        uses: actions/upload-artifact@v4
+        with:
+          name: surefire-reports-${{ matrix.os }}-${{ matrix.jdk }}
+          path: "**/target/surefire-reports/**"
       - name: "Upload coverage result"
         uses: actions/upload-artifact@v4
         with:
-          name: coverage-result-jdk11
+          name: coverage-result-${{ matrix.os }}-${{ matrix.jdk }}
           path: "**/target/site/**/jacoco.xml"
 
 #  error-code-inspecting:
@@ -335,7 +314,7 @@ jobs:
 #          distribution: 'zulu'
 #          java-version: 21
 #      - name: Restore Maven local repository cache
-#        uses: actions/cache@v3
+#        uses: actions/cache@v4
 #        with:
 #          path: ~/.m2/repository
 #          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/build-and-test-scheduled-3.1.yml 
b/.github/workflows/build-and-test-scheduled-3.1.yml
index 051d617..ec264fd 100644
--- a/.github/workflows/build-and-test-scheduled-3.1.yml
+++ b/.github/workflows/build-and-test-scheduled-3.1.yml
@@ -1,4 +1,4 @@
-name: Build and Test For PR
+name: Build and Test Scheduled On 3.1
 
 on:
   schedule:
@@ -26,9 +26,12 @@ jobs:
     name: "Check License"
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v4
+      - name: Checkout
+        uses: actions/checkout@v4
+        with:
+          ref: '3.1.0'
       - name: Check License
-        uses: apache/skywalking-eyes@e1a02359b239bd28de3f6d35fdc870250fa513d5
+        uses: apache/[email protected]
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       - name: "Set up JDK 21"
@@ -37,7 +40,7 @@ jobs:
           distribution: 'zulu'
           java-version: 21
       - name: Restore Maven local repository cache
-        uses: actions/cache@v3
+        uses: actions/cache@v4
         with:
           path: ~/.m2/repository
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@@ -55,10 +58,17 @@ jobs:
   build-tools:
     name: "Build-tools"
     needs: check-license
-    runs-on: ubuntu-latest
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
+      fail-fast: false
     outputs:
       cache-key: ${{ steps.dubbo-build-tools.cache }}
     steps:
+      - name: Support long paths on Windows
+        if: ${{ startsWith( matrix.os, 'windows') }}
+        run: git config --system core.longpaths true
       - uses: actions/checkout@v4
         name: build tools
         with:
@@ -70,7 +80,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 21
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -99,7 +109,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 8
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -143,15 +153,17 @@ jobs:
           echo "dubbo-spi-extensions version: $REVISION"
   # Download dependencies Prepare for unit test
   unit-test-prepare:
-    name: "Preparation for Unit Test"
-    needs: [check-license, build-source]
-    runs-on: ubuntu-latest
+    name: "Preparation for Unit Test On ${{ matrix.os }}"
+    needs: [check-license]
+    runs-on: ${{ matrix.os }}
     strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
       fail-fast: false
     env:
       ZOOKEEPER_VERSION: 3.6.3
     steps:
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache zookeeper binary archive"
         id: "cache-zookeeper"
         with:
@@ -165,6 +177,7 @@ jobs:
         with:
           release: false  # support cache, see 
https://github.com/msys2/setup-msys2#context
       - name: "Download zookeeper binary archive in Linux OS"
+        if: ${{ startsWith( matrix.os, 'ubuntu') && 
steps.cache-zookeeper.outputs.cache-hit != 'true' }}
         run: |
           mkdir -p ${{ github.workspace }}/.tmp/zookeeper
           wget -c https://archive.apache.org/dist/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
@@ -175,7 +188,20 @@ jobs:
           wget -c http://mirror.apache-kr.org/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
           echo "list the downloaded zookeeper binary archive"
           ls -al ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
-      - uses: actions/cache@v3
+      - name: "Download zookeeper binary archive in Windows OS"
+        if: ${{ startsWith( matrix.os, 'windows') && 
steps.cache-zookeeper.outputs.cache-hit != 'true' }}
+        shell: msys2 {0}
+        run: |
+          mkdir -p ${{ github.workspace }}/.tmp/zookeeper
+          wget -c https://archive.apache.org/dist/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c https://apache.website-solution.net/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://apache.stu.edu.tw/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://ftp.jaist.ac.jp/pub/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://apache.mirror.cdnetworks.com/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://mirror.apache-kr.org/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
+          echo "list the downloaded zookeeper binary archive"
+          ls -al ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
+      - uses: actions/cache@v4
         name: "Cache secret key"
         id: "cache-secret-cert"
         with:
@@ -192,17 +218,24 @@ jobs:
           cat rsa_public.pem
           echo "--- End Print Rsa Public Key"
   # Start unit test
-  unit-test-jdk8:
+  unit-test:
     needs: [check-license, build-source, unit-test-prepare]
-    name: "Unit Test On ubuntu-latest with JDK8"
-    runs-on: ubuntu-latest
+    name: "Unit Test ${{ matrix.os }} with JDK ${{ matrix.jdk }}"
+    runs-on: ${{ matrix.os }}
     strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
+        jdk: [ 8, 11 ]
       fail-fast: false
     env:
       DISABLE_FILE_SYSTEM_TEST: true
       CURRENT_ROLE: ${{ matrix.case-role }}
       DUBBO_DEFAULT_SERIALIZATION: fastjson2
     steps:
+      - name: Support Windows
+        if: ${{ startsWith( matrix.os, 'windows') }}
+        run: |
+          git config --system core.longpaths true
       - uses: actions/checkout@v4
         with:
           fetch-depth: 0
@@ -211,7 +244,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 8
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -219,7 +252,7 @@ jobs:
           restore-keys: |
             ${{ runner.os }}-maven-
             ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache zookeeper binary archive"
         id: "cache-zookeeper"
         with:
@@ -227,7 +260,7 @@ jobs:
           key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }}
           restore-keys: |
             zookeeper-${{ runner.os }}-
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache secret key"
         id: "cache-secret-cert"
         with:
@@ -247,78 +280,26 @@ jobs:
       #        run: |
       #          source ${{ github.workspace }}/.tmp/decrypted-sonarcloud-token
       #          ./mvnw --batch-mode --no-snapshot-updates -e 
--no-transfer-progress --fail-fast clean test verify 
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 
-Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache 
-Dsonar.projectKey=apache_dubbo -DtrimStackTrace=false 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip [...]
-      - name: "Test with Maven without SonarCloud Scan"
+      - name: "Test with Maven without SonarCloud Scan On Linux"
+        if: ${{ startsWith( matrix.os, 'linux') || startsWith( matrix.os, 
'ubuntu') }}
         timeout-minutes: 70
         run: |
-          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 -DtrimStackTrace=false 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip=false 
-Dcheckstyle_unix.skip=false -Drat.skip=false -Dmaven.javadoc.skip=true 
-DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper
-      - name: "Upload coverage result"
-        uses: actions/upload-artifact@v4
-        with:
-          name: coverage-result-jdk8
-          path: "**/target/site/**/jacoco.xml"
-  unit-test-jdk11:
-    needs: [ check-license, build-source, unit-test-prepare ]
-    name: "Unit Test On ubuntu-latest with JDK11"
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-    env:
-      DISABLE_FILE_SYSTEM_TEST: true
-      CURRENT_ROLE: ${{ matrix.case-role }}
-      DUBBO_DEFAULT_SERIALIZATION: fastjson2
-    steps:
-      - uses: actions/checkout@v4
-        with:
-          fetch-depth: 0
-      - name: "Set up JDK ${{ matrix.jdk }}"
-        uses: actions/setup-java@v4
-        with:
-          distribution: 'zulu'
-          java-version: 11
-      - uses: actions/cache@v3
-        name: "Cache local Maven repository"
-        with:
-          path: ~/.m2/repository
-          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ 
github.run_id }}
-          restore-keys: |
-            ${{ runner.os }}-maven-
-            ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-      - uses: actions/cache@v3
-        name: "Cache zookeeper binary archive"
-        id: "cache-zookeeper"
-        with:
-          path: ${{ github.workspace }}/.tmp/zookeeper
-          key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }}
-          restore-keys: |
-            zookeeper-${{ runner.os }}-
-      - uses: actions/cache@v3
-        name: "Cache secret key"
-        id: "cache-secret-cert"
-        with:
-          path: ${{ github.workspace }}/.tmp/rsa
-          key: secret-rsa-${{ runner.os }}-${{ github.run_id }}
-      #      - name: "Get sonarcloud token"
-      #        if: ${{ github.repository == 'apache/dubbo-spi-extensions' }}
-      #        run: |
-      #          curl "http://dubbo-vm.apache.org:8000/token?workflow_id=${{ 
github.run_id }}" -o ${{ github.workspace }}/.tmp/encrypted-sonarcloud-token
-      #          openssl rsautl -decrypt -in ${{ github.workspace 
}}/.tmp/encrypted-sonarcloud-token -out ${{ github.workspace 
}}/.tmp/decrypted-sonarcloud-token -inkey ${{ github.workspace 
}}/.tmp/rsa/rsa_private.pem
-      #      - name: "Test with Maven with SonarCloud Scan"
-      #        if: ${{ github.repository == 'apache/dubbo-spi-extensions' }}
-      #        timeout-minutes: 70
-      #        env:
-      #          # Needed to get some information about the pull request, if 
any
-      #          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      #        run: |
-      #          source ${{ github.workspace }}/.tmp/decrypted-sonarcloud-token
-      #          ./mvnw --batch-mode --no-snapshot-updates -e 
--no-transfer-progress --fail-fast clean test verify 
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 
-Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache 
-Dsonar.projectKey=apache_dubbo -DtrimStackTrace=false 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip [...]
-      - name: "Test with Maven without SonarCloud Scan"
+          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-D"maven.wagon.httpconnectionManager.ttlSeconds=120" -Pjacoco 
-DtrimStackTrace=false -D"maven.wagon.http.retryHandler.count=5" 
-DskipTests=false -DskipIntegrationTests=false -D"checkstyle.skip=false" 
-D"checkstyle_unix.skip=false" -D"rat.skip=false" -D"maven.javadoc.skip=true" 
-D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper"
+      - name: "Test with Maven without SonarCloud Scan On Windows"
+        if: ${{ startsWith( matrix.os, 'windows')  }}
         timeout-minutes: 70
         run: |
-          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 -DtrimStackTrace=false 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip=false 
-Dcheckstyle_unix.skip=false -Drat.skip=false -Dmaven.javadoc.skip=true 
-DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper
+          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-D"maven.wagon.httpconnectionManager.ttlSeconds=120" -Pjacoco 
-DtrimStackTrace=false -D"maven.wagon.http.retryHandler.count=5" 
-DskipTests=false -DskipIntegrationTests=false -D"checkstyle.skip=false" 
-D"checkstyle_unix.skip=true" -D"rat.skip=false" -D"maven.javadoc.skip=true" 
-D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper"
+      - name: "Upload surefire-reports if failure"
+        if: ${{ failure() }}
+        uses: actions/upload-artifact@v4
+        with:
+          name: surefire-reports-${{ matrix.os }}-${{ matrix.jdk }}
+          path: "**/target/surefire-reports/**"
       - name: "Upload coverage result"
         uses: actions/upload-artifact@v4
         with:
-          name: coverage-result-jdk11
+          name: coverage-result-${{ matrix.os }}-${{ matrix.jdk }}
           path: "**/target/site/**/jacoco.xml"
 
 #  error-code-inspecting:
@@ -339,7 +320,7 @@ jobs:
 #          distribution: 'zulu'
 #          java-version: 21
 #      - name: Restore Maven local repository cache
-#        uses: actions/cache@v3
+#        uses: actions/cache@v4
 #        with:
 #          path: ~/.m2/repository
 #          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/build-and-test-scheduled-3.2.yml 
b/.github/workflows/build-and-test-scheduled-3.2.yml
index 73538be..3879c8b 100644
--- a/.github/workflows/build-and-test-scheduled-3.2.yml
+++ b/.github/workflows/build-and-test-scheduled-3.2.yml
@@ -1,4 +1,4 @@
-name: Build and Test For PR
+name: Build and Test Scheduled On 3.2
 
 on:
   schedule:
@@ -26,9 +26,12 @@ jobs:
     name: "Check License"
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v4
+      - name: Checkout
+        uses: actions/checkout@v4
+        with:
+          ref: '3.2.0'
       - name: Check License
-        uses: apache/skywalking-eyes@e1a02359b239bd28de3f6d35fdc870250fa513d5
+        uses: apache/[email protected]
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       - name: "Set up JDK 21"
@@ -37,7 +40,7 @@ jobs:
           distribution: 'zulu'
           java-version: 21
       - name: Restore Maven local repository cache
-        uses: actions/cache@v3
+        uses: actions/cache@v4
         with:
           path: ~/.m2/repository
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@@ -55,10 +58,17 @@ jobs:
   build-tools:
     name: "Build-tools"
     needs: check-license
-    runs-on: ubuntu-latest
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
+      fail-fast: false
     outputs:
       cache-key: ${{ steps.dubbo-build-tools.cache }}
     steps:
+      - name: Support long paths on Windows
+        if: ${{ startsWith( matrix.os, 'windows') }}
+        run: git config --system core.longpaths true
       - uses: actions/checkout@v4
         name: build tools
         with:
@@ -70,7 +80,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 21
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -99,7 +109,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 8
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -143,15 +153,17 @@ jobs:
           echo "dubbo-spi-extensions version: $REVISION"
   # Download dependencies Prepare for unit test
   unit-test-prepare:
-    name: "Preparation for Unit Test"
-    needs: [check-license, build-source]
-    runs-on: ubuntu-latest
+    name: "Preparation for Unit Test On ${{ matrix.os }}"
+    needs: [check-license]
+    runs-on: ${{ matrix.os }}
     strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
       fail-fast: false
     env:
       ZOOKEEPER_VERSION: 3.6.3
     steps:
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache zookeeper binary archive"
         id: "cache-zookeeper"
         with:
@@ -165,6 +177,7 @@ jobs:
         with:
           release: false  # support cache, see 
https://github.com/msys2/setup-msys2#context
       - name: "Download zookeeper binary archive in Linux OS"
+        if: ${{ startsWith( matrix.os, 'ubuntu') && 
steps.cache-zookeeper.outputs.cache-hit != 'true' }}
         run: |
           mkdir -p ${{ github.workspace }}/.tmp/zookeeper
           wget -c https://archive.apache.org/dist/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
@@ -175,7 +188,20 @@ jobs:
           wget -c http://mirror.apache-kr.org/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
           echo "list the downloaded zookeeper binary archive"
           ls -al ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
-      - uses: actions/cache@v3
+      - name: "Download zookeeper binary archive in Windows OS"
+        if: ${{ startsWith( matrix.os, 'windows') && 
steps.cache-zookeeper.outputs.cache-hit != 'true' }}
+        shell: msys2 {0}
+        run: |
+          mkdir -p ${{ github.workspace }}/.tmp/zookeeper
+          wget -c https://archive.apache.org/dist/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c https://apache.website-solution.net/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://apache.stu.edu.tw/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://ftp.jaist.ac.jp/pub/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://apache.mirror.cdnetworks.com/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://mirror.apache-kr.org/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
+          echo "list the downloaded zookeeper binary archive"
+          ls -al ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
+      - uses: actions/cache@v4
         name: "Cache secret key"
         id: "cache-secret-cert"
         with:
@@ -192,17 +218,24 @@ jobs:
           cat rsa_public.pem
           echo "--- End Print Rsa Public Key"
   # Start unit test
-  unit-test-jdk8:
+  unit-test:
     needs: [check-license, build-source, unit-test-prepare]
-    name: "Unit Test On ubuntu-latest with JDK8"
-    runs-on: ubuntu-latest
+    name: "Unit Test ${{ matrix.os }} with JDK ${{ matrix.jdk }}"
+    runs-on: ${{ matrix.os }}
     strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
+        jdk: [ 8, 11 ]
       fail-fast: false
     env:
       DISABLE_FILE_SYSTEM_TEST: true
       CURRENT_ROLE: ${{ matrix.case-role }}
       DUBBO_DEFAULT_SERIALIZATION: fastjson2
     steps:
+      - name: Support Windows
+        if: ${{ startsWith( matrix.os, 'windows') }}
+        run: |
+          git config --system core.longpaths true
       - uses: actions/checkout@v4
         with:
           fetch-depth: 0
@@ -211,7 +244,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 8
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -219,7 +252,7 @@ jobs:
           restore-keys: |
             ${{ runner.os }}-maven-
             ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache zookeeper binary archive"
         id: "cache-zookeeper"
         with:
@@ -227,7 +260,7 @@ jobs:
           key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }}
           restore-keys: |
             zookeeper-${{ runner.os }}-
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache secret key"
         id: "cache-secret-cert"
         with:
@@ -247,78 +280,26 @@ jobs:
       #        run: |
       #          source ${{ github.workspace }}/.tmp/decrypted-sonarcloud-token
       #          ./mvnw --batch-mode --no-snapshot-updates -e 
--no-transfer-progress --fail-fast clean test verify 
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 
-Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache 
-Dsonar.projectKey=apache_dubbo -DtrimStackTrace=false 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip [...]
-      - name: "Test with Maven without SonarCloud Scan"
+      - name: "Test with Maven without SonarCloud Scan On Linux"
+        if: ${{ startsWith( matrix.os, 'linux') || startsWith( matrix.os, 
'ubuntu') }}
         timeout-minutes: 70
         run: |
-          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 -DtrimStackTrace=false 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip=false 
-Dcheckstyle_unix.skip=false -Drat.skip=false -Dmaven.javadoc.skip=true 
-DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper
-      - name: "Upload coverage result"
-        uses: actions/upload-artifact@v4
-        with:
-          name: coverage-result-jdk8
-          path: "**/target/site/**/jacoco.xml"
-  unit-test-jdk11:
-    needs: [ check-license, build-source, unit-test-prepare ]
-    name: "Unit Test On ubuntu-latest with JDK11"
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-    env:
-      DISABLE_FILE_SYSTEM_TEST: true
-      CURRENT_ROLE: ${{ matrix.case-role }}
-      DUBBO_DEFAULT_SERIALIZATION: fastjson2
-    steps:
-      - uses: actions/checkout@v4
-        with:
-          fetch-depth: 0
-      - name: "Set up JDK ${{ matrix.jdk }}"
-        uses: actions/setup-java@v4
-        with:
-          distribution: 'zulu'
-          java-version: 11
-      - uses: actions/cache@v3
-        name: "Cache local Maven repository"
-        with:
-          path: ~/.m2/repository
-          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ 
github.run_id }}
-          restore-keys: |
-            ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-            ${{ runner.os }}-maven-
-      - uses: actions/cache@v3
-        name: "Cache zookeeper binary archive"
-        id: "cache-zookeeper"
-        with:
-          path: ${{ github.workspace }}/.tmp/zookeeper
-          key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }}
-          restore-keys: |
-            zookeeper-${{ runner.os }}-
-      - uses: actions/cache@v3
-        name: "Cache secret key"
-        id: "cache-secret-cert"
-        with:
-          path: ${{ github.workspace }}/.tmp/rsa
-          key: secret-rsa-${{ runner.os }}-${{ github.run_id }}
-      #      - name: "Get sonarcloud token"
-      #        if: ${{ github.repository == 'apache/dubbo-spi-extensions' }}
-      #        run: |
-      #          curl "http://dubbo-vm.apache.org:8000/token?workflow_id=${{ 
github.run_id }}" -o ${{ github.workspace }}/.tmp/encrypted-sonarcloud-token
-      #          openssl rsautl -decrypt -in ${{ github.workspace 
}}/.tmp/encrypted-sonarcloud-token -out ${{ github.workspace 
}}/.tmp/decrypted-sonarcloud-token -inkey ${{ github.workspace 
}}/.tmp/rsa/rsa_private.pem
-      #      - name: "Test with Maven with SonarCloud Scan"
-      #        if: ${{ github.repository == 'apache/dubbo-spi-extensions' }}
-      #        timeout-minutes: 70
-      #        env:
-      #          # Needed to get some information about the pull request, if 
any
-      #          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      #        run: |
-      #          source ${{ github.workspace }}/.tmp/decrypted-sonarcloud-token
-      #          ./mvnw --batch-mode --no-snapshot-updates -e 
--no-transfer-progress --fail-fast clean test verify 
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 
-Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache 
-Dsonar.projectKey=apache_dubbo -DtrimStackTrace=false 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip [...]
-      - name: "Test with Maven without SonarCloud Scan"
+          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-D"maven.wagon.httpconnectionManager.ttlSeconds=120" -Pjacoco 
-DtrimStackTrace=false -D"maven.wagon.http.retryHandler.count=5" 
-DskipTests=false -DskipIntegrationTests=false -D"checkstyle.skip=false" 
-D"checkstyle_unix.skip=false" -D"rat.skip=false" -D"maven.javadoc.skip=true" 
-D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper"
+      - name: "Test with Maven without SonarCloud Scan On Windows"
+        if: ${{ startsWith( matrix.os, 'windows')  }}
         timeout-minutes: 70
         run: |
-          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 -DtrimStackTrace=false 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip=false 
-Dcheckstyle_unix.skip=false -Drat.skip=false -Dmaven.javadoc.skip=true 
-DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper
+          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-D"maven.wagon.httpconnectionManager.ttlSeconds=120" -Pjacoco 
-DtrimStackTrace=false -D"maven.wagon.http.retryHandler.count=5" 
-DskipTests=false -DskipIntegrationTests=false -D"checkstyle.skip=false" 
-D"checkstyle_unix.skip=true" -D"rat.skip=false" -D"maven.javadoc.skip=true" 
-D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper"
+      - name: "Upload surefire-reports if failure"
+        if: ${{ failure() }}
+        uses: actions/upload-artifact@v4
+        with:
+          name: surefire-reports-${{ matrix.os }}-${{ matrix.jdk }}
+          path: "**/target/surefire-reports/**"
       - name: "Upload coverage result"
         uses: actions/upload-artifact@v4
         with:
-          name: coverage-result-jdk11
+          name: coverage-result-${{ matrix.os }}-${{ matrix.jdk }}
           path: "**/target/site/**/jacoco.xml"
 
 #  error-code-inspecting:
@@ -339,7 +320,7 @@ jobs:
 #          distribution: 'zulu'
 #          java-version: 21
 #      - name: Restore Maven local repository cache
-#        uses: actions/cache@v3
+#        uses: actions/cache@v4
 #        with:
 #          path: ~/.m2/repository
 #          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/build-and-test-scheduled-main.yml 
b/.github/workflows/build-and-test-scheduled-main.yml
index a3fb199..47ad3ca 100644
--- a/.github/workflows/build-and-test-scheduled-main.yml
+++ b/.github/workflows/build-and-test-scheduled-main.yml
@@ -1,4 +1,4 @@
-name: Build and Test For PR
+name: Build and Test Scheduled On master
 
 on:
   schedule:
@@ -26,9 +26,12 @@ jobs:
     name: "Check License"
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v4
+      - name: Checkout
+        uses: actions/checkout@v4
+        with:
+          ref: 'master'
       - name: Check License
-        uses: apache/skywalking-eyes@e1a02359b239bd28de3f6d35fdc870250fa513d5
+        uses: apache/[email protected]
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       - name: "Set up JDK 21"
@@ -37,7 +40,7 @@ jobs:
           distribution: 'zulu'
           java-version: 21
       - name: Restore Maven local repository cache
-        uses: actions/cache@v3
+        uses: actions/cache@v4
         with:
           path: ~/.m2/repository
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@@ -55,10 +58,17 @@ jobs:
   build-tools:
     name: "Build-tools"
     needs: check-license
-    runs-on: ubuntu-latest
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
+      fail-fast: false
     outputs:
       cache-key: ${{ steps.dubbo-build-tools.cache }}
     steps:
+      - name: Support long paths on Windows
+        if: ${{ startsWith( matrix.os, 'windows') }}
+        run: git config --system core.longpaths true
       - uses: actions/checkout@v4
         name: build tools
         with:
@@ -70,7 +80,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 21
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -99,7 +109,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 8
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -144,14 +154,15 @@ jobs:
   # Download dependencies Prepare for unit test
   unit-test-prepare:
     name: "Preparation for Unit Test"
-    needs: [check-license, build-source]
-    runs-on: ubuntu-latest
+    needs: [check-license]
+    runs-on: ${{ matrix.os }}
     strategy:
-      fail-fast: false
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
     env:
       ZOOKEEPER_VERSION: 3.6.3
     steps:
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache zookeeper binary archive"
         id: "cache-zookeeper"
         with:
@@ -175,7 +186,7 @@ jobs:
           wget -c http://mirror.apache-kr.org/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
           echo "list the downloaded zookeeper binary archive"
           ls -al ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache secret key"
         id: "cache-secret-cert"
         with:
@@ -192,17 +203,24 @@ jobs:
           cat rsa_public.pem
           echo "--- End Print Rsa Public Key"
   # Start unit test
-  unit-test-jdk8:
+  unit-test:
     needs: [check-license, build-source, unit-test-prepare]
-    name: "Unit Test On ubuntu-latest with JDK8"
-    runs-on: ubuntu-latest
+    name: "Unit Test ${{ matrix.os }} with JDK ${{ matrix.jdk }}"
+    runs-on: ${{ matrix.os }}
     strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
+        jdk: [ 8, 11 ]
       fail-fast: false
     env:
       DISABLE_FILE_SYSTEM_TEST: true
       CURRENT_ROLE: ${{ matrix.case-role }}
       DUBBO_DEFAULT_SERIALIZATION: fastjson2
     steps:
+      - name: Support Windows
+        if: ${{ startsWith( matrix.os, 'windows') }}
+        run: |
+          git config --system core.longpaths true
       - uses: actions/checkout@v4
         with:
           fetch-depth: 0
@@ -211,15 +229,15 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 8
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ 
github.run_id }}
           restore-keys: |
-            ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
             ${{ runner.os }}-maven-
-      - uses: actions/cache@v3
+            ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+      - uses: actions/cache@v4
         name: "Cache zookeeper binary archive"
         id: "cache-zookeeper"
         with:
@@ -227,7 +245,7 @@ jobs:
           key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }}
           restore-keys: |
             zookeeper-${{ runner.os }}-
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache secret key"
         id: "cache-secret-cert"
         with:
@@ -247,78 +265,26 @@ jobs:
       #        run: |
       #          source ${{ github.workspace }}/.tmp/decrypted-sonarcloud-token
       #          ./mvnw --batch-mode --no-snapshot-updates -e 
--no-transfer-progress --fail-fast clean test verify 
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 
-Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache 
-Dsonar.projectKey=apache_dubbo -DtrimStackTrace=false 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip [...]
-      - name: "Test with Maven without SonarCloud Scan"
+      - name: "Test with Maven without SonarCloud Scan On Linux"
+        if: ${{ startsWith( matrix.os, 'linux') || startsWith( matrix.os, 
'ubuntu') }}
         timeout-minutes: 70
         run: |
-          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 -DtrimStackTrace=false 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip=false 
-Dcheckstyle_unix.skip=false -Drat.skip=false -Dmaven.javadoc.skip=true 
-DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper
-      - name: "Upload coverage result"
-        uses: actions/upload-artifact@v4
-        with:
-          name: coverage-result-jdk8
-          path: "**/target/site/**/jacoco.xml"
-  unit-test-jdk11:
-    needs: [ check-license, build-source, unit-test-prepare ]
-    name: "Unit Test On ubuntu-latest with JDK11"
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-    env:
-      DISABLE_FILE_SYSTEM_TEST: true
-      CURRENT_ROLE: ${{ matrix.case-role }}
-      DUBBO_DEFAULT_SERIALIZATION: fastjson2
-    steps:
-      - uses: actions/checkout@v4
-        with:
-          fetch-depth: 0
-      - name: "Set up JDK ${{ matrix.jdk }}"
-        uses: actions/setup-java@v4
-        with:
-          distribution: 'zulu'
-          java-version: 11
-      - uses: actions/cache@v3
-        name: "Cache local Maven repository"
-        with:
-          path: ~/.m2/repository
-          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ 
github.run_id }}
-          restore-keys: |
-            ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-            ${{ runner.os }}-maven-
-      - uses: actions/cache@v3
-        name: "Cache zookeeper binary archive"
-        id: "cache-zookeeper"
-        with:
-          path: ${{ github.workspace }}/.tmp/zookeeper
-          key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }}
-          restore-keys: |
-            zookeeper-${{ runner.os }}-
-      - uses: actions/cache@v3
-        name: "Cache secret key"
-        id: "cache-secret-cert"
-        with:
-          path: ${{ github.workspace }}/.tmp/rsa
-          key: secret-rsa-${{ runner.os }}-${{ github.run_id }}
-      #      - name: "Get sonarcloud token"
-      #        if: ${{ github.repository == 'apache/dubbo-spi-extensions' }}
-      #        run: |
-      #          curl "http://dubbo-vm.apache.org:8000/token?workflow_id=${{ 
github.run_id }}" -o ${{ github.workspace }}/.tmp/encrypted-sonarcloud-token
-      #          openssl rsautl -decrypt -in ${{ github.workspace 
}}/.tmp/encrypted-sonarcloud-token -out ${{ github.workspace 
}}/.tmp/decrypted-sonarcloud-token -inkey ${{ github.workspace 
}}/.tmp/rsa/rsa_private.pem
-      #      - name: "Test with Maven with SonarCloud Scan"
-      #        if: ${{ github.repository == 'apache/dubbo-spi-extensions' }}
-      #        timeout-minutes: 70
-      #        env:
-      #          # Needed to get some information about the pull request, if 
any
-      #          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      #        run: |
-      #          source ${{ github.workspace }}/.tmp/decrypted-sonarcloud-token
-      #          ./mvnw --batch-mode --no-snapshot-updates -e 
--no-transfer-progress --fail-fast clean test verify 
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 
-Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache 
-Dsonar.projectKey=apache_dubbo -DtrimStackTrace=false 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip [...]
-      - name: "Test with Maven without SonarCloud Scan"
+          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-D"maven.wagon.httpconnectionManager.ttlSeconds=120" -Pjacoco 
-DtrimStackTrace=false -D"maven.wagon.http.retryHandler.count=5" 
-DskipTests=false -DskipIntegrationTests=false -D"checkstyle.skip=false" 
-D"checkstyle_unix.skip=false" -D"rat.skip=false" -D"maven.javadoc.skip=true" 
-D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper"
+      - name: "Test with Maven without SonarCloud Scan On Windows"
+        if: ${{ startsWith( matrix.os, 'windows')  }}
         timeout-minutes: 70
         run: |
-          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 -DtrimStackTrace=false 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip=false 
-Dcheckstyle_unix.skip=false -Drat.skip=false -Dmaven.javadoc.skip=true 
-DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper
+          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-D"maven.wagon.httpconnectionManager.ttlSeconds=120" -Pjacoco 
-DtrimStackTrace=false -D"maven.wagon.http.retryHandler.count=5" 
-DskipTests=false -DskipIntegrationTests=false -D"checkstyle.skip=false" 
-D"checkstyle_unix.skip=true" -D"rat.skip=false" -D"maven.javadoc.skip=true" 
-D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper"
+      - name: "Upload surefire-reports if failure"
+        if: ${{ failure() }}
+        uses: actions/upload-artifact@v4
+        with:
+          name: surefire-reports-${{ matrix.os }}-${{ matrix.jdk }}
+          path: "**/target/surefire-reports/**"
       - name: "Upload coverage result"
         uses: actions/upload-artifact@v4
         with:
-          name: coverage-result-jdk11
+          name: coverage-result-${{ matrix.os }}-${{ matrix.jdk }}
           path: "**/target/site/**/jacoco.xml"
 
 #  error-code-inspecting:
@@ -339,7 +305,7 @@ jobs:
 #          distribution: 'zulu'
 #          java-version: 21
 #      - name: Restore Maven local repository cache
-#        uses: actions/cache@v3
+#        uses: actions/cache@v4
 #        with:
 #          path: ~/.m2/repository
 #          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/.github/workflows/release-test.yml 
b/.github/workflows/release-test.yml
index 1880a58..0905728 100644
--- a/.github/workflows/release-test.yml
+++ b/.github/workflows/release-test.yml
@@ -1,4 +1,4 @@
-name: Build and Test For PR
+name: Release Test
 
 on:
   push:
@@ -29,7 +29,7 @@ jobs:
     steps:
       - uses: actions/checkout@v4
       - name: Check License
-        uses: apache/skywalking-eyes@e1a02359b239bd28de3f6d35fdc870250fa513d5
+        uses: apache/[email protected]
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       - name: "Set up JDK 21"
@@ -38,7 +38,7 @@ jobs:
           distribution: 'zulu'
           java-version: 21
       - name: Restore Maven local repository cache
-        uses: actions/cache@v3
+        uses: actions/cache@v4
         with:
           path: ~/.m2/repository
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@@ -56,10 +56,17 @@ jobs:
   build-tools:
     name: "Build-tools"
     needs: check-license
-    runs-on: ubuntu-latest
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
+      fail-fast: false
     outputs:
       cache-key: ${{ steps.dubbo-build-tools.cache }}
     steps:
+      - name: Support long paths on Windows
+        if: ${{ startsWith( matrix.os, 'windows') }}
+        run: git config --system core.longpaths true
       - uses: actions/checkout@v4
         name: build tools
         with:
@@ -71,7 +78,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 21
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -86,8 +93,11 @@ jobs:
   # Build from source code
   build-source:
     name: "Build Dubbo-SPI-Extensions"
-    needs: [check-license, build-tools]
-    runs-on: ubuntu-latest
+    needs: [check-license]
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
     # output dubbo-spi-extensions version to others jobs
     outputs:
       version: ${{ steps.dubbo-spi-extensions-version.outputs.version }}
@@ -99,7 +109,7 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 8
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
@@ -143,15 +153,17 @@ jobs:
           echo "dubbo-spi-extensions version: $REVISION"
   # Download dependencies Prepare for unit test
   unit-test-prepare:
-    name: "Preparation for Unit Test"
-    needs: [check-license, build-source]
-    runs-on: ubuntu-latest
+    name: "Preparation for Unit Test On ${{ matrix.os }}"
+    needs: [check-license]
+    runs-on: ${{ matrix.os }}
     strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
       fail-fast: false
     env:
       ZOOKEEPER_VERSION: 3.6.3
     steps:
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache zookeeper binary archive"
         id: "cache-zookeeper"
         with:
@@ -165,6 +177,7 @@ jobs:
         with:
           release: false  # support cache, see 
https://github.com/msys2/setup-msys2#context
       - name: "Download zookeeper binary archive in Linux OS"
+        if: ${{ startsWith( matrix.os, 'ubuntu') && 
steps.cache-zookeeper.outputs.cache-hit != 'true' }}
         run: |
           mkdir -p ${{ github.workspace }}/.tmp/zookeeper
           wget -c https://archive.apache.org/dist/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
@@ -175,7 +188,20 @@ jobs:
           wget -c http://mirror.apache-kr.org/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
           echo "list the downloaded zookeeper binary archive"
           ls -al ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
-      - uses: actions/cache@v3
+      - name: "Download zookeeper binary archive in Windows OS"
+        if: ${{ startsWith( matrix.os, 'windows') && 
steps.cache-zookeeper.outputs.cache-hit != 'true' }}
+        shell: msys2 {0}
+        run: |
+          mkdir -p ${{ github.workspace }}/.tmp/zookeeper
+          wget -c https://archive.apache.org/dist/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c https://apache.website-solution.net/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://apache.stu.edu.tw/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://ftp.jaist.ac.jp/pub/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://apache.mirror.cdnetworks.com/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
+          wget -c http://mirror.apache-kr.org/apache/zookeeper/zookeeper-${{ 
env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION 
}}-bin.tar.gz -O ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
+          echo "list the downloaded zookeeper binary archive"
+          ls -al ${{ github.workspace 
}}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
+      - uses: actions/cache@v4
         name: "Cache secret key"
         id: "cache-secret-cert"
         with:
@@ -192,17 +218,24 @@ jobs:
           cat rsa_public.pem
           echo "--- End Print Rsa Public Key"
   # Start unit test
-  unit-test-jdk8:
+  unit-test:
     needs: [check-license, build-source, unit-test-prepare]
-    name: "Unit Test On ubuntu-latest with JDK8"
-    runs-on: ubuntu-latest
+    name: "Unit Test ${{ matrix.os }} with JDK ${{ matrix.jdk }}"
+    runs-on: ${{ matrix.os }}
     strategy:
+      matrix:
+        os: [ ubuntu-latest, windows-latest ]
+        jdk: [ 8, 11 ]
       fail-fast: false
     env:
       DISABLE_FILE_SYSTEM_TEST: true
       CURRENT_ROLE: ${{ matrix.case-role }}
       DUBBO_DEFAULT_SERIALIZATION: fastjson2
     steps:
+      - name: Support Windows
+        if: ${{ startsWith( matrix.os, 'windows') }}
+        run: |
+          git config --system core.longpaths true
       - uses: actions/checkout@v4
         with:
           fetch-depth: 0
@@ -211,15 +244,15 @@ jobs:
         with:
           distribution: 'zulu'
           java-version: 8
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         name: "Cache local Maven repository"
         with:
           path: ~/.m2/repository
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ 
github.run_id }}
           restore-keys: |
-            ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
             ${{ runner.os }}-maven-
-      - uses: actions/cache@v3
+            ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+      - uses: actions/cache@v4
         name: "Cache zookeeper binary archive"
         id: "cache-zookeeper"
         with:
@@ -227,71 +260,13 @@ jobs:
           key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }}
           restore-keys: |
             zookeeper-${{ runner.os }}-
-      - uses: actions/cache@v3
-        name: "Cache secret key"
-        id: "cache-secret-cert"
-        with:
-          path: ${{ github.workspace }}/.tmp/rsa
-          key: secret-rsa-${{ runner.os }}-${{ github.run_id }}
-      #      - name: "Get sonarcloud token"
-      #        if: ${{ github.repository == 'apache/dubbo-spi-extensions' }}
-      #        run: |
-      #          curl "http://dubbo-vm.apache.org:8000/token?workflow_id=${{ 
github.run_id }}" -o ${{ github.workspace }}/.tmp/encrypted-sonarcloud-token
-      #          openssl rsautl -decrypt -in ${{ github.workspace 
}}/.tmp/encrypted-sonarcloud-token -out ${{ github.workspace 
}}/.tmp/decrypted-sonarcloud-token -inkey ${{ github.workspace 
}}/.tmp/rsa/rsa_private.pem
-      #      - name: "Test with Maven with SonarCloud Scan"
-      #        if: ${{ github.repository == 'apache/dubbo-spi-extensions' }}
-      #        timeout-minutes: 70
-      #        env:
-      #          # Needed to get some information about the pull request, if 
any
-      #          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      #        run: |
-      #          source ${{ github.workspace }}/.tmp/decrypted-sonarcloud-token
-      #          ./mvnw --batch-mode --no-snapshot-updates -e 
--no-transfer-progress --fail-fast clean test verify 
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 
-Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache 
-Dsonar.projectKey=apache_dubbo -DtrimStackTrace=false 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip [...]
-      - name: "Test with Maven without SonarCloud Scan"
-        timeout-minutes: 70
-        run: |
-          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 -DtrimStackTrace=false 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip=false 
-Dcheckstyle_unix.skip=false -Drat.skip=false -Dmaven.javadoc.skip=true 
-DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper
-      - name: "Upload coverage result"
+      - name: "Upload surefire-reports if failure"
+        if: ${{ failure() }}
         uses: actions/upload-artifact@v4
         with:
-          name: coverage-result-jdk8
-          path: "**/target/site/**/jacoco.xml"
-  unit-test-jdk11:
-    needs: [ check-license, build-source, unit-test-prepare ]
-    name: "Unit Test On ubuntu-latest with JDK11"
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-    env:
-      DISABLE_FILE_SYSTEM_TEST: true
-      CURRENT_ROLE: ${{ matrix.case-role }}
-      DUBBO_DEFAULT_SERIALIZATION: fastjson2
-    steps:
-      - uses: actions/checkout@v4
-        with:
-          fetch-depth: 0
-      - name: "Set up JDK ${{ matrix.jdk }}"
-        uses: actions/setup-java@v4
-        with:
-          distribution: 'zulu'
-          java-version: 11
-      - uses: actions/cache@v3
-        name: "Cache local Maven repository"
-        with:
-          path: ~/.m2/repository
-          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ 
github.run_id }}
-          restore-keys: |
-            ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-            ${{ runner.os }}-maven-
-      - uses: actions/cache@v3
-        name: "Cache zookeeper binary archive"
-        id: "cache-zookeeper"
-        with:
-          path: ${{ github.workspace }}/.tmp/zookeeper
-          key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }}
-          restore-keys: |
-            zookeeper-${{ runner.os }}-
-      - uses: actions/cache@v3
+          name: surefire-reports-${{ matrix.os }}-${{ matrix.jdk }}
+          path: "**/target/surefire-reports/**"
+      - uses: actions/cache@v4
         name: "Cache secret key"
         id: "cache-secret-cert"
         with:
@@ -311,14 +286,20 @@ jobs:
       #        run: |
       #          source ${{ github.workspace }}/.tmp/decrypted-sonarcloud-token
       #          ./mvnw --batch-mode --no-snapshot-updates -e 
--no-transfer-progress --fail-fast clean test verify 
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 
-Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache 
-Dsonar.projectKey=apache_dubbo -DtrimStackTrace=false 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip [...]
-      - name: "Test with Maven without SonarCloud Scan"
+      - name: "Test with Maven without SonarCloud Scan On Linux"
+        if: ${{ startsWith( matrix.os, 'linux') || startsWith( matrix.os, 
'ubuntu') }}
+        timeout-minutes: 70
+        run: |
+          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-D"maven.wagon.httpconnectionManager.ttlSeconds=120" -Pjacoco 
-DtrimStackTrace=false -D"maven.wagon.http.retryHandler.count=5" 
-DskipTests=false -DskipIntegrationTests=false -D"checkstyle.skip=false" 
-D"checkstyle_unix.skip=false" -D"rat.skip=false" -D"maven.javadoc.skip=true" 
-D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper"
+      - name: "Test with Maven without SonarCloud Scan On Windows"
+        if: ${{ startsWith( matrix.os, 'windows')  }}
         timeout-minutes: 70
         run: |
-          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
-Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 -DtrimStackTrace=false 
-Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false 
-DskipIntegrationTests=false -Dcheckstyle.skip=false 
-Dcheckstyle_unix.skip=false -Drat.skip=false -Dmaven.javadoc.skip=true 
-DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper
+          ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress 
--fail-fast clean test verify 
-D"maven.wagon.httpconnectionManager.ttlSeconds=120" -Pjacoco 
-DtrimStackTrace=false -D"maven.wagon.http.retryHandler.count=5" 
-DskipTests=false -DskipIntegrationTests=false -D"checkstyle.skip=false" 
-D"checkstyle_unix.skip=true" -D"rat.skip=false" -D"maven.javadoc.skip=true" 
-D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper"
       - name: "Upload coverage result"
         uses: actions/upload-artifact@v4
         with:
-          name: coverage-result-jdk11
+          name: coverage-result-${{ matrix.os }}-${{ matrix.jdk }}
           path: "**/target/site/**/jacoco.xml"
 
 #  error-code-inspecting:
@@ -339,7 +320,7 @@ jobs:
 #          distribution: 'zulu'
 #          java-version: 21
 #      - name: Restore Maven local repository cache
-#        uses: actions/cache@v3
+#        uses: actions/cache@v4
 #        with:
 #          path: ~/.m2/repository
 #          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}

Reply via email to