-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMakefile
More file actions
334 lines (278 loc) · 13.2 KB
/
Makefile
File metadata and controls
334 lines (278 loc) · 13.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
.PHONY: help dev prod down clean build logs shell artisan npm test migrate seed passport-install
# Default target
help: ## Show this help message
@echo 'Usage: make [target]'
@echo ''
@echo 'Targets:'
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
# Development Environment
dev: ## Start development environment
@echo "Starting development environment..."
@cp .env.dev .env 2>/dev/null || true
@if [ -f "resources/js/app.js" ] && grep -q "@inertiajs/vue3" package.json 2>/dev/null; then \
echo "🎨 Vue.js detected - starting with Vite dev server..."; \
docker compose -f compose.dev.yaml -f compose.vue.yaml up -d; \
echo "🔑 Generating application key..."; \
docker compose -f compose.dev.yaml exec workspace php artisan key:generate --force 2>/dev/null || true; \
echo "Development environment started at http://localhost:8000"; \
echo "Vite dev server available at http://localhost:5173"; \
echo "MailHog available at http://localhost:8025"; \
else \
echo "📦 Starting standard Laravel environment..."; \
docker compose -f compose.dev.yaml up -d; \
echo "🔑 Generating application key..."; \
docker compose -f compose.dev.yaml exec workspace php artisan key:generate --force 2>/dev/null || true; \
echo "Development environment started at http://localhost:8000"; \
echo "MailHog available at http://localhost:8025"; \
fi
dev-build: ## Build and start development environment
@echo "Building and starting development environment..."
@cp .env.dev .env 2>/dev/null || true
@if [ -f "resources/js/app.js" ] && grep -q "@inertiajs/vue3" package.json 2>/dev/null; then \
echo "🎨 Vue.js detected - building with Vite dev server..."; \
docker compose -f compose.dev.yaml -f compose.vue.yaml up -d --build; \
echo "🔑 Generating application key..."; \
docker compose -f compose.dev.yaml exec workspace php artisan key:generate --force 2>/dev/null || true; \
else \
echo "📦 Building standard Laravel environment..."; \
docker compose -f compose.dev.yaml up -d --build; \
echo "🔑 Generating application key..."; \
docker compose -f compose.dev.yaml exec workspace php artisan key:generate --force 2>/dev/null || true; \
fi
dev-logs: ## Show development logs
docker compose -f compose.dev.yaml logs -f
# Production Environment
prod: ## Start production environment
@echo "Starting production environment..."
@if [ ! -f .env ]; then echo "Error: .env file not found. Copy .env.prod and configure it."; exit 1; fi
@if [ -f "resources/js/app.js" ] && grep -q "@inertiajs/vue3" package.json 2>/dev/null; then \
echo "🎨 Vue.js detected - building assets for production..."; \
docker compose -f compose.prod.yaml -f compose.vue.prod.yaml --profile build run --rm vue-builder; \
docker compose -f compose.prod.yaml up -d; \
echo "Production environment started with Vue assets"; \
else \
echo "📦 Starting standard production environment..."; \
docker compose -f compose.prod.yaml up -d; \
echo "Production environment started"; \
fi
prod-build: ## Build and start production environment
@echo "Building and starting production environment..."
@if [ ! -f .env ]; then echo "Error: .env file not found. Copy .env.prod and configure it."; exit 1; fi
@if [ -f "resources/js/app.js" ] && grep -q "@inertiajs/vue3" package.json 2>/dev/null; then \
echo "🎨 Vue.js detected - building with assets..."; \
docker compose -f compose.prod.yaml -f compose.vue.prod.yaml up -d --build; \
docker compose -f compose.prod.yaml -f compose.vue.prod.yaml --profile build run --rm vue-builder; \
echo "Production environment built with Vue assets"; \
else \
echo "📦 Building standard production environment..."; \
docker compose -f compose.prod.yaml up -d --build; \
echo "Production environment built"; \
fi
prod-logs: ## Show production logs
docker compose -f compose.prod.yaml logs -f
# General Commands
down: ## Stop all containers
docker compose -f compose.dev.yaml -f compose.vue.yaml down 2>/dev/null || true
docker compose -f compose.dev.yaml down 2>/dev/null || true
docker compose -f compose.prod.yaml -f compose.vue.prod.yaml down 2>/dev/null || true
docker compose -f compose.prod.yaml down 2>/dev/null || true
clean: ## Stop containers and remove volumes
docker compose -f compose.dev.yaml -f compose.vue.yaml down -v 2>/dev/null || true
docker compose -f compose.dev.yaml down -v 2>/dev/null || true
docker compose -f compose.prod.yaml -f compose.vue.prod.yaml down -v 2>/dev/null || true
docker compose -f compose.prod.yaml down -v 2>/dev/null || true
docker system prune -f
build: ## Build all images
docker compose -f compose.dev.yaml build
docker compose -f compose.prod.yaml build
# Container Access
shell: ## Access workspace container shell
docker compose -f compose.dev.yaml exec workspace bash
app-shell: ## Access app container shell
docker compose -f compose.dev.yaml exec app sh
nginx-shell: ## Access nginx container shell
docker compose -f compose.dev.yaml exec nginx sh
# Laravel Commands
artisan: ## Run artisan command (usage: make artisan cmd="migrate")
@if [ -z "$(cmd)" ]; then \
echo "Usage: make artisan cmd=\"your-command\""; \
echo "Example: make artisan cmd=\"migrate\""; \
else \
docker compose -f compose.dev.yaml exec workspace php artisan $(cmd); \
fi
migrate: ## Run database migrations
docker compose -f compose.dev.yaml exec workspace php artisan migrate
migrate-fresh: ## Fresh migration with seeding
docker compose -f compose.dev.yaml exec workspace php artisan migrate:fresh --seed
seed: ## Run database seeders
docker compose -f compose.dev.yaml exec workspace php artisan db:seed
test: ## Run tests
docker compose -f compose.dev.yaml exec workspace php artisan test
@echo "🔄 Ensuring Passport setup is intact after tests..."
docker compose -f compose.dev.yaml exec workspace ./scripts/setup-passport.sh
test-coverage: ## Run tests with coverage
docker compose -f compose.dev.yaml exec workspace php artisan test --coverage
@echo "🔄 Ensuring Passport setup is intact after tests..."
docker compose -f compose.dev.yaml exec workspace ./scripts/setup-passport.sh
# Frontend Commands
npm: ## Run npm command (usage: make npm cmd="install")
@if [ -z "$(cmd)" ]; then \
echo "Usage: make npm cmd=\"your-command\""; \
echo "Example: make npm cmd=\"install\""; \
else \
docker compose -f compose.dev.yaml exec workspace npm $(cmd); \
fi
npm-install: ## Install npm dependencies
docker compose -f compose.dev.yaml exec workspace sh -c "sudo chown -R sail:sail /home/sail/.npm 2>/dev/null || true && npm install"
npm-dev: ## Run Vite development server
@if [ -f "resources/js/app.js" ] && grep -q "@inertiajs/vue3" package.json 2>/dev/null; then \
echo "🎨 Starting Vite dev server for Vue..."; \
docker compose -f compose.dev.yaml -f compose.vue.yaml up -d vite; \
else \
echo "⚠️ Vue.js not detected. Run 'make setup-vue' first."; \
docker compose -f compose.dev.yaml exec workspace npm run dev; \
fi
vite-dev: ## Start dedicated Vite development server (Vue only)
@if [ -f "resources/js/app.js" ] && grep -q "@inertiajs/vue3" package.json 2>/dev/null; then \
echo "🎨 Starting dedicated Vite dev server..."; \
docker compose -f compose.dev.yaml -f compose.vue.yaml up vite; \
else \
echo "❌ Vue.js not detected. Please run 'make setup-vue' first."; \
exit 1; \
fi
vite-stop: ## Stop Vite development server
docker compose -f compose.dev.yaml -f compose.vue.yaml stop vite
vite-logs: ## Show Vite development server logs
docker compose -f compose.dev.yaml -f compose.vue.yaml logs -f vite
npm-build: ## Build assets for production
docker compose -f compose.dev.yaml exec workspace npm run build
# Composer Commands
composer: ## Run composer command (usage: make composer cmd="install")
@if [ -z "$(cmd)" ]; then \
echo "Usage: make composer cmd=\"your-command\""; \
echo "Example: make composer cmd=\"install\""; \
else \
docker compose -f compose.dev.yaml exec workspace composer $(cmd); \
fi
composer-install: ## Install composer dependencies
docker compose -f compose.dev.yaml exec workspace composer install
composer-update: ## Update composer dependencies
docker compose -f compose.dev.yaml exec workspace composer update
# Laravel Passport
passport-setup: ## Setup Laravel Passport
docker compose -f compose.dev.yaml exec workspace ./scripts/setup-passport.sh
passport-install: ## Install Laravel Passport
docker compose -f compose.dev.yaml exec workspace php artisan passport:install
passport-keys: ## Generate Passport keys
docker compose -f compose.dev.yaml exec workspace php artisan passport:keys
passport-client: ## Create Passport client
docker compose -f compose.dev.yaml exec workspace php artisan passport:client
# Database Commands
db-shell: ## Access PostgreSQL shell
docker compose -f compose.dev.yaml exec postgres psql -U laravel -d laravel_dev
db-dump: ## Create database dump
docker compose -f compose.dev.yaml exec postgres pg_dump -U laravel laravel_dev > dump.sql
db-restore: ## Restore database from dump (usage: make db-restore file="dump.sql")
@if [ -z "$(file)" ]; then \
echo "Usage: make db-restore file=\"dump.sql\""; \
else \
docker compose -f compose.dev.yaml exec -T postgres psql -U laravel -d laravel_dev < $(file); \
fi
# Setup Commands
setup: ## Initial setup for development
@echo "Setting up Laravel development environment..."
@cp .env.dev .env 2>/dev/null || true
make dev-build
@echo "Waiting for services to start..."
sleep 10
make composer-install
make npm-install
make artisan cmd="key:generate"
make migrate
docker compose -f compose.dev.yaml exec workspace ./scripts/setup-passport.sh
@echo "Setting up pre-commit hooks..."
make setup-pre-commit
@echo "Setup complete! Visit http://localhost:8000"
@echo "Pre-commit hooks are now active for code quality checks."
setup-vue: ## Setup Vue 3 + Inertia.js for Laravel
@echo "Setting up Vue 3 + Inertia.js integration..."
@if ! docker compose -f compose.dev.yaml ps -q workspace > /dev/null 2>&1; then \
echo "Error: Development environment not running. Please run 'make dev' first."; \
exit 1; \
fi
docker compose -f compose.dev.yaml exec workspace ./scripts/setup-vue.sh
@echo "Vue 3 + Inertia.js setup complete!"
@echo "Next: Update your configuration files and create Vue components."
setup-react: ## Setup React + Inertia.js for Laravel
@echo "Setting up React + Inertia.js integration..."
@./scripts/setup-react.sh
setup-prod: ## Initial setup for production
@echo "Setting up Laravel production environment..."
@if [ ! -f .env ]; then echo "Error: .env file not found. Copy .env.prod and configure it."; exit 1; fi
make prod-build
@echo "Waiting for services to start..."
sleep 15
make artisan-prod cmd="migrate --force"
docker compose -f compose.prod.yaml exec app ./scripts/setup-passport.sh
make artisan-prod cmd="config:cache"
make artisan-prod cmd="route:cache"
make artisan-prod cmd="view:cache"
@echo "Production setup complete!"
# Production artisan commands
artisan-prod: ## Run artisan command in production (usage: make artisan-prod cmd="migrate")
@if [ -z "$(cmd)" ]; then \
echo "Usage: make artisan-prod cmd=\"your-command\""; \
else \
docker compose -f compose.prod.yaml exec app php artisan $(cmd); \
fi
# Code Quality Commands
code-quality: ## Run code quality script (usage: make code-quality cmd="full-check")
@if [ -z "$(cmd)" ]; then \
echo "Usage: make code-quality cmd=\"command\""; \
echo "Available commands: full-check, style, test, phpstan, security"; \
else \
./scripts/code-quality.sh $(cmd); \
fi
phpstan: ## Run PHPStan static analysis
./scripts/code-quality.sh phpstan
code-style: ## Fix code style with Laravel Pint
./scripts/code-quality.sh style
test-coverage: ## Run tests with coverage
./scripts/code-quality.sh test
security-audit: ## Run security audit
./scripts/code-quality.sh security
full-quality-check: ## Run complete code quality analysis
./scripts/code-quality.sh full-check
ide-helpers: ## Generate IDE helper files
./scripts/code-quality.sh ide-helpers
# Pre-commit Commands
setup-pre-commit: ## Setup pre-commit hooks
./scripts/setup-pre-commit.sh setup
install-pre-commit: ## Install pre-commit hooks
./scripts/setup-pre-commit.sh install
test-pre-commit: ## Test pre-commit hooks
./scripts/setup-pre-commit.sh test
update-pre-commit: ## Update pre-commit hooks
./scripts/setup-pre-commit.sh update
pre-commit-run: ## Run pre-commit on all files
pre-commit run --all-files
pre-commit-run-staged: ## Run pre-commit on staged files
pre-commit run
# Monitoring
status: ## Show container status
@echo "Development containers:"
docker compose -f compose.dev.yaml ps 2>/dev/null || echo "Development environment not running"
@if [ -f "resources/js/app.js" ] && grep -q "@inertiajs/vue3" package.json 2>/dev/null; then \
echo "\nVue/Vite containers:"; \
docker compose -f compose.dev.yaml -f compose.vue.yaml ps 2>/dev/null || echo "Vue development not running"; \
fi
@echo "\nProduction containers:"
docker compose -f compose.prod.yaml ps 2>/dev/null || echo "Production environment not running"
logs: ## Show logs for current environment
@if docker compose -f compose.dev.yaml ps -q > /dev/null 2>&1; then \
make dev-logs; \
elif docker compose -f compose.prod.yaml ps -q > /dev/null 2>&1; then \
make prod-logs; \
else \
echo "No containers running"; \
fi