Перейти к содержимому
GitRiverGitRiver
EN

История изменений

v1.1.0

minor25.09.2026
  • Слои совместимости: интерфейс GitHub (/api/v3) и GitLab (/api/v4) - gh, octokit, glab, python-gitlab и провайдер Terraform работают со сменой адреса узла и токена
  • Встроенный SSH-сервер: клонирование и push по SSH без системного sshd, ключи и настройки из админки без перезапуска
  • Выдача пакетов через посредника: кеш внешних реестров для всех форматов, прогрев, вытеснение, отчёты, работа в закрытом контуре
  • Слой знания: записи в .gitriver/knowledge/, черновики, сборка пачки черновиков в пулл-реквест, вкладка репозитория, проверка записей на секреты при приёме
  • Помощник на языковых моделях: разбор упавшей сборки CI и разбор изменений пулл-реквеста - Pro
  • Указатель по коду: вкладка «Символы», переходы к определению и к вызывающим - Pro
  • Реестр пакетов Composer (Packagist v2) - седьмой формат публикации; репозиторий может работать зеркалом внешнего реестра образов
  • Перенос с GitHub, GitLab и Gitea забирает и пулл-реквесты; отчёт о переносе в настройках репозитория
  • Ветки обсуждения в пулл-реквесте: ответы, пометка решённой, счётчик нерешённых, правило слияния «все ветки решены»
  • Проверка подписи коммитов ключами учётных записей со сверкой почты автора; правило защиты ветки «только подписанные»; веб-редактор подписывает коммиты ключом узла
  • Чужой код в CI ждёт разрешения человека, прежде чем занять раннеры; ожидание переживает перезапуск сервера
  • Внешние раннеры догнали встроенный: журнал задачи, переменные окружения, if, retry, services, reports, max-parallel, артефакты, повтор и ручной запуск
  • Кеш между запусками на внешних раннерах, отдельные квоты для кеша CI и вложений релизов, вытеснение забытого кеша
  • Установка без Docker: вся очередь уходит внешним раннерам, отключённый встроенный раннер виден в админке и мастере настройки
  • Расписания CI материализованы в базе; страница сборок называет причину, по которой расписание молчит
  • Группа одновременности CI держит обещание ожиданием, а не отменой задания; раннер группы обслуживает всё её поддерево
  • Срез ресурсов CI: пределы считают весь расход исполнителя, а не одного контейнера задания — в общий срез попадают и службы задания, и контейнеры действий, и уборка рабочей копии. О срабатываниях срез говорит в журнале задания, на экране настроек и метриками, а предел ему задаёт systemd
  • Число одновременных заданий по умолчанию считается от доступного процессорного времени с учётом предела среза: там, где предел задан, заданий разом пойдёт меньше прежнего
  • Сканирование образов реестра на уязвимости по требованию и доступ Trivy к приватному содержимому
  • Правила реестра образов заводятся в настройках репозитория, а не только через API: к каким образам правило относится, сколько самых свежих тегов хранить, с какого возраста удалять, какие теги не трогать вовсе и что защищено от перезаписи. Исключающая маска нужна подвижным тегам: buildcache, latest и nightly перезаписываются каждой сборкой, и защита от перезаписи им не годится
  • Правила репозитория теперь считают так же, как ограничения установки: тег удаляется, только если он и не входит в число самых свежих, и старше срока. У кого в правиле репозитория заданы оба числа, удаляться будет меньше прежнего; прежнюю чистку по возрасту возвращает нулевое «хранить последних»
  • Восемь каналов уведомлений: добавлен Matrix, канал Max приведён к действующему Bot API, исход доставки виден владельцу репозитория
  • Пакеты deb и rpm, чарт Helm для Kubernetes, работа в нескольких репликах с лидерством фоновых задач на блокировках PostgreSQL
  • Зеркала синхронизируются по заданному интервалу, а не только по кнопке
  • Узел как поставщик OIDC: id_token с проверяемой подписью (JWKS), UserInfo отвечает и на POST
  • Вход через LDAP с поднятием ldap:// до TLS через StartTLS - Max
  • SCIM: грамматика фильтров RFC 7644, externalId у групп, передача группы провижинингу отдельным действием - Max
  • Журнал аудита пополнен: появление и отключение учётной записи, изменения защиты веток, административные изменения, действия раннеров, внешние входы - Max
  • Редакция Max - возможности уровня установки: SAML, SCIM, LDAP, журнал аудита, назначение квот, IP-правила уровня установки, оформление под свою марку, пределы черновиков знания
  • Места Pro работают: платные разделы открыты участникам с назначенным местом; докупка мест доезжает до установки сама
  • Подтверждение права: подписанный ответ активации годен ограниченное время, предупреждение письмом и в ленте, отпечаток базы отличает клон от реплики
  • Временная блокировка учётной записи вместо безвозвратного удаления; смена роли участника группы одним действием
  • Обсуждения, пакеты и версии читаются страницами с догрузкой по прокрутке; выбор ветки ищет на сервере
  • Крупные файлы (пакеты, вложения релизов, резервные копии, LFS) передаются потоком, а не читаются в память целиком
  • Безопасность входа и прав: проверка областей токена на всех операциях записи и у push/LFS, устранение подъёма прав через устаревший токен, сверка пароля со списком утёкших, шифрование паролей LDAP и SMTP в базе
  • Документация API работает без выхода в интернет; текст лицензионного соглашения отдаётся из поставки, а не с сайта издателя
  • Переход с 1.0.0: комментарии задач и пулл-реквестов, пакеты и сводные списки квот отдаются страницами вместо массива
  • Переход с 1.0.0: неизвестное поле в теле запроса /api/v1 отвергается (400 validation), а не отбрасывается молча
  • Переход с 1.0.0: GITRIVER_RATE_LIMIT_DISABLED больше не действует - замена rate_limit_exempt_cidrs с перечнем освобождённых адресов
  • Один бинарник на Rust 67 МБ, 46 МБ памяти в покое, 30 крейтов, 584 вызова /api/v1

v1.0.0

major29.03.2026
  • Git-хостинг (HTTP + SSH, LFS, GPG, веб-редактор, пакетный коммит)
  • Пулл-реквесты с ревью кода, CODEOWNERS и тредами комментариев
  • Очередь слияния с CI-интеграцией и временными ветками
  • Задачи с Kanban-досками, вехами и шаблонами
  • CI/CD (YAML, DAG, матрица, артефакты, кеш, повторы, веб-терминал)
  • Удалённые раннеры + автомасштабирование в Kubernetes
  • Реестр контейнеров (OCI v2, мультиархитектура, политики хранения, GC)
  • Реестр пакетов (npm, PyPI, Cargo, Maven, NuGet, Generic)
  • GitOps-деплой RiverCD (канареечный, сине-зелёный, drift detection, волны синхронизации)
  • Уведомления - 8 каналов: Email, Telegram, Slack, Discord, Teams, Matrix, вебхуки, встроенные
  • Безопасность: поиск секретов (17 + пользовательские regex), SARIF, DORA-метрики
  • Проверка лицензий зависимостей (SPDX, CycloneDX SBOM)
  • Аутентификация: OAuth2, SAML 2.0, SCIM 2.0, LDAP, 2FA (TOTP)
  • Настраиваемые роли, IP-ограничения, квоты хранилища
  • Резервное копирование (AES-256-GCM, инкрементальное, S3)
  • Статические сайты (Pages) и Wiki
  • Релизы с бинарными артефактами
  • Импорт из GitHub, GitLab, Bitbucket + зеркалирование
  • REST API (500+ эндпоинтов) с OpenAPI 3.1
  • Журнал аудита (логины, имперсонация, изменение прав, лицензии)
  • Вебхуки (HMAC-SHA256, retry с backoff, история доставки, SSRF-защита)
  • Защита веток (паттерны, обязательные ревью, CI-проверки, подписанные коммиты)
  • Мастер настройки при первом запуске
  • Лицензирование (Ed25519, Pro Seats, Heartbeat)
  • Брендирование инстанса (название, логотип, CSS, футер)
  • Один бинарник на Rust, ~100 МБ RAM в покое