| name: Release Test |
| |
| on: |
| push: |
| branches: |
| - '**-release' |
| workflow_dispatch: |
| |
| permissions: |
| contents: read |
| |
| defaults: |
| run: |
| shell: bash |
| |
| env: |
| DUBBO_BRANCH: ${{ github.ref }} |
| FORK_COUNT: 2 |
| FAIL_FAST: 0 |
| SHOW_ERROR_DETAIL: 1 |
| VERSIONS_LIMIT: 4 |
| ALL_REMOTE_VERSION: true |
| 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: |
| check-license: |
| runs-on: ubuntu-latest |
| steps: |
| - 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: |
| name: Build Dubbo on ${{ matrix.os }} |
| runs-on: ${{ matrix.os }}-latest |
| strategy: |
| matrix: |
| os: [ ubuntu, windows ] |
| outputs: |
| version: ${{ steps.dubbo-version.outputs.version }} |
| steps: |
| - name: Checkout code |
| uses: actions/checkout@v4 |
| with: |
| ref: ${{ env.DUBBO_BRANCH }} |
| path: dubbo |
| - name: Set up JDK |
| uses: actions/setup-java@v4 |
| with: |
| distribution: zulu |
| java-version: 21 |
| - 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') }} |
| - 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 |
| 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 ${{ 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 |
| uses: actions/upload-artifact@v3 |
| if: failure() |
| with: |
| name: checkstyle-file |
| path: ${{ github.workspace }}/checkstyle.zip |
| - name: Calculate Dubbo Version |
| id: dubbo-version |
| run: | |
| REVISION=`awk '/<revision>[^<]+<\/revision>/{gsub(/<revision>|<\/revision>/,"",$1);print $1;exit;}' ./dubbo/pom.xml` |
| echo "version=$REVISION" >> $GITHUB_OUTPUT |
| echo "dubbo version: $REVISION" |
| |
| unit-test-prepare: |
| name: Preparation for Unit Test on ${{ matrix.os }} |
| runs-on: ${{ matrix.os }}-latest |
| env: |
| JOB_COUNT: 2 |
| ZOOKEEPER_VERSION: 3.6.4 |
| strategy: |
| matrix: |
| os: [ ubuntu, windows ] |
| steps: |
| - 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 }} |
| - 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: | |
| 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 .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 }} |
| 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, windows ] |
| jdk: [ 8, 11, 17, 21 ] |
| ser: [ hessian2, fastjson2 ] |
| job_id: [ 1, 2 ] |
| steps: |
| - name: Checkout code |
| uses: actions/checkout@v4 |
| with: |
| ref: ${{ env.DUBBO_BRANCH }} |
| - name: Set up JDK |
| uses: actions/setup-java@v4 |
| with: |
| distribution: zulu |
| java-version: ${{ matrix.jdk }} |
| - name: Restore local maven repository |
| uses: actions/cache/restore@v4 |
| with: |
| path: ~/.m2/repository |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} |
| restore-keys: | |
| ${{ runner.os }}-maven- |
| - 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: 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: 3 |
| steps: |
| - name: Checkout code |
| uses: actions/checkout@v4 |
| with: |
| repository: oxsean/dubbo-samples |
| ref: master |
| - 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: |
| name: Samples Test (Job-${{matrix.job_id}}, Java-${{ matrix.jdk }}) |
| needs: [ build-source, samples-test-prepare ] |
| runs-on: ubuntu-latest |
| timeout-minutes: 60 |
| env: |
| 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 ] |
| steps: |
| - name: Checkout code |
| uses: actions/checkout@v4 |
| with: |
| repository: oxsean/dubbo-samples |
| ref: master |
| - 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: 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: 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@v4 |
| with: |
| distribution: zulu |
| java-version: ${{ matrix.jdk }} |
| - name: Init Candidate Versions |
| run: | |
| 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 |
| run: cd test && bash ./run-tests.sh |
| - name: Upload test result |
| uses: actions/upload-artifact@v3 |
| with: |
| name: samples-test-result-${{ matrix.jdk }} |
| path: test/jobs/*-result* |
| samples-test-result: |
| needs: [ samples-test-job ] |
| runs-on: ubuntu-latest |
| env: |
| JAVA_VER: ${{ matrix.jdk }} |
| strategy: |
| matrix: |
| jdk: [ 8, 11, 17, 21 ] |
| steps: |
| - name: Checkout samples code |
| uses: actions/checkout@v4 |
| with: |
| repository: oxsean/dubbo-samples |
| ref: master |
| - name: Download test result |
| uses: actions/download-artifact@v3 |
| with: |
| name: samples-test-result-${{ matrix.jdk }} |
| path: test/jobs/ |
| - 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: 3 |
| steps: |
| - name: Checkout integration code |
| uses: actions/checkout@v4 |
| with: |
| repository: oxsean/dubbo-integration-cases |
| ref: main |
| - 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: |
| name: Integration Test (Job-${{ matrix.job_id }}, Java-${{ matrix.jdk }}) |
| needs: [ build-source, integration-test-prepare ] |
| runs-on: ubuntu-latest |
| timeout-minutes: 60 |
| env: |
| 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 ] |
| steps: |
| - name: Checkout integration code |
| uses: actions/checkout@v4 |
| with: |
| repository: oxsean/dubbo-integration-cases |
| ref: main |
| - 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: 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: 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@v4 |
| with: |
| distribution: zulu |
| java-version: ${{ matrix.jdk }} |
| - name: Init Candidate Versions |
| run: | |
| 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 |
| run: cd test && bash ./run-tests.sh |
| - name: Upload test result |
| uses: actions/upload-artifact@v3 |
| with: |
| name: integration-test-result-${{ matrix.jdk }} |
| path: test/jobs/*-result* |
| integration-test-result: |
| needs: [ integration-test-job ] |
| runs-on: ubuntu-latest |
| env: |
| JAVA_VER: ${{ matrix.jdk }} |
| strategy: |
| matrix: |
| jdk: [ 8, 11, 17, 21 ] |
| steps: |
| - name: Checkout integration code |
| uses: actions/checkout@v4 |
| with: |
| repository: oxsean/dubbo-integration-cases |
| ref: main |
| - name: Download test result |
| uses: actions/download-artifact@v3 |
| with: |
| name: integration-test-result-${{ matrix.jdk }} |
| path: test/jobs/ |
| - name: Merge test result |
| run: ./test/scripts/merge-test-results.sh |
| |
| error-code-inspecting: |
| runs-on: ubuntu-latest |
| steps: |
| - name: Checkout code |
| uses: actions/checkout@v4 |
| with: |
| ref: ${{ env.DUBBO_BRANCH }} |
| path: ./dubbo |
| - name: Checkout code |
| uses: actions/checkout@v4 |
| with: |
| repository: apache/dubbo-test-tools |
| ref: main |
| path: ./dubbo-test-tools |
| - name: Set up JDK 21 |
| uses: actions/setup-java@v4 |
| with: |
| distribution: zulu |
| java-version: 21 |
| - 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 ${{ 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 ${{ 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 |
| path: ${{ github.workspace }}/dubbo-test-tools/dubbo-error-code-inspector/error-inspection-result.txt |
| |
| native-image-inspecting: |
| runs-on: ubuntu-latest |
| steps: |
| - name: Checkout code |
| uses: actions/checkout@v4 |
| with: |
| 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 |
| github-token: ${{ secrets.GITHUB_TOKEN }} |
| 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 |
| run: | |
| java --version |
| native-image --version |
| - 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 |
| - 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 |
| nohup ./target/dubbo-demo-native-provider & |
| cd ../dubbo-demo-native-consumer |
| $MVNW clean package -P native native:compile |
| ./target/dubbo-demo-native-consumer |