【Android】Github Actions と Firebase App Distribution で特定のブランチ毎にベータ配布する

## GitHub Actions

[公式ページ](https://help.github.com/ja/actions/automating-your-workflow-with-github-actions/about-github-actions)

## Firebase App Distribution

[公式ページ](https://firebase.google.com/products/app-distribution/s)

###  :computer:環境構築
****

#### 事前準備
`FIREBASE_APP_ID ` と `FIREBASE_TOKEN ` をGithub ActionsのSecret Tokenで使用するので準備しておく。

- **FIREBASE_APP_ID**

    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299271/23d1cb9c-3f90-5ac0-51a6-d71c86da46e3.png" width="500" />
    ↑Firebaseコンソールで確認できる。赤枠の部分

- **FIREBASE_TOKEN**

    firebase-toolsをインストールして以下のコマンドを実施、対象のGoogleアカウトで認証するとtokenが取得できる。

    ```sh
    $ firebase login:ci
    ```

### :pencil: 実装
****

#### ベータ配布用の `.github/workflows/deploy.yml` を作成
まずは、debugビルドでベータ配布するworkflowを作成します。
事前に準備した `FIREBASE_APP_ID` とは別に debug用の `FIREBASE_DEV_APP_ID` (application idが異なる分) を用意して使用してます。 

```yml
name: deploy

on:
  push:
    branches:
    - feature/test-deploy

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Setup JDK
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Debug build
        run: ./gradlew assembleDebug
      - name: Deploy Firebase App Distribution [DEV]
        uses: wzieba/Firebase-Distribution-Github-Action@v1.1.1
        with:
          appId: ${{secrets.FIREBASE_DEV_APP_ID}}
          token: ${{secrets.FIREBASE_TOKEN}}
          groups: developer
          file: app/build/outputs/apk/debug/app-debug.apk
```

無事配布されるとFirebaseのコンソール上では以下の様に表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299271/d7cadc48-caec-0cb1-4cf5-5d30a3934d26.png" width="500" />

また、招待を受けたユーザーには以下の様なメールが配信されるはずです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299271/adf8a612-2d9d-2ab0-d823-8c1f9563986e.png" width="500" />

#### 特定のブランチ毎に特定の処理を実施させたい場合

Github Actionsでは `if` で条件分岐できるので、現在のブランチを判定し処理を分岐させます。
https://help.github.com/ja/actions/automating-your-workflow-with-github-actions/contexts-and-expression-syntax-for-github-actions

例) masterブランチのみ何か処理を行う場合

```yml
name: release build
if: github.ref == 'refs/heads/master'
run: ./gradlew assembleRelease
```

debugビルドとreleaseビルドをそれぞれ  `develop` ブランチ, `master` ブランチで行う場合の設定ファイルは以下になります。

```yml
name: deploy

on:
  push:
    branches:
      - develop
      - master

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Setup JDK
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Debug build
        if: github.ref == 'refs/heads/develop'
        run: ./gradlew assembleDebug
      - name: Release build
        if: github.ref == 'refs/heads/master'
        run: ./gradlew assembleRelease
      - name: Deploy Firebase App Distribution [DEV]
        if: github.ref == 'refs/heads/develop'
        uses: wzieba/Firebase-Distribution-Github-Action@v1.1.1
        with:
          appId: ${{secrets.FIREBASE_DEV_APP_ID}}
          token: ${{secrets.FIREBASE_TOKEN}}
          groups: developer
          file: app/build/outputs/apk/debug/app-debug.apk
      - name: Deploy Firebase App Distribution [PRO]
        if: github.ref == 'refs/heads/master'
        uses: wzieba/Firebase-Distribution-Github-Action@v1.1.1
        with:
          appId: ${{secrets.FIREBASE_APP_ID}}
          token: ${{secrets.FIREBASE_TOKEN}}
          groups: developer
          file: app/build/outputs/apk/release/app-release.apk
```

※ 他に良いやり方がある場合ご指摘頂けると助かります :bow:

### :link: 参考になったURL
****
- [Github Actions で Firebase App Distribution にデプロイする｜watura｜note](https://note.com/watura/n/nf49c04e54d09)
- [【Github Actions】FlutterのビルドをApp Distributionに自動デプロイする - Qiita](https://qiita.com/3ta0212/items/f20610c098eb6c6e90e9)
- [Androidアプリの配布にGitHub Actionsを使ってみた。 - アクトインディ開発者ブログ](https://tech.actindi.net/2019/12/01/000000)