1
+ name : Update Third-Party Resources
2
+
3
+ on :
4
+ schedule :
5
+ - cron : ' 30 0 */3 * *'
6
+ workflow_dispatch :
7
+
8
+ jobs :
9
+ update-resources :
10
+ runs-on : ubuntu-latest
11
+ steps :
12
+ - name : Checkout Repository
13
+ uses : actions/checkout@v4
14
+ with :
15
+ fetch-depth : 0
16
+ ref : dev
17
+
18
+ - name : Set up environment
19
+ run : |
20
+ sudo apt-get update
21
+ sudo apt-get -y install curl wget unzip git jq coreutils
22
+
23
+ - name : Set file paths
24
+ run : |
25
+ echo "CHNR_PATH=luci-app-openclash/root/etc/openclash/china_ip_route.ipset" >> $GITHUB_ENV
26
+ echo "CHNR6_PATH=luci-app-openclash/root/etc/openclash/china_ip6_route.ipset" >> $GITHUB_ENV
27
+ echo "YACD_PATH=luci-app-openclash/root/usr/share/openclash/ui/yacd" >> $GITHUB_ENV
28
+ echo "ZASHBOARD_PATH=luci-app-openclash/root/usr/share/openclash/ui/zashboard" >> $GITHUB_ENV
29
+ echo "METACUBEXD_PATH=luci-app-openclash/root/usr/share/openclash/ui/metacubexd" >> $GITHUB_ENV
30
+ echo "GEOIP_PATH=luci-app-openclash/root/etc/openclash/GeoIP.dat" >> $GITHUB_ENV
31
+ echo "GEOSITE_PATH=luci-app-openclash/root/etc/openclash/GeoSite.dat" >> $GITHUB_ENV
32
+ echo "COUNTRY_MMDB_PATH=luci-app-openclash/root/etc/openclash/Country.mmdb" >> $GITHUB_ENV
33
+
34
+ - name : Update China IP Route Files
35
+ run : |
36
+ mkdir -p tmp
37
+ echo "Downloading China IP Route files..."
38
+
39
+ curl -sSL https://ispip.clang.cn/all_cn.txt -o tmp/china_ip_route.ipset
40
+
41
+ mkdir -p $(dirname $CHNR_PATH)
42
+
43
+ if [ -f "$CHNR_PATH" ]; then
44
+ if ! cmp -s tmp/china_ip_route.ipset "$CHNR_PATH"; then
45
+ echo "China IP Route list has been updated, replacing old version."
46
+ cp tmp/china_ip_route.ipset "$CHNR_PATH"
47
+ echo "CHNR_UPDATED=1" >> $GITHUB_ENV
48
+ else
49
+ echo "China IP Route list is up to date."
50
+ fi
51
+ else
52
+ echo "China IP Route list file doesn't exist, creating it."
53
+ cp tmp/china_ip_route.ipset "$CHNR_PATH"
54
+ echo "CHNR_UPDATED=1" >> $GITHUB_ENV
55
+ fi
56
+
57
+ curl -sSL https://ispip.clang.cn/all_cn_ipv6.txt -o tmp/china_ip6_route.ipset
58
+
59
+ mkdir -p $(dirname $CHNR6_PATH)
60
+
61
+ if [ -f "$CHNR6_PATH" ]; then
62
+ if ! cmp -s tmp/china_ip6_route.ipset "$CHNR6_PATH"; then
63
+ echo "China IP6 Route list has been updated, replacing old version."
64
+ cp tmp/china_ip6_route.ipset "$CHNR6_PATH"
65
+ echo "CHNR6_UPDATED=1" >> $GITHUB_ENV
66
+ else
67
+ echo "China IP6 Route list is up to date."
68
+ fi
69
+ else
70
+ echo "China IP6 Route list file doesn't exist, creating it."
71
+ cp tmp/china_ip6_route.ipset "$CHNR6_PATH"
72
+ echo "CHNR6_UPDATED=1" >> $GITHUB_ENV
73
+ fi
74
+
75
+ - name : Update MetaCubeXD UI
76
+ run : |
77
+ echo "Downloading latest MetaCubeXD UI from gh-pages branch..."
78
+ mkdir -p tmp/metacubexd
79
+ git clone --depth=1 -b gh-pages https://github.com/MetaCubeX/metacubexd.git tmp/metacubexd_clone
80
+
81
+ mkdir -p "$METACUBEXD_PATH"
82
+
83
+ if [ -d "$METACUBEXD_PATH" ]; then
84
+ if ! diff -r tmp/metacubexd_clone "$METACUBEXD_PATH" > /dev/null 2>&1; then
85
+ echo "MetaCubeXD UI has been updated, replacing old version."
86
+ rm -rf "$METACUBEXD_PATH"/*
87
+ cp -rf tmp/metacubexd_clone/* "$METACUBEXD_PATH"
88
+ echo "METACUBEXD_UPDATED=1" >> $GITHUB_ENV
89
+ else
90
+ echo "MetaCubeXD UI is up to date."
91
+ fi
92
+ else
93
+ echo "MetaCubeXD UI directory doesn't exist, creating it."
94
+ mkdir -p "$METACUBEXD_PATH"
95
+ cp -rf tmp/metacubexd_clone/* "$METACUBEXD_PATH"
96
+ echo "METACUBEXD_UPDATED=1" >> $GITHUB_ENV
97
+ fi
98
+
99
+ echo "MetaCubeXD UI update check completed."
100
+
101
+ - name : Update Yacd UI
102
+ run : |
103
+ echo "Downloading latest Yacd UI from MetaCubeX/metacubexd gh-pages branch..."
104
+ mkdir -p tmp/yacd
105
+ git clone --depth=1 -b gh-pages https://github.com/MetaCubeX/metacubexd.git tmp/yacd_clone
106
+
107
+ mkdir -p "$YACD_PATH"
108
+
109
+ if [ -d "$YACD_PATH" ]; then
110
+ if ! diff -r tmp/yacd_clone "$YACD_PATH" > /dev/null 2>&1; then
111
+ echo "Yacd UI has been updated, replacing old version."
112
+ rm -rf "$YACD_PATH"/*
113
+ cp -rf tmp/yacd_clone/* "$YACD_PATH"
114
+ echo "YACD_UPDATED=1" >> $GITHUB_ENV
115
+ else
116
+ echo "Yacd UI is up to date."
117
+ fi
118
+ else
119
+ echo "Yacd UI directory doesn't exist, creating it."
120
+ mkdir -p "$YACD_PATH"
121
+ cp -rf tmp/yacd_clone/* "$YACD_PATH"
122
+ echo "YACD_UPDATED=1" >> $GITHUB_ENV
123
+ fi
124
+
125
+ echo "Yacd UI update check completed."
126
+
127
+ - name : Update ZashBoard UI
128
+ run : |
129
+ echo "Downloading latest Clash Dashboard UI from gh-pages branch..."
130
+ mkdir -p tmp/zashboard
131
+ git clone --depth=1 -b gh-pages https://github.com/zzzgydi/clash-dashboard.git tmp/zashboard_clone
132
+
133
+ mkdir -p "$ZASHBOARD_PATH"
134
+
135
+ if [ -d "$ZASHBOARD_PATH" ]; then
136
+ if ! diff -r tmp/zashboard_clone "$ZASHBOARD_PATH" > /dev/null 2>&1; then
137
+ echo "ZashBoard UI has been updated, replacing old version."
138
+ rm -rf "$ZASHBOARD_PATH"/*
139
+ cp -rf tmp/zashboard_clone/* "$ZASHBOARD_PATH"
140
+ echo "ZASHBOARD_UPDATED=1" >> $GITHUB_ENV
141
+ else
142
+ echo "ZashBoard UI is up to date."
143
+ fi
144
+ else
145
+ echo "ZashBoard UI directory doesn't exist, creating it."
146
+ mkdir -p "$ZASHBOARD_PATH"
147
+ cp -rf tmp/zashboard_clone/* "$ZASHBOARD_PATH"
148
+ echo "ZASHBOARD_UPDATED=1" >> $GITHUB_ENV
149
+ fi
150
+
151
+ echo "ZashBoard UI update check completed."
152
+
153
+ - name : Update GeoIP and GeoSite files
154
+ run : |
155
+ RULES_RELEASE=$(curl -s https://api.github.com/repos/Loyalsoldier/v2ray-rules-dat/releases/latest | jq -r '.tag_name')
156
+ echo "Latest v2ray-rules-dat version: $RULES_RELEASE"
157
+
158
+ curl -sSL "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/download/${RULES_RELEASE}/geoip.dat" -o tmp/GeoIP.dat
159
+
160
+ mkdir -p $(dirname "$GEOIP_PATH")
161
+ if [ -f "$GEOIP_PATH" ]; then
162
+ if ! cmp -s tmp/GeoIP.dat "$GEOIP_PATH"; then
163
+ echo "GeoIP.dat has been updated, replacing old version."
164
+ cp tmp/GeoIP.dat "$GEOIP_PATH"
165
+ echo "GEOIP_UPDATED=1" >> $GITHUB_ENV
166
+ else
167
+ echo "GeoIP.dat is up to date."
168
+ fi
169
+ else
170
+ echo "GeoIP.dat file doesn't exist, creating it."
171
+ cp tmp/GeoIP.dat "$GEOIP_PATH"
172
+ echo "GEOIP_UPDATED=1" >> $GITHUB_ENV
173
+ fi
174
+
175
+ curl -sSL "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/download/${RULES_RELEASE}/geosite.dat" -o tmp/GeoSite.dat
176
+
177
+ mkdir -p $(dirname "$GEOSITE_PATH")
178
+ if [ -f "$GEOSITE_PATH" ]; then
179
+ if ! cmp -s tmp/GeoSite.dat "$GEOSITE_PATH"; then
180
+ echo "GeoSite.dat has been updated, replacing old version."
181
+ cp tmp/GeoSite.dat "$GEOSITE_PATH"
182
+ echo "GEOSITE_UPDATED=1" >> $GITHUB_ENV
183
+ else
184
+ echo "GeoSite.dat is up to date."
185
+ fi
186
+ else
187
+ echo "GeoSite.dat file doesn't exist, creating it."
188
+ cp tmp/GeoSite.dat "$GEOSITE_PATH"
189
+ echo "GEOSITE_UPDATED=1" >> $GITHUB_ENV
190
+ fi
191
+
192
+ - name : Update Country.mmdb
193
+ run : |
194
+ curl -sSL "https://github.com/alecthw/mmdb_china_ip_list/releases/latest/download/Country-lite.mmdb" -o tmp/Country.mmdb
195
+
196
+ mkdir -p $(dirname "$COUNTRY_MMDB_PATH")
197
+ if [ -f "$COUNTRY_MMDB_PATH" ]; then
198
+ if ! cmp -s tmp/Country.mmdb "$COUNTRY_MMDB_PATH"; then
199
+ echo "Country.mmdb has been updated, replacing old version."
200
+ cp tmp/Country.mmdb "$COUNTRY_MMDB_PATH"
201
+ echo "MMDB_UPDATED=1" >> $GITHUB_ENV
202
+ else
203
+ echo "Country.mmdb is up to date."
204
+ fi
205
+ else
206
+ echo "Country.mmdb file doesn't exist, creating it."
207
+ cp tmp/Country.mmdb "$COUNTRY_MMDB_PATH"
208
+ echo "MMDB_UPDATED=1" >> $GITHUB_ENV
209
+ fi
210
+
211
+ - name : Commit changes
212
+ run : |
213
+ git config user.name 'github-actions[bot]'
214
+ git config user.email 'github-actions[bot]@users.noreply.github.com'
215
+
216
+ UPDATED=0
217
+ UPDATE_MSG="Chore: update resources:"
218
+
219
+ if [ "${CHNR_UPDATED}" = "1" ]; then
220
+ UPDATE_MSG="${UPDATE_MSG} china_ip_route.ipset"
221
+ UPDATED=1
222
+ fi
223
+
224
+ if [ "${CHNR6_UPDATED}" = "1" ]; then
225
+ UPDATE_MSG="${UPDATE_MSG} china_ip6_route.ipset"
226
+ UPDATED=1
227
+ fi
228
+
229
+ if [ "${GEOIP_UPDATED}" = "1" ]; then
230
+ UPDATE_MSG="${UPDATE_MSG} GeoIP.dat"
231
+ UPDATED=1
232
+ fi
233
+
234
+ if [ "${GEOSITE_UPDATED}" = "1" ]; then
235
+ UPDATE_MSG="${UPDATE_MSG} GeoSite.dat"
236
+ UPDATED=1
237
+ fi
238
+
239
+ if [ "${MMDB_UPDATED}" = "1" ]; then
240
+ UPDATE_MSG="${UPDATE_MSG} Country.mmdb"
241
+ UPDATED=1
242
+ fi
243
+
244
+ if [ "${METACUBEXD_UPDATED}" = "1" ]; then
245
+ UPDATE_MSG="${UPDATE_MSG} MetaCubeXD"
246
+ UPDATED=1
247
+ fi
248
+
249
+ if [ "${YACD_UPDATED}" = "1" ]; then
250
+ UPDATE_MSG="${UPDATE_MSG} Yacd"
251
+ UPDATED=1
252
+ fi
253
+
254
+ if [ "${ZASHBOARD_UPDATED}" = "1" ]; then
255
+ UPDATE_MSG="${UPDATE_MSG} Zashboard"
256
+ UPDATED=1
257
+ fi
258
+
259
+ if [ $UPDATED -eq 1 ]; then
260
+ git add .
261
+ git commit -m "${UPDATE_MSG}"
262
+ git push
263
+ echo "Changes committed and pushed to repository."
264
+ else
265
+ echo "No changes to commit."
266
+ fi
267
+
268
+ rm -rf tmp
0 commit comments