Skip to content

Build SingBox Configs #37

Build SingBox Configs

Build SingBox Configs #37

Workflow file for this run

name: Build SingBox Configs
on:
schedule:
- cron: '0 * * * *'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Build configs
run: |
SUB=$(curl -s "https://raw.githack.com/igareck/vpn-configs-for-russia/main/Vless-Reality-White-Lists-Rus-Mobile.txt" | tr -d '\r')
ALL=$(echo "$SUB" | grep -E '^(vless|vmess|trojan)://')
RUSSIA=$(echo "$ALL" | grep -Ei 'russia' || true)
NON_RUSSIA=$(echo "$ALL" | grep -Evi 'russia' | shuf || true)
make_config () {
SIZE=$1
RU_PREF=$2
OUT=$3
# Берем указанное количество русских ключей
RU=$(echo "$RUSSIA" | head -n "$RU_PREF")
RU_COUNT=$(echo "$RU" | grep -c . || true)
# Если русских меньше, чем RU_PREF, добираем из NON_RUSSIA
NEED=$((SIZE - RU_COUNT))
NONRU=""
if [ "$NEED" -gt 0 ]; then
NONRU=$(echo "$NON_RUSSIA" | head -n "$NEED")
fi
# Финальный список (только русские, если хватает)
FINAL=$(printf "%s\n%s\n" "$RU" "$NONRU" | grep .)
echo "Building $OUT with $(echo "$FINAL" | grep -c .) nodes..."
echo " - Russian nodes: $RU_COUNT"
echo " - Non-Russian nodes: $(echo "$NONRU" | grep -c . || echo 0)"
jq -n --arg input "$FINAL" '{
core: "singbox",
input: $input,
options: {
addTun: true,
addSocks: true,
genClashSecret: false,
useExtended: false
}
}' \
| curl -sS -X POST "https://api.web2core.workers.dev/" \
-H "Content-Type: application/json" \
--data-binary @- \
> "$OUT"
}
make_foreign () {
SIZE=$1
OUT=$2
FOREIGN=$(echo "$NON_RUSSIA" | shuf | head -n "$SIZE")
jq -n --arg input "$FOREIGN" '{
core: "singbox",
input: $input,
options: {
addTun: true,
addSocks: true,
genClashSecret: false,
useExtended: false
}
}' \
| curl -sS -X POST "https://api.web2core.workers.dev/" \
-H "Content-Type: application/json" \
--data-binary @- \
> "$OUT"
}
# ---------------- RU HYBRID (только русские, NON-RU только если не хватает) ----------------
make_config 5 5 config5.json # 5 русских, если не хватает - добираем
make_config 7 7 config7.json # 7 русских
make_config 10 10 config10.json # 10 русских
# shuffled duplicates (та же логика)
make_config 5 5 config5_b.json
make_config 7 7 config7_b.json
make_config 10 10 config10_b.json
# ---------------- FOREIGN ONLY (только нерусские) ----------------
make_foreign 5 config5_foreign.json
make_foreign 10 config10_foreign.json
# ---------------- PATCH URLTEST ----------------
patch_interval () {
FILE=$1
INTERVAL=$2
echo "Patching $FILE -> interval=$INTERVAL"
jq --arg interval "$INTERVAL" '
(.outbounds[] | select(.type=="urltest") | .interval) = $interval |
(.outbounds[] | select(.type=="urltest") | .tolerance) = 50
' "$FILE" > tmp.json && mv tmp.json "$FILE"
}
# 5-series → 1m
patch_interval config5.json "1m"
patch_interval config5_b.json "1m"
patch_interval config5_foreign.json "1m"
# all others → 2m
patch_interval config7.json "2m"
patch_interval config7_b.json "2m"
patch_interval config10.json "2m"
patch_interval config10_b.json "2m"
patch_interval config10_foreign.json "2m"
- name: Commit configs
run: |
git config user.name "github-actions"
git config user.email "actions@github.com"
git add config*.json
git commit -m "auto update sing-box configs" || exit 0
git push
# === НОВЫЙ ШАГ ДЛЯ ЗАГРУЗКИ НА ЯНДЕКС.ДИСК ===
- name: Upload configs to Yandex Disk
uses: kirpichk/yandex-disk-publish@v1
with:
token: ${{ secrets.YANDEX_TOKEN }}
source: './config*.json' # Загрузить все файлы, начинающиеся с config
target: '/SingBox_Configs' # Путь к ПАПКЕ на вашем Яндекс.Диске
# Опционально: удалить старые файлы в папке перед загрузкой, чтобы там были только новые
cleanup: 'true'