Feat: Composite Action fuer Ntfy Build-Benachrichtigungen
Initialer Import. Unterstuetzt start/success/failure mit passenden Tags, Prioritaeten und optionalem Click-URL. Nutzt wget (im Runner- Image vorhanden) und defaulted auf den zentralen Topic vk-builds.
This commit is contained in:
parent
4d8c46fae3
commit
cdc16f3940
2 changed files with 163 additions and 1 deletions
67
README.md
67
README.md
|
|
@ -1,3 +1,68 @@
|
||||||
# ntfy-action
|
# ntfy-action
|
||||||
|
|
||||||
Zentrale Composite Action für Ntfy-Benachrichtigungen in Forgejo-Workflows
|
Zentrale Forgejo Composite Action für Build-Benachrichtigungen via [Ntfy](https://notify.data-it-solution.de).
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
- Secret `NTFY_AUTH` im Repo (oder auf Org-Ebene) gesetzt. Wert: `Basic <base64(user:pass)>`.
|
||||||
|
- Ntfy-Server läuft unter `https://notify.data-it-solution.de`, Topic-ACL ist im Ntfy-Container eingerichtet (siehe KB-Eintrag #188).
|
||||||
|
|
||||||
|
## Verwendung
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: docker
|
||||||
|
steps:
|
||||||
|
- uses: data/ntfy-action@main
|
||||||
|
with:
|
||||||
|
status: start
|
||||||
|
project: meinprojekt
|
||||||
|
ntfy_auth: ${{ secrets.NTFY_AUTH }}
|
||||||
|
run_number: ${{ github.run_number }}
|
||||||
|
message: ${{ github.event.head_commit.message }}
|
||||||
|
|
||||||
|
# ... hier dein Build ...
|
||||||
|
|
||||||
|
- uses: data/ntfy-action@main
|
||||||
|
if: success()
|
||||||
|
with:
|
||||||
|
status: success
|
||||||
|
project: meinprojekt
|
||||||
|
ntfy_auth: ${{ secrets.NTFY_AUTH }}
|
||||||
|
run_number: ${{ github.run_number }}
|
||||||
|
|
||||||
|
- uses: data/ntfy-action@main
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
status: failure
|
||||||
|
project: meinprojekt
|
||||||
|
ntfy_auth: ${{ secrets.NTFY_AUTH }}
|
||||||
|
run_number: ${{ github.run_number }}
|
||||||
|
click_url: https://git.data-it-solution.de/${{ github.repository }}/actions
|
||||||
|
```
|
||||||
|
|
||||||
|
## Inputs
|
||||||
|
|
||||||
|
| Name | Pflicht | Default | Beschreibung |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `status` | ja | — | `start`, `success` oder `failure` |
|
||||||
|
| `project` | ja | — | Projektname für Titel und Tag |
|
||||||
|
| `ntfy_auth` | ja | — | Basic-Auth-Header-Wert aus Secret |
|
||||||
|
| `topic` | nein | `vk-builds` | Ntfy-Topic |
|
||||||
|
| `message` | nein | `#<run>` | Freie Nachricht (z. B. Commit-Message) |
|
||||||
|
| `run_number` | nein | — | Workflow-Run-Nummer |
|
||||||
|
| `click_url` | nein | — | URL beim Klick auf die Notification |
|
||||||
|
| `ntfy_server` | nein | `https://notify.data-it-solution.de` | Server-URL |
|
||||||
|
|
||||||
|
## Topic-Konvention
|
||||||
|
|
||||||
|
Per Default wird `vk-builds` als Sammel-Topic verwendet, damit du alle Build-Benachrichtigungen in einem einzigen Abo im Browser/Handy bekommst. Für projekt-spezifische Kanäle einfach `topic:` überschreiben.
|
||||||
|
|
||||||
|
## Status-Mapping
|
||||||
|
|
||||||
|
| Status | Priority | Tags | Titel |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `start` | default | 🔧 hammer_and_wrench | `<project> Build gestartet` |
|
||||||
|
| `success` | high | ✅ white_check_mark | `<project> Build erfolgreich` |
|
||||||
|
| `failure` | urgent | ❌ rotating_light | `<project> Build FEHLGESCHLAGEN` |
|
||||||
|
|
|
||||||
97
action.yml
Normal file
97
action.yml
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
name: "Ntfy Notify"
|
||||||
|
description: "Sendet Build-Status-Benachrichtigungen an den internen Ntfy-Server (notify.data-it-solution.de)"
|
||||||
|
author: "data-it-solution"
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
status:
|
||||||
|
description: "Build-Status: start, success, failure"
|
||||||
|
required: true
|
||||||
|
project:
|
||||||
|
description: "Projekt-Name (erscheint im Titel)"
|
||||||
|
required: true
|
||||||
|
topic:
|
||||||
|
description: "Ntfy-Topic (Default: vk-builds fuer alles)"
|
||||||
|
required: false
|
||||||
|
default: "vk-builds"
|
||||||
|
message:
|
||||||
|
description: "Frei waehlbarer Nachrichtentext (Default: Commit-Message)"
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
ntfy_auth:
|
||||||
|
description: "Basic-Auth-Header-Wert (aus Secret NTFY_AUTH)"
|
||||||
|
required: true
|
||||||
|
ntfy_server:
|
||||||
|
description: "Ntfy-Server-URL (Default: https://notify.data-it-solution.de)"
|
||||||
|
required: false
|
||||||
|
default: "https://notify.data-it-solution.de"
|
||||||
|
run_number:
|
||||||
|
description: "Workflow-Run-Nummer (fuer den Titel)"
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
click_url:
|
||||||
|
description: "URL, die beim Klick auf die Benachrichtigung geoeffnet wird"
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Send Ntfy Notification
|
||||||
|
shell: sh
|
||||||
|
env:
|
||||||
|
NTFY_AUTH: ${{ inputs.ntfy_auth }}
|
||||||
|
NTFY_SERVER: ${{ inputs.ntfy_server }}
|
||||||
|
NTFY_TOPIC: ${{ inputs.topic }}
|
||||||
|
STATUS: ${{ inputs.status }}
|
||||||
|
PROJECT: ${{ inputs.project }}
|
||||||
|
MSG: ${{ inputs.message }}
|
||||||
|
RUN: ${{ inputs.run_number }}
|
||||||
|
CLICK: ${{ inputs.click_url }}
|
||||||
|
run: |
|
||||||
|
# Status -> Title, Priority, Tags
|
||||||
|
case "$STATUS" in
|
||||||
|
start)
|
||||||
|
TITLE="$PROJECT Build gestartet"
|
||||||
|
PRIO="default"
|
||||||
|
TAGS="hammer_and_wrench,$PROJECT"
|
||||||
|
;;
|
||||||
|
success)
|
||||||
|
TITLE="$PROJECT Build erfolgreich"
|
||||||
|
PRIO="high"
|
||||||
|
TAGS="white_check_mark,$PROJECT"
|
||||||
|
;;
|
||||||
|
failure)
|
||||||
|
TITLE="$PROJECT Build FEHLGESCHLAGEN"
|
||||||
|
PRIO="urgent"
|
||||||
|
TAGS="x,rotating_light,$PROJECT"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
TITLE="$PROJECT ($STATUS)"
|
||||||
|
PRIO="default"
|
||||||
|
TAGS="information_source,$PROJECT"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Default-Message = "#<run>: <commit-message>" falls leer
|
||||||
|
if [ -z "$MSG" ]; then
|
||||||
|
MSG="#$RUN"
|
||||||
|
elif [ -n "$RUN" ]; then
|
||||||
|
MSG="#$RUN: $MSG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Header zusammenbauen (Click-URL optional)
|
||||||
|
HDR_CLICK=""
|
||||||
|
if [ -n "$CLICK" ]; then
|
||||||
|
HDR_CLICK="--header=Click: $CLICK"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# wget, weil in den meisten Runner-Images vorinstalliert.
|
||||||
|
# `|| true` damit ein Ntfy-Ausfall den Build nicht rot macht.
|
||||||
|
wget -q -O- \
|
||||||
|
--header="Authorization: $NTFY_AUTH" \
|
||||||
|
--header="Title: $TITLE" \
|
||||||
|
--header="Priority: $PRIO" \
|
||||||
|
--header="Tags: $TAGS" \
|
||||||
|
$HDR_CLICK \
|
||||||
|
--post-data="$MSG" \
|
||||||
|
"$NTFY_SERVER/$NTFY_TOPIC" || true
|
||||||
Loading…
Reference in a new issue