Files
windychen-utils/.gitea/workflows/runner-maintenance.yaml
T
2026-08-06 11:25:50 +08:00

73 lines
3.2 KiB
YAML

name: Runner Self-Maintenance
on:
schedule:
- cron: "0 */6 * * *"
workflow_dispatch:
jobs:
health-check:
runs-on: docker
steps:
- name: Install tools
run: |
if command -v apk >/dev/null 2>&1; then
apk add --no-cache curl grep
elif command -v apt-get >/dev/null 2>&1; then
apt-get update -qq && apt-get install -y -qq curl grep
else
echo "No supported package manager"; exit 1
fi
- name: Check Gitea health
id: gitea
run: |
BODY=$(curl -sf --connect-timeout 15 "https://gitea.windychen00n.work/api/healthz")
if echo "$BODY" | grep -qE '"status"[[:space:]]*:[[:space:]]*"pass"'; then
echo "result=ok|Gitea 健康检查通过" >> $GITHUB_OUTPUT
else
echo "result=fail|Gitea 健康检查失败" >> $GITHUB_OUTPUT
echo "$BODY" | head -3
exit 1
fi
- name: Check Verdaccio health
id: verdaccio
continue-on-error: true
run: |
if curl -sf --connect-timeout 5 "http://172.172.2.4:4873/-/ping" >/dev/null 2>&1; then
echo "result=ok|Verdaccio 内网可达" >> $GITHUB_OUTPUT
elif curl -sf --connect-timeout 5 "http://verdaccio:4873/-/ping" >/dev/null 2>&1; then
echo "result=ok|Verdaccio DNS 可达" >> $GITHUB_OUTPUT
else
echo "result=warn|Verdaccio 内网不可达(需配置 runner job 网络)" >> $GITHUB_OUTPUT
fi
- name: Check runner registration
id: runner
run: |
RESP=$(curl -sf --connect-timeout 15 -u "${{ secrets.CI_USER }}:${{ secrets.CI_PASSWORD }}" \
"https://gitea.windychen00n.work/api/v1/admin/actions/runners")
ONLINE=$(echo "$RESP" | grep -c '"status":"online"' || true)
if [ "${ONLINE:-0}" -ge 1 ]; then
NAME=$(echo "$RESP" | grep -o '"name":"[^"]*"' | head -1 | cut -d'"' -f4)
echo "result=ok|Runner ${NAME} 在线 (${ONLINE} 个)" >> $GITHUB_OUTPUT
else
echo "result=fail|无在线 Runner" >> $GITHUB_OUTPUT
exit 1
fi
- name: Notify DingTalk on failure
if: failure()
run: |
curl -s -X POST "https://oapi.dingtalk.com/robot/send?access_token=${{ secrets.DINGDING_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{"msgtype":"markdown","markdown":{"title":"❌ Gitea Runner 自主维护告警 chen-fnos","text":"## ❌ Gitea Runner 自主维护告警 chen-fnos\n\n- Gitea: ${{ steps.gitea.outputs.result }}\n- Verdaccio: ${{ steps.verdaccio.outputs.result }}\n- Runner: ${{ steps.runner.outputs.result }}\n\n请检查 gitea-runner 容器"}}'
- name: Notify DingTalk on success
if: success()
run: |
curl -s -X POST "https://oapi.dingtalk.com/robot/send?access_token=${{ secrets.DINGDING_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{"msgtype":"markdown","markdown":{"title":"✅ Gitea Runner 自主维护正常 chen-fnos","text":"## ✅ Gitea Runner 自主维护正常 chen-fnos\n\n- Gitea: ${{ steps.gitea.outputs.result }}\n- Verdaccio: ${{ steps.verdaccio.outputs.result }}\n- Runner: ${{ steps.runner.outputs.result }}"}}'