# 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:
    workflows: ["CI"]
    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@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - 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}"
