Github Actions で coveralls-gradle-plugin を使って coveralls.io に Report を送信する

# はじめに
この記事は Github Actions で coveralls-gradle-plugin を使って coveralls.io に Report を送信する方法を備忘録として書いています。なお、2019-12-07 時点で [Github Actions に対応してほしいという Issue](https://github.com/kt3k/coveralls-gradle-plugin/issues/98) が上がっているし、[本家の Issue にもサポートの Issue](https://github.com/coverallsapp/github-action/issues/22) が上がっているので、将来的にはこの記事に書いたような方法を使わなくて良くなると思います。

# おことわり
Github Actions が何か、Coveralls が何かと言った話は省略します。ドキュメントのリンクを書いておくので興味のある人はリンク先を読んで概要を知ってから読んでもらえると嬉しいです。

* [Github Actions](https://help.github.com/en/actions)
* [Coveralls](https://docs.coveralls.io/)
* [coveralls-gradle-plugin](https://github.com/kt3k/coveralls-gradle-plugin)

また、より良い設定方法があればご意見いただけると嬉しいです。

# 解決したい課題

* もともと [TravisCI](https://docs.travis-ci.com/) と [coveralls-gradle-plugin](https://github.com/kt3k/coveralls-gradle-plugin) を組み合わせて [coveralls.io](https://coveralls.io/) を使って CI していたが [Github Actions](https://help.github.com/en/actions) に移行したい
* [coveralls-gradle-plugin](https://github.com/kt3k/coveralls-gradle-plugin) は [TravisCI](https://docs.travis-ci.com/) を含めた[いくつかの CI サービス](https://github.com/kt3k/coveralls-gradle-plugin#ci-services) をサポートしており CI サービスとの連携が容易だったが、[Github Actions](https://help.github.com/en/actions) はその対象サービスではない
* [coveralls.io が公式に提供する Github Actions](https://github.com/coverallsapp/github-action) があるが、[この Issue に記載されている通り Java/Jacoco を利用した Report に対応していない](https://github.com/coverallsapp/github-action/issues/22)

# どう解決するか

* [coveralls-gradle-plugin](https://github.com/kt3k/coveralls-gradle-plugin) が提供するサポート外 CI サービスと連携する手法を使う。

# Github Actions の設定

```yaml
name: Test CI

on:
  - pull_request

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1
    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: Test with Gradle
      run: ./gradlew test
    - name: Coveralls Test Report
      run: ./gradlew jacocoTestReport coveralls
      env:
        COVERALLS_REPO_TOKEN: ${{secrets.COVERALLS_REPO_TOKEN}}
        CI_NAME: Github Actions
        CI_BRANCH: ${{github.ref}}
        CI_PULL_REQUEST: ${{github.event.pull_request.html_url}}
```

* [coveralls-gradle-plugin](https://github.com/kt3k/coveralls-gradle-plugin) はサポート外 CI サービスと連携する場合、以下の環境変数が設定可能なので設定しただけ。
    * `CI_NAME`: CI サービスの名前
    * `CI_BUILD_NUMBER`: CI の BUILD 番号
    * `CI_BUILD_URL`: CI の BUILD URL
    * `CI_BRANCH`: CI する Branch 名
    * `CI_PULL_REQUEST`: CI する Pull Request の URL
    * `COVERALLS_REPO_TOKEN` (必須パラメータ): [coveralls.io](https://coveralls.io/) から取得できる Token
* `github.event.*` が持つパラメータは CI の hook によって変わるため、 `pull_request` event を hook していないとこの設定は動きません。
    * [全 event のパラメータはここから調べることができます](https://developer.github.com/v3/activity/events/types/)
* `COVERALLS_REPO_TOKEN` は Github の Repository の Secret 設定に追加しておく必要があります。
    * [設定方法はこちら](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
* 環境変数に設定した値は[Context](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/contexts-and-expression-syntax-for-github-actions) から様々な変数を取得できるのでカスタマイズしてみてもいいかもしれません。

# 困りごと
* [Github Actions](https://help.github.com/en/actions) では `check_run` event に hook しないと BUILD URL が取れない（と思う）
    * 同様に BUILD 番号も取れない
    * https://github.community/t5/GitHub-Actions/Add-build-number/td-p/30548
    * そのため、 `CI_BUILD_NUMBER` と `CI_BUILD_URL` が設定できない
* [coveralls.io](https://coveralls.io/) 上で Commiter が設定されない
    * `COVERALLS_REPO_TOKEN` のみを設定した場合は表示されるため Pull Request の場合は表示されないものなのだろうか？

# おわりに
たまたま昔作った OSS な Repository をメンテナンスしていて得た知見でした。 Github Actions は後発の CI サービスなのでドキュメントがしっかりしていて、調査もしやすくてサイコーですね。