-
released this
2026-04-24 10:48:08 +03:00 | 375 commits to main since this release🧰 Dev/Runtime контур
Этот релиз закрывает задачу этапа «Этап 2 — Dev/Runtime контур»: Docker Compose теперь запускает PostgreSQL, bot и Web через обычную bridge-сеть без host networking и без заранее созданного external volume. Локальный старт стал переносимым для Windows, macOS и Linux.
✅ Закрытые issues
- #6 — chore: сделать compose-конфигурацию переносимой для локального запуска: убран
network_mode: host, сервисы переведены на обращение к PostgreSQL поdb:5432, volume БД создаётся compose-файлом, README обновлён подdocker compose up -d.
🧩 Что вошло в релиз
- bot и web подключены к обычной Docker bridge-сети
gmrelayи используют service namedbв connection string; - Web публикует порт через
GMRELAY_WEB_PORTсо значением8080по умолчанию; - PostgreSQL и Data Protection volumes стали обычными named volumes, создаваемыми при первом запуске compose;
- обязательные переменные окружения теперь валидируются compose-файлом до старта контейнеров;
- README и
.env.exampleобновлены под новый переносимый сценарий локального запуска.
🛡 Что это даёт
docker compose up -dбольше не требует ручного созданияgame_pgdata;- локальный запуск не зависит от Linux-only
network_mode: host; - bot/web используют одинаковый Docker service discovery на Linux, Windows и macOS;
- существующий volume
game_pgdataсохраняет совместимость, но больше не обязан быть external.
📦 Версия и деплой
- версия проекта обновлена до 1.1.5 в
Directory.Build.props,compose.yamlи Gitea Actions workflow; - Docker-образы и deploy-конфигурация теперь используют тег 1.1.5;
- Gitea Actions run #32 успешно собрал, опубликовал и задеплоил образы.
Downloads
- #6 — chore: сделать compose-конфигурацию переносимой для локального запуска: убран
-
released this
2026-04-24 10:27:24 +03:00 | 376 commits to main since this release🧪 Стабилизация платформы
Этот релиз закрывает ещё один пункт этапа «Стабилизация платформы»: статусы игровых сессий приведены к единой модели без устаревших значений. Теперь bot, Shared-рендеринг, Web UI и SQL-код опираются на один согласованный набор
Planned/ConfirmationSent/Confirmed/Cancelled.✅ Закрытые issues
- #5 — refactor: привести статусы сессий к единой модели без устаревших значений: удалены legacy-ветки
Recruiting/RecruitmentClosed, добавлен общий источник истины для допустимых session-status значений, а использование статусов в bot/web/shared приведено кSessionStatus.
🧩 Что вошло в релиз
SessionStatusрасширен до общего источника истины: добавлен canonical-наборAllи helper для проверки отменённых сессий;SessionBatchRendererбольше не содержит отдельную веткуRecruitmentClosedи используетSessionStatus.Cancelledдля закрытия кнопок отменённых сессий;- Web-страница группы убрана от legacy-переводов
Recruiting/RecruitmentClosed, аPlannedполучил явное отображение и стиль; - session-status SQL в bot-коде переведён с строковых литералов на параметры из
SessionStatusдля создания, отмены, списков, календаря и reschedule-потоков; - добавлены регрессионные тесты, которые фиксируют canonical-набор статусов и запрещают возврат legacy-значений в production-исходники.
🛡 Что это даёт
- UI и Telegram-рендеринг больше не расходятся в понимании жизненного цикла сессии;
- новые изменения сложнее случайно привязать к старым статусам, потому что тесты ловят такие регрессии;
- SQL-запросы, бизнес-логика и Web теперь используют одну доменную модель статусов.
📦 Версия и деплой
- версия проекта обновлена до 1.1.4 в
Directory.Build.props,compose.yamlи Gitea Actions workflow; - Docker-образы и deploy-конфигурация теперь используют тег 1.1.4.
Downloads
- #5 — refactor: привести статусы сессий к единой модели без устаревших значений: удалены legacy-ветки
-
released this
2026-04-23 21:09:19 +03:00 | 377 commits to main since this release🧪 Стабилизация платформы
Этот релиз продолжает этап «Стабилизация платформы» и закрывает задачу по тестовому покрытию ключевых сценариев бота и Web. Тестовый проект перестал быть заглушкой и теперь проверяет критичную бизнес-логику, на которой держатся расписания, RSVP и доступ в веб-интерфейсе.
✅ Закрытые issues
- #4 — Test Coverage: пустой smoke test заменён на осмысленный набор unit-тестов для парсинга
/newsession,TelegramAuthService.Verify,SessionBatchRenderer, RSVP flow (confirm/decline), переноса сессии и голосования, а также кейсов доступа к чужим группам и сессиям в Web.
🧩 Что вошло в релиз
- добавлен тестируемый парсер
NewSessionCommandParserдля разбора/newsessionи валидации дат; - вынесены правила
RsvpFlowRulesиRescheduleVoteRules, чтобы покрыть переходы состояний RSVP и голосования без хрупкой привязки к инфраструктуре; - добавлены тесты для
TelegramAuthService,SessionBatchRenderer, reschedule voting message иAuthorizedSessionService; - пакет тестов теперь покрывает ключевые bot/web-сценарии вместо одного пустого smoke test.
🛡 Что это даёт
- регрессии в расписаниях, подтверждениях участия и переносах будут ловиться до деплоя;
- изменения в Telegram auth и web-доступе теперь защищены автоматическими проверками;
- доработка бизнес-логики бота стала дешевле и безопаснее, потому что основные переходы состояний зафиксированы тестами.
📦 Версия и деплой
- версия проекта обновлена до 1.1.3 в
Directory.Build.props,compose.yamlи Gitea Actions workflow; - Docker-образы и deploy-конфигурация теперь используют тег 1.1.3.
Downloads
- #4 — Test Coverage: пустой smoke test заменён на осмысленный набор unit-тестов для парсинга
-
released this
2026-04-23 20:49:49 +03:00 | 378 commits to main since this release🛡 Стабилизация платформы
Этот релиз завершает первую тройку критических багфиксов из этапа «Стабилизация платформы». Исправлены проблемы безопасности доступа в Web, утечки секретов в логах и повторной обработки устаревших Telegram-апдейтов после рестарта бота.
✅ Закрытые issues
- #1 — Web Authorization: закрыта возможность читать или изменять чужие группы и сессии по прямому GUID. Доступ к данным теперь проверяется относительно текущего авторизованного GM.
- #2 — Secret Redaction: убран вывод
connection string, токена бота и других чувствительных значений из стартовых логовGmRelay.Bot. - #3 — Pending Updates / Long Polling: бот теперь корректно вычисляет стартовый
offsetпо последнему pending update и не переигрывает старые команды и callback-апдейты после перезапуска.
🧪 Что это даёт
- авторизованный пользователь больше не может открыть или изменить чужие данные в Web даже при знании идентификатора;
- секреты не утекают в консоль и агрегаторы логов;
- рестарт бота не приводит к повторной обработке старых Telegram-событий.
📦 Версия и деплой
- версия проекта обновлена до 1.1.2 в
Directory.Build.props,compose.yamlи Gitea Actions workflow; - Docker-образы и deploy-конфигурация теперь используют тег 1.1.2.
Downloads
-
released this
2026-04-21 15:49:24 +03:00 | 382 commits to main since this release🛠 Исправления (Bug Fixes)
- Telegram Login Widget: Исправлена проблема, из-за которой кнопка входа через Telegram не загружалась при навигации внутри приложения (Blazor SPA). Теперь виджет инициализируется через JS Interop, что гарантирует его появление на странице входа в любой ситуации.
Downloads
-
released this
2026-04-21 15:21:18 +03:00 | 384 commits to main since this release🎨 Новый интерфейс (Frontend Redesign)
Полностью обновлен внешний вид приложения в современном стиле Dark Mode с использованием элементов Glassmorphism:
- Дизайн-система: Внедрена гибкая система CSS-переменных, обновлена типографика (шрифт Inter) и цветовая палитра.
- Главная страница: Добавлены анимированные карточки групп, скелетная загрузка (skeleton loading) и улучшенная навигация.
- Адаптивность: Полная поддержка мобильных устройств. На узких экранах таблицы автоматически заменяются на удобные карточки.
- Эффекты: Добавлены плавные анимации появления элементов (fadeIn, slideUp) и эффекты размытия фона.
- Страницы ошибок: Стилизованы страницы 404 и 500 под общий дизайн.
🔒 Безопасность (Security Hardening)
Проведен аудит и усиление защиты приложения:
- Telegram Auth: Исправлена уязвимость к timing-атакам при проверке HMAC. Теперь используется
CryptographicOperations.FixedTimeEquals. - Cookie Security: Куки авторизации теперь используют флаги
HttpOnly,SecureиSameSite=Strict. - Security Headers: Добавлены заголовки
X-Frame-Options: DENY,X-Content-Type-Options: nosniffи политикаReferrer-Policy. - Логирование: Улучшена обработка исключений при рассылке уведомлений в Telegram.
📦 Инфраструктура
- Версия приложения обновлена до 1.1.0 во всех конфигурациях (
Directory.Build.props,compose.yaml, CI/CD пайплайн). - Оптимизирована сборка Docker-образов.
Downloads
-
released this
2026-04-20 17:02:05 +03:00 | 385 commits to main since this releaseИсправлена критическая ошибка в веб-интерфейсе при редактировании сессии.
Список изменений:
- Web Module: Исправлен баг в логике работы с часовыми поясами. Метод
MoscowTime.ToMoscow(DateTime)теперь корректно сбрасывает флагDateTimeKind.Utcпосле добавления смещения МСК (+3ч). Это предотвращает ошибку валидации .NET. - Версии: Версия проекта обновлена до 1.0.1 во всех основных файлах.
Downloads
- Web Module: Исправлен баг в логике работы с часовыми поясами. Метод
-
Release version 1.0.0
Stablereleased this
2026-04-17 17:03:25 +03:00 | 387 commits to main since this release🚀 Релиз v1.0.0: Базовый функционал и стабилизация
Это первый стабильный релиз системы GM-Relay, включающий в себя полнофункционального Telegram-бота и веб-интерфейс для управления игровыми сессиями.
✨ Новые возможности
- 🤖 Telegram Бот (Native AOT): Бот полностью оптимизирован для работы с минимальным потреблением памяти, что делает его идеальным для запуска на
слабых серверах или Raspberry Pi. - 📅 Пакетное создание сессий: Возможность планировать сразу несколько игр одним сообщением через команду /newsession.
- 🌐 Web Dashboard: Полноценная панель управления на Blazor Server с авторизацией через Telegram (HMAC валидация).
- 🇷🇺 Полная локализация: Весь интерфейс (бот и веб-панель) полностью переведен на русский язык.
- 🗓 Экспорт в календарь: Генерация .ics файлов для синхронизации расписания с Google/Apple/Yandex календарями.
- 📁 Поддержка Форумов (Topics): Автоматическое создание и управление темами в супергруппах Telegram.
🛠 Технические улучшения
- 📦 Централизованное версионирование: Внедрена система Directory.Build.props для управления версиями всех модулей из одной точки.
- 🚀 CI/CD & Docker: Настроена автоматическая сборка и деплой через Gitea Actions с поддержкой версионных тегов (:1.0.0) и :latest.
- 🐘 База данных: Внедрены автоматические миграции через DbUp.
- 🏗 Aspire Orchestration: Проект готов к локальной разработке и мониторингу через .NET Aspire.
🔧 Как обновиться
Если вы используете Docker Compose, обновите ваш compose.yaml (или подтяните изменения из git) и выполните:
1 docker compose pull
2 docker compose up -d
Полный список изменений: [сравнение с предыдущими коммитами]
Downloads
- 🤖 Telegram Бот (Native AOT): Бот полностью оптимизирован для работы с минимальным потреблением памяти, что делает его идеальным для запуска на