mirror of
https://github.com/getnora-io/nora.git
synced 2026-04-12 16:10:31 +00:00
- Fix CHANGELOG: add missing versions v0.2.4-v0.2.12 - Implement GET /v2/_catalog endpoint for Docker repository listing - Add missing OpenAPI endpoints: - Docker: PUT manifest, POST/PATCH/PUT blob uploads, HEAD blob - Maven: PUT artifact upload - Cargo: GET metadata, GET download (was completely undocumented) - Metrics: GET /metrics - Update OpenAPI version to 0.2.12
12 KiB
12 KiB
Changelog
All notable changes to NORA will be documented in this file.
[0.2.12] - 2026-01-30
Added
Configurable Rate Limiting
- Rate limits now configurable via
config.tomland environment variables - New config section
[rate_limit]with parameters:auth_rps,auth_burst,upload_rps,upload_burst,general_rps,general_burst - Environment variables:
NORA_RATE_LIMIT_{AUTH|UPLOAD|GENERAL}_{RPS|BURST}
Secrets Provider Architecture
- Trait-based secrets management (
SecretsProvidertrait) - ENV provider as default (12-Factor App pattern)
- Protected secrets with
zeroize(memory zeroed on drop) - Redacted Debug impl prevents secret leakage in logs
- New config section
[secrets]withproviderandclear_envoptions
Docker Image Metadata
- Support for image metadata retrieval
Documentation
- Bilingual onboarding guide (EN/RU)
[0.2.11] - 2026-01-26
Added
- Internationalization (i18n) support
- PyPI registry proxy
- UI improvements
[0.2.10] - 2026-01-26
Changed
- Dark theme applied to all UI pages
[0.2.9] - 2026-01-26
Changed
- Version bump release
[0.2.8] - 2026-01-26
Added
- Dashboard endpoint added to OpenAPI documentation
[0.2.7] - 2026-01-26
Added
- Dynamic version display in UI sidebar
[0.2.6] - 2026-01-26
Added
Dashboard Metrics
- Global stats panel: downloads, uploads, artifacts, cache hit rate, storage
- Extended registry cards with artifact count, size, counters
- Activity log (last 20 events)
UI
- Dark theme (bg: #0f172a, cards: #1e293b)
[0.2.5] - 2026-01-26
Fixed
- Docker push/pull: added PATCH endpoint for chunked uploads
[0.2.4] - 2026-01-26
Fixed
- Rate limiting: health/metrics endpoints now exempt
- Increased upload rate limits for Docker parallel requests
[0.2.0] - 2026-01-25
Added
UI: SVG Brand Icons
- Replaced emoji icons with proper SVG brand icons (Simple Icons style)
- Docker, Maven, npm, Cargo, PyPI icons now render as scalable vector graphics
- Consistent icon styling across dashboard, sidebar, and detail pages
Testing Infrastructure
- Unit tests for LocalStorage (8 tests): put/get, list, stat, health_check
- Unit tests for S3Storage with wiremock HTTP mocking (11 tests)
- Integration tests for auth/htpasswd (7 tests)
- Token lifecycle tests (11 tests)
- Validation tests (21 tests)
- Total: 75 tests passing
Security: Input Validation (validation.rs)
- Path traversal protection: rejects
../,..\\, null bytes, absolute paths - Docker image name validation per OCI distribution spec
- Content digest validation (
sha256:[64 hex],sha512:[128 hex]) - Docker tag/reference validation
- Storage key length limits (max 1024 chars)
Security: Rate Limiting (rate_limit.rs)
- Auth endpoints: 1 req/sec, burst 5 (brute-force protection)
- Upload endpoints: 10 req/sec, burst 20
- General endpoints: 100 req/sec, burst 200
- Uses
tower_governor0.8 withPeerIpKeyExtractor
Observability: Request ID Tracking (request_id.rs)
X-Request-IDheader added to all responses- Accepts upstream request ID or generates UUID v4
- Tracing spans include request_id for log correlation
CLI: Migrate Command (migrate.rs)
nora migrate --from local --to s3- migrate between storage backends--dry-runflag for preview without copying- Progress bar with indicatif
- Skips existing files in destination
- Summary statistics (migrated, skipped, failed, bytes)
Error Handling (error.rs)
AppErrorenum withIntoResponsefor Axum- Automatic conversion from
StorageErrorandValidationError - JSON error responses with request_id support
Changed
StorageErrornow usesthiserrorderive macroTokenErrornow usesthiserrorderive macro- Storage wrapper validates keys before delegating to backend
- Docker registry handlers validate name, digest, reference inputs
- Body size limit set to 100MB default via
DefaultBodyLimit
Dependencies Added
thiserror = "2"- typed error handlingtower_governor = "0.8"- rate limitinggovernor = "0.10"- rate limiting backendtempfile = "3"(dev) - temporary directories for testswiremock = "0.6"(dev) - HTTP mocking for S3 tests
Files Added
src/validation.rs- input validation modulesrc/migrate.rs- storage migration modulesrc/error.rs- application error typessrc/request_id.rs- request ID middlewaresrc/rate_limit.rs- rate limiting configuration
[0.1.0] - 2026-01-24
Added
- Multi-protocol support: Docker Registry v2, Maven, npm, Cargo, PyPI
- Web UI dashboard
- Swagger UI (
/api-docs) - Storage backends: Local filesystem, S3-compatible
- Smart proxy/cache for Maven and npm
- Health checks (
/health,/ready) - Basic authentication (htpasswd with bcrypt)
- API tokens (revocable, per-user)
- Prometheus metrics (
/metrics) - JSON structured logging
- Environment variable configuration
- Graceful shutdown (SIGTERM/SIGINT)
- Backup/restore commands
Журнал изменений (RU)
Все значимые изменения NORA документируются в этом файле.
[0.2.12] - 2026-01-30
Добавлено
Настраиваемый Rate Limiting
- Rate limits настраиваются через
config.tomlи переменные окружения - Новая секция
[rate_limit]с параметрами:auth_rps,auth_burst,upload_rps,upload_burst,general_rps,general_burst - Переменные окружения:
NORA_RATE_LIMIT_{AUTH|UPLOAD|GENERAL}_{RPS|BURST}
Архитектура Secrets Provider
- Trait-based управление секретами (
SecretsProvidertrait) - ENV provider по умолчанию (12-Factor App паттерн)
- Защищённые секреты с
zeroize(память обнуляется при drop) - Redacted Debug impl предотвращает утечку секретов в логи
- Новая секция
[secrets]с опциямиproviderиclear_env
Docker Image Metadata
- Поддержка получения метаданных образов
Документация
- Двуязычный onboarding guide (EN/RU)
[0.2.11] - 2026-01-26
Добавлено
- Поддержка интернационализации (i18n)
- PyPI registry proxy
- Улучшения UI
[0.2.10] - 2026-01-26
Изменено
- Тёмная тема применена ко всем страницам UI
[0.2.9] - 2026-01-26
Изменено
- Релиз с обновлением версии
[0.2.8] - 2026-01-26
Добавлено
- Dashboard endpoint добавлен в OpenAPI документацию
[0.2.7] - 2026-01-26
Добавлено
- Динамическое отображение версии в сайдбаре UI
[0.2.6] - 2026-01-26
Добавлено
Dashboard Metrics
- Глобальная панель статистики: downloads, uploads, artifacts, cache hit rate, storage
- Расширенные карточки реестров с количеством артефактов, размером, счётчиками
- Лог активности (последние 20 событий)
UI
- Тёмная тема (bg: #0f172a, cards: #1e293b)
[0.2.5] - 2026-01-26
Исправлено
- Docker push/pull: добавлен PATCH endpoint для chunked uploads
[0.2.4] - 2026-01-26
Исправлено
- Rate limiting: health/metrics endpoints теперь исключены
- Увеличены лимиты upload для параллельных Docker запросов
[0.2.0] - 2026-01-25
Добавлено
UI: SVG иконки брендов
- Эмоджи заменены на SVG иконки брендов (стиль Simple Icons)
- Docker, Maven, npm, Cargo, PyPI теперь отображаются как векторная графика
- Единый стиль иконок на дашборде, сайдбаре и страницах деталей
Тестовая инфраструктура
- Unit-тесты для LocalStorage (8 тестов): put/get, list, stat, health_check
- Unit-тесты для S3Storage с HTTP-мокированием wiremock (11 тестов)
- Интеграционные тесты auth/htpasswd (7 тестов)
- Тесты жизненного цикла токенов (11 тестов)
- Тесты валидации (21 тест)
- Всего: 75 тестов проходят
Безопасность: Валидация ввода (validation.rs)
- Защита от path traversal: отклоняет
../,..\\, null-байты, абсолютные пути - Валидация имён Docker-образов по спецификации OCI distribution
- Валидация дайджестов (
sha256:[64 hex],sha512:[128 hex]) - Валидация тегов и ссылок Docker
- Ограничение длины ключей хранилища (макс. 1024 символа)
Безопасность: Rate Limiting (rate_limit.rs)
- Auth endpoints: 1 req/sec, burst 5 (защита от брутфорса)
- Upload endpoints: 10 req/sec, burst 20
- Общие endpoints: 100 req/sec, burst 200
- Использует
tower_governor0.8 сPeerIpKeyExtractor
Наблюдаемость: Отслеживание Request ID (request_id.rs)
- Заголовок
X-Request-IDдобавляется ко всем ответам - Принимает upstream request ID или генерирует UUID v4
- Tracing spans включают request_id для корреляции логов
CLI: Команда миграции (migrate.rs)
nora migrate --from local --to s3- миграция между storage backends- Флаг
--dry-runдля предпросмотра без копирования - Прогресс-бар с indicatif
- Пропуск существующих файлов в destination
- Итоговая статистика (migrated, skipped, failed, bytes)
Обработка ошибок (error.rs)
- Enum
AppErrorсIntoResponseдля Axum - Автоматическая конверсия из
StorageErrorиValidationError - JSON-ответы об ошибках с поддержкой request_id
Изменено
StorageErrorтеперь использует макросthiserrorTokenErrorтеперь использует макросthiserror- Storage wrapper валидирует ключи перед делегированием backend
- Docker registry handlers валидируют name, digest, reference
- Лимит размера body установлен в 100MB через
DefaultBodyLimit
Добавлены зависимости
thiserror = "2"- типизированная обработка ошибокtower_governor = "0.8"- rate limitinggovernor = "0.10"- backend для rate limitingtempfile = "3"(dev) - временные директории для тестовwiremock = "0.6"(dev) - HTTP-мокирование для S3 тестов
Добавлены файлы
src/validation.rs- модуль валидации вводаsrc/migrate.rs- модуль миграции хранилищаsrc/error.rs- типы ошибок приложенияsrc/request_id.rs- middleware для request IDsrc/rate_limit.rs- конфигурация rate limiting
[0.1.0] - 2026-01-24
Добавлено
- Мульти-протокольная поддержка: Docker Registry v2, Maven, npm, Cargo, PyPI
- Web UI дашборд
- Swagger UI (
/api-docs) - Storage backends: локальная файловая система, S3-совместимое хранилище
- Умный прокси/кэш для Maven и npm
- Health checks (
/health,/ready) - Базовая аутентификация (htpasswd с bcrypt)
- API токены (отзываемые, per-user)
- Prometheus метрики (
/metrics) - JSON структурированное логирование
- Конфигурация через переменные окружения
- Graceful shutdown (SIGTERM/SIGINT)
- Команды backup/restore