name: E2E Test

on:
  workflow_dispatch:
    inputs:
      runs_on:
        description: 'Platform to run publish-immutable-action on'
        default: 'ubuntu-latest'
        type: choice
        options:
          - ubuntu-latest
          - macos-latest
          - windows-latest

permissions: {}

jobs:
  e2e-test:
    name: E2E Integration Test
    runs-on: ubuntu-latest

    steps:
      - name: Send message to consumer to publish
        id: send-message
        run: |
          echo "SHA: ${{ github.sha }}"
          curl -s -L \
            -X POST \
            -H "Accept: application/vnd.github+json" \
            -H "Authorization: Bearer ${{ secrets.PAT }}" \
            -H "X-GitHub-Api-Version: 2022-11-28" \
            https://api.github.com/repos/immutable-actions/test-publish-internal-ts-action/dispatches \
            -d '{"event_type":"e2e-test","client_payload":{"unit":false,"integration":true,"sha":"${{ github.sha }}","runs_on":"${{ inputs.runs_on }}"}}'
      - name: Wait for successful publish
        id: wait-for-successful-publish
        run: |
          START_TIME="$SECONDS"
          TIMESTAMP="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
          while (( SECONDS - START_TIME < 90 )); do
            echo "Polling for workflow created after $TIMESTAMP"
            RESULT=$(curl -s -L -H "Accept: application/vnd.github+json" \
                -H "Authorization: Bearer ${{ secrets.PAT }}" \
                -H "X-GitHub-Api-Version: 2022-11-28" \
                "https://api.github.com/repos/immutable-actions/test-publish-internal-ts-action/actions/runs?created=>$TIMESTAMP" \
                | jq '.workflow_runs[] | select(.name=="Publish Actions Package" and (.display_title | contains("${{ github.sha }}"))) | .status, .conclusion')

            # split the RESULT into an array
            mapfile -t RESULT <<< "$RESULT"
            STATUS=$(echo "${RESULT[0]}" | sed -e 's/^"//' -e 's/"$//')
            CONCLUSION=$(echo "${RESULT[1]}" | sed -e 's/^"//' -e 's/"$//')
            if [ -z "$STATUS" ]; then
              echo "No workflow found yet"
            else
              echo "Workflow status: $STATUS"
              echo "Workflow conclusion: $CONCLUSION"
              if [ "$STATUS" = "completed" ]; then
                if [ "$CONCLUSION" = "success" ]; then
                  echo "workflow succeeded"
                  exit 0
                elif [ "$CONCLUSION" = "failure" ]; then
                  echo "workflow failed"
                  exit 1
                fi
              fi
            fi

            sleep 1
          done
          exit 2
