11# Makefile for Torrust Tracker Demo - Twelve-Factor App Deployment
22.PHONY : help install-deps test-e2e lint test-unit clean
33.PHONY : infra-init infra-plan infra-apply infra-destroy infra-status infra-refresh-state
4- .PHONY : infra-config-development infra-config-production infra-validate-config
4+ .PHONY : infra-config-development infra-config-production infra-config-e2e infra-config-testing infra-config-staging infra- validate-config
55.PHONY : infra-test-prereq infra-test-ci infra-test-local
66.PHONY : infra-providers infra-environments provider-info
77.PHONY : app-deploy app-redeploy app-health-check
1212# Default variables
1313VM_NAME ?= torrust-tracker-demo
1414# Defaults for quick development workflows only
15- DEV_ENVIRONMENT ?= development
15+ DEV_ENVIRONMENT_TYPE ?= development
16+ DEV_ENVIRONMENT_FILE ?= development-libvirt
1617DEV_PROVIDER ?= libvirt
1718TERRAFORM_DIR = infrastructure/terraform
1819INFRA_TESTS_DIR = infrastructure/tests
@@ -21,16 +22,16 @@ SCRIPTS_DIR = infrastructure/scripts
2122
2223# Parameter validation for infrastructure commands
2324check-infra-params :
24- @if [ -z " $( ENVIRONMENT ) " ]; then \
25- echo " ❌ Error: ENVIRONMENT not specified" ; \
26- echo " Usage: make <target> ENVIRONMENT=<env> PROVIDER=<provider >" ; \
27- echo " Available environments : development, staging, production" ; \
25+ @if [ -z " $( ENVIRONMENT_TYPE ) " ]; then \
26+ echo " ❌ Error: ENVIRONMENT_TYPE not specified" ; \
27+ echo " Usage: make <target> ENVIRONMENT_TYPE=<type> ENVIRONMENT_FILE=<file >" ; \
28+ echo " Available environment types : development, testing, e2e , staging, production" ; \
2829 exit 1; \
2930 fi
30- @if [ -z " $( PROVIDER ) " ]; then \
31- echo " ❌ Error: PROVIDER not specified" ; \
32- echo " Usage: make <target> ENVIRONMENT=<env> PROVIDER=<provider >" ; \
33- echo " Available providers: libvirt, hetzner " ; \
31+ @if [ -z " $( ENVIRONMENT_FILE ) " ]; then \
32+ echo " ❌ Error: ENVIRONMENT_FILE not specified" ; \
33+ echo " Usage: make <target> ENVIRONMENT_TYPE=<type> ENVIRONMENT_FILE=<file >" ; \
34+ echo " Example: make infra-apply ENVIRONMENT_TYPE=development ENVIRONMENT_FILE=development-libvirt " ; \
3435 exit 1; \
3536 fi
3637
@@ -61,11 +62,16 @@ help: ## Show this help message
6162 @echo " ⚙️ SYSTEM SETUP:"
6263 @awk ' BEGIN {FS = ":.*?## "} /^(install-deps|clean).*:.*?## / {printf " %-20s %s\n", $$1, $$2}' $(MAKEFILE_LIST )
6364 @echo " "
64- @echo " Development examples:"
65+ @echo " Development examples:"
6566 @echo " make dev-deploy # Uses defaults: development + libvirt"
66- @echo " make infra-apply ENVIRONMENT=development PROVIDER=libvirt"
67- @echo " make infra-apply ENVIRONMENT=production PROVIDER=hetzner"
68- @echo " make app-deploy ENVIRONMENT=development"
67+ @echo " make infra-apply ENVIRONMENT_TYPE=development ENVIRONMENT_FILE=development-libvirt"
68+ @echo " make infra-apply ENVIRONMENT_TYPE=production ENVIRONMENT_FILE=production-hetzner"
69+ @echo " make app-deploy ENVIRONMENT_TYPE=development ENVIRONMENT_FILE=development-libvirt"
70+ @echo " "
71+ @echo " Configuration examples:"
72+ @echo " make infra-config-development PROVIDER=libvirt # Create development-libvirt.env"
73+ @echo " make infra-config-production PROVIDER=hetzner # Create production-hetzner.env"
74+ @echo " make infra-config-e2e PROVIDER=libvirt # Create e2e-libvirt.env"
6975
7076install-deps : # # Install required dependencies (Ubuntu/Debian)
7177 @echo " Installing dependencies..."
@@ -80,26 +86,26 @@ install-deps: ## Install required dependencies (Ubuntu/Debian)
8086# =============================================================================
8187
8288infra-init : check-infra-params # # Initialize infrastructure (Terraform init)
83- @echo " Initializing infrastructure for $( ENVIRONMENT ) on $( PROVIDER ) ... "
84- $( SCRIPTS_DIR ) /provision-infrastructure.sh $( ENVIRONMENT ) $(PROVIDER ) init
89+ @echo " Initializing infrastructure with environment file: $( ENVIRONMENT_FILE ) "
90+ ENVIRONMENT_TYPE= $( ENVIRONMENT_TYPE ) ENVIRONMENT_FILE= $( ENVIRONMENT_FILE ) $(SCRIPTS_DIR ) /provision-infrastructure.sh init
8591
8692infra-plan : check-infra-params # # Plan infrastructure changes
87- @echo " Planning infrastructure for $( ENVIRONMENT ) on $( PROVIDER ) ... "
88- $( SCRIPTS_DIR ) /provision-infrastructure.sh $( ENVIRONMENT ) $(PROVIDER ) plan
93+ @echo " Planning infrastructure with environment file: $( ENVIRONMENT_FILE ) "
94+ ENVIRONMENT_TYPE= $( ENVIRONMENT_TYPE ) ENVIRONMENT_FILE= $( ENVIRONMENT_FILE ) $(SCRIPTS_DIR ) /provision-infrastructure.sh plan
8995
9096infra-apply : check-infra-params # # Provision infrastructure (platform setup)
91- @echo " Provisioning infrastructure for $( ENVIRONMENT ) on $( PROVIDER ) ... "
97+ @echo " Provisioning infrastructure with environment file: $( ENVIRONMENT_FILE ) "
9298 @echo " ⚠️ This command may prompt for your password for sudo operations"
9399 @if [ " $( SKIP_WAIT) " = " true" ]; then \
94100 echo " ⚠️ SKIP_WAIT=true - Infrastructure will not wait for full readiness" ; \
95101 else \
96102 echo " ℹ️ Infrastructure will wait for full readiness (use SKIP_WAIT=true to skip)" ; \
97103 fi
98- SKIP_WAIT=$(SKIP_WAIT ) $( SCRIPTS_DIR ) /provision-infrastructure.sh $( ENVIRONMENT ) $(PROVIDER ) apply
104+ SKIP_WAIT=$(SKIP_WAIT ) ENVIRONMENT_TYPE= $( ENVIRONMENT_TYPE ) ENVIRONMENT_FILE= $( ENVIRONMENT_FILE ) $(SCRIPTS_DIR ) /provision-infrastructure.sh apply
99105
100106infra-destroy : check-infra-params # # Destroy infrastructure
101- @echo " Destroying infrastructure for $( ENVIRONMENT ) on $( PROVIDER ) ... "
102- $( SCRIPTS_DIR ) /provision-infrastructure.sh $( ENVIRONMENT ) $(PROVIDER ) destroy
107+ @echo " Destroying infrastructure with environment file: $( ENVIRONMENT_FILE ) "
108+ ENVIRONMENT_TYPE= $( ENVIRONMENT_TYPE ) ENVIRONMENT_FILE= $( ENVIRONMENT_FILE ) $(SCRIPTS_DIR ) /provision-infrastructure.sh destroy
103109
104110infra-status : check-infra-params # # Show infrastructure status
105111 @echo " Infrastructure status for $( ENVIRONMENT) on $( PROVIDER) :"
@@ -127,26 +133,44 @@ infra-providers: ## List available infrastructure providers
127133 @echo " hetzner - Hetzner Cloud for production deployments"
128134 @echo " "
129135 @echo " Usage examples:"
130- @echo " make infra-apply ENVIRONMENT =development PROVIDER= libvirt"
131- @echo " make infra-apply ENVIRONMENT =staging PROVIDER= digitalocean"
132- @echo " make infra-apply ENVIRONMENT =production PROVIDER= hetzner"
136+ @echo " make infra-apply ENVIRONMENT_TYPE =development ENVIRONMENT_FILE=development- libvirt"
137+ @echo " make infra-apply ENVIRONMENT_TYPE =staging ENVIRONMENT_FILE=staging- digitalocean"
138+ @echo " make infra-apply ENVIRONMENT_TYPE =production ENVIRONMENT_FILE=production- hetzner"
133139
134- infra-environments : # # List available environments
135- @echo " Available Environments:"
140+ infra-environments : # # List available environments and their providers
141+ @echo " Available Environment Configurations:"
142+ @echo " "
136143 @echo " Templates (infrastructure/config/templates/environments/):"
137- @ls infrastructure/config/templates/environments/* .env.tpl 2> /dev/null | \
138- xargs -I {} basename {} | sed ' s/\.env.*//g ' | sort | uniq || \
139- echo " No templates found"
144+ @ls infrastructure/config/templates/environments/* .defaults 2> /dev/null | \
145+ xargs -I {} basename {} .defaults | sort | sed ' s/^/ / ' || \
146+ echo " No template defaults found"
140147 @echo " "
141148 @echo " User configurations (infrastructure/config/environments/):"
142- @ls infrastructure/config/environments/* .env 2> /dev/null | \
143- xargs -I {} basename {} | sed ' s/\.env.*//g' | sort | uniq || \
144- echo " No user configs found"
149+ @if ls infrastructure/config/environments/* .env > /dev/null 2>&1 ; then \
150+ for file in infrastructure/config/environments/* .env; do \
151+ if [ -f " $$ file" ]; then \
152+ env=$$(grep "^ENVIRONMENT_TYPE=" "$$file" 2>/dev/null | cut -d'=' -f2 | tr -d '"' | tr -d "'" ) ; \
153+ provider=$$(grep "^PROVIDER=" "$$file" 2>/dev/null | cut -d'=' -f2 | tr -d '"' | tr -d "'" ) ; \
154+ filename=$$(basename "$$file" .env) ; \
155+ echo " $$ filename -> Environment: $$ env, Provider: $$ provider" ; \
156+ fi \
157+ done ; \
158+ else \
159+ echo " No user configs found" ; \
160+ fi
145161 @echo " "
146162 @echo " Environment types:"
147163 @echo " development - Local development and testing"
164+ @echo " testing - General testing (reserved for future use)"
165+ @echo " e2e - End-to-end testing"
148166 @echo " staging - Pre-production testing"
149167 @echo " production - Production deployment"
168+ @echo " "
169+ @echo " Usage examples:"
170+ @echo " make infra-config-development PROVIDER=libvirt # Create development-libvirt.env"
171+ @echo " make infra-config-production PROVIDER=hetzner # Create production-hetzner.env"
172+ @echo " make infra-apply ENVIRONMENT_TYPE=development ENVIRONMENT_FILE=development-libvirt"
173+ @echo " make infra-apply ENVIRONMENT_TYPE=production ENVIRONMENT_FILE=production-hetzner"
150174
151175provider-info : # # Show provider information (requires PROVIDER=<name>)
152176 @if [ -z " $( PROVIDER) " ]; then \
@@ -157,13 +181,60 @@ provider-info: ## Show provider information (requires PROVIDER=<name>)
157181 @echo " Getting information for provider: $( PROVIDER) "
158182 @$(SCRIPTS_DIR ) /providers/provider-interface.sh info $(PROVIDER )
159183
160- infra-config-development : # # Generate development environment configuration
161- @echo " Configuring development environment..."
162- $(SCRIPTS_DIR ) /configure-env.sh development
184+ infra-config-development : # # Generate development environment configuration (requires PROVIDER=<name>)
185+ @if [ -z " $( PROVIDER) " ]; then \
186+ echo " Error: PROVIDER not specified" ; \
187+ echo " Usage: make infra-config-development PROVIDER=<provider>" ; \
188+ echo " Available providers: libvirt, hetzner" ; \
189+ echo " Example: make infra-config-development PROVIDER=libvirt" ; \
190+ exit 1; \
191+ fi
192+ @echo " Configuring development environment for $( PROVIDER) ..."
193+ $(SCRIPTS_DIR ) /configure-env.sh development $(PROVIDER )
194+
195+ infra-config-production : # # Generate production environment configuration (requires PROVIDER=<name>)
196+ @if [ -z " $( PROVIDER) " ]; then \
197+ echo " Error: PROVIDER not specified" ; \
198+ echo " Usage: make infra-config-production PROVIDER=<provider>" ; \
199+ echo " Available providers: libvirt, hetzner" ; \
200+ echo " Example: make infra-config-production PROVIDER=hetzner" ; \
201+ exit 1; \
202+ fi
203+ @echo " Configuring production environment for $( PROVIDER) ..."
204+ $(SCRIPTS_DIR ) /configure-env.sh production $(PROVIDER )
205+
206+ infra-config-e2e : # # Generate e2e environment configuration (requires PROVIDER=<name>)
207+ @if [ -z " $( PROVIDER) " ]; then \
208+ echo " Error: PROVIDER not specified" ; \
209+ echo " Usage: make infra-config-e2e PROVIDER=<provider>" ; \
210+ echo " Available providers: libvirt, hetzner" ; \
211+ echo " Example: make infra-config-e2e PROVIDER=libvirt" ; \
212+ exit 1; \
213+ fi
214+ @echo " Configuring e2e environment for $( PROVIDER) ..."
215+ $(SCRIPTS_DIR ) /configure-env.sh e2e $(PROVIDER )
216+
217+ infra-config-testing : # # Generate testing environment configuration (requires PROVIDER=<name>)
218+ @if [ -z " $( PROVIDER) " ]; then \
219+ echo " Error: PROVIDER not specified" ; \
220+ echo " Usage: make infra-config-testing PROVIDER=<provider>" ; \
221+ echo " Available providers: libvirt, hetzner" ; \
222+ echo " Example: make infra-config-testing PROVIDER=libvirt" ; \
223+ exit 1; \
224+ fi
225+ @echo " Configuring testing environment for $( PROVIDER) ..."
226+ $(SCRIPTS_DIR ) /configure-env.sh testing $(PROVIDER )
163227
164- infra-config-production : # # Generate production environment configuration
165- @echo " Configuring production environment..."
166- $(SCRIPTS_DIR ) /configure-env.sh production
228+ infra-config-staging : # # Generate staging environment configuration (requires PROVIDER=<name>)
229+ @if [ -z " $( PROVIDER) " ]; then \
230+ echo " Error: PROVIDER not specified" ; \
231+ echo " Usage: make infra-config-staging PROVIDER=<provider>" ; \
232+ echo " Available providers: libvirt, hetzner" ; \
233+ echo " Example: make infra-config-staging PROVIDER=hetzner" ; \
234+ exit 1; \
235+ fi
236+ @echo " Configuring staging environment for $( PROVIDER) ..."
237+ $(SCRIPTS_DIR ) /configure-env.sh staging $(PROVIDER )
167238
168239infra-validate-config : # # Validate configuration for all environments
169240 @echo " Validating configuration..."
@@ -187,21 +258,21 @@ infra-test-local: ## Run local-only infrastructure tests (requires virtualizatio
187258# =============================================================================
188259
189260app-deploy : # # Deploy application (Twelve-Factor Build + Release + Run stages)
190- @echo " Deploying application for $( ENVIRONMENT ) ..."
261+ @echo " Deploying application for $( ENVIRONMENT_TYPE ) - $( ENVIRONMENT_FILE ) ..."
191262 @if [ " $( SKIP_WAIT) " = " true" ]; then \
192263 echo " ⚠️ SKIP_WAIT=true - Application will not wait for service readiness" ; \
193264 else \
194265 echo " ℹ️ Application will wait for service readiness (use SKIP_WAIT=true to skip)" ; \
195266 fi
196- SKIP_WAIT=$(SKIP_WAIT ) $( SCRIPTS_DIR ) /deploy-app.sh $(ENVIRONMENT )
267+ SKIP_WAIT=$(SKIP_WAIT ) ENVIRONMENT_TYPE= $( ENVIRONMENT_TYPE ) ENVIRONMENT_FILE= $( ENVIRONMENT_FILE ) $( SCRIPTS_DIR ) /deploy-app.sh $(ENVIRONMENT_TYPE ) - $( ENVIRONMENT_FILE )
197268
198269app-redeploy : # # Redeploy application without infrastructure changes
199- @echo " Redeploying application for $( ENVIRONMENT ) ..."
200- $( SCRIPTS_DIR ) /deploy-app.sh $(ENVIRONMENT )
270+ @echo " Redeploying application for $( ENVIRONMENT_TYPE ) - $( ENVIRONMENT_FILE ) ..."
271+ ENVIRONMENT_TYPE= $( ENVIRONMENT_TYPE ) ENVIRONMENT_FILE= $( ENVIRONMENT_FILE ) $( SCRIPTS_DIR ) /deploy-app.sh $(ENVIRONMENT_TYPE ) - $( ENVIRONMENT_FILE )
201272
202273app-health-check : # # Validate deployment health
203- @echo " Running health check for $( ENVIRONMENT ) ..."
204- $( SCRIPTS_DIR ) /health-check.sh $(ENVIRONMENT )
274+ @echo " Running health check for $( ENVIRONMENT_TYPE ) - $( ENVIRONMENT_FILE ) ..."
275+ ENVIRONMENT_TYPE= $( ENVIRONMENT_TYPE ) ENVIRONMENT_FILE= $( ENVIRONMENT_FILE ) $( SCRIPTS_DIR ) /health-check.sh $(ENVIRONMENT_TYPE ) - $( ENVIRONMENT_FILE )
205276
206277app-test-config : # # Test application configuration
207278 @echo " Testing application configuration..."
0 commit comments