diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..53c4eb2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,210 @@ +name: Bug report / Баг +description: Сообщить о неработающем сценарии, отвале туннеля, таймауте, краше и т.п. +title: "[bug]: " +labels: ["bug"] +type: Bug +body: + - type: markdown + attributes: + value: | + Спасибо за репорт. + + **Перед заполнением:** + - Проверь, что используешь актуальную версию (`main` или последний релиз). + - Если воспроизводишь на форке/старой ветке - обнови и проверь снова. + - Не сообщай о багах GUI-клиентов (olcbox, мобильные приложения) сюда - это баги ядра, GUI живёт в своих репозиториях. + - Если описание будет без логов и конфига, issue будет закрыт без разбора. + + - type: checkboxes + id: prerequisites + attributes: + label: Pre-flight checklist + options: + - label: Я искал похожие issue (открытые и закрытые) и не нашёл дубликата. + required: true + - label: Я проверил баг на актуальной версии (`main` или последний релиз). + required: true + - label: Это баг ядра `olcrtc`, а не GUI-клиента (olcbox/мобильное приложение). + required: true + + - type: input + id: version + attributes: + label: Версия olcrtc + description: Тег релиза, имя ветки и git commit (`git rev-parse --short HEAD`). Если собирал из docker - пиши тег образа. + placeholder: "main @ a1b2c3d / v0.x.y / refactor/universal-carrier @ ef01234" + validations: + required: true + + - type: dropdown + id: build + attributes: + label: Способ сборки/запуска + options: + - Native + - Docker / docker compose + - Podman / script + - Other + validations: + required: true + + - type: dropdown + id: os + attributes: + label: ОС / платформа + multiple: true + options: + - Linux + - Windows + - MacOS + - Android + - FreeBsd + - OpenBSD + - Haiku + - SeL4 + validations: + required: true + + - type: input + id: os_version + attributes: + label: Версия ОС / архитектура + placeholder: "Ubuntu 24.04 x86_64 / Windows 11 24H2 / Android 14 arm64" + validations: + required: true + + - type: dropdown + id: provider + attributes: + label: auth.provider + options: + - jitsi + - telemost + - wbstream + - other + validations: + required: true + + - type: dropdown + id: transport + attributes: + label: net.transport + options: + - datachannel + - vp8channel + - seichannel + - videochannel + validations: + required: true + + - type: dropdown + id: side + attributes: + label: На какой стороне проявляется + multiple: true + options: + - srv (сервер) + - cnc (клиент) + - gen (генератор комнат) + validations: + required: true + + - type: textarea + id: description + attributes: + label: Описание проблемы + description: Что происходит, что ожидалось, как часто воспроизводится. + placeholder: | + После N минут работы туннель отваливается, перезапуск клиента не помогает, лечится только перезапуском сервера. + validations: + required: true + + - type: textarea + id: steps + attributes: + label: Шаги воспроизведения + placeholder: | + 1. Запустить сервер с конфигом из вложения + 2. Подключить клиент + 3. Подождать ~15 минут / усыпить телефон + 4. Попробовать открыть страницу через SOCKS - таймаут + validations: + required: true + + - type: textarea + id: server_config + attributes: + label: Конфиг сервера (server.yaml) + description: | + **Обязательно вычисти `crypto.key`, `room.id`, `engine.token`, креды SOCKS, токены и любые другие секреты.** + Формат - code block YAML. + render: yaml + placeholder: | + mode: srv + auth: + provider: telemost + room: + id: "" + crypto: + key: "" + net: + transport: vp8channel + dns: "1.1.1.1:53" + data: data + validations: + required: true + + - type: textarea + id: client_config + attributes: + label: Конфиг клиента (client.yaml) + description: Тот же конфиг с вычищенными секретами. Если воспроизводится только на одной стороне - допустимо вписать "не используется". + render: yaml + validations: + required: true + + - type: textarea + id: server_logs + attributes: + label: Логи сервера + description: | + Полные логи с момента запуска до момента ошибки. + Если запуск через systemd - `journalctl -u olcrtc -n 500 --no-pager`. + Если docker - `docker logs `. + Если запуск через podman - `podman logs -f `. + render: shell + validations: + required: true + + - type: textarea + id: client_logs + attributes: + label: Логи клиента + description: Полные логи клиента (включая `rtc:` строки) до момента ошибки. + render: shell + validations: + required: true + + - type: textarea + id: network + attributes: + label: Сетевое окружение + description: | + Что между клиентом и сервером? + placeholder: | + - Провайдер клиента: <название, страна/город> + - Провайдер/хостинг сервера: + - DPI/блокировки на клиенте: да/нет, что именно блокируется + - NAT/CGNAT: да/нет + - IPv6 на клиенте/сервере: да/нет + - Используется ли upstream SOCKS (`socks.proxy_addr`): да/нет + validations: + required: true + + - type: textarea + id: extra + attributes: + label: Дополнительно + description: Что ещё может быть полезно - версия podman/docker, нестандартный конфиг (failover, traffic shaping, lifecycle), временные паттерны (бьёт раз в сутки, после сна и т.п.), известные обходы. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..cff2ece --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,11 @@ +blank_issues_enabled: false +contact_links: + - name: Чат сообщества (Telegram) + url: https://t.me/openlibrecommunity + about: Общие вопросы, помощь по запуску, обсуждения. Перед созданием issue загляни сюда. + - name: Документация + url: https://github.com/openlibrecommunity/olcrtc/tree/main/docs + about: Конфигурация, быстрый старт, формат URI, примеры YAML. + - name: olcbox (UI клиент) + url: https://github.com/alananisimov/olcbox/issues + about: Баги интерфейса/мобильного клиента сообщай туда, ядро olcrtc их не чинит. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..9a58ed0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,76 @@ +name: Feature request / Фича +description: Предложить новую функциональность, провайдер, транспорт, интеграцию. +title: "[feat]: " +labels: ["enhancement"] +type: Feature +body: + - type: markdown + attributes: + value: | + Перед заполнением: + - Проверь, что фичи ещё нет в `main` и в pinned issue. + - Не предлагай бред вида "сделайте клиент под iOS / встройте в openwrt люси-плагин". + - Кастомные/нишевые интеграции можно и нужно предлагать . + + - type: checkboxes + id: prerequisites + attributes: + label: Pre-flight + options: + - label: Я искал похожие issue (открытые и закрытые) и не нашёл дубликата. + required: true + - label: Это относится к ядру `olcrtc`, а не к GUI-клиенту. + required: true + + - type: textarea + id: problem + attributes: + label: Проблема / use-case + description: Что не работает или работает неудобно сейчас. + placeholder: | + Сейчас приходится запускать отдельный процесс на каждую room - это неудобно когда... + validations: + required: true + + - type: textarea + id: proposal + attributes: + label: Предлагаемое решение + description: Конкретно, что добавить/изменить. Желательно с уровнем деталей "какой пакет/конфиг/API". + placeholder: | + Перенести `internal/app/session` в `pkg/session` и сделать стабильным API для встраивания. + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Альтернативы + description: Что ты пробовал/рассматривал и почему оно не подходит. + validations: + required: false + + - type: dropdown + id: scope + attributes: + label: Область + multiple: true + options: + - auth provider (jitsi/telemost/wbstream/новый) + - net transport (datachannel/vp8/sei/video/новый) + - mux / control / liveness + - конфиг / CLI / URI / sub + - сборка / CI / пакетирование + - документация + - библиотечный API (`pkg/`) + - другое + validations: + required: true + + - type: textarea + id: contribution + attributes: + label: Готов ли сделать PR + placeholder: "Да / Нет / Могу помочь с тестами" + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml new file mode 100644 index 0000000..42309b9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -0,0 +1,73 @@ +name: Question / Вопрос +description: Вопрос по работе, конфигурации, поведению olcrtc. +title: "[question]: " +labels: ["question"] +body: + - type: markdown + attributes: + value: | + Перед заполнением: + - Прочти [docs/configuration.md](https://github.com/openlibrecommunity/olcrtc/blob/main/docs/configuration.md), [docs/fast.md](https://github.com/openlibrecommunity/olcrtc/blob/main/docs/fast.md), [docs/manual.md](https://github.com/openlibrecommunity/olcrtc/blob/main/docs/manual.md). + - Общие "как запустить" - [Telegram-чат](https://t.me/openlibrecommunitychat/91706), там быстрее ответят. + - Если поведение похоже на баг (отвалы, таймауты, краши) - заводи Bug report. + + - type: checkboxes + id: prerequisites + attributes: + label: Pre-flight + options: + - label: Я прочитал документацию в `docs/` и не нашёл ответа. + required: true + - label: Я искал похожие issue (открытые и закрытые) и не нашёл дубликата. + required: true + - label: Это относится к ядру `olcrtc`, а не к GUI-клиенту. + required: true + + - type: textarea + id: question + attributes: + label: Вопрос + description: Сформулируй конкретно, одним абзацем. + placeholder: | + Как корректно настроить failover между jitsi+datachannel и wbstream+vp8channel, если... + validations: + required: true + + - type: dropdown + id: provider + attributes: + label: auth.provider + description: Если вопрос привязан к конкретному провайдеру. + options: + - jitsi + - telemost + - wbstream + - other + - не относится + validations: + required: false + + - type: dropdown + id: transport + attributes: + label: net.transport + description: Если вопрос привязан к конкретному транспорту. + options: + - datachannel + - vp8channel + - seichannel + - videochannel + - не относится + validations: + required: false + + - type: textarea + id: context + attributes: + label: Контекст + description: | + Что ты уже сделал, какая ОС, что ожидаешь увидеть. + Если есть конфиг - приложи (с вычищенными `crypto.key`, `room.id`, токенами и кредами). + render: yaml + validations: + required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..7f49d11 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,78 @@ + + +## Что меняет PR + + + +## Связанные issue + + + +## Тип изменения + +- [ ] fix - исправление бага +- [ ] feat - новая функциональность +- [ ] refactor - рефакторинг без изменения поведения +- [ ] perf - улучшение производительности +- [ ] docs - только документация +- [ ] build / ci - сборка, CI, пакетирование +- [ ] chore - прочее (deps, форматирование и т.п.) +- [ ] BREAKING CHANGE - ломает совместимость (конфиг/wire/публичный API) + +## Область + + + +- [ ] auth (`internal/auth/jitsi|telemost|wbstream`) +- [ ] transport / channel (`pkg/olcrtc/tunnel`, datachannel/vp8/sei/video) +- [ ] mux / control / liveness / lifecycle +- [ ] session / app (`internal/app/session`, `pkg/`) +- [ ] config / CLI / URI / sub +- [ ] mobile (`mobile/`) +- [ ] CI / Docker / mage +- [ ] docs / examples +- [ ] другое: + +## Как тестировалось + + + +- Provider: +- Transport: +- ОС: +- Сценарий: + +```text +<команды / шаги / лог до и после> +``` + +## Совместимость + +- [ ] Конфиг (`*.yaml`) совместим с предыдущей версией +- [ ] Wire-протокол совместим (клиент старой версии работает с новым сервером и наоборот) +- [ ] Публичный API в `pkg/` не сломан + + + +## Чек-лист + +- [ ] Локально прогнаны `mage lint` и `mage test` +- [ ] Добавлены/обновлены тесты, где это имеет смысл +- [ ] Обновлена документация (`docs/`, примеры в `docs/examples/`, README), если поведение/конфиг изменились +- [ ] В коде нет закомментированного мусора, отладочных `fmt.Println`, токенов и ключей +- [ ] Я согласен с лицензией репозитория и тем, что мой вклад выпускается под ней + +## Дополнительно + + diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1371999..f4c05c1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,7 @@ on: pull_request: branches: ["main", "master"] schedule: - # Nightly stress soak — 03:17 UTC keeps it off the hour to avoid + # Nightly stress soak - 03:17 UTC keeps it off the hour to avoid # contention with the GitHub Actions hourly stampede. - cron: "17 3 * * *" workflow_dispatch: