1
0
Fork 0

ci: improve status push to discord
Some checks failed
/ pre-run-notify (push) Successful in 55s
/ post-run-notify (push) Waiting to run
/ sast (push) Has been cancelled

This commit is contained in:
Marc 2024-07-19 22:03:01 -04:00
parent 626987ba67
commit dc331125a4
Signed by: marc
GPG key ID: 048E042F22B5DC79
4 changed files with 71 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,18 @@ 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/cache/save@v3
with:
path: ./discord-context
key: "${{ github.repository }}-${{github.run-number}}-discord-context"
sast:
runs-on: ubuntu-latest
steps:
@ -22,3 +28,19 @@ jobs:
run: pipx run black . --check
- name: Check import ordering
run: pipx run isort **/*.py --check
post-run-notify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/cache/restore@v3
with:
key: "${{ github.repository }}-${{github.run-number}}-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 }}