-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathTelegram.Publiclink.All.Test.yml
More file actions
342 lines (333 loc) · 15.2 KB
/
Telegram.Publiclink.All.Test.yml
File metadata and controls
342 lines (333 loc) · 15.2 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
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
name: 🈴 Tg.Publiclink.All.Test_Final
# ==================== 触发条件配置 ====================
# TCP、Clash、XCspeedtest 三合一测速版
on:
# 定时执行配置,每4小时20分钟执行一次(例如00:20, 04:20, 08:20...)
schedule:
- cron: '20 16/4 * * *'
# 支持手动触发工作流,附带输入参数
workflow_dispatch:
inputs:
# 网络配置模式选择
warp_config:
description: '选择网络配置模式'
required: false
default: 'default'
type: choice
options:
- default # 默认配置
- all_warp # 全流程使用Warp网络
- all_github # 全流程使用GitHub网络
- test_mode # 测试模式:仅抓取部分频道,使用Warp测速
# 是否强制重新下载工具(忽略缓存)
force_download:
description: '强制重新下载工具(忽略缓存)'
required: false
default: false
type: boolean
# 测速模式选择(支持6种,详见说明)
speedtest_mode:
description: '选择测速模式'
required: false
default: 'tcp_first'
type: choice
options:
- tcp_clash_xc # TCP 粗筛 → Clash 精测 → Speedtest 精测
- tcp_clash # TCP 粗筛 → Clash 精测
- tcp_xc # TCP 粗筛 → Speedtest 精测
- tcp_only # 纯 TCP 测速
- clash_only # 纯 Clash 测验
- xcspeedtest_only # 纯 Speedtest 测验(xcspeedtest)
# ==================== 环境变量配置 ====================
env:
# ==================== 版本配置 ====================
MIHOMO_VERSION: v1.19.17 # Mihomo (Clash Meta) 版本
SPEEDTEST_VERSION: v0.4.1 # XC Speedtest 版本
WGCF_VERSION: v2.2.29 # WGCF (Cloudflare Warp) 版本
CLASH_SPEEDTEST_VERSION: v1.7.0 # Clash-speedtest 核心版本
# ==================== 网络控制配置 默认网络配置====================
# 这些变量是Python脚本的唯一控制源,控制各阶段是否使用Warp网络
# true=使用Warp网络,false=使用原始GitHub网络
# 抓取阶段:使用GitHub网络(速度快)
WARP_FOR_SCRAPING: "false"
# TCP测速阶段:使用Warp网络(模拟国内环境,测速结果更准确)
WARP_FOR_TCP: "true"
# Speedtest测速阶段:使用Warp网络(模拟国内环境,测速结果更准确)
WARP_FOR_SPEEDTEST: "true"
# 最终处理阶段:使用GitHub网络(确保提交等操作正常)
WARP_FOR_FINAL: "false"
# ==================== 测速策略配置 ====================
# 测速模式选项:
# tcp_clash_xc → TCP 粗筛 → Clash 精测 → Speedtest 精测(推荐)
# tcp_clash → TCP 粗筛 → Clash 精测
# tcp_xc → TCP 粗筛 → Speedtest 精测
# tcp_only → 纯 TCP 测速(最快,最适合节点特别多的情况)
# clash_only → 纯 Clash 测速(最准)
# xcspeedtest_only → 纯 xcspeedtest 测速
#SPEEDTEST_MODE: "tcp_first" # 兼容原有配置,推荐使用 DETAILED_SPEEDTEST_MODE 覆盖;已删除
DETAILED_SPEEDTEST_MODE: "tcp_clash_xc" # 默认模式,覆盖全部测速选择:tcp_clash_xc, tcp_clash, tcp_xc, tcp_only, clash_only, xcspeedtest_only
# ==================== 带宽筛选配置 ====================
# 是否启用带宽筛选(True=启用,False=关闭),通过环境变量控制
ENABLE_BANDWIDTH_FILTER: "true"
# 最低带宽阈值(单位:MB/s),默认为20MB/s
MIN_BANDWIDTH_MB: "20"
# ==================== 日志配置 ====================
# 是否启用TCP测速详细日志(生产环境建议关闭)
ENABLE_TCP_LOG: "false"
# 是否启用Speedtest测速详细日志(生产环境建议关闭) # false不开启,true开启
ENABLE_SPEEDTEST_LOG: "false"
# ==================== Telegram频道配置 ====================
# 要抓取的Telegram频道列表(每行一个)
# 支持频道ID(如 @channel_name)或频道链接
TELEGRAM_CHANNEL_IDS: |
@fqDINYUE
@wxdy666
@freeyule
@ccbaohe
@duangvpsfs
@zzzjjjkkkoi
@xmdexw
@v2v2clash
@dingyue_Center
@tempssrlink
@sorenab2
@proxyshareCN
# ==================== 工作流任务定义 ====================
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
# === 步骤1:检出代码仓库 ===
- name: 检出代码仓库
uses: actions/checkout@v4
with:
# 获取完整历史记录,便于后续提交操作
fetch-depth: 0
# 使用GitHub Token认证
token: ${{ secrets.GITHUB_TOKEN }}
submodules: false
# === 步骤2:设置 Python 环境 ===
- name: 设置 Python 环境
uses: actions/setup-python@v5
with:
python-version: '3.11'
# 缓存pip依赖以加速
cache: 'pip'
cache-dependency-path: 'TelegramNode/requirements.txt'
# === 步骤3:缓存 Python 依赖 ===
- name: 缓存 Python 依赖
uses: actions/cache@v4
id: cache-pip
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('TelegramNode/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
# === 步骤4:安装 Python 依赖及系统依赖 ===
- name: 安装 Python 依赖及系统依赖
run: |
python -m pip install --upgrade pip
pip install -r TelegramNode/requirements.txt
sudo apt-get update -qq
sudo apt-get install -y wireguard-tools curl resolvconf wget
# === 步骤5:缓存 Mihomo 程序 ===
- name: 缓存 Mihomo 程序
id: cache-mihomo
uses: actions/cache@v4
with:
path: mihomo
key: mihomo-amd64-${{ env.MIHOMO_VERSION }}
restore-keys: mihomo-amd64-${{ env.MIHOMO_VERSION }}
# === 步骤6:下载 Mihomo 指定版本 ===
- name: 下载 Mihomo 指定版本
if: steps.cache-mihomo.outputs.cache-hit != 'true' || inputs.force_download == 'true'
run: |
set -e
TAG=${{ env.MIHOMO_VERSION }}
URL="https://github.com/MetaCubeX/mihomo/releases/download/${TAG}/mihomo-linux-amd64-${TAG}.gz"
echo "尝试访问下载链接: $URL"
if ! curl --head --fail "$URL"; then
echo "❌ 错误:下载地址不可用!"
exit 1
fi
wget --tries=3 --timeout=30 -O mihomo.gz "$URL"
gunzip -f mihomo.gz
chmod +x mihomo
./mihomo -v
# === 步骤7:缓存 wgcf 工具 ===
- name: 缓存 wgcf 工具
id: cache-wgcf
uses: actions/cache@v4
with:
path: wgcf
key: wgcf-linux-amd64-${{ env.WGCF_VERSION }}
restore-keys: wgcf-linux-amd64-${{ env.WGCF_VERSION }}
# === 步骤8:下载 wgcf 工具 ===
- name: 下载 wgcf 工具
if: steps.cache-wgcf.outputs.cache-hit != 'true' || inputs.force_download == 'true'
run: |
WGCF_FULL_VERSION="${{ env.WGCF_VERSION }}"
WGCF_FILENAME_VERSION="${WGCF_FULL_VERSION#v}"
echo "正在下载 wgcf v${WGCF_FILENAME_VERSION}..."
curl -fsSL -o wgcf "https://github.com/ViRb3/wgcf/releases/download/${WGCF_FULL_VERSION}/wgcf_${WGCF_FILENAME_VERSION}_linux_amd64"
if [ ! -f "wgcf" ]; then
echo "❌ 错误:wgcf 下载失败!"
exit 1
fi
chmod +x wgcf
echo "wgcf 下载完成。"
# === 步骤9:缓存 xcspeedtest 程序 ===
- name: 缓存 xiecang speedtest-clash
id: cache-xc
uses: actions/cache@v4
with:
path: xcspeedtest
key: xiecang-${{ env.SPEEDTEST_VERSION }}
restore-keys: xiecang-${{ env.SPEEDTEST_VERSION }}
# === 步骤10:下载 xcspeedtest ===
- name: 下载 xiecang speedtest-clash
if: steps.cache-xc.outputs.cache-hit != 'true' || inputs.force_download == 'true'
run: |
set -e
RELEASE_TAG=${{ env.SPEEDTEST_VERSION }}
echo "尝试下载 speedtest-clash 版本: $RELEASE_TAG"
URL=$(curl -s "https://api.github.com/repos/xiecang/speedtest-clash/releases/tags/${RELEASE_TAG}" \
| grep "browser_download_url.*speedtest-clash_Linux_x86_64" | cut -d '"' -f4)
if [ -z "$URL" ]; then
echo "⚠️ 警告: 未找到指定版本 (${RELEASE_TAG}),尝试最新版本。"
URL=$(curl -s https://api.github.com/repos/xiecang/speedtest-clash/releases/latest \
| grep "browser_download_url.*speedtest-clash_Linux_x86_64" | cut -d '"' -f4)
fi
if [ -z "$URL" ]; then
echo "❌ 错误:未能找到 speedtest-clash 下载 URL,退出。"
exit 1
fi
wget --tries=5 --timeout=60 -O downloaded_file "$URL"
if file downloaded_file | grep -q "gzip compressed data"; then
echo "检测到压缩包,开始解压"
tar -xzf downloaded_file
if [ -f "speedtest-clash" ]; then
mv speedtest-clash xcspeedtest
else
EXE_PATH=$(find . -maxdepth 1 -type f -executable -name "speedtest-clash*" -print -quit)
if [ -n "$EXE_PATH" ]; then
mv "$EXE_PATH" xcspeedtest
else
echo "❌ 错误:未找到 speedtest-clash 可执行文件"
exit 1
fi
fi
rm downloaded_file
else
echo "下载的是可执行文件,直接重命名为 xcspeedtest"
mv downloaded_file xcspeedtest
fi
chmod +x xcspeedtest
./xcspeedtest --help
# === 步骤11:缓存 clash-speedtest 核心 ===
- name: 缓存 clash-speedtest 核心 (clash_core/)
id: cache-clash-speedtest
uses: actions/cache@v4
with:
path: clash_core/
key: ${{ runner.os }}-clash-speedtest-${{ env.CLASH_SPEEDTEST_VERSION }}
# === 步骤12:下载并解压 clash-speedtest 核心 ===
- name: 下载并解压 clash-speedtest 到 clash_core/clash
if: steps.cache-clash-speedtest.outputs.cache-hit != 'true' || inputs.force_download == 'true'
run: |
mkdir -p clash_core
URL="https://github.com/faceair/clash-speedtest/releases/download/${{ env.CLASH_SPEEDTEST_VERSION }}/clash-speedtest_Linux_x86_64.tar.gz"
echo "正在下载 clash-speedtest 核心..."
wget -q -O clash-speedtest.tar.gz "$URL"
tar -xzf clash-speedtest.tar.gz -C clash_core
rm -f clash-speedtest.tar.gz
mv clash_core/clash-speedtest clash_core/clash
chmod +x clash_core/clash
echo "clash-speedtest 下载并解压完成。"
# === 步骤13:智能网络配置 + 运行测速脚本 ===
- name: 智能网络配置 + 运行测速脚本
env:
TELEGRAM_API_ID: ${{ secrets.TELEGRAM_API_ID }}
TELEGRAM_API_HASH: ${{ secrets.TELEGRAM_API_HASH }}
TELEGRAM_STRING_SESSION: ${{ secrets.TELEGRAM_STRING_SESSION }}
GITHUB_ACTIONS: "true"
PYTHONUNBUFFERED: "1"
WARP_FOR_SCRAPING: ${{ env.WARP_FOR_SCRAPING }}
WARP_FOR_TCP: ${{ env.WARP_FOR_TCP }}
WARP_FOR_SPEEDTEST: ${{ env.WARP_FOR_SPEEDTEST }}
WARP_FOR_FINAL: ${{ env.WARP_FOR_FINAL }}
SPEEDTEST_MODE: ${{ env.SPEEDTEST_MODE }}
DETAILED_SPEEDTEST_MODE: ${{ env.DETAILED_SPEEDTEST_MODE }}
TELEGRAM_CHANNEL_IDS: ${{ env.TELEGRAM_CHANNEL_IDS }}
ENABLE_BANDWIDTH_FILTER: ${{ env.ENABLE_BANDWIDTH_FILTER }}
MIN_BANDWIDTH_MB: ${{ env.MIN_BANDWIDTH_MB }}
ENABLE_TCP_LOG: ${{ env.ENABLE_TCP_LOG }}
ENABLE_SPEEDTEST_LOG: ${{ env.ENABLE_SPEEDTEST_LOG }}
run: |
echo "=== 开始执行节点抓取和测速脚本 ==="
mkdir -p flclashyaml
# 调用您的Python脚本。此脚本现在将根据上次写入文件的时间来确定Telegram消息的抓取范围。
python TelegramNode/Telegram.Publiclink.All.Test.py
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
echo "✅ 节点抓取和测速完成"
if [ -f "flclashyaml/TelePuliclick-Node.yaml" ]; then
FILE_SIZE=$(stat -c%s "flclashyaml/TelePuliclick-Node.yaml" 2>/dev/null || stat -f%z "flclashyaml/TelePuliclick-Node.yaml" 2>/dev/null || echo "unknown")
echo "📁 配置文件生成成功: flclashyaml/TelePuliclick-Node.yaml (${FILE_SIZE} bytes)"
else
echo "⚠️ 配置文件未生成"
fi
else
echo "❌ Python脚本执行失败,退出码: $EXIT_CODE"
exit $EXIT_CODE
fi
# === 步骤14:确保网络正常(重要修复)===
- name: 确保网络正常
if: always()
run: |
echo "=== 🔧 确保网络正常 ==="
echo "1️⃣ 停止任何Warp连接..."
sudo wg-quick down wgcf 2>/dev/null || echo " ℹ️ WARP未运行"
sudo ip link delete wgcf 2>/dev/null || echo " ℹ️ 接口不存在"
echo "2️⃣ 清除Warp相关路由..."
for cidr in \
"140.82.112.0/20" "185.199.108.0/22" "185.199.109.0/22" \
"185.199.110.0/22" "185.199.111.0/22" "192.30.252.0/22" \
"192.30.253.0/22" "192.30.254.0/22" "192.30.255.0/22"; do
sudo ip route del $cidr 2>/dev/null || true
done
echo "3️⃣ 测试网络连接..."
CURRENT_IP=""
for server in "https://ip.sb" "https://api.ipify.org" "https://checkip.amazonaws.com" "https://ipinfo.io/ip"; do
if CURRENT_IP=$(curl -4 -s --max-time 5 "$server" | grep -E '^[0-9]{1,3}(\.[0-9]{1,3}){3}$'); then
echo " ✅ 成功: $CURRENT_IP "
break
fi
done
if [ -z "$CURRENT_IP" ]; then
CURRENT_IP=$(hostname -I | awk '{print $1}' 2>/dev/null || echo "unknown")
echo " ℹ️ 备用IP: $CURRENT_IP"
fi
echo "4️⃣ 检查GitHub连接..."
if curl -I --silent --max-time 10 https://github.com 2>/dev/null | head -1; then
echo " ✅ GitHub连接正常"
else
echo " ⚠️ GitHub连接可能有问题"
fi
echo "=== 网络检查完成 ==="
# === 步骤15:自动提交所有生成的YAML文件 ===
- name: 自动提交所有生成的YAML文件
if: success()
uses: stefanzweifel/git-auto-commit-action@v5
with:
# 提交信息
commit_message: "🚀 (Auto-Update) 更新节点与调试文件"
# 要提交的文件或目录的通配符模式。
# 'flclashyaml/' 会提交该目录下所有的新增、修改、删除。
# 这是最推荐的方式,可以确保所有生成的文件都被包含。
#file_pattern: flclashyaml/
# 如果您只想提交 yaml 文件,也可以使用下面的模式:
file_pattern: flclashyaml/*.yaml
# 指定要推送的分支,通常是 main 或 master
# push_options: '--force' # 如果您需要强制推送,可以取消此行注释