커버리지용 컨테이너

나는 Docker 컨테이너를 다시 구축하고 있습니다. 그리고 이 글이 제가 몇 주 전에 쓴 것보다 조금 더 유용하다는 것을 알게 되실 거라 생각합니다.

몇 년 전에 나는 Travis CI에 들어가서 많은 my GitHub repos을 설정하여 내가 repo에 커밋할 때마다 자동으로 테스트를 실행했습니다. 나중에 테스트 실행을 Coveralls.io에 연결하는 방법도 알아내어 테스트 범위가 어떻게 보이는지에 대한 예쁜 그래프를 얻었습니다. 나는 a talk about what I had done을 주었다.

하지만 두 가지가 바뀌었습니다.

첫째, Travis CI가 너무 유명해져서 결국 무료 서비스를 없앴습니다. 그리고 두 번째로 GitHub Actions이 도입되었습니다. 지난 몇 년 동안 CI용 GitHub Actions를 사용하기 위해 많은 리포지토리를 설정했습니다. 하지만 기본적으로 게을러서 해당 저장소에서 Travis CI 구성을 제거하지 않았습니다.

하지만 지난 주에 저는 그 일을 시작할 때가 되었다고 결정했습니다. 그리고 .travis.yml을 제거하려고 했을 때 GitHub Actions CI 워크플로에서 뭔가 빠졌다는 것을 깨달았습니다. 단위 테스트를 실행하고 있었지만 테스트 범위에 대해 보고하지 않았습니다. 그래서 그것을 고칠 시간이었습니다.

GitHub 워크플로에서 Travis CI를 Coveralls.io에 연결하는 로직을 다시 구현해야 했습니다. 그것은 실제로 매우 간단하다는 것이 밝혀졌습니다. Devel::Cover::Report::Coveralls이라는 CPAN 모듈이 있습니다. 이 모듈은 Devel::Cover에서 출력을 가져와 올바른 형식으로 변환하고 Coveralls.io로 보냅니다. 그리고 보너스로 GitHub 워크플로에서 이를 구현하는 방법을 보여주는 문서가 있습니다.

그래서 CPAN 모듈 중 하나에 대한 워크플로 정의 파일을 해킹했고 몇 분 안에 작동했습니다.

글쎄, 나는 "몇 분"이라고 말했지만 실행하는 데 13분이 넘게 걸렸습니다. Devel::Cover::Report::Coveralls는 매우 무거운 모듈이며 작업을 수행하려면 다른 많은 모듈을 설치해야 합니다.

이 시점에서 이것이 어디로 가는지 짐작할 수 있습니다. 그리고 당신이 옳을 것입니다.

Devel::Cover::Report::Coveralls가 이미 설치된 Docker 컨테이너를 만들었습니다. 그리고 누구나 Docker 허브davorg/perl-coveralls에서 사용할 수 있습니다.

내 GitHub 워크플로 및 커버리지 작업에 대한 몇 가지 작은 조정이 이제 내 새 컨테이너에서 실행되고 있으며 13분이 아닌 29초가 걸립니다. 그래서 그것은 승리입니다.

workflow file의 관련 섹션은 다음과 같습니다.

coverage:
    runs-on: ubuntu-latest
    container: davorg/perl-coveralls:latest
    name: Test coverage
    steps:
      - uses: actions/checkout@v3
      - name: Install modules
        run: cpanm -n --installdeps .
      - name: Coverage
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: cover -test -report Coveralls


그리고 위와 같이 Coveralls.io에서 멋진 그래프를 생성합니다.

유용하다고 생각되면 알려주세요.

게시물 Containers for CoveragePerl Hacks에 처음 나타났습니다.

좋은 웹페이지 즐겨찾기