Сборщик списков для iplist-go. Каждые шесть часов получает master из rekryt/iplist, beta и russia из публичных API, применяет custom, загружает external и актуальные префиксы ASN.
Готовые данные публикуются в релизе data. Постоянный адрес манифеста:
https://github.com/dexogen/iplist-go-sidecar/releases/download/data/manifest.json
Приложение получает изменения без пересборки образа. Файлы объектов имеют имена по SHA-256 сжатого содержимого. Сначала публикуются объекты, затем манифест; при временной недоступности манифеста потребитель сохраняет предыдущую версию. Предыдущие объекты удерживаются минимум два дня и пока они нужны текущему или предыдущему снимку. Генерируемые снимки не коммитятся в Git.
С 22 сентября 2026 года каталог config/ удален и из текущего дерева, и из истории Git. После этой миграции старые рабочие копии следует клонировать заново; старые ветки не нужно сливать обратно. История сборщика и пользовательских конфигов сохранена. Публикации данных доступны независимо от истории Git через релиз data.
- Gzip, два параллельных запроса, повторы с задержкой и учет
Retry-After. - Проверка структуры, IP/CIDR и семейств адресов. Отдельные некорректные доменные строки исключаются с перечислением в
rejected_domains; полностью поврежденное поле отклоняется. - При исчезновении сайта, обнулении непустого поля или уменьшении более чем на 35% сохраняется предыдущая запись. Проверка действует и на небольшие списки.
- Смена группы не меняет идентичность сайта. Поврежденный JSON не восстанавливается догадками: поля запрашиваются отдельно, а при неудаче сохраняется прежний сайт.
- Наборы обновляются независимо. Манифест сообщает
status,last_success_at,checked_atи причины сохранения старых данных. Новая публикация не делает старый источник свежим. - Состояние первичных источников и внешних ресурсов хранится отдельным сжатым объектом
state, чтобы пользовательские дополнения не накапливались при повторных обновлениях.
Для намеренного удаления или подтвержденного большого сокращения есть ручной параметр workflow allow_removals. Он разрешает уменьшения для одного запуска; ошибки структуры и контрольных сумм по-прежнему отклоняются.
custom/<set>/<group>/<site>.json
Массивы объединяются с первичными данными, replace дополняется, явные dns и timeout заменяют исходные. Поле as содержит ASN, например AS57976. Домены, сети, дополнительные источники и ASN разрешаются перед публикацией. Локальный DNS выполняется отдельно каждой установкой приложения.
python -m unittest discover -s tools -p 'test_*.py' -v
python tools/update-configs.py --output distОбычный запуск требует предыдущий опубликованный снимок. Для первоначальной загрузки из старого дерева конфигов:
python tools/update-configs.py --seed-dir config --output dist--previous-url позволяет использовать другой HTTP-хостинг, включая Pages. Публикация в release использует GH_TOKEN только в GitHub Actions; потребителям токен не нужен. Подробности текущего прохода находятся в collection-summary.json и отчете workflow.