Codecov and CircleCI Orbs: Making Code Coverage Easy starts in 1 hour

数日前にCircleCIの中の人とCodecovの中の人による[Webinar](https://circleci.zoom.us/recording/play/N255ECPE_V5728rxdoZ_aOTXzysjwVrtnytjt5skulZ6IWkrfBkYE8vqlrpi1PJY?continueMode=true&tokenMeetingId=j8kZbnCU9F5exe7ofakcfEs5usHXZy-qIbGmGVcN53mwIumekTziMw)がありました。

社内に**今**を共有するために、webinarと自分の知識をざっとまとめただけのものです。

# アジェンダ 

* 紹介
* CircleCI Orbsの紹介
* Codecovの紹介
* Codecov + CricleCI Orbs
* Q＆A


## CircleCI Orbsとは

`orbs` は名詞であり、CircleCIの設定の再利用・共有可能と言った意味
`CircleCI Orbs` はCircleCIで書いたパイプライン自動化処理(CI・CD)設定を世界に共有できる仕組み

### 時代背景

#### Github
ソースコードを世界に共有する仕組み

#### DockerHub
アプリケーションの構成環境を世界に共有する仕組み

#### CircleCI Orbs <= new 
CircleCI上で動作するCI・CDの仕組みを世界に共有する仕組み

### まとめ

別プロジェクトでは、テスト環境への自動デプロイや、本番環境へ納品ファイルの自動作成・アプリケーションの自動テストやソースコードの自動品質チェックなどの具体的な仕組みを世界に共有することができる。
逆に、データ統合処理のCI設定・AIプログラムの自動配備方法など、別分野のやり方は違うエンジニアが上げてくれればとても参考にできる。


## CodeCovとは

年間数千万のカバレッジレポートがアップロードされる、コードカバレッジツールのリーディング企業。
アップロードされたカバレッジレポートを専用の管理画面でコードのテスト状況を視覚的に確認することができる

### コードカバレッジとは

コードの品質を図る一つの指標。
テストされているコードの網羅率をを静的に解析することで、網羅率90%以上をめざす。Nuxtは一時期100%をキープしてました。

`実際は、網羅率はチームごとに設定します`

[Nuxtのカバレッジレポート](https://codecov.io/gh/nuxt/nuxt.js)

### カバレッジの推移
![カバレッジ](https://i.gyazo.com/b0b39ded5da4b97a2847af857d061bd3.png)

### ファイル別カバレッジ率

![ファイル別カバレッジ率](https://i.gyazo.com/36b80b6e2727d15f4742a395777662d8.png)

### CodeCov & CircleCI

CircleCi Orbsを使用して、CodeCovにレポートを自動でアップロードするデモが始まります。まとめると、

CodeCovのorbs元ファイルが以下の形で[用意](https://circleci.com/orbs/registry/orb/codecov/codecov)されており


```yaml
version: 2.1

description: Upload your coverage reports to Codecov without dealing with complex configurations.  This orb helps you get coverage results quickly so that you can breathe easier and commit your code with confidence.

commands:
  upload:
    parameters:
      conf:
        description: Used to specify the location of the .codecov.yml config file
        type: string
        default: ".codecov.yml"
      file:
        description: Path to the code coverage data file to upload.
        type: string
      flags:
        description: Flag the upload to group coverage metrics (e.g. unittests | integration | ui,chrome)
        type: string
        default: ""
      token:
        description: Set the private repository token (defaults to environment variable $CODECOV_TOKEN)
        type: string
        default: ${CODECOV_TOKEN}
      upload_name:
        description: Custom defined name of the upload. Visible in Codecov UI
        type: string
        default: ${CIRCLE_BUILD_NUM}
    steps:
      - run:
          name: Upload Coverage Results
          command: |
            bash <(curl -s https://codecov.io/bash) \
              -f << parameters.file >> \
              -n << parameters.upload_name >> \
              -t << parameters.token >> \
              -y << parameters.conf >> \
              -F << parameters.flags >> \
```

CircleCiの設定ファイルの方でcodecov orbsファイルを指定し、対象のカバレッジファイルを指定すると完了です。CodeCovへレポートをアップロードする際はトークンが必要になりますが、CircleCIの環境変数の方に、`CODECOV_TOKEN` を設定すれば解決します。

```yaml

version: 2.1
orbs:
  codecov: codecov/codecov@1.0.2
jobs:
  build:
    steps:
      - codecov/upload:
          file: coverage.xml
          flags: backend
```