プルリク前後の apk ファイルを比較する GitHub Actions

下記のような yaml ファイルと [Danger](https://github.com/danger/danger) 用の設定ファイルを、リポジトリの `.github/workflows` 配下に置きます。

```yaml:.github/workflows/apk-info.yml
name: apk info

on: pull_request

env:
  GRADLE_BUILD_TASK: 'assembleDebug'

jobs:
  build-head:
    name: Build head
    runs-on: ubuntu-18.04
    steps:
      - name: Check out
        uses: actions/checkout@v2
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Set up JDK
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Build with Gradle
        run: ./gradlew $GRADLE_BUILD_TASK
      - name: Get apk path
        id: apk-path
        run: |
          path=$(find **/build/outputs/apk -name '*.apk' -type f | head -1)
          echo "::set-output name=path::$path"
      - name: Upload apk file
        uses: actions/upload-artifact@v1
        with:
          name: head
          path: ${{ steps.apk-path.outputs.path }}
  build-base:
    name: Build base
    runs-on: ubuntu-18.04
    steps:
      - name: Check out
        uses: actions/checkout@v2
        with:
          ref: ${{ github.event.pull_request.base.sha }}
      - name: Set up JDK
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Build with Gradle
        run: ./gradlew $GRADLE_BUILD_TASK
      - name: Get apk path
        id: apk-path
        run: |
          path=$(find **/build/outputs/apk -name '*.apk' -type f | head -1)
          echo "::set-output name=path::$path"
      - name: Upload apk file
        uses: actions/upload-artifact@v1
        with:
          name: base
          path: ${{ steps.apk-path.outputs.path }}
  check:
    name: Check
    needs: [build-head, build-base]
    runs-on: macos-10.15 # apkanalyzerを利用する為
    steps:
      - name: Check out
        uses: actions/checkout@v2
        with:
          ref: ${{ github.event.pull_request.head.sha }}
          fetch-depth: 0 # for Danger
      - name: Download head apk file
        uses: actions/download-artifact@v1
        with:
          name: head
          path: head
      - name: Get head apk path
        id: head-apk-path
        run: |
          path=$(find head -name '*.apk' -type f | head -1)
          echo "::set-output name=path::$path"
      - name: Download base apk file
        uses: actions/download-artifact@v1
        with:
          name: base
          path: base
      - name: Get base apk path
        id: base-apk-path
        run: |
          path=$(find base -name '*.apk' -type f | head -1)
          echo "::set-output name=path::$path"
      - name: Set up Ruby for Danger
        uses: actions/setup-ruby@v1
        with:
          ruby-version: '2.6'
          architecture: 'x64'
      - name: Set up Danger
        run: gem install danger:6.2.0 danger-apkstats:0.2.0
      - name: Run Danger
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          HEAD_APK_PATH: ${{ steps.head-apk-path.outputs.path }}
          BASE_APK_PATH: ${{ steps.base-apk-path.outputs.path }}
        run: |
          danger --dangerfile='.github/workflows/apk-info.danger' --danger_id='${{ github.workflow }}' --remove-previous-comments --fail-on-errors=true
```

```ruby:.github/workflows/apk-info.danger
# ref https://danger.systems/

head_apk_path = ENV['HEAD_APK_PATH']
base_apk_path = ENV['BASE_APK_PATH']

apkstats.apk_filepath=head_apk_path
apkstats.compare_with(base_apk_path, do_report: true)
```

GitHub Actions の pull request イベントの `${{ github.event.pull_request.base.sha }}` で、プルリクの起点となった commit SHA が取得できるので、起点の commit SHA とプルリクの commit SHA の両地点でビルドして、Danger のプラグイン [danger-apkstats](https://github.com/jmatsu/danger-apkstats) で比較・レポートを行っています。

ワークフローが成功すると、次のようにプルリクへコメントが書き込まれます。

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35733/182cf631-629c-5a9b-9644-cb5dbdb7331d.png">

[danger-apkstats](https://github.com/jmatsu/danger-apkstats) の README に書かれているように、もし Permission 等に変更があれば変更内容が書き込まれます。