@@ -21,28 +21,31 @@ jobs:
2121 ALL=$(echo "$SUB" | grep -E '^(vless|vmess|trojan)://')
2222
2323 RUSSIA=$(echo "$ALL" | grep -Ei 'russia' || true)
24- NON_RUSSIA=$(echo "$ALL" | grep -Evi 'russia' || true)
24+
25+ NON_RUSSIA=$(echo "$ALL" | grep -Evi 'russia' | shuf || true)
2526
2627 make_config () {
2728 SIZE=$1
2829 RU_PREF=$2
2930 OUT=$3
3031
31- # Берём ТОЛЬКО русские узлы в количестве RU_PREF
32+ # Берем указанное количество русских ключей
3233 RU=$(echo "$RUSSIA" | head -n "$RU_PREF")
3334 RU_COUNT=$(echo "$RU" | grep -c . || true)
3435
35- # Если русских не хватает до SIZE, добираем НЕ-русскими
36- if [ "$RU_COUNT" -lt "$SIZE" ]; then
37- NEED=$((SIZE - RU_COUNT))
38- NONRU=$(echo "$NON_RUSSIA" | shuf | head -n "$NEED")
39- FINAL=$(printf "%s\n%s\n" "$RU" "$NONRU" | grep .)
40- else
41- # Если русских достаточно — используем только их (обрезаем до SIZE)
42- FINAL=$(echo "$RU" | head -n "$SIZE")
36+ # Если русских меньше, чем RU_PREF, добираем из NON_RUSSIA
37+ NEED=$((SIZE - RU_COUNT))
38+ NONRU=""
39+ if [ "$NEED" -gt 0 ]; then
40+ NONRU=$(echo "$NON_RUSSIA" | head -n "$NEED")
4341 fi
4442
43+ # Финальный список (только русские, если хватает)
44+ FINAL=$(printf "%s\n%s\n" "$RU" "$NONRU" | grep .)
45+
4546 echo "Building $OUT with $(echo "$FINAL" | grep -c .) nodes..."
47+ echo " - Russian nodes: $RU_COUNT"
48+ echo " - Non-Russian nodes: $(echo "$NONRU" | grep -c . || echo 0)"
4649
4750 jq -n --arg input "$FINAL" '{
4851 core: "singbox",
6063 > "$OUT"
6164 }
6265
63- # Все конфиги, кроме foreign, теперь используют ТОЛЬКО русские ключи,
64- # добавляя NON-RU только если русских не хватает до требуемого размера
65- make_config 5 5 config5.json
66- make_config 7 7 config7.json
67- make_config 10 10 config10.json
68-
69- # PURE FOREIGN (без изменений — только иностранные узлы)
7066 make_foreign () {
7167 SIZE=$1
7268 OUT=$2
@@ -89,21 +85,52 @@ jobs:
8985 > "$OUT"
9086 }
9187
92- make_foreign 5 config5_foreign.json
93- make_foreign 10 config10_foreign.json
88+ # ---------------- RU HYBRID (только русские, NON-RU только если не хватает) ----------------
89+ make_config 5 5 config5.json # 5 русских, если не хватает - добираем
90+ make_config 7 7 config7.json # 7 русских
91+ make_config 10 10 config10.json # 10 русских
9492
95- # shuffled duplicates (теперь тоже с приоритетом русских )
93+ # shuffled duplicates (та же логика )
9694 make_config 5 5 config5_b.json
9795 make_config 7 7 config7_b.json
9896 make_config 10 10 config10_b.json
9997
98+ # ---------------- FOREIGN ONLY (только нерусские) ----------------
99+ make_foreign 5 config5_foreign.json
100+ make_foreign 10 config10_foreign.json
101+
102+ # ---------------- PATCH URLTEST ----------------
103+ patch_interval () {
104+ FILE=$1
105+ INTERVAL=$2
106+
107+ echo "Patching $FILE -> interval=$INTERVAL"
108+
109+ jq --arg interval "$INTERVAL" '
110+ (.outbounds[] | select(.type=="urltest") | .interval) = $interval |
111+ (.outbounds[] | select(.type=="urltest") | .tolerance) = 50
112+ ' "$FILE" > tmp.json && mv tmp.json "$FILE"
113+ }
114+
115+ # 5-series → 1m
116+ patch_interval config5.json "1m"
117+ patch_interval config5_b.json "1m"
118+ patch_interval config5_foreign.json "1m"
119+
120+ # all others → 2m
121+ patch_interval config7.json "2m"
122+ patch_interval config7_b.json "2m"
123+ patch_interval config10.json "2m"
124+ patch_interval config10_b.json "2m"
125+ patch_interval config10_foreign.json "2m"
126+
100127 - name : Commit configs
101128 run : |
102129 git config user.name "github-actions"
103130 git config user.email "actions@github.com"
104131
105132 git add config*.json
106133
107- git commit -m "extended multi-config system " || exit 0
134+ git commit -m "auto update sing-box configs " || exit 0
108135
109136 git push
0 commit comments