diff --git a/.github/workflows/build-and-test-pr-origin.yml b/.github/workflows/build-and-test-pr-origin.yml new file mode 100644 index 000000000000..1ebb815797e9 --- /dev/null +++ b/.github/workflows/build-and-test-pr-origin.yml @@ -0,0 +1,622 @@ +name: Build and Test for PR + +on: [ push, pull_request, workflow_dispatch ] + +permissions: + contents: read + +env: + FORK_COUNT: 2 + FAIL_FAST: 0 + SHOW_ERROR_DETAIL: 1 + VERSIONS_LIMIT: 4 + JACOCO_ENABLE: true + 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-format: + name: Check if code needs formatting + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Setup maven + uses: actions/setup-java@v4 + with: + java-version: 21 + distribution: zulu + - name: Check if code aligns with code style + id: check + run: mvn ${{ env.MAVEN_ARGS }} --log-file mvn.log spotless:check + continue-on-error: true + - name: Upload checkstyle result + uses: actions/upload-artifact@v3 + with: + name: checkstyle-result + path: mvn.log + - name: Generate Summary for successful run + if: ${{ steps.check.outcome == 'success' }} + run: | + echo ":ballot_box_with_check: Kudos! No formatting issues found!" >> $GITHUB_STEP_SUMMARY + - name: Generate Summary for failed run + if: ${{ steps.check.outcome == 'failure' }} + run: | + echo "## :negative_squared_cross_mark: Formatting issues found!" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + cat mvn.log | grep "ERROR" | sed 's/Check if code needs formatting Check if code aligns with code style [0-9A-Z:.-]\+//' | sed 's/\[ERROR] //' | head -n -11 >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "Please run \`mvn spotless:apply\` to fix the formatting issues." >> $GITHUB_STEP_SUMMARY + - name: Fail if code needs formatting + if: ${{ steps.check.outcome == 'failure' }} + uses: actions/github-script@v7.0.1 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + core.setFailed("Formatting issues found!") + + check-license: + needs: check-format + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Check License + uses: apache/skywalking-eyes@e1a02359b239bd28de3f6d35fdc870250fa513d5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + distribution: zulu + 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 + - name: Check Dependencies' License + uses: apache/skywalking-eyes/dependency@e1a02359b239bd28de3f6d35fdc870250fa513d5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + config: .licenserc.yaml + mode: check + + build-source: + name: Build Dubbo + needs: check-format + runs-on: ubuntu-latest + outputs: + version: ${{ steps.dubbo-version.outputs.version }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + 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 }} clean install -Psources,'!demo',skip-spotless,checkstyle -Dmaven.test.skip=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper + - 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 class result + run: | + shopt -s globstar + zip ${{ github.workspace }}/class.zip **/target/classes/* -r + - name: Upload class result + uses: actions/upload-artifact@v3 + with: + name: class-file + path: ${{ github.workspace }}/class.zip + - name: Pack checkstyle file if failure + if: failure() + run: zip ${{ 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>/{gsub(/|<\/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 + needs: check-format + runs-on: ubuntu-latest + env: + JOB_COUNT: 3 + ZOOKEEPER_VERSION: 3.6.4 + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Prepare test list + run: bash ./dubbo-test/scripts/split-modules.sh 3 '${{ github.workspace }}' + - name: Upload test list + uses: actions/upload-artifact@v3 + 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 in Linux OS + if: 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: 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}}) + needs: [ check-format, build-source, unit-test-prepare ] + runs-on: ubuntu-latest + timeout-minutes: 30 + env: + ZOOKEEPER_VERSION: 3.6.4 + strategy: + fail-fast: false + matrix: + job_id: [ 1, 2, 3 ] + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Set up JDK + uses: actions/setup-java@v4 + with: + distribution: zulu + java-version: 21 + - 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 + timeout-minutes: 30 + 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) + - name: Print test error log + if: failure() + run: cat test_errors.log + - name: Upload coverage result + uses: actions/upload-artifact@v3 + with: + name: unit-jacoco-result + path: '**/target/site/**/jacoco.xml' + + samples-test-prepare: + name: Preparation for Sample Test + needs: check-format + 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}}) + needs: [ check-format, build-source, samples-test-prepare ] + runs-on: ubuntu-latest + timeout-minutes: 30 + env: + JAVA_VER: 8 + TEST_CASE_FILE: jobs/testjob_${{ matrix.job_id }}.txt + strategy: + fail-fast: false + matrix: + 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 8 + uses: actions/setup-java@v4 + with: + distribution: zulu + java-version: 8 + - 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: merge jacoco result + run: cd test/dubbo-test-jacoco-merger && mvn ${{ env.MAVEN_ARGS }} clean compile exec:java -Dexec.mainClass="org.apache.dubbo.test.JacocoMerge" -Dexec.args="${{ github.workspace }}" + - name: Upload jacoco + uses: actions/upload-artifact@v3 + with: + name: samples-jacoco-result + path: target/jacoco*.exec + - name: Upload test result + uses: actions/upload-artifact@v3 + with: + name: samples-test-result + path: test/jobs/*-result* + samples-test-result: + needs: [ check-format, samples-test-job ] + runs-on: ubuntu-latest + env: + JAVA_VER: 8 + 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 + path: test/jobs/ + - name: Merge test result + run: ./test/scripts/merge-test-results.sh + + integration-test-prepare: + name: Preparation for Integration Test + needs: check-format + runs-on: ubuntu-latest + env: + JOB_COUNT: 5 + 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}}) + needs: [ check-format, build-source, integration-test-prepare ] + runs-on: ubuntu-latest + timeout-minutes: 30 + env: + JAVA_VER: 8 + TEST_CASE_FILE: jobs/testjob_${{ matrix.job_id }}.txt + strategy: + fail-fast: false + matrix: + job_id: [ 1, 2, 3, 4, 5 ] + 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 8 + uses: actions/setup-java@v4 + with: + distribution: zulu + java-version: 8 + - 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: merge jacoco result + run: cd test/dubbo-test-jacoco-merger && mvn ${{ env.MAVEN_ARGS }} clean compile exec:java -Dexec.mainClass="org.apache.dubbo.test.JacocoMerge" -Dexec.args="${{ github.workspace }}" + - name: Upload jacoco + uses: actions/upload-artifact@v3 + with: + name: integration-jacoco-result + path: target/jacoco*.exec + - name: Upload test result + uses: actions/upload-artifact@v3 + with: + name: integration-test-result + path: test/jobs/*-result* + integration-test-result: + needs: [ check-format, integration-test-job ] + runs-on: ubuntu-latest + env: + JAVA_VER: 8 + 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 + path: test/jobs/ + - name: Merge test result + run: ./test/scripts/merge-test-results.sh + + jacoco-result-merge: + runs-on: ubuntu-latest + needs: [ check-format, unit-test-job, samples-test-result, integration-test-result ] + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + path: ./dubbo + - name: Checkout code + uses: actions/checkout@v4 + with: + repository: oxsean/dubbo-samples + path: ./dubbo-samples + - name: Checkout code + uses: actions/checkout@v4 + with: + repository: oxsean/dubbo-integration-cases + path: ./dubbo-integration-cases + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + distribution: zulu + java-version: 21 + - name: Restore class result + uses: actions/download-artifact@v3 + with: + name: class-file + path: ${{ github.workspace }} + - name: Unpack class result + run: | + cd ${{ github.workspace }}/dubbo + unzip -o ${{ github.workspace }}/class.zip + - name: Restore samples jacoco exec + uses: actions/download-artifact@v3 + with: + name: samples-jacoco-result + path: dubbo-samples/target/ + - name: Restore integration jacoco exec + uses: actions/download-artifact@v3 + with: + name: integration-jacoco-result + path: dubbo-integration-cases/target/ + - name: Merge samples jacoco result + run: | + cd ${{ github.workspace }}/dubbo-samples/test/dubbo-test-jacoco-merger + mvn ${{ env.MAVEN_ARGS }} clean compile exec:java -Dexec.mainClass="org.apache.dubbo.test.JacocoReport" -Dexec.args="${{ github.workspace }}/dubbo-samples ${{ github.workspace }}/dubbo" + - name: Merge integration jacoco result + run: | + cd ${{ github.workspace }}/dubbo-integration-cases/test/dubbo-test-jacoco-merger + mvn ${{ env.MAVEN_ARGS }} clean compile exec:java -Dexec.mainClass="org.apache.dubbo.test.JacocoReport" -Dexec.args="${{ github.workspace }}/dubbo-integration-cases ${{ github.workspace }}/dubbo" + - name: Restore coverage result + uses: actions/download-artifact@v3 + with: + name: unit-jacoco-result + path: dubbo/ + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4 + with: + verbose: true + + error-code-inspecting: + needs: check-format + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + 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 -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.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: + needs: check-format + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + 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 -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.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 diff --git a/.github/workflows/build-and-test-scheduled-3.3-origin.yml b/.github/workflows/build-and-test-scheduled-3.3-origin.yml new file mode 100644 index 000000000000..3240efb8f8ad --- /dev/null +++ b/.github/workflows/build-and-test-scheduled-3.3-origin.yml @@ -0,0 +1,505 @@ +name: Build and Test Scheduled On 3.3 + +on: + schedule: + - cron: '0 0/6 * * *' + workflow_dispatch: + +permissions: + contents: read + +env: + FORK_COUNT: 2 + FAIL_FAST: 0 + SHOW_ERROR_DETAIL: 1 + #multi-version size limit + VERSIONS_LIMIT: 4 + ALL_REMOTE_VERSION: true + CANDIDATE_VERSIONS: ' + spring.version:5.3.24; + spring-boot.version:2.7.6; + ' + +jobs: + license: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: "3.3" + - name: Check License + uses: apache/skywalking-eyes@main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + build-source: + runs-on: ubuntu-latest + outputs: + version: ${{ steps.dubbo-version.outputs.version }} + steps: + - uses: actions/checkout@v3 + with: + ref: "3.3" + path: dubbo + - uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 21 + - 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- + - name: "Dubbo cache" + uses: actions/cache@v3 + with: + path: ~/.m2/repository/org/apache/dubbo + key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} + - 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" + if: failure() + run: 7z a ${{ github.workspace }}/checkstyle.zip *checkstyle* -r + - name: "Upload checkstyle file if failure" + if: failure() + uses: actions/upload-artifact@v3 + with: + name: "checkstyle-file" + path: ${{ github.workspace }}/checkstyle.zip + - name: "Calculate Dubbo Version" + id: dubbo-version + run: | + REVISION=`awk '/[^<]+<\/revision>/{gsub(/|<\/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 }} + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest, windows-latest ] + env: + ZOOKEEPER_VERSION: 3.6.3 + steps: + - uses: actions/cache@v3 + name: "Cache zookeeper binary archive" + id: "cache-zookeeper" + with: + path: ${{ github.workspace }}/.tmp/zookeeper + key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} + restore-keys: | + zookeeper-${{ runner.os }}-${{ 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} + 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 + + 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" + 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 ] + env: + DISABLE_FILE_SYSTEM_TEST: true + DUBBO_DEFAULT_SERIALIZATION: fastjson2 + MAVEN_SUREFIRE_ADD_OPENS: true + steps: + - uses: actions/checkout@v3 + - name: "Set up JDK ${{ matrix.jdk }}" + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + 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" + 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" + + samples-test-prepare: + runs-on: ubuntu-latest + env: + JOB_COUNT: 5 + steps: + - uses: actions/checkout@v3 + with: + repository: 'apache/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: + needs: [build-source, samples-test-prepare] + name: "Samples Test on ubuntu-latest (JobId: ${{matrix.job_id}} JavaVer: ${{matrix.jdk}})" + runs-on: ubuntu-latest + timeout-minutes: 90 + 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, 4, 5] + steps: + - uses: actions/checkout@v3 + with: + repository: 'apache/dubbo-samples' + ref: master + - name: "Cache local Maven repository" + uses: actions/cache@v3 + 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: "Restore Dubbo cache" + uses: actions/cache@v3 + 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" + uses: actions/download-artifact@v3 + with: + name: samples-test-list + path: test/jobs/ + - name: "Set up JDK ${{matrix.jdk}}" + uses: actions/setup-java@v1 + with: + 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" + if: always() + uses: actions/upload-artifact@v3 + with: + name: samples-test-result-${{matrix.jdk}} + path: test/jobs/*-result* + samples-test-result: + needs: [samples-test-job] + if: always() + runs-on: ubuntu-latest + env: + JAVA_VER: ${{matrix.jdk}} + strategy: + matrix: + jdk: [ 8, 11, 17, 21 ] + steps: + - uses: actions/checkout@v3 + with: + repository: 'apache/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: + runs-on: ubuntu-latest + env: + JOB_COUNT: 5 + steps: + - uses: actions/checkout@v3 + with: + repository: 'apache/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: + needs: [build-source, integration-test-prepare] + name: "Integration Test on ubuntu-latest (JobId: ${{matrix.job_id}} JavaVer: ${{matrix.jdk}})" + runs-on: ubuntu-latest + timeout-minutes: 90 + 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, 4, 5] + steps: + - uses: actions/checkout@v3 + with: + repository: 'apache/dubbo-integration-cases' + ref: main + - name: "Cache local Maven repository" + uses: actions/cache@v3 + 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: "Restore Dubbo cache" + uses: actions/cache@v3 + 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" + uses: actions/download-artifact@v3 + with: + name: integration-test-list + path: test/jobs/ + - name: "Set up JDK ${{matrix.jdk}}" + uses: actions/setup-java@v1 + with: + 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" + if: always() + uses: actions/upload-artifact@v3 + with: + name: integration-test-result-${{matrix.jdk}} + path: test/jobs/*-result* + integration-test-result: + needs: [integration-test-job] + if: always() + runs-on: ubuntu-latest + env: + JAVA_VER: ${{matrix.jdk}} + strategy: + matrix: + jdk: [ 8, 11, 17, 21 ] + steps: + - uses: actions/checkout@v3 + with: + repository: 'apache/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: + - uses: actions/checkout@v3 + with: + ref: "3.3" + path: "./dubbo" + + - uses: actions/checkout@v3 + with: + repository: 'apache/dubbo-test-tools' + ref: main + path: "./dubbo-test-tools" + + - name: "Set up JDK 21" + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 21 + + - 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" + 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" + # 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: + - uses: actions/checkout@v3 + with: + ref: "3.3" + 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: "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)" + 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 diff --git a/.github/workflows/build-and-test-scheduled-3.3.yml b/.github/workflows/build-and-test-scheduled-3.3.yml index 3240efb8f8ad..2a456c89aa4e 100644 --- a/.github/workflows/build-and-test-scheduled-3.3.yml +++ b/.github/workflows/build-and-test-scheduled-3.3.yml @@ -2,7 +2,7 @@ name: Build and Test Scheduled On 3.3 on: schedule: - - cron: '0 0/6 * * *' + - cron: 0 0/6 * * * workflow_dispatch: permissions: @@ -12,65 +12,97 @@ env: FORK_COUNT: 2 FAIL_FAST: 0 SHOW_ERROR_DETAIL: 1 - #multi-version size limit VERSIONS_LIMIT: 4 ALL_REMOTE_VERSION: true - CANDIDATE_VERSIONS: ' + 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: 3.3 - name: Check License uses: apache/skywalking-eyes@main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + build-source: + name: Build Dubbo runs-on: ubuntu-latest outputs: version: ${{ steps.dubbo-version.outputs.version }} steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 with: - ref: "3.3" + ref: 3.3 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 }} clean install -Psources,'!demo',skip-spotless,checkstyle -Dmaven.test.skip=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper + - 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,43 +110,29 @@ jobs: echo "dubbo version: $REVISION" unit-test-prepare: - name: " Preparation for Unit Test On ${{ matrix.os }}" - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ ubuntu-latest, windows-latest ] + name: Preparation for Unit Test + runs-on: ubuntu-latest env: - ZOOKEEPER_VERSION: 3.6.3 + JOB_COUNT: 3 + ZOOKEEPER_VERSION: 3.6.4 steps: - - uses: actions/cache@v3 - name: "Cache zookeeper binary archive" - id: "cache-zookeeper" + - name: Checkout code + uses: actions/checkout@v4 + - name: Prepare test list + run: bash ./dubbo-test/scripts/split-modules.sh 3 '${{ github.workspace }}' + - name: Upload test list + uses: actions/upload-artifact@v3 + 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 in Linux OS + if: 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 || @@ -125,380 +143,351 @@ jobs: wget -c http://mirror.apache-kr.org/apache/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz -O ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz echo "list the downloaded zookeeper binary archive" ls -al ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz - - 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" + - 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.serializer }}) + needs: [ build-source, unit-test-prepare ] + runs-on: ${{ matrix.os }}-latest + timeout-minutes: 30 + 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 + - 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 + timeout-minutes: 30 + 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) + - 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: 30 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() 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 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: 30 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] 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: 3.3 + 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 -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.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: 3.3 + 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)" + - 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