seedex-agent
Эта страница описывает, как устроен репозиторий seedex-agent и как его собирать и линтить.
Требования
- Go 1.22 для сборки Link API.
- shfmt 3.13 и shellcheck 0.11 для линта.
- Сервер на Ubuntu 24.04 или новее, чтобы установить сборку.
Структура проекта
sdx: команда: диспетчер, статус, help и firewall.lib/common.sh: общие вспомогательные функции: файрвол, systemd и логирование.lib/vpn.sh,lib/proxy.shиlib/link.sh: по библиотеке на сервис.vpn.shзагружает модули протоколов изlib/vpn/и передаёт им действия.lib/vpn/awg.shиlib/vpn/wg.sh: модули VPN-протоколов. Каждый определяет функцииvpn_<proto>_<action>; оба опираются наlib/wireguard.sh, общий код семейства WireGuard, аawg.shдобавляет параметры обфускации и установку из PPA.link/main.go: Link API:GET /v1/configsиPOST /v1/run.install.sh: скрипт, который запускают пользователи. Он скачивает релиз, если запущен не из клона.version: версия.
Сборка
Выполните команду:
make buildКоманда собирает seedex-link для amd64 и arm64 в build/ вместе с архивом релиза и checksums.txt.
Чтобы установить сборку на сервер, скопируйте sdx, version, lib, install.sh и build на сервер и выполните там bash install.sh files. Режим files обновляет скрипты и бинарник существующей установки.
Линт
make lint прогоняет shfmt и shellcheck по shell-файлам, а gofmt и go vet — по коду на Go.
Участие
Сообщения об ошибках, предложения и пул-реквесты приветствуются. Оригинал этого раздела на английском — CONTRIBUTING.md в репозитории.
Сообщить об ошибке
Откройте issue и укажите:
- Версию Ubuntu.
- Вывод
sdx version,sdx, а также лог затронутого сервиса:journalctl -u seedex-vpn-awg,-u seedex-vpn-wg,-u sing-boxили-u seedex-link. - Что вы сделали, чего ожидали и что произошло вместо этого.
Перед публикацией уберите из вывода ключи, токены, отпечатки сертификатов и публичные IP-адреса.
Предложить изменение
Для небольшого исправления откройте пул-реквест. Для новой функции или изменения поведения сначала откройте issue, чтобы договориться о подходе до того, как вы потратите на него время.
Стиль кода
- Shell-код —
bash, он выполняется только на сервере. - Форматирование задают shfmt, gofmt и
.editorconfig: табы, строки до 100 символов. - Каждый shell-файл проходит shellcheck с правилами из
.shellcheckrc. Не добавляйте# shellcheck disable, чтобы заглушить предупреждение, которое можно исправить. - Link API в
link/— Go только со стандартной библиотекой. Так и оставьте: это один бинарник, который скачивает установщик. - Следуйте окружающему коду: именованию, плотности комментариев и способу сообщать об ошибках.
Проверка
Перед пушем запустите make lint (см. Линт); CI выполняет ту же цель на каждый push и пул-реквест. Автоматических тестов нет: соберите через make build, установите на сервер через bash install.sh files, проверьте изменение: затронутые команды sdx, а также соединённый роутер, если оно касается того, что отдаёт Link API. Напишите в пул-реквесте, что вы проверили.
Коммиты
- Одна тема на коммит. Последующие исправления складывайте в тот коммит, который они исправляют, а не добавляйте вторым.
- Заголовок — строчными буквами, в настоящем времени, начинается с области:
proxy: start without protocols is a no-op,link: run sdx over the API,vpn: protocol modules, wg and awg. Области — сервисы (vpn,proxy,link),install,lintиdocs. - Не меняйте
version. Мейнтейнеры поднимают версию черезmake bumpпри релизе; тегv*собирает релиз.
Пул-реквесты
- Целевая ветка —
main; изменение должно быть достаточно небольшим, чтобы его можно было просмотреть за один раз. - Опишите, что делает изменение и зачем. Если есть issue, сошлитесь на него.
- Изменение видимого пользователю поведения меняет и документацию: README в репозитории и страницы в seedex-docs, где русская версия зеркальна английской.
- CI должен проходить.
Лицензия
Вклад принимается на условиях лицензии проекта AGPL-3.0. Название и логотип Seedex регулируются политикой товарных знаков, а не лицензией.
