1
0
Fork 0

ci: improve status push to discord
Some checks failed
/ sast (push) Failing after 51s
/ pre-run-notify (push) Failing after 53s
/ post-run-notify (push) Has been cancelled

This commit is contained in:
Marc 2024-07-19 22:03:01 -04:00
parent 626987ba67
commit d463b9e89c
Signed by: marc
GPG key ID: 048E042F22B5DC79
4 changed files with 73 additions and 8 deletions

View file

@ -8,13 +8,15 @@ inputs:
status:
description: "Status to report."
required: true
message-id:
description: "Message ID to edit."
outputs:
message-id:
description: "ID of the message that was posted, for editing purposes in further calls."
value: ""
value: ${{ steps.post-message.outputs.message-id }}
run:
runs:
using: "composite"
steps:
- name: Setup Python
@ -22,5 +24,7 @@ run:
with:
python-version: 3.12
- name: Install dependencies
run: pip install .
- run: python ./main.py ${{ inputs.webhook_url }} ${{ inputs.project_name }} ${{inputs.status }}
run: pip install -r ./.forgejo/actions/push-status-to-discord/requirements.txt
- id: post-message
run: |
echo "message-id=$(python ./.forgejo/actions/push-status-to-discord/main.py ${{ inputs.webhook-url }} ${{ inputs.project-name }} ${{ inputs.status }} ${{ inputs.message-id }})" >> $GITHUB_OUTPUT

View file

@ -1,8 +1,44 @@
import httpx
import typing
import sys
COLORS = {
"failure": 0xCB2431,
"success": 0x28A745,
}
class EmbedField(typing.TypedDict):
name: str
value: str
inline: bool
class Embed(typing.TypedDict):
color: str
title: str
fields: list[EmbedField]
if __name__ == "__main__":
webhook_url, project_name, status = sys.argv[1:]
response = httpx.post(webhook_url, json={"content": f"{project_name} - {status}"})
print(response.json())
webhook_url, project_name, status = sys.argv[1:4]
message_id = None
if len(sys.argv) > 4:
message_id = sys.argv[4]
embed_data = Embed(
color=COLORS["success"],
title=f"{project_name}: build #",
fields=[EmbedField(name="Status", value=status, inline=True)],
)
if message_id:
response = httpx.patch(
f"{webhook_url}/messages/{message_id}?wait=true",
json={"embeds": [embed_data]},
)
else:
response = httpx.post(f"{webhook_url}?wait=true", json={"embeds": [embed_data]})
print(response.json()["id"])

View file

@ -0,0 +1 @@
httpx==0.27

View file

@ -5,12 +5,19 @@ jobs:
pre-run-notify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.forgejo/actions/push-status-to-discord
id: post-status
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
project-name: ${{ github.repository }}
status: "Started"
- run: echo ${{ steps.post-status.outputs.message-id }} >> discord-context
- uses: actions/upload-artifact@v3
with:
path: ./discord-context
name: "${{ github.head_ref }}-${{ github-run_number }}-discord-context"
retention-days: 1
sast:
runs-on: ubuntu-latest
steps:
@ -22,3 +29,20 @@ jobs:
run: pipx run black . --check
- name: Check import ordering
run: pipx run isort **/*.py --check
post-run-notify:
runs-on: ubuntu-latest
if: always()
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v3
with:
name: "${{ github.head_ref }}-${{github.run_number}}-discord-context"
path: discord-context
- id: set-context
run: echo "message-id=$(cat ./discord-context)" >> $GITHUB_OUTPUT
- uses: ./.forgejo/actions/push-status-to-discord
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
project-name: ${{ github.repository }}
status: "Success"
message-id: ${{ steps.set-context.outputs.message-id }}