개방형 코드 커버리지 봇

내 워크플로우



배경:



Github 작업을 활용할 수 있는 코드 커버리지 솔루션을 검색하려고 하면 Coedcov와 Coveralls라는 두 주요 플레이어를 발견하게 될 것입니다. 그러나 둘 다 독점적이며 추가 비용이 부과됩니다. 개인 프로젝트나 초기 단계의 스타트업에서 작업할 때 동일한 비용을 추가로 지출하고 싶지 않을 것입니다.

동작:



그래서 저는 작업 아티팩트를 사용하여 커버리지 보고서를 생성하고 끌어오기 요청에 대해 설명하는 이 작업을 설계했습니다. 또한 보고서를 파일 서버에 업로드하는 기능도 있습니다. 나는 매우 데이터 집약적인 Django 프로젝트를 관리하기 위해 동일한 것을 사용했습니다. 내 테스트 스위트 워크플로에서 Coverage.py를 사용하여 보고서를 생성했습니다. 이러한 보고서를 action-artifacts의 텍스트 파일로 저장하고 업로드도 합니다. 보고서에 약간의 사전 처리가 수행되어 주석을 쉽게 작성할 수 있습니다.

전체 프로세스는 두 부분으로 나뉩니다.
  • 테스트 실행 및 보고서 생성.
  • 액션 봇 댓글로 보내도록 보고서를 수정하고 업로드합니다.

  • 예상되는 결과:




    첫 번째 부분은 매우 간단했습니다. Coverage.py를 사용하여 표준 Django 테스트를 실행했습니다. 아래 Yaml 파일에서 구문을 찾을 수 있습니다. 두 번째 부분에서는 새 작업 저장소open-coverage-action를 생성했습니다. 이 저장소는 텍스트 파일을 입력으로 사용하고 끌어오기 요청에 주석을 추가합니다. 보고서의 전처리를 추가하는 작업도 진행 중입니다. 현재 기본 bash를 사용하여 최종 결과가 포함된 부분을 추출하고 약간의 광택을 추가한 다음 open-coverage-action을 위해 새 파일에 저장합니다. 또한 file.io를 사용하여 추가 참조를 위해 전체 보고서를 업로드하고 또한 upload-artifact 작업을 사용하여 이를 아티팩트로 업로드합니다.
    내 작업 흐름에 필요한 작업을 거의 수행합니다.

    제출 카테고리:



    메인테이너 머스트해브

    Yaml 파일 또는 코드 링크



    name: pr-coverage
    
    on: pull_request
    
    jobs:
      build:
        runs-on: ubuntu-latest
        strategy:
          max-parallel: 4
          matrix:
            python-version: [3.6]
    
        steps:
          - uses: actions/checkout@v2
          - name: Set up Python ${{ matrix.python-version }}
            uses: actions/setup-python@v2
            with:
              python-version: ${{ matrix.python-version }}
          - name: Cache pip
            uses: actions/cache@v2
            with:
              # This path is specific to Ubuntu
              path: ~/.cache/pip
              # Look to see if there is a cache hit for the corresponding requirements file
              key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
              restore-keys: |
                ${{ runner.os }}-pip-
                ${{ runner.os }}-
          - name: Install Python Dependencies
            run: |
              python -m pip install --upgrade pip
              pip install -r requirements.txt
          - name: Generating and Uploading Coverage Report
            run: |
              touch local.env
              echo DEBUG_VALUE=1 > local.env
              cd data_api/
              python manage.py makemigrations
              python manage.py migrate
              coverage run manage.py test --noinput --parallel 16
              coverage report > results.txt
              # Modifying coverage report
              echo "Coverage Report: " > report.txt
              echo " Statements | Miss | Cover " >> report.txt
              tail -4 results.txt >> report.txt
              echo "   " >> report.txt
              echo "Link to full report :" >> report.txt
              # uploading report to file.io any other services can be used
              curl -F "[email protected]" https://file.io |     python3 -c "import sys, json; print(json.load(sys.stdin)['link'])" >> report.txt
            env:
              SECRET_KEY: ${{ secrets.SECRET_KEY }}
              ADMIN_URL_KEY: ${{ secrets.ADMIN_URL_KEY }}
              DATABASE_NAME: github_actions
              DATABASE_USER: postgres
              DATABASE_PASSWORD: postgres
              DATABASE_HOST: 127.0.0.1
              DATABASE_PORT: 5432
          - uses: actions/upload-artifact@v2
            with:
              name: report
              path: data_api/report.txt
          - uses: actions/download-artifact@v2
            with:
              name: report
          - name: Open Coverage Notifier Action
            uses: Bearbobs/open-coverage-action@v1
            env:
              GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
            with:
              path: data_api/report.txt
    

    전체 파일은 요점 @workflow에서 찾을 수 있습니다.

    추가 리소스/정보



    이것은이 아이디어에 대한 나의 첫 번째 시도입니다. 보고서의 전처리를 반복하여 더 세련되게 만들 계획입니다. 현재 이 작업 흐름은 모든 Django 프로젝트 관리자가 직접 사용할 수 있습니다. 무료 텍스트 업로드 서비스와 Github 작업을 제공하는 file.io에 특별한 감사를 드립니다. 자세한 내용은 open-coverage-action 저장소를 참조하십시오.
    제안 및 피드백을 받으려면 연락해 주세요. 감사합니다.

    사용된 서비스 링크:

    Open-Coverage-Action

    File.io

    Coverage.py

    좋은 웹페이지 즐겨찾기