Commit Graph

46 Commits

Author SHA1 Message Date
alex 173cf7f75c feat(v2): wire worker role lifecycle 2026-07-27 22:05:45 +02:00
alex 8c07c43ed2 feat(v2): add durable worker lifecycle service 2026-07-27 22:04:02 +02:00
alex 3f1136b99e fix(v2): fence execution leases and redact progress 2026-07-27 22:01:33 +02:00
alex 474efa526f feat(v2): expose execution control and event APIs 2026-07-27 21:54:05 +02:00
alex 057895f138 feat(v2): enqueue and lease durable executions 2026-07-27 21:48:26 +02:00
alex f3858ac43a feat(v2): add guarded execution state transitions 2026-07-27 21:43:54 +02:00
alex 61189c27d2 feat(v2): add local sources and repository jobs 2026-07-27 21:36:45 +02:00
alex fb4cd4cd3e fix(v2): support nested repository paths 2026-07-27 21:22:54 +02:00
alex 14b4347806 fix(v2): enforce repository safety failures 2026-07-27 21:16:44 +02:00
alex 908859084a fix(v2): enforce repository protocol safety 2026-07-27 21:10:26 +02:00
alex 175a550c7b fix(auth): persist sessions and lock remote setup 2026-07-27 21:01:04 +02:00
alex 5cbd5b836c test(auth): require durable sessions and safe remote setup 2026-07-27 20:55:42 +02:00
alex a7e68e2eab fix(auth): protect setup and expire sessions 2026-07-27 20:48:03 +02:00
alex 448fa98629 feat(v2): enforce repository safety invariants 2026-07-27 20:25:27 +02:00
alex df62536773 feat(v2): initialize allowlisted repositories 2026-07-27 20:19:51 +02:00
alex b823c6edb7 feat(v2): add secure control plane 2026-07-27 20:13:08 +02:00
alex 15f8794029 fix(v2): enforce M1 runtime persistence invariants 2026-07-27 19:42:41 +02:00
alex 8d1de81f2b feat(v2): add validated runtime and metadata store 2026-07-27 19:24:49 +02:00
alex a0d081a4b4 fix(v2): enforce hardened M0 contracts 2026-07-27 19:00:09 +02:00
alex 791f4526f9 chore(v2): establish protocol and test foundation 2026-07-27 18:44:47 +02:00
alex 9f59540686 cleaned up 2026-06-11 14:55:34 +02:00
alex cc694e71b4 feat: dockerize app and convert to pyproject setup
- Add pyproject.toml with proper metadata and dependency groups
- Create multi-stage Dockerfile for backend
- Add docker-compose.yml with dev/prod profiles
- Create frontend Dockerfile with nginx
- Add .dockerignore for optimized builds
- Update README with Docker instructions and troubleshooting
- Remove requirements.txt in favor of pyproject.toml
- Ensure data persistence with Docker volumes
2026-05-11 22:50:11 +02:00
alex 1978602da6 feat(frontend): add static file serving for production build 2026-05-11 22:04:26 +02:00
alex 55ec0687a5 feat(retention): add count-based and days-based retention policies 2026-05-11 22:03:50 +02:00
alex a4a16655b9 feat(scheduler): add APScheduler integration with cron support 2026-05-11 22:03:03 +02:00
alex 4d2c21a42e feat(adapters): add SSH and database adapters 2026-05-11 22:02:25 +02:00
alex b4a22a1c44 feat(routers): add executions, backups, and settings endpoints 2026-05-11 22:01:31 +02:00
alex b2d196498b feat(dashboard): add GET /api/dashboard/ stats endpoint
- Active jobs count, total backups, storage used
- Recent failures (24h) and last 10 executions
- Uses DashboardStats schema
2026-05-11 21:56:02 +02:00
alex d3b92593d5 feat(frontend): add API client, layout, and routing
- Create Axios-based API client with sources, jobs, and dashboard endpoints
- Add responsive Layout component with navigation sidebar
- Set up React Router with Dashboard, Backups, and Settings routes
- Configure TanStack Query provider with default options
- Use lucide-react for navigation icons
2026-05-11 21:47:20 +02:00
alex 7676438466 fix(tests): resolve lazy loading errors in test_engine.py
Add await db.refresh() calls with relationship attributes before accessing
test_job.executions and execution.backups in async test context.

Fixes lazy loading errors in:
- test_execute_full_backup
- test_execute_incremental_without_full
2026-05-11 21:40:52 +02:00
alex ed64b5ff62 fix: use @pytest_asyncio.fixture for async fixtures in test_engine.py 2026-05-11 21:39:12 +02:00
alex 19987d68a0 refactor(tests): use client fixture for test isolation
Replace all AsyncClient instantiations in test_sources.py and test_jobs.py
with the shared  fixture from conftest.py. This ensures proper test
database isolation via dependency overrides.

- Remove imports of httpx AsyncClient, ASGITransport, and app
- Add client fixture parameter to all test functions
- Remove async with blocks around HTTP requests
- test_engine.py already uses db fixture correctly, no changes needed
2026-05-11 21:38:15 +02:00
alex 58c4bc7f30 fix: use ASGITransport for httpx AsyncClient in tests
- httpx.AsyncClient requires ASGITransport for FastAPI app testing
- Updated all test files to use correct API
2026-05-11 21:28:07 +02:00
alex 55ba9b62d6 fix: improve test isolation and configuration
- Use in-memory SQLite for tests to prevent conflicts
- Add try/finally for robust test cleanup
- Make database URL configurable via env var
- Make CORS origins configurable via env var
- Make SQL echo configurable via env var
2026-05-11 21:25:35 +02:00
alex 878e303cc6 feat: setup FastAPI main app with routers and test fixtures
- Main FastAPI app with all routers included
- CORS middleware for frontend
- Test fixtures with in-memory SQLite database
- Placeholder routers for future tasks
2026-05-11 21:22:55 +02:00
alex 955ed9db49 fix: jobs router session handling, schedule creation, and tests
- Use new session in background task for thread safety
- Fix schedule creation to associate with job
- Fix schedule endpoint return type
- Update tests to use AsyncClient
- Add missing tests for list, get, delete, schedule
- Add updated_at field to Schedule model
2026-05-11 21:20:31 +02:00
alex 1f1ed72494 feat: add jobs CRUD API with manual execution
- Full CRUD for backup jobs
- Manual job trigger endpoint with background execution
- Schedule creation endpoint
- Tests for job creation, update, execution, and 404 cases
2026-05-11 21:12:01 +02:00
alex 810aae1b6e test: add update and 404 tests for sources API 2026-05-11 21:01:41 +02:00
alex 0d0f41d616 feat: add sources CRUD API with tests
- Full CRUD endpoints for backup sources
- Pydantic validation for source types
- pytest tests for create, list, get, delete
2026-05-11 20:59:11 +02:00
alex b69c098cab feat: add backup engine with full/incremental support
- BackupEngine class executes jobs and creates backups
- Automatic fallback from incremental to full if no parent exists
- SHA-256 checksum calculation for integrity
- Tests for full backup and incremental fallback
2026-05-11 20:56:06 +02:00
alex f925ae094c feat: add source adapter base class and local filesystem adapter
- Abstract SourceAdapter with FileInfo dataclass
- LocalAdapter for filesystem backups
- Adapter factory for extensibility
2026-05-11 20:52:31 +02:00
alex 83c3075de0 fix: update pydantic schemas to v2 syntax
- Replace Config class with ConfigDict
- Add cron expression validation
- Add missing updated_at to Schedule
- Add JobExecutionUpdate schema
2026-05-11 20:50:35 +02:00
alex 76cf5054be feat: add pydantic schemas for API validation 2026-05-11 20:47:48 +02:00
alex caf5bcb172 fix: address database model quality issues
- Fix mutable default arguments with lambda
- Add indexes on foreign keys
- Replace deprecated datetime.utcnow
- Add __repr__ methods for debugging
- Remove redundant primary key indexes
2026-05-11 20:46:03 +02:00
alex 13488f7b21 feat: add database models and alembic setup
- SQLAlchemy async models for sources, jobs, schedules, executions, backups, settings
- Alembic migration configuration
2026-05-11 20:43:23 +02:00
alex eff41bd801 chore: setup project structure with dependencies 2026-05-11 20:28:22 +02:00