CI에서 Python 패키지의 docstring 적용 범위를 추적하는 방법
13465 단어 actionshackathon21python
이 문제를 해결하려면 다음 요구 사항을 충족하는 워크플로우가 필요했습니다.
pull requests
) 또는 이전 커밋(on push
)의 점수보다 낮은 경우 작업 흐름이 실패하고 작업을 실패하게 만든 파일을 비난해야 합니다. 그런 다음 대부분의 필요에 맞는 우수한
docstr-coverage
패키지를 찾았고 GitHub Actions, shields.io 및 jsonbin.org과 함께 솔루션을 찾았습니다.jsonbin
jsonbin.org은 서비스로서의 개인 키/값 JSON 저장소입니다.
이 경우 이 서비스를 사용하여 shields.io endpoint 으로 동적 배지를 만듭니다. 작은 JSON 사전이 끝점에 전달되고 배지가 이동 중에 생성됩니다. 따라서 적용 범위가 변경될 때마다 저장소에 새 배지를 푸시하지 않습니다.
{
"schemaVersion": 1,
"label": "docstr-cov",
"message": "75%",
"color": "green"
}
GitHub 계정으로 jsonbin에 로그인하고 토큰을
JSONBIN_APIKEY
라는 저장소 비밀로 저장해야 합니다.구성 파일
리포지토리의 루트에
.docstr.yml
라는 파일을 배치합니다.paths:
- your_package
verbose: 2 # int (0-3)
skip_magic: True
skip_file_doc: True
skip_init: True
skip_class_def: False
skip_private: True
follow_links: True
percentage_only: False
자세한 내용은 package documentation 을 참조하십시오.
워크플로우
이 워크플로우는 기본적으로 작동해야 합니다. 환경 변수를 조정할 필요는 없지만
RANGE
에 대해 다른 값을 선택할 수 있습니다.예를 들어
RANGE
의 50..75
는 커버리지가 아래50
에 빨간색 배지가 표시되고 커버리지75
위에 녹색 배지가 표시됨을 의미합니다. Codecov와 똑같이 작동합니다!name: docstr-cov
on:
push:
branches:
- main
pull_request:
branches:
- main
env:
RANGE: 50..75
ENDPOINT: https://jsonbin.org/${{ github.repository_owner }}/${{ github.event.repository.name }}
TOKEN: ${{ secrets.JSONBIN_APIKEY }}
작업 수준에서 단계는 따르기 쉽습니다.
HEAD
및 BASE
)은 이벤트 트리거에 따라 선택됩니다. 분기의 HEAD
대 push
이벤트의 이전 커밋 또는 PR 대 기본의 HEAD
pull_request
의 분기. BASE
및 HEAD
에 대한 커버리지 점수를 얻습니다. HEAD 점수가 낮으면 실패합니다. jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: 3.x
- name: Install docstr-coverage
run: pip install docstr-coverage
- name: Get SHAs
run: |
if [[ ${{ github.event_name }} == 'push' ]]; then
echo "BASE=$(git rev-parse HEAD^)" >> $GITHUB_ENV
echo "HEAD=$(git rev-parse HEAD)" >> $GITHUB_ENV
elif [[ ${{ github.event_name }} == 'pull_request' ]]; then
echo "BASE=${{ github.event.pull_request.base.sha }}" >> $GITHUB_ENV
echo "HEAD=${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV
else
echo "Unexpected event trigger"
exit 1
fi
- name: Get base coverage
run: |
git checkout $BASE
echo "BASE_COV=$(docstr-coverage -p)" >> $GITHUB_ENV
- name: Test head coverage
run: |
git checkout $HEAD
docstr-coverage --fail-under=$BASE_COV
- name: Blame
run: |
git diff --name-only $(git merge-base $BASE $HEAD) | \
xargs docstr-coverage --accept-empty
if: failure()
push
이벤트에서만:RANGE
에 따라 색상 레이블을 설정합니다. - name: Get new coverage
run: echo "NEW_COV=$(printf "%.f" $(docstr-coverage -p))" >> $GITHUB_ENV
if: always() && github.event_name == 'push'
- name: Set label color
run: |
if [[ $NEW_COV -ge $(echo {${{ env.RANGE }}} | awk '{print $NF;}') ]]; then
echo "COLOR=green" >> $GITHUB_ENV
elif [[ $NEW_COV -lt $(echo {${{ env.RANGE }}} | awk '{print $1;}') ]]; then
echo "COLOR=red" >> $GITHUB_ENV
else
echo "COLOR=orange" >> $GITHUB_ENV
fi
if: always() && github.event_name == 'push'
- name: Post results
run: |
curl -X POST $ENDPOINT/badges/docstr-cov \
-H "authorization: token $TOKEN" \
-d "{ \"schemaVersion\": 1, \"label\": \"docstr-cov\", \
\"message\": \"$NEW_COV%\", \"color\": \"$COLOR\" }"
if: always() && github.event_name == 'push'
- name: Set public endpoint
run: |
curl -X PUT $ENDPOINT/_perms -H "authorization: token $TOKEN"
if: always() && github.event_name == 'push'
- name: Show badge URL
run: echo "https://img.shields.io/endpoint?url=$ENDPOINT/badges/docstr-cov"
if: always() && github.event_name == 'push'
배지는
main
에 푸시할 때마다 동적으로 업데이트되어야 합니다. README.md에 추가하는 것을 잊지 마십시오.코드 받기
에파사로 / docstr-cov-워크플로
GitHub Actions를 사용하여 Python 패키지의 docstring 적용 범위 측정
docstr-cov-워크플로
GitHub Actions를 사용하여 Python 패키지의 docstring 범위 측정
용법
.github/workflows/docstr-cov.yml
및 .docstr.yaml
를 저장소에 복사합니다. JSONBIN_APIKEY
라는 저장소 암호로 저장합니다. pull_request
) 또는 이전 커밋(on push
)의 점수보다 낮은 경우 작업 흐름이 실패하고 작업을 실패하게 만든 파일이 비난을 받습니다. main
분기로 푸시하면 좋은 배지를 업데이트하여 프로젝트의 현재 적용 범위를 업데이트합니다. RANGE
변수를 조정하여 배지의 색상 범위를 변경할 수 있습니다. 예를 들어 50..75
는 커버리지가 아래50
에 빨간색 배지를 표시하고 커버리지75
위에 녹색 배지를 표시함을 의미합니다. 예시
example/base.py
를 변경하고 작업 흐름을 확인하십시오...View on GitHub
Reference
이 문제에 관하여(CI에서 Python 패키지의 docstring 적용 범위를 추적하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/epassaro/how-to-keep-track-of-docstring-coverage-of-python-packages-on-ci-41fc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)