You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

10 KiB

Правила разработки

Основные принципы

Система контроля версий

Код проекта X размещен на GitHub:

Вы можете использовать Git для получения кода.

Ветки (Branch)

  • Основной веткой проекта является main.
  • Основной веткой для выпуска релизов также является main.
  • Необходимо убедиться, что main в любой момент времени может быть скомпилирован и работает корректно.
  • Если вам нужно разработать новую функцию, создайте новую ветку для разработки. После завершения разработки и тщательного тестирования объедините ее с основной веткой.
  • Удалите ветки, которые были объединены с основной веткой и больше не нужны.

Релизы (Release)

  • Создайте два канала выпуска: для предварительных версий и для стабильных версий.
    • Предварительные версии могут быть ежедневными сборками, в основном используются для тестирования в определенных ситуациях, ознакомления с новыми функциями и получения обратной связи для дальнейшего улучшения.
    • Стабильные версии выпускаются по расписанию (например, ежемесячно) и содержат стабильные изменения.

Использование других проектов

  • Golang
    • В коде рекомендуется использовать стандартную библиотеку Golang и библиотеки из golang.org/x/.
    • Если вам нужно использовать другие проекты, сначала создайте issue для обсуждения.
  • Другие
    • Можно использовать любые инструменты, которые не нарушают лицензии обеих сторон и полезны для проекта.

Процесс разработки

Перед написанием кода

Если вы обнаружили какую-либо проблему или у вас есть идеи по улучшению проекта, создайте issue для обсуждения, чтобы избежать дублирования усилий и траты времени на написание кода.

Изменение кода

  • Golang
    • См. Effective Go.
    • Перед каждой отправкой (push) выполните команду: go generate core/format.go.
    • Если вам нужно изменить protobuf, например, добавить новый параметр конфигурации, выполните команду: go generate core/proto.go.
    • Перед отправкой pull request рекомендуется запустить тесты: go test ./....
    • Перед отправкой pull request рекомендуется, чтобы новый код имел покрытие кода (code coverage) не менее 70%.
  • Другие
    • Обратите внимание на читаемость кода.

Запрос на включение изменений (Pull Request)

  • Перед отправкой PR сначала выполните команду git pull https://github.com/XTLS/Xray-core.git, чтобы убедиться, что слияние пройдет гладко.
  • Один PR должен решать только одну задачу. Если вы исправляете несколько ошибок, отправьте по одному PR для каждой ошибки.
  • Из-за особенностей Golang (пути к пакетам) процесс PR для проектов Go отличается от других проектов. Рекомендуемый процесс следующий:
    1. Сначала сделайте форк (fork) проекта, создайте свой собственный репозиторий github.com/<your_name>/Xray-core.git.
    2. Клонируйте свой репозиторий Xray локально: git clone https://github.com/<your_name>/Xray-core.git.
    3. Создайте новую ветку на основе ветки main, например, git branch issue24 main.
    4. Внесите изменения в новую ветку и зафиксируйте их (commit).
    5. Перед отправкой (push) измененной ветки в свой репозиторий переключитесь на ветку main и выполните команду git pull https://github.com/XTLS/Xray-core.git, чтобы получить последнюю версию кода.
    6. Если на предыдущем шаге были получены новые изменения, переключитесь на созданную вами ветку и выполните команду git rebase main для слияния веток. Если возникнут конфликты файлов, их необходимо разрешить.
    7. После завершения предыдущего шага вы можете отправить свою ветку в свой репозиторий: git push -u origin your-branch.
    8. Наконец, отправьте PR из своей ветки в ветку main репозитория XTLS/Xray-core.
    9. В заголовке и описании PR четко опишите проблему, которую решает этот PR / новую функцию / цель изменений кода.
    10. Дождитесь ответа разработчиков.

Изменения кода

Проблемы с функциональностью

Отправьте хотя бы один тестовый пример (Test Case), чтобы проверить изменения в существующей функциональности.

Проблемы с производительностью

Отправьте необходимые тестовые данные, чтобы подтвердить проблемы с производительностью существующего кода или улучшение производительности нового кода.

Новые функции

  • Если новая функция не влияет на существующую функциональность, предоставьте переключатель (например, флаг) для ее включения/отключения и оставьте ее отключенной по умолчанию.
  • Перед разработкой новой крупной функции (например, добавления нового протокола) создайте issue для обсуждения.

Другое

Зависит от конкретной ситуации.

Стандарты кодирования Xray

Следующие правила применяются к коду Golang в Xray.

Структура кода

Xray-core
├── app        // Модули приложений
│   ├── router // Маршрутизация
├── common     // Общий код
├── proxy      // Протоколы связи
│   ├── blackhole
│   ├── dokodemo-door
│   ├── freedom
│   ├── socks
│   ├── vmess
├── transport  // Транспортные модули

Стандарты кодирования

В основном соответствуют рекомендациям Golang, за некоторыми исключениями. Приведены здесь для удобства ознакомления с Golang.

Именование

  • Для имен файлов и каталогов по возможности используйте одно английское слово, например, hello.go.
    • Если это невозможно, используйте дефисы для разделения слов в имени каталога и подчеркивания для разделения слов в имени файла, например, hello-world/hello_again.go.
    • Тестовый код должен иметь суффикс _test.go.
  • Для типов используйте нотацию PascalCase, например, ConnectionHandler.
    • Сокращения не обязательно писать в нижнем регистре, то есть HTML не нужно писать как Html.
  • Для публичных переменных-членов также используйте нотацию PascalCase.
  • Для приватных переменных-членов используйте нотацию camelCase, например, privateAttribute.
  • Для удобства рефакторинга рекомендуется использовать нотацию PascalCase для всех методов.
    • Полностью приватные типы помещайте в каталог internal.

Организация кода

  • Один файл должен содержать один основной тип и связанные с ним приватные функции.
  • Тестовые файлы, такие как Mock и другие утилиты, помещайте в подкаталог testing.