CircleCI2.0+php-coverallsでカバレッジのバッジを表示する


CircleCI2.0+php-coverallsでカバレッジのバッジを生成しようとしたところ、Coverallsの説明が古かったりphp-coverallsの説明が微妙だったりして途中ハマったので、バッジを表示されるまでに行った手順を備忘録として残します。

1. coverallsに登録

カバレッジのバッジを表示するためにcoveralls を利用します。
ログインして ADD REPO メニューから対象とするリポジトリを有効にします。有効にしたあとDETAILSボタンよりCoverallsのセットアップ画面に遷移します。

PHPリポジトリの場合はPHPの場合のcoverallsの設定方法が記載されたページが表示されますが、TravisCIでの設定方法しかありません。
CircleCIの場合はドキュメントを読む必要があります。

CoverallsのPHPの設定方法のページ を見るとphp-coverallsのREADMEを読めとありますので php-coverallsのREADME を読みましょう。

Coverallsの説明はちと不十分…

2. php-coverallsのインストール

READMEのとおり、まずはcomposerでphp-coverallsをインストールします。

$ composer require php-coveralls/php-coveralls

3. phpunit.xmlまたはphpunit.xml.distにカバレッジのためのログを取得するための記述を追加

phpunit.xml
    <logging>
        <log type="coverage-clover" target="build/logs/clover.xml"/>
    </logging>

4. CircleCIの設定ファイルの修正を行う

READMEによると、CiecleCIの設定ファイルにカバレッジのログを追加するための記載を追加しなければいけないのだけれど、設定ファイルの例がCircleCIの1系の記載になっているので、CircleCI2.0以降の場合は以下のようにする必要があります。

circleci/config.yml
# PHP CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-php/ for more details
#
version: 2
jobs:
  build:
    docker:
      # specify the version you desire here
      - image: circleci/php:latest

      # Specify service dependencies here if necessary
      # CircleCI maintains a library of pre-built images
      # documented at https://circleci.com/docs/2.0/circleci-images/
      # - image: circleci/mysql:9.4

    working_directory: ~/repo

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "composer.json" }}
          # fallback to using the latest cache if no exact match is found
          - v1-dependencies-

      - run: mkdir -p build/logs             # ★追加

      - run: composer install -n --prefer-dist

      - save_cache:
          paths:
            - ./vendor
          key: v1-dependencies-{{ checksum "composer.json" }}

      - run: vendor/bin/phpunit
      - run: php vendor/bin/php-coveralls    # ★追加

- run: mkdir -p build/logs- run: php vendor/bin/php-coveralls.circleci/config.yml に追加します。
READMEには後者が載っていませんが必要ですのでしっかり記載します。

5. CircleCIの環境変数にcoverallsのトークンを追加

CircleCIにログインし、CIしたいプロジェクトのSettingsのEnvironment Variablesメニューより「Add Variable」ボタンから環境変数COVERALLS_REPO_TOKEN を追加します。
値はcoverallsのページに表示されていたrepo_tokenの値を設定しておきます。

6. .coveralls.ymlを以下のように記載

coveralls.yml
coverage_clover: build/logs/clover.xml
json_path: build/logs/coveralls-upload.json

記載した.coveralls.ymlをリポジトリ直下に配置します。

7. ファイルをpushしてCircleCIでビルドを走らせる

ビルドが通れば、Coverallsのリポジトリのページが更新されます。
ページにカバレッジバッジが表示されれば、バッジの生成は正常に動作しています。

このようにバッジが表示されればOKです。
それではバッジをあなたのREADMEに貼って快適なOSSライフを!