init: notify-telegram composite action
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
commit
082fa47815
2 changed files with 127 additions and 0 deletions
48
README.md
Normal file
48
README.md
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
## forgejo-actions
|
||||
|
||||
Composite actions reused across all RMS Tech Studio repos.
|
||||
|
||||
### notify-telegram
|
||||
|
||||
Pings a Telegram chat about a workflow outcome. Skips silently if credentials are missing.
|
||||
|
||||
**Setup once (org-level)** — in Forgejo, go to your org → Settings → Actions → Secrets, add:
|
||||
|
||||
- `TELEGRAM_BOT_TOKEN`
|
||||
- `TELEGRAM_CHAT_ID`
|
||||
|
||||
These propagate to all repos under the org.
|
||||
|
||||
**Usage in a workflow:**
|
||||
|
||||
```yaml
|
||||
- name: Notify Telegram (success)
|
||||
if: success()
|
||||
uses: rmstechstudio/forgejo-actions/notify-telegram@main
|
||||
with:
|
||||
bot-token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
||||
chat-id: ${{ secrets.TELEGRAM_CHAT_ID }}
|
||||
status: success
|
||||
title: "RMS Ecosystem deploy"
|
||||
message: ${{ github.event.head_commit.message }}
|
||||
|
||||
- name: Notify Telegram (failure)
|
||||
if: failure()
|
||||
uses: rmstechstudio/forgejo-actions/notify-telegram@main
|
||||
with:
|
||||
bot-token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
||||
chat-id: ${{ secrets.TELEGRAM_CHAT_ID }}
|
||||
status: failure
|
||||
title: "RMS Ecosystem deploy"
|
||||
```
|
||||
|
||||
**Inputs:**
|
||||
|
||||
| Name | Required | Default | Description |
|
||||
|------|----------|---------|-------------|
|
||||
| `bot-token` | yes | — | Telegram bot token |
|
||||
| `chat-id` | yes | — | Telegram chat id |
|
||||
| `status` | yes | — | `success` or `failure` |
|
||||
| `title` | yes | — | Short label, e.g. "RMS Ecosystem deploy" |
|
||||
| `message` | no | `""` | Extra body (commit msg, error summary…) |
|
||||
| `notify-on-success` | no | `true` | Set `false` for silent crons |
|
||||
79
notify-telegram/action.yml
Normal file
79
notify-telegram/action.yml
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
name: Notify Telegram
|
||||
description: Send a Telegram message about a workflow's outcome. Skips silently if secrets are missing.
|
||||
|
||||
inputs:
|
||||
bot-token:
|
||||
description: Telegram bot token
|
||||
required: true
|
||||
chat-id:
|
||||
description: Telegram chat id
|
||||
required: true
|
||||
status:
|
||||
description: "Workflow status — 'success' or 'failure'"
|
||||
required: true
|
||||
title:
|
||||
description: Short label for the workflow (e.g. "RMS Ecosystem deploy", "TastyTalks build")
|
||||
required: true
|
||||
message:
|
||||
description: Optional extra body line (commit message, error summary, etc)
|
||||
required: false
|
||||
default: ""
|
||||
notify-on-success:
|
||||
description: "Set to 'false' to skip Telegram on success (useful for chatty crons)"
|
||||
required: false
|
||||
default: "true"
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Send Telegram message
|
||||
shell: bash
|
||||
env:
|
||||
BOT_TOKEN: ${{ inputs.bot-token }}
|
||||
CHAT_ID: ${{ inputs.chat-id }}
|
||||
STATUS: ${{ inputs.status }}
|
||||
TITLE: ${{ inputs.title }}
|
||||
BODY: ${{ inputs.message }}
|
||||
NOTIFY_SUCCESS: ${{ inputs.notify-on-success }}
|
||||
COMMIT_SHA: ${{ github.sha }}
|
||||
REPO: ${{ github.repository }}
|
||||
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
run: |
|
||||
if [ -z "$BOT_TOKEN" ] || [ -z "$CHAT_ID" ]; then
|
||||
echo "Telegram credentials missing, skipping."
|
||||
exit 0
|
||||
fi
|
||||
if [ "$STATUS" = "success" ] && [ "$NOTIFY_SUCCESS" != "true" ]; then
|
||||
echo "notify-on-success=false, skipping success ping."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$STATUS" = "success" ]; then
|
||||
icon="OK"
|
||||
else
|
||||
icon="FAIL"
|
||||
fi
|
||||
|
||||
short_sha="${COMMIT_SHA:0:7}"
|
||||
msg="[${icon}] ${TITLE}
|
||||
Repo: ${REPO}@${short_sha}"
|
||||
if [ -n "$BODY" ]; then
|
||||
msg="${msg}
|
||||
${BODY}"
|
||||
fi
|
||||
if [ "$STATUS" != "success" ]; then
|
||||
msg="${msg}
|
||||
Logs: ${RUN_URL}"
|
||||
fi
|
||||
|
||||
# Install curl if missing (alpine images often lack it)
|
||||
if ! command -v curl >/dev/null 2>&1; then
|
||||
if command -v apk >/dev/null 2>&1; then apk add --no-cache curl >/dev/null
|
||||
elif command -v apt-get >/dev/null 2>&1; then apt-get update -qq && apt-get install -y -qq curl >/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
curl -sS -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
|
||||
-d chat_id="${CHAT_ID}" \
|
||||
--data-urlencode text="${msg}" \
|
||||
-d disable_web_page_preview=true > /dev/null
|
||||
Loading…
Add table
Reference in a new issue