From 05096d789d990e3a8cdeeb6207cb009406914819 Mon Sep 17 00:00:00 2001 From: Sean Yang Date: Sun, 8 Sep 2024 15:15:37 +0800 Subject: [PATCH] Split unit test for all --- .github/workflows/build-and-test-pr.yml | 47 +- .../build-and-test-scheduled-3.1.yml | 572 +++++++++--------- .../build-and-test-scheduled-3.2.yml | 570 ++++++++--------- .../build-and-test-scheduled-3.3.yml | 561 ++++++++--------- .github/workflows/release-test.yml | 555 +++++++++-------- dubbo-test/scripts/split-modules.sh | 4 +- mvnw | 2 +- 7 files changed, 1191 insertions(+), 1120 deletions(-) diff --git a/.github/workflows/build-and-test-pr.yml b/.github/workflows/build-and-test-pr.yml index 1ebb815797e..62b7beec608 100644 --- a/.github/workflows/build-and-test-pr.yml +++ b/.github/workflows/build-and-test-pr.yml @@ -10,6 +10,7 @@ env: FAIL_FAST: 0 SHOW_ERROR_DETAIL: 1 VERSIONS_LIMIT: 4 + ALL_REMOTE_VERSION: true JACOCO_ENABLE: true CANDIDATE_VERSIONS: >- spring.version:5.3.24; @@ -88,7 +89,7 @@ jobs: java-version: 21 - name: Compile Dubbo (Linux) run: | - ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -Pskip-spotless -Dmaven.test.skip=true -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.skip=true + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -Pskip-spotless -Dmaven.test.skip=true - name: Check Dependencies' License uses: apache/skywalking-eyes/dependency@e1a02359b239bd28de3f6d35fdc870250fa513d5 env: @@ -130,7 +131,7 @@ jobs: - name: Build Dubbo with maven run: | cd ./dubbo - ./mvnw ${{ env.MAVEN_ARGS }} clean install -Psources,'!demo',skip-spotless,checkstyle -Dmaven.test.skip=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -Psources,'!demo',skip-spotless,checkstyle -Dmaven.test.skip=true - name: Save dubbo cache uses: actions/cache/save@v4 with: @@ -180,7 +181,7 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - name: Prepare test list - run: bash ./dubbo-test/scripts/split-modules.sh 3 '${{ github.workspace }}' + run: bash ./dubbo-test/scripts/split-modules.sh ${{ env.JOB_COUNT }} '${{ github.workspace }}' - name: Upload test list uses: actions/upload-artifact@v3 with: @@ -192,18 +193,24 @@ jobs: with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - - name: Download zookeeper binary archive in Linux OS + - name: Download zookeeper binary archive on ${{ matrix.os }} if: steps.cache-zookeeper.outputs.cache-hit != 'true' + env: + MIRRORS: >- + https://archive.apache.org/dist + https://apache.website-solution.net + http://apache.stu.edu.tw + http://ftp.jaist.ac.jp/pub/apache + http://apache.mirror.cdnetworks.com + http://mirror.apache-kr.org/apache 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 + cd '${{ github.workspace }}' + mkdir -p .tmp/zookeeper + for mirror in $MIRRORS; do + curl -sL "$mirror/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz" -o .tmp/zookeeper/apache-zookeeper-bin.tar.gz && break + done echo "list the downloaded zookeeper binary archive" - ls -al ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz + ls -al .tmp/zookeeper/apache-zookeeper-bin.tar.gz - name: Save local zookeeper cache uses: actions/cache/save@v4 if: steps.cache-zookeeper.outputs.cache-hit != 'true' @@ -213,8 +220,8 @@ jobs: unit-test-job: name: Unit Test (Job-${{matrix.job_id}}) needs: [ check-format, build-source, unit-test-prepare ] - runs-on: ubuntu-latest - timeout-minutes: 30 + runs-on: ${{ matrix.os }}-latest + timeout-minutes: 60 env: ZOOKEEPER_VERSION: 3.6.4 strategy: @@ -255,11 +262,11 @@ jobs: name: unit-test-list path: test/jobs/ - name: Test with maven - timeout-minutes: 30 + timeout-minutes: 60 run: | set -o pipefail modules=$(cat test/jobs/test_modules_${{ matrix.job_id }}.txt) - ./mvnw ${{ env.MAVEN_ARGS }} clean test verify -Pjacoco,jdk15ge-simple,'!jdk15ge','!demo',skip-spotless,jacoco089 -pl "$modules" -DtrimStackTrace=false -Dmaven.test.skip=false -Dcheckstyle.skip=false -Dcheckstyle_unix.skip=false -Drat.skip=false -Dflatten.skip=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper 2>&1 | tee >(grep -n -B 1 -A 200 "FAILURE! -- in" > test_errors.log) + ./mvnw ${{ env.MAVEN_ARGS }} clean test verify -Pjdk15ge-simple,'!jdk15ge','!demo',skip-spotless,jacoco,jacoco089 -pl "$modules" -DtrimStackTrace=false -Dmaven.test.skip=false -Drat.skip=false -Dflatten.skip=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper 2>&1 | tee >(grep -n -B 5 -A 200 "FAILURE! -- in" > test_errors.log) - name: Print test error log if: failure() run: cat test_errors.log @@ -292,7 +299,7 @@ jobs: name: Samples Test (Job-${{matrix.job_id}}) needs: [ check-format, build-source, samples-test-prepare ] runs-on: ubuntu-latest - timeout-minutes: 30 + timeout-minutes: 60 env: JAVA_VER: 8 TEST_CASE_FILE: jobs/testjob_${{ matrix.job_id }}.txt @@ -391,7 +398,7 @@ jobs: name: Integration Test (Job-${{matrix.job_id}}) needs: [ check-format, build-source, integration-test-prepare ] runs-on: ubuntu-latest - timeout-minutes: 30 + timeout-minutes: 60 env: JAVA_VER: 8 TEST_CASE_FILE: jobs/testjob_${{ matrix.job_id }}.txt @@ -557,7 +564,7 @@ jobs: - name: Compile Dubbo (Linux) run: | cd ${{ github.workspace }}/dubbo - ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.skip=true + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true - name: Run Error Code Inspecting env: DUBBO_ECI_REPORT_AS_ERROR: true @@ -608,7 +615,7 @@ jobs: - name: Compile Dubbo (Linux) run: | cd ${{ github.workspace }}/dubbo - ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.skip=true + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true - name: Compile and run Dubbo demo for native (Linux) run: | cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface diff --git a/.github/workflows/build-and-test-scheduled-3.1.yml b/.github/workflows/build-and-test-scheduled-3.1.yml index 54a2abda858..7f842ced404 100644 --- a/.github/workflows/build-and-test-scheduled-3.1.yml +++ b/.github/workflows/build-and-test-scheduled-3.1.yml @@ -2,75 +2,116 @@ name: Build and Test Scheduled On 3.1 on: schedule: - - cron: '0 0/6 * * *' + - cron: 0 0/6 * * * workflow_dispatch: permissions: contents: read +defaults: + run: + shell: bash + env: + DUBBO_BRANCH: 3.1 FORK_COUNT: 2 FAIL_FAST: 0 SHOW_ERROR_DETAIL: 1 - #multi-version size limit VERSIONS_LIMIT: 4 ALL_REMOTE_VERSION: true - CANDIDATE_VERSIONS: ' + JACOCO_ENABLE: false + CANDIDATE_VERSIONS: >- spring.version:5.3.24; spring-boot.version:2.7.6; - ' + MAVEN_OPTS: >- + -XX:+UseG1GC + -XX:InitiatingHeapOccupancyPercent=45 + -XX:+UseStringDeduplication + -XX:-TieredCompilation + -XX:TieredStopAtLevel=1 + -Dmaven.javadoc.skip=true + -Dmaven.wagon.http.retryHandler.count=5 + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + MAVEN_ARGS: >- + -e + --batch-mode + --no-snapshot-updates + --no-transfer-progress + --fail-fast jobs: - license: + check-license: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.1" + ref: ${{ env.DUBBO_BRANCH }} - name: Check License uses: apache/skywalking-eyes@main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + build-source: - runs-on: ubuntu-latest + name: Build Dubbo on ${{ matrix.os }} + runs-on: ${{ matrix.os }}-latest + strategy: + matrix: + os: [ ubuntu, windows ] outputs: version: ${{ steps.dubbo-version.outputs.version }} steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.1" + ref: ${{ env.DUBBO_BRANCH }} path: dubbo - - uses: actions/setup-java@v3 + - name: Set up JDK + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: zulu java-version: 8 - - uses: actions/cache@v3 - name: "Cache local Maven repository" + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 + id: cache-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- - - name: "Dubbo cache" - uses: actions/cache@v3 + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + - name: Restore common local maven repository cache + uses: actions/cache/restore@v4 + if: steps.cache-maven-repository.outputs.cache-hit != 'true' with: - path: ~/.m2/repository/org/apache/dubbo - key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - - name: "Build Dubbo with Maven" + path: ~/.m2/repository + key: ${{ runner.os }}-maven- + - name: Clean dubbo cache + run: rm -rf ~/.m2/repository/org/apache/dubbo + - name: Build Dubbo with maven run: | cd ./dubbo - ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean source:jar install -Pjacoco,checkstyle -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.count=5 -Dmaven.test.skip=true -Dmaven.test.skip.exec=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper - - name: "Pack checkstyle file if failure" + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -Psources,'!demo',skip-spotless,checkstyle -Dmaven.test.skip=true -Dcheckstyle_unix.skip=${{ matrix.os == 'windows' && 'true' || 'false' }} + - name: Save dubbo cache + uses: actions/cache/save@v4 + with: + path: ~/.m2/repository/org/apache/dubbo + key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} + - name: Clean dubbo cache + run: rm -rf ~/.m2/repository/org/apache/dubbo + - name: Save local maven repository cache + uses: actions/cache/save@v4 + if: steps.cache-maven-repository.outputs.cache-hit != 'true' + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + - name: Pack checkstyle file if failure if: failure() run: 7z a ${{ github.workspace }}/checkstyle.zip *checkstyle* -r - - name: "Upload checkstyle file if failure" - if: failure() + - name: Upload checkstyle file if failure uses: actions/upload-artifact@v3 + if: failure() with: - name: "checkstyle-file" + name: checkstyle-file path: ${{ github.workspace }}/checkstyle.zip - - name: "Calculate Dubbo Version" + - name: Calculate Dubbo Version id: dubbo-version run: | REVISION=`awk '/[^<]+<\/revision>/{gsub(/|<\/revision>/,"",$1);print $1;exit;}' ./dubbo/pom.xml` @@ -78,425 +119,400 @@ jobs: echo "dubbo version: $REVISION" unit-test-prepare: - name: " Preparation for Unit Test On ${{ matrix.os }}" - runs-on: ${{ matrix.os }} + name: Preparation for Unit Test on ${{ matrix.os }} + runs-on: ${{ matrix.os }}-latest + env: + JOB_COUNT: 2 + ZOOKEEPER_VERSION: 3.6.4 strategy: - fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest ] - env: - ZOOKEEPER_VERSION: 3.6.3 + os: [ ubuntu, windows ] steps: - - uses: actions/cache@v3 - name: "Cache zookeeper binary archive" - id: "cache-zookeeper" + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ env.DUBBO_BRANCH }} + - name: Prepare test list + if: ${{ matrix.os == 'ubuntu' }} + run: bash ./dubbo-test/scripts/split-modules.sh ${{ env.JOB_COUNT }} '${{ github.workspace }}' + - name: Upload test list + uses: actions/upload-artifact@v3 + if: ${{ matrix.os == 'ubuntu' }} + with: + name: unit-test-list + path: test/jobs + - name: Restore local zookeeper cache + uses: actions/cache/restore@v4 + id: cache-zookeeper with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - restore-keys: | - zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - - name: "Set up msys2 if necessary" - if: ${{ startsWith( matrix.os, 'windows') && steps.cache-zookeeper.outputs.cache-hit != 'true' }} - uses: msys2/setup-msys2@v2 - 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} + - name: Download zookeeper binary archive on ${{ matrix.os }} + if: steps.cache-zookeeper.outputs.cache-hit != 'true' + env: + MIRRORS: >- + https://archive.apache.org/dist + https://apache.website-solution.net + http://apache.stu.edu.tw + http://ftp.jaist.ac.jp/pub/apache + http://apache.mirror.cdnetworks.com + http://mirror.apache-kr.org/apache 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 + cd '${{ github.workspace }}' + mkdir -p .tmp/zookeeper + for mirror in $MIRRORS; do + curl -sL "$mirror/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz" -o .tmp/zookeeper/apache-zookeeper-bin.tar.gz && break + done echo "list the downloaded zookeeper binary archive" - ls -al ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz - - unit-test: - needs: [build-source, unit-test-prepare] - name: "Unit Test On ${{ matrix.os }} (JDK: ${{ matrix.jdk }})" - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ ubuntu-latest, windows-latest ] - jdk: [ 8, 11, 17, 21 ] - env: - DISABLE_FILE_SYSTEM_TEST: true - steps: - - uses: actions/checkout@v3 - with: - ref: "3.1" - - name: "Set up JDK ${{ matrix.jdk }}" - uses: actions/setup-java@v1 - with: - java-version: ${{ matrix.jdk }} - - 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" + ls -al .tmp/zookeeper/apache-zookeeper-bin.tar.gz + - name: Save local zookeeper cache + uses: actions/cache/save@v4 + if: steps.cache-zookeeper.outputs.cache-hit != 'true' with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - restore-keys: | - zookeeper-${{ runner.os }}- - - name: "Test with Maven with Integration Tests" - timeout-minutes: 70 - if: ${{ startsWith( matrix.os, 'ubuntu') }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -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: "Test with Maven without Integration Tests" - timeout-minutes: 90 - if: ${{ startsWith( matrix.os, 'windows') }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco -D"http.keepAlive=false" -D"maven.wagon.http.pool=false" -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=true -D"checkstyle.skip=false" -D"checkstyle_unix.skip=true" -D"rat.skip=false" -D"maven.javadoc.skip=true" -D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper" - - unit-test-fastjson2: - needs: [build-source, unit-test-prepare] - name: "Unit Test On ${{ matrix.os }} (JDK: ${{ matrix.jdk }}, Serialization: fastjson2)" - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ ubuntu-latest, windows-latest ] - jdk: [ 8, 11, 17, 21 ] + unit-test-job: + name: Unit Test (Job-${{matrix.job_id}}, Os-${{ matrix.os }}, Jdk-${{ matrix.jdk }}, Ser-${{ matrix.ser }}) + needs: [ build-source, unit-test-prepare ] + runs-on: ${{ matrix.os }}-latest + timeout-minutes: 60 env: + ZOOKEEPER_VERSION: 3.6.4 DISABLE_FILE_SYSTEM_TEST: true - DUBBO_DEFAULT_SERIALIZATION: fastjson2 MAVEN_SUREFIRE_ADD_OPENS: true + DUBBO_DEFAULT_SERIALIZATION: ${{ matrix.ser }} + strategy: + fail-fast: false + matrix: + os: [ ubuntu, windows ] + jdk: [ 8, 11 ] + ser: [ hessian2, fastjson2 ] + job_id: [ 1, 2 ] steps: - - uses: actions/checkout@v3 - - name: "Set up JDK ${{ matrix.jdk }}" - uses: actions/setup-java@v3 + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ env.DUBBO_BRANCH }} + - name: Set up JDK + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: zulu java-version: ${{ matrix.jdk }} - - uses: actions/cache@v3 - name: "Cache local Maven repository" + - name: Restore local maven repository + uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }} + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- - - uses: actions/cache@v3 - name: "Cache zookeeper binary archive" - id: "cache-zookeeper" + - name: Restore Dubbo cache + uses: actions/cache/restore@v4 + with: + path: ~/.m2/repository/org/apache/dubbo + key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} + - name: Cache zookeeper binary archive + uses: actions/cache@v4 + id: cache-zookeeper with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} restore-keys: | zookeeper-${{ runner.os }}- - - name: "Test with Maven with Integration Tests on JDK 8" - timeout-minutes: 70 - if: ${{ startsWith( matrix.os, 'ubuntu') && matrix.jdk == '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco,'!jdk15ge' -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -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: "Test with Maven without Integration Tests on JDK 8" - timeout-minutes: 90 - if: ${{ startsWith( matrix.os, 'windows') && matrix.jdk == '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -P"jacoco,'!jdk15ge'" -D"http.keepAlive=false" -D"maven.wagon.http.pool=false" -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=true -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: "Test with Maven with Integration Tests" - timeout-minutes: 70 - if: ${{ startsWith( matrix.os, 'ubuntu') && matrix.jdk != '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco,jdk15ge-simple,'!jdk15ge' -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -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: "Test with Maven without Integration Tests" - timeout-minutes: 90 - if: ${{ startsWith( matrix.os, 'windows') && matrix.jdk != '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -P"jacoco,jdk15ge-simple,'!jdk15ge'" -D"http.keepAlive=false" -D"maven.wagon.http.pool=false" -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=true -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: Download test list + uses: actions/download-artifact@v3 + with: + name: unit-test-list + path: test/jobs/ + - name: Test with maven on ${{ matrix.os }} + timeout-minutes: 60 + run: | + set -o pipefail + modules=$(cat test/jobs/test_modules_${{ matrix.job_id }}.txt) + ./mvnw ${{ env.MAVEN_ARGS }} clean test verify -Pjdk15ge-simple,'!jdk15ge','!demo',skip-spotless -pl "$modules" -DtrimStackTrace=false -Dmaven.test.skip=false -Drat.skip=false -Dflatten.skip=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper 2>&1 | tee >(grep -n -B 5 -A 200 "FAILURE! -- in" > test_errors.log) + - name: Print test error log + if: failure() + run: cat test_errors.log samples-test-prepare: + name: Preparation for Sample Test runs-on: ubuntu-latest env: - JOB_COUNT: 5 + JOB_COUNT: 3 steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-samples' + repository: oxsean/dubbo-samples ref: master - - name: "Prepare test list" - run: | - bash ./test/scripts/prepare-test.sh - - name: "Upload test list" + - name: Prepare test list + run: bash ./test/scripts/prepare-test.sh + - name: Upload test list uses: actions/upload-artifact@v3 with: name: samples-test-list path: test/jobs samples-test-job: - needs: [build-source, samples-test-prepare] - name: "Samples Test on ubuntu-latest (JobId: ${{matrix.job_id}} JavaVer: ${{matrix.jdk}})" + name: Samples Test (Job-${{matrix.job_id}}, Java-${{ matrix.jdk }}) + needs: [ build-source, samples-test-prepare ] runs-on: ubuntu-latest - timeout-minutes: 90 + timeout-minutes: 60 env: - JAVA_VER: ${{matrix.jdk}} - TEST_CASE_FILE: jobs/testjob_${{matrix.job_id}}.txt + JAVA_VER: ${{ matrix.jdk }} + TEST_CASE_FILE: jobs/testjob_${{ matrix.job_id }}.txt strategy: fail-fast: false matrix: jdk: [ 8, 11 ] - job_id: [1, 2, 3, 4, 5] + job_id: [ 1, 2, 3 ] steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-samples' + repository: oxsean/dubbo-samples ref: master - - name: "Cache local Maven repository" - uses: actions/cache@v3 + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }} + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- - - name: "Restore Dubbo cache" - uses: actions/cache@v3 + - name: Restore Dubbo cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository/org/apache/dubbo key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - restore-keys: | - ${{ runner.os }}-dubbo-snapshot-${{ github.sha }} - ${{ runner.os }}-dubbo-snapshot- - - name: "Download test list" + - name: Download test list uses: actions/download-artifact@v3 with: name: samples-test-list path: test/jobs/ - - name: "Set up JDK ${{matrix.jdk}}" - uses: actions/setup-java@v1 + - name: Set up JDK ${{ matrix.jdk }} + uses: actions/setup-java@v4 with: - java-version: ${{matrix.jdk}} - - name: "Init Candidate Versions" + distribution: zulu + java-version: ${{ matrix.jdk }} + - name: Init Candidate Versions run: | - DUBBO_VERSION="${{needs.build-source.outputs.version}}" + DUBBO_VERSION="${{ needs.build-source.outputs.version }}" CANDIDATE_VERSIONS="dubbo.version:$DUBBO_VERSION;compiler.version:$DUBBO_VERSION;$CANDIDATE_VERSIONS;dubbo.compiler.version:$DUBBO_VERSION" echo "CANDIDATE_VERSIONS=$CANDIDATE_VERSIONS" >> $GITHUB_ENV - - name: "Build test image" - run: | - cd test && bash ./build-test-image.sh - - name: "Run tests" + - name: Build test image + run: cd test && bash ./build-test-image.sh + - name: Run tests run: cd test && bash ./run-tests.sh - - name: "Upload test result" - if: always() + - name: Upload test result uses: actions/upload-artifact@v3 with: - name: samples-test-result-${{matrix.jdk}} + name: samples-test-result-${{ matrix.jdk }} path: test/jobs/*-result* samples-test-result: - needs: [samples-test-job] - if: always() + needs: [ samples-test-job ] runs-on: ubuntu-latest env: - JAVA_VER: ${{matrix.jdk}} + JAVA_VER: ${{ matrix.jdk }} strategy: matrix: jdk: [ 8, 11 ] steps: - - uses: actions/checkout@v3 + - name: Checkout samples code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-samples' + repository: oxsean/dubbo-samples ref: master - - name: "Download test result" + - name: Download test result uses: actions/download-artifact@v3 with: - name: samples-test-result-${{matrix.jdk}} + name: samples-test-result-${{ matrix.jdk }} path: test/jobs/ - - name: "Merge test result" + - name: Merge test result run: ./test/scripts/merge-test-results.sh integration-test-prepare: + name: Preparation for Integration Test runs-on: ubuntu-latest env: - JOB_COUNT: 5 + JOB_COUNT: 3 steps: - - uses: actions/checkout@v3 + - name: Checkout integration code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-integration-cases' + repository: oxsean/dubbo-integration-cases ref: main - - name: "Prepare test list" - run: | - bash ./test/scripts/prepare-test.sh - - name: "Upload test list" + - name: Prepare test list + run: bash ./test/scripts/prepare-test.sh + - name: Upload test list uses: actions/upload-artifact@v3 with: name: integration-test-list path: test/jobs integration-test-job: - needs: [build-source, integration-test-prepare] - name: "Integration Test on ubuntu-latest (JobId: ${{matrix.job_id}} JavaVer: ${{matrix.jdk}})" + name: Integration Test (Job-${{ matrix.job_id }}, Java-${{ matrix.jdk }}) + needs: [ build-source, integration-test-prepare ] runs-on: ubuntu-latest - timeout-minutes: 90 + timeout-minutes: 60 env: - JAVA_VER: ${{matrix.jdk}} - TEST_CASE_FILE: jobs/testjob_${{matrix.job_id}}.txt + JAVA_VER: ${{ matrix.jdk }} + TEST_CASE_FILE: jobs/testjob_${{ matrix.job_id }}.txt strategy: fail-fast: false matrix: jdk: [ 8, 11 ] - job_id: [1, 2, 3, 4, 5] + job_id: [ 1, 2, 3 ] steps: - - uses: actions/checkout@v3 + - name: Checkout integration code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-integration-cases' + repository: oxsean/dubbo-integration-cases ref: main - - name: "Cache local Maven repository" - uses: actions/cache@v3 + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }} + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- - - name: "Restore Dubbo cache" - uses: actions/cache@v3 + - name: Restore Dubbo cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository/org/apache/dubbo key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - restore-keys: | - ${{ runner.os }}-dubbo-snapshot-${{ github.sha }} - ${{ runner.os }}-dubbo-snapshot- - - name: "Download test list" + - name: Download test list uses: actions/download-artifact@v3 with: name: integration-test-list path: test/jobs/ - - name: "Set up JDK ${{matrix.jdk}}" - uses: actions/setup-java@v1 + - name: Set up JDK ${{ matrix.jdk }} + uses: actions/setup-java@v4 with: - java-version: ${{matrix.jdk}} - - name: "Init Candidate Versions" + distribution: zulu + java-version: ${{ matrix.jdk }} + - name: Init Candidate Versions run: | - DUBBO_VERSION="${{needs.build-source.outputs.version}}" + DUBBO_VERSION="${{ needs.build-source.outputs.version }}" CANDIDATE_VERSIONS="dubbo.version:$DUBBO_VERSION;compiler.version:$DUBBO_VERSION;$CANDIDATE_VERSIONS;dubbo.compiler.version:$DUBBO_VERSION" echo "CANDIDATE_VERSIONS=$CANDIDATE_VERSIONS" >> $GITHUB_ENV - - name: "Build test image" - run: | - cd test && bash ./build-test-image.sh - - name: "Run tests" + - name: Build test image + run: cd test && bash ./build-test-image.sh + - name: Run tests run: cd test && bash ./run-tests.sh - - name: "Upload test result" - if: always() + - name: Upload test result uses: actions/upload-artifact@v3 with: - name: integration-test-result-${{matrix.jdk}} + name: integration-test-result-${{ matrix.jdk }} path: test/jobs/*-result* integration-test-result: - needs: [integration-test-job] - if: always() + needs: [ integration-test-job ] runs-on: ubuntu-latest env: - JAVA_VER: ${{matrix.jdk}} + JAVA_VER: ${{ matrix.jdk }} strategy: matrix: jdk: [ 8, 11 ] steps: - - uses: actions/checkout@v3 + - name: Checkout integration code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-integration-cases' + repository: oxsean/dubbo-integration-cases ref: main - - name: "Download test result" + - name: Download test result uses: actions/download-artifact@v3 with: - name: integration-test-result-${{matrix.jdk}} + name: integration-test-result-${{ matrix.jdk }} path: test/jobs/ - - name: "Merge test result" + - name: Merge test result run: ./test/scripts/merge-test-results.sh error-code-inspecting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.1" - path: "./dubbo" - - - uses: actions/checkout@v3 + ref: ${{ env.DUBBO_BRANCH }} + path: ./dubbo + - name: Checkout code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-test-tools' + repository: apache/dubbo-test-tools ref: main - path: "./dubbo-test-tools" - - - name: "Set up JDK 21" - uses: actions/setup-java@v3 + path: ./dubbo-test-tools + - name: Set up JDK 21 + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: zulu java-version: 21 - - - name: "Compile Dubbo (Linux)" + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 + id: cache-maven-repository + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Compile Dubbo (Linux) run: | cd ${{ github.workspace }}/dubbo - ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean install -DskipTests=true -DskipIntegrationTests=true -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.skip=true -Dmaven.javadoc.skip=true - - name: "Run Error Code Inspecting" + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true + - name: Run Error Code Inspecting env: DUBBO_ECI_REPORT_AS_ERROR: true run: | cd ${{ github.workspace }}/dubbo-test-tools/dubbo-error-code-inspector - ../mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C package exec:java -Ddubbo.eci.report-as-error=${DUBBO_ECI_REPORT_AS_ERROR} -Dmaven.test.skip=true -Dmaven.test.skip.exec=true -Ddubbo.eci.path=${{ github.workspace }}/dubbo - - - name: "Upload error code inspection result" + ../mvnw ${{ env.MAVEN_ARGS }} -T 2C package exec:java -Ddubbo.eci.report-as-error=${DUBBO_ECI_REPORT_AS_ERROR} -Dmaven.test.skip=true -Ddubbo.eci.path=${{ github.workspace }}/dubbo + - name: Upload error code inspection result # always() should not be used here, since we don't need to handle the 'canceled' situation. if: ${{ success() || failure() }} uses: actions/upload-artifact@v3 with: - name: "error-inspection-result" + name: error-inspection-result path: ${{ github.workspace }}/dubbo-test-tools/dubbo-error-code-inspector/error-inspection-result.txt native-image-inspecting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.1" - path: "./dubbo" - - - name: "Setup GraalVM environment" + ref: ${{ env.DUBBO_BRANCH }} + path: ./dubbo + - name: Setup GraalVM environment uses: graalvm/setup-graalvm@v1 with: - version: '22.3.0' - java-version: '17' - components: 'native-image' + version: 22.3.0 + java-version: 17 + components: native-image github-token: ${{ secrets.GITHUB_TOKEN }} - native-image-job-reports: 'true' - - - name: "Setup Zookeeper environment" + native-image-job-reports: true + - name: Setup Zookeeper environment run: | wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz mv apache-zookeeper-3.8.4-bin/conf/zoo_sample.cfg apache-zookeeper-3.8.4-bin/conf/zoo.cfg apache-zookeeper-3.8.4-bin/bin/zkServer.sh start - - - name: "Check environment" + - name: Check environment run: | java --version native-image --version - - - name: "Compile Dubbo (Linux)" + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Compile Dubbo (Linux) run: | cd ${{ github.workspace }}/dubbo - ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean install -DskipTests=true -DskipIntegrationTests=true -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.skip=true -Dmaven.javadoc.skip=true - - - name: "Compile and run Dubbo demo for native (Linux)" + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true + - name: Compile and run Dubbo demo for native (Linux) run: | - cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider - ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true native:compile + cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface + MVNW="${{ github.workspace }}/dubbo/mvnw ${{ env.MAVEN_ARGS }} -T 2C -Dmaven.test.skip=true" + $MVNW clean install + cd ../dubbo-demo-native-provider + $MVNW clean package -P native native:compile nohup ./target/dubbo-demo-native-provider & - cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer - ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true native:compile + cd ../dubbo-demo-native-consumer + $MVNW clean package -P native native:compile ./target/dubbo-demo-native-consumer diff --git a/.github/workflows/build-and-test-scheduled-3.2.yml b/.github/workflows/build-and-test-scheduled-3.2.yml index e3b3d95c8d5..8d1c346d18a 100644 --- a/.github/workflows/build-and-test-scheduled-3.2.yml +++ b/.github/workflows/build-and-test-scheduled-3.2.yml @@ -2,75 +2,116 @@ name: Build and Test Scheduled On 3.2 on: schedule: - - cron: '0 0/6 * * *' + - cron: 0 0/6 * * * workflow_dispatch: permissions: contents: read +defaults: + run: + shell: bash + env: + DUBBO_BRANCH: 3.2 FORK_COUNT: 2 FAIL_FAST: 0 SHOW_ERROR_DETAIL: 1 - #multi-version size limit VERSIONS_LIMIT: 4 ALL_REMOTE_VERSION: true - CANDIDATE_VERSIONS: ' + JACOCO_ENABLE: false + CANDIDATE_VERSIONS: >- spring.version:5.3.24; spring-boot.version:2.7.6; - ' + MAVEN_OPTS: >- + -XX:+UseG1GC + -XX:InitiatingHeapOccupancyPercent=45 + -XX:+UseStringDeduplication + -XX:-TieredCompilation + -XX:TieredStopAtLevel=1 + -Dmaven.javadoc.skip=true + -Dmaven.wagon.http.retryHandler.count=5 + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + MAVEN_ARGS: >- + -e + --batch-mode + --no-snapshot-updates + --no-transfer-progress + --fail-fast jobs: - license: + check-license: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.2" + ref: ${{ env.DUBBO_BRANCH }} - name: Check License uses: apache/skywalking-eyes@main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + build-source: - runs-on: ubuntu-latest + name: Build Dubbo on ${{ matrix.os }} + runs-on: ${{ matrix.os }}-latest + strategy: + matrix: + os: [ ubuntu, windows ] outputs: version: ${{ steps.dubbo-version.outputs.version }} steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.2" + ref: ${{ env.DUBBO_BRANCH }} path: dubbo - - uses: actions/setup-java@v3 + - name: Set up JDK + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: zulu java-version: 8 - - uses: actions/cache@v3 - name: "Cache local Maven repository" + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 + id: cache-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- - - name: "Dubbo cache" - uses: actions/cache@v3 + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + - name: Restore common local maven repository cache + uses: actions/cache/restore@v4 + if: steps.cache-maven-repository.outputs.cache-hit != 'true' with: - path: ~/.m2/repository/org/apache/dubbo - key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - - name: "Build Dubbo with Maven" + path: ~/.m2/repository + key: ${{ runner.os }}-maven- + - name: Clean dubbo cache + run: rm -rf ~/.m2/repository/org/apache/dubbo + - name: Build Dubbo with maven run: | cd ./dubbo - ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean source:jar install -Pjacoco,checkstyle -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.count=5 -Dmaven.test.skip=true -Dmaven.test.skip.exec=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper - - name: "Pack checkstyle file if failure" + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -Psources,'!demo',skip-spotless,checkstyle -Dmaven.test.skip=true -Dcheckstyle_unix.skip=${{ matrix.os == 'windows' && 'true' || 'false' }} + - name: Save dubbo cache + uses: actions/cache/save@v4 + with: + path: ~/.m2/repository/org/apache/dubbo + key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} + - name: Clean dubbo cache + run: rm -rf ~/.m2/repository/org/apache/dubbo + - name: Save local maven repository cache + uses: actions/cache/save@v4 + if: steps.cache-maven-repository.outputs.cache-hit != 'true' + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + - name: Pack checkstyle file if failure if: failure() run: 7z a ${{ github.workspace }}/checkstyle.zip *checkstyle* -r - - name: "Upload checkstyle file if failure" - if: failure() + - name: Upload checkstyle file if failure uses: actions/upload-artifact@v3 + if: failure() with: - name: "checkstyle-file" + name: checkstyle-file path: ${{ github.workspace }}/checkstyle.zip - - name: "Calculate Dubbo Version" + - name: Calculate Dubbo Version id: dubbo-version run: | REVISION=`awk '/[^<]+<\/revision>/{gsub(/|<\/revision>/,"",$1);print $1;exit;}' ./dubbo/pom.xml` @@ -78,425 +119,400 @@ jobs: echo "dubbo version: $REVISION" unit-test-prepare: - name: " Preparation for Unit Test On ${{ matrix.os }}" - runs-on: ${{ matrix.os }} + name: Preparation for Unit Test on ${{ matrix.os }} + runs-on: ${{ matrix.os }}-latest + env: + JOB_COUNT: 2 + ZOOKEEPER_VERSION: 3.6.4 strategy: - fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest ] - env: - ZOOKEEPER_VERSION: 3.6.3 + os: [ ubuntu, windows ] steps: - - uses: actions/cache@v3 - name: "Cache zookeeper binary archive" - id: "cache-zookeeper" + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ env.DUBBO_BRANCH }} + - name: Prepare test list + if: ${{ matrix.os == 'ubuntu' }} + run: bash ./dubbo-test/scripts/split-modules.sh ${{ env.JOB_COUNT }} '${{ github.workspace }}' + - name: Upload test list + uses: actions/upload-artifact@v3 + if: ${{ matrix.os == 'ubuntu' }} + with: + name: unit-test-list + path: test/jobs + - name: Restore local zookeeper cache + uses: actions/cache/restore@v4 + id: cache-zookeeper with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - restore-keys: | - zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - - name: "Set up msys2 if necessary" - if: ${{ startsWith( matrix.os, 'windows') && steps.cache-zookeeper.outputs.cache-hit != 'true' }} - uses: msys2/setup-msys2@v2 - 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} + - name: Download zookeeper binary archive on ${{ matrix.os }} + if: steps.cache-zookeeper.outputs.cache-hit != 'true' + env: + MIRRORS: >- + https://archive.apache.org/dist + https://apache.website-solution.net + http://apache.stu.edu.tw + http://ftp.jaist.ac.jp/pub/apache + http://apache.mirror.cdnetworks.com + http://mirror.apache-kr.org/apache 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 + cd '${{ github.workspace }}' + mkdir -p .tmp/zookeeper + for mirror in $MIRRORS; do + curl -sL "$mirror/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz" -o .tmp/zookeeper/apache-zookeeper-bin.tar.gz && break + done echo "list the downloaded zookeeper binary archive" - ls -al ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz - - unit-test: - needs: [build-source, unit-test-prepare] - name: "Unit Test On ${{ matrix.os }} (JDK: ${{ matrix.jdk }})" - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ ubuntu-latest, windows-latest ] - jdk: [ 8, 11, 17, 21 ] - env: - DISABLE_FILE_SYSTEM_TEST: true - steps: - - uses: actions/checkout@v3 - with: - ref: "3.2" - - name: "Set up JDK ${{ matrix.jdk }}" - uses: actions/setup-java@v1 - with: - java-version: ${{ matrix.jdk }} - - 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" + ls -al .tmp/zookeeper/apache-zookeeper-bin.tar.gz + - name: Save local zookeeper cache + uses: actions/cache/save@v4 + if: steps.cache-zookeeper.outputs.cache-hit != 'true' with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - restore-keys: | - zookeeper-${{ runner.os }}- - - name: "Test with Maven with Integration Tests" - timeout-minutes: 70 - if: ${{ startsWith( matrix.os, 'ubuntu') }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -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: "Test with Maven without Integration Tests" - timeout-minutes: 90 - if: ${{ startsWith( matrix.os, 'windows') }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco -D"http.keepAlive=false" -D"maven.wagon.http.pool=false" -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=true -D"checkstyle.skip=false" -D"checkstyle_unix.skip=true" -D"rat.skip=false" -D"maven.javadoc.skip=true" -D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper" - - unit-test-fastjson2: - needs: [build-source, unit-test-prepare] - name: "Unit Test On ${{ matrix.os }} (JDK: ${{ matrix.jdk }}, Serialization: fastjson2)" - runs-on: ${{ matrix.os }} + unit-test-job: + name: Unit Test (Job-${{matrix.job_id}}, Os-${{ matrix.os }}, Jdk-${{ matrix.jdk }}, Ser-${{ matrix.ser }}) + needs: [ build-source, unit-test-prepare ] + runs-on: ${{ matrix.os }}-latest + timeout-minutes: 60 + env: + ZOOKEEPER_VERSION: 3.6.4 + DISABLE_FILE_SYSTEM_TEST: true + MAVEN_SUREFIRE_ADD_OPENS: true + DUBBO_DEFAULT_SERIALIZATION: ${{ matrix.ser }} strategy: fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest ] + os: [ ubuntu, windows ] jdk: [ 8, 11, 17, 21 ] - env: - DISABLE_FILE_SYSTEM_TEST: true - DUBBO_DEFAULT_SERIALIZATION: fastjson2 - MAVEN_SUREFIRE_ADD_OPENS: true + ser: [ hessian2, fastjson2 ] + job_id: [ 1, 2 ] steps: - - uses: actions/checkout@v3 - - name: "Set up JDK ${{ matrix.jdk }}" - uses: actions/setup-java@v3 + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ env.DUBBO_BRANCH }} + - name: Set up JDK + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: zulu java-version: ${{ matrix.jdk }} - - uses: actions/cache@v3 - name: "Cache local Maven repository" + - name: Restore local maven repository + uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }} + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- - - uses: actions/cache@v3 - name: "Cache zookeeper binary archive" - id: "cache-zookeeper" + - name: Restore Dubbo cache + uses: actions/cache/restore@v4 + with: + path: ~/.m2/repository/org/apache/dubbo + key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} + - name: Cache zookeeper binary archive + uses: actions/cache@v4 + id: cache-zookeeper with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} restore-keys: | zookeeper-${{ runner.os }}- - - name: "Test with Maven with Integration Tests on JDK 8" - timeout-minutes: 70 - if: ${{ startsWith( matrix.os, 'ubuntu') && matrix.jdk == '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco,'!jdk15ge' -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -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: "Test with Maven without Integration Tests on JDK 8" - timeout-minutes: 90 - if: ${{ startsWith( matrix.os, 'windows') && matrix.jdk == '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -P"jacoco,'!jdk15ge'" -D"http.keepAlive=false" -D"maven.wagon.http.pool=false" -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=true -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: "Test with Maven with Integration Tests" - timeout-minutes: 70 - if: ${{ startsWith( matrix.os, 'ubuntu') && matrix.jdk != '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco,jdk15ge-simple,'!jdk15ge' -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -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: "Test with Maven without Integration Tests" - timeout-minutes: 90 - if: ${{ startsWith( matrix.os, 'windows') && matrix.jdk != '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -P"jacoco,jdk15ge-simple,'!jdk15ge'" -D"http.keepAlive=false" -D"maven.wagon.http.pool=false" -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=true -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: Download test list + uses: actions/download-artifact@v3 + with: + name: unit-test-list + path: test/jobs/ + - name: Test with maven on ${{ matrix.os }} + timeout-minutes: 60 + run: | + set -o pipefail + modules=$(cat test/jobs/test_modules_${{ matrix.job_id }}.txt) + ./mvnw ${{ env.MAVEN_ARGS }} clean test verify -Pjdk15ge-simple,'!jdk15ge','!demo',skip-spotless -pl "$modules" -DtrimStackTrace=false -Dmaven.test.skip=false -Drat.skip=false -Dflatten.skip=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper 2>&1 | tee >(grep -n -B 5 -A 200 "FAILURE! -- in" > test_errors.log) + - name: Print test error log + if: failure() + run: cat test_errors.log samples-test-prepare: + name: Preparation for Sample Test runs-on: ubuntu-latest env: - JOB_COUNT: 5 + JOB_COUNT: 3 steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-samples' + repository: oxsean/dubbo-samples ref: master - - name: "Prepare test list" - run: | - bash ./test/scripts/prepare-test.sh - - name: "Upload test list" + - name: Prepare test list + run: bash ./test/scripts/prepare-test.sh + - name: Upload test list uses: actions/upload-artifact@v3 with: name: samples-test-list path: test/jobs samples-test-job: - needs: [build-source, samples-test-prepare] - name: "Samples Test on ubuntu-latest (JobId: ${{matrix.job_id}} JavaVer: ${{matrix.jdk}})" + name: Samples Test (Job-${{matrix.job_id}}, Java-${{ matrix.jdk }}) + needs: [ build-source, samples-test-prepare ] runs-on: ubuntu-latest - timeout-minutes: 90 + timeout-minutes: 60 env: - JAVA_VER: ${{matrix.jdk}} - TEST_CASE_FILE: jobs/testjob_${{matrix.job_id}}.txt + JAVA_VER: ${{ matrix.jdk }} + TEST_CASE_FILE: jobs/testjob_${{ matrix.job_id }}.txt strategy: fail-fast: false matrix: jdk: [ 8, 11, 17, 21 ] - job_id: [1, 2, 3, 4, 5] + job_id: [ 1, 2, 3 ] steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-samples' + repository: oxsean/dubbo-samples ref: master - - name: "Cache local Maven repository" - uses: actions/cache@v3 + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }} + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- - - name: "Restore Dubbo cache" - uses: actions/cache@v3 + - name: Restore Dubbo cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository/org/apache/dubbo key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - restore-keys: | - ${{ runner.os }}-dubbo-snapshot-${{ github.sha }} - ${{ runner.os }}-dubbo-snapshot- - - name: "Download test list" + - name: Download test list uses: actions/download-artifact@v3 with: name: samples-test-list path: test/jobs/ - - name: "Set up JDK ${{matrix.jdk}}" - uses: actions/setup-java@v1 + - name: Set up JDK ${{ matrix.jdk }} + uses: actions/setup-java@v4 with: - java-version: ${{matrix.jdk}} - - name: "Init Candidate Versions" + distribution: zulu + java-version: ${{ matrix.jdk }} + - name: Init Candidate Versions run: | - DUBBO_VERSION="${{needs.build-source.outputs.version}}" + DUBBO_VERSION="${{ needs.build-source.outputs.version }}" CANDIDATE_VERSIONS="dubbo.version:$DUBBO_VERSION;compiler.version:$DUBBO_VERSION;$CANDIDATE_VERSIONS;dubbo.compiler.version:$DUBBO_VERSION" echo "CANDIDATE_VERSIONS=$CANDIDATE_VERSIONS" >> $GITHUB_ENV - - name: "Build test image" - run: | - cd test && bash ./build-test-image.sh - - name: "Run tests" + - name: Build test image + run: cd test && bash ./build-test-image.sh + - name: Run tests run: cd test && bash ./run-tests.sh - - name: "Upload test result" - if: always() + - name: Upload test result uses: actions/upload-artifact@v3 with: - name: samples-test-result-${{matrix.jdk}} + name: samples-test-result-${{ matrix.jdk }} path: test/jobs/*-result* samples-test-result: - needs: [samples-test-job] - if: always() + needs: [ samples-test-job ] runs-on: ubuntu-latest env: - JAVA_VER: ${{matrix.jdk}} + JAVA_VER: ${{ matrix.jdk }} strategy: matrix: jdk: [ 8, 11, 17, 21 ] steps: - - uses: actions/checkout@v3 + - name: Checkout samples code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-samples' + repository: oxsean/dubbo-samples ref: master - - name: "Download test result" + - name: Download test result uses: actions/download-artifact@v3 with: - name: samples-test-result-${{matrix.jdk}} + name: samples-test-result-${{ matrix.jdk }} path: test/jobs/ - - name: "Merge test result" + - name: Merge test result run: ./test/scripts/merge-test-results.sh integration-test-prepare: + name: Preparation for Integration Test runs-on: ubuntu-latest env: - JOB_COUNT: 5 + JOB_COUNT: 3 steps: - - uses: actions/checkout@v3 + - name: Checkout integration code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-integration-cases' + repository: oxsean/dubbo-integration-cases ref: main - - name: "Prepare test list" - run: | - bash ./test/scripts/prepare-test.sh - - name: "Upload test list" + - name: Prepare test list + run: bash ./test/scripts/prepare-test.sh + - name: Upload test list uses: actions/upload-artifact@v3 with: name: integration-test-list path: test/jobs integration-test-job: - needs: [build-source, integration-test-prepare] - name: "Integration Test on ubuntu-latest (JobId: ${{matrix.job_id}} JavaVer: ${{matrix.jdk}})" + name: Integration Test (Job-${{ matrix.job_id }}, Java-${{ matrix.jdk }}) + needs: [ build-source, integration-test-prepare ] runs-on: ubuntu-latest - timeout-minutes: 90 + timeout-minutes: 60 env: - JAVA_VER: ${{matrix.jdk}} - TEST_CASE_FILE: jobs/testjob_${{matrix.job_id}}.txt + JAVA_VER: ${{ matrix.jdk }} + TEST_CASE_FILE: jobs/testjob_${{ matrix.job_id }}.txt strategy: fail-fast: false matrix: jdk: [ 8, 11, 17, 21 ] - job_id: [1, 2, 3, 4, 5] + job_id: [ 1, 2, 3 ] steps: - - uses: actions/checkout@v3 + - name: Checkout integration code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-integration-cases' + repository: oxsean/dubbo-integration-cases ref: main - - name: "Cache local Maven repository" - uses: actions/cache@v3 + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }} + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- - - name: "Restore Dubbo cache" - uses: actions/cache@v3 + - name: Restore Dubbo cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository/org/apache/dubbo key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - restore-keys: | - ${{ runner.os }}-dubbo-snapshot-${{ github.sha }} - ${{ runner.os }}-dubbo-snapshot- - - name: "Download test list" + - name: Download test list uses: actions/download-artifact@v3 with: name: integration-test-list path: test/jobs/ - - name: "Set up JDK ${{matrix.jdk}}" - uses: actions/setup-java@v1 + - name: Set up JDK ${{ matrix.jdk }} + uses: actions/setup-java@v4 with: - java-version: ${{matrix.jdk}} - - name: "Init Candidate Versions" + distribution: zulu + java-version: ${{ matrix.jdk }} + - name: Init Candidate Versions run: | - DUBBO_VERSION="${{needs.build-source.outputs.version}}" + DUBBO_VERSION="${{ needs.build-source.outputs.version }}" CANDIDATE_VERSIONS="dubbo.version:$DUBBO_VERSION;compiler.version:$DUBBO_VERSION;$CANDIDATE_VERSIONS;dubbo.compiler.version:$DUBBO_VERSION" echo "CANDIDATE_VERSIONS=$CANDIDATE_VERSIONS" >> $GITHUB_ENV - - name: "Build test image" - run: | - cd test && bash ./build-test-image.sh - - name: "Run tests" + - name: Build test image + run: cd test && bash ./build-test-image.sh + - name: Run tests run: cd test && bash ./run-tests.sh - - name: "Upload test result" - if: always() + - name: Upload test result uses: actions/upload-artifact@v3 with: - name: integration-test-result-${{matrix.jdk}} + name: integration-test-result-${{ matrix.jdk }} path: test/jobs/*-result* integration-test-result: - needs: [integration-test-job] - if: always() + needs: [ integration-test-job ] runs-on: ubuntu-latest env: - JAVA_VER: ${{matrix.jdk}} + JAVA_VER: ${{ matrix.jdk }} strategy: matrix: jdk: [ 8, 11, 17, 21 ] steps: - - uses: actions/checkout@v3 + - name: Checkout integration code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-integration-cases' + repository: oxsean/dubbo-integration-cases ref: main - - name: "Download test result" + - name: Download test result uses: actions/download-artifact@v3 with: - name: integration-test-result-${{matrix.jdk}} + name: integration-test-result-${{ matrix.jdk }} path: test/jobs/ - - name: "Merge test result" + - name: Merge test result run: ./test/scripts/merge-test-results.sh error-code-inspecting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.2" - path: "./dubbo" - - - uses: actions/checkout@v3 + ref: ${{ env.DUBBO_BRANCH }} + path: ./dubbo + - name: Checkout code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-test-tools' + repository: apache/dubbo-test-tools ref: main - path: "./dubbo-test-tools" - - - name: "Set up JDK 21" - uses: actions/setup-java@v3 + path: ./dubbo-test-tools + - name: Set up JDK 21 + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: zulu java-version: 21 - - - name: "Compile Dubbo (Linux)" + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 + id: cache-maven-repository + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Compile Dubbo (Linux) run: | cd ${{ github.workspace }}/dubbo - ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean install -DskipTests=true -DskipIntegrationTests=true -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.skip=true -Dmaven.javadoc.skip=true - - name: "Run Error Code Inspecting" + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true + - name: Run Error Code Inspecting env: DUBBO_ECI_REPORT_AS_ERROR: true run: | cd ${{ github.workspace }}/dubbo-test-tools/dubbo-error-code-inspector - ../mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C package exec:java -Ddubbo.eci.report-as-error=${DUBBO_ECI_REPORT_AS_ERROR} -Dmaven.test.skip=true -Dmaven.test.skip.exec=true -Ddubbo.eci.path=${{ github.workspace }}/dubbo - - - name: "Upload error code inspection result" + ../mvnw ${{ env.MAVEN_ARGS }} -T 2C package exec:java -Ddubbo.eci.report-as-error=${DUBBO_ECI_REPORT_AS_ERROR} -Dmaven.test.skip=true -Ddubbo.eci.path=${{ github.workspace }}/dubbo + - name: Upload error code inspection result # always() should not be used here, since we don't need to handle the 'canceled' situation. if: ${{ success() || failure() }} uses: actions/upload-artifact@v3 with: - name: "error-inspection-result" + name: error-inspection-result path: ${{ github.workspace }}/dubbo-test-tools/dubbo-error-code-inspector/error-inspection-result.txt native-image-inspecting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.2" - path: "./dubbo" - - - name: "Setup GraalVM environment" + ref: ${{ env.DUBBO_BRANCH }} + path: ./dubbo + - name: Setup GraalVM environment uses: graalvm/setup-graalvm@v1 with: - version: '22.3.0' - java-version: '17' - components: 'native-image' + version: 22.3.0 + java-version: 17 + components: native-image github-token: ${{ secrets.GITHUB_TOKEN }} - native-image-job-reports: 'true' - - - name: "Setup Zookeeper environment" + native-image-job-reports: true + - name: Setup Zookeeper environment run: | wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz mv apache-zookeeper-3.8.4-bin/conf/zoo_sample.cfg apache-zookeeper-3.8.4-bin/conf/zoo.cfg apache-zookeeper-3.8.4-bin/bin/zkServer.sh start - - - name: "Check environment" + - name: Check environment run: | java --version native-image --version - - - name: "Compile Dubbo (Linux)" + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Compile Dubbo (Linux) run: | cd ${{ github.workspace }}/dubbo - ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean install -DskipTests=true -DskipIntegrationTests=true -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.skip=true -Dmaven.javadoc.skip=true - - - name: "Compile and run Dubbo demo for native (Linux)" + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true + - name: Compile and run Dubbo demo for native (Linux) run: | - cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider - ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true native:compile + cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface + MVNW="${{ github.workspace }}/dubbo/mvnw ${{ env.MAVEN_ARGS }} -T 2C -Dmaven.test.skip=true" + $MVNW clean install + cd ../dubbo-demo-native-provider + $MVNW clean package -P native native:compile nohup ./target/dubbo-demo-native-provider & - cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer - ${{ github.workspace }}/dubbo/mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean package -P native -Dmaven.test.skip=true native:compile + cd ../dubbo-demo-native-consumer + $MVNW clean package -P native native:compile ./target/dubbo-demo-native-consumer diff --git a/.github/workflows/build-and-test-scheduled-3.3.yml b/.github/workflows/build-and-test-scheduled-3.3.yml index 3240efb8f8a..aca04d24025 100644 --- a/.github/workflows/build-and-test-scheduled-3.3.yml +++ b/.github/workflows/build-and-test-scheduled-3.3.yml @@ -2,75 +2,116 @@ name: Build and Test Scheduled On 3.3 on: schedule: - - cron: '0 0/6 * * *' + - cron: 0 0/6 * * * workflow_dispatch: permissions: contents: read +defaults: + run: + shell: bash + env: + DUBBO_BRANCH: split-unit-test FORK_COUNT: 2 FAIL_FAST: 0 SHOW_ERROR_DETAIL: 1 - #multi-version size limit VERSIONS_LIMIT: 4 ALL_REMOTE_VERSION: true - CANDIDATE_VERSIONS: ' + JACOCO_ENABLE: false + CANDIDATE_VERSIONS: >- spring.version:5.3.24; spring-boot.version:2.7.6; - ' + MAVEN_OPTS: >- + -XX:+UseG1GC + -XX:InitiatingHeapOccupancyPercent=45 + -XX:+UseStringDeduplication + -XX:-TieredCompilation + -XX:TieredStopAtLevel=1 + -Dmaven.javadoc.skip=true + -Dmaven.wagon.http.retryHandler.count=5 + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + MAVEN_ARGS: >- + -e + --batch-mode + --no-snapshot-updates + --no-transfer-progress + --fail-fast jobs: - license: + check-license: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.3" + ref: ${{ env.DUBBO_BRANCH }} - name: Check License uses: apache/skywalking-eyes@main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + build-source: - runs-on: ubuntu-latest + name: Build Dubbo on ${{ matrix.os }} + runs-on: ${{ matrix.os }}-latest + strategy: + matrix: + os: [ ubuntu, windows ] outputs: version: ${{ steps.dubbo-version.outputs.version }} steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.3" + ref: ${{ env.DUBBO_BRANCH }} path: dubbo - - uses: actions/setup-java@v3 + - name: Set up JDK + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: zulu java-version: 21 - - uses: actions/cache@v3 - name: "Cache local Maven repository" + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 + id: cache-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- - - name: "Dubbo cache" - uses: actions/cache@v3 + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + - name: Restore common local maven repository cache + uses: actions/cache/restore@v4 + if: steps.cache-maven-repository.outputs.cache-hit != 'true' with: - path: ~/.m2/repository/org/apache/dubbo - key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - - name: "Build Dubbo with Maven" + path: ~/.m2/repository + key: ${{ runner.os }}-maven- + - name: Clean dubbo cache + run: rm -rf ~/.m2/repository/org/apache/dubbo + - name: Build Dubbo with maven run: | cd ./dubbo - ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean source:jar install -Pjacoco,checkstyle -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.count=5 -Dmaven.test.skip=true -Dmaven.test.skip.exec=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper - - name: "Pack checkstyle file if failure" + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -Psources,'!demo',skip-spotless,checkstyle -Dmaven.test.skip=true -Dcheckstyle_unix.skip=${{ matrix.os == 'windows' && 'true' || 'false' }} + - name: Save dubbo cache + uses: actions/cache/save@v4 + with: + path: ~/.m2/repository/org/apache/dubbo + key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} + - name: Clean dubbo cache + run: rm -rf ~/.m2/repository/org/apache/dubbo + - name: Save local maven repository cache + uses: actions/cache/save@v4 + if: steps.cache-maven-repository.outputs.cache-hit != 'true' + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + - name: Pack checkstyle file if failure if: failure() run: 7z a ${{ github.workspace }}/checkstyle.zip *checkstyle* -r - - name: "Upload checkstyle file if failure" - if: failure() + - name: Upload checkstyle file if failure uses: actions/upload-artifact@v3 + if: failure() with: - name: "checkstyle-file" + name: checkstyle-file path: ${{ github.workspace }}/checkstyle.zip - - name: "Calculate Dubbo Version" + - name: Calculate Dubbo Version id: dubbo-version run: | REVISION=`awk '/[^<]+<\/revision>/{gsub(/|<\/revision>/,"",$1);print $1;exit;}' ./dubbo/pom.xml` @@ -78,427 +119,399 @@ jobs: echo "dubbo version: $REVISION" unit-test-prepare: - name: " Preparation for Unit Test On ${{ matrix.os }}" - runs-on: ${{ matrix.os }} + name: Preparation for Unit Test on ${{ matrix.os }} + runs-on: ${{ matrix.os }}-latest + env: + JOB_COUNT: 2 + ZOOKEEPER_VERSION: 3.6.4 strategy: - fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest ] - env: - ZOOKEEPER_VERSION: 3.6.3 + os: [ ubuntu, windows ] steps: - - uses: actions/cache@v3 - name: "Cache zookeeper binary archive" - id: "cache-zookeeper" + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ env.DUBBO_BRANCH }} + - name: Prepare test list + if: ${{ matrix.os == 'ubuntu' }} + run: bash ./dubbo-test/scripts/split-modules.sh ${{ env.JOB_COUNT }} '${{ github.workspace }}' + - name: Upload test list + uses: actions/upload-artifact@v3 + if: ${{ matrix.os == 'ubuntu' }} + with: + name: unit-test-list + path: test/jobs + - name: Restore local zookeeper cache + uses: actions/cache/restore@v4 + id: cache-zookeeper with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - restore-keys: | - zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - - name: "Set up msys2 if necessary" - if: ${{ startsWith( matrix.os, 'windows') && steps.cache-zookeeper.outputs.cache-hit != 'true' }} - uses: msys2/setup-msys2@v2 - 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} + - name: Download zookeeper binary archive on ${{ matrix.os }} + if: steps.cache-zookeeper.outputs.cache-hit != 'true' + env: + MIRRORS: >- + https://archive.apache.org/dist + https://apache.website-solution.net + http://apache.stu.edu.tw + http://ftp.jaist.ac.jp/pub/apache + http://apache.mirror.cdnetworks.com + http://mirror.apache-kr.org/apache 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 + cd '${{ github.workspace }}' + mkdir -p .tmp/zookeeper + for mirror in $MIRRORS; do + curl -sL "$mirror/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz" -o .tmp/zookeeper/apache-zookeeper-bin.tar.gz && break + done echo "list the downloaded zookeeper binary archive" - ls -al ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz - - unit-test: - needs: [build-source, unit-test-prepare] - name: "Unit Test On ${{ matrix.os }} (JDK: ${{ matrix.jdk }})" - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ ubuntu-latest, windows-latest ] - jdk: [ 8, 11, 17, 21 ] - env: - DISABLE_FILE_SYSTEM_TEST: true - steps: - - uses: actions/checkout@v3 - with: - ref: "3.3" - - name: "Set up JDK ${{ matrix.jdk }}" - uses: actions/setup-java@v1 - with: - java-version: ${{ matrix.jdk }} - - 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" + ls -al .tmp/zookeeper/apache-zookeeper-bin.tar.gz + - name: Save local zookeeper cache + uses: actions/cache/save@v4 + if: steps.cache-zookeeper.outputs.cache-hit != 'true' with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - restore-keys: | - zookeeper-${{ runner.os }}- - - name: "Test with Maven with Integration Tests" - timeout-minutes: 70 - if: ${{ startsWith( matrix.os, 'ubuntu') }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -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: "Test with Maven without Integration Tests" - timeout-minutes: 90 - if: ${{ startsWith( matrix.os, 'windows') }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco -D"http.keepAlive=false" -D"maven.wagon.http.pool=false" -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=true -D"checkstyle.skip=false" -D"checkstyle_unix.skip=true" -D"rat.skip=false" -D"maven.javadoc.skip=true" -D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper" - - unit-test-fastjson2: - needs: [build-source, unit-test-prepare] - name: "Unit Test On ${{ matrix.os }} (JDK: ${{ matrix.jdk }}, Serialization: fastjson2)" - runs-on: ${{ matrix.os }} + unit-test-job: + name: Unit Test (Job-${{matrix.job_id}}, Os-${{ matrix.os }}, Jdk-${{ matrix.jdk }}, Ser-${{ matrix.ser }}) + needs: [ build-source, unit-test-prepare ] + runs-on: ${{ matrix.os }}-latest + timeout-minutes: 60 + env: + ZOOKEEPER_VERSION: 3.6.4 + DISABLE_FILE_SYSTEM_TEST: true + MAVEN_SUREFIRE_ADD_OPENS: true + DUBBO_DEFAULT_SERIALIZATION: ${{ matrix.ser }} strategy: fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest ] + os: [ ubuntu, windows ] jdk: [ 8, 11, 17, 21 ] - env: - DISABLE_FILE_SYSTEM_TEST: true - DUBBO_DEFAULT_SERIALIZATION: fastjson2 - MAVEN_SUREFIRE_ADD_OPENS: true + ser: [ hessian2, fastjson2 ] + job_id: [ 1, 2 ] steps: - - uses: actions/checkout@v3 - - name: "Set up JDK ${{ matrix.jdk }}" - uses: actions/setup-java@v3 + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ env.DUBBO_BRANCH }} + - name: Set up JDK + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: zulu java-version: ${{ matrix.jdk }} - - uses: actions/cache@v3 - name: "Cache local Maven repository" + - name: Restore local maven repository + uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }} + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- - - uses: actions/cache@v3 - name: "Cache zookeeper binary archive" - id: "cache-zookeeper" + - name: Restore Dubbo cache + uses: actions/cache/restore@v4 + with: + path: ~/.m2/repository/org/apache/dubbo + key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} + - name: Cache zookeeper binary archive + uses: actions/cache@v4 + id: cache-zookeeper with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} restore-keys: | zookeeper-${{ runner.os }}- - - name: "Test with Maven with Integration Tests on JDK 8" - timeout-minutes: 70 - if: ${{ startsWith( matrix.os, 'ubuntu') && matrix.jdk == '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco,'!jdk15ge' -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -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: "Test with Maven without Integration Tests on JDK 8" - timeout-minutes: 90 - if: ${{ startsWith( matrix.os, 'windows') && matrix.jdk == '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -P"jacoco,'!jdk15ge'" -D"http.keepAlive=false" -D"maven.wagon.http.pool=false" -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=true -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: "Test with Maven with Integration Tests" - timeout-minutes: 70 - if: ${{ startsWith( matrix.os, 'ubuntu') && matrix.jdk != '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco,jdk15ge-simple,'!jdk15ge' -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -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: "Test with Maven without Integration Tests" - timeout-minutes: 90 - if: ${{ startsWith( matrix.os, 'windows') && matrix.jdk != '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -P"jacoco,jdk15ge-simple,'!jdk15ge'" -D"http.keepAlive=false" -D"maven.wagon.http.pool=false" -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=true -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: Download test list + uses: actions/download-artifact@v3 + with: + name: unit-test-list + path: test/jobs/ + - name: Test with maven on ${{ matrix.os }} + timeout-minutes: 60 + run: | + set -o pipefail + modules=$(cat test/jobs/test_modules_${{ matrix.job_id }}.txt) + ./mvnw ${{ env.MAVEN_ARGS }} clean test verify -Pjdk15ge-simple,'!jdk15ge','!demo',skip-spotless -pl "$modules" -DtrimStackTrace=false -Dmaven.test.skip=false -Drat.skip=false -Dflatten.skip=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper 2>&1 | tee >(grep -n -B 5 -A 200 "FAILURE! -- in" > test_errors.log) + - name: Print test error log + if: failure() + run: cat test_errors.log samples-test-prepare: + name: Preparation for Sample Test runs-on: ubuntu-latest env: - JOB_COUNT: 5 + JOB_COUNT: 3 steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-samples' + repository: oxsean/dubbo-samples ref: master - - name: "Prepare test list" - run: | - bash ./test/scripts/prepare-test.sh - - name: "Upload test list" + - name: Prepare test list + run: bash ./test/scripts/prepare-test.sh + - name: Upload test list uses: actions/upload-artifact@v3 with: name: samples-test-list path: test/jobs samples-test-job: - needs: [build-source, samples-test-prepare] - name: "Samples Test on ubuntu-latest (JobId: ${{matrix.job_id}} JavaVer: ${{matrix.jdk}})" + name: Samples Test (Job-${{matrix.job_id}}, Java-${{ matrix.jdk }}) + needs: [ build-source, samples-test-prepare ] runs-on: ubuntu-latest - timeout-minutes: 90 + timeout-minutes: 60 env: - JAVA_VER: ${{matrix.jdk}} - TEST_CASE_FILE: jobs/testjob_${{matrix.job_id}}.txt + JAVA_VER: ${{ matrix.jdk }} + TEST_CASE_FILE: jobs/testjob_${{ matrix.job_id }}.txt strategy: fail-fast: false matrix: jdk: [ 8, 11, 17, 21 ] - job_id: [1, 2, 3, 4, 5] + job_id: [ 1, 2, 3 ] steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-samples' + repository: oxsean/dubbo-samples ref: master - - name: "Cache local Maven repository" - uses: actions/cache@v3 + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }} + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- - - name: "Restore Dubbo cache" - uses: actions/cache@v3 + - name: Restore Dubbo cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository/org/apache/dubbo key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - restore-keys: | - ${{ runner.os }}-dubbo-snapshot-${{ github.sha }} - ${{ runner.os }}-dubbo-snapshot- - - name: "Download test list" + - name: Download test list uses: actions/download-artifact@v3 with: name: samples-test-list path: test/jobs/ - - name: "Set up JDK ${{matrix.jdk}}" - uses: actions/setup-java@v1 + - name: Set up JDK ${{ matrix.jdk }} + uses: actions/setup-java@v4 with: - java-version: ${{matrix.jdk}} - - name: "Init Candidate Versions" + distribution: zulu + java-version: ${{ matrix.jdk }} + - name: Init Candidate Versions run: | - DUBBO_VERSION="${{needs.build-source.outputs.version}}" + DUBBO_VERSION="${{ needs.build-source.outputs.version }}" CANDIDATE_VERSIONS="dubbo.version:$DUBBO_VERSION;compiler.version:$DUBBO_VERSION;$CANDIDATE_VERSIONS;dubbo.compiler.version:$DUBBO_VERSION" echo "CANDIDATE_VERSIONS=$CANDIDATE_VERSIONS" >> $GITHUB_ENV - - name: "Build test image" - run: | - cd test && bash ./build-test-image.sh - - name: "Run tests" + - name: Build test image + run: cd test && bash ./build-test-image.sh + - name: Run tests run: cd test && bash ./run-tests.sh - - name: "Upload test result" - if: always() + - name: Upload test result uses: actions/upload-artifact@v3 with: - name: samples-test-result-${{matrix.jdk}} + name: samples-test-result-${{ matrix.jdk }} path: test/jobs/*-result* samples-test-result: - needs: [samples-test-job] - if: always() + needs: [ samples-test-job ] runs-on: ubuntu-latest env: - JAVA_VER: ${{matrix.jdk}} + JAVA_VER: ${{ matrix.jdk }} strategy: matrix: jdk: [ 8, 11, 17, 21 ] steps: - - uses: actions/checkout@v3 + - name: Checkout samples code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-samples' + repository: oxsean/dubbo-samples ref: master - - name: "Download test result" + - name: Download test result uses: actions/download-artifact@v3 with: - name: samples-test-result-${{matrix.jdk}} + name: samples-test-result-${{ matrix.jdk }} path: test/jobs/ - - name: "Merge test result" + - name: Merge test result run: ./test/scripts/merge-test-results.sh integration-test-prepare: + name: Preparation for Integration Test runs-on: ubuntu-latest env: - JOB_COUNT: 5 + JOB_COUNT: 3 steps: - - uses: actions/checkout@v3 + - name: Checkout integration code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-integration-cases' + repository: oxsean/dubbo-integration-cases ref: main - - name: "Prepare test list" - run: | - bash ./test/scripts/prepare-test.sh - - name: "Upload test list" + - name: Prepare test list + run: bash ./test/scripts/prepare-test.sh + - name: Upload test list uses: actions/upload-artifact@v3 with: name: integration-test-list path: test/jobs integration-test-job: - needs: [build-source, integration-test-prepare] - name: "Integration Test on ubuntu-latest (JobId: ${{matrix.job_id}} JavaVer: ${{matrix.jdk}})" + name: Integration Test (Job-${{ matrix.job_id }}, Java-${{ matrix.jdk }}) + needs: [ build-source, integration-test-prepare ] runs-on: ubuntu-latest - timeout-minutes: 90 + timeout-minutes: 60 env: - JAVA_VER: ${{matrix.jdk}} - TEST_CASE_FILE: jobs/testjob_${{matrix.job_id}}.txt + JAVA_VER: ${{ matrix.jdk }} + TEST_CASE_FILE: jobs/testjob_${{ matrix.job_id }}.txt strategy: fail-fast: false matrix: jdk: [ 8, 11, 17, 21 ] - job_id: [1, 2, 3, 4, 5] + job_id: [ 1, 2, 3 ] steps: - - uses: actions/checkout@v3 + - name: Checkout integration code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-integration-cases' + repository: oxsean/dubbo-integration-cases ref: main - - name: "Cache local Maven repository" - uses: actions/cache@v3 + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }} + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- - - name: "Restore Dubbo cache" - uses: actions/cache@v3 + - name: Restore Dubbo cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository/org/apache/dubbo key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - restore-keys: | - ${{ runner.os }}-dubbo-snapshot-${{ github.sha }} - ${{ runner.os }}-dubbo-snapshot- - - name: "Download test list" + - name: Download test list uses: actions/download-artifact@v3 with: name: integration-test-list path: test/jobs/ - - name: "Set up JDK ${{matrix.jdk}}" - uses: actions/setup-java@v1 + - name: Set up JDK ${{ matrix.jdk }} + uses: actions/setup-java@v4 with: - java-version: ${{matrix.jdk}} - - name: "Init Candidate Versions" + distribution: zulu + java-version: ${{ matrix.jdk }} + - name: Init Candidate Versions run: | - DUBBO_VERSION="${{needs.build-source.outputs.version}}" + DUBBO_VERSION="${{ needs.build-source.outputs.version }}" CANDIDATE_VERSIONS="dubbo.version:$DUBBO_VERSION;compiler.version:$DUBBO_VERSION;$CANDIDATE_VERSIONS;dubbo.compiler.version:$DUBBO_VERSION" echo "CANDIDATE_VERSIONS=$CANDIDATE_VERSIONS" >> $GITHUB_ENV - - name: "Build test image" - run: | - cd test && bash ./build-test-image.sh - - name: "Run tests" + - name: Build test image + run: cd test && bash ./build-test-image.sh + - name: Run tests run: cd test && bash ./run-tests.sh - - name: "Upload test result" - if: always() + - name: Upload test result uses: actions/upload-artifact@v3 with: - name: integration-test-result-${{matrix.jdk}} + name: integration-test-result-${{ matrix.jdk }} path: test/jobs/*-result* integration-test-result: - needs: [integration-test-job] - if: always() + needs: [ integration-test-job ] runs-on: ubuntu-latest env: - JAVA_VER: ${{matrix.jdk}} + JAVA_VER: ${{ matrix.jdk }} strategy: matrix: jdk: [ 8, 11, 17, 21 ] steps: - - uses: actions/checkout@v3 + - name: Checkout integration code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-integration-cases' + repository: oxsean/dubbo-integration-cases ref: main - - name: "Download test result" + - name: Download test result uses: actions/download-artifact@v3 with: - name: integration-test-result-${{matrix.jdk}} + name: integration-test-result-${{ matrix.jdk }} path: test/jobs/ - - name: "Merge test result" + - name: Merge test result run: ./test/scripts/merge-test-results.sh error-code-inspecting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.3" - path: "./dubbo" - - - uses: actions/checkout@v3 + ref: ${{ env.DUBBO_BRANCH }} + path: ./dubbo + - name: Checkout code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-test-tools' + repository: apache/dubbo-test-tools ref: main - path: "./dubbo-test-tools" - - - name: "Set up JDK 21" - uses: actions/setup-java@v3 + path: ./dubbo-test-tools + - name: Set up JDK 21 + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: zulu java-version: 21 - - - name: "Compile Dubbo (Linux)" + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 + id: cache-maven-repository + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Compile Dubbo (Linux) run: | cd ${{ github.workspace }}/dubbo - ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean install -DskipTests=true -DskipIntegrationTests=true -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.skip=true -Dmaven.javadoc.skip=true - - name: "Run Error Code Inspecting" + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true + - name: Run Error Code Inspecting env: DUBBO_ECI_REPORT_AS_ERROR: true run: | cd ${{ github.workspace }}/dubbo-test-tools/dubbo-error-code-inspector - ../mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C package exec:java -Ddubbo.eci.report-as-error=${DUBBO_ECI_REPORT_AS_ERROR} -Dmaven.test.skip=true -Dmaven.test.skip.exec=true -Ddubbo.eci.path=${{ github.workspace }}/dubbo - - - name: "Upload error code inspection result" + ../mvnw ${{ env.MAVEN_ARGS }} -T 2C package exec:java -Ddubbo.eci.report-as-error=${DUBBO_ECI_REPORT_AS_ERROR} -Dmaven.test.skip=true -Ddubbo.eci.path=${{ github.workspace }}/dubbo + - name: Upload error code inspection result # always() should not be used here, since we don't need to handle the 'canceled' situation. if: ${{ success() || failure() }} uses: actions/upload-artifact@v3 with: - name: "error-inspection-result" + name: error-inspection-result path: ${{ github.workspace }}/dubbo-test-tools/dubbo-error-code-inspector/error-inspection-result.txt native-image-inspecting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.3" - path: "./dubbo" - - - name: "Setup GraalVM environment" + ref: ${{ env.DUBBO_BRANCH }} + path: ./dubbo + - name: Setup GraalVM environment uses: graalvm/setup-graalvm@v1 with: - version: '22.3.0' - java-version: '17' - components: 'native-image' + version: 22.3.0 + java-version: 17 + components: native-image github-token: ${{ secrets.GITHUB_TOKEN }} - native-image-job-reports: 'true' - - - name: "Setup Zookeeper environment" + native-image-job-reports: true + - name: Setup Zookeeper environment run: | wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz mv apache-zookeeper-3.8.4-bin/conf/zoo_sample.cfg apache-zookeeper-3.8.4-bin/conf/zoo.cfg apache-zookeeper-3.8.4-bin/bin/zkServer.sh start - - - name: "Check environment" + - name: Check environment run: | java --version native-image --version - - - name: "Compile Dubbo (Linux)" + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Compile Dubbo (Linux) run: | cd ${{ github.workspace }}/dubbo - ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.skip=true - - - name: "Compile and run Dubbo demo for native (Linux)" + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true + - name: Compile and run Dubbo demo for native (Linux) run: | cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface MVNW="${{ github.workspace }}/dubbo/mvnw ${{ env.MAVEN_ARGS }} -T 2C -Dmaven.test.skip=true" $MVNW clean install cd ../dubbo-demo-native-provider - $MVNW clean package -P native native:compile + $MVNW clean package -P native native:compile nohup ./target/dubbo-demo-native-provider & cd ../dubbo-demo-native-consumer $MVNW clean package -P native native:compile diff --git a/.github/workflows/release-test.yml b/.github/workflows/release-test.yml index dea1cf2d4cf..f0be6660c31 100644 --- a/.github/workflows/release-test.yml +++ b/.github/workflows/release-test.yml @@ -9,66 +9,110 @@ on: permissions: contents: read +defaults: + run: + shell: bash + env: + DUBBO_BRANCH: ${{ github.ref }} FORK_COUNT: 2 FAIL_FAST: 0 SHOW_ERROR_DETAIL: 1 - #multi-version size limit VERSIONS_LIMIT: 4 ALL_REMOTE_VERSION: true - CANDIDATE_VERSIONS: ' + JACOCO_ENABLE: false + CANDIDATE_VERSIONS: >- spring.version:5.3.24; spring-boot.version:2.7.6; - ' + MAVEN_OPTS: >- + -XX:+UseG1GC + -XX:InitiatingHeapOccupancyPercent=45 + -XX:+UseStringDeduplication + -XX:-TieredCompilation + -XX:TieredStopAtLevel=1 + -Dmaven.javadoc.skip=true + -Dmaven.wagon.http.retryHandler.count=5 + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + MAVEN_ARGS: >- + -e + --batch-mode + --no-snapshot-updates + --no-transfer-progress + --fail-fast jobs: - license: + check-license: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ env.DUBBO_BRANCH }} - name: Check License uses: apache/skywalking-eyes@main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + build-source: - runs-on: ubuntu-latest + name: Build Dubbo on ${{ matrix.os }} + runs-on: ${{ matrix.os }}-latest + strategy: + matrix: + os: [ ubuntu, windows ] outputs: version: ${{ steps.dubbo-version.outputs.version }} steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: + ref: ${{ env.DUBBO_BRANCH }} path: dubbo - - uses: actions/setup-java@v3 + - name: Set up JDK + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: zulu java-version: 21 - - uses: actions/cache@v3 - name: "Cache local Maven repository" + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 + id: cache-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- - - name: "Dubbo cache" - uses: actions/cache@v3 + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + - name: Restore common local maven repository cache + uses: actions/cache/restore@v4 + if: steps.cache-maven-repository.outputs.cache-hit != 'true' with: - path: ~/.m2/repository/org/apache/dubbo - key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - - name: "Build Dubbo with Maven" + path: ~/.m2/repository + key: ${{ runner.os }}-maven- + - name: Clean dubbo cache + run: rm -rf ~/.m2/repository/org/apache/dubbo + - name: Build Dubbo with maven run: | cd ./dubbo - ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean source:jar install -Pjacoco,checkstyle -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.count=5 -Dmaven.test.skip=true -Dmaven.test.skip.exec=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper - - name: "Pack checkstyle file if failure" + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -Psources,'!demo',skip-spotless,checkstyle -Dmaven.test.skip=true -Dcheckstyle_unix.skip=${{ matrix.os == 'windows' && 'true' || 'false' }} + - name: Save dubbo cache + uses: actions/cache/save@v4 + with: + path: ~/.m2/repository/org/apache/dubbo + key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} + - name: Clean dubbo cache + run: rm -rf ~/.m2/repository/org/apache/dubbo + - name: Save local maven repository cache + uses: actions/cache/save@v4 + if: steps.cache-maven-repository.outputs.cache-hit != 'true' + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + - name: Pack checkstyle file if failure if: failure() run: 7z a ${{ github.workspace }}/checkstyle.zip *checkstyle* -r - - name: "Upload checkstyle file if failure" - if: failure() + - name: Upload checkstyle file if failure uses: actions/upload-artifact@v3 + if: failure() with: - name: "checkstyle-file" + name: checkstyle-file path: ${{ github.workspace }}/checkstyle.zip - - name: "Calculate Dubbo Version" + - name: Calculate Dubbo Version id: dubbo-version run: | REVISION=`awk '/[^<]+<\/revision>/{gsub(/|<\/revision>/,"",$1);print $1;exit;}' ./dubbo/pom.xml` @@ -76,424 +120,399 @@ jobs: echo "dubbo version: $REVISION" unit-test-prepare: - name: " Preparation for Unit Test On ${{ matrix.os }}" - runs-on: ${{ matrix.os }} + name: Preparation for Unit Test on ${{ matrix.os }} + runs-on: ${{ matrix.os }}-latest + env: + JOB_COUNT: 2 + ZOOKEEPER_VERSION: 3.6.4 strategy: - fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest ] - env: - ZOOKEEPER_VERSION: 3.6.3 + os: [ ubuntu, windows ] steps: - - uses: actions/cache@v3 - name: "Cache zookeeper binary archive" - id: "cache-zookeeper" + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ env.DUBBO_BRANCH }} + - name: Prepare test list + if: ${{ matrix.os == 'ubuntu' }} + run: bash ./dubbo-test/scripts/split-modules.sh ${{ env.JOB_COUNT }} '${{ github.workspace }}' + - name: Upload test list + uses: actions/upload-artifact@v3 + if: ${{ matrix.os == 'ubuntu' }} + with: + name: unit-test-list + path: test/jobs + - name: Restore local zookeeper cache + uses: actions/cache/restore@v4 + id: cache-zookeeper with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - restore-keys: | - zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - - name: "Set up msys2 if necessary" - if: ${{ startsWith( matrix.os, 'windows') && steps.cache-zookeeper.outputs.cache-hit != 'true' }} - uses: msys2/setup-msys2@v2 - 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} + - name: Download zookeeper binary archive on ${{ matrix.os }} + if: steps.cache-zookeeper.outputs.cache-hit != 'true' + env: + MIRRORS: >- + https://archive.apache.org/dist + https://apache.website-solution.net + http://apache.stu.edu.tw + http://ftp.jaist.ac.jp/pub/apache + http://apache.mirror.cdnetworks.com + http://mirror.apache-kr.org/apache 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 + cd '${{ github.workspace }}' + mkdir -p .tmp/zookeeper + for mirror in $MIRRORS; do + curl -sL "$mirror/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz" -o .tmp/zookeeper/apache-zookeeper-bin.tar.gz && break + done echo "list the downloaded zookeeper binary archive" - ls -al ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz - - unit-test: - needs: [build-source, unit-test-prepare] - name: "Unit Test On ${{ matrix.os }} (JDK: ${{ matrix.jdk }})" - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ ubuntu-latest, windows-latest ] - jdk: [ 8, 11, 17, 21 ] - env: - DISABLE_FILE_SYSTEM_TEST: true - steps: - - uses: actions/checkout@v3 - - name: "Set up JDK ${{ matrix.jdk }}" - uses: actions/setup-java@v3 - with: - java-version: ${{ matrix.jdk }} - distribution: 'zulu' - - 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" + ls -al .tmp/zookeeper/apache-zookeeper-bin.tar.gz + - name: Save local zookeeper cache + uses: actions/cache/save@v4 + if: steps.cache-zookeeper.outputs.cache-hit != 'true' with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - restore-keys: | - zookeeper-${{ runner.os }}- - - name: "Test with Maven with Integration Tests" - timeout-minutes: 70 - if: ${{ startsWith( matrix.os, 'ubuntu') }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -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: "Test with Maven without Integration Tests" - timeout-minutes: 90 - if: ${{ startsWith( matrix.os, 'windows') }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco -D"http.keepAlive=false" -D"maven.wagon.http.pool=false" -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=true -D"checkstyle.skip=false" -D"checkstyle_unix.skip=true" -D"rat.skip=false" -D"maven.javadoc.skip=true" -D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper" - - unit-test-fastjson2: - needs: [build-source, unit-test-prepare] - name: "Unit Test On ${{ matrix.os }} (JDK: ${{ matrix.jdk }}, Serialization: fastjson2)" - runs-on: ${{ matrix.os }} + unit-test-job: + name: Unit Test (Job-${{matrix.job_id}}, Os-${{ matrix.os }}, Jdk-${{ matrix.jdk }}, Ser-${{ matrix.ser }}) + needs: [ build-source, unit-test-prepare ] + runs-on: ${{ matrix.os }}-latest + timeout-minutes: 60 + env: + ZOOKEEPER_VERSION: 3.6.4 + DISABLE_FILE_SYSTEM_TEST: true + MAVEN_SUREFIRE_ADD_OPENS: true + DUBBO_DEFAULT_SERIALIZATION: ${{ matrix.ser }} strategy: fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest ] + os: [ ubuntu, windows ] jdk: [ 8, 11, 17, 21 ] - env: - DISABLE_FILE_SYSTEM_TEST: true - DUBBO_DEFAULT_SERIALIZATION: fastjson2 - MAVEN_SUREFIRE_ADD_OPENS: true + ser: [ hessian2, fastjson2 ] + job_id: [ 1, 2 ] steps: - - uses: actions/checkout@v3 - - name: "Set up JDK ${{ matrix.jdk }}" - uses: actions/setup-java@v3 + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ env.DUBBO_BRANCH }} + - name: Set up JDK + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: zulu java-version: ${{ matrix.jdk }} - - uses: actions/cache@v3 - name: "Cache local Maven repository" + - name: Restore local maven repository + uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }} + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- - - uses: actions/cache@v3 - name: "Cache zookeeper binary archive" - id: "cache-zookeeper" + - name: Restore Dubbo cache + uses: actions/cache/restore@v4 + with: + path: ~/.m2/repository/org/apache/dubbo + key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} + - name: Cache zookeeper binary archive + uses: actions/cache@v4 + id: cache-zookeeper with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} restore-keys: | zookeeper-${{ runner.os }}- - - name: "Test with Maven with Integration Tests on JDK 8" - timeout-minutes: 70 - if: ${{ startsWith( matrix.os, 'ubuntu') && matrix.jdk == '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco,'!jdk15ge' -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -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: "Test with Maven without Integration Tests on JDK 8" - timeout-minutes: 90 - if: ${{ startsWith( matrix.os, 'windows') && matrix.jdk == '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -P"jacoco,'!jdk15ge'" -D"http.keepAlive=false" -D"maven.wagon.http.pool=false" -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=true -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: "Test with Maven with Integration Tests" - timeout-minutes: 70 - if: ${{ startsWith( matrix.os, 'ubuntu') && matrix.jdk != '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -Pjacoco,jdk15ge-simple,'!jdk15ge' -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -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: "Test with Maven without Integration Tests" - timeout-minutes: 90 - if: ${{ startsWith( matrix.os, 'windows') && matrix.jdk != '8' }} - run: ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -P"jacoco,jdk15ge-simple,'!jdk15ge'" -D"http.keepAlive=false" -D"maven.wagon.http.pool=false" -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=true -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: Download test list + uses: actions/download-artifact@v3 + with: + name: unit-test-list + path: test/jobs/ + - name: Test with maven on ${{ matrix.os }} + timeout-minutes: 60 + run: | + set -o pipefail + modules=$(cat test/jobs/test_modules_${{ matrix.job_id }}.txt) + ./mvnw ${{ env.MAVEN_ARGS }} clean test verify -Pjdk15ge-simple,'!jdk15ge','!demo',skip-spotless -pl "$modules" -DtrimStackTrace=false -Dmaven.test.skip=false -Drat.skip=false -Dflatten.skip=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper 2>&1 | tee >(grep -n -B 5 -A 200 "FAILURE! -- in" > test_errors.log) + - name: Print test error log + if: failure() + run: cat test_errors.log samples-test-prepare: + name: Preparation for Sample Test runs-on: ubuntu-latest env: - JOB_COUNT: 5 + JOB_COUNT: 3 steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-samples' + repository: oxsean/dubbo-samples ref: master - - name: "Prepare test list" - run: | - bash ./test/scripts/prepare-test.sh - - name: "Upload test list" + - name: Prepare test list + run: bash ./test/scripts/prepare-test.sh + - name: Upload test list uses: actions/upload-artifact@v3 with: name: samples-test-list path: test/jobs samples-test-job: - needs: [build-source, samples-test-prepare] - name: "Samples Test on ubuntu-latest (JobId: ${{matrix.job_id}} JavaVer: ${{matrix.jdk}})" + name: Samples Test (Job-${{matrix.job_id}}, Java-${{ matrix.jdk }}) + needs: [ build-source, samples-test-prepare ] runs-on: ubuntu-latest - timeout-minutes: 90 + timeout-minutes: 60 env: - JAVA_VER: ${{matrix.jdk}} - TEST_CASE_FILE: jobs/testjob_${{matrix.job_id}}.txt + JAVA_VER: ${{ matrix.jdk }} + TEST_CASE_FILE: jobs/testjob_${{ matrix.job_id }}.txt strategy: fail-fast: false matrix: jdk: [ 8, 11, 17, 21 ] - job_id: [1, 2, 3, 4, 5] + job_id: [ 1, 2, 3 ] steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-samples' + repository: oxsean/dubbo-samples ref: master - - name: "Cache local Maven repository" - uses: actions/cache@v3 + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }} + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- - - name: "Restore Dubbo cache" - uses: actions/cache@v3 + - name: Restore Dubbo cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository/org/apache/dubbo key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - restore-keys: | - ${{ runner.os }}-dubbo-snapshot-${{ github.sha }} - ${{ runner.os }}-dubbo-snapshot- - - name: "Download test list" + - name: Download test list uses: actions/download-artifact@v3 with: name: samples-test-list path: test/jobs/ - - name: "Set up JDK ${{matrix.jdk}}" - uses: actions/setup-java@v1 + - name: Set up JDK ${{ matrix.jdk }} + uses: actions/setup-java@v4 with: - java-version: ${{matrix.jdk}} - - name: "Init Candidate Versions" + distribution: zulu + java-version: ${{ matrix.jdk }} + - name: Init Candidate Versions run: | - DUBBO_VERSION="${{needs.build-source.outputs.version}}" + DUBBO_VERSION="${{ needs.build-source.outputs.version }}" CANDIDATE_VERSIONS="dubbo.version:$DUBBO_VERSION;compiler.version:$DUBBO_VERSION;$CANDIDATE_VERSIONS;dubbo.compiler.version:$DUBBO_VERSION" echo "CANDIDATE_VERSIONS=$CANDIDATE_VERSIONS" >> $GITHUB_ENV - - name: "Build test image" - run: | - cd test && bash ./build-test-image.sh - - name: "Run tests" + - name: Build test image + run: cd test && bash ./build-test-image.sh + - name: Run tests run: cd test && bash ./run-tests.sh - - name: "Upload test result" - if: always() + - name: Upload test result uses: actions/upload-artifact@v3 with: - name: samples-test-result-${{matrix.jdk}} + name: samples-test-result-${{ matrix.jdk }} path: test/jobs/*-result* samples-test-result: - needs: [samples-test-job] - if: always() + needs: [ samples-test-job ] runs-on: ubuntu-latest env: - JAVA_VER: ${{matrix.jdk}} + JAVA_VER: ${{ matrix.jdk }} strategy: matrix: jdk: [ 8, 11, 17, 21 ] steps: - - uses: actions/checkout@v3 + - name: Checkout samples code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-samples' + repository: oxsean/dubbo-samples ref: master - - name: "Download test result" + - name: Download test result uses: actions/download-artifact@v3 with: - name: samples-test-result-${{matrix.jdk}} + name: samples-test-result-${{ matrix.jdk }} path: test/jobs/ - - name: "Merge test result" + - name: Merge test result run: ./test/scripts/merge-test-results.sh integration-test-prepare: + name: Preparation for Integration Test runs-on: ubuntu-latest env: - JOB_COUNT: 5 + JOB_COUNT: 3 steps: - - uses: actions/checkout@v3 + - name: Checkout integration code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-integration-cases' + repository: oxsean/dubbo-integration-cases ref: main - - name: "Prepare test list" - run: | - bash ./test/scripts/prepare-test.sh - - name: "Upload test list" + - name: Prepare test list + run: bash ./test/scripts/prepare-test.sh + - name: Upload test list uses: actions/upload-artifact@v3 with: name: integration-test-list path: test/jobs integration-test-job: - needs: [build-source, integration-test-prepare] - name: "Integration Test on ubuntu-latest (JobId: ${{matrix.job_id}} JavaVer: ${{matrix.jdk}})" + name: Integration Test (Job-${{ matrix.job_id }}, Java-${{ matrix.jdk }}) + needs: [ build-source, integration-test-prepare ] runs-on: ubuntu-latest - timeout-minutes: 90 + timeout-minutes: 60 env: - JAVA_VER: ${{matrix.jdk}} - TEST_CASE_FILE: jobs/testjob_${{matrix.job_id}}.txt + JAVA_VER: ${{ matrix.jdk }} + TEST_CASE_FILE: jobs/testjob_${{ matrix.job_id }}.txt strategy: fail-fast: false matrix: jdk: [ 8, 11, 17, 21 ] - job_id: [1, 2, 3, 4, 5] + job_id: [ 1, 2, 3 ] steps: - - uses: actions/checkout@v3 + - name: Checkout integration code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-integration-cases' + repository: oxsean/dubbo-integration-cases ref: main - - name: "Cache local Maven repository" - uses: actions/cache@v3 + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }} + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | - ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- - - name: "Restore Dubbo cache" - uses: actions/cache@v3 + - name: Restore Dubbo cache + uses: actions/cache/restore@v4 with: path: ~/.m2/repository/org/apache/dubbo key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - restore-keys: | - ${{ runner.os }}-dubbo-snapshot-${{ github.sha }} - ${{ runner.os }}-dubbo-snapshot- - - name: "Download test list" + - name: Download test list uses: actions/download-artifact@v3 with: name: integration-test-list path: test/jobs/ - - name: "Set up JDK ${{matrix.jdk}}" - uses: actions/setup-java@v1 + - name: Set up JDK ${{ matrix.jdk }} + uses: actions/setup-java@v4 with: - java-version: ${{matrix.jdk}} - - name: "Init Candidate Versions" + distribution: zulu + java-version: ${{ matrix.jdk }} + - name: Init Candidate Versions run: | - DUBBO_VERSION="${{needs.build-source.outputs.version}}" + DUBBO_VERSION="${{ needs.build-source.outputs.version }}" CANDIDATE_VERSIONS="dubbo.version:$DUBBO_VERSION;compiler.version:$DUBBO_VERSION;$CANDIDATE_VERSIONS;dubbo.compiler.version:$DUBBO_VERSION" echo "CANDIDATE_VERSIONS=$CANDIDATE_VERSIONS" >> $GITHUB_ENV - - name: "Build test image" - run: | - cd test && bash ./build-test-image.sh - - name: "Run tests" + - name: Build test image + run: cd test && bash ./build-test-image.sh + - name: Run tests run: cd test && bash ./run-tests.sh - - name: "Upload test result" - if: always() + - name: Upload test result uses: actions/upload-artifact@v3 with: - name: integration-test-result-${{matrix.jdk}} + name: integration-test-result-${{ matrix.jdk }} path: test/jobs/*-result* integration-test-result: - needs: [integration-test-job] - if: always() + needs: [ integration-test-job ] runs-on: ubuntu-latest env: - JAVA_VER: ${{matrix.jdk}} + JAVA_VER: ${{ matrix.jdk }} strategy: matrix: jdk: [ 8, 11, 17, 21 ] steps: - - uses: actions/checkout@v3 + - name: Checkout integration code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-integration-cases' + repository: oxsean/dubbo-integration-cases ref: main - - name: "Download test result" + - name: Download test result uses: actions/download-artifact@v3 with: - name: integration-test-result-${{matrix.jdk}} + name: integration-test-result-${{ matrix.jdk }} path: test/jobs/ - - name: "Merge test result" + - name: Merge test result run: ./test/scripts/merge-test-results.sh error-code-inspecting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - path: "./dubbo" - - - uses: actions/checkout@v3 + ref: ${{ env.DUBBO_BRANCH }} + path: ./dubbo + - name: Checkout code + uses: actions/checkout@v4 with: - repository: 'apache/dubbo-test-tools' + repository: apache/dubbo-test-tools ref: main - path: "./dubbo-test-tools" - - - name: "Set up JDK 21" - uses: actions/setup-java@v3 + path: ./dubbo-test-tools + - name: Set up JDK 21 + uses: actions/setup-java@v4 with: + distribution: zulu java-version: 21 - distribution: 'zulu' - - - name: "Compile Dubbo (Linux)" + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 + id: cache-maven-repository + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Compile Dubbo (Linux) run: | cd ${{ github.workspace }}/dubbo - ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean install -DskipTests=true -DskipIntegrationTests=true -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.skip=true -Dmaven.javadoc.skip=true - - name: "Run Error Code Inspecting" + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true + - name: Run Error Code Inspecting env: DUBBO_ECI_REPORT_AS_ERROR: true run: | cd ${{ github.workspace }}/dubbo-test-tools/dubbo-error-code-inspector - ../mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C package exec:java -Ddubbo.eci.report-as-error=${DUBBO_ECI_REPORT_AS_ERROR} -Dmaven.test.skip=true -Dmaven.test.skip.exec=true -Ddubbo.eci.path=${{ github.workspace }}/dubbo - - - name: "Upload error code inspection result" + ../mvnw ${{ env.MAVEN_ARGS }} -T 2C package exec:java -Ddubbo.eci.report-as-error=${DUBBO_ECI_REPORT_AS_ERROR} -Dmaven.test.skip=true -Ddubbo.eci.path=${{ github.workspace }}/dubbo + - name: Upload error code inspection result # always() should not be used here, since we don't need to handle the 'canceled' situation. if: ${{ success() || failure() }} uses: actions/upload-artifact@v3 with: - name: "error-inspection-result" + name: error-inspection-result path: ${{ github.workspace }}/dubbo-test-tools/dubbo-error-code-inspector/error-inspection-result.txt native-image-inspecting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - path: "./dubbo" - - - name: "Setup GraalVM environment" + ref: ${{ env.DUBBO_BRANCH }} + path: ./dubbo + - name: Setup GraalVM environment uses: graalvm/setup-graalvm@v1 with: - version: '22.3.0' - java-version: '17' - components: 'native-image' + version: 22.3.0 + java-version: 17 + components: native-image github-token: ${{ secrets.GITHUB_TOKEN }} - native-image-job-reports: 'true' - - - name: "Setup Zookeeper environment" + native-image-job-reports: true + - name: Setup Zookeeper environment run: | wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz mv apache-zookeeper-3.8.4-bin/conf/zoo_sample.cfg apache-zookeeper-3.8.4-bin/conf/zoo.cfg apache-zookeeper-3.8.4-bin/bin/zkServer.sh start - - - name: "Check environment" + - name: Check environment run: | java --version native-image --version - - - name: "Compile Dubbo (Linux)" + - name: Restore local maven repository cache + uses: actions/cache/restore@v4 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Compile Dubbo (Linux) run: | cd ${{ github.workspace }}/dubbo - ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.skip=true - - - name: "Compile and run Dubbo demo for native (Linux)" + ./mvnw ${{ env.MAVEN_ARGS }} -T 2C clean install -P '!demo',skip-spotless -Dmaven.test.skip=true + - name: Compile and run Dubbo demo for native (Linux) run: | cd ${{ github.workspace }}/dubbo/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface MVNW="${{ github.workspace }}/dubbo/mvnw ${{ env.MAVEN_ARGS }} -T 2C -Dmaven.test.skip=true" $MVNW clean install cd ../dubbo-demo-native-provider - $MVNW clean package -P native native:compile + $MVNW clean package -P native native:compile nohup ./target/dubbo-demo-native-provider & cd ../dubbo-demo-native-consumer $MVNW clean package -P native native:compile diff --git a/dubbo-test/scripts/split-modules.sh b/dubbo-test/scripts/split-modules.sh index 1bc1fe47de0..97d93ad416a 100644 --- a/dubbo-test/scripts/split-modules.sh +++ b/dubbo-test/scripts/split-modules.sh @@ -18,12 +18,12 @@ readarray -t modules < <(find . -name "pom.xml" | while read -r pom; do module_dir=$(dirname "$pom") - if [ -d "$module_dir/src/test" ]; then + if [ -d "$module_dir/src/test" ] && [[ "$module_dir" != *"plugin-loom" ]] && [[ "$module_dir" != *"config-spring6" ]]; then echo "${module_dir#./}" fi done) -readarray -t modules < <(printf '%s\n' "${modules[@]}" | shuf --random-source=/dev/zero) +readarray -t modules < <(printf '%s\n' "${modules[@]}" | shuf --random-source=<(yes 1)) jobs=$1 jobs_dir=$2/test/jobs diff --git a/mvnw b/mvnw index b7f064624f8..0e79b70d51a 100755 --- a/mvnw +++ b/mvnw @@ -191,7 +191,7 @@ else else wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" fi - while IFS="=" read key value; do + while IFS='=\r' read key value; do case "$key" in (wrapperUrl) wrapperUrl="$value"; break ;; esac done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"