1
1
# Makefile for Torrust Tracker Demo - Twelve-Factor App Deployment
2
2
.PHONY : help install-deps test-e2e lint test-unit clean
3
3
.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
5
5
.PHONY : infra-test-prereq infra-test-ci infra-test-local
6
6
.PHONY : infra-providers infra-environments provider-info
7
7
.PHONY : app-deploy app-redeploy app-health-check
12
12
# Default variables
13
13
VM_NAME ?= torrust-tracker-demo
14
14
# Defaults for quick development workflows only
15
- DEV_ENVIRONMENT ?= development
15
+ DEV_ENVIRONMENT_TYPE ?= development
16
+ DEV_ENVIRONMENT_FILE ?= development-libvirt
16
17
DEV_PROVIDER ?= libvirt
17
18
TERRAFORM_DIR = infrastructure/terraform
18
19
INFRA_TESTS_DIR = infrastructure/tests
@@ -21,16 +22,16 @@ SCRIPTS_DIR = infrastructure/scripts
21
22
22
23
# Parameter validation for infrastructure commands
23
24
check-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" ; \
28
29
exit 1; \
29
30
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 " ; \
34
35
exit 1; \
35
36
fi
36
37
@@ -61,11 +62,16 @@ help: ## Show this help message
61
62
@echo " ⚙️ SYSTEM SETUP:"
62
63
@awk ' BEGIN {FS = ":.*?## "} /^(install-deps|clean).*:.*?## / {printf " %-20s %s\n", $$1, $$2}' $(MAKEFILE_LIST )
63
64
@echo " "
64
- @echo " Development examples:"
65
+ @echo " Development examples:"
65
66
@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"
69
75
70
76
install-deps : # # Install required dependencies (Ubuntu/Debian)
71
77
@echo " Installing dependencies..."
@@ -80,26 +86,26 @@ install-deps: ## Install required dependencies (Ubuntu/Debian)
80
86
# =============================================================================
81
87
82
88
infra-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
85
91
86
92
infra-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
89
95
90
96
infra-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 ) "
92
98
@echo " ⚠️ This command may prompt for your password for sudo operations"
93
99
@if [ " $( SKIP_WAIT) " = " true" ]; then \
94
100
echo " ⚠️ SKIP_WAIT=true - Infrastructure will not wait for full readiness" ; \
95
101
else \
96
102
echo " ℹ️ Infrastructure will wait for full readiness (use SKIP_WAIT=true to skip)" ; \
97
103
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
99
105
100
106
infra-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
103
109
104
110
infra-status : check-infra-params # # Show infrastructure status
105
111
@echo " Infrastructure status for $( ENVIRONMENT) on $( PROVIDER) :"
@@ -127,26 +133,44 @@ infra-providers: ## List available infrastructure providers
127
133
@echo " hetzner - Hetzner Cloud for production deployments"
128
134
@echo " "
129
135
@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"
133
139
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 " "
136
143
@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"
140
147
@echo " "
141
148
@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
145
161
@echo " "
146
162
@echo " Environment types:"
147
163
@echo " development - Local development and testing"
164
+ @echo " testing - General testing (reserved for future use)"
165
+ @echo " e2e - End-to-end testing"
148
166
@echo " staging - Pre-production testing"
149
167
@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"
150
174
151
175
provider-info : # # Show provider information (requires PROVIDER=<name>)
152
176
@if [ -z " $( PROVIDER) " ]; then \
@@ -157,13 +181,60 @@ provider-info: ## Show provider information (requires PROVIDER=<name>)
157
181
@echo " Getting information for provider: $( PROVIDER) "
158
182
@$(SCRIPTS_DIR ) /providers/provider-interface.sh info $(PROVIDER )
159
183
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 )
163
227
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 )
167
238
168
239
infra-validate-config : # # Validate configuration for all environments
169
240
@echo " Validating configuration..."
@@ -187,21 +258,21 @@ infra-test-local: ## Run local-only infrastructure tests (requires virtualizatio
187
258
# =============================================================================
188
259
189
260
app-deploy : # # Deploy application (Twelve-Factor Build + Release + Run stages)
190
- @echo " Deploying application for $( ENVIRONMENT ) ..."
261
+ @echo " Deploying application for $( ENVIRONMENT_TYPE ) - $( ENVIRONMENT_FILE ) ..."
191
262
@if [ " $( SKIP_WAIT) " = " true" ]; then \
192
263
echo " ⚠️ SKIP_WAIT=true - Application will not wait for service readiness" ; \
193
264
else \
194
265
echo " ℹ️ Application will wait for service readiness (use SKIP_WAIT=true to skip)" ; \
195
266
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 )
197
268
198
269
app-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 )
201
272
202
273
app-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 )
205
276
206
277
app-test-config : # # Test application configuration
207
278
@echo " Testing application configuration..."
0 commit comments