name: Compare Sizes

##########################################################################################
# WARNING! This workflow uses the 'pull_request_target' event. That mans that it will    #
# always run in the context of the main actualbudget/actual repo, even if the PR is from #
# a fork. This is necessary to get access to a GitHub token that can post a comment on   #
# the PR. Be VERY CAREFUL about adding things to this workflow, since forks can inject   #
# arbitrary code into their branch, and can pollute the artifacts we download. Arbitrary #
# code execution in this workflow could lead to a compromise of the main repo.           #
##########################################################################################
# See: https://securitylab.github.com/research/github-actions-preventing-pwn-requests    #
##########################################################################################

on:
  pull_request_target:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  compare:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
    steps:
      - name: Wait for ${{github.base_ref}} build to succeed
        uses: fountainhead/action-wait-for-check@v1.1.0
        id: master-build
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          checkName: web
          ref: ${{github.base_ref}}

      - name: Wait for PR build to succeed
        uses: fountainhead/action-wait-for-check@v1.1.0
        id: wait-for-build
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          checkName: web
          ref: ${{github.event.pull_request.head.sha}}

      - name: Report build failure
        if: steps.wait-for-build.outputs.conclusion == 'failure'
        run: |
          echo "Build failed on PR branch or ${{github.base_ref}}"
          exit 1
      - name: Download build artifact from ${{github.base_ref}}
        uses: dawidd6/action-download-artifact@v2
        id: pr-build
        with:
          branch: ${{github.base_ref}}
          workflow: build.yml
          name: build-stats
          path: base

      - name: Download build artifact from PR
        uses: dawidd6/action-download-artifact@v2
        with:
          pr: ${{github.event.pull_request.number}}
          workflow: build.yml
          name: build-stats
          path: head

      - name: Strip content hashes from stats files
        run: |
          sed -i -E 's/\.[0-9a-f]{8,}\././g' ./head/*.json
          sed -i -E 's/\.[0-9a-f]{8,}\././g' ./base/*.json
      - uses: github/webpack-bundlesize-compare-action@v1.8.2
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          current-stats-json-path: ./head/desktop-client-stats.json
          base-stats-json-path: ./base/desktop-client-stats.json
          title: desktop-client

      - uses: github/webpack-bundlesize-compare-action@v1.8.2
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          current-stats-json-path: ./head/loot-core-stats.json
          base-stats-json-path: ./base/loot-core-stats.json
          title: loot-core
