blob: 47ad3ca1875a881637ae3bb5558f636b5707dc9f [file] [log] [blame]
name: Build and Test Scheduled On master
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
JACOCO_ENABLE: true
CANDIDATE_VERSIONS: '
spring.version:5.3.24;
spring-boot.version:2.7.6;
'
jobs:
# Check ASF License
check-license:
name: "Check License"
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: 'master'
- name: Check License
uses: apache/skywalking-eyes@v0.5.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: "Set up JDK 21"
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: 21
- name: Restore Maven local repository cache
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
- name: Check Dependencies' License
uses: apache/skywalking-eyes/dependency@e1a02359b239bd28de3f6d35fdc870250fa513d5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
config: .licenserc.yaml
mode: check
# Build dubbo-build-tool
build-tools:
name: "Build-tools"
needs: check-license
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest, windows-latest ]
fail-fast: false
outputs:
cache-key: ${{ steps.dubbo-build-tools.cache }}
steps:
- name: Support long paths on Windows
if: ${{ startsWith( matrix.os, 'windows') }}
run: git config --system core.longpaths true
- uses: actions/checkout@v4
name: build tools
with:
repository: 'apache/dubbo'
ref: '3.2'
path: dubbo
- name: "Set up JDK 21"
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: 21
- uses: actions/cache@v4
name: "Cache local Maven repository"
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
- name: "Build tools"
run: |
cd ./dubbo
./mvnw --batch-mode -U -e --no-transfer-progress install -pl dubbo-build-tools -am -DskipTests=true
# Build from source code
build-source:
name: "Build Dubbo-SPI-Extensions"
needs: [check-license, build-tools]
runs-on: ubuntu-latest
# output dubbo-spi-extensions version to others jobs
outputs:
version: ${{ steps.dubbo-spi-extensions-version.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
ref: "master"
path: dubbo-spi-extensions
- uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: 8
- uses: actions/cache@v4
name: "Cache local Maven repository"
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }}
restore-keys: |
${{ runner.os }}-maven-
${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
- name: "Compile Dubbo-SPI-Extensions (Linux)"
run: |
cd ./dubbo-spi-extensions
./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast -T 2C clean compile -DskipTests=true -DskipIntegrationTests=true -Dcheckstyle.skip=true -Dcheckstyle_unix.skip=true -Drat.skip=true -Dmaven.javadoc.skip=true
- name: "Build Dubbo-SPI-Extensions with Maven"
run: |
cd ./dubbo-spi-extensions
./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 class result"
run: |
shopt -s globstar
zip ${{ github.workspace }}/class.zip **/target/classes/* -r
- name: "Upload class result"
uses: actions/upload-artifact@v4
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"
if: failure()
uses: actions/upload-artifact@v4
with:
name: "checkstyle-file"
path: ${{ github.workspace }}/checkstyle.zip
- name: "Upload coverage to Codecov"
uses: codecov/codecov-action@v4
- name: "Calculate Dubbo-SPI-Extensions Version"
id: dubbo-spi-extensions-version
run: |
REVISION=`awk '/<revision>[^<]+<\/revision>/{gsub(/<revision>|<\/revision>/,"",$1);print $1;exit;}' ./dubbo-spi-extensions/pom.xml`
echo "version=$REVISION" >> $GITHUB_OUTPUT
echo "dubbo-spi-extensions version: $REVISION"
# Download dependencies Prepare for unit test
unit-test-prepare:
name: "Preparation for Unit Test"
needs: [check-license]
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest, windows-latest ]
env:
ZOOKEEPER_VERSION: 3.6.3
steps:
- uses: actions/cache@v4
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"
run: |
mkdir -p ${{ github.workspace }}/.tmp/zookeeper
wget -c https://archive.apache.org/dist/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz -O ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
wget -c https://apache.website-solution.net/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz -O ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
wget -c http://apache.stu.edu.tw/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz -O ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
wget -c http://ftp.jaist.ac.jp/pub/apache/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz -O ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
wget -c http://apache.mirror.cdnetworks.com/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz -O ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz ||
wget -c http://mirror.apache-kr.org/apache/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz -O ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
echo "list the downloaded zookeeper binary archive"
ls -al ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz
- uses: actions/cache@v4
name: "Cache secret key"
id: "cache-secret-cert"
with:
path: ${{ github.workspace }}/.tmp/rsa
key: secret-rsa-${{ runner.os }}-${{ github.run_id }}
- name: "Create Secret"
run: |
mkdir -p ${{ github.workspace }}/.tmp/rsa
cd ${{ github.workspace }}/.tmp/rsa
openssl genrsa -out rsa_private.pem 1024
openssl rsa -in rsa_private.pem -pubout -out rsa_public.pem
echo "Current workflow run id: ${{ github.run_id }}"
echo "Start Print Rsa Public Key ---"
cat rsa_public.pem
echo "--- End Print Rsa Public Key"
# Start unit test
unit-test:
needs: [check-license, build-source, unit-test-prepare]
name: "Unit Test ${{ matrix.os }} with JDK ${{ matrix.jdk }}"
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest, windows-latest ]
jdk: [ 8, 11 ]
fail-fast: false
env:
DISABLE_FILE_SYSTEM_TEST: true
CURRENT_ROLE: ${{ matrix.case-role }}
DUBBO_DEFAULT_SERIALIZATION: fastjson2
steps:
- name: Support Windows
if: ${{ startsWith( matrix.os, 'windows') }}
run: |
git config --system core.longpaths true
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: "Set up JDK ${{ matrix.jdk }}"
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: 8
- uses: actions/cache@v4
name: "Cache local Maven repository"
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-${{ github.run_id }}
restore-keys: |
${{ runner.os }}-maven-
${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
- uses: actions/cache@v4
name: "Cache zookeeper binary archive"
id: "cache-zookeeper"
with:
path: ${{ github.workspace }}/.tmp/zookeeper
key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }}
restore-keys: |
zookeeper-${{ runner.os }}-
- uses: actions/cache@v4
name: "Cache secret key"
id: "cache-secret-cert"
with:
path: ${{ github.workspace }}/.tmp/rsa
key: secret-rsa-${{ runner.os }}-${{ github.run_id }}
# - name: "Get sonarcloud token"
# if: ${{ github.repository == 'apache/dubbo-spi-extensions' }}
# run: |
# curl "http://dubbo-vm.apache.org:8000/token?workflow_id=${{ github.run_id }}" -o ${{ github.workspace }}/.tmp/encrypted-sonarcloud-token
# openssl rsautl -decrypt -in ${{ github.workspace }}/.tmp/encrypted-sonarcloud-token -out ${{ github.workspace }}/.tmp/decrypted-sonarcloud-token -inkey ${{ github.workspace }}/.tmp/rsa/rsa_private.pem
# - name: "Test with Maven with SonarCloud Scan"
# if: ${{ github.repository == 'apache/dubbo-spi-extensions' }}
# timeout-minutes: 70
# env:
# # Needed to get some information about the pull request, if any
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# run: |
# source ${{ github.workspace }}/.tmp/decrypted-sonarcloud-token
# ./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Pjacoco,jdk15ge-simple,'!jdk15ge',jacoco089 -Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache -Dsonar.projectKey=apache_dubbo -DtrimStackTrace=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.count=5 -DskipTests=false -DskipIntegrationTests=false -Dcheckstyle.skip=false -Dcheckstyle_unix.skip=false -Drat.skip=false -Dmaven.javadoc.skip=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper -Dsonar.coverage.jacoco.xmlReportPaths=dubbo-test/dubbo-dependencies-all/target/site/jacoco-aggregate/jacoco.xml -Dsonar.login=${SONAR_TOKEN}
- name: "Test with Maven without SonarCloud Scan On Linux"
if: ${{ startsWith( matrix.os, 'linux') || startsWith( matrix.os, 'ubuntu') }}
timeout-minutes: 70
run: |
./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -Pjacoco -DtrimStackTrace=false -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=false -D"checkstyle.skip=false" -D"checkstyle_unix.skip=false" -D"rat.skip=false" -D"maven.javadoc.skip=true" -D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper"
- name: "Test with Maven without SonarCloud Scan On Windows"
if: ${{ startsWith( matrix.os, 'windows') }}
timeout-minutes: 70
run: |
./mvnw --batch-mode --no-snapshot-updates -e --no-transfer-progress --fail-fast clean test verify -D"maven.wagon.httpconnectionManager.ttlSeconds=120" -Pjacoco -DtrimStackTrace=false -D"maven.wagon.http.retryHandler.count=5" -DskipTests=false -DskipIntegrationTests=false -D"checkstyle.skip=false" -D"checkstyle_unix.skip=true" -D"rat.skip=false" -D"maven.javadoc.skip=true" -D"embeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper"
- name: "Upload surefire-reports if failure"
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: surefire-reports-${{ matrix.os }}-${{ matrix.jdk }}
path: "**/target/surefire-reports/**"
- name: "Upload coverage result"
uses: actions/upload-artifact@v4
with:
name: coverage-result-${{ matrix.os }}-${{ matrix.jdk }}
path: "**/target/site/**/jacoco.xml"
# error-code-inspecting:
# needs: [check-license, build-tools]
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v4
# with:
# path: "./dubbo-spi-extensions"
# - 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 Maven local repository cache
# uses: actions/cache@v4
# with:
# path: ~/.m2/repository
# key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
# restore-keys: |
# ${{ runner.os }}-maven-
# ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
# - name: "Compile Dubbo-SPI-Extensions (Linux)"
# run: |
# cd ${{ github.workspace }}/dubbo-spi-extensions
# ./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-spi-extensions
# - 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@v4
# with:
# name: "error-inspection-result"
# path: ${{ github.workspace }}/dubbo-test-tools/dubbo-error-code-inspector/error-inspection-result.txt