#!/bin/bash
set -e
echo " Usage: $0 pull_request_id "
export PR_ID=$1
if [ -z "$PR_ID" ]; then
export PR_ID=168
fi
if [ -z "$GITHUB_SHA" ]; then
export GITHUB_SHA=abcdefg
fi
ID_SHA="${PR_ID}-${GITHUB_SHA}"
echo ID_SHA $ID_SHA
rm -rf /home/zhangbo/PR_Coverage/PR${PR_ID}/${ID_SHA}/${PR_ID}-${GITHUB_SHA}-python-coverage-full
rm -rf /home/zhangbo/PR_Coverage/PR${PR_ID}/${ID_SHA}/${PR_ID}-${GITHUB_SHA}-python-coverage-diff
rm -rf /home/zhangbo/PR_Coverage/PR${PR_ID}/${ID_SHA}/${PR_ID}-${GITHUB_SHA}-python-coverage-diff-discard
PYTHON_BIN=/usr/bin/python3.11
export FlagGemsROOT="$( cd "$( dirname "${BASH_SOURCE[0]}")/../../" && pwd )"
echo FlagGemsROOT ${FlagGemsROOT}
FILES="/home/zhangbo/PR_Coverage/PR${PR_ID}/${ID_SHA}/${ID_SHA}-op* /home/zhangbo/PR_Coverage/PR${PR_ID}/${ID_SHA}/${ID_SHA}-model*"
coverage combine -q --keep --data-file=${ID_SHA} $FILES
coverage report -m --data-file=${ID_SHA}
coverage xml -i --data-file=${ID_SHA} -o ${ID_SHA}-python-coverage.xml
${PYTHON_BIN} ${FlagGemsROOT}/tools/code_coverage/python_coverage.py > ${ID_SHA}-python-coverage.info
lcov --extract ${ID_SHA}-python-coverage.info \
'*FlagGems*' \
-o ${ID_SHA}-python-coverage-full.tmp \
--rc lcov_branch_coverage=0
mv -f ${ID_SHA}-python-coverage-full.tmp ${ID_SHA}-python-coverage-full.info
genhtml -o ${ID_SHA}-python-coverage-full \
-t 'Python Diff Coverage ${ID_SHA}' \
--no-function-coverage \
--no-branch-coverage \
--ignore-errors source \
${ID_SHA}-python-coverage-full.info
COVERAGE_DIFF_PATTERN="`${PYTHON_BIN} ${FlagGemsROOT}/tools/code_coverage/pull_request.py files ${PR_ID}`"
echo COVERAGE_DIFF_PATTERN ${COVERAGE_DIFF_PATTERN}
${PYTHON_BIN} ${FlagGemsROOT}/tools/code_coverage/pull_request.py diff ${PR_ID} > ${ID_SHA}-python-git-diff.out
lcov --extract ${ID_SHA}-python-coverage-full.info \
${COVERAGE_DIFF_PATTERN} \
-o ${ID_SHA}-python-coverage-diff.info \
--rc lcov_branch_coverage=0
if [ -s "${ID_SHA}-python-coverage-diff.info" ]; then
echo "python-coverage-diff.info is NOT Empty"
else
echo -e "==================== Python Coverage Result ====================\n"
echo "python-coverage-diff.info is Empty!"
echo "This means the files modified in your PR are not tested by python coverage!"
echo "Pass! Please check carefully if you need add test for your files!"
echo -e "\n================================================================"
mv -f ${ID_SHA}* /home/zhangbo/PR_Coverage/PR${PR_ID}/${ID_SHA}
exit
fi
${PYTHON_BIN} ${FlagGemsROOT}/tools/code_coverage/coverage_diff.py ${ID_SHA}-python-coverage-diff.info ${ID_SHA}-python-git-diff.out > ${ID_SHA}-python-coverage-diff.tmp
mv -f ${ID_SHA}-python-coverage-diff.tmp ${ID_SHA}-python-coverage-diff.info
genhtml -o ${ID_SHA}-python-coverage-diff \
-t 'Python Diff Coverage' \
--no-function-coverage \
--no-branch-coverage \
--ignore-errors source \
${ID_SHA}-python-coverage-diff.info
${PYTHON_BIN} ${FlagGemsROOT}/tools/code_coverage/jit_func_position.py ${COVERAGE_DIFF_PATTERN} > ${ID_SHA}-python-triton-jit-position.info
${PYTHON_BIN} ${FlagGemsROOT}/tools/code_coverage/coverage_diff_discard.py ${ID_SHA}-python-coverage-diff.info ${ID_SHA}-python-triton-jit-position.info > ${ID_SHA}-python-coverage-discard-diff.info
genhtml -o ${ID_SHA}-python-coverage-diff-discard \
-t 'Python Diff Coverage Discard JIT' \
--no-function-coverage \
--no-branch-coverage \
--ignore-errors source \
${ID_SHA}-python-coverage-discard-diff.info
mv -f ${ID_SHA}* /home/zhangbo/PR_Coverage/PR${PR_ID}/${ID_SHA}
lcov --list /home/zhangbo/PR_Coverage/PR${PR_ID}/${ID_SHA}/${ID_SHA}-python-coverage-discard-diff.info
echo -e "\n==================== Python Coverage Result ====================\n"
${PYTHON_BIN} ${FlagGemsROOT}/tools/code_coverage/coverage_lines.py /home/zhangbo/PR_Coverage/PR${PR_ID}/${ID_SHA}/${ID_SHA}-python-coverage-discard-diff.info 0.9