-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
180 lines (143 loc) · 5.49 KB
/
Makefile
File metadata and controls
180 lines (143 loc) · 5.49 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
APP_NAME = split-fairly
VERSION = 0.1.2
.DEFAULT_GOAL := help
.PHONY: build prod start
help:
@echo "📋 Available targets:\n"
@echo "🏗️ Build & Setup:"
@echo " make start - Build development image, boot stack, initialize db, and open browser"
@echo " make build - Build development Docker image"
@echo " make prod - Build production Docker images (app + web)"
@echo " make up - Boot the Docker stack"
@echo " make down - Shut down the Docker stack"
@echo " make init - Initialize app (composer, database, fixtures)"
@echo "\n🔄 Maintenance:"
@echo " make maintain - Update composer and npm dependencies"
@echo " make show-composer-updates - Show outdated composer packages"
@echo " make update-composer-dependencies - Update composer packages"
@echo " make update-npm-dependencies - Update npm packages"
@echo "\n🧪 Testing & Quality:"
@echo " make test - Run backend and frontend tests"
@echo " make quality - Run quality checks"
@echo " make phpstan - Run static code analysis"
@echo " make style - Fix code style"
@echo " make arch - Test architecture"
@echo " make coverage - Generate coverage report"
@echo "\n🛠️ Development:"
@echo " make shell - Open shell on app container"
@echo " make composer - Run composer command (use: make composer cmd='install')"
@echo " make npm-build - Create frontend build"
@echo " make clear - Clear all caches"
@echo " make open - Open application in browser\n"
start: build up init open
build:
@echo "🏗️ Building development image(s)..."
docker build . -f ./build/php/Dockerfile --target dev --no-cache -t ${APP_NAME}-dev:${VERSION}
prod:
@echo "🛳️ Building procution image(s)..."
docker build . -f ./build/php/Dockerfile --target prod --no-cache -t ${APP_NAME}:${VERSION}
docker build . -f ./build/nginx/Dockerfile --no-cache -t ${APP_NAME}-web:${VERSION}
up:
@echo "🚀 Booting Docker stack..."
docker compose up -d --remove-orphans
down:
@echo "⛔ Shutting down Docker stack..."
docker compose down
restart: reset
reset: reset-worker reset-app reset-npm-dev
reset-worker:
@echo "🔄 Resetting worker..."
docker compose restart worker
reset-app:
@echo "🔄 Resetting app..."
docker compose restart app
reset-npm-dev:
@echo "🔄 Resetting npm-dev..."
docker compose restart npm-dev
init: composer-install create-database create-schema load-fixtures
composer-install:
@echo "📦 Installing composer dependencies..."
docker compose exec -it app composer install
create-database:
@echo "🗄️ Creating database..."
docker compose exec -it app bin/console doctrine:database:create --if-not-exists
load-fixtures:
@echo "📥 Loading fixtures..."
docker compose exec -it app bin/console doctrine:fixtures:load -q
create-schema:
@echo "📐 Creating database schema..."
docker compose exec -it app bin/console doctrine:schema:update --force
init-test: create-test-database create-test-schema
create-test-database:
@echo "🗄️ Creating test database..."
docker compose exec -it app bin/console doctrine:database:create --env=test --if-not-exists
create-test-schema:
@echo "📐 Creating test database schema..."
docker compose exec -it app bin/console doctrine:schema:update --env=test --force
composer:
@echo "Run composer"
docker compose exec -it app composer $(cmd)
shell: shell-backend
shell-backend: backend-shell
backend-shell:
@echo "💻 Opening shell on app container..."
docker compose exec -it app bash
qa: quality
quality:
@echo "✅ Running quality checks..."
docker compose exec -it app composer qa
sa: phpstan
phpstan:
@echo "🔍 Running static code analysis..."
docker compose exec -it app vendor/bin/phpstan analyse --memory-limit=1G
cs: style
style: codestyle
codestyle: code-style
code-style:
@echo "💄 Fixing code style..."
docker compose exec -it app vendor/bin/php-cs-fixer fix
test: test-backend test-frontend
backend-test: test-backend
test-backend:
@echo "🧪 Running backend tests..."
docker compose exec -it app bin/phpunit
frontend-test: test-frontend
test-frontend:
@echo "🧪 Running frontend tests..."
docker compose exec -it npm-dev npm test -- --run
arch:
@echo "🏛️ Testing architecture..."
docker compose exec -it app vendor/bin/deptrac analyse --report-uncovered
clear:
@echo "🗑️ Clearing all caches..."
docker compose exec -it app composer clear
maintenance: maintain
maintain: show-composer-updates update-composer-dependencies update-npm-dependencies
show-composer-updates:
@echo "📊 Checking for outdated composer packages..."
docker compose exec -it app composer show --outdated
update-composer-dependencies:
@echo "📦 Updating composer dependencies..."
docker compose exec -it app composer update -W
update-npm-dependencies:
@echo "📦 Updating npm dependencies..."
docker compose exec -it npm-dev npm update --save
coverage:
@echo "📈 Generating coverage report..."
docker compose exec -it app bin/phpunit -c phpunit.xml.dist --coverage-html ./coverage
npm-build:
@echo "⚛️ Creating frontend build..."
docker compose exec -it npm-dev npm run build
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