# Copyright 2024 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

# Checks the result status of each job provided by 'jobs-json' and sends an
# alert if at least one job failed.
#
# Usage:
#   ```yml
#   jobs:
#      job_1:
#          ...
#      job_2:
#          ...
#      my_summary:
#        if: always()
#        needs:
#          - job_1
#          - job_2
#        uses: ./.github/workflows/workflow_summary.yml
#        secrets: inherit
#        with:
#          jobs-json: ${{ toJson(needs) }}
#   ```

name: Workflow Summary

on:
  workflow_call:
    inputs:
        ci-deferred:
          type: boolean
          default: false
          description: Whether CI is deferred for an upper stack PR.
        jobs-json:
          type: string
          description: The output of `toJson(needs)`

permissions:
  contents: read

jobs:
  summary:
    runs-on: ubuntu-24.04
    steps:
      - name: Getting failed jobs
        id: failed_jobs
        run: |
          echo '${{ inputs.jobs-json }}'
          FAILED_JOBS="$(echo '${{ inputs.jobs-json }}' \
            | jq --raw-output \
            'map_values(select(.result!="success" and .result!="skipped")) | keys | join(",")' \
          )"
          echo "failed-jobs=${FAILED_JOBS}" >> $GITHUB_OUTPUT
          if [[ "${FAILED_JOBS}" != "" ]]; then
            echo "The following jobs failed: ${FAILED_JOBS}"
            exit 1
          fi
      - name: Require CI before merging
        if: inputs.ci-deferred
        run: |
          message="CI is deferred. This PR must become the lowest unmerged PR in its stack and pass CI before merging."
          echo "::error::${message}"
          echo "${message}" >> "${GITHUB_STEP_SUMMARY}"
          exit 1
      - name: Post to Discord on Failure
        uses: sarisia/actions-status-discord@eb045afee445dc055c18d3d90bd0f244fd062708 # v1.16.0
        if: failure() && github.ref_name == 'main' && github.repository_owner == 'iree-org'
        with:
          webhook: ${{ secrets.DISCORD_WEBHOOK }}
          description: "The following jobs failed: ${{ steps.failed_jobs.outputs.failed-jobs }}"
          url: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}/attempts/${{ github.run_attempt }}"
