Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
2d5625c
refactor: [#220] rename external_tools module to templating
josecelano Dec 8, 2025
dff5a09
docs: [#220] mark Phase 0 as completed
josecelano Dec 8, 2025
311d987
feat: [#220] implement Phase 1 - create tracker storage directories
josecelano Dec 8, 2025
1b83dfb
docs: [#220] add Phase 1 manual E2E test results
josecelano Dec 8, 2025
794ef06
feat: [#220] implement Phase 2 - initialize tracker SQLite database
josecelano Dec 8, 2025
aa1c494
feat: [#220] add docker compose .env template with project generator …
josecelano Dec 8, 2025
659e407
refactor: [#220] reorganize tracker template structure to match ansib…
josecelano Dec 8, 2025
4957b01
docs: [#220] mark Phase 4 complete in implementation progress tracking
josecelano Dec 8, 2025
59e3762
feat: [#220] replace nginx demo with Torrust Tracker in docker-compos…
josecelano Dec 8, 2025
748951d
docs: [#220] mark Phase 5 complete in implementation progress tracking
josecelano Dec 8, 2025
52d7c2a
feat: [#220] make tracker configuration mandatory in environment config
josecelano Dec 8, 2025
6939553
feat: [#220] Phase 7 infrastructure for tracker firewall configuratio…
josecelano Dec 9, 2025
8294d9e
fix: [#220] clippy doc_markdown and rustdoc warnings for Phase 7
josecelano Dec 9, 2025
9c7daac
docs: [#220] exclude generated folders from taplo and update linting …
josecelano Dec 9, 2025
3d397c8
chore: delete mmanual test file
josecelano Dec 9, 2025
3f6721b
feat: [#220] wire tracker config through provision workflow (Phase 7 …
josecelano Dec 9, 2025
b947d1b
refactor: [#220] remove default UDP tracker on port 6868
josecelano Dec 9, 2025
9453e80
feat: [#220] add .env file check to run-compose-services playbook
josecelano Dec 9, 2025
35a256f
refactor: [#220] simplify RunningServicesValidator to external-only v…
josecelano Dec 9, 2025
83254bb
refactor: [#221] separate E2E configuration from runtime state with b…
josecelano Dec 9, 2025
f16d6cd
feat: [#221] add optional --ssh-port argument to register command
josecelano Dec 9, 2025
430c52e
docs: [#221] add ADR for register SSH port override and update E2E te…
josecelano Dec 9, 2025
67efd7c
feat: [#220] add default tracker configuration to environment template
josecelano Dec 10, 2025
b7e3527
refactor: [#220] return JSON string directly from config helper
josecelano Dec 10, 2025
e704f27
refactor: [#220] organize E2E tests into module structure
josecelano Dec 10, 2025
e22e601
refactor: [#220] consolidate create_test_environment_config into shar…
josecelano Dec 10, 2025
862b95d
refactor: [#220] remove unused with_working_dir functions
josecelano Dec 10, 2025
638561e
refactor: [#220] remove unused update_environment_ssh_port function
josecelano Dec 10, 2025
13cca4c
refactor: [#220] make E2eConfigEnvironment single source of truth for…
josecelano Dec 10, 2025
1e957ba
refactor: [#220] rename E2E test binaries to better reflect their pur…
josecelano Dec 10, 2025
61a712d
refactor: [#220] update cargo aliases for renamed E2E test binaries
josecelano Dec 10, 2025
c7b27ce
docs: [#220] document decision to use single Docker image for sequent…
josecelano Dec 10, 2025
893ac72
docs: [#220] reorganize E2E testing documentation into structured dir…
josecelano Dec 10, 2025
9d64e9b
feat: [#220] make HTTP API bind address configurable in tracker template
josecelano Dec 10, 2025
2827ab8
docs: add cross-references between template documentation files
josecelano Dec 10, 2025
de5d88b
docs: update workflow badges to match renamed workflow files
josecelano Dec 10, 2025
5592ff7
docs: [#220] add comprehensive documentation for release and run comm…
josecelano Dec 10, 2025
8e0e096
fix: [#220] correct netstat flags and add tulnp to project dictionary
josecelano Dec 10, 2025
a39ba13
feat: [#220] enhance test command with external health checks
josecelano Dec 10, 2025
b908a24
docs: [#220] add implementation plan for test command architecture im…
josecelano Dec 10, 2025
d70ab59
step: [#220] create tracker DTO module structure
josecelano Dec 10, 2025
6c86c44
step: [#220] implement UdpTrackerSection DTO
josecelano Dec 10, 2025
701cc28
step: [#220] implement HttpTrackerSection DTO
josecelano Dec 10, 2025
a6741cf
step: [#220] implement HttpApiSection DTO
josecelano Dec 10, 2025
3234f16
step: [#220] implement TrackerCoreSection DTO
josecelano Dec 10, 2025
b985a09
step: [#220] implement TrackerSection DTO
josecelano Dec 10, 2025
de1fdb4
step: [#220] update domain types to use SocketAddr
josecelano Dec 10, 2025
01be3af
step: [#220] update EnvironmentCreationConfig to use TrackerSection
josecelano Dec 11, 2025
5cc10f5
docs: [#220] mark Phase 0 complete - architecture fix done
josecelano Dec 11, 2025
27557f0
docs: [#220] add ADR for port zero not supported in bind addresses
josecelano Dec 11, 2025
1cbb942
step: [#220] add DynamicPortNotSupported error variant
josecelano Dec 11, 2025
b9a739b
docs: [#220] mark Step 1.2 complete
josecelano Dec 11, 2025
2d8e8f4
step: [#220] add port 0 validation in conversion methods
josecelano Dec 11, 2025
877a550
docs: [#220] mark Step 1.3 complete
josecelano Dec 11, 2025
ff04fe7
step: [#220] add port 0 validation tests
josecelano Dec 11, 2025
7312107
docs: [#220] mark Phase 1 complete - port 0 validation
josecelano Dec 11, 2025
2ca1e04
step: [#220] update RunningServicesValidator for multiple HTTP trackers
josecelano Dec 11, 2025
3be2c3a
step: [#220] add unit tests for multiple HTTP tracker support
josecelano Dec 11, 2025
fbb300b
docs: [#220] mark Phase 2 as complete in implementation plan
josecelano Dec 11, 2025
20afd81
docs: [#220] update run command documentation
josecelano Dec 11, 2025
0c14fd6
docs: [#220] update architecture docs for running services validator
josecelano Dec 11, 2025
223b83d
docs: [#220] mark Step 4.4 complete - all validation passed
josecelano Dec 11, 2025
d6a5c3b
refactor: [#220] create external_validators module structure
josecelano Dec 11, 2025
dbe2876
refactor: [#220] move running_services validator to external_validators
josecelano Dec 11, 2025
e86fe48
refactor: [#220] update infrastructure exports for external validators
josecelano Dec 11, 2025
901a817
refactor: [#220] update imports to use external_validators path
josecelano Dec 11, 2025
32d31d7
docs: [#220] add ADR for infrastructure module organization
josecelano Dec 11, 2025
fbfeb65
docs: [#220] mark Phase 3 complete - infrastructure reorganization
josecelano Dec 11, 2025
aacdcd6
chore: [#220] remove completed implementation plan
josecelano Dec 11, 2025
cff2e0d
docs: [#220] update documentation with real command outputs and state…
josecelano Dec 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
[alias]
lint = "run --bin linter all"
e2e-full = "run --bin e2e-tests-full"
e2e-provision = "run --bin e2e-provision-tests"
e2e-config = "run --bin e2e-config-and-release-tests"
e2e-complete = "run --bin e2e-complete-workflow-tests"
e2e-infrastructure = "run --bin e2e-infrastructure-lifecycle-tests"
e2e-deployment = "run --bin e2e-deployment-workflow-tests"
cov = "llvm-cov"
cov-check = "llvm-cov --all-features --workspace --fail-under-lines 70"
cov-lcov = "llvm-cov --lcov --output-path=./.coverage/lcov.info"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: E2E Configuration Tests
name: E2E Deployment Workflow Tests

# This workflow tests ONLY software configuration, release, and run phases
# using Docker containers. It does NOT test infrastructure provisioning
Expand All @@ -22,7 +22,7 @@ on:
workflow_dispatch: # Allow manual triggering

jobs:
e2e-config-and-release-tests:
e2e-deployment-workflow-tests:
runs-on: ubuntu-latest
timeout-minutes: 45 # Timeout for complete configuration testing with software installation

Expand Down Expand Up @@ -62,16 +62,16 @@ jobs:
chmod 600 fixtures/testing_rsa
ls -la fixtures/testing_rsa

- name: Build E2E configuration and release tests binary
- name: Build E2E deployment workflow tests binary
run: |
cargo build --bin e2e-config-and-release-tests --release
cargo build --bin e2e-deployment-workflow-tests --release

- name: Run E2E configuration and release test
- name: Run E2E deployment workflow test
run: |
# Run the E2E configuration and release test with debug logging for better debugging
echo "🚀 Starting E2E configuration and release test at $(date)"
cargo run --bin e2e-config-and-release-tests
echo "✅ E2E configuration and release test completed at $(date)"
# Run the E2E deployment workflow test with debug logging for better debugging
echo "🚀 Starting E2E deployment workflow test at $(date)"
cargo run --bin e2e-deployment-workflow-tests
echo "✅ E2E deployment workflow test completed at $(date)"
env:
# Preserve environment variables for the E2E test
RUST_LOG: debug
Expand Down Expand Up @@ -113,8 +113,8 @@ jobs:
# properly (e.g., if the test was abruptly halted). Under normal circumstances,
# the testcontainers crate should automatically clean up containers when tests finish.

# Clean up the specific container created for e2e-config tests
docker rm -f torrust-tracker-vm-e2e-config 2>/dev/null || echo "Container torrust-tracker-vm-e2e-config not found or already removed"
# Clean up the specific container created for e2e-deployment tests
docker rm -f torrust-tracker-vm-e2e-deployment 2>/dev/null || echo "Container torrust-tracker-vm-e2e-deployment not found or already removed"

# Clean up any test images if needed
docker images --filter "reference=torrust-provisioned-instance*" -q | xargs -r docker rmi -f || echo "No test images to remove"
Expand All @@ -126,9 +126,9 @@ jobs:
docker ps -a

echo "=== Test Summary ==="
echo "E2E configuration test workflow completed"
echo "E2E deployment workflow test completed"
if [ "${{ job.status }}" = "success" ]; then
echo "✅ All configuration tests passed successfully"
echo "✅ All deployment workflow tests passed successfully"
else
echo "❌ Some configuration tests failed - check logs above"
echo "❌ Some deployment workflow tests failed - check logs above"
fi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: E2E Provision and Destroy Tests
name: E2E Infrastructure Lifecycle Tests

# This workflow tests infrastructure provisioning and destruction (creating and destroying VMs/containers)
# It does NOT test software configuration/installation to avoid GitHub Actions
Expand All @@ -18,7 +18,7 @@ on:
workflow_dispatch: # Allow manual triggering

jobs:
e2e-provision-tests:
e2e-infrastructure-lifecycle-tests:
runs-on: ubuntu-latest
timeout-minutes: 30 # Reduced timeout since we're not installing software

Expand Down Expand Up @@ -48,17 +48,17 @@ jobs:
tofu version
cargo --version

- name: Build E2E provision and destroy tests binary
- name: Build E2E infrastructure lifecycle tests binary
run: |
cargo build --bin e2e-provision-and-destroy-tests --release
cargo build --bin e2e-infrastructure-lifecycle-tests --release

- name: Run E2E provision and destroy test
- name: Run E2E infrastructure lifecycle test
run: |
# Run the E2E provision and destroy test with debug logging for better debugging
# Run the E2E infrastructure lifecycle test with debug logging for better debugging
# Use sudo -E and preserve PATH to ensure cargo is accessible
echo "🚀 Starting E2E provision and destroy test at $(date)"
sudo -E env "PATH=$PATH" cargo run --bin e2e-provision-and-destroy-tests
echo "✅ E2E provision and destroy test completed at $(date)"
echo "🚀 Starting E2E infrastructure lifecycle test at $(date)"
sudo -E env "PATH=$PATH" cargo run --bin e2e-infrastructure-lifecycle-tests
echo "✅ E2E infrastructure lifecycle test completed at $(date)"
env:
# Preserve environment variables for the E2E test
RUST_LOG: debug
Expand All @@ -68,18 +68,18 @@ jobs:
run: |
echo "=== Infrastructure Outputs ==="
# Only check outputs if build directory still exists (it may be cleaned up by DestroyCommand)
if [ -d "build/e2e-provision/tofu/lxd" ]; then
cd build/e2e-provision/tofu/lxd
if [ -d "build/e2e-infrastructure/tofu/lxd" ]; then
cd build/e2e-infrastructure/tofu/lxd
sudo -E tofu output || echo "No outputs available"
else
echo "Build directory not found (likely cleaned up by DestroyCommand)"
fi

echo "=== Container Status ==="
sudo lxc list torrust-tracker-vm-e2e-provision || echo "Container not found"
sudo lxc list torrust-tracker-vm-e2e-infrastructure || echo "Container not found"

# Check if the container has an IP address before proceeding
sudo lxc info torrust-tracker-vm-e2e-provision || echo "Container info not available"
sudo lxc info torrust-tracker-vm-e2e-infrastructure || echo "Container info not available"

- name: Debug information (on failure)
if: failure()
Expand All @@ -88,8 +88,8 @@ jobs:
sudo lxc list || echo "LXC list failed"

echo "=== OpenTofu State ==="
if [ -d "build/e2e-provision/tofu/lxd" ]; then
cd build/e2e-provision/tofu/lxd
if [ -d "build/e2e-infrastructure/tofu/lxd" ]; then
cd build/e2e-infrastructure/tofu/lxd
sudo -E tofu show || echo "No state to show"
else
echo "No OpenTofu state directory found"
Expand All @@ -108,18 +108,18 @@ jobs:
echo "Test failed - attempting emergency cleanup..."

# Try OpenTofu cleanup only if build directory still exists
if [ -d "build/e2e-provision/tofu/lxd" ]; then
if [ -d "build/e2e-infrastructure/tofu/lxd" ]; then
echo "Found OpenTofu state directory, attempting tofu destroy..."
cd build/e2e-provision/tofu/lxd
cd build/e2e-infrastructure/tofu/lxd
sudo -E tofu destroy -auto-approve || echo "Tofu destroy failed or nothing to destroy"
else
echo "No OpenTofu state directory found (likely cleaned up by DestroyCommand)"
fi

# Always attempt LXD cleanup (no working directory dependency)
echo "Attempting LXD resource cleanup..."
sudo lxc delete torrust-tracker-vm-e2e-provision --force || echo "Container deletion failed or container doesn't exist"
sudo lxc profile delete torrust-profile-e2e-provision || echo "Profile deletion failed or profile doesn't exist"
sudo lxc delete torrust-tracker-vm-e2e-infrastructure --force || echo "Container deletion failed or container doesn't exist"
sudo lxc profile delete torrust-profile-e2e-infrastructure || echo "Profile deletion failed or profile doesn't exist"

- name: Final verification
if: always()
Expand All @@ -128,9 +128,9 @@ jobs:
sudo lxc list

echo "=== Test Summary ==="
echo "E2E provision and destroy test workflow completed"
echo "E2E infrastructure lifecycle test workflow completed"
if [ "${{ job.status }}" = "success" ]; then
echo "✅ All provision and destroy tests passed successfully"
echo "✅ All infrastructure lifecycle tests passed successfully"
else
echo "❌ Some provision and destroy tests failed - check logs above"
echo "❌ Some infrastructure lifecycle tests failed - check logs above"
fi
8 changes: 8 additions & 0 deletions .taplo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Taplo configuration file for TOML formatting
# Used by the "Even Better TOML" VS Code extension

# Exclude generated and runtime folders from linting
exclude = [
"build/**",
"data/**",
"envs/**",
]

[formatting]
# Preserve blank lines that exist
allowed_blank_lines = 1
Expand Down
15 changes: 10 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,10 +130,15 @@ These principles should guide all development decisions, code reviews, and featu
- **Test**: `cargo test`
- **Unit Tests**: When writing unit tests, follow conventions described in [`docs/contributing/testing/`](docs/contributing/testing/)
- **E2E Tests**:
- `cargo run --bin e2e-tests-full` - Comprehensive tests (⚠️ **LOCAL ONLY** - cannot run on GitHub Actions due to network connectivity issues)
- `cargo run --bin e2e-provision-and-destroy-tests` - Infrastructure provisioning and destruction tests (GitHub runner-compatible)
- `cargo run --bin e2e-config-and-release-tests` - Software installation, configuration, release, and run workflow tests (GitHub runner-compatible)
- Pre-commit hook runs the split tests (`e2e-provision-and-destroy-tests` + `e2e-config-and-release-tests`) for GitHub Copilot compatibility
- See [`docs/e2e-testing.md`](docs/e2e-testing.md) for detailed information about CI limitations
- `cargo run --bin e2e-complete-workflow-tests` - Comprehensive tests (⚠️ **LOCAL ONLY** - cannot run on GitHub Actions due to network connectivity issues)
- `cargo run --bin e2e-infrastructure-lifecycle-tests` - Infrastructure provisioning and destruction tests (GitHub runner-compatible)
- `cargo run --bin e2e-deployment-workflow-tests` - Software installation, configuration, release, and run workflow tests (GitHub runner-compatible)
- Pre-commit hook runs the split tests (`e2e-infrastructure-lifecycle-tests` + `e2e-deployment-workflow-tests`) for GitHub Copilot compatibility
- See [`docs/e2e-testing/`](docs/e2e-testing/) for detailed information about CI limitations
- **Manual E2E Testing**: For step-by-step manual testing with CLI commands, see [`docs/e2e-testing/manual-testing.md`](docs/e2e-testing/manual-testing.md). This guide covers:
- Complete manual test workflow from template creation to deployment
- Handling interrupted commands and state recovery
- Troubleshooting common issues
- Cleanup procedures for both application and LXD resources

Follow the project conventions and ensure all checks pass.
13 changes: 7 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@ name = "torrust-tracker-deployer"
path = "src/main.rs"

[[bin]]
name = "e2e-tests-full"
path = "src/bin/e2e_tests_full.rs"
name = "e2e-complete-workflow-tests"
path = "src/bin/e2e_complete_workflow_tests.rs"

[[bin]]
name = "e2e-config-and-release-tests"
path = "src/bin/e2e_config_and_release_tests.rs"
name = "e2e-deployment-workflow-tests"
path = "src/bin/e2e_deployment_workflow_tests.rs"

[[bin]]
name = "e2e-provision-and-destroy-tests"
path = "src/bin/e2e_provision_and_destroy_tests.rs"
name = "e2e-infrastructure-lifecycle-tests"
path = "src/bin/e2e_infrastructure_lifecycle_tests.rs"

[[bin]]
name = "linter"
Expand All @@ -48,6 +48,7 @@ clap = { version = "4.0", features = [ "derive" ] }
derive_more = "0.99"
figment = { version = "0.10", features = [ "json" ] }
parking_lot = "0.12"
reqwest = "0.12"
rust-embed = "8.0"
serde = { version = "1.0", features = [ "derive" ] }
serde_json = "1.0"
Expand Down
36 changes: 22 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[![Linting](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/linting.yml/badge.svg)](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/linting.yml) [![Testing](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/testing.yml/badge.svg)](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/testing.yml) [![E2E Provision Tests](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/test-e2e-provision.yml/badge.svg)](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/test-e2e-provision.yml) [![E2E Config Tests](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/test-e2e-config.yml/badge.svg)](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/test-e2e-config.yml) [![Test LXD Container Provisioning](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/test-lxd-provision.yml/badge.svg)](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/test-lxd-provision.yml) [![Coverage](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/coverage.yml/badge.svg)](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/coverage.yml)
[![Linting](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/linting.yml/badge.svg)](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/linting.yml) [![Testing](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/testing.yml/badge.svg)](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/testing.yml) [![E2E Infrastructure Tests](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/test-e2e-infrastructure.yml/badge.svg)](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/test-e2e-infrastructure.yml) [![E2E Deployment Tests](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/test-e2e-deployment.yml/badge.svg)](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/test-e2e-deployment.yml) [![Test LXD Container Provisioning](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/test-lxd-provision.yml/badge.svg)](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/test-lxd-provision.yml) [![Coverage](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/coverage.yml/badge.svg)](https://github.com/torrust/torrust-tracker-deployer/actions/workflows/coverage.yml)

# Torrust Tracker Deployer

Expand All @@ -12,9 +12,9 @@
> - ✅ **Hetzner Cloud support** for production deployments
> - ✅ Development and testing workflows
> - ✅ Multi-provider architecture (provider selection via configuration)
> - Application deployment (Torrust Tracker stack) - coming soon
> - ✅ **Application deployment** (Torrust Tracker stack with Docker Compose)
>
> 📋 **MVP Goal:** After completing the [roadmap](docs/roadmap.md), we will have a fully automated deployment solution for Torrust Tracker with complete application stack management.
> 📋 **MVP Goal:** After completing the [roadmap](docs/roadmap.md), we will have a fully automated deployment solution for Torrust Tracker with complete application stack management and multi-cloud provider support.

This Rust application provides automated deployment infrastructure for Torrust tracker projects. It supports **local development** with LXD and **production deployments** with Hetzner Cloud. The multi-provider architecture allows easy extension to additional cloud providers.

Expand All @@ -28,12 +28,13 @@ This Rust application provides automated deployment infrastructure for Torrust t
- ✅ **Fast, easy to install and use** local development solution
- ✅ **No nested virtualization dependency** (CI compatibility)
- ✅ **Multi-provider support** (LXD for local, Hetzner Cloud for production)
- ✅ **Application stack deployment** (Torrust Tracker with Docker Compose)

**Future MVP Goals:** (See [roadmap](docs/roadmap.md))

- 🔄 **Additional cloud providers** (AWS, GCP, Azure)
- 🔄 **Application stack deployment** (Torrust Tracker with Docker Compose)
- 🔄 **Multi-environment management**
- 🔄 **Enhanced observability** (monitoring, alerting, metrics)

## 🔧 Local Development Approach

Expand Down Expand Up @@ -164,18 +165,18 @@ Use the E2E test binaries to run automated infrastructure tests with hardcoded e

```bash
# Run comprehensive E2E tests (LOCAL ONLY - connectivity issues in GitHub runners)
cargo run --bin e2e-tests-full
cargo run --bin e2e-complete-workflow-tests

# Run individual E2E test suites
cargo run --bin e2e-config-and-release-tests # Configuration, release, and run workflow tests
cargo run --bin e2e-provision-and-destroy-tests # Infrastructure provisioning tests
cargo run --bin e2e-deployment-workflow-tests # Configuration, release, and run workflow tests
cargo run --bin e2e-infrastructure-lifecycle-tests # Infrastructure provisioning tests

# Keep the test environment after completion for inspection
cargo run --bin e2e-tests-full -- --keep
cargo run --bin e2e-provision-and-destroy-tests -- --keep
cargo run --bin e2e-complete-workflow-tests -- --keep
cargo run --bin e2e-infrastructure-lifecycle-tests -- --keep

# Use custom templates directory
cargo run --bin e2e-tests-full -- --templates-dir ./custom/templates
cargo run --bin e2e-complete-workflow-tests -- --templates-dir ./custom/templates

# See all available options
cargo run --bin e2e-tests-full -- --help
Expand All @@ -190,15 +191,16 @@ cargo run --bin e2e-tests-full -- --help

### 📖 Manual Deployment Steps

> **✅ Infrastructure commands are now available!** You can create, provision, configure, test, and destroy deployment environments using the CLI.
> **✅ Complete deployment workflow is now available!** You can create, provision, configure, test, deploy, run, and destroy Torrust Tracker environments using the CLI.
>
> **Current Status:**
>
> - ✅ **Environment Management**: Create and manage deployment environments
> - ✅ **Infrastructure Provisioning**: Provision VM infrastructure with LXD
> - ✅ **Infrastructure Provisioning**: Provision VM infrastructure with LXD or Hetzner Cloud
> - ✅ **Configuration**: Configure provisioned infrastructure (Docker, Docker Compose)
> - ✅ **Verification**: Test deployment infrastructure
> - ⚠️ **Application Deployment**: Not yet available - tracker application deployment coming soon
> - ✅ **Application Deployment**: Deploy Torrust Tracker configuration and database
> - ✅ **Service Management**: Start and manage tracker services
>
> **Available Commands:**
>
Expand All @@ -220,7 +222,13 @@ cargo run --bin e2e-tests-full -- --help
> # 6. Verify deployment infrastructure
> torrust-tracker-deployer test my-environment
>
> # 7. Destroy environment when done
> # 7. Deploy tracker application configuration
> torrust-tracker-deployer release my-environment
>
> # 8. Start tracker services
> torrust-tracker-deployer run my-environment
>
> # 9. Destroy environment when done
> torrust-tracker-deployer destroy my-environment
> ```
>
Expand Down
2 changes: 1 addition & 1 deletion docker/provisioned-instance/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,4 +176,4 @@ This container configuration supports the E2E test split architecture:
## Related Documentation

- [Docker Configuration Testing Research](../../docs/research/e2e-docker-config-testing.md)
- [E2E Testing Guide](../../docs/e2e-testing.md)
- [E2E Testing Guide](../../docs/e2e-testing/)
Loading
Loading