name: Automation Benchmark Test
on:
  workflow_dispatch:
    inputs:
      testType:
        description: Type of test to run (benchmark, soak)
        required: true
        default: benchmark
        type: string
      base64Config:
        description: base64-ed config
        required: true
        type: string
      slackMemberID:
        description: Notifies test results (Not your @)
        required: true
        default: U02Q14G80TY
        type: string
jobs:
  automation_benchmark:
    environment: integration
    permissions:
      checks: write
      pull-requests: write
      id-token: write
      contents: read
    name: Automation Benchmark Test
    runs-on: ubuntu22.04-16cores-64GB
    env:
      SLACK_API_KEY: ${{ secrets.QA_SLACK_API_KEY }}
      SLACK_CHANNEL: C03KJ5S7KEK
      CHAINLINK_ENV_USER: ${{ github.actor }}
      REF_NAME: ${{ github.head_ref || github.ref_name }}
    steps:
      - name: Checkout the repo
        uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
        with:
          ref: ${{ env.REF_NAME }}
      - name: Get Slack config and mask base64 config
        run: |
          SLACK_USER=$(jq -r '.inputs.slackMemberID' $GITHUB_EVENT_PATH)
          echo ::add-mask::$SLACK_USER
          echo SLACK_USER=$SLACK_USER >> $GITHUB_ENV

          BASE64_CONFIG_OVERRIDE=$(jq -r '.inputs.base64Config' $GITHUB_EVENT_PATH)
          echo ::add-mask::$BASE64_CONFIG_OVERRIDE
          echo "BASE64_CONFIG_OVERRIDE=$BASE64_CONFIG_OVERRIDE" >> $GITHUB_ENV
      - name: Parse base64 config
        uses: ./.github/actions/setup-parse-base64-config
        with:
          base64Config: ${{ env.BASE64_CONFIG_OVERRIDE }}
      - name: Send details to Step Summary
        shell: bash
        run: |
          echo "### chainlink image used for this test run :link:" >>$GITHUB_STEP_SUMMARY
          echo "\`${{ env.CHAINLINK_IMAGE }}\`" >>$GITHUB_STEP_SUMMARY
          echo "### chainlink-tests image tag for this test run :ship:" >>$GITHUB_STEP_SUMMARY
          echo "\`${GITHUB_SHA}\`" >>$GITHUB_STEP_SUMMARY
          echo "### Networks on which test was run" >>$GITHUB_STEP_SUMMARY
          echo "\`${{ env.NETWORKS }}\`" >>$GITHUB_STEP_SUMMARY
      - name: Build Test Image
        uses: ./.github/actions/build-test-image
        with:
          QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
          QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }}
          QA_AWS_ACCOUNT_NUMBER: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}
          suites: benchmark chaos reorg load
      - name: Run Tests
        uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@2967f2287bd3f3ddbac7b476e9568993df01796e # v2.3.27
        env:
          DETACH_RUNNER: true
          TEST_SUITE: benchmark
          TEST_ARGS: -test.timeout 720h
          ENV_JOB_IMAGE: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com/chainlink-tests:${{ github.sha }}
          INTERNAL_DOCKER_REPO: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com
          TEST_TYPE: ${{ github.event.inputs.testType }}
          TEST_TEST_TYPE: ${{ github.event.inputs.testType }}
          RR_MEM: 4Gi
          TEST_LOG_LEVEL: info
        with:
          test_command_to_run: cd integration-tests && go test -timeout 30m -v -run ^TestAutomationBenchmark$ ./benchmark -count=1
          test_download_vendor_packages_command: make gomod
          cl_repo: ${{ env.CHAINLINK_IMAGE }}
          cl_image_tag: ${{ env.CHAINLINK_VERSION }}
          token: ${{ secrets.GITHUB_TOKEN }}
          should_cleanup: false
          go_mod_path: ./integration-tests/go.mod
          QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }}
          QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
          QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
      - name: Collect Metrics
        if: always()
        id: collect-gha-metrics
        uses: smartcontractkit/push-gha-metrics-action@d9da21a2747016b3e13de58c7d4115a3d5c97935 # v3.0.1
        with:
          id: automation-benchmark-build-test-image
          org-id: ${{ secrets.GRAFANA_INTERNAL_TENANT_ID }}
          basic-auth: ${{ secrets.GRAFANA_INTERNAL_BASIC_AUTH }}
          hostname: ${{ secrets.GRAFANA_INTERNAL_HOST }}
          this-job-name: Automation Benchmark Test
        continue-on-error: true
