CI Report(#10288855794) #53394
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: CI Report | |
run-name: CI Report(#${{ github.event.workflow_run.id }}) | |
on: | |
workflow_run: | |
workflows: [ "CI PIPELINE", "CI PIPELINE - BRANCH" ] | |
types: | |
- completed | |
permissions: | |
checks: write | |
actions: write | |
contents: write | |
deployments: write | |
discussions: write | |
issues: write | |
packages: write | |
pages: write | |
pull-requests: write | |
repository-projects: write | |
security-events: write | |
statuses: write | |
env: | |
HEAD_SHA: ${{ github.event.workflow_run.head_sha }} | |
jobs: | |
INFO: | |
runs-on: [ self-hosted, quick ] | |
if: > | |
github.event.workflow_run.event == 'pull_request' && | |
(github.event.workflow_run.conclusion == 'success' || github.event.workflow_run.conclusion == 'failure') | |
outputs: | |
PR_NUMBER: ${{ steps.pr_details.outputs.PR_NUMBER }} | |
BASE_REF: ${{ steps.pr_details.outputs.BASE_REF }} | |
PR_STATE: ${{ steps.pr_details.outputs.PR_STATE }} | |
steps: | |
- run: | | |
sleep 10 | |
- name: Download workflow artifact - PR | |
uses: dawidd6/action-download-artifact@v3 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
run_id: ${{ github.event.workflow_run.id }} | |
name: 'pr_num' | |
- name: Read the pr num file | |
id: pr_num_reader | |
uses: juliangruber/read-file-action@v1 | |
with: | |
path: ./pr_num.txt | |
- name: PR DETAILS | |
id: pr_details | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
PR_NUMBER: ${{ steps.pr_num_reader.outputs.content }} | |
REPO: ${{ github.repository }} | |
run: | | |
PR_NUMBER=`echo ${PR_NUMBER}` | |
pr_info=`gh pr view ${PR_NUMBER} -R ${REPO} --json baseRefName,state` | |
base_ref=$(echo ${pr_info} | jq -r .baseRefName) | |
pr_state=$(echo ${pr_info} | jq -r .state) | |
echo "BASE_REF=${base_ref}" >> $GITHUB_OUTPUT | |
echo "PR_STATE=${pr_state}" >> $GITHUB_OUTPUT | |
echo "PR_NUMBER=${PR_NUMBER}" >> $GITHUB_OUTPUT | |
- name: INFO | |
id: info | |
run: | | |
echo ${{ steps.pr_details.outputs.PR_NUMBER }} | |
echo ${{ steps.pr_details.outputs.BASE_REF }} | |
FE-REPORT: | |
runs-on: [ self-hosted, quick ] | |
needs: INFO | |
if: needs.INFO.outputs.PR_NUMBER != '' && needs.INFO.outputs.PR_STATE != 'MERGED' | |
env: | |
PR_NUMBER: ${{ needs.INFO.outputs.PR_NUMBER }} | |
BASE_REF: ${{ needs.INFO.outputs.BASE_REF }} | |
steps: | |
- name: CLEAN | |
run: | | |
rm -rf ${{ github.workspace }} && mkdir -p ${{ github.workspace }} | |
- name: INFO | |
id: info | |
run: | | |
repo="${{ github.repository }}" | |
bucket_prefix=`echo ${repo%/*} | tr '[:upper:]' '[:lower:]'` | |
echo "bucket_prefix=${bucket_prefix}" >> $GITHUB_OUTPUT | |
- name: Download FE UT XML | |
id: download-ut-xml | |
env: | |
bucket_prefix: ${{ steps.info.outputs.bucket_prefix }} | |
run: | | |
oss_path=oss://${bucket_prefix}-ci-release/$BASE_REF/Release/pr/UT-Report/${PR_NUMBER} | |
size=$(ossutil64 --config-file ~/.ossutilconfig ls ${oss_path}/fe_ut_report.tar.gz | grep "Object Number is" | awk '{print $NF}') | |
echo "size=${size}" >> $GITHUB_OUTPUT | |
if [[ "$size" != "0" ]]; then | |
mkdir fe && cd fe | |
ossutil64 --config-file ~/.ossutilconfig cp ${oss_path}/ . --recursive | |
tar zxf fe_ut_report.tar.gz | |
elif [[ "${BASE_REF}" == "main" ]]; then | |
rm -rf ./coverchecker && ln -s /var/local/env/coverchecker ./coverchecker && cd coverchecker && git pull | |
export JAVA_HOME=/var/local/env/jdk1.8.0_202; | |
export PATH=$JAVA_HOME/bin:$PATH; | |
java -jar cover-checker-console/target/cover-checker-console-1.4.0-jar-with-dependencies.jar \ | |
--cover /var/local/env/empty_cov_result --github-token ${{ secrets.GITHUB_TOKEN }} \ | |
--repo ${{ github.repository }} --threshold 80 --github-url api.github.com --pr ${PR_NUMBER} -type jacoco | |
fi | |
- name: Publish UT Report | |
uses: mikepenz/action-junit-report@v3 | |
id: publish_report | |
if: steps.download-ut-xml.outputs.size != '0' | |
env: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
check_name: 'FE UT Report' | |
detailed_summary: true | |
fail_on_failure: true | |
commit: ${{ github.event.workflow_run.head_sha }} | |
report_paths: ./fe/fe-core/target/surefire-reports/*.xml | |
- name: Merge FE Coverage | |
id: merge_report | |
if: steps.publish_report.outcome == 'success' && env.BASE_REF == 'main' | |
env: | |
fe_path: ${{ github.workspace }}/fe | |
run: | | |
export JAVA_HOME=/var/local/env/jdk1.8.0_202; | |
export PATH=$JAVA_HOME/bin:$PATH; | |
rm -rf ./ci-tool && cp -rf /var/lib/ci-tool ./ci-tool && cd ci-tool && git pull && source lib/init.sh | |
if [[ -e ${fe_path}/test.exec ]]; then | |
java -jar package/jacococli.jar merge ${fe_path}/fe-core/target/jacoco.exec ${fe_path}/test.exec --destfile ${fe_path}/merge.exec | |
else | |
cp ${fe_path}/fe-core/target/jacoco.exec ${fe_path}/merge.exec | |
fi | |
- name: Generate XML Report | |
id: generate-xml-report | |
env: | |
package_path: ${{ github.workspace }}/ci-tool/package | |
fe_path: ${{ github.workspace }}/fe | |
fe_core_path: ${{ github.workspace }}/fe/fe-core | |
bucket_prefix: ${{ steps.info.outputs.bucket_prefix }} | |
if: steps.merge_report.outcome == 'success' | |
run: | | |
rm -rf result | |
export JAVA_HOME=/var/local/env/jdk1.8.0_202; | |
export PATH=$JAVA_HOME/bin:$PATH; | |
cd ${fe_core_path}/target/classes; | |
rm -rf org; | |
cd com/starrocks && rm -rf thrift proto sql/parser builtins common/Version.class; | |
cd ${{ github.workspace }}; | |
java -jar $package_path/jacococli.jar report ${fe_path}/merge.exec --classfiles ${fe_core_path}/target/classes/ \ | |
--html ./result --xml ${{ github.workspace }}/coverage.xml \ | |
--sourcefiles ${fe_core_path}/src/main/java/ --encoding utf-8 --name fe-coverage | |
oss_path=oss://${bucket_prefix}-ci-release/$BASE_REF/Release/pr/UT-Report/${PR_NUMBER}/ | |
ossutil64 --config-file ~/.ossutilconfig cp coverage.xml ${oss_path} -f | |
# Incremental Total Coverage | |
- name: Publish Incremental Coverage Report - Total | |
if: steps.generate-xml-report.outcome == 'success' | |
env: | |
fe_path: ${{ github.workspace }}/fe | |
run: | | |
rm -rf ./coverchecker && ln -s /var/local/env/coverchecker ./coverchecker && cd coverchecker && git pull | |
export JAVA_HOME=/var/local/env/jdk1.8.0_202; | |
export PATH=$JAVA_HOME/bin:$PATH; | |
if [[ -e "${fe_path}/diff.txt" ]]; then | |
java -jar cover-checker-console/target/cover-checker-console-1.4.0-jar-with-dependencies.jar \ | |
--cover ${{ github.workspace }}/result/ --github-token ${{ secrets.GITHUB_TOKEN }} \ | |
--repo ${{ github.repository }} --threshold 80 --github-url api.github.com --pr ${PR_NUMBER} -type jacoco \ | |
-d ${fe_path}/diff.txt -dt file | |
else | |
java -jar cover-checker-console/target/cover-checker-console-1.4.0-jar-with-dependencies.jar \ | |
--cover ${{ github.workspace }}/result/ --github-token ${{ secrets.GITHUB_TOKEN }} \ | |
--repo ${{ github.repository }} --threshold 80 --github-url api.github.com --pr ${PR_NUMBER} -type jacoco | |
fi | |
rm -rf coverchecker | |
rm -rf ci-tools | |
# total coverage | |
- name: Coverage Report | |
uses: codecov/codecov-action@v3 | |
if: steps.generate-xml-report.outcome == 'success' | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: ${{ github.workspace }}/coverage.xml | |
dry_run: false | |
name: fe-total | |
flags: fe-total | |
fail_ci_if_error: false | |
verbose: true | |
override_pr: ${{ env.PR_NUMBER }} | |
override_branch: ${{ env.BASE_REF }} | |
override_commit: ${{ env.HEAD_SHA }} | |
- name: Clean ENV | |
if: always() | |
run: | | |
rm -rf ${{ github.workspace }}/* | |
BE-REPORT: | |
runs-on: [ self-hosted, quick ] | |
needs: INFO | |
if: needs.INFO.outputs.PR_NUMBER != '' && needs.INFO.outputs.BASE_REF == 'main' && needs.INFO.outputs.PR_STATE != 'MERGED' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
REPO: ${{ github.repository }} | |
PR_NUMBER: ${{ needs.INFO.outputs.PR_NUMBER }} | |
BASE_REF: ${{ needs.INFO.outputs.BASE_REF }} | |
steps: | |
- name: CLEAN | |
run: | | |
rm -rf ${{ github.workspace }} && mkdir -p ${{ github.workspace }} | |
- name: INFO | |
id: info | |
run: | | |
bucket_prefix=`echo ${REPO%/*} | tr '[:upper:]' '[:lower:]'` | |
echo "bucket_prefix=${bucket_prefix}" >> $GITHUB_OUTPUT | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Download BE UT XML | |
id: download-ut-xml | |
env: | |
bucket_prefix: ${{ steps.info.outputs.bucket_prefix }} | |
run: | | |
oss_path=oss://${bucket_prefix}-ci-release/$BASE_REF/Release/pr/UT-Report/${PR_NUMBER} | |
be_ut_res_path=${oss_path}/flag/be_ut_res | |
size=$(ossutil64 --config-file ~/.ossutilconfig ls ${be_ut_res_path} | grep "Object Number is" | awk '{print $NF}') | |
echo "size=${size}" >> $GITHUB_OUTPUT | |
if [[ "$size" != "0" ]]; then | |
ossutil64 --config-file ~/.ossutilconfig cp ${be_ut_res_path} . >/dev/null | |
res=`cat be_ut_res` | |
if [[ "$res" != "0" ]]; then | |
echo "::error::BE UT failed!" | |
exit 1 | |
fi | |
cd be | |
ossutil64 --config-file ~/.ossutilconfig cp ${oss_path}/be_ut_coverage.xml . -f 1>/dev/null | |
ossutil64 --config-file ~/.ossutilconfig cp ${oss_path}/base_version.txt . -f 1>/dev/null | |
ossutil64 --config-file ~/.ossutilconfig cp ${oss_path}/diff.txt . -f 1>/dev/null | |
echo "base_version=`cat base_version.txt`" >> $GITHUB_OUTPUT | |
else | |
rm -rf ./coverchecker && ln -s /var/local/env/coverchecker ./coverchecker && cd coverchecker && git pull | |
export JAVA_HOME=/var/local/env/jdk1.8.0_202; | |
export PATH=$JAVA_HOME/bin:$PATH; | |
java -jar cover-checker-console/target/cover-checker-console-1.4.0-jar-with-dependencies.jar \ | |
--cover /var/local/env/be_empty_coverage.xml --github-token ${{ secrets.GITHUB_TOKEN }} --pr ${PR_NUMBER} \ | |
--repo ${{ github.repository }} --threshold 80 --github-url api.github.com -type cobertura --module BE | |
fi | |
- name: Merge BE Total Coverage | |
id: merge | |
if: github.repository == 'StarRocks/starrocks' && steps.download-ut-xml.outputs.size != '0' && steps.download-ut-xml.outcome == 'success' | |
run: | | |
rm -rf ./ci-tool && cp -rf /var/lib/ci-tool ./ci-tool && cd ci-tool && git pull && source lib/init.sh | |
export ECI_ID=`./bin/create_eci.sh ${BASE_REF} ${REPO}` | |
export TOTAL_COV_XML=/var/local/env/be_total_coverage_${PR_NUMBER}.xml | |
export COV_LOG=/var/local/env/be_total_coverage_${PR_NUMBER}.log | |
export RES_FILE=/var/local/env/be_total_coverage_res_${PR_NUMBER}.log | |
echo ${ECI_ID} | |
echo "ECI_ID=${ECI_ID}" >> $GITHUB_OUTPUT | |
echo "COV_XML=${TOTAL_COV_XML}" >> $GITHUB_OUTPUT | |
echo "COV_LOG=${COV_LOG}" >> $GITHUB_OUTPUT | |
echo "RES_FILE=${RES_FILE}" >> $GITHUB_OUTPUT | |
./bin/gen_be_cov.sh ${REPO} ${BASE_REF} ${PR_NUMBER} ${HEAD_SHA} | |
# Incremental Total Coverage | |
- name: Publish Incremental Coverage Report - Total | |
if: always() && steps.download-ut-xml.outputs.size != '0' && steps.download-ut-xml.outcome == 'success' | |
env: | |
be_path: ${{ github.workspace }}/be | |
merge_outcome: ${{ steps.merge.outcome }} | |
total_xml: ${{ steps.merge.outputs.COV_XML }} | |
run: | | |
rm -rf ./coverchecker && ln -s /var/local/env/coverchecker ./coverchecker && cd coverchecker && git pull | |
export JAVA_HOME=/var/local/env/jdk1.8.0_202; | |
export PATH=$JAVA_HOME/bin:$PATH; | |
if [[ "${{ github.repository }}" != "StarRocks/starrocks" ]] || [[ "${merge_outcome}" == "failure" ]]; then | |
total_xml=${be_path}/be_ut_coverage.xml | |
fi | |
java -jar cover-checker-console/target/cover-checker-console-1.4.0-jar-with-dependencies.jar \ | |
--cover ${total_xml} --github-token ${{ secrets.GITHUB_TOKEN }} --repo ${{ github.repository }} \ | |
--threshold 80 --github-url api.github.com --pr ${PR_NUMBER} -type cobertura --module BE \ | |
-d ${be_path}/diff.txt -dt file | |
- name: Clean ENV | |
if: always() | |
run: | | |
rm -rf ${{ github.workspace }}/* | |
eci rm ${{ steps.merge.outputs.ECI_ID }} || true | |
rm -rf ${{ steps.merge.outputs.COV_LOG }} ${{ steps.merge.outputs.COV_XML }} ${{ steps.merge.outputs.RES_FILE }} | |
SQL-Tester-REPORT: | |
runs-on: [ self-hosted, quick ] | |
needs: INFO | |
if: needs.INFO.outputs.PR_NUMBER != '' && needs.INFO.outputs.BASE_REF == 'main' && needs.INFO.outputs.PR_STATE != 'MERGED' | |
env: | |
PR_NUMBER: ${{ needs.INFO.outputs.PR_NUMBER }} | |
BASE_REF: ${{ needs.INFO.outputs.BASE_REF }} | |
steps: | |
- name: CLEAN | |
run: | | |
rm -rf ${{ github.workspace }} && mkdir -p ${{ github.workspace }} | |
- name: INFO | |
id: info | |
run: | | |
repo="${{ github.repository }}" | |
bucket_prefix=`echo ${repo%/*} | tr '[:upper:]' '[:lower:]'` | |
echo "bucket_prefix=${bucket_prefix}" >> $GITHUB_OUTPUT | |
- name: Download SQL-Tester XML | |
id: download-SQL-Tester-xml | |
env: | |
bucket_prefix: ${{ steps.info.outputs.bucket_prefix }} | |
run: | | |
mkdir sql-tester-result && cd sql-tester-result | |
oss_path=oss://${bucket_prefix}-ci-release/$BASE_REF/Release/pr/SQL-Tester-XML/${PR_NUMBER}/ | |
size=$(ossutil64 --config-file ~/.ossutilconfig ls ${oss_path} | grep "Object Number is" | awk '{print $NF}') | |
echo "size=${size}" >> $GITHUB_OUTPUT | |
if [[ "$size" != "0" ]]; then | |
ossutil64 --config-file ~/.ossutilconfig cp ${oss_path} . --recursive | |
else | |
cp /var/local/env/sqltester_empty_coverage.xml . | |
fi | |
- name: Prepare Tools | |
id: prepare-tools | |
run: | | |
mkdir -p .actions/nose-report-action | |
cd .actions/nose-report-action | |
git clone https://github.com/StarRocks/action-junit-report.git . | |
- name: Publish SQL-Tester Report | |
uses: ./.actions/nose-report-action | |
if: steps.prepare-tools.outcome == 'success' | |
with: | |
check_name: 'SQL-Tester Report' | |
fail_on_failure: true | |
detailed_summary: true | |
token: ${{ secrets.GITHUB_TOKEN }} | |
commit: ${{ env.HEAD_SHA }} | |
report_paths: 'sql-tester-result/*.xml' | |
Admit-REPORT: | |
runs-on: [ self-hosted, quick ] | |
needs: INFO | |
if: needs.INFO.outputs.PR_NUMBER != '' && needs.INFO.outputs.BASE_REF == 'main' && needs.INFO.outputs.PR_STATE != 'MERGED' | |
env: | |
PR_NUMBER: ${{ needs.INFO.outputs.PR_NUMBER }} | |
BASE_REF: ${{ needs.INFO.outputs.BASE_REF }} | |
steps: | |
- name: CLEAN | |
run: | | |
rm -rf ${{ github.workspace }} && mkdir -p ${{ github.workspace }} | |
- name: INFO | |
id: info | |
run: | | |
repo="${{ github.repository }}" | |
bucket_prefix=`echo ${repo%/*} | tr '[:upper:]' '[:lower:]'` | |
echo "bucket_prefix=${bucket_prefix}" >> $GITHUB_OUTPUT | |
- name: Download Admit XML | |
id: download-admit-xml | |
env: | |
bucket_prefix: ${{ steps.info.outputs.bucket_prefix }} | |
run: | | |
mkdir admit-result && cd admit-result | |
oss_path=oss://${bucket_prefix}-ci-release/$BASE_REF/Release/pr/Admit-XML/${PR_NUMBER}/ | |
size=$(ossutil64 --config-file ~/.ossutilconfig ls ${oss_path} | grep "Object Number is" | awk '{print $NF}') | |
echo "size=${size}" >> $GITHUB_OUTPUT | |
if [[ "$size" != "0" ]]; then | |
ossutil64 --config-file ~/.ossutilconfig cp ${oss_path} . --recursive | |
fi | |
- name: Prepare Tools | |
if: steps.download-admit-xml.outputs.size != '0' | |
id: prepare-tools | |
run: | | |
mkdir -p .actions/nose-report-action | |
cd .actions/nose-report-action | |
git clone https://github.com/StarRocks/action-junit-report.git . | |
- name: Publish Admit Report | |
uses: ./.actions/nose-report-action | |
if: steps.prepare-tools.outcome == 'success' | |
with: | |
check_name: 'Admit Report' | |
fail_on_failure: true | |
detailed_summary: true | |
commit: ${{ env.HEAD_SHA }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
report_paths: 'admit-result/*.xml' | |
NOTIFICATION: | |
runs-on: [ self-hosted, quick ] | |
needs: [ INFO, FE-REPORT, Admit-REPORT, BE-REPORT, SQL-Tester-REPORT ] | |
if: always() && needs.INFO.outputs.PR_NUMBER != '' && needs.INFO.outputs.PR_STATE != 'MERGED' | |
env: | |
WORKFLOW_RUN_ID: ${{ github.event.workflow_run.id }} | |
FEISHU_APP_ID: ${{ secrets.FEISHU_APP_ID }} | |
FEISHU_APP_SECRET: ${{ secrets.FEISHU_APP_SECRET }} | |
PR_NUMBER: ${{ needs.INFO.outputs.PR_NUMBER }} | |
steps: | |
- name: CLEAN | |
run: | | |
rm -rf ${{ github.workspace }} && mkdir -p ${{ github.workspace }} | |
- name: NOTIFY | |
run: | | |
rm -rf ./ci-tool && cp -rf /var/lib/ci-tool ./ci-tool && cd ci-tool && git pull && source lib/init.sh | |
./bin/notify.sh | |
- name: Clean ENV | |
if: always() | |
run: | | |
rm -rf ${{ github.workspace }}/* |