GitHub 리포지토리에 PHP 및 Pest용 테스트 커버리지 배지 추가

GitHub 리포지토리를 살펴보면 대부분 일부 배지가 표시되는 것을 볼 수 있습니다. 배지는 코드, 리포지토리, 워크플로 등의 상태를 표시하는 일종의 아이콘입니다.

GitHub 리포지토리의 Readme 파일에 배지를 포함할 수 있습니다.


배지는 다음을 위한 것입니다.
  • 패키지 버전 표시;
  • 번호 다운로드;
  • 발행 정보(총계, 개설, 마감 ...);
  • 테스트 실행 결과;
  • GitHub Actions 워크플로우의 결과;
  • 기타...

  • 배지를 생성할 수 있는 좋은 웹사이트는 https://shields.io/입니다.

    필요에 맞는 배지를 찾지 못한 경우 배지를 만들거나 필요에 맞는 몇 가지 도구를 사용할 수 있습니다.
    마지막 프로젝트에서 테스트 코드 커버리지를 측정해야 했습니다.

    Code coverage is the percentage of code which is covered by automated tests. Code coverage measurement simply determines which lines of code / instructions have been executed through a test run, and which lines / instructions have not. The percentage is calculated based on code covered and all code (number of lines of code).



    일반적으로 테스트 스위트가 예를 들어 명령줄을 통해 터미널에서 실행되는 경우 결과가 터미널에 표시됩니다.
    "표준"형식으로 일부 특정 파일에 결과를 저장하는 옵션도 있습니다.
    예를 들어 "clover"형식은 코드 적용 범위와 기타 유용한 메트릭을 보고하는 XML 파일입니다.
    GitHub Actions 워크플로에서 테스트 스위트를 실행하는 경우 클로버 형식을 읽고 커버리지 값을 사용하여 배지를 렌더링할 수 있는 특정 작업이 필요합니다.
    그런 다음 저장소에 배지를 커밋해야 합니다.
    요약하자면:
  • GitHub Actions 워크플로에서 테스트를 실행합니다.
  • 보고서를 클로버 형식(clover.xml 파일)으로 저장합니다.
  • clover.xml 파일을 읽고, 배지를 생성하고, 새 배지를 저장소에 커밋/푸시하는 "작업"을 사용합니다.

  • Readme 파일에 배지 이미지를 포함해야 합니다.

    GitHub 작업 워크플로에서 테스트 실행



    테스트를 실행하려면 PHPUnit 또는 Pest를 사용할 수 있습니다. 두 도구 모두 보고서를 클로버 형식으로 저장하는 옵션이 있습니다(Pest는 PHPUnit에서 제공하는 기능을 사용함).

          - name: Execute tests (Unit and Feature tests) via PestPHP
            run: vendor/bin/pest --coverage-clover clover.xml
    


    이런 식으로 clover.xml 파일이 생성됩니다.

    배지 만들기



    배지를 만들기 위해 다음 작업을 찾았습니다. phpunit-coverage-badge .

    이 조치:
  • clover.xml 파일을 읽습니다.
  • 배지 파일 coverage_badge_path를 저장합니다.
  • 선택적으로 push_badge 옵션을 통해 배지를 커밋하고 푸시합니다.
  • 배지를 repo에 푸시하려면 repo_token을 설정해야 합니다.

  •       - name: Generate test coverage badge
            uses: timkrase/[email protected]
            with:
              coverage_badge_path: 'badge-coverage.svg'
              push_badge: true
              repo_token: ${{ secrets.GITHUB_TOKEN }}
    


    이제 메인 브랜치에서 코드를 푸시할 때마다 테스트 스위트가 실행되고 배지가 업데이트됩니다.

    읽어보기 파일 업데이트



    이제 배지 파일이 생성되었으므로 이미지에 대한 일반적인 마크다운 구문을 사용하여 readme 파일에 배지 파일을 포함해야 합니다.

    [![Test Coverage](https://raw.githubusercontent.com/Hi-Folks/array/main/badge-coverage.svg)](https://packagist.org/packages/hi-folks/array)
    


    Hi-Folks/array를 프로젝트의 org/repo로 교체해야 합니다.
    현재 배지는 다음과 같습니다.

    워크플로 파일



    전체 yaml 파일(.github/workflows 디렉터리에 저장해야 함):

    name: Test Coverage PHP Package
    on:
      push:
        branches:
          - main
    
    jobs:
      laravel-tests:
        runs-on: ubuntu-latest
    
        strategy:
          matrix:
            operating-system: [ubuntu-latest]
            php-versions: [ '8.0' ]
    
        name: P${{ matrix.php-versions }} - L${{ matrix.laravel }} - ${{ matrix.operating-system}}
    
        steps:
          - uses: actions/checkout@v2
          - name: Install PHP versions
            uses: shivammathur/setup-php@v2
            with:
              php-version: ${{ matrix.php-versions }}
          - name: Install Dependencies
            run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
    
          - name: Show dir
            run: pwd
          - name: PHP Version
            run: php --version
    
          # Code quality
    
          - name: Execute tests (Unit and Feature tests) via PestPHP
            # Set environment
            env:
              SESSION_DRIVER: array
            run: vendor/bin/pest --coverage-clover clover.xml
    
          - name: Generate test coverage badge
            uses: timkrase/[email protected]
            with:
              coverage_badge_path: 'badge-coverage.svg'
              push_badge: true
              repo_token: ${{ secrets.GITHUB_TOKEN }}
    

    좋은 웹페이지 즐겨찾기