React Native + GitHub ActionsでAndroidアプリをデプロイ

8550 ワード

概要

React Native + GitHub ActionsでAndroidアプリをビルドして、DeployGateアップロードする方法をまとめる。

仕様

  • ビルドしてDeployGateにデプロイする。
  • developブランチとstagingブランチにプッシュされたタイミングで実施する。
  • developブランチとstagingブランチで読み込む環境変数を変える。
  • DeployGateに渡すmessagedistribution_name
    • message:gitにショートハッシュ値
    • distribution_name:ブランチ名

前提

ビルドを実施するコードは、以下のようなディレクトリ構成となっている。

.
├── App.tsx
├── README.md
├── android # Androidアプリ
├── app.json
├── assets
├── babel.config.js
├── index.js
├── ios # iosアプリ
├── jest.config.js
├── metro.config.js
├── package.json
├── react-native.config.js
├── src # コード
├── .env.development # 開発時に使用する環境変数
├── .env.staging # 検証時に使用する環境変数
├── .env.production # 本番時に使用する環境変数
├── tsconfig.json
└── yarn.lock

コード

deploy-android.yml
name: Deploy android app
on:
  push:
    branches:
      - develop
      - staging
    paths:
      - ".github/workflows/deploy-android.yml"
jobs:
  deploy-android:
    runs-on: ubuntu-latest
    container: reactnativecommunity/react-native-android
    steps:
      - name: checkout
        uses: actions/checkout@v2

      - name: Extract branch name # 説明1
        shell: bash
        run: echo "::set-output name=branch::${GITHUB_REF#refs/heads/}"
        id: extract_branch

      - name: copy env staging # 説明2
        if: ${{ steps.extract_branch.outputs.branch == 'staging' }}
        run: cp .env.staging .env
      
      - name: copy env develop # 説明2
        if: ${{ steps.extract_branch.outputs.branch == 'develop' }}
        run: cp .env.development .env

      - name: yarn install
        run: yarn --frozen-lockfile

      - name: Build Android Debug # 説明3
        run: ./gradlew assembleRelease

      - name: Deploy App # 説明4
        working-directory: ./android
        run: |
          curl \
            -H "Authorization: token ${{secrets.DEPLOY_GATE_API_KEY}}" \
            -F "file=@app/build/outputs/apk/release/app-release.apk" \
            -F "message=$(git rev-parse --short HEAD)" \
            -F "distribution_name=${{ steps.extract_branch.outputs.branch }}" \
            -v "https://deploygate.com/api/users/${{secrets.DEPLOY_GATE_USER_NAME}}/apps"

説明1

ブランチ名を記録する。DeployGateにデプロイする際に利用する。
::set-outputに関してはこちらを参考ください。