Coverage: Slack Notification #34
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: 'Coverage: Slack Notification' | |
| on: | |
| workflow_run: | |
| workflows: ['CI: Tests Unit'] | |
| branches: [main] | |
| types: | |
| - completed | |
| permissions: | |
| contents: read | |
| actions: read | |
| pull-requests: read | |
| jobs: | |
| notify: | |
| if: > | |
| github.repository == 'Comfy-Org/ComfyUI_frontend' && | |
| github.event.workflow_run.conclusion == 'success' && | |
| github.event.workflow_run.event == 'push' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Setup frontend | |
| uses: ./.github/actions/setup-frontend | |
| - name: Download current unit coverage | |
| uses: dawidd6/action-download-artifact@0bd50d53a6d7fb5cb921e607957e9cc12b4ce392 # v12 | |
| with: | |
| run_id: ${{ github.event.workflow_run.id }} | |
| name: unit-coverage | |
| path: coverage | |
| - name: Download previous unit coverage baseline | |
| continue-on-error: true | |
| uses: dawidd6/action-download-artifact@0bd50d53a6d7fb5cb921e607957e9cc12b4ce392 # v12 | |
| with: | |
| branch: main | |
| workflow: coverage-slack-notify.yaml | |
| name: unit-coverage-baseline | |
| path: temp/coverage-baseline | |
| if_no_artifact_found: warn | |
| - name: Download latest E2E coverage | |
| continue-on-error: true | |
| uses: dawidd6/action-download-artifact@0bd50d53a6d7fb5cb921e607957e9cc12b4ce392 # v12 | |
| with: | |
| branch: main | |
| workflow: ci-tests-e2e-coverage.yaml | |
| name: e2e-coverage | |
| path: temp/e2e-coverage | |
| if_no_artifact_found: warn | |
| - name: Download previous E2E coverage baseline | |
| continue-on-error: true | |
| uses: dawidd6/action-download-artifact@0bd50d53a6d7fb5cb921e607957e9cc12b4ce392 # v12 | |
| with: | |
| branch: main | |
| workflow: coverage-slack-notify.yaml | |
| name: e2e-coverage-baseline | |
| path: temp/e2e-coverage-baseline | |
| if_no_artifact_found: warn | |
| - name: Resolve merged PR metadata | |
| id: pr-meta | |
| uses: actions/github-script@v9 | |
| with: | |
| script: | | |
| const sha = context.payload.workflow_run.head_sha; | |
| const { data: commit } = await github.rest.repos.getCommit({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| ref: sha, | |
| }); | |
| const message = commit.commit.message ?? ''; | |
| const firstLine = message.split('\n')[0]; | |
| const match = firstLine.match(/\(#(\d+)\)\s*$/); | |
| if (!match) { | |
| core.setOutput('skip', 'true'); | |
| core.info('No PR number found in commit message — skipping.'); | |
| return; | |
| } | |
| const prNumber = match[1]; | |
| const { data: pr } = await github.rest.pulls.get({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| pull_number: Number(prNumber), | |
| }); | |
| core.setOutput('skip', 'false'); | |
| core.setOutput('number', prNumber); | |
| core.setOutput('url', pr.html_url); | |
| core.setOutput('author', pr.user.login); | |
| - name: Generate Slack notification | |
| if: steps.pr-meta.outputs.skip != 'true' | |
| id: slack-payload | |
| env: | |
| PR_URL: ${{ steps.pr-meta.outputs.url }} | |
| PR_NUMBER: ${{ steps.pr-meta.outputs.number }} | |
| PR_AUTHOR: ${{ steps.pr-meta.outputs.author }} | |
| run: | | |
| PAYLOAD=$(pnpm exec tsx scripts/coverage-slack-notify.ts \ | |
| --pr-url="$PR_URL" \ | |
| --pr-number="$PR_NUMBER" \ | |
| --author="$PR_AUTHOR") | |
| if [ -n "$PAYLOAD" ]; then | |
| echo "has_payload=true" >> "$GITHUB_OUTPUT" | |
| DELIM="SLACK_PAYLOAD_$(date +%s)" | |
| echo "payload<<$DELIM" >> "$GITHUB_OUTPUT" | |
| printf '%s\n' "$PAYLOAD" >> "$GITHUB_OUTPUT" | |
| echo "$DELIM" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "has_payload=false" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Post to Slack | |
| if: steps.slack-payload.outputs.has_payload == 'true' | |
| continue-on-error: true | |
| env: | |
| SLACK_PAYLOAD: ${{ steps.slack-payload.outputs.payload }} | |
| SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} | |
| run: | | |
| # Channel: #p-deprecated-frontend-automated-testing | |
| BODY=$(echo "$SLACK_PAYLOAD" | jq --arg ch "C0AP09LKRDZ" '. + {channel: $ch}') | |
| curl -sf -X POST \ | |
| -H "Authorization: Bearer $SLACK_BOT_TOKEN" \ | |
| -H "Content-Type: application/json" \ | |
| -d "$BODY" \ | |
| -o /dev/null \ | |
| https://slack.com/api/chat.postMessage | |
| - name: Save unit coverage baseline | |
| if: always() && hashFiles('coverage/lcov.info') != '' | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: unit-coverage-baseline | |
| path: coverage/lcov.info | |
| retention-days: 90 | |
| if-no-files-found: warn | |
| - name: Save E2E coverage baseline | |
| if: always() && hashFiles('temp/e2e-coverage/coverage.lcov') != '' | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: e2e-coverage-baseline | |
| path: temp/e2e-coverage/coverage.lcov | |
| retention-days: 90 | |
| if-no-files-found: warn |