feat(woodpecker): add Discord notifications for build status
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

- Implemented success and failure notifications using `jq` for secure payload formatting.
- Enhanced YAML to manage build alerts and improve CI visibility.
This commit is contained in:
2026-01-07 16:32:00 +01:00
parent b283816713
commit 78f5da9cff

View File

@ -5,6 +5,7 @@ steps:
DISCORD_WEBHOOK: DISCORD_WEBHOOK:
from_secret: discord_webhook from_secret: discord_webhook
commands: commands:
- apt-get update && apt-get install -y jq
- npm install --package-lock-only - npm install --package-lock-only
- npm audit --audit-level=moderate || AUDIT_EXIT=$? - npm audit --audit-level=moderate || AUDIT_EXIT=$?
- | - |
@ -17,38 +18,36 @@ steps:
echo "==========================================" echo "=========================================="
echo "" echo ""
# Discord Benachrichtigung senden # Discord Benachrichtigung mit jq (sicher gegen Sonderzeichen)
if [ ! -z "$DISCORD_WEBHOOK" ]; then if [ ! -z "$DISCORD_WEBHOOK" ]; then
curl -H "Content-Type: application/json" \ PAYLOAD=$(printf '%s' "${CI_COMMIT_MESSAGE:-No commit message}" | jq -Rs \
-d "{ --arg title "⚠️ npm audit Warnung - Build #${CI_BUILD_NUMBER}" \
\"embeds\": [{ --arg repo "${CI_REPO}" \
\"title\": \"⚠️ npm audit Warnung\", --arg branch "${CI_COMMIT_BRANCH}" \
\"description\": \"Es wurden Sicherheitslücken in den Dependencies gefunden!\", --arg commit "${CI_COMMIT_SHA:0:7}" \
\"color\": 16744448, --arg author "${CI_COMMIT_AUTHOR}" \
\"fields\": [ --arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
{ '. as $message | {
\"name\": \"Repository\", embeds: [{
\"value\": \"Gallus_Pub\", title: $title,
\"inline\": true description: "Es wurden Sicherheitslücken in den Dependencies gefunden!",
}, color: 16744448,
{ fields: [
\"name\": \"Branch\", { name: "Repository", value: $repo, inline: true },
\"value\": \"${CI_COMMIT_BRANCH}\", { name: "Branch", value: $branch, inline: true },
\"inline\": true { name: "Commit", value: ("`" + $commit + "`"), inline: true },
}, { name: "Author", value: $author, inline: true },
{ { name: "Commit Message", value: $message, inline: false }
\"name\": \"Commit\",
\"value\": \"${CI_COMMIT_SHA:0:7}\",
\"inline\": true
}
], ],
\"footer\": { footer: {
\"text\": \"Build läuft trotzdem durch\" text: "Build läuft trotzdem durch"
}, },
\"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%S.000Z)\" timestamp: $timestamp
}] }]
}" \ }')
"$DISCORD_WEBHOOK"
curl -H "Content-Type: application/json" -X POST \
-d "$PAYLOAD" "$DISCORD_WEBHOOK"
fi fi
else else
echo "✓ No vulnerabilities found" echo "✓ No vulnerabilities found"
@ -63,10 +62,93 @@ steps:
environment: environment:
FLY_API_TOKEN: FLY_API_TOKEN:
from_secret: FLY_API_TOKEN from_secret: FLY_API_TOKEN
DISCORD_WEBHOOK:
from_secret: discord_webhook
commands: commands:
- apt-get update && apt-get install -y jq
- curl -L https://fly.io/install.sh | sh - curl -L https://fly.io/install.sh | sh
- export PATH="$HOME/.fly/bin:$PATH" - export PATH="$HOME/.fly/bin:$PATH"
- flyctl deploy --config fly.toml --app gallus-pub --remote-only - flyctl deploy --config fly.toml --app gallus-pub --remote-only
when: when:
branch: main branch: main
event: push event: push
notify_success:
image: node:20
environment:
DISCORD_WEBHOOK:
from_secret: discord_webhook
commands:
- apt-get update && apt-get install -y jq
- |
if [ ! -z "$DISCORD_WEBHOOK" ]; then
PAYLOAD=$(printf '%s' "${CI_COMMIT_MESSAGE:-No commit message}" | jq -Rs \
--arg title "✅ Build #${CI_BUILD_NUMBER} - Success" \
--arg repo "${CI_REPO}" \
--arg branch "${CI_COMMIT_BRANCH}" \
--arg commit "${CI_COMMIT_SHA:0:7}" \
--arg author "${CI_COMMIT_AUTHOR}" \
--arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
'. as $message | {
embeds: [{
title: $title,
description: "Build und Deployment erfolgreich abgeschlossen!",
color: 3066993,
fields: [
{ name: "Repository", value: $repo, inline: true },
{ name: "Branch", value: $branch, inline: true },
{ name: "Commit", value: ("`" + $commit + "`"), inline: true },
{ name: "Author", value: $author, inline: true },
{ name: "Commit Message", value: $message, inline: false }
],
timestamp: $timestamp
}]
}')
curl -H "Content-Type: application/json" -X POST \
-d "$PAYLOAD" "$DISCORD_WEBHOOK"
fi
when:
branch: main
event: push
status: success
notify_failure:
image: node:20
environment:
DISCORD_WEBHOOK:
from_secret: discord_webhook
commands:
- apt-get update && apt-get install -y jq
- |
if [ ! -z "$DISCORD_WEBHOOK" ]; then
PAYLOAD=$(printf '%s' "${CI_COMMIT_MESSAGE:-No commit message}" | jq -Rs \
--arg title "❌ Build #${CI_BUILD_NUMBER} - Failure" \
--arg repo "${CI_REPO}" \
--arg branch "${CI_COMMIT_BRANCH}" \
--arg commit "${CI_COMMIT_SHA:0:7}" \
--arg author "${CI_COMMIT_AUTHOR}" \
--arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
'. as $message | {
embeds: [{
title: $title,
description: "Build oder Deployment ist fehlgeschlagen!",
color: 15158332,
fields: [
{ name: "Repository", value: $repo, inline: true },
{ name: "Branch", value: $branch, inline: true },
{ name: "Commit", value: ("`" + $commit + "`"), inline: true },
{ name: "Author", value: $author, inline: true },
{ name: "Commit Message", value: $message, inline: false }
],
timestamp: $timestamp
}]
}')
curl -H "Content-Type: application/json" -X POST \
-d "$PAYLOAD" "$DISCORD_WEBHOOK"
fi
when:
branch: main
event: push
status: failure