mirror of
https://github.com/getnora-io/nora.git
synced 2026-04-12 15:00:31 +00:00
19 KiB
19 KiB
Changelog
All notable changes to NORA will be documented in this file.
[Unreleased]
Added / Добавлено
install.shinstaller script live at https://getnora.io/install.sh —curl -fsSL https://getnora.io/install.sh | sh- Скрипт установки
install.shдоступен на https://getnora.io/install.sh
[0.2.23] - 2026-02-24
Added / Добавлено
- Binary (
nora) + SHA-256 checksum attached to every GitHub Release - Бинарник (
nora) и SHA-256 контрольная сумма прикреплены к каждому релизу GitHub
Fixed / Исправлено
- Security: bump
prometheus0.13 → 0.14 (CVE-2025-53605) andbytes1.11.0 → 1.11.1 (CVE-2026-25541) - Безопасность: обновлены
prometheus0.13 → 0.14 (CVE-2025-53605) иbytes1.11.0 → 1.11.1 (CVE-2026-25541)
CI/CD
- Add Dependabot for automated dependency updates / Добавлен Dependabot для автоматического обновления зависимостей
- Pin
aquasecurity/trivy-actionto0.30.0, bump to0.34.1; scan gate blocks release on HIGH/CRITICAL CVE - Закреплён
trivy-action@0.30.0, обновлён до0.34.1; сканирование блокирует релиз при HIGH/CRITICAL CVE - Upgrade
codeql-actionv3 → v4 / Обновлёнcodeql-actionv3 → v4 - Fix
deny.tomldeprecated keys (copyleft,unlicensedremoved incargo-deny) / Исправлены устаревшие ключи вdeny.toml - Fix binary path in Docker image (
/usr/local/bin/nora) / Исправлен путь бинарника в Docker-образе - Pin build job to
norarunner label / Джоб сборки закреплён за runner'ом с меткойnora - Allow
CDLA-Permissive-2.0license (webpki-roots) / Разрешена лицензияCDLA-Permissive-2.0 - Ignore
RUSTSEC-2025-0119(unmaintained transitive depnumber_prefixviaindicatif)
Dependencies / Зависимости
chrono0.4.43 → 0.4.44quick-xml0.31.0 → 0.39.2toml0.8.23 → 1.0.3+spec-1.1.0flate21.1.8 → 1.1.9softprops/action-gh-release1 → 2actions/checkout4 → 6docker/build-push-action5 → 6
Documentation / Документация
- Replace text title with SVG logo;
Ostyled in blue-600 / Заголовок заменён SVG-логотипом; букваOстилизована в blue-600
[0.2.22] - 2026-02-24
Changed / Изменено
- First stable release with Docker images published to container registry
- Первый стабильный релиз с Docker-образами, опубликованными в container registry
[0.2.21] - 2026-02-24
CI/CD
- Consolidate all Docker builds into a single job to fix runner network issues / Все Docker-сборки объединены в один job для устранения сетевых проблем runner'а
- Build musl static binary for maximum portability / Сборка musl-бинарника для максимальной переносимости
- Add security scanning (Trivy) + SBOM generation to release pipeline / Добавлено сканирование безопасности (Trivy) и генерация SBOM в pipeline релиза
- Add Cargo cache to speed up builds / Добавлен кэш Cargo для ускорения сборок
- Replace
gitleaksGitHub Action with CLI (no license requirement) /gitleaksAction заменён CLI-вызовом (лицензия не требуется) - Use GitHub-runner's own Rust toolchain (avoid path conflicts) / Используется Rust toolchain самого GitHub-runner'а
- Use shared runner filesystem instead of artifact API (avoids network upload latency) / Общая файловая система runner'а вместо artifact API
- Remove Astra Linux build temporarily / Сборка для Astra Linux временно удалена
[0.2.20] - 2026-02-23
Added / Добавлено
- Parallel CI builds for Astra Linux and RedOS / Параллельная сборка в CI для Astra Linux и RedOS
Changed / Изменено
- Use
FROM scratchbase image for Astra Linux and RedOS Docker builds / Базовый образFROM scratchдля Docker-сборок Astra Linux и RedOS - Shared
reqwest::Clientacross all registry handlers / Общийreqwest::Clientдля всех registry-обработчиков
Fixed / Исправлено
- Auth: replace
starts_withwith explicitmatches!for token path checks / Аутентификация:starts_withзаменён явной проверкойmatches!для путей с токенами - Remove unnecessary QEMU step for amd64-only builds / Удалён лишний шаг QEMU для amd64-сборок
[0.2.19] - 2026-01-31
Added / Добавлено
- Pre-commit hook to prevent accidental commits of sensitive files / Pre-commit хук для защиты от случайного коммита чувствительных файлов
- README badges: build status, version, license / Бейджи в README: статус сборки, версия, лицензия
Performance / Производительность
- In-memory repository index with pagination for faster dashboard load / Индекс репозитория в памяти с пагинацией для ускорения загрузки дашборда
Fixed / Исправлено
- Use
div_ceilinstead of manual ceiling division / Использованdiv_ceilвместо ручной реализации деления с округлением вверх
[0.2.18] - 2026-01-31
Changed
- Logo styling refinements
[0.2.17] - 2026-01-31
Added
- Copyright headers to all source files (Volkov Pavel | DevITWay)
- SPDX-License-Identifier: MIT in all .rs files
[0.2.16] - 2026-01-31
Changed
- N○RA branding: stylized O logo across dashboard
- Fixed O letter alignment in logo
[0.2.15] - 2026-01-31
Fixed
- Code formatting (cargo fmt)
[0.2.14] - 2026-01-31
Fixed
- Docker dashboard now shows actual image size from manifest layers (config + layers sum)
- Previously showed only manifest file size (~500 B instead of actual image size)
[0.2.13] - 2026-01-31
Fixed
- npm dashboard now shows correct version count and package sizes
- Parses metadata.json for versions, dist.unpackedSize, and time.modified
- Previously showed 0 versions / 0 B for all packages
[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