Skip to content

Cloud E2E Engine Test on Env:idc1:idc:0.9 elasticsearch,qdrant,zookeeper,tdsql,influxdb,rabbitmq,loki,victoria-metrics,rocketmq,greatdb,postgresql,kafka,kingbase,gaussdb,tdengine,redis,damengdb,starrocks,vastbase,nebula,mongodb,minio,tidb,oceanbase-proxy,mssql,clickhouse,etcd,mysql,oceanbase Ref:release-2.0 #345

Cloud E2E Engine Test on Env:idc1:idc:0.9 elasticsearch,qdrant,zookeeper,tdsql,influxdb,rabbitmq,loki,victoria-metrics,rocketmq,greatdb,postgresql,kafka,kingbase,gaussdb,tdengine,redis,damengdb,starrocks,vastbase,nebula,mongodb,minio,tidb,oceanbase-proxy,mssql,clickhouse,etcd,mysql,oceanbase Ref:release-2.0

Cloud E2E Engine Test on Env:idc1:idc:0.9 elasticsearch,qdrant,zookeeper,tdsql,influxdb,rabbitmq,loki,victoria-metrics,rocketmq,greatdb,postgresql,kafka,kingbase,gaussdb,tdengine,redis,damengdb,starrocks,vastbase,nebula,mongodb,minio,tidb,oceanbase-proxy,mssql,clickhouse,etcd,mysql,oceanbase Ref:release-2.0 #345

name: Cloud E2E Engine
on:
workflow_dispatch:
inputs:
TEST_ENGINES:
description: "The specify version of GO (e.g. mysql,postgresql,redis)"
type: string
required: false
default: 'mysql'
CLOUD_ENV_NAME:
description: "The cloud env name of test (e.g. dev) "
type: string
required: false
default: 'dev'
CLOUD_BRANCH:
description: "The cloud branch name (e.g. main) "
type: string
required: false
default: 'main'
APECD_REF:
description: "The branch name of apecloud-cd"
type: string
required: false
default: 'main'
CURRENT_VERSION:
description: "The current release version (e.g. v0.30) "
type: string
required: false
default: ''
TEST_INDEX:
description: "Test index"
type: string
required: false
default: ''
CLOUD_TEST_ENV:
description: "The cloud test env"
type: string
required: false
default: ''
CLOUD_TEST_KB_VERSION:
description: "The cloud test kubeblocks version"
type: string
required: false
default: ''
workflow_call:
inputs:
TEST_ENGINES:
description: "The specify version of GO (e.g. mysql,postgresql,redis)"
type: string
required: false
default: 'mysql'
CLOUD_ENV_NAME:
description: "The cloud env name of test (e.g. dev) "
type: string
required: false
default: 'dev'
CLOUD_BRANCH:
description: "The cloud branch name (e.g. main) "
type: string
required: false
default: 'main'
APECD_REF:
description: "The branch name of apecloud-cd"
type: string
required: false
default: 'main'
CURRENT_VERSION:
description: "The current release version (e.g. v0.30) "
type: string
required: false
default: ''
TEST_INDEX:
description: "Test index"
type: string
required: false
default: ''
CLOUD_TEST_ENV:
description: "The cloud test env"
type: string
required: false
default: ''
CLOUD_TEST_KB_VERSION:
description: "The cloud test kubeblocks version"
type: string
required: false
default: ''
run-name: Cloud E2E Engine Test on Env:${{ inputs.CLOUD_ENV_NAME }}:${{ inputs.CLOUD_TEST_ENV }}:${{ inputs.CLOUD_TEST_KB_VERSION }} ${{ inputs.TEST_ENGINES }} Ref:${{ inputs.CLOUD_BRANCH }}
env:
ACK_KUBECONFIG_DEV: ${{ secrets.ACK_KUBECONFIG_DEV }}
ACK_KUBECONFIG_DEMO: ${{ secrets.ACK_KUBECONFIG_DEMO }}
IDC_KUBECONFIG: ${{ secrets.IDC_KUBECONFIG }}
IDC_KUBECONFIG_1: ${{ secrets.IDC_KUBECONFIG_1 }}
IDC_KUBECONFIG_2: ${{ secrets.IDC_KUBECONFIG_2 }}
IDC_KUBECONFIG_4: ${{ secrets.IDC_KUBECONFIG_4 }}
ACK_KUBECONFIG_PROD: ${{ secrets.ACK_KUBECONFIG_PROD }}
ACK_KUBECONFIG_INTL_PROD: ${{ secrets.ACK_KUBECONFIG_INTL_PROD }}
GH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
jobs:
get-test-engine:
runs-on: ubuntu-latest
outputs:
test-engines: ${{ steps.get_test_engine.outputs.test-engines }}
test-engines-all: ${{ steps.get_test_engine.outputs.test-engines-all }}
cloud-branch: ${{ steps.get_test_engine.outputs.cloud-branch }}
cloud-env-name: ${{ steps.get_test_engine.outputs.cloud-env-name }}
current-version: ${{ steps.get_test_engine.outputs.current-version }}
steps:
- name: Get test engine
id: get_test_engine
run: |
TEST_INDEX="${{ inputs.TEST_INDEX }}"
TEST_ENGINES="${{ inputs.TEST_ENGINES }}"
if [[ -z "$TEST_ENGINES" ]]; then
TEST_ENGINES="mysql"
fi
test_engines=""
test_engines_all=""
test_engines_tmp=""
engine_index=0
test_job_index=0
for engine_tmp in $(echo "${TEST_ENGINES}" | sed 's/,/ /g' ); do
engine_index=$(( engine_index + 1 ))
if [[ -z "${test_engines_tmp}" ]]; then
test_engines_tmp="${engine_tmp}"
else
test_engines_tmp="${test_engines_tmp},${engine_tmp}"
fi
KB_CLOUD_TEST_ENGINES_PRE="${{ vars.KB_CLOUD_TEST_ENGINES_PRE }}"
if [[ -z "${KB_CLOUD_TEST_ENGINES_PRE}" ]]; then
KB_CLOUD_TEST_ENGINES_PRE=5
fi
if [[ $(( engine_index % ${KB_CLOUD_TEST_ENGINES_PRE} )) == 0 ]]; then
test_job_index=$(( test_job_index + 1 ))
if [[ -n "${TEST_INDEX}" && "${TEST_INDEX}" != "7" && "${TEST_INDEX}" != "${test_job_index}" ]]; then
echo "TEST_INDEX:${TEST_INDEX} not equal to test job index:${test_job_index}, Skip test."
test_engines_tmp=""
continue
fi
test_job_index_tmp=$(printf "%02d" $test_job_index)
if [[ -z "${test_engines}" ]]; then
test_engines_all="${test_engines_tmp}|${test_job_index_tmp}"
test_engines="{\"test-engine\":\"${test_engines_tmp}\",\"test-job-index\":\"${test_job_index_tmp}\"}"
else
test_engines_all="${test_engines_all}##${test_engines_tmp}|${test_job_index_tmp}"
test_engines="${test_engines},{\"test-engine\":\"${test_engines_tmp}\",\"test-job-index\":\"${test_job_index_tmp}\"}"
fi
test_engines_tmp=""
fi
done
if [[ -n "${test_engines_tmp}" ]]; then
test_job_index=$(( test_job_index + 1 ))
if [[ -n "${TEST_INDEX}" && "${TEST_INDEX}" != "7" && "${TEST_INDEX}" != "${test_job_index}" ]]; then
echo "TEST_INDEX:${TEST_INDEX} not equal to test job index:${test_job_index}, Skip test."
else
test_job_index_tmp=$(printf "%02d" $test_job_index)
if [[ -z "${test_engines}" ]]; then
test_engines_all="${test_engines_tmp}|${test_job_index_tmp}"
test_engines="{\"test-engine\":\"${test_engines_tmp}\",\"test-job-index\":\"${test_job_index_tmp}\"}"
else
test_engines_all="${test_engines_all}##${test_engines_tmp}|${test_job_index_tmp}"
test_engines="${test_engines},{\"test-engine\":\"${test_engines_tmp}\",\"test-job-index\":\"${test_job_index_tmp}\"}"
fi
fi
fi
echo "${test_engines}"
echo "${test_engines_all}"
echo "test-engines={\"include\":[${test_engines}]}" >> $GITHUB_OUTPUT
echo test-engines-all="${test_engines_all}" >> $GITHUB_OUTPUT
CLOUD_BRANCH="${{ inputs.CLOUD_BRANCH }}"
if [[ -z "$CLOUD_BRANCH" ]]; then
CLOUD_BRANCH="main"
fi
echo cloud-branch="$CLOUD_BRANCH" >> $GITHUB_OUTPUT
CLOUD_ENV_NAME="${{ inputs.CLOUD_ENV_NAME }}"
if [[ -z "$CLOUD_ENV_NAME" ]]; then
CLOUD_ENV_NAME="dev"
fi
echo cloud-env-name="$CLOUD_ENV_NAME" >> $GITHUB_OUTPUT
CURRENT_VERSION="${{ inputs.CURRENT_VERSION }}"
if [[ -n "${CURRENT_VERSION}" ]]; then
if [[ "${CURRENT_VERSION}" != "v"* ]]; then
CURRENT_VERSION="v${CURRENT_VERSION}"
fi
fi
echo current-version="$CURRENT_VERSION" >> $GITHUB_OUTPUT
e2e-cluster-clear:
needs: [ get-test-engine ]
runs-on: ubuntu-latest
steps:
- name: Checkout testinfra Code
uses: actions/checkout@v4
with:
repository: apecloud/testinfra
path: ./
token: ${{ env.GH_TOKEN }}
- name: Configure ACK Context ${{ inputs.CLOUD_ENV_NAME }}
id: cloud_env
run: |
mkdir -p $HOME/.kube
touch $HOME/.kube/config
CLOUD_ENV_NAME="${{ inputs.CLOUD_ENV_NAME }}"
if [[ -z "$CLOUD_ENV_NAME" ]]; then
CLOUD_ENV_NAME="dev"
fi
echo CLOUD_ENV_NAME="$CLOUD_ENV_NAME" >> $GITHUB_ENV
E2E_ENV_VARS=""
case "$CLOUD_ENV_NAME" in
dev)
echo '${{ env.ACK_KUBECONFIG_DEV }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_DEV }}"
;;
demo)
echo '${{ env.ACK_KUBECONFIG_DEMO }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_DEMO }}"
;;
idc)
echo '${{ env.IDC_KUBECONFIG }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_IDC }}"
;;
idc1)
echo '${{ env.IDC_KUBECONFIG_1 }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_IDC1 }}"
;;
idc2)
echo '${{ env.IDC_KUBECONFIG_2 }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_IDC2 }}"
;;
idc4)
echo '${{ env.IDC_KUBECONFIG_4 }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_IDC4 }}"
;;
prod)
echo '${{ env.ACK_KUBECONFIG_PROD }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_PROD }}"
;;
intl_prod)
echo '${{ env.ACK_KUBECONFIG_INTL_PROD }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_INTL_PROD }}"
;;
esac
echo E2E_ENV_VARS="$E2E_ENV_VARS" >> $GITHUB_ENV
- name: clear e2e backup
continue-on-error: true
run: |
backup_filter="$(date +%Y-%m)"
echo "delete e2e Retain backup"
kubectl get backup -n kubeblocks-cloud-ns --no-headers | (grep "e2e-" | grep -v "${backup_filter}" || true) | awk '{print $1}' | xargs kubectl delete backup -n kubeblocks-cloud-ns &
echo "patch e2e Deleting backup finalizers"
for i in $(seq 1 10); do
e2e_deleting_backup=$(kubectl get backup -n kubeblocks-cloud-ns --no-headers | (grep "e2e-" | grep "Deleting" || true) | awk '{print $1}')
if [[ -z "${e2e_deleting_backup}" ]]; then
break
else
kubectl get backup -n kubeblocks-cloud-ns --no-headers | (grep "e2e-" | grep "Deleting" || true) | awk '{print $1}' | xargs kubectl patch backup -p '{"metadata":{"finalizers":[]}}' --type=merge -n kubeblocks-cloud-ns
fi
sleep 1
done
- name: run e2e clear cluster
run: |
run_file_log="run_e2e_clear_result.log"
touch ${run_file_log}
for env_vars in $(echo "${E2E_ENV_VARS}" | sed 's/|/ /g'); do
eval_cmd="export $env_vars"
echo "$eval_cmd"
eval "$eval_cmd"
done
CLOUD_TEST_ENV="${{ inputs.CLOUD_TEST_ENV }}"
if [[ -n "${CLOUD_TEST_ENV}" ]]; then
echo "export KB_CLOUD_TEST_ENVIRONMENT=${CLOUD_TEST_ENV}"
export KB_CLOUD_TEST_ENVIRONMENT="${CLOUD_TEST_ENV}"
echo "export KB_CLOUD_TEST_NODE=node3"
export KB_CLOUD_TEST_NODE="node3"
fi
CLOUD_TEST_KB_VERSION="${{ inputs.CLOUD_TEST_KB_VERSION }}"
echo "export KB_CLOUD_TEST_KUBEBLOCKS_VERSION=${CLOUD_TEST_KB_VERSION}"
export KB_CLOUD_TEST_KUBEBLOCKS_VERSION="${CLOUD_TEST_KB_VERSION}"
# run e2e clear cluster
bash test/cloud/test_cloud_e2e_clear.sh \
--release-version "${{ needs.get-test-engine.outputs.cloud-branch }}" \
--env "${CLOUD_TEST_ENV}" | tee -a ${run_file_log}
CLOUD_E2E_CLEAR_POD_NAME="$(cat ${run_file_log} | (grep '\[CLOUD-E2E-CLEAR-POD-NAME\]' || true) )"
if [[ -n "${CLOUD_E2E_CLEAR_POD_NAME}" && "$CLOUD_E2E_CLEAR_POD_NAME" == "[CLOUD-E2E-CLEAR-POD-NAME]"* ]]; then
CLOUD_E2E_CLEAR_POD_NAME=${CLOUD_E2E_CLEAR_POD_NAME#*"[CLOUD-E2E-CLEAR-POD-NAME]"}
fi
echo CLOUD_E2E_CLEAR_POD_NAME="$CLOUD_E2E_CLEAR_POD_NAME" >> $GITHUB_ENV
- name: Waiting for Cloud E2E Clear Pod to be Completed
run: |
set +e
set -o nounset
sleep 2
while true; do
if kubectl get pods -n default | grep "${CLOUD_E2E_CLEAR_POD_NAME}" | egrep "Completed|Error" ; then
echo "Cloud E2E Clear is Done"
set +e
set -o nounset
for i in $(seq 1 10); do
kubectl logs -n default ${CLOUD_E2E_CLEAR_POD_NAME}
log_ret=$?
if [[ $log_ret -eq 0 ]]; then
break
fi
sleep 1
done
for i in $(seq 1 10); do
kubectl delete pod -n default ${CLOUD_E2E_CLEAR_POD_NAME} --force
delete_ret=$?
if [[ $delete_ret -eq 0 ]]; then
break
fi
sleep 1
done
set -e
break
fi
if kubectl get pods -n default | grep "${CLOUD_E2E_CLEAR_POD_NAME}" | egrep "Running|Error" ; then
kubectl logs -n default ${CLOUD_E2E_CLEAR_POD_NAME} --tail=5
else
echo "Waiting for Cloud E2E Clear Pod to be Completed..."
fi
sleep 1
done
e2e-engine-test:
needs: [ get-test-engine, e2e-cluster-clear ]
name: ${{ matrix.test-engine }}
strategy:
max-parallel: 1
fail-fast: false
matrix: ${{ fromJSON(needs.get-test-engine.outputs.test-engines) }}
outputs:
test-result-1: ${{ steps.get_test_result.outputs.test-result-1 }}
test-result-2: ${{ steps.get_test_result.outputs.test-result-2 }}
test-result-3: ${{ steps.get_test_result.outputs.test-result-3 }}
test-result-4: ${{ steps.get_test_result.outputs.test-result-4 }}
test-result-5: ${{ steps.get_test_result.outputs.test-result-5 }}
test-result-6: ${{ steps.get_test_result.outputs.test-result-6 }}
test-result-7: ${{ steps.get_test_result.outputs.test-result-7 }}
test-result-8: ${{ steps.get_test_result.outputs.test-result-8 }}
test-result-9: ${{ steps.get_test_result.outputs.test-result-9 }}
test-result-10: ${{ steps.get_test_result.outputs.test-result-10 }}
test-summary-1: ${{ steps.get_test_result.outputs.test-summary-1 }}
test-summary-2: ${{ steps.get_test_result.outputs.test-summary-2 }}
test-summary-3: ${{ steps.get_test_result.outputs.test-summary-3 }}
test-summary-4: ${{ steps.get_test_result.outputs.test-summary-4 }}
test-summary-5: ${{ steps.get_test_result.outputs.test-summary-5 }}
test-summary-6: ${{ steps.get_test_result.outputs.test-summary-6 }}
test-summary-7: ${{ steps.get_test_result.outputs.test-summary-7 }}
test-summary-8: ${{ steps.get_test_result.outputs.test-summary-8 }}
test-summary-9: ${{ steps.get_test_result.outputs.test-summary-9 }}
test-summary-10: ${{ steps.get_test_result.outputs.test-summary-10 }}
runs-on: ubuntu-latest
steps:
- name: Checkout testinfra Code
uses: actions/checkout@v4
with:
repository: apecloud/testinfra
path: ./
token: ${{ env.GH_TOKEN }}
- name: Checkout apecloud-cd Code
uses: actions/checkout@v4
with:
repository: apecloud/apecloud-cd
path: ./apecloud-cd
ref: ${{ inputs.APECD_REF }}
- name: Checkout apecloud Code
uses: actions/checkout@v4
with:
repository: apecloud/apecloud
path: ./apecloud
token: ${{ env.GH_TOKEN }}
ref: "${{ needs.get-test-engine.outputs.cloud-branch }}"
fetch-depth: 0
- name: Configure ACK Context ${{ inputs.CLOUD_ENV_NAME }}
id: cloud_env
run: |
mkdir -p $HOME/.kube
touch $HOME/.kube/config
CLOUD_ENV_NAME="${{ inputs.CLOUD_ENV_NAME }}"
if [[ -z "$CLOUD_ENV_NAME" ]]; then
CLOUD_ENV_NAME="dev"
fi
echo CLOUD_ENV_NAME="$CLOUD_ENV_NAME" >> $GITHUB_ENV
E2E_ENV_VARS=""
case "$CLOUD_ENV_NAME" in
dev)
echo '${{ env.ACK_KUBECONFIG_DEV }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_DEV }}"
;;
demo)
echo '${{ env.ACK_KUBECONFIG_DEMO }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_DEMO }}"
;;
idc)
echo '${{ env.IDC_KUBECONFIG }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_IDC }}"
;;
idc1)
echo '${{ env.IDC_KUBECONFIG_1 }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_IDC1 }}"
;;
idc2)
echo '${{ env.IDC_KUBECONFIG_2 }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_IDC2 }}"
;;
idc4)
echo '${{ env.IDC_KUBECONFIG_4 }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_IDC4 }}"
;;
prod)
echo '${{ env.ACK_KUBECONFIG_PROD }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_PROD }}"
;;
intl_prod)
echo '${{ env.ACK_KUBECONFIG_INTL_PROD }}' > $HOME/.kube/config
E2E_ENV_VARS="${{ vars.E2E_ENV_VARS_INTL_PROD }}"
;;
esac
echo E2E_ENV_VARS="$E2E_ENV_VARS" >> $GITHUB_ENV
- name: install python dateutil
run: |
pip3 install python-dateutil
- name: run ${{ matrix.test-type }}
run: |
run_file_log="run_e2e_test_result.log"
touch ${run_file_log}
for env_vars in $(echo "${E2E_ENV_VARS}" | sed 's/|/ /g'); do
eval_cmd="export $env_vars"
echo "$eval_cmd"
eval "$eval_cmd"
done
CLOUD_TEST_ENV="${{ inputs.CLOUD_TEST_ENV }}"
if [[ -n "${CLOUD_TEST_ENV}" ]]; then
echo "export KB_CLOUD_TEST_ENVIRONMENT=${CLOUD_TEST_ENV}"
export KB_CLOUD_TEST_ENVIRONMENT="${CLOUD_TEST_ENV}"
echo "export KB_CLOUD_TEST_NODE=node3"
export KB_CLOUD_TEST_NODE="node3"
fi
CLOUD_TEST_KB_VERSION="${{ inputs.CLOUD_TEST_KB_VERSION }}"
echo "export KB_CLOUD_TEST_KUBEBLOCKS_VERSION=${CLOUD_TEST_KB_VERSION}"
export KB_CLOUD_TEST_KUBEBLOCKS_VERSION="${CLOUD_TEST_KB_VERSION}"
TEST_ENGINES="${{ matrix.test-engine }}"
TEST_JOB_INDEX="${{ matrix.test-job-index }}"
echo "export KB_CLOUD_TEST_ENGINES=${TEST_ENGINES}"
export KB_CLOUD_TEST_ENGINES=${TEST_ENGINES}
# run cloud e2e test
bash test/cloud/test_cloud_e2e.sh \
--test-type "engine-test" \
--pod-index "${TEST_JOB_INDEX}" \
--release-version "${{ needs.get-test-engine.outputs.cloud-branch }}" \
--env "${CLOUD_TEST_ENV}" | tee -a ${run_file_log}
CLOUD_E2E_TEST_POD_NAME="$(cat ${run_file_log} | (grep '\[CLOUD-E2E-TEST-POD-NAME\]' || true) )"
if [[ -n "${CLOUD_E2E_TEST_POD_NAME}" && "$CLOUD_E2E_TEST_POD_NAME" == "[CLOUD-E2E-TEST-POD-NAME]"* ]]; then
CLOUD_E2E_TEST_POD_NAME=${CLOUD_E2E_TEST_POD_NAME#*"[CLOUD-E2E-TEST-POD-NAME]"}
fi
echo CLOUD_E2E_TEST_POD_NAME="$CLOUD_E2E_TEST_POD_NAME" >> $GITHUB_ENV
- name: Waiting for Cloud E2E to be Completed
run: |
set +e
set -o nounset
sleep 10
while true; do
if kubectl get pods -n default | grep "${CLOUD_E2E_TEST_POD_NAME}" | egrep "Completed|Error" ; then
echo "Cloud E2E Test is Done"
break
fi
if kubectl get pods -n default | grep "${CLOUD_E2E_TEST_POD_NAME}" | egrep "Running|Error" ; then
kubectl logs -n default ${CLOUD_E2E_TEST_POD_NAME} --tail=5
else
echo "Waiting for Cloud E2E to be Running..."
fi
sleep 1
done
- name: Get Test Result
if: ${{ always() }}
id: get_test_result
run: |
file_log="test_result.log"
test_file_log_path="${{ github.workspace }}/${file_log}"
touch ${test_file_log_path}
set +e
set -o nounset
for i in $(seq 1 10); do
kubectl logs -n default ${CLOUD_E2E_TEST_POD_NAME} > ${test_file_log_path}
log_ret=$?
if [[ $log_ret -eq 0 ]]; then
break
fi
sleep 1
done
for i in $(seq 1 10); do
kubectl delete pod -n default ${CLOUD_E2E_TEST_POD_NAME} --force
delete_ret=$?
if [[ $delete_ret -eq 0 ]]; then
break
fi
sleep 1
done
set -e
cat ${test_file_log_path}
test_ret="$( grep "Test Suite Failed" ${test_file_log_path} || true )"
TEST_RESULT_ALL="$(cat ${test_file_log_path} | (egrep 'SUCCESS!|FAIL!' | grep -- '--' || true))"
echo "test result all:${TEST_RESULT_ALL}"
TEST_RESULT_ALL=$(python3 ${{ github.workspace }}/apecloud-cd/.github/utils/remove_ansi.py --ansi-str "$TEST_RESULT_ALL")
TEST_RESULT=$(bash ${{ github.workspace }}/apecloud-cd/.github/utils/utils.sh --type 41 --test-result "${TEST_RESULT_ALL}")
echo "test result total:${TEST_RESULT}"
if [[ -z "$TEST_RESULT" ]]; then
TEST_RESULT="$(cat ${test_file_log_path} | (egrep 'SUCCESS!|FAIL!' | grep -- '--' || true) | tail -n 1)"
TEST_RESULT=$(python3 ${{ github.workspace }}/apecloud-cd/.github/utils/remove_ansi.py --ansi-str "$TEST_RESULT")
echo "test result remove ansi:${TEST_RESULT}"
fi
if [[ -z "$TEST_RESULT" ]]; then
TEST_RESULT="[PASSED]"
if [[ -n "$test_ret" || -z "${TEST_RESULT_ALL}" ]]; then
TEST_RESULT="[FAILED]"
fi
echo "test result PASSED or FAILED:${TEST_RESULT}"
fi
file_log_tmp="test_result_tmp.log"
test_file_log_tmp_path="${{ github.workspace }}/${file_log_tmp}"
touch ${test_file_log_tmp_path}
E2E_TEST_RESULT_LOG=$(python3 ${{ github.workspace }}/apecloud-cd/.github/utils/remove_ansi_file.py ${test_file_log_path})
echo "${E2E_TEST_RESULT_LOG}" > ${test_file_log_tmp_path}
ENGINE_SUMMARY=$(python3 test/report/parse_ginkgo.py summary2 ${test_file_log_tmp_path})
TEST_JOB_INDEX="${{ matrix.test-job-index }}"
case "${TEST_JOB_INDEX}" in
01)
echo "TEST_JOB_INDEX:${TEST_JOB_INDEX}"
echo test-result-1="${TEST_RESULT}" >> $GITHUB_OUTPUT
echo test-summary-1="${ENGINE_SUMMARY}" >> $GITHUB_OUTPUT
;;
02)
echo "TEST_JOB_INDEX:${TEST_JOB_INDEX}"
echo test-result-2="${TEST_RESULT}" >> $GITHUB_OUTPUT
echo test-summary-2="${ENGINE_SUMMARY}" >> $GITHUB_OUTPUT
;;
03)
echo "TEST_JOB_INDEX:${TEST_JOB_INDEX}"
echo test-result-3="${TEST_RESULT}" >> $GITHUB_OUTPUT
echo test-summary-3="${ENGINE_SUMMARY}" >> $GITHUB_OUTPUT
;;
04)
echo "TEST_JOB_INDEX:${TEST_JOB_INDEX}"
echo test-result-4="${TEST_RESULT}" >> $GITHUB_OUTPUT
echo test-summary-4="${ENGINE_SUMMARY}" >> $GITHUB_OUTPUT
;;
05)
echo "TEST_JOB_INDEX:${TEST_JOB_INDEX}"
echo test-result-5="${TEST_RESULT}" >> $GITHUB_OUTPUT
echo test-summary-5="${ENGINE_SUMMARY}" >> $GITHUB_OUTPUT
;;
06)
echo "TEST_JOB_INDEX:${TEST_JOB_INDEX}"
echo test-result-6="${TEST_RESULT}" >> $GITHUB_OUTPUT
echo test-summary-6="${ENGINE_SUMMARY}" >> $GITHUB_OUTPUT
;;
07)
echo "TEST_JOB_INDEX:${TEST_JOB_INDEX}"
echo test-result-7="${TEST_RESULT}" >> $GITHUB_OUTPUT
echo test-summary-7="${ENGINE_SUMMARY}" >> $GITHUB_OUTPUT
;;
08)
echo "TEST_JOB_INDEX:${TEST_JOB_INDEX}"
echo test-result-8="${TEST_RESULT}" >> $GITHUB_OUTPUT
echo test-summary-8="${ENGINE_SUMMARY}" >> $GITHUB_OUTPUT
;;
09)
echo "TEST_JOB_INDEX:${TEST_JOB_INDEX}"
echo test-result-9="${TEST_RESULT}" >> $GITHUB_OUTPUT
echo test-summary-9="${ENGINE_SUMMARY}" >> $GITHUB_OUTPUT
;;
10)
echo "TEST_JOB_INDEX:${TEST_JOB_INDEX}"
echo test-result-10="${TEST_RESULT}" >> $GITHUB_OUTPUT
echo test-summary-10="${ENGINE_SUMMARY}" >> $GITHUB_OUTPUT
;;
esac
echo "TEST_RESULT:${TEST_RESULT}"
echo "ENGINE_SUMMARY:${ENGINE_SUMMARY}"
if [[ -n "$test_ret" ]]; then
exit 1
fi
send-message:
needs: [ get-test-engine, e2e-engine-test ]
runs-on: ubuntu-latest
if: ${{ always() }}
steps:
- name: Checkout apecloud-cd Code
uses: actions/checkout@v4
with:
repository: apecloud/apecloud-cd
ref: ${{ inputs.APECD_REF }}
- name: send test result message
run: |
export TZ='Asia/Shanghai'
date_ret=$(date +%Y-%m-%d-%T)
CLOUD_BRANCH="${{ needs.get-test-engine.outputs.cloud-branch }}"
CLOUD_ENV_NAME="${{ needs.get-test-engine.outputs.cloud-env-name }}"
TEST_ENGINES_ALL="${{ needs.get-test-engine.outputs.test-engines-all }}"
APECLOUD_CURRENT_VERSION="${{ needs.get-test-engine.outputs.current-version }}"
TEST_RESULT_ALL=""
for test_engines_all in $(echo "${TEST_ENGINES_ALL}" | sed 's/##/ /g'); do
test_engines=${test_engines_all%%|*}
test_job_index=${test_engines_all#*|}
case "${test_job_index}" in
01)
echo "test-job-index:${test_job_index}"
TEST_RESULT="${{ needs.e2e-engine-test.outputs.test-result-1 }}"
TEST_RESULT_ALL="${TEST_RESULT_ALL}##${test_engines}|${TEST_RESULT}"
;;
02)
echo "test-job-index:${test_job_index}"
TEST_RESULT="${{ needs.e2e-engine-test.outputs.test-result-2 }}"
TEST_RESULT_ALL="${TEST_RESULT_ALL}##${test_engines}|${TEST_RESULT}"
;;
03)
echo "test-job-index:${test_job_index}"
TEST_RESULT="${{ needs.e2e-engine-test.outputs.test-result-3 }}"
TEST_RESULT_ALL="${TEST_RESULT_ALL}##${test_engines}|${TEST_RESULT}"
;;
04)
echo "test-job-index:${test_job_index}"
TEST_RESULT="${{ needs.e2e-engine-test.outputs.test-result-4 }}"
TEST_RESULT_ALL="${TEST_RESULT_ALL}##${test_engines}|${TEST_RESULT}"
;;
05)
echo "test-job-index:${test_job_index}"
TEST_RESULT="${{ needs.e2e-engine-test.outputs.test-result-5 }}"
TEST_RESULT_ALL="${TEST_RESULT_ALL}##${test_engines}|${TEST_RESULT}"
;;
06)
echo "test-job-index:${test_job_index}"
TEST_RESULT="${{ needs.e2e-engine-test.outputs.test-result-6 }}"
TEST_RESULT_ALL="${TEST_RESULT_ALL}##${test_engines}|${TEST_RESULT}"
;;
07)
echo "test-job-index:${test_job_index}"
TEST_RESULT="${{ needs.e2e-engine-test.outputs.test-result-7 }}"
TEST_RESULT_ALL="${TEST_RESULT_ALL}##${test_engines}|${TEST_RESULT}"
;;
08)
echo "test-job-index:${test_job_index}"
TEST_RESULT="${{ needs.e2e-engine-test.outputs.test-result-8 }}"
TEST_RESULT_ALL="${TEST_RESULT_ALL}##${test_engines}|${TEST_RESULT}"
;;
09)
echo "test-job-index:${test_job_index}"
TEST_RESULT="${{ needs.e2e-engine-test.outputs.test-result-9 }}"
TEST_RESULT_ALL="${TEST_RESULT_ALL}##${test_engines}|${TEST_RESULT}"
;;
10)
echo "test-job-index:${test_job_index}"
TEST_RESULT="${{ needs.e2e-engine-test.outputs.test-result-10 }}"
TEST_RESULT_ALL="${TEST_RESULT_ALL}##${test_engines}|${TEST_RESULT}"
;;
esac
done
echo "TEST_RESULT_ALL:${TEST_RESULT_ALL}"
TEST_RESULT_ALL=$( bash .github/utils/utils.sh --type 40 \
--github-repo "${{ github.repository }}" \
--github-token "${{ env.GH_TOKEN }}" \
--test-result "${TEST_RESULT_ALL}" \
--run-id "$GITHUB_RUN_ID" )
echo "TEST_RESULT_ALL:${TEST_RESULT_ALL}"
CLOUD_ENV_NAME_TMP="${CLOUD_ENV_NAME}"
CLOUD_TEST_ENV="${{ inputs.CLOUD_TEST_ENV }}"
if [[ -n "${CLOUD_TEST_ENV}" ]]; then
CLOUD_ENV_NAME_TMP="${CLOUD_TEST_ENV}"
fi
TEST_TITLE="[${CLOUD_BRANCH}][${CLOUD_ENV_NAME_TMP}] Cloud E2E Engine Test [${date_ret}]"
python3 .github/utils/send_mesage.py \
--send-type ginkgo \
--url "${{ vars.CLOUD_E2E_BOT_WEBHOOK }}" \
--title "$TEST_TITLE" \
--result "${TEST_RESULT_ALL}"
for test_engines_all in $(echo "${TEST_ENGINES_ALL}" | sed 's/##/ /g'); do
test_engines=${test_engines_all%%|*}
test_job_index=${test_engines_all#*|}
case "${test_job_index}" in
01)
echo "test-job-index:${test_job_index}"
ENGINE_SUMMARY="${{ needs.e2e-engine-test.outputs.test-summary-1 }}"
TEST_TITLE_ENGINE_SUMMARY="[${CLOUD_BRANCH}][${CLOUD_ENV_NAME_TMP}] Cloud E2E ${test_engines} API Summary [${date_ret}]"
if [[ -n "${ENGINE_SUMMARY}" ]]; then
echo "ENGINE_SUMMARY:${ENGINE_SUMMARY}"
ENGINE_SUMMARY_TMP="$(bash .github/utils/utils.sh \
--type 45 \
--test-result "${TEST_RESULT_ALL}" \
--coverage-result "${ENGINE_SUMMARY}")"
echo "ENGINE_SUMMARY_TMP:${ENGINE_SUMMARY_TMP}"
python3 .github/utils/send_mesage.py \
--send-type "engine-summary2" \
--url "${{ vars.REPORT_BOT_WEBHOOK }}" \
--title "$TEST_TITLE_ENGINE_SUMMARY" \
--result "$ENGINE_SUMMARY_TMP"
fi
;;
02)
echo "test-job-index:${test_job_index}"
ENGINE_SUMMARY="${{ needs.e2e-engine-test.outputs.test-summary-2 }}"
TEST_TITLE_ENGINE_SUMMARY="[${CLOUD_BRANCH}][${CLOUD_ENV_NAME_TMP}] Cloud E2E ${test_engines} API Summary [${date_ret}]"
if [[ -n "${ENGINE_SUMMARY}" ]]; then
echo "ENGINE_SUMMARY:${ENGINE_SUMMARY}"
ENGINE_SUMMARY_TMP="$(bash .github/utils/utils.sh \
--type 45 \
--test-result "${TEST_RESULT_ALL}" \
--coverage-result "${ENGINE_SUMMARY}")"
echo "ENGINE_SUMMARY_TMP:${ENGINE_SUMMARY_TMP}"
python3 .github/utils/send_mesage.py \
--send-type "engine-summary2" \
--url "${{ vars.REPORT_BOT_WEBHOOK }}" \
--title "$TEST_TITLE_ENGINE_SUMMARY" \
--result "$ENGINE_SUMMARY_TMP"
fi
;;
03)
echo "test-job-index:${test_job_index}"
ENGINE_SUMMARY="${{ needs.e2e-engine-test.outputs.test-summary-3 }}"
TEST_TITLE_ENGINE_SUMMARY="[${CLOUD_BRANCH}][${CLOUD_ENV_NAME_TMP}] Cloud E2E ${test_engines} API Summary [${date_ret}]"
if [[ -n "${ENGINE_SUMMARY}" ]]; then
echo "ENGINE_SUMMARY:${ENGINE_SUMMARY}"
ENGINE_SUMMARY_TMP="$(bash .github/utils/utils.sh \
--type 45 \
--test-result "${TEST_RESULT_ALL}" \
--coverage-result "${ENGINE_SUMMARY}")"
echo "ENGINE_SUMMARY_TMP:${ENGINE_SUMMARY_TMP}"
python3 .github/utils/send_mesage.py \
--send-type "engine-summary2" \
--url "${{ vars.REPORT_BOT_WEBHOOK }}" \
--title "$TEST_TITLE_ENGINE_SUMMARY" \
--result "$ENGINE_SUMMARY_TMP"
fi
;;
04)
echo "test-job-index:${test_job_index}"
ENGINE_SUMMARY="${{ needs.e2e-engine-test.outputs.test-summary-4 }}"
TEST_TITLE_ENGINE_SUMMARY="[${CLOUD_BRANCH}][${CLOUD_ENV_NAME_TMP}] Cloud E2E ${test_engines} API Summary [${date_ret}]"
if [[ -n "${ENGINE_SUMMARY}" ]]; then
echo "ENGINE_SUMMARY:${ENGINE_SUMMARY}"
ENGINE_SUMMARY_TMP="$(bash .github/utils/utils.sh \
--type 45 \
--test-result "${TEST_RESULT_ALL}" \
--coverage-result "${ENGINE_SUMMARY}")"
echo "ENGINE_SUMMARY_TMP:${ENGINE_SUMMARY_TMP}"
python3 .github/utils/send_mesage.py \
--send-type "engine-summary2" \
--url "${{ vars.REPORT_BOT_WEBHOOK }}" \
--title "$TEST_TITLE_ENGINE_SUMMARY" \
--result "$ENGINE_SUMMARY_TMP"
fi
;;
05)
echo "test-job-index:${test_job_index}"
ENGINE_SUMMARY="${{ needs.e2e-engine-test.outputs.test-summary-5 }}"
TEST_TITLE_ENGINE_SUMMARY="[${CLOUD_BRANCH}][${CLOUD_ENV_NAME_TMP}] Cloud E2E ${test_engines} API Summary [${date_ret}]"
if [[ -n "${ENGINE_SUMMARY}" ]]; then
echo "ENGINE_SUMMARY:${ENGINE_SUMMARY}"
ENGINE_SUMMARY_TMP="$(bash .github/utils/utils.sh \
--type 45 \
--test-result "${TEST_RESULT_ALL}" \
--coverage-result "${ENGINE_SUMMARY}")"
echo "ENGINE_SUMMARY_TMP:${ENGINE_SUMMARY_TMP}"
python3 .github/utils/send_mesage.py \
--send-type "engine-summary2" \
--url "${{ vars.REPORT_BOT_WEBHOOK }}" \
--title "$TEST_TITLE_ENGINE_SUMMARY" \
--result "$ENGINE_SUMMARY_TMP"
fi
;;
06)
echo "test-job-index:${test_job_index}"
ENGINE_SUMMARY="${{ needs.e2e-engine-test.outputs.test-summary-6 }}"
TEST_TITLE_ENGINE_SUMMARY="[${CLOUD_BRANCH}][${CLOUD_ENV_NAME_TMP}] Cloud E2E ${test_engines} API Summary [${date_ret}]"
if [[ -n "${ENGINE_SUMMARY}" ]]; then
echo "ENGINE_SUMMARY:${ENGINE_SUMMARY}"
ENGINE_SUMMARY_TMP="$(bash .github/utils/utils.sh \
--type 45 \
--test-result "${TEST_RESULT_ALL}" \
--coverage-result "${ENGINE_SUMMARY}")"
echo "ENGINE_SUMMARY_TMP:${ENGINE_SUMMARY_TMP}"
python3 .github/utils/send_mesage.py \
--send-type "engine-summary2" \
--url "${{ vars.REPORT_BOT_WEBHOOK }}" \
--title "$TEST_TITLE_ENGINE_SUMMARY" \
--result "$ENGINE_SUMMARY_TMP"
fi
;;
07)
echo "test-job-index:${test_job_index}"
ENGINE_SUMMARY="${{ needs.e2e-engine-test.outputs.test-summary-7 }}"
TEST_TITLE_ENGINE_SUMMARY="[${CLOUD_BRANCH}][${CLOUD_ENV_NAME_TMP}] Cloud E2E ${test_engines} API Summary [${date_ret}]"
if [[ -n "${ENGINE_SUMMARY}" ]]; then
echo "ENGINE_SUMMARY:${ENGINE_SUMMARY}"
ENGINE_SUMMARY_TMP="$(bash .github/utils/utils.sh \
--type 45 \
--test-result "${TEST_RESULT_ALL}" \
--coverage-result "${ENGINE_SUMMARY}")"
echo "ENGINE_SUMMARY_TMP:${ENGINE_SUMMARY_TMP}"
python3 .github/utils/send_mesage.py \
--send-type "engine-summary2" \
--url "${{ vars.REPORT_BOT_WEBHOOK }}" \
--title "$TEST_TITLE_ENGINE_SUMMARY" \
--result "$ENGINE_SUMMARY_TMP"
fi
;;
08)
echo "test-job-index:${test_job_index}"
ENGINE_SUMMARY="${{ needs.e2e-engine-test.outputs.test-summary-8 }}"
TEST_TITLE_ENGINE_SUMMARY="[${CLOUD_BRANCH}][${CLOUD_ENV_NAME_TMP}] Cloud E2E ${test_engines} API Summary [${date_ret}]"
if [[ -n "${ENGINE_SUMMARY}" ]]; then
echo "ENGINE_SUMMARY:${ENGINE_SUMMARY}"
ENGINE_SUMMARY_TMP="$(bash .github/utils/utils.sh \
--type 45 \
--test-result "${TEST_RESULT_ALL}" \
--coverage-result "${ENGINE_SUMMARY}")"
echo "ENGINE_SUMMARY_TMP:${ENGINE_SUMMARY_TMP}"
python3 .github/utils/send_mesage.py \
--send-type "engine-summary2" \
--url "${{ vars.REPORT_BOT_WEBHOOK }}" \
--title "$TEST_TITLE_ENGINE_SUMMARY" \
--result "$ENGINE_SUMMARY_TMP"
fi
;;
09)
echo "test-job-index:${test_job_index}"
ENGINE_SUMMARY="${{ needs.e2e-engine-test.outputs.test-summary-9 }}"
TEST_TITLE_ENGINE_SUMMARY="[${CLOUD_BRANCH}][${CLOUD_ENV_NAME_TMP}] Cloud E2E ${test_engines} API Summary [${date_ret}]"
if [[ -n "${ENGINE_SUMMARY}" ]]; then
echo "ENGINE_SUMMARY:${ENGINE_SUMMARY}"
ENGINE_SUMMARY_TMP="$(bash .github/utils/utils.sh \
--type 45 \
--test-result "${TEST_RESULT_ALL}" \
--coverage-result "${ENGINE_SUMMARY}")"
echo "ENGINE_SUMMARY_TMP:${ENGINE_SUMMARY_TMP}"
python3 .github/utils/send_mesage.py \
--send-type "engine-summary2" \
--url "${{ vars.REPORT_BOT_WEBHOOK }}" \
--title "$TEST_TITLE_ENGINE_SUMMARY" \
--result "$ENGINE_SUMMARY_TMP"
fi
;;
10)
echo "test-job-index:${test_job_index}"
ENGINE_SUMMARY="${{ needs.e2e-engine-test.outputs.test-summary-10 }}"
TEST_TITLE_ENGINE_SUMMARY="[${CLOUD_BRANCH}][${CLOUD_ENV_NAME_TMP}] Cloud E2E ${test_engines} API Summary [${date_ret}]"
if [[ -n "${ENGINE_SUMMARY}" ]]; then
echo "ENGINE_SUMMARY:${ENGINE_SUMMARY}"
ENGINE_SUMMARY_TMP="$(bash .github/utils/utils.sh \
--type 45 \
--test-result "${TEST_RESULT_ALL}" \
--coverage-result "${ENGINE_SUMMARY}")"
echo "ENGINE_SUMMARY_TMP:${ENGINE_SUMMARY_TMP}"
python3 .github/utils/send_mesage.py \
--send-type "engine-summary2" \
--url "${{ vars.REPORT_BOT_WEBHOOK }}" \
--title "$TEST_TITLE_ENGINE_SUMMARY" \
--result "$ENGINE_SUMMARY_TMP"
fi
;;
esac
done