GitHub Issue: #1 - Roadmap
This document outlines the development roadmap for the Torrust Tracker Deployer project. Each task is marked with:
[ ]- Not completed[x]- Completed
When starting work on a new feature:
- Create the feature documentation in the
docs/features/folder and commit it - Open an issue on GitHub linking to the feature folder in the repository
- Add the new issue as a child issue of the main EPIC issue
Note: See
docs/features/README.mdfor detailed conventions and process guide for creating new features.
Epic Issue: #2 - Scaffolding for main app
- 1.1 Setup logging - Issue #3 ✅ Completed
- 1.2 Create command
torrust-tracker-deployer destroyto destroy an environment ✅ Completed- Parent EPIC: Implement
destroyCommand - GitHub Issue #8 - Split into two child EPICs for incremental delivery:
- Child EPIC #9: App Layer Destroy Command - Core business logic
- Child EPIC #10: UI Layer Destroy Command - CLI interface
- Parent EPIC: Implement
- 1.3 Refactor extract shared code between testing and production for app bootstrapping ✅ Completed
- 1.4 Improve command to use better abstraction to handle presentation layer ✅ Completed
- User output architecture improvements implemented
- Epic #102 completed
- Message trait system, sink abstraction, and theme support added
- Folder module structure with focused submodules
- 1.5 Create command
torrust-tracker-deployer createto create a new environment ✅ Completed- EPIC: Implement Create Environment Command - GitHub Issue #34
- 1.6 Create command
torrust-tracker-deployer provisionto provision VM infrastructure (UI layer only) ✅ Completed - Issue #174- Note: The App layer ProvisionCommand is already implemented, this task focuses on the console subcommand interface
- Implementation should call the existing ProvisionCommand business logic
- Handle user input, validation, and output presentation
- 1.7 Create command
torrust-tracker-deployer configureto configure provisioned infrastructure (UI layer only) ✅ Completed - Issue #180- Note: The App layer ConfigureCommand is already implemented, this task focuses on the console subcommand interface
- Implementation should call the existing ConfigureCommandHandler business logic
- Handle user input, validation, and output presentation
- Enables transition from "provisioned" to "configured" state via CLI
- 1.8 Create command
torrust-tracker-deployer testto verify deployment infrastructure (UI layer only) ✅ Completed - Issue #188- Note: The App layer TestCommandHandler is already implemented, this task focuses on the console subcommand interface
- Implementation should call the existing TestCommandHandler business logic
- Handle user input, validation, and output presentation
- Enables verification of deployment state via CLI (cloud-init, Docker, Docker Compose)
Note: See docs/research/UX/ for detailed UX research that will be useful to implement the features in this section.
Future Enhancement: The torrust-tracker-deployer deploy porcelain command (intelligent orchestration of plumbing commands) will be implemented after the core plumbing commands are stable. See docs/features/hybrid-command-architecture/ for the complete specification.
Epic Issue: #205 - Add Hetzner Provider Support ✅ Completed
- 2.1 Add Hetzner provider support (Phase 1: Make LXD Explicit) ✅ Completed
- 2.1.1 Add Provider enum and ProviderConfig types - Issue #206 ✅ Completed
- 2.1.2 Update UserInputs to use ProviderConfig - Issue #207 ✅ Completed
- 2.1.3 Update EnvironmentCreationConfig DTO - Issue #208 ✅ Completed
- 2.1.4 Parameterize TofuTemplateRenderer by provider - Issue #212 ✅ Completed
- 2.1.5 Update environment JSON files and E2E tests ✅ Completed (part of #212)
- 2.1.6 Update user documentation - Issue #214 ✅ Completed
- 2.2 Add Hetzner provider support (Phase 2: Add Hetzner) ✅ Completed
- Hetzner OpenTofu templates implemented
- Full deployment workflow tested with Hetzner Cloud
Note: These are internal app layer commands (like ProvisionCommand or ConfigureCommand), not console commands. The approach is to slice by functional services rather than deployment stages - we fully deploy a working stack from the beginning and incrementally add new services.
-
3.1 Finish ConfigureCommand ✅ Completed - Epic #16
-
3.2 Implement ReleaseCommand and RunCommand with vertical slices - Epic #216
Strategy: Build incrementally with working deployments at each step. Each slice adds a new service to the docker-compose stack.
- 3.2.1 Hello World slice (scaffolding) - Issue #217 ✅ Completed
- Create
releaseandruncommands with minimal docker-compose template - Deploy and run a simple hello-world container to validate the full pipeline
- Create
- 3.2.2 Torrust Tracker slice - Issue #220 ✅ Completed
- Replace hello-world with Torrust Tracker service
- Add tracker configuration template (start with hardcoded defaults, then progressively expose configuration options)
- 3.2.3 MySQL slice - Issue #232 ✅ Completed
- Add MySQL service to docker-compose stack
- Allow user to choose between SQLite and MySQL in environment config
- 3.2.4 Prometheus slice - Issue #238 ✅ Completed
- Add Prometheus service for metrics collection
- 3.2.5 Grafana slice - Issue #246 ✅ Completed
- Add Grafana service for metrics visualization
Notes:
- Each slice delivers a working deployment
- Configuration complexity grows incrementally (hardcoded → environment config → full flexibility)
- Detailed implementation tasks will be defined in EPIC issues
- 3.2.1 Hello World slice (scaffolding) - Issue #217 ✅ Completed
- 4.1 Create docker image for the deployer to use it without needing to install the dependencies (OpenTofu, Ansible, etc) - Issue #264 ✅ Completed
- Docker image published to Docker Hub
- CI/CD workflow for automated builds
- Security scanning with Trivy
- 5.1
torrust-tracker-deployer show- Display environment information and current state - Issue #241 ✅ Completed - 5.2
torrust-tracker-deployer test- Run application tests ✅ Completed - 5.3
torrust-tracker-deployer list- List environments or deployments - Issue #260 ✅ Completed
Note: The test console subcommand is already partially implemented. The show command displays stored environment data (read-only, no remote verification). A future status command may be added for service health checks.
- 6.1 Add HTTPS support with Caddy for all HTTP services - Issue #272
- Implement Caddy TLS termination proxy
- Add HTTPS support for HTTP tracker
- Add HTTPS support for tracker API
- Add HTTPS support for Grafana
- Research Complete: Issue #270 - Caddy evaluation successful, production deployment verified
- 7.1 Implement database backups for MySQL
- 7.2 Implement configuration backups
- 7.3 Create recovery procedures documentation
- 8.1 Add levels of verbosity as described in the UX research
- Implement
-v,-vv,-vvvflags for user-facing output - See
docs/research/UX/for detailed UX research
- Implement
- This roadmap will be linked to an EPIC issue on GitHub for tracking progress
- Each major feature should have corresponding documentation in
docs/features/before implementation begins