name: equivalence-test-diff

on:
  pull_request:
    types:
      - opened
      - synchronize
      - ready_for_review
      - reopened

permissions:
  contents: read
  pull-requests: write

jobs:
  equivalence-test-diff:
    name: "Equivalence Test Diff"
    runs-on: ubuntu-latest

    steps:
      - name: Fetch source code
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Determine Go version
        id: go
        uses: ./.github/actions/go-version

      - name: Install Go toolchain
        uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
        with:
          go-version: ${{ steps.go.outputs.version }}
          cache-dependency-path: go.sum

      - name: Download testing framework
        shell: bash
        run: |
          ./.github/scripts/equivalence-test.sh download_equivalence_test_binary \
            0.5.0 \
            ./bin/equivalence-tests \
            linux \
            amd64

      - name: Build terraform
        shell: bash
        run: ./.github/scripts/equivalence-test.sh build_terraform_binary ./bin/terraform

      - name: Run equivalence tests
        id: equivalence-tests
        shell: bash {0} # we want to capture the exit code
        run: |
          ./bin/equivalence-tests diff \
              --tests=testing/equivalence-tests/tests \
              --goldens=testing/equivalence-tests/outputs \
              --binary=$(pwd)/bin/terraform
          echo "exit-code=$?" >> "${GITHUB_OUTPUT}"

      - name: Equivalence tests failed
        if: steps.equivalence-tests.outputs.exit-code == 1 # 1 is the exit code for failure
        shell: bash
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
          gh pr comment ${{ github.event.pull_request.number }} \
            --body "The equivalence tests failed. Please investigate [here](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})."
          exit 1 # fail the job

      - name: Equivalence tests changed
        if: steps.equivalence-tests.outputs.exit-code == 2 # 2 is the exit code for changed
        shell: bash
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
          gh pr comment ${{ github.event.pull_request.number }} \
            --body "The equivalence tests will be updated. Please verify the changes [here](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})."
