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"