diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index 7749966f944fa4a9d8d6ab79372ec3d1584ca4aa..d444c9cca8f64f24eb50416b85dc10dd3f78e25a 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -65,7 +65,7 @@ jobs: uses: codecov/codecov-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }} - file: ./ci/scripts/output_new.info + file: ./ci/scripts/milvus_output.info name: ubuntu-${{ matrix.ubuntu }}-unittests flags: cpu_version_ubuntu_18_04_unittest yml: ./codecov.yaml @@ -111,7 +111,7 @@ jobs: uses: codecov/codecov-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }} - file: ./ci/scripts/output_new.info + file: ./ci/scripts/milvus_output.info name: centos-${{ matrix.centos }}-unittests flags: cpu_version_centos7_unittest yml: ./codecov.yaml diff --git a/.jenkins/modules/Coverage/Coverage.groovy b/.jenkins/modules/Coverage/Coverage.groovy deleted file mode 100644 index 218f412c86528eed839e03bdc90adedac1aa7726..0000000000000000000000000000000000000000 --- a/.jenkins/modules/Coverage/Coverage.groovy +++ /dev/null @@ -1,16 +0,0 @@ -timeout(time: 10, unit: 'MINUTES') { - dir ("ci/scripts") { - sh ". ./before-install.sh && ./coverage.sh" - String formatFlag = "${BINARY_VERSION}-version-${OS_NAME}-unittest".replaceAll("\\.", "_").replaceAll("-", "_") - def isTimeTriggeredBuild = currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() != 0 - if (isTimeTriggeredBuild) { - withCredentials([[$class: 'StringBinding', credentialsId: "milvus-ci-codecov-token", variable: 'CODECOV_TOKEN']]) { - sh "curl -s https://codecov.io/bash | bash -s - -f output_new.info -U \"--proxy http://proxy.zilliz.tech:1088\" -A \"--proxy http://proxy.zilliz.tech:1088\" -n ${BINARY_VERSION}-version-${OS_NAME}-unittest -F nightly -F ${formatFlag} || echo \"Codecov did not collect coverage reports\"" - } - } else { - withCredentials([[$class: 'StringBinding', credentialsId: "milvus-ci-codecov-token", variable: 'CODECOV_TOKEN']]) { - sh "curl -s https://codecov.io/bash | bash -s - -f output_new.info -U \"--proxy http://proxy.zilliz.tech:1088\" -A \"--proxy http://proxy.zilliz.tech:1088\" -n ${BINARY_VERSION}-version-${OS_NAME}-unittest -F ${formatFlag} || echo \"Codecov did not collect coverage reports\"" - } - } - } -} diff --git a/.jenkins/modules/Unittest/Unittest.groovy b/.jenkins/modules/Unittest/Unittest.groovy index ec06a15757d6b1d70db56c9071c8d4a16ed9546d..ec4f687e3e7636aa19196eb06216eb3a43ca6f81 100644 --- a/.jenkins/modules/Unittest/Unittest.groovy +++ b/.jenkins/modules/Unittest/Unittest.groovy @@ -1,5 +1,19 @@ -timeout(time: 30, unit: 'MINUTES') { +timeout(time: 15, unit: 'MINUTES') { dir ("ci/scripts") { - sh "./run_unittest.sh -i ${env.MILVUS_INSTALL_PREFIX}" + String formatName = "${BINARY_VERSION}-version-${OS_NAME}-unittest"; + String formatFlag = "${formatName}".replaceAll("\\.", "_").replaceAll("-", "_") + String coverageInfoName = "milvus_output.info" + String proxyAddr = "http://proxy.zilliz.tech:1088" + def isTimeTriggeredBuild = currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() != 0 + sh ". ./before-install.sh && ./run_unittest.sh -i ${env.MILVUS_INSTALL_PREFIX} -o ${coverageInfoName}" + if (isTimeTriggeredBuild) { + withCredentials([[$class: 'StringBinding', credentialsId: "milvus-ci-codecov-token", variable: 'CODECOV_TOKEN']]) { + sh "curl -s https://codecov.io/bash | bash -s - -f ${coverageInfoName} -U \"--proxy ${proxyAddr}\" -A \"--proxy ${proxyAddr}\" -n ${formatName} -F nightly -F ${formatFlag} || echo \"Codecov did not collect coverage reports\"" + } + } else { + withCredentials([[$class: 'StringBinding', credentialsId: "milvus-ci-codecov-token", variable: 'CODECOV_TOKEN']]) { + sh "curl -s https://codecov.io/bash | bash -s - -f ${coverageInfoName} -U \"--proxy ${proxyAddr}\" -A \"--proxy ${proxyAddr}\" -n ${formatName} -F ${formatFlag} || echo \"Codecov did not collect coverage reports\"" + } + } } } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b39742058476393106509987dffb2d51958f145a..763aef347bf8b3ca1b55ae2eded84bd3995531c7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -115,21 +115,8 @@ Run unit test and generate code for code coverage check $ ./build.sh -u -c ``` -Run MySQL docker -```shell -docker pull mysql:latest -docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest -``` - Run code coverage ```shell -$ ./coverage.sh -u root -p 123456 -t 127.0.0.1 -``` - -Or start your own MySQL server, and then run code coverage - -```shell -$ ./coverage.sh -u ${MYSQL_USERNAME} -p ${MYSQL_PASSWORD} -t ${MYSQL_SERVER_IP} +$ ./coverage.sh ``` - diff --git a/ci/jenkins/Jenkinsfile b/ci/jenkins/Jenkinsfile index 3a68e5533dfdcc01260a901fac2c6867ae08eabd..48cf613de8aba44efd65a5892209dbe8576be3ec 100644 --- a/ci/jenkins/Jenkinsfile +++ b/ci/jenkins/Jenkinsfile @@ -66,7 +66,6 @@ pipeline { container("milvus-${BINARY_VERSION}-build-env") { MPLModule('Milvus Build') MPLModule('Unittest') - MPLModule('Coverage') MPLModule('Package Build') } } diff --git a/ci/scripts/coverage.sh b/ci/scripts/coverage.sh deleted file mode 100755 index cfde084c44a3e41514ced371ce75498eff705442..0000000000000000000000000000000000000000 --- a/ci/scripts/coverage.sh +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/bash - -SOURCE="${BASH_SOURCE[0]}" -while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink - DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" - SOURCE="$(readlink "$SOURCE")" - [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located -done -SCRIPTS_DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" - -HELP=" -Usage: - $0 [flags] [Arguments] - - -b Core Code build directory - -c Codecov token - -h or --help Print help information - - -Use \"$0 --help\" for more information about a given command. -" - -ARGS=`getopt -o "b:c:h" -l "help" -n "$0" -- "$@"` - -eval set -- "${ARGS}" - -while true ; do - case "$1" in - -b) - # o has an optional argument. As we are in quoted mode, - # an empty parameter will be generated if its optional - # argument is not found. - case "$2" in - "") echo "Option CORE_BUILD_DIR, no argument"; exit 1 ;; - *) CORE_BUILD_DIR=$2 ; shift 2 ;; - esac ;; - -c) - case "$2" in - "") echo "Option CODECOV_TOKEN, no argument"; exit 1 ;; - *) CODECOV_TOKEN=$2 ; shift 2 ;; - esac ;; - -h|--help) echo -e "${HELP}" ; exit 0 ;; - --) shift ; break ;; - *) echo "Internal error!" ; exit 1 ;; - esac -done - -# Set defaults for vars modified by flags to this script -MILVUS_CORE_DIR="${SCRIPTS_DIR}/../../core" -CORE_BUILD_DIR=${CORE_BUILD_DIR:="${MILVUS_CORE_DIR}/cmake_build"} - -LCOV_CMD="lcov" -# LCOV_GEN_CMD="genhtml" - -FILE_INFO_BASE="base.info" -FILE_INFO_MILVUS="server.info" -FILE_INFO_OUTPUT="output.info" -FILE_INFO_OUTPUT_NEW="output_new.info" -DIR_LCOV_OUTPUT="lcov_out" - -DIR_GCNO="${CORE_BUILD_DIR}" -DIR_UNITTEST="${INSTALL_PREFIX}/unittest" - -cd ${SCRIPTS_DIR} - -# delete old code coverage info files -rm -rf ${DIR_LCOV_OUTPUT} -rm -f ${FILE_INFO_BASE} ${FILE_INFO_MILVUS} ${FILE_INFO_OUTPUT} ${FILE_INFO_OUTPUT_NEW} - -# get baseline -${LCOV_CMD} -c -i -d ${DIR_GCNO} -o "${FILE_INFO_BASE}" -if [ $? -ne 0 ]; then - echo "gen baseline coverage run failed" - exit -1 -fi - -# gen code coverage -${LCOV_CMD} -d ${DIR_GCNO} -o "${FILE_INFO_MILVUS}" -c - -if [ $? -ne 0 ]; then - echo "gen ${FILE_INFO_MILVUS} failed" - exit 0 -fi - -# merge coverage -${LCOV_CMD} -a ${FILE_INFO_BASE} -a ${FILE_INFO_MILVUS} -o "${FILE_INFO_OUTPUT}" - -# remove third party from tracefiles -${LCOV_CMD} -r "${FILE_INFO_OUTPUT}" -o "${FILE_INFO_OUTPUT_NEW}" \ - "/usr/*" \ - "*/cmake_build/*" \ - "*/src/index/thirdparty*" \ - "*/src/grpc*" \ - "*/thirdparty/*" - -if [ $? -ne 0 ]; then - echo "gen ${FILE_INFO_OUTPUT_NEW} failed" - exit 0 -fi - -if [[ -n ${CODECOV_TOKEN} ]];then - export CODECOV_TOKEN="${CODECOV_TOKEN}" - curl -s https://codecov.io/bash | bash -s - -f output_new.info || echo "Codecov did not collect coverage reports" -fi diff --git a/ci/scripts/run_unittest.sh b/ci/scripts/run_unittest.sh index 387e00c2d6555472788c3f359f3e7315386e44d0..375f54eb922b94ee5f8fca47578ae0d3049c1393 100755 --- a/ci/scripts/run_unittest.sh +++ b/ci/scripts/run_unittest.sh @@ -3,10 +3,12 @@ set -e SOURCE="${BASH_SOURCE[0]}" -while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink - DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" - SOURCE="$(readlink "$SOURCE")" - [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +# resolve $SOURCE until the file is no longer a symlink +while [ -h "$SOURCE" ]; do + DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located + [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" done SCRIPTS_DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" @@ -16,55 +18,125 @@ Usage: -i [INSTALL_PREFIX] or --install_prefix=[INSTALL_PREFIX] Install directory used by install. - -h or --help Print help information + -b Core Code build directory + -c Codecov token + -o Output info file name + -h or --help Print help information - -Use \"$0 --help\" for more information about a given command. +Use \"$0 --help\" for more information about a given command. " -ARGS=`getopt -o "i:h" -l "install_prefix::,help" -n "$0" -- "$@"` +ARGS=`getopt -o "i:b:c:o:h" -l "install_prefix::,help" -n "$0" -- "$@"` eval set -- "${ARGS}" while true ; do - case "$1" in - -i|--install_prefix) - # o has an optional argument. As we are in quoted mode, - # an empty parameter will be generated if its optional - # argument is not found. - case "$2" in - "") echo "Option install_prefix, no argument"; exit 1 ;; - *) INSTALL_PREFIX=$2 ; shift 2 ;; - esac ;; - -h|--help) echo -e "${HELP}" ; exit 0 ;; - --) shift ; break ;; - *) echo "Internal error!" ; exit 1 ;; - esac + case "$1" in + -i|--install_prefix) + case "$2" in + "") echo "Option install_prefix, no argument"; exit 1 ;; + *) INSTALL_PREFIX=$2 ; shift 2 ;; + esac ;; + -b) + case "$2" in + "") echo "Option CORE_BUILD_DIR, no argument"; exit 1 ;; + *) CORE_BUILD_DIR=$2 ; shift 2 ;; + esac ;; + -c) + case "$2" in + "") echo "Option CODECOV_TOKEN, no argument"; exit 1 ;; + *) CODECOV_TOKEN=$2 ; shift 2 ;; + esac ;; + -o) + case "$2" in + "") echo "Option OUTPUT_INFO, no argument"; exit 1 ;; + *) OUTPUT_INFO=$2 ; shift 2 ;; + esac ;; + -h|--help) echo -e "${HELP}" ; exit 0 ;; + --) shift ; break ;; + *) echo "Internal error!" ; exit 1 ;; + esac done # Set defaults for vars modified by flags to this script INSTALL_PREFIX=${INSTALL_PREFIX:="/var/lib/milvus"} -DIR_UNITTEST="${INSTALL_PREFIX}/unittest" +UNITTEST_DIR="${INSTALL_PREFIX}/unittest" + +MILVUS_CORE_DIR="${SCRIPTS_DIR}/../../core" +CORE_BUILD_DIR=${CORE_BUILD_DIR:="${MILVUS_CORE_DIR}/cmake_build"} + +LCOV_CMD="lcov" +# LCOV_GEN_CMD="genhtml" + +BASE_INFO="milvus_base.info" +TEST_INFO="milvus_test.info" +TOTAL_INFO="milvus_total.info" +OUTPUT_INFO=${OUTPUT_INFO} +# LCOV_OUTPUT_DIR="lcov_out" if [ -d ${INSTALL_PREFIX}/lib ]; then export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${INSTALL_PREFIX}/lib fi -if [ ! -d ${DIR_UNITTEST} ]; then +if [ ! -d ${UNITTEST_DIR} ]; then echo "The unittest folder does not exist!" exit 1 fi pushd ${SCRIPTS_DIR} -for test in `ls ${DIR_UNITTEST}`; do - echo $test +# delete old code coverage info files +# rm -rf ${LCOV_OUTPUT_DIR} +rm -f ${BASE_INFO} ${TEST_INFO} ${TOTAL_INFO} ${OUTPUT_INFO} + +# get baseline +${LCOV_CMD} -c -i -d ${CORE_BUILD_DIR} -o "${BASE_INFO}" +if [ $? -ne 0 ]; then + echo "gen ${BASE_INFO} failed" + exit 1 +fi + +# run unittest +for test in `ls ${UNITTEST_DIR}`; do + echo $test " running..." # run unittest - ${DIR_UNITTEST}/${test} + ${UNITTEST_DIR}/${test} if [ $? -ne 0 ]; then - echo ${DIR_UNITTEST}/${test} "run failed" + echo ${UNITTEST_DIR}/${test} "run failed" exit 1 fi done +# gen code coverage +${LCOV_CMD} -c -d ${CORE_BUILD_DIR} -o "${TEST_INFO}" +if [ $? -ne 0 ]; then + echo "gen ${TEST_INFO} failed" + exit 1 +fi + +# merge coverage +${LCOV_CMD} -a ${BASE_INFO} -a ${TEST_INFO} -o "${TOTAL_INFO}" +if [ $? -ne 0 ]; then + echo "gen ${TOTAL_INFO} failed" + exit 1 +fi + +# remove third party from tracefiles +${LCOV_CMD} -r "${TOTAL_INFO}" -o "${OUTPUT_INFO}" \ + "/usr/*" \ + "*/cmake_build/*" \ + "*/src/index/thirdparty*" \ + "*/src/grpc*" \ + "*/thirdparty/*" + +if [ $? -ne 0 ]; then + echo "gen ${OUTPUT_INFO} failed" + exit 1 +fi + +if [[ -n ${CODECOV_TOKEN} ]];then + export CODECOV_TOKEN="${CODECOV_TOKEN}" + curl -s https://codecov.io/bash | bash -s - -f ${OUTPUT_INFO} || echo "Codecov did not collect coverage reports" +fi + popd diff --git a/core/coverage.sh b/core/coverage.sh index b09369fde4e03ede9c177e6faab860198d272697..507d29ed3737fb7c710dee57da3b30d4331bfb9c 100755 --- a/core/coverage.sh +++ b/core/coverage.sh @@ -5,51 +5,53 @@ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/milvus/lib LCOV_CMD="lcov" LCOV_GEN_CMD="genhtml" -FILE_INFO_BASE="base.info" -FILE_INFO_MILVUS="server.info" -FILE_INFO_OUTPUT="output.info" -FILE_INFO_OUTPUT_NEW="output_new.info" -DIR_LCOV_OUTPUT="lcov_out" +BASE_INFO="milvus_base.info" +TEST_INFO="milvus_test.info" +TOTAL_INFO="milvus_total.info" +OUTPUT_INFO="milvus_output.info" +LCOV_OUTPUT_DIR="lcov_out" -DIR_GCNO="cmake_build" -DIR_UNITTEST="milvus/unittest" +GCNO_DIR="cmake_build" +UNITTEST_DIR="milvus/unittest" # delete old code coverage info files -rm -f FILE_INFO_BASE -rm -f FILE_INFO_MILVUS -rm -f FILE_INFO_OUTPUT -rm -f FILE_INFO_OUTPUT_NEW -rm -rf lcov_out -rm -f FILE_INFO_BASE FILE_INFO_MILVUS FILE_INFO_OUTPUT FILE_INFO_OUTPUT_NEW - -MYSQL_DB_NAME=milvus_`date +%s%N` +rm -rf ${LCOV_OUTPUT_DIR} +rm -f ${BASE_INFO} ${TEST_INFO} ${TOTAL_INFO} ${OUTPUT_INFO} # get baseline -${LCOV_CMD} -c -i -d ${DIR_GCNO} -o "${FILE_INFO_BASE}" +${LCOV_CMD} -c -i -d ${GCNO_DIR} -o "${BASE_INFO}" if [ $? -ne 0 ]; then - echo "gen baseline coverage run failed" - exit -1 + echo "generate ${BASE_INFO} failed" + exit 1 fi -for test in `ls ${DIR_UNITTEST}`; do - echo $test +# run unittest +for test in `ls ${UNITTEST_DIR}`; do + echo $test "running..." # run unittest - ./${DIR_UNITTEST}/${test} + ./${UNITTEST_DIR}/${test} if [ $? -ne 0 ]; then - echo ${DIR_UNITTEST}/${test} "run failed" - exit -1 + echo ${UNITTEST_DIR}/${test} "run failed" + exit 1 fi done -mysql_exc "DROP DATABASE IF EXISTS ${MYSQL_DB_NAME};" - # gen code coverage -${LCOV_CMD} -d ${DIR_GCNO} -o "${FILE_INFO_MILVUS}" -c +${LCOV_CMD} -c -d ${GCNO_DIR} -o "${TEST_INFO}" +if [ $? -ne 0 ]; then + echo "generate ${TEST_INFO} failed" + exit 1 +fi + # merge coverage -${LCOV_CMD} -a ${FILE_INFO_BASE} -a ${FILE_INFO_MILVUS} -o "${FILE_INFO_OUTPUT}" +${LCOV_CMD} -a ${BASE_INFO} -a ${TEST_INFO} -o "${TOTAL_INFO}" +if [ $? -ne 0 ]; then + echo "generate ${TOTAL_INFO} failed" + exit 1 +fi # remove third party from tracefiles -${LCOV_CMD} -r "${FILE_INFO_OUTPUT}" -o "${FILE_INFO_OUTPUT_NEW}" \ +${LCOV_CMD} -r "${TOTAL_INFO}" -o "${OUTPUT_INFO}" \ "/usr/*" \ "*/cmake_build/*" \ "*/src/index/thirdparty*" \ @@ -57,8 +59,9 @@ ${LCOV_CMD} -r "${FILE_INFO_OUTPUT}" -o "${FILE_INFO_OUTPUT_NEW}" \ "*/thirdparty/*" if [ $? -ne 0 ]; then - echo "generate ${FILE_INFO_OUTPUT_NEW} failed" - exit -2 + echo "generate ${OUTPUT_INFO} failed" + exit 1 fi + # gen html report -${LCOV_GEN_CMD} "${FILE_INFO_OUTPUT_NEW}" --output-directory ${DIR_LCOV_OUTPUT}/ +${LCOV_GEN_CMD} "${OUTPUT_INFO}" --output-directory ${LCOV_OUTPUT_DIR} diff --git a/docker-compose.yml b/docker-compose.yml index be40b4d0989a27d49e1db1369c90db03c6f3d2b9..67c3a1e40f81d5803473b64f62b2ad34227897e7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,8 +31,7 @@ services: - milvus command: &ubuntu-command ["/milvus/ci/scripts/build.sh -t Release -j2 -i ${MILVUS_INSTALL_PREFIX} --with_fiu --coverage -u && - /milvus/ci/scripts/run_unittest.sh -i ${MILVUS_INSTALL_PREFIX} && - /milvus/ci/scripts/coverage.sh"] + /milvus/ci/scripts/run_unittest.sh -i ${MILVUS_INSTALL_PREFIX}"] centos-core: image: ${REPO}:${ARCH}-centos-${CENTOS}-core @@ -51,8 +50,7 @@ services: - milvus command: ¢os-command ["/milvus/ci/scripts/build.sh -t Release -j2 -i ${MILVUS_INSTALL_PREFIX} --with_fiu --coverage -u && - /milvus/ci/scripts/run_unittest.sh -i ${MILVUS_INSTALL_PREFIX} && - /milvus/ci/scripts/coverage.sh"] + /milvus/ci/scripts/run_unittest.sh -i ${MILVUS_INSTALL_PREFIX}"] ubuntu-cuda-core: image: ${REPO}:${ARCH}-ubuntu-${UBUNTU}-cuda-core