Ruby 리포지토리의 GitHub Actions에서 Coveralls 사용

소개



Travis CI에서 GitHub Actions로 마이그레이션할 때 GitHub Actions에서 SimpleCov 결과를 Coveralls로 보내는 방법을 살펴보았습니다. simplecov-lcov를 사용하여 code coverage를 lcov 형식으로 출력하고 Coveralls로 보내는 느낌이었습니다.

SimpleCov 및 simplecov-lcov 설치



Gemfile에 다음 두 줄을 추가하여 bundle install
gem 'simplecov', '~> 0.21'
gem 'simplecov-lcov', '~> 0.8'
spec/spec_helper.rb 의 시작 부분에 다음을 추가합니다. Coveralls에 coverage를 보낼 때 중요한 것은 SimpleCov::Formatter::LcovFormatter와 관련된 부분입니다.
require 'simplecov'
require 'simplecov-lcov'

SimpleCov::Formatter::LcovFormatter.config do |config|
  # Coverallsはデフォルトではcoverage/lcov.infoの結果を送信する
  config.report_with_single_file = true
  config.single_report_path = 'coverage/lcov.info'
end

SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
  SimpleCov::Formatter::HTMLFormatter, 
  # formatterにSimpleCov::Formatter::LcovFormatterを加える
  SimpleCov::Formatter::LcovFormatter
])

SimpleCov.start

Coveralls GitHub Actions



htps : // 기주 b. 코 m / 마 r tp ぁ세 / 아 c 치 온 s / 코 ぇ 라 ls - 기 큐 브 아 c 치 온 에는 Coveralls의 GitHub Actions가 있습니다.

Use latent version 버튼을 누르면 표시되는 모달의 두 줄을 복사하여 Workflow의 yml에 추가합니다.



Workflow 예



Code coverage를 Coveralls에 보내기 위해 .github/workflows/coverage.yml라는 workflow 파일을 준비했습니다. 중요한 것은, 전절에서 카피한 마지막 - name: Coveralls GitHub Action 로부터의 부분입니다. github-token 는 필수 옵션이지만 ${{ secrets.GITHUB_TOKEN }} 로 해두면 OK입니다.
name: coverage

on: [push, pull_request]

jobs:
  coverage:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v2
      - name: Set up Ruby 2.7
        uses: actions/setup-ruby@v1
        with:
          ruby-version: '2.7'
      - name: Build and test with Rake
        run: |
          gem install bundler
          bundle install
          bundle exec rake
      - name: Coveralls GitHub Action
        uses: coverallsapp/[email protected]
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}

필요한지 조금 수수께끼이지만, 한 줄만의 .coveralls.yml를 준비했습니다.
service_name: github-ci

그리고는 이들을 commit하고 push하면 workflow가 움직이고, Coveralls에 결과가 보내집니다. 미리 Coveralls측에서 리포지토리의 연계를 ON으로 해 주세요.

결론



Coveralls의 GitHub Action의 example이, Node.js의 것이었기 때문에, Ruby는 대응하고 있지 않을까~라고 생각하고 있었습니다만, 제대로 조사하면 간단했습니다. Travis CI 시절에는 coveralls gem을 사용했습니다. coveralls gem에서는 SimpleCov의 버전에 잠시가 있기 때문에 이번과 같은 simplecov-lcov를 사용한 방법이 자유롭고 좋네요.

좋은 웹페이지 즐겨찾기