Build and Test Scheduled On 3.0 #193
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and Test Scheduled On 3.0 | |
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 | |
CANDIDATE_VERSIONS: ' | |
spring.version:4.3.30.RELEASE; | |
spring-boot.version:1.5.22.RELEASE; | |
spring-boot.version:2.4.1; | |
' | |
jobs: | |
build-source: | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.dubbo-version.outputs.version }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
ref: "3.0" | |
path: dubbo | |
- uses: actions/setup-java@v3 | |
with: | |
distribution: 'zulu' | |
java-version: 8 | |
- 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>[^<]+<\/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 }} | |
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 ] | |
env: | |
DISABLE_FILE_SYSTEM_TEST: true | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
ref: "3.0" | |
- 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- | |
- 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" | |
- name: "Upload coverage to Codecov" | |
uses: codecov/codecov-action@v3 | |
integration-test-prepare: | |
runs-on: ubuntu-latest | |
env: | |
JOB_COUNT: 3 | |
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: test-list | |
path: test/jobs | |
integration-test-job: | |
needs: [build-source, integration-test-prepare] | |
name: "Integration Test on ubuntu-latest (JobId: ${{matrix.job_id}})" | |
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: | |
- 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: test-list | |
path: test/jobs/ | |
- name: "Set up JDK 8" | |
uses: actions/setup-java@v1 | |
with: | |
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: "Upload test result" | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-result | |
path: test/jobs/*-result* | |
integration-test-result: | |
needs: [integration-test-job] | |
if: always() | |
runs-on: ubuntu-latest | |
env: | |
JAVA_VER: 8 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
repository: 'apache/dubbo-samples' | |
ref: master | |
- name: "Download test result" | |
uses: actions/download-artifact@v3 | |
with: | |
name: test-result | |
path: test/jobs/ | |
- name: "Merge test result" | |
run: ./test/scripts/merge-test-results.sh |