-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
204 lines (160 loc) · 5.74 KB
/
Makefile
File metadata and controls
204 lines (160 loc) · 5.74 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
APP_NAME = fullstack-symfony-react
VERSION = 0.9.3
.DEFAULT_GOAL := help
.PHONY: build dev prod backend-image grafana up down reset \
reset-worker reset-app init composer-install create-database create-schema \
load-fixtures init-test create-test-database create-test-schema composer shell \
qa sa cs test backend-test frontend-test arch clear cache-clear cache-pool-clear \
maintenance maintain show-composer-updates frontend-build \
update-composer-dependencies update-npm-dependencies coverage frontend-shell open help
## Start development environment (build images, start containers, init, open browser)
start: dev grafana up init open
build: dev prod
## Build development Docker image (with Docker cache)
dev:
docker build . -f ./build/php/Dockerfile --target dev -t ${APP_NAME}-dev:${VERSION}
## Build production images (without Docker cache)
prod: backend-image
## Build backend image (without Docker cache)
backend-image:
@echo "Build backend image"
docker build . -f ./build/php/Dockerfile --target prod --no-cache -t ${APP_NAME}:${VERSION}
grafana:
@echo "Build grafana image"
docker build . -f ./build/grafana/Dockerfile -t ${APP_NAME}-grafana:${VERSION}
## Start all services using docker compose
up:
docker compose up -d --remove-orphans
## Stop all services and remove containers
down:
docker compose down
## Reset worker, app, frontend
reset: reset-worker reset-app reset-frontend
## Reset worker
reset-worker:
@echo "Reset worker"
docker compose restart worker
## Reset app
reset-app:
@echo "Reset app"
docker compose restart app
## Reset frontend (Vite development server)
reset-frontend:
@echo "Reset frontend"
docker compose restart frontend
## Initialize project (install dependencies, create database, schema, load fixtures)
init: composer-install frontend-build create-database create-schema load-fixtures
## Install composer dependencies
composer-install:
@echo "Install composer dependencies"
docker compose exec -it app composer install
## Build frontend assets (Vite production build)
frontend-build:
@echo "Build frontend assets to backend/public/dist"
docker compose run --rm frontend-build
## Create database
create-database:
@echo "Create database"
docker compose exec -it app bin/console doctrine:database:create --if-not-exists
## Load test fixtures
load-fixtures:
@echo "Load fixtures"
docker compose exec -it app bin/console doctrine:fixtures:load -q
## Create database schema
create-schema:
@echo "Create database schema"
docker compose exec -it app bin/console doctrine:schema:update --force
## Initialize test environment
init-test: create-test-database create-test-schema
## Create test database
create-test-database:
@echo "Create database"
docker compose exec -it app bin/console doctrine:database:create --env=test --if-not-exists
## Create test database schema
create-test-schema:
@echo "Create database schema"
docker compose exec -it app bin/console doctrine:schema:update --env=test --force
## Run composer command (use cmd=<command>)
composer:
@echo "Run composer"
docker compose exec -it app composer $(cmd)
shell:
docker compose exec -it app bash
## Run quality assurance (phpstan, php-cs-fixer)
qa:
docker compose exec -it app composer qa
## Run static analysis
sa:
docker compose exec -it app vendor/bin/phpstan analyse --memory-limit=1G
## Run code style fixer
cs:
docker compose exec -it app vendor/bin/php-cs-fixer fix
## Run all tests
test: init-test backend-test
## Run backend tests
backend-test:
docker compose exec -it app composer test
## Run frontend tests
frontend-test:
docker compose exec -it frontend npm test
## Test architecture
arch:
@echo "Test architecture"
docker compose exec -it app vendor/bin/deptrac analyse --report-uncovered
clear:
@echo "Clear all caches"
docker compose exec -it app composer clear
## Clear application cache
cache-clear:
@echo "Clear cache"
docker compose exec -it app bin/console cache:clear
## Clear cache pool
cache-pool-clear:
@echo "Clear pool cache"
docker compose exec -it app bin/console cache:pool:clear --all
## Check for outdated dependencies
maintenance: maintain
## Update dependencies
maintain: show update-composer update-npm
## Show outdated composer dependencies
show:
@echo "Show wether composer dependencies are outdated"
docker compose exec -it app composer show --outdated
## Update composer dependencies
update-composer:
@echo "Update Composer dependencies"
docker compose exec -it app composer update -W
## Update NPM dependencies
update-npm:
@echo "Update NPM dependencies"
docker compose exec -it frontend npm update --save
## Generate test coverage report
coverage:
@echo "Generate coverage report"
docker compose exec -it app bin/phpunit -c phpunit.xml.dist --coverage-html ./coverage
## Open shell in frontend container
frontend-shell:
@echo "Open shell on frontend container"
docker compose exec -it frontend sh
## Open application in browser
open:
@if command -v xdg-open > /dev/null 2>&1; then \
xdg-open http://localhost:8000 2>/dev/null & \
elif command -v open > /dev/null 2>&1; then \
open http://localhost:8000; \
elif command -v wslview > /dev/null 2>&1; then \
wslview http://localhost:8000; \
elif command -v cmd.exe > /dev/null 2>&1; then \
cmd.exe /c start http://localhost:8000; \
else \
echo "❌ Could not detect browser launcher."; \
echo "📍 Please open http://localhost:8000 manually"; \
fi
## Show available targets
help:
@echo "Available targets:"
@awk '/^## / {desc=$$0; sub(/^## /, "", desc); getline; if(match($$0, /^([a-zA-Z0-9_-]+):/)) {printf " %-20s %s\n", substr($$0, RSTART, RLENGTH-1), desc}}' $(MAKEFILE_LIST)
## Synchronize deptrac visualization JavaScript code
sync-deptrac-visualization:
cp backend/assets/js/deptrac-visualization/index.js \
backend/public/js/deptrac-visualization/index.js