Участие в разработке
Gately — проект с открытым кодом, развиваемый сообществом; Issue и Pull Request приветствуются. Репозиторий: https://github.com/wangwanjie/gately
Локальная разработка
Зависимости: Go 1.26+, Node.js 24+, pnpm.
bash
make web # сборка фронтенда (вывод в web/dist, встраивается через go:embed)
make build # компиляция bin/gately
make test # go test -race ./...
make lint # gofmt, go vet, проверка типов фронтендаПри разработке фронтенда запустите cd web && pnpm dev: запросы /api проксируются на локальный 127.0.0.1:16680.
Правила
- Код совместимости должен опираться только на публично наблюдаемое поведение, интерфейсы и форматы конфигурации. Не отправляйте код, скопированный из сторонних бинарных файлов или фронтенд-сборок.
- Новому модулю нужны: структура конфигурации и валидация, запуск и остановка во время работы, REST-интерфейс, юнит-тесты; модуль, который можно мигрировать из Lucky, реализует
luckyimport.Importer, а модуль, статус которого показывается на странице «Обзор», реализуетmodule.Summarizer. - Комментарии в коде пишутся на китайском; в управляющих конструкциях обязательны фигурные скобки.
Дополнительные тесты
Часть тестов по умолчанию пропускается и требует дополнительных условий:
| Тест | Как включить |
|---|---|
| Сквозной тест ACME (Pebble) | Установите pebble и pebble-challtestsrv, задайте GATELY_PEBBLE_BIN, GATELY_PEBBLE_SRC |
| Реальные публичные STUN-серверы | GATELY_NET_TEST=1 |
| Проверка импорта на реальной конфигурации Lucky | GATELY_LUCKY_SAMPLE и другие, см. TestImportRealSample в каждом модуле |
Лицензия
Переводы
- Строки интерфейса управления хранятся в
web/src/locales/<language>/<namespace>.json. Исходный язык — упрощённый китайский; при добавлении или изменении строк обновите как минимумzh-CNиenи перед отправкой выполнитеcd web && node scripts/check-i18n.mjs. Правила описаны вweb/src/locales/README.md. - Языковые пакеты сайта хранятся в
website/.vitepress/i18n/<language>.json, а страницы каждого языка — вwebsite/<language dir>/. - Тексты бэкенда во время работы (сообщения об ошибках, журналы, уведомления, документация API) используют в качестве ключей китайские строковые литералы из исходного кода, а переводы хранятся в
internal/i18n/locales/<language>.json. После добавления или изменения китайского текста выполнитеgo run ./internal/i18n/cmd/i18nsync -root ., чтобы добавить новые ключи во все языковые файлы, и заполните переводы;go test ./internal/i18nпроверяет, что каждый язык заполнен полностью и спецификаторы формата совпадают с исходными. Для предложений с подставляемыми значениями используйте одну строку форматаfmt.Sprintfна всё предложение и не склеивайте несколько китайских фрагментов, чтобы каждый язык мог использовать свой порядок слов. - Документация API генерируется программой для каждого языка:
make api-docsзаписывает её вdocs/api/<language>/, вручную синхронизировать ничего не нужно. - Поддерживаемые языки: 简体中文, English, 繁體中文, 日本語, 한국어, Español, Français, Deutsch, Русский, Português (Brasil).