Skip to content

Commit 672b4f4

Browse files
committed
feat(stash): add generated conversion templates
1 parent 7d42219 commit 672b4f4

14 files changed

Lines changed: 1538 additions & 5 deletions

.github/workflows/auto-generate-rules.yml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ on:
1818
- 'rule/Game_Download_CDN.list'
1919
- 'rule/game_rule/**/*.list'
2020
- 'py/generate_rules.py'
21+
- 'py/generate_stash_configs.py'
22+
- 'cfg/Custom_Clash*.ini'
2123
workflow_dispatch:
2224
inputs:
2325
source_before_sha:
@@ -77,11 +79,15 @@ jobs:
7779
- name: Set up pinned Mihomo
7880
uses: ./.github/actions/setup-mihomo
7981

80-
- name: Generate YAML and MRS providers
81-
run: python py/generate_rules.py --mihomo mihomo
82+
- name: Generate derived rules and Stash templates
83+
run: |
84+
python py/generate_rules.py --mihomo mihomo
85+
python py/generate_stash_configs.py
8286
8387
- name: Test generation and conversion logic
84-
run: python py/generate_rules.py --check --mihomo mihomo
88+
run: |
89+
python py/generate_rules.py --check --mihomo mihomo
90+
python py/generate_stash_configs.py --check
8591
8692
- name: Commit and push changes
8793
id: publish
@@ -96,12 +102,14 @@ jobs:
96102
':(glob)rule/*.mrs'
97103
':(glob)rule/game_rule/**/*.yaml'
98104
':(glob)rule/game_rule/**/*.mrs'
105+
':(glob)cfg/Custom_Stash*.ini'
99106
)
100107
generated_excludes=(
101108
':(exclude,glob)rule/*.yaml'
102109
':(exclude,glob)rule/*.mrs'
103110
':(exclude,glob)rule/game_rule/**/*.yaml'
104111
':(exclude,glob)rule/game_rule/**/*.mrs'
112+
':(exclude,glob)cfg/Custom_Stash*.ini'
105113
)
106114
remote_main_sha() {
107115
git ls-remote --exit-code origin refs/heads/main |
@@ -115,6 +123,8 @@ jobs:
115123
git reset --hard origin/main
116124
python py/generate_rules.py --mihomo mihomo
117125
python py/generate_rules.py --check --mihomo mihomo
126+
python py/generate_stash_configs.py
127+
python py/generate_stash_configs.py --check
118128
119129
unexpected_changes="$(
120130
git status --short --untracked-files=all -- . \
@@ -168,7 +178,7 @@ jobs:
168178
echo "Final revision to publish: $publication_sha"
169179
echo "publication_sha=$publication_sha" >> "$GITHUB_OUTPUT"
170180
171-
# Generation and Mihomo validation already ran against the exact worktree that
181+
# Generation and format validation already ran against the exact worktree that
172182
# was published. Purge its changed cache keys without re-running unrelated tests.
173183
purge-generated:
174184
needs: generate-rules

.github/workflows/validate.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ on:
1010
- 'py/**'
1111
- 'script/**/*.js'
1212
- 'shell/**/*.sh'
13+
- 'cfg/*.ini'
1314
- 'cfg/yaml/**'
1415
pull_request:
1516
branches:
@@ -25,6 +26,7 @@ on:
2526
- 'rule/game_rule/**/*.list'
2627
- 'script/**/*.js'
2728
- 'shell/**/*.sh'
29+
- 'cfg/*.ini'
2830
- 'cfg/yaml/**'
2931
workflow_dispatch:
3032

@@ -145,6 +147,7 @@ jobs:
145147
python py/generate_game_cdn.py --check
146148
python py/update_encrypted_dns.py --check
147149
python py/generate_rules.py --check --mihomo mihomo
150+
python py/generate_stash_configs.py --check
148151
149152
- name: Validate complete Mihomo templates
150153
run: |

cfg/Custom_Stash.ini

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
; 此文件由 py/generate_stash_configs.py 生成,请勿直接修改。
2+
; 策略来源:cfg/Custom_Clash.ini
3+
; Stash 兼容边界:非国家 GEOIP 已映射为 MRS;SRC-PORT,41641 因仅网关 SCRIPT
4+
; 可实现而被显式排除;策略组仅保留 interval,不输出无等价语义的组级 URL、
5+
; timeout 与 tolerance;复杂排除正则使用可移植的全节点回退或已有自动组。
6+
;Custom_OpenClash_Rules
7+
;全分组防 DNS 泄漏订阅转换模板
8+
;作者:https://github.com/Aethersailor
9+
;项目地址:https://github.com/Aethersailor/Custom_OpenClash_Rules
10+
;基于 ACL4SSR 模板魔改而来,感谢原作者!
11+
;<建议>搭配本项目配套设置,实现最佳化的 OpenClash 使用效果!
12+
;设置方案:https://github.com/Aethersailor/Custom_OpenClash_Rules/wiki/OpenClash-%E8%AE%BE%E7%BD%AE%E6%96%B9%E6%A1%88
13+
14+
[custom]
15+
;设置规则标志位
16+
;以下规则,按照从上往下的顺序遍历,优先命中上位规则,规则重复无影响
17+
;修改顺序会影响分流效果
18+
19+
;本地地址和域名直连
20+
ruleset=🎯 全球直连,[]GEOSITE,private
21+
ruleset=🎯 全球直连,clash-ipcidr:https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/private.mrs,28800|no-resolve
22+
;本项目收录的直连规则
23+
ruleset=🎯 全球直连,clash-domain:https://testingcf.jsdelivr.net/gh/Aethersailor/Custom_OpenClash_Rules@main/rule/Custom_Direct_Domain.mrs,28800
24+
ruleset=🎯 全球直连,clash-ipcidr:https://testingcf.jsdelivr.net/gh/Aethersailor/Custom_OpenClash_Rules@main/rule/Custom_Direct_IP.mrs,28800|no-resolve
25+
ruleset=🎯 全球直连,[]DST-PORT,7844
26+
;本项目收录的代理规则
27+
ruleset=🚀 手动选择,clash-domain:https://testingcf.jsdelivr.net/gh/Aethersailor/Custom_OpenClash_Rules@main/rule/Custom_Proxy_Domain.mrs,28800
28+
ruleset=🚀 手动选择,clash-ipcidr:https://testingcf.jsdelivr.net/gh/Aethersailor/Custom_OpenClash_Rules@main/rule/Custom_Proxy_IP.mrs,28800|no-resolve
29+
;谷歌在国内可用的域名直连
30+
ruleset=🎯 全球直连,[]GEOSITE,google-cn
31+
;国内游戏域名直连
32+
ruleset=🎯 全球直连,[]GEOSITE,category-games@cn
33+
;Steam 下载 CDN 直连
34+
ruleset=🎯 全球直连,clash-domain:https://testingcf.jsdelivr.net/gh/Aethersailor/Custom_OpenClash_Rules@main/rule/Steam_CDN_Domain.mrs,28800
35+
ruleset=🎯 全球直连,clash-ipcidr:https://testingcf.jsdelivr.net/gh/Aethersailor/Custom_OpenClash_Rules@main/rule/Steam_CDN_IP.mrs,28800|no-resolve
36+
;各大游戏平台下载域名直连
37+
ruleset=🎯 全球直连,[]GEOSITE,category-game-platforms-download
38+
;BT Tracker 相关域名直连
39+
ruleset=🎯 全球直连,[]GEOSITE,category-public-tracker
40+
;即时通讯包括了 Telegram/WhatsApp/Line 等海外主流即时通讯软件域名
41+
ruleset=💬 即时通讯,[]GEOSITE,category-communication
42+
;社交媒体包括了 Twitter(X)/Facebook/Instagram 等海外主流社交媒体
43+
ruleset=🌐 社交媒体,[]GEOSITE,category-social-media-!cn
44+
ruleset=🤖 ChatGPT,[]GEOSITE,openai
45+
ruleset=🤖 AI服务,[]GEOSITE,category-ai-!cn
46+
ruleset=🚀 GitHub,[]GEOSITE,github
47+
;测速工具包括 SpeedTest 等主流测速工具域名
48+
ruleset=🚀 测速工具,[]GEOSITE,category-speedtest
49+
ruleset=🎮 Steam,[]GEOSITE,steam
50+
ruleset=📹 YouTube,[]GEOSITE,youtube
51+
ruleset=🎥 AppleTV+,[]GEOSITE,apple-tvplus
52+
ruleset=🍎 苹果服务,[]GEOSITE,apple
53+
ruleset=Ⓜ️ 微软服务,[]GEOSITE,microsoft
54+
ruleset=📢 谷歌FCM,[]GEOSITE,googlefcm
55+
ruleset=🇬 谷歌服务,[]GEOSITE,google
56+
ruleset=🎶 TikTok,[]GEOSITE,tiktok
57+
ruleset=🎥 Netflix,[]GEOSITE,netflix
58+
ruleset=🎥 DisneyPlus,[]GEOSITE,disney
59+
ruleset=🎥 HBO,[]GEOSITE,hbo
60+
ruleset=🎥 PrimeVideo,[]GEOSITE,primevideo
61+
;Emby 包括主流 Emby 服务相关域名
62+
ruleset=🎥 Emby,[]GEOSITE,category-emby
63+
ruleset=🎻 Spotify,[]GEOSITE,spotify
64+
ruleset=📺 Bahamut,[]GEOSITE,bahamut
65+
ruleset=🎮 游戏平台,[]GEOSITE,category-games
66+
ruleset=🌎 国外媒体,[]GEOSITE,category-entertainment
67+
ruleset=🛒 国外电商,[]GEOSITE,category-ecommerce
68+
ruleset=🚀 手动选择,[]GEOSITE,gfw
69+
ruleset=💬 即时通讯,clash-ipcidr:https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/telegram.mrs,28800|no-resolve
70+
ruleset=🌐 社交媒体,clash-ipcidr:https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/twitter.mrs,28800|no-resolve
71+
ruleset=🌐 社交媒体,clash-ipcidr:https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/facebook.mrs,28800|no-resolve
72+
ruleset=🇬 谷歌服务,clash-ipcidr:https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/google.mrs,28800|no-resolve
73+
ruleset=🎥 Netflix,clash-ipcidr:https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/netflix.mrs,28800|no-resolve
74+
;由于 OpenClash 使用的大陆白名单收录不全,此处留有 geosite:cn 作为国内域名兜底
75+
ruleset=🎯 全球直连,[]GEOSITE,cn
76+
;由于 OpenClash 使用的大陆白名单收录不全,此处留有 geoip:cn 作为国内 IP 兜底
77+
ruleset=🎯 全球直连,[]GEOIP,cn,no-resolve
78+
;以上兜底规则会根据实际情况随时取消
79+
;PT/BT 优化开启会使 80/443 以外端口的流量直连
80+
ruleset=🔀 非标端口,clash-classic:https://testingcf.jsdelivr.net/gh/Aethersailor/Custom_OpenClash_Rules@main/rule/Custom_Port_Direct.yaml,28800
81+
;国内冷门域名会命中漏网之鱼,如影响使用,请设置漏网之鱼直连
82+
;漏网之鱼直连时,无法通过 DNS 泄露测试,但是并不存在泄露
83+
ruleset=🐟 漏网之鱼,[]FINAL
84+
;设置规则标志位结束
85+
86+
;设置节点分组标志位
87+
custom_proxy_group=🚀 手动选择`select`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
88+
custom_proxy_group=♻️ 自动选择`url-test`.*``300
89+
custom_proxy_group=💬 即时通讯`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`[]🎯 全球直连
90+
custom_proxy_group=🌐 社交媒体`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`[]🎯 全球直连`.*
91+
custom_proxy_group=🚀 GitHub`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`[]🎯 全球直连
92+
custom_proxy_group=🤖 ChatGPT`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇸🇬 新加坡节点`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
93+
custom_proxy_group=🤖 AI服务`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇸🇬 新加坡节点`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
94+
custom_proxy_group=🎶 TikTok`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
95+
custom_proxy_group=📹 YouTube`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇸🇬 新加坡节点`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
96+
custom_proxy_group=🎥 Netflix`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇸🇬 新加坡节点`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
97+
custom_proxy_group=🎥 DisneyPlus`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇸🇬 新加坡节点`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
98+
custom_proxy_group=🎥 HBO`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇸🇬 新加坡节点`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
99+
custom_proxy_group=🎥 PrimeVideo`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇸🇬 新加坡节点`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
100+
custom_proxy_group=🎥 AppleTV+`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇸🇬 新加坡节点`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`[]🎯 全球直连`.*
101+
custom_proxy_group=🎥 Emby`select`[]🚀 手动选择`[]♻️ 自动选择`[]🎯 全球直连`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
102+
custom_proxy_group=🎻 Spotify`select`[]🚀 手动选择`[]♻️ 自动选择`[]🎯 全球直连`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
103+
custom_proxy_group=📺 Bahamut`select`[]🇼🇸 台湾节点`[]🚀 手动选择`[]🎯 全球直连`.*
104+
custom_proxy_group=🌎 国外媒体`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
105+
custom_proxy_group=🛒 国外电商`select`[]🚀 手动选择`[]♻️ 自动选择`[]🎯 全球直连`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
106+
custom_proxy_group=📢 谷歌FCM`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点
107+
custom_proxy_group=🇬 谷歌服务`select`[]🚀 手动选择`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
108+
custom_proxy_group=🍎 苹果服务`select`[]🎯 全球直连`[]🚀 手动选择`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
109+
custom_proxy_group=Ⓜ️ 微软服务`select`[]🎯 全球直连`[]🚀 手动选择`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
110+
custom_proxy_group=🎮 游戏平台`select`[]🎯 全球直连`[]🚀 手动选择`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
111+
custom_proxy_group=🎮 Steam`select`[]🎯 全球直连`[]🚀 手动选择`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
112+
custom_proxy_group=🚀 测速工具`select`[]🎯 全球直连`[]🚀 手动选择`[]♻️ 自动选择`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
113+
custom_proxy_group=🐟 漏网之鱼`select`[]🚀 手动选择`[]♻️ 自动选择`[]🎯 全球直连`[]🇭🇰 香港节点`[]🇺🇸 美国节点`[]🇯🇵 日本节点`[]🇸🇬 新加坡节点`[]🇼🇸 台湾节点`[]🇰🇷 韩国节点`.*
114+
custom_proxy_group=🔀 非标端口`select`[]🐟 漏网之鱼`[]🎯 全球直连
115+
custom_proxy_group=🇭🇰 香港节点`url-test`(🇭🇰|港|\bHK(?:[-_ ]?\d+(?:[-_ ]?[A-Za-z][A-Za-z]+)?)?\b|hk|Hong Kong|Hongkong|Hong kong|HongKong|hongkong|HONG KONG|HONGKONG|深港|HKG|九龙|Kowloon|新界|沙田|荃湾|葵涌)``300
116+
custom_proxy_group=🇺🇸 美国节点`url-test`(🇺🇸|美|波特兰|达拉斯|俄勒冈|凤凰城|费利蒙|硅谷|拉斯维加斯|洛杉矶|圣何塞|圣克拉拉|西雅图|芝加哥|纽约|纽纽|亚特兰大|迈阿密|华盛顿|\bUS(?:[-_ ]?\d+(?:[-_ ]?[A-Za-z][A-Za-z]+)?)?\b|United States|UnitedStates|UNITED STATES|USA|America|AMERICA|JFK|EWR|IAD|ATL|ORD|MIA|NYC|LAX|SFO|SEA|DFW|SJC)``300
117+
custom_proxy_group=🇯🇵 日本节点`url-test`(🇯🇵|日本|川日|东京|大阪|泉日|埼玉|沪日|深日|\bJP(?:[-_ ]?\d+(?:[-_ ]?[A-Za-z][A-Za-z]+)?)?\b|Japan|JAPAN|JPN|NRT|HND|KIX|TYO|OSA|关西|Kansai|KANSAI)``300
118+
custom_proxy_group=🇸🇬 新加坡节点`url-test`(🇸🇬|新加坡|坡|狮城|\bSG(?:[-_ ]?\d+(?:[-_ ]?[A-Za-z][A-Za-z]+)?)?\b|Singapore|SINGAPORE|SIN)``300
119+
custom_proxy_group=🇼🇸 台湾节点`url-test`(🇹🇼|🇼🇸|台|新北|彰化|\bTW(?:[-_ ]?\d+(?:[-_ ]?[A-Za-z][A-Za-z]+)?)?\b|Taiwan|TAIWAN|TWN|TPE|ROC)``300
120+
custom_proxy_group=🇰🇷 韩国节点`url-test`(🇰🇷|\bKR(?:[-_ ]?\d+(?:[-_ ]?[A-Za-z][A-Za-z]+)?)?\b|Korea|KOREA|KOR|首尔|韩|韓|春川|Chuncheon|ICN)``300
121+
custom_proxy_group=🎯 全球直连`select`[]DIRECT
122+
;设置分组标志位
123+
124+
;下方参数请勿修改
125+
enable_rule_generator=true
126+
overwrite_original_rules=true

0 commit comments

Comments
 (0)