paddle_coverage.sh 7.1 KB
Newer Older
L
Liu Xudong 已提交
1 2
#!/usr/bin/env bash

3 4 5 6 7 8 9 10 11 12 13 14 15 16
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
# 
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

L
Liu Xudong 已提交
17 18 19 20 21
set -xe

PADDLE_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}")/../../" && pwd )"

# install lcov
22 23 24 25 26 27 28
if [ ! -f "/root/.cache/lcov-1.14.tar.gz" ];then
    wget -P /home https://paddle-ci.gz.bcebos.com/coverage/lcov-1.14.tar.gz --no-proxy --no-check-certificate || exit 101 
    cp /home/lcov-1.14.tar.gz /root/.cache/lcov-1.14.tar.gz
else
    cp /root/.cache/lcov-1.14.tar.gz /home/lcov-1.14.tar.gz
fi
tar -xf /home/lcov-1.14.tar.gz -C /
L
Liu Xudong 已提交
29 30 31 32 33 34 35
cd /lcov-1.14
make install

# run paddle coverage

cd /paddle/build

36
python3.7 ${PADDLE_ROOT}/tools/coverage/gcda_clean.py ${GIT_PR_ID} || exit 101
L
Liu Xudong 已提交
37

L
Liu Xudong 已提交
38
lcov --capture -d ./ -o coverage.info --rc lcov_branch_coverage=0
L
Liu Xudong 已提交
39 40 41 42 43 44 45 46 47 48 49 50

# full html report

function gen_full_html_report() {
    lcov --extract coverage.info \
        '/paddle/paddle/fluid/framework/*' \
        '/paddle/paddle/fluid/imperative/*' \
        '/paddle/paddle/fluid/inference/*' \
        '/paddle/paddle/fluid/memory/*' \
        '/paddle/paddle/fluid/operators/*' \
        '/paddle/paddle/fluid/recordio/*' \
        '/paddle/paddle/fluid/string/*' \
51
        '/paddle/paddle/fluid/eager/*' \
52
        '/paddle/paddle/phi/*' \
L
Liu Xudong 已提交
53 54 55 56 57 58 59 60 61 62 63
        -o coverage-full.tmp \
        --rc lcov_branch_coverage=0

    mv -f coverage-full.tmp coverage-full.info

    lcov --remove coverage-full.info \
        '/paddle/paddle/fluid/framework/*_test*' \
        '/paddle/paddle/fluid/*/*test*' \
        '/paddle/paddle/fluid/*/*/*test*' \
        '/paddle/paddle/fluid/inference/tests/*' \
        '/paddle/paddle/fluid/inference/api/demo_ci/*' \
64
        '/paddle/paddle/fluid/eager/tests/*' \
65
        '/paddle/paddle/phi/tests/*' \
L
Liu Xudong 已提交
66 67 68 69 70 71
        -o coverage-full.tmp \
        --rc lcov_branch_coverage=0

    mv -f coverage-full.tmp coverage-full.info
}

Y
YUNSHEN XIE 已提交
72 73 74
function gen_full_html_report_xpu() {
    lcov --extract coverage.info \
        '/paddle/paddle/fluid/operators/*xpu*' \
Y
YUNSHEN XIE 已提交
75
        '/paddle/paddle/phi/kernels/xpu/*' \
Y
YUNSHEN XIE 已提交
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
        -o coverage-full.tmp \
        --rc lcov_branch_coverage=0

    mv -f coverage-full.tmp coverage-full.info

    lcov --remove coverage-full.info \
        '/paddle/paddle/fluid/framework/*_test*' \
        '/paddle/paddle/fluid/*/*test*' \
        '/paddle/paddle/fluid/*/*/*test*' \
        '/paddle/paddle/fluid/inference/tests/*' \
        '/paddle/paddle/fluid/inference/api/demo_ci/*' \
        -o coverage-full.tmp \
        --rc lcov_branch_coverage=0

    mv -f coverage-full.tmp coverage-full.info
}

93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
function gen_full_html_report_npu() {
    lcov --extract coverage.info \
        '/paddle/paddle/fluid/operators/*npu*' \
        -o coverage-full.tmp \
        --rc lcov_branch_coverage=0

    mv -f coverage-full.tmp coverage-full.info

    lcov --remove coverage-full.info \
        '/paddle/paddle/fluid/framework/*_test*' \
        '/paddle/paddle/fluid/*/*test*' \
        '/paddle/paddle/fluid/*/*/*test*' \
        '/paddle/paddle/fluid/inference/tests/*' \
        '/paddle/paddle/fluid/inference/api/demo_ci/*' \
        -o coverage-full.tmp \
        --rc lcov_branch_coverage=0

    mv -f coverage-full.tmp coverage-full.info
}

Y
YUNSHEN XIE 已提交
113 114
if [ ${WITH_XPU:-OFF} == "ON" ]; then
    gen_full_html_report_xpu || true
115 116
elif [ ${WITH_ASCEND_CL:-OFF} == "ON" ]; then
    gen_full_html_report_npu || true
Y
YUNSHEN XIE 已提交
117 118 119
else
    gen_full_html_report || true
fi
L
Liu Xudong 已提交
120 121 122 123 124 125

# diff html report

function gen_diff_html_report() {
    if [ "${GIT_PR_ID}" != "" ]; then

126
        COVERAGE_DIFF_PATTERN="`python3.7 ${PADDLE_ROOT}/tools/coverage/pull_request.py files ${GIT_PR_ID}`"
L
Liu Xudong 已提交
127

128
        python3.7 ${PADDLE_ROOT}/tools/coverage/pull_request.py diff ${GIT_PR_ID} > git-diff.out
L
Liu Xudong 已提交
129 130 131 132 133 134 135
    fi

    lcov --extract coverage-full.info \
        ${COVERAGE_DIFF_PATTERN} \
        -o coverage-diff.info \
        --rc lcov_branch_coverage=0

136
    python3.7 ${PADDLE_ROOT}/tools/coverage/coverage_diff.py coverage-diff.info git-diff.out > coverage-diff.tmp
L
Liu Xudong 已提交
137 138 139 140 141 142 143 144 145 146 147 148

    mv -f coverage-diff.tmp coverage-diff.info

    genhtml -o coverage-diff -t 'Diff Coverage' --no-function-coverage --no-branch-coverage coverage-diff.info
}

gen_diff_html_report || true

# python coverage

export COVERAGE_FILE=/paddle/build/python-coverage.data

149
coverage combine `$(ls python-coverage.data.*)` || NO_PYTHON_COVERAGE_DATA=1
L
Liu Xudong 已提交
150

151
`$(coverage xml -i -o python-coverage.xml)` || [[ "${NO_PYTHON_COVERAGE_DATA}" == "1" ]]
L
Liu Xudong 已提交
152

Z
zhangchunle 已提交
153 154
sed -i 's/mnt\/paddle/paddle/g' python-coverage.xml

155
`$(python3.7 ${PADDLE_ROOT}/tools/coverage/python_coverage.py > python-coverage.info)` || [[ "${NO_PYTHON_COVERAGE_DATA}" == "1" ]]
L
Liu Xudong 已提交
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180

# python full html report
#
function gen_python_full_html_report() {
    lcov --extract python-coverage.info \
        '/paddle/python/*' \
        -o python-coverage-full.tmp \
        --rc lcov_branch_coverage=0

    mv -f python-coverage-full.tmp python-coverage-full.info

    lcov --remove python-coverage-full.info \
        '/*/tests/*' \
        -o python-coverage-full.tmp \
        --rc lcov_branch_coverage=0

    mv -f python-coverage-full.tmp python-coverage-full.info
}

gen_python_full_html_report || true

# python diff html report

function gen_python_diff_html_report() {
    if [ "${GIT_PR_ID}" != "" ]; then
181
        COVERAGE_DIFF_PATTERN="`python3.7 ${PADDLE_ROOT}/tools/coverage/pull_request.py files ${GIT_PR_ID}`"
L
Liu Xudong 已提交
182

183
        python3.7 ${PADDLE_ROOT}/tools/coverage/pull_request.py diff ${GIT_PR_ID} > python-git-diff.out
L
Liu Xudong 已提交
184 185 186 187 188 189 190
    fi

    lcov --extract python-coverage-full.info \
        ${COVERAGE_DIFF_PATTERN} \
        -o python-coverage-diff.info \
        --rc lcov_branch_coverage=0

191
    python3.7 ${PADDLE_ROOT}/tools/coverage/coverage_diff.py python-coverage-diff.info python-git-diff.out > python-coverage-diff.tmp
L
Liu Xudong 已提交
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208

    mv -f python-coverage-diff.tmp python-coverage-diff.info

    genhtml -o python-coverage-diff \
        -t 'Python Diff Coverage' \
        --no-function-coverage \
        --no-branch-coverage \
        --ignore-errors source \
        python-coverage-diff.info
}

gen_python_diff_html_report || true

# assert coverage lines

echo "Assert Diff Coverage"

209
python3.7 ${PADDLE_ROOT}/tools/coverage/coverage_lines.py coverage-diff.info 0.9 || COVERAGE_LINES_ASSERT=1
L
Liu Xudong 已提交
210 211 212

echo "Assert Python Diff Coverage"

Y
YUNSHEN XIE 已提交
213 214
if [ ${WITH_XPU:-OFF} == "ON" ]; then
    echo "XPU has no python coverage!"
215 216
elif [ ${WITH_ASCEND_CL:-OFF} == "ON" ]; then
    echo "NPU has no python coverage!"
Y
YUNSHEN XIE 已提交
217
else
218 219 220
    if [[ "${NO_PYTHON_COVERAGE_DATA}" != "1" ]];then
        python3.7 ${PADDLE_ROOT}/tools/coverage/coverage_lines.py python-coverage-diff.info 0.9 || PYTHON_COVERAGE_LINES_ASSERT=1
    fi
Y
YUNSHEN XIE 已提交
221
fi
L
Liu Xudong 已提交
222 223

if [ "$COVERAGE_LINES_ASSERT" = "1" ] || [ "$PYTHON_COVERAGE_LINES_ASSERT" = "1" ]; then
C
chalsliu 已提交
224
    echo "exit 9" > /tmp/paddle_coverage.result
L
Liu Xudong 已提交
225 226
    exit 9
fi