之前 ci/release 各自 inline 拼 payload + curl, 重复 25 行 x 2.
device_key / endpoint / group / ttl 硬编码两次, 改一处忘另一处
会出现两个不同 group 的推送.
新建 .github/scripts/bark-notify.sh:
bash .github/scripts/bark-notify.sh "<title>" "<body>"
脚本封装:
- endpoint / device_key / group (Gitea) / isArchive / ttl 单一来源
- heredoc 拼 JSON, 不依赖 jq
- 错误用法打印 usage 并 exit 1 (set -euo pipefail)
workflow 两处都改成一行:
bash .github/scripts/bark-notify.sh "CI \${REF_NAME} \${STATUS}" "\${BODY}"
bash .github/scripts/bark-notify.sh "\${TAG_NAME} \${STATUS}" "\${BODY}"
emoji (✅/❌) 跟 status 映射仍在 workflow 里, 因为不同 job 拼
不同的 title prefix (CI vs release), 脚本不管这个, 调用方传什么
就推什么.
chmod +x 加在 commit 里, 但 git mode bit 在 .gitattributes 或
core.fileMode 关时可能丢. runner 一般会按 working tree 模式跑,
不需要额外 chmod 在 step 里.
Co-Authored-By: Claude <noreply@anthropic.com>
38 lines
775 B
Bash
Executable File
38 lines
775 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# bark-notify.sh — push a notification to the local Bark server.
|
|
#
|
|
# Usage: bark-notify.sh <title> <body>
|
|
#
|
|
# The Bark endpoint, device_key, and group are pinned in this script
|
|
# (it is a deployment detail, not a secret). The group is "Gitea" —
|
|
# change it here if you want to sort notifications by category.
|
|
|
|
set -euo pipefail
|
|
|
|
if [ "$#" -ne 2 ]; then
|
|
echo "usage: $0 <title> <body>" >&2
|
|
exit 1
|
|
fi
|
|
|
|
TITLE="$1"
|
|
BODY="$2"
|
|
|
|
PAYLOAD=$(cat <<EOF
|
|
{
|
|
"device_key": "6ZFVsxM95cuAjYoNLWSWaN",
|
|
"title": "${TITLE}",
|
|
"body": "${BODY}",
|
|
"group": "Gitea",
|
|
"isArchive": 1,
|
|
"ttl": 3600
|
|
}
|
|
EOF
|
|
)
|
|
|
|
curl -s \
|
|
-X POST http://101.43.40.124:81/push \
|
|
-H "Content-Type: application/json; charset=utf-8" \
|
|
-d "${PAYLOAD}"
|
|
|
|
echo "bark notified: ${TITLE}"
|