Changelog¶
All notable changes to Repod are documented here.
The format follows Keep a Changelog. Repod uses Semantic Versioning.
[1.0.1] — 2026-05-16¶
Fixed¶
- ClamAV: Replaced
clamscan(OOM-killed at 1 GB limit) withclamddaemon — signatures loaded once in memory. Container memory limit raised to 2.5 GB.gpg-agentadded to both Enterprise and Community Dockerfiles. - GPG key generation: Fixed
NameError: Path is not definedandgpg-agent not installederrors. Added--pinentry-mode loopbackand_ensure_gnupg_permissions(). Key generation now works reliably via the UI. - ClamAV manual update:
freshclamnow called with--log=/dev/nullto avoidPermission deniedon/var/log/clamav/freshclam.log(backend runs asappuser, notclamav). - Community reprepro: Fixed
packages database contains unusederror by runningreprepro clearvanishedafterconf/distributionswas regenerated.conf/distributionsnow auto-generated with all 4 distributions (jammy, noble, focal, bookworm) including GPGSignWith. - Community edition: Removed 8 enterprise service files (
cve_enrichment,security_decisions,sla_alerts,sbom,ldap_auth,email_notifications,security_sync,retention) from Community source code — changingREPOD_EDITIONenvironment variable no longer unlocks Enterprise features.
Added¶
- Auto-init distributions: Both Enterprise and Community backends automatically initialize
conf/distributionsand runreprepro exporton first startup — no manual "Init distributions" button needed. - clamd daemon:
entrypoint.shnow starts theclamddaemon at container boot.appuseris added to theclamavgroup sofreshclamcan write to the database directory.
[1.0.0] — 2026-05-12¶
First stable production release, including the Community Edition (MIT).
Dual-edition architecture¶
- Community Edition — open-source (MIT licence). Includes the full upload pipeline (antivirus scan, CVE analysis, GPG signing, dependency check), package management, JWT + API token authentication, 5-role RBAC, LDAP/AD integration, audit logging, and the web UI.
- Enterprise Edition — adds CVE review queue with CISO approval workflow, SBOM export (CycloneDX 1.5 + SPDX 2.3), configurable CVE policy, SLA tracking, scheduled security sync, package retention, and advanced settings.
- Enterprise endpoints are present in the Community router set and return HTTP
402 Payment Requiredwith a structured upgrade message. The API surface is identical between editions.
Security hardening¶
- Docker socket removed — the backend no longer mounts
/var/run/docker.sock. GPG signing operations now use a shared volume (/repos/gnupg), eliminating a container escape vector. - JWT secret validated at startup — the application refuses to start in production mode if
JWT_SECRET_KEYis missing or set to the default value. - Swagger UI disabled in production —
/docs,/redoc, and/openapi.jsonreturn 404 whenENV=production. - Reset tokens hashed — password reset tokens are stored as SHA-256 hashes only. The plaintext token is never persisted. Reset links expire after 30 minutes.
- LDAP TLS certificate verification — enabled by default (
verify_cert: true). A warning is logged to the console if disabled. - Secrets masked in settings API —
smtp_passwordandbind_passwordare returned as••••••••inGET /settings/. - Password policy enforced — minimum 8 characters, at least one uppercase letter, at least one digit or special character. Enforced at user creation, password change, and password reset.
- Resource limits — backend container limited to 1 GB RAM and 1.5 CPUs in
docker-compose.yaml.
Upload pipeline¶
- Full SSE streaming upload via
POST /upload/stream— real-time step-by-step progress. - Standard JSON upload via
POST /upload/(legacy, preserved for backward compatibility). - Six-step validation pipeline: format, SHA-256 provenance, antivirus scan, CVE analysis (with EPSS/KEV enrichment), GPG signature, dependency check.
- CVE policy engine with per-severity actions (
block,review,warn,allow). - Webhook notification on
pending_review— notifies CISO team immediately when a package enters the review queue.
Rate limiting¶
Rate limits applied to high-impact endpoints:
| Endpoint | Limit |
|---|---|
POST /upload/ |
20 / minute |
POST /upload/stream |
20 / minute |
POST /import/fetch |
10 / minute |
POST /import/batch |
5 / minute |
POST /import/sync |
3 / minute |
POST /auth/token |
Rate-limited |
POST /auth/forgot-password |
Rate-limited |
POST /auth/reset-password |
Rate-limited |
Audit trail¶
Append-only JSONL audit log (/repos/audit/YYYY-MM-DD.jsonl), one file per day. Logged actions include:
- Authentication:
LOGIN(with source IP and result) - User management:
USER_CREATE,USER_UPDATE,USER_DELETE - Passwords:
PASSWORD_CHANGE,PASSWORD_RESET - Packages:
UPLOAD,DELETE,IMPORT,SYNC - Security:
SECURITY_DECISION,QUARANTINE,RESCAN,CLAMAV_UPDATE - Configuration:
SETTINGS_CHANGE,GPG_GENERATE - System:
INIT_DISTS,IMPORT_GROUP_DELETE
LDAP / Active Directory¶
- Compatible with OpenLDAP (
uid) and Active Directory (sAMAccountName). - Five group mappings: one per role (
group_admin,group_maintainer,group_uploader,group_auditor,group_reader). - Auto-provisioning: creates a local user record on first successful LDAP login.
- Role sync: if a user's LDAP group changes, the role is updated on the next login.
POST /settings/test-ldap— test the LDAP connection and bind without saving.- TLS options: plain, STARTTLS, LDAPS, with optional custom CA bundle (
ca_bundle_path).
Infrastructure¶
- Production compose file (
community/docker-compose.yaml) separated from development. docker-compose.dev.ymlfor local development with hot-reload.TRUSTED_PROXIESenvironment variable for reverse proxy IP whitelisting.app_urlsetting insettings.jsonfor constructing correct reset links.- Scheduler (Enterprise) runs three cron jobs: security sync (03:00), SLA check (08:00), retention (02:00). All configurable. Hot-reconfigurable via
PATCH /settings/.
Documentation¶
- Bilingual documentation (English + French) covering installation, administration, API reference, security dossier, reverse proxy, and compliance.
- NIS2 and ANSSI SecNumCloud compliance mapping.
- How-to guides: LDAP, backup/restore, GPG key rotation, migration from Artifactory/Nexus.
[0.9.0] — 2026-03-01¶
Beta release — internal testing.
Added¶
- SBOM export (CycloneDX 1.5, SPDX 2.3)
- EPSS scoring and CISA KEV enrichment
- CISO review queue for CVE-flagged packages
- LDAP / Active Directory authentication with group-to-role mapping
- API tokens for CI/CD pipelines
- Package import from upstream APT sources (Ubuntu, Debian)
- Batch import with streaming SSE progress
- Grype CVE scanner integration
- ClamAV antivirus integration
- Download statistics and analytics
[0.5.0] — 2025-12-15¶
Alpha release.
Added¶
- APT repository with Nginx serving
- Package upload with format and SHA-256 validation
- GPG signing
- JWT authentication
- Basic RBAC (admin, uploader, reader)
- Web frontend (React)
- FastAPI backend
- Docker Compose deployment