私のgithub ciタスクのコードカバレッジを解析しようとしていますが、すべてが機能しますが、カバレッジ%の結果を解析することはできません。コードカバレッジのパーセントスコアを解析するのに役立ちます。正規表現は機能しません。
注文する
name: Pytest Coverage
on:
pull_request:
branches: [ main, dev ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.10
uses: actions/setup-python@v2
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest pytest-cov
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Build coverage file
run: |
pytest --cache-clear --cov=src tests/ > pytest-coverage.txt
- name: Comment coverage
uses: coroo/[email protected]
- name: Get Coverage %
run: |
LAST_LINE=$(tail -4 pytest-coverage.txt)
LAST_LINE=$(head -n 1 <<< "$LAST_LINE")
echo "target line is $LAST_LINE"
COVERAGE=$(sed -n '$s/.*?\([0-9]+\)%.*/\1/p' <<< "$LAST_LINE")
echo "overall coverage is $COVERAGE"
$LAST_LINEは
TOTAL 2401 1538 36%
$COVERAGEは現在空です。予想される出力は次のとおりです。
36%
答え1
使用sed
COVERAGE=$(sed 's/.*[[:space:]]\([0-9]\+%\)/\1/' <<< "$LAST_LINE")
答え2
最後のスペース文字(スペースまたはタブ)まですべて削除します。
$ sed 's/.*[[:blank:]]//' file
36%
awk
スペースで区切られた最後のフィールドを印刷するには、次の手順を実行します。
$ awk '{ print $NF }' file
36%
またはコードの一部として(文字列で始まる行が1つしかないと仮定)TOTAL
COVERAGE=$( sed -n 's/^TOTAL.*[[:blank:]]//p' pytest-coverage.txt )
これは、またはをpytest-coverage.txt
呼び出すことなく直接パーセントを抽出します。head
tail
答え3
空白以外のすべての文字と空白文字を最後まで削除します。
echo "$LAST_LINE" | sed ':a s/^[^ ]* //;ta'
grep
オプションを知っている人o
(例gnu grep
:):
echo $LAST_LINE | grep -o '[0-9]*%'