# The Tests / E2E workflow is used to run end-to-end tests on pull requests originating
# from the ibc-go repository. The workflow is triggered on a PR opening, when new commits
# are pushed to the PR, or when the PR is marked ready for review.
name: Tests / E2E
on:
  workflow_dispatch:
  pull_request:
    types:
      # trigger workflow if PR is opened directly as R4R.
      - opened
      # trigger workflow if changes are pushed to the branch.
      - synchronize
      # trigger workflow if PR is marked ready for review.
      - ready_for_review
    paths-ignore:
      - 'docs/**'
      - '**.md'
      - 'LICENSE'
# cancel workflows if a new one is triggered on the same branch.
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
  # determine-image-tag will either output the PR number e.g. pr-1234 or the string main.
  # this will be used to tag the images that are built during the workflow.
  determine-image-tag:
    if: ${{ !github.event.pull_request.draft && github.repository == 'cosmos/ibc-go' && !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }}
    runs-on: ubuntu-latest
    outputs:
      simd-tag: ${{ steps.get-tag.outputs.simd-tag }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-go@v5
        with:
          go-version: '1.22'
      - id: get-tag
        run: |
          if [ -z "${{ github.event.pull_request.number }}" ]
          then
            echo "simd-tag=main" >> $GITHUB_OUTPUT
          else
            tag="pr-${{ github.event.pull_request.number }}"
            echo "Using tag $tag"
            echo "simd-tag=$tag" >> $GITHUB_OUTPUT
          fi

  # e2e generates the e2e tests for the non-forked PRs. It does so by using the
  # e2e-test-workflow-call.yml each test runs the jobs defined in that file.
  e2e:
    # we will be running this job if the PR has not yet been marked for review, and we push additional changes.
    # we skip the job in this case.
    if: ${{ !github.event.pull_request.draft && github.repository == 'cosmos/ibc-go' && !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }}
    needs: determine-image-tag # we are required to have a docker tag before we can build any images.
    uses: ./.github/workflows/e2e-test-workflow-call.yml
    # unless we explicitly tell the workflow to inherit secrets, required secrets such as GITHUB_TOKEN will not be
    # provided to the workflow. This would cause privileged operations to fail.
    secrets: inherit
    with:
      # with each test, we build an image from the current code.
      build-and-push-docker-image: true
      # if the test fails, we upload logs so that we can download them from the UI.
      upload-logs: true
      chain-image: ghcr.io/cosmos/ibc-go-simd
      # with regular tests, both images are the same.
      chain-a-tag: '${{ needs.determine-image-tag.outputs.simd-tag }}'
      chain-b-tag: '${{ needs.determine-image-tag.outputs.simd-tag }}'
      chain-binary: 'simd'
      # on regular PRs we won't run upgrade tests.
      # NOTE: we are exluding TestTransferTestSuite as we run this full suite instead of each individual test.
      test-exclusions: 'TestUpgradeTestSuite,TestGrandpaTestSuite,TestIBCWasmUpgradeTestSuite,TestTransferTestSuite,TestAuthzTransferTestSuite,TestTransferTestSuiteSendReceive,TestTransferTestSuiteSendEnabled,TestTransferLocalhostTestSuite,TestConnectionTestSuite,TestInterchainAccountsGovTestSuite,TestIncentivizedTransferTestSuite,TestTransferForwardingTestSuite'
      temp-run-full-suite: true