-
-
Notifications
You must be signed in to change notification settings - Fork 8
Use custom status embed to signal workflow status to Discord #43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||
---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,56 @@ | ||||||||
name: Status Embed | ||||||||
|
||||||||
on: | ||||||||
workflow_run: | ||||||||
workflows: | ||||||||
- Test & Lint | ||||||||
types: | ||||||||
- completed | ||||||||
|
||||||||
jobs: | ||||||||
status_embed: | ||||||||
if: github.event.workflow_run.conclusion != 'skipped' | ||||||||
name: Send a Status Embed to Discord | ||||||||
runs-on: ubuntu-latest | ||||||||
|
||||||||
steps: | ||||||||
- name: Get Pull Request Information | ||||||||
id: pr_info | ||||||||
if: github.event.workflow_run.event == 'pull_request' | ||||||||
run: | | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This makes the script safer.
Suggested change
Also consider setting The |
||||||||
curl -s -H "Authorization: token $GITHUB_TOKEN" ${{ github.event.workflow_run.artifacts_url }} > artifacts.json | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Likely a good idea to add these.
Suggested change
|
||||||||
DOWNLOAD_URL=$(cat artifacts.json | jq -r '.artifacts[] | select(.name == "pull-request-payload") | .archive_download_url') | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The
Suggested change
|
||||||||
[ -z "$DOWNLOAD_URL" ] && exit 1 | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||||
wget --quiet --header="Authorization: token $GITHUB_TOKEN" -O pull_request_payload.zip $DOWNLOAD_URL || exit 2 | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. A bit strange to use curl the first time and then switch to wget, but it doesn't really matter. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I had some inconsistent results with |
||||||||
unzip -p pull_request_payload.zip > pull_request_payload.json | ||||||||
[ -s pull_request_payload.json ] || exit 3 | ||||||||
echo "::set-output name=pr_author_login::$(jq -r '.user.login // empty' pull_request_payload.json)" | ||||||||
echo "::set-output name=pr_number::$(jq -r '.number // empty' pull_request_payload.json)" | ||||||||
echo "::set-output name=pr_title::$(jq -r '.title // empty' pull_request_payload.json)" | ||||||||
echo "::set-output name=pr_source::$(jq -r '.head.label // empty' pull_request_payload.json)" | ||||||||
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/[email protected] | ||||||||
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 }} | ||||||||
sha: ${{ github.event.workflow_run.head_sha }} | ||||||||
|
||||||||
# Now we can use the information extracted in the previous step: | ||||||||
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 }} |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -13,10 +13,10 @@ jobs: | |||||
steps: | ||||||
- uses: actions/checkout@v2 | ||||||
- uses: EgorDm/gha-yarn-node-cache@v1 | ||||||
|
||||||
- name: Install dependencies | ||||||
run: yarn install | ||||||
|
||||||
- name: Install dependencies | ||||||
run: yarn build | ||||||
|
||||||
|
@@ -26,11 +26,31 @@ jobs: | |||||
steps: | ||||||
- uses: actions/checkout@v2 | ||||||
- uses: EgorDm/gha-yarn-node-cache@v1 | ||||||
|
||||||
- name: Install dependencies | ||||||
run: yarn install | ||||||
|
||||||
- name: Run tests | ||||||
run: yarn test | ||||||
|
||||||
|
||||||
|
||||||
# Prepare the Pull Request Payload artifact. If this fails, we | ||||||
# we fail silently using the `continue-on-error` option. It's | ||||||
# nice if this succeeds, but if it fails for any reason, it | ||||||
# does not mean that our lint-test checks failed. | ||||||
- name: Prepare Pull Request Payload artifact | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
id: prepare-artifact | ||||||
if: always() && github.event_name == 'pull_request' | ||||||
continue-on-error: true | ||||||
run: cat $GITHUB_EVENT_PATH | jq '.pull_request' > pull_request_payload.json | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is probably an absolute path so it can be quoted. If it relies on globs to expand then it shouldn't be quoted. Setting
Suggested change
|
||||||
|
||||||
# This only makes sense if the previous step succeeded. To | ||||||
# get the original outcome of the previous step before the | ||||||
# `continue-on-error` conclusion is applied, we use the | ||||||
# `.outcome` value. This step also fails silently. | ||||||
- name: Upload a Build Artifact | ||||||
if: always() && steps.prepare-artifact.outcome == 'success' | ||||||
continue-on-error: true | ||||||
uses: actions/upload-artifact@v2 | ||||||
with: | ||||||
name: pull-request-payload | ||||||
path: pull_request_payload.json |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is "skipped" what's set if continue on error is triggered? Is this how it tries to prevent itself from running if the artefact upload in the other workflow failed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, if the artifact was not uploaded, it will send an embed for a non-PR workflow. This is just a safeguard as the action currently only supports success/failure/cancelled as workflow conclusions. It's not really important here, but I added it as a safe guard against a future CI redesign suddenly breaking this action unexpectedly.