# Copyright 2022 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

name: Post benchmark comment

on:
  workflow_run:
    # TODO(#17001): switch to just "Benchmark" after finishing refactor and
    #               pending PRs have been rebased
    workflows: ["CI", "Benchmark"]
    types: [completed]

env:
  PR_CI_STAGE: ${{ github.event.workflow_run.event == 'pull_request' && 'presubmit' || 'postsubmit' }}
  PR_CI_RUN_ID: ${{ github.event.workflow_run.id }}
  PR_CI_RUN_ATTEMPT: ${{ github.event.workflow_run.run_attempt }}

jobs:
  post_comment:
    # Only run the workflow if it's triggered from a pull request.
    if: github.event.workflow_run.event == 'pull_request'
    runs-on: ubuntu-20.04
    permissions:
      issues: write
      pull-requests: write
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@v4.1.7
      - name: "Checking benchmark processing job"
        id: check
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          BENCHMARK_PROCESS_JOB: process_benchmark_results
        run: |
          # Assume the workflow has fewer than 100 jobs.
          export CONCLUSION=$(gh api \
            "/repos/${GITHUB_REPOSITORY}/actions/runs/${PR_CI_RUN_ID}/attempts/${PR_CI_RUN_ATTEMPT}/jobs?per_page=100" \
            | jq --raw-output --arg job "${BENCHMARK_PROCESS_JOB}" \
              '.jobs | map(select(.name==$job))[0] | .conclusion')
          echo "job-conclusion=${CONCLUSION}" >> "${GITHUB_OUTPUT}"
      - name: "Downloading artifacts"
        if: steps.check.outputs.job-conclusion == 'success'
        id: download
        env:
          # Currently GitHub managed runner doesn't have GCP credential. Fetch
          # from public URL directly.
          PR_CI_GCS_URL: https://storage.googleapis.com/iree-github-actions-${{ env.PR_CI_STAGE }}-artifacts/${{ env.PR_CI_RUN_ID }}/${{ env.PR_CI_RUN_ATTEMPT }}
          BENCHMARK_COMMENT_ARTIFACT: benchmark-comment.json
        run: |
          wget -O "${BENCHMARK_COMMENT_ARTIFACT}" \
            "${PR_CI_GCS_URL}/${BENCHMARK_COMMENT_ARTIFACT}"
          echo "benchmark-comment-artifact=${BENCHMARK_COMMENT_ARTIFACT}" >> "${GITHUB_OUTPUT}"
      - name: Posting comments
        if: steps.check.outputs.job-conclusion == 'success'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GIST_BOT_TOKEN: ${{ secrets.GIST_BOT_TOKEN }}
          COMMENT_BOT_USER: github-actions[bot]
          # Get PR number from the event instead of the untrusted comment
          # artifact, to make sure we won't incorrectly update other PRs.
          BENCHMARK_COMMENT_ARTIFACT: ${{ steps.download.outputs.benchmark-comment-artifact }}
        run: |
          ./build_tools/benchmarks/post_benchmark_comment.py \
            --verbose \
            --github_event_json="${GITHUB_EVENT_PATH}" \
            "${BENCHMARK_COMMENT_ARTIFACT}"
