vpnbot-xray-patches/README.md
loop-uh d63d5c5195
All checks were successful
Follow official Xray dev releases / candidate (push) Successful in 2m59s
Test and build VPnBot Xray patches / test-and-build (push) Successful in 3m51s
Автоматизировать выпуск Xray candidate в proven
2026-08-07 17:20:25 +03:00

84 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# VPnBot Xray patches
Этот репозиторий хранит только наши изменения для Xray-core. Полной копии
чужого проекта здесь нет: `scripts/prepare-source.sh` получает точный тег из
официального [`XTLS/Xray-core`](https://github.com/XTLS/Xray-core), проверяет
его commit и последовательно накладывает три файла из `patches/`.
Патчи добавляют capability-маркер `vpnbot-active-revoke-v3`. Он означает, что
после удаления пользователя через Xray API закрываются уже установленные
VLESS, Trojan, VMess и Shadowsocks-сессии этого пользователя. Обычный
официальный Xray запрещает только новые подключения; поэтому до принятия этого
механизма upstream-проектом VPnBot не может безопасно устанавливать чистый
официальный бинарник на платные узлы.
## Граница источников
- чужой исходный код загружается только из официального GitHub XTLS;
- Forgejo хранит наши патчи, проверки, сборочные сценарии и готовые релизы;
- тег и commit upstream закреплены в `upstream.env` для ручной сборки, а
автоматический выпуск создаёт отдельный build-env с теми же строгими
проверками;
- SHA-256 каждого патча закреплён в `patches/series`;
- Actions заново применяет патчи к официальному исходнику, запускает профильные
тесты и собирает три Linux-архива, которые используются VPnBot.
## Автоматические dev-релизы
Workflow `Follow official Xray dev releases` каждые шесть часов проверяет
официальные GitHub Releases `XTLS/Xray-core`. Официальный prerelease/dev-тег
для него является нормальным входом, но не становится стабильным релизом
VPnBot сразу.
Цепочка разделена на два состояния:
1. Actions разрешает тег в точный официальный commit, применяет патчи, запускает
unit- и real-process-тесты, собирает архивы и публикует Forgejo prerelease с
суффиксом `-candidate.1`.
2. Root-only таймер на production-хосте устанавливает точный кандидат на
выделенный canary-узел, проверяет живую конфигурацию и запускает изолированный
VLESS-сценарий с двумя непрерывными потоками. После удаления пользователя A
поток A должен закрыться не позднее 10 секунд, а поток B — продолжить
работу.
3. Только после этого создаётся обычный `proven`-релиз. Его файлы копируются из
candidate без пересборки и поэтому имеют ровно те же SHA-256.
Стабильные Xray-updater-таймеры на узлах используют канал `stable`: они
игнорируют `prerelease=true` и видят только proven-релизы. При конфликте патча,
падении теста, недоступном canary или неуспешном отзыве новый stable-релиз не
создаётся.
Каждый candidate содержит `vpnbot-xray-release-manifest.json` с официальным
тегом/commit, SHA-256 патчей и архивов. Proven дополнительно содержит
`vpnbot-xray-pilot-proof.json`, то есть машинно проверяемый отчёт живого пилота.
Полная модель состояний, гонок и rollback описана в
[`docs/2026-08-07-automatic-dev-release-plan.md`](docs/2026-08-07-automatic-dev-release-plan.md).
Production-компонент устанавливается от root:
```bash
scripts/install_promoter.sh
```
Перед включением таймера нужен runtime-файл
`/etc/vpnbot-xray-release-promoter.env` по примеру из `systemd/` и root-only
Forgejo-токен с областью `write:repository`. Токен, SSH-ключ и состояние пилота
не хранятся в Git.
## Локальная проверка
```bash
scripts/test-patches.sh
scripts/build-release.sh ./release-assets
```
Для подготовки исходного дерева без сборки:
```bash
scripts/prepare-source.sh ./xray-with-vpnbot-patches
```
Каталоги назначения должны отсутствовать или быть пустыми.
Исходный Xray-core и изменённые файлы распространяются по Mozilla Public
License 2.0. Полный текст лицензии находится в `LICENSE`.