rochefort/git-trend のCIは、これまで Travis-CI を利用していたのですが、 無料で使えなくなっていました(どうも2020年ぐらいからだったみたい)ので、今だとGithub Actionsが簡単に利用できそうでしたので、こちらへ移行しました。
また、カバレッジの表示もCoveralls を利用していたのですが、公開されているGithub Actions でうまく利用できなかったので、 これを機に Codecov へ移行してみました。
あんまり関係ないところで少しはまっていましたが、移行自体は簡単でした。
こんな感じ
codecov側はこんな感じです。

githubに載せるバッジはこんな感じです。

Github Actionsでrspecの実行
ruby/setup-ruby@v1 を使って rspec, rubocop を実行しています。
ここでは省略していますが、複数のrubyで実行したかったので、jobsをrubyのversion毎に作成しています。
# .github/workflows/ci.yml
name: CI
on:
push:
pull_request:
jobs:
ruby32:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2.2'
bundler-cache: true
- name: Show ruby version
run: ruby -v
- name: Run tests
run: bundle exec rspec
- name: Run lint
run: bundle exec rubocop
smplecov + codecov
codecov側の設定
Codecov にgithubでログインし、対象リポジトリを選択すると、CODECOV_TOKEN が発行されます。
simplecov
SimpleCov::Formatter::SimpleFormatter で送れば良いので、これ用の設定は特に不要でした。
# spec/spec_helper.rb require "simplecov" SimpleCov.start do add_filter "/spec/" end
最初は、githubに記載されてるように、ENV["CI"] でformatter分ける必要があるかと思ったのですが、なくてもlocalでhtmlとSimpleFormatterのそれぞれ出力されてるようなので、上記に変更しました。
# spec/spec_helper.rb require "simplecov" SimpleCov.start do add_filter "/spec/" if ENV["CI"] formatter SimpleCov::Formatter::SimpleFormatter else formatter SimpleCov::Formatter::MultiFormatter.new([ SimpleCov::Formatter::SimpleFormatter, SimpleCov::Formatter::HTMLFormatter, ]) end end
Github Actionsの設定
これをgithubに追加します。 「Settings -> Secrets and Variables -> Actions -> Repository secrets」で追加できます。
Github Actionsワークフロー
filesとtokenオプションが必要です。 その他オプションは、Codecov · Actions · GitHub Marketplace に記載されています。
# .github/workflows/ci.yml
(略)
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
with:
files: ./coverage/.resultset.json
token: ${{ secrets.CODECOV_TOKEN }}
GithubのREADMEにつけるバッジ
codecovの設定から選択できます。
その他ハマったところ
今回合わせて、gemの更新も行ったのですが、 Simplecov.start の実行よりもアプリケーションのrequireが早く実行されており、 gemの更新により、rspecの結果がcoverageに表示されなくなってしまっていました。
これに気づかずに、codecovには送信できているが結果が何も表示されておらず、 formatterが問題ではないかと疑って、いろいろ試してしまっていました。
# before require "simplecov" require "webmock/rspec" require "git_trend" # <- これがアプリケーションコード。これより先に SimpleCov.start しないといけない SimpleCov.start do add_filter "/spec/" end
# after require "simplecov" SimpleCov.start do add_filter "/spec/" end require "webmock/rspec" require "git_trend"