name: Check dependency tree changes
on:
  pull_request_target:
    types:
      - opened
      - edited
      - synchronize
    paths:
      - 'buildSrc/src/main/java/Dependencies.kt'
      - 'buildSrc/buildDependencies.gradle'
      - '**/build.gradle.kts'

jobs:
  compare-dependency-tree:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout pull request tree
        uses: actions/checkout@c952173edf28a2bd22e1a4926590c1ac39630461
        with:
          path: pr-source

      - name: Checkout development tree
        uses: actions/checkout@c952173edf28a2bd22e1a4926590c1ac39630461
        with:
          ref: develop
          path: dev-source

      - name: Generate and compare dependency trees
        id: tree-changed
        run: |
          set -euxo pipefail
          curl -sL https://github.com/JakeWharton/dependency-tree-diff/releases/download/1.2.0/dependency-tree-diff.jar -o dependency-tree-diff.jar
          cd pr-source || exit 1
          ./gradlew -q :app:dependencies --configuration nonFreeReleaseRuntimeClasspath | tee ../pr-tree.txt
          cd ../dev-source || exit 1
          ./gradlew -q :app:dependencies --configuration nonFreeReleaseRuntimeClasspath | tee ../dev-tree.txt
          cd ../
          chmod +x dependency-tree-diff.jar
          ./dependency-tree-diff.jar dev-tree.txt pr-tree.txt > diff.txt
          if [[ $(($(cat diff.txt | wc -l))) -gt 0 ]]; then
            echo "::set-output name=diff::$(cat diff.txt)"
          else
            echo "::set-output name=diff::null"
          fi

      - name: Post dependency tree diff to pull request if changed
        if: ${{ steps.tree-changed.outputs.diff != 'null' }}
        uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
        with:
          result-encoding: string
          script: |
            github.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: ':warning: **This PR results in dependency tree changes** :warning: \n\n```diff\n${{ steps.tree-changed.outputs.diff }}\n```'
            })