Bitriseのビルド状況をBitbarで見やすくする

## 背景

CI環境を運用していると、設定したビルドの進行状況が気になってモニターしたくなる時がしばしば発生します。
状況を可視化するため、Bitriseには実行状況が確認できるダッシュボードや、Slack通知を始めとした[通知系Integration](https://www.bitrise.io/integrations/steps/category/notification)が数多く用意されています。

しかし、いちいち開いて確認しなければならなかったり、ビルドに組み込む必要があったりと今ひとつ気軽さに欠けます。
気になった時に状況をちら見したい！ということで、[Bitbar](https://getbitbar.com/)を使ってmacOSのツールバー上で確認できるスクリプトを作ってみました。

## Bitrise APIを活用する
幸いなことに、BitriseにはAPIが用意されており、実行状況を取得したり、ビルドをトリガーできることができます。

[Bitrise.io API v0.1 (Work In Progress) - Bitrise DevCenter](https://devcenter.bitrise.io/api/v0.1/)
*※2018/12/05現在、WIPとされているので今後大幅な変更が入る可能性があります*

```bash
$ curl https://api.bitrise.io/v0.1
{"message":"Welcome to Bitrise API v0.1! You can find the API Documentation at: http://devcenter.bitrise.io/api/v0.1"}
```

[Bitrise内のユーザー設定](https://app.bitrise.io/me/profile#/security)より、「Personal access token」を発行することで自分のアカウントに関連した情報が取得できるようになります。

```bash
curl -H 'Authorization: token THE-ACCESS-TOKEN' 'https://api.bitrise.io/v0.1/me'
```

```json
{
  "data": {
    "avatar_url": "",
    "email": "api-demo@bitrise.io",
    "slug": "8e82ac7601178f17",
    "username": "api-demo"
  }
}
```
_（[Bitrise.io API v0.1 (Work In Progress) - Bitrise DevCenter](https://devcenter.bitrise.io/api/v0.1/#get-me)より）_

Bitriseでは、ユーザー、Organization、App、Build全てに固有のID（「Slug」）が振られており、このSlugを使って必要な情報を取得します。
特定のAppを確認するには、コンソールのURLから確認するのが一番お手軽です。
`https://app.bitrise.io/app/[APP_SLUG]#/builds`

```bash
curl -H 'Authorization: token THE-ACCESS-TOKEN' 'https://api.bitrise.io/v0.1/apps/APP-SLUG/builds?limit=1'
```

```json
{
    "data": [
      {
        "abort_reason": null,
        "branch": "master",
        "build_number": 80,
        "commit_hash": null,
        "commit_message": null,
        "commit_view_url": null,
        "environment_prepare_finished_at": null,
        "finished_at": null,
        "is_on_hold": false,
        "original_build_params": {
          "branch": "master",
          "workflow_id": "primary"
        },
        "pull_request_id": 0,
        "pull_request_target_branch": null,
        "pull_request_view_url": null,
        "slug": "319f2d6b620b5cbe",
        "stack_config_type": "standard1",
        "stack_identifier": "linux-docker-android",
        "started_on_worker_at": null,
        "status": 0,
        "status_text": "in-progress",
        "tag": null,
        "triggered_at": "2018-11-07T16:26:38Z",
        "triggered_by": "bitrise_api_doc",
        "triggered_workflow": "primary"
      }
    ],
    "paging": {
      "next": "51a8e5b7b323fd7e",
      "page_item_limit": 3,
      "total_item_count": 80
    }
}
```
_（[Bitrise.io API v0.1 (Work In Progress) - Bitrise DevCenter](https://devcenter.bitrise.io/api/v0.1/#get-appsapp-slugbuilds)より）_

ビルド履歴を取得できる/buildsエンドポイントでは細かくフィルターを設定でき、
ビルドの状態、トリガーされた時間、コミットメッセージといった要素で絞り込むことができます。

## Bitbarで表示できるスクリプト
このBitriseのAPIを使ったスクリプトを書いてみました。
https://gist.github.com/shinmiy/fc7fc0d20c40936f453e9ca2eccc298d

過去1週間分のビルドを取得し、
実行中のビルド数、実行中のビルドの詳細、過去ビルドの詳細、それぞれへのリンクをいい感じに表示してくれます。
<img width="393" alt="screenshot.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/47434/4a75bcb7-dc21-01f9-5809-0b67704a0626.jpeg">

### 設置方法
#### BitbarのPluginフォルダに設置
スクリプトをBitbarのプラグインフォルダに設置します。
ファイルに実行権限を付与しておきます

```bash
chmod +x bitrise_status.1m.rb
```

#### トークンを発行する
[ユーザー設定](https://app.bitrise.io/me/profile#/security) よりPersonal access tokensを発行します。 
以下の部分をGenerate newで発行したトークンに差し替えます。

```ruby
TOKEN = 'YOUR_TOKEN_HERE'
```

#### App Slugを確認する
ビルド画面のURLからSlugを確認して、

```
https://app.bitrise.io/app/[これがSlug]#/builds
```

以下の部分を差し替えます。

```ruby
APPS = { 'Your App Name' => 'App Slug', 'Another App Name' => 'Another App Slug' }
```

設定が完了すると、定期的にBitriseがスクリプトを実行しはじめ、ツールバー上にビルド状況が表示されます。

## まとめ
ダッシュボードが綺麗なBitriseですが、APIもWIPながらかなり豊富に用意されています。
bitrise.ymlのGET、POSTまであるので、githubでbitrise.ymlを管理して変更が入ったらPOST…なんてことできるかもしれません。

APIを読んでみるついでに書いてみたスクリプトですが、かなり重宝しているのでぜひお試し下さい！