-
Notifications
You must be signed in to change notification settings - Fork 13
190 lines (160 loc) · 8.86 KB
/
Fork.yml
File metadata and controls
190 lines (160 loc) · 8.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
name: 拉取上游 mihomo 规则
#!date = 2026-04-18 19:18:13
on:
workflow_dispatch:
schedule:
- cron: '15 */12 * * *'
jobs:
git-mihomo:
runs-on: ubuntu-latest
env:
TZ: 'Asia/Hong_Kong'
steps:
- name: 检查当前仓库
uses: actions/checkout@v6
with:
repository: Abcd789JK/Tools
path: Tools-repo
token: ${{ secrets.GITHUB_TOKEN }}
- name: 下载 mihomo 规则
shell: bash
working-directory: ${{ github.workspace }}/Tools-repo
run: |
set -euo pipefail
# 创建目录
mkdir -p \
Ruleset/mihomo/{geoip,geosite}
# 定义需要下载的文件列表
declare -A file=(
# geosite
["geosite/Ads_all.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/category-ads-all.mrs"
["geosite/Local.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/private.mrs"
["geosite/China.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/cn.mrs"
["geosite/Openai.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/openai.mrs"
["geosite/PayPal.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/paypal.mrs"
["geosite/Apple.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/apple.mrs"
["geosite/Global.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/geolocation-!cn.mrs"
["geosite/GlobalGFW.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/gfw.mrs"
["geosite/Google.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/google.mrs"
["geosite/YouTube.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/youtube.mrs"
["geosite/Steam.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/steam.mrs"
["geosite/Epic.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/epicgames.mrs"
["geosite/Facebook.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/facebook.mrs"
["geosite/Instagram.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/instagram.mrs"
["geosite/Twitter.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/twitter.mrs"
["geosite/Telegram.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/telegram.mrs"
["geosite/Line.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/line.mrs"
["geosite/GitHub.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/github.mrs"
["geosite/OneDrive.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/onedrive.mrs"
["geosite/Microsoft.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/microsoft.mrs"
["geosite/Tiktok.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/tiktok.mrs"
["geosite/Bilibili.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/bilibili.mrs"
["geosite/Disney.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/disney.mrs"
["geosite/Netflix.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/netflix.mrs"
["geosite/Spotify.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/spotify.mrs"
["geosite/Talkatone.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/talkatone.mrs"
# geoip
["geoip/Local.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/private.mrs"
["geoip/China.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/cn.mrs"
["geoip/Netflix.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/netflix.mrs"
["geoip/Twitter.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/twitter.mrs"
["geoip/Telegram.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/telegram.mrs"
["geoip/Facebook.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/facebook.mrs"
["geoip/Google.mrs"]="https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/google.mrs"
)
failures=0
for file_path in "${!file[@]}"; do
url="${file[$file_path]}"
echo "下载规则:$file_path"
if curl -f -L --retry 3 --retry-delay 5 --max-time 60 \
"$url" -o "Ruleset/mihomo/$file_path"; then
echo "下载成功: $file_path"
else
echo "下载失败: $url"
((failures++))
fi
done
if [[ $failures -gt 0 ]]; then
echo "共有 $failures 个规则下载失败, 继续执行脚本"
else
echo "所有 mihomo 规则文件下载完成。"
fi
- name: 提交并推送更新
shell: bash
working-directory: ${{ github.workspace }}/Tools-repo
run: |
set -euo pipefail
# 默认无更新
echo "changed=false" >> $GITHUB_ENV
# 拉取远程 main 分支代码,使用 rebase 保持提交历史干净,并自动暂存/恢复本地未提交修改(避免 pull 失败)
git pull --rebase --autostash origin main
# 添加所有变更(新增、修改、删除)到暂存区
git add -A
if ! git diff --cached --quiet; then
echo "检测到规则文件更新,开始提交"
# 标记有更新
echo "changed=true" >> $GITHUB_ENV
# 统计变更类型
added=$(git diff --cached --name-status | grep '^A' | wc -l || true)
modified=$(git diff --cached --name-status | grep '^M' | wc -l || true)
deleted=$(git diff --cached --name-status | grep '^D' | wc -l || true)
echo "added=$added" >> $GITHUB_ENV
echo "modified=$modified" >> $GITHUB_ENV
echo "deleted=$deleted" >> $GITHUB_ENV
# 获取文件列表
files=$(git diff --cached --name-only | head -n 20 | sed 's/^/- /')
echo "files<<EOF" >> $GITHUB_ENV
echo "$files" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
git config --local user.name "GitHub Actions"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git commit -m "Auto Update Ruleset $(TZ='Asia/Hong_Kong' date +'%Y-%m-%d %H:%M:%S %Z')"
if git push origin main; then
echo "规则同步并推送成功!"
else
echo "推送失败,请检查仓库权限。"
exit 1
fi
else
echo "规则文件无变更,无需提交。"
fi
- name: 设置时间 & 变更信息
shell: bash
run: |
set -euo pipefail
echo "time=$(TZ='Asia/Hong_Kong' date +'%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_ENV
if [ "$changed" = "true" ]; then
{
echo "diff_text<<EOF"
echo "📈 <b>变更详细</b>"
echo "➕ 新增: $added"
echo "✏️ 修改: $modified"
echo "❌ 删除: $deleted"
echo ""
echo "📂 <b>变更文件</b>"
echo "<pre>$files</pre>"
echo "EOF"
} >> $GITHUB_ENV
else
echo "diff_text=" >> $GITHUB_ENV
fi
- name: 发送 Telegram 通知
uses: appleboy/telegram-action@master
if: always()
with:
to: ${{ secrets.TELEGRAM_CHAT_ID }}
token: ${{ secrets.TELEGRAM_TOKEN }}
format: html
message: |
📢 <b>GitHub Actions 自动化任务通知</b>
✉️ 标题: mihomo 上游规则拉取
📦 仓库: 小姐姐
⏰ 时间: ${{ env.time }}
🎯 状态: ${{ job.status == 'success' && '恭喜你! 任务成功' || '很遗憾! 任务失败' }}
📊 更新: ${{ env.changed == 'true' && '本次有更新' || '本次无更新' }}
${{ env.diff_text }}
- name: 清理旧工作流运行记录
uses: Mattraks/delete-workflow-runs@main
with:
retain_days: 0
keep_minimum_runs: 3