name: Status Embed on: workflow_run: workflows: - CI types: - completed jobs: status_embed: # We need to send a status embed whenever the workflow # sequence we're running terminates. There are a number # of situations in which that happens: # # 1. We reach the end of the Deploy workflow, without # it being skipped. # # 2. A `pull_request` triggered a Lint & Test workflow, # as the sequence always terminates with one run. # # 3. If any workflow ends in failure or was cancelled. if: >- (github.event.workflow_run.name == 'Deploy' && github.event.workflow_run.conclusion != 'skipped') || github.event.workflow_run.event == 'pull_request' || github.event.workflow_run.conclusion == 'failure' || github.event.workflow_run.conclusion == 'cancelled' name: Send Status Embed to Discord runs-on: ubuntu-latest steps: # A workflow_run event does not contain all the information # we need for a PR embed. That's why we upload an artifact # with that information in the Lint workflow. - name: Get Pull Request Information id: pr_info if: github.event.workflow_run.event == 'pull_request' run: | curl -s -H "Authorization: token $GITHUB_TOKEN" ${{ github.event.workflow_run.artifacts_url }} > artifacts.json DOWNLOAD_URL=$(cat artifacts.json | jq -r '.artifacts[] | select(.name == "pull-request-payload") | .archive_download_url') [ -z "$DOWNLOAD_URL" ] && exit 1 wget --quiet --header="Authorization: token $GITHUB_TOKEN" -O pull_request_payload.zip $DOWNLOAD_URL || exit 2 unzip -p pull_request_payload.zip > pull_request_payload.json [ -s pull_request_payload.json ] || exit 3 echo "pr_author_login=$(jq -r '.user.login // empty' pull_request_payload.json)" >> $GITHUB_OUTPUT echo "pr_number=$(jq -r '.number // empty' pull_request_payload.json)" >> $GITHUB_OUTPUT echo "pr_title=$(jq -r '.title // empty' pull_request_payload.json)" >> $GITHUB_OUTPUT echo "pr_source=$(jq -r '.head.label // empty' pull_request_payload.json)" >> $GITHUB_OUTPUT env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Send an informational status embed to Discord instead of the # standard embeds that Discord sends. This embed will contain # more information and we can fine tune when we actually want # to send an embed. - name: GitHub Actions Status Embed for Discord uses: SebastiaanZ/github-status-embed-for-discord@v0.3.0 with: # Our GitHub Actions webhook webhook_id: '784184528997842985' webhook_token: ${{ secrets.GHA_WEBHOOK_TOKEN }} # Workflow information workflow_name: ${{ github.event.workflow_run.name }} run_id: ${{ github.event.workflow_run.id }} run_number: ${{ github.event.workflow_run.run_number }} status: ${{ github.event.workflow_run.conclusion }} actor: ${{ github.actor }} repository: ${{ github.repository }} ref: ${{ github.ref }} sha: ${{ github.event.workflow_run.head_sha }} pr_author_login: ${{ steps.pr_info.outputs.pr_author_login }} pr_number: ${{ steps.pr_info.outputs.pr_number }} pr_title: ${{ steps.pr_info.outputs.pr_title }} pr_source: ${{ steps.pr_info.outputs.pr_source }}