-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
287 lines (235 loc) · 9.3 KB
/
Makefile
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
# Project: Consultorio Médico
# Version: 1.0.0
# Author: Cesar Suárez Granados / [email protected]
# Date: 2023-12-21
# Description: Makefile for Dockerized Laravel 10 with Nginx, MariaDB and NodeJS
# License: MIT
# Usage: make [command]
# Commands:
# help: Shows available commands with description
# Determine if .env file exist
ifneq ("$(wildcard .env.dev)","")
include .env.dev
else
$(error .env.dev file does not exist, please create it from .env.dev file)
endif
ifndef INSIDE_DOCKER_CONTAINER
INSIDE_DOCKER_CONTAINER = 0
endif
UID := $(shell id -u)
GID := $(shell id -g)
PHP_USER := -u $(USER)
# Determine if APP_ENV is set && not empty, if empyt exit with error message
ifndef APP_ENV
$(error APP_ENV is not set, please set it in .env file, valid values are dev, prod)
endif
# If APP_ENV is prod, PROJECT_NAME set APP_NAME, else set APP_NAME + APP_ENV + VERSION
ifeq ($(APP_ENV), prod)
PROJECT_NAME := -p $(APP_NAME)
COMPOSE_PROJECT_NAME := $(APP_NAME)
else
#ifeq ($(APP_ENV), staging, test, dev)
ifneq ($(filter $(APP_ENV),dev "preprod"),)
PROJECT_NAME := $(addprefix -p , $(join $(APP_NAME), _$(APP_ENV)))
COMPOSE_PROJECT_NAME := $(APP_NAME)-$(APP_ENV)
else
$(error APP_ENV is not valid, valid values are dev, prod)
endif
endif
VARIABLES := PROJECT_NAME=$(COMPOSE_PROJECT_NAME) DB_USERNAME=$(DB_USERNAME) DB_PASSWORD=$(DB_PASSWORD) DB_DATABASE=$(DB_DATABASE) DB_HOST=$(DB_HOST) DB_PORT=$(DB_PORT) DB_ROOT_PASSWORD=$(DB_ROOT_PASSWORD) DB_ROOT_USERNAME=$(DB_ROOT_USERNAME) TAG=$(VERSION)
PORTS := NGINX_PORT=$(NGINX_PORT) NPM_PORT=$(NPM_PORT)
INTERACTIVE := $(shell [ -t 0 ] && echo 1)
ERROR_ONLY_FOR_HOST = @printf "\033[33mThis command for host machine\033[39m\n"
.DEFAULT_GOAL := help
ifneq ($(INTERACTIVE), 1)
OPTION_T := -T
endif
ifeq ($(GITLAB_CI), 1)
# Determine additional params for phpunit in order to generate coverage badge on GitLabCI side
PHPUNIT_OPTIONS := --coverage-text --colors=never
endif
help: ## Shows available commands with description
@echo "\033[34mList of available commands:\033[39m"
@grep -E '^[a-zA-Z-]+:.*?## .*$$' Makefile | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "[32m%-27s[0m %s\n", $$1, $$2}'
build: ## Build image for environments
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose -f docker-compose.yml build --progress=plain
else
$(ERROR_ONLY_FOR_HOST)
endif
rebuild: ## Rebuild image for environments
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose -f docker-compose.yml build --no-cache --progress=plain
else
$(ERROR_ONLY_FOR_HOST)
endif
build-dev: ## Build dev environment
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose -f docker-compose.yml -f docker-compose.dev.yml build --progress=plain
else
$(ERROR_ONLY_FOR_HOST)
endif
rebuild-dev: ## Rebuild dev environment
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose -f docker-compose.yml -f docker-compose.dev.yml build --no-cache --progress=plain
else
$(ERROR_ONLY_FOR_HOST)
endif
build-prod: ## Build prod environment
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose -f docker-compose.prod.yml build
else
$(ERROR_ONLY_FOR_HOST)
endif
start: ## Start dev environment
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose -f docker-compose.yml -f docker-compose.prod.yml $(PROJECT_NAME) up -d
else
$(ERROR_ONLY_FOR_HOST)
endif
start-dev: ## Start dev environment
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose -f docker-compose.yml -f docker-compose.dev.yml $(PROJECT_NAME) up -d
else
$(ERROR_ONLY_FOR_HOST)
endif
stop: ## Stop dev environment
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose -f docker-compose.yml $(PROJECT_NAME) down
else
$(ERROR_ONLY_FOR_HOST)
endif
down: ## Stop dev environment
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose -f docker-compose.yml $(PROJECT_NAME) down
else
$(ERROR_ONLY_FOR_HOST)
endif
pause: ## Pause dev environment
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose -f docker-compose.yml $(PROJECT_NAME) pause
else
$(ERROR_ONLY_FOR_HOST)
endif
unpause: ## Unpause dev environment
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose -f docker-compose.yml $(PROJECT_NAME) unpause
else
$(ERROR_ONLY_FOR_HOST)
endif
restart: stop start ## Stop and start dev environment
ssh: ## Get bash inside laravel docker container
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose $(PROJECT_NAME) exec $(PHP_USER) app /bin/sh
else
$(ERROR_ONLY_FOR_HOST)
endif
ssh-root: ## Get bash as root user inside laravel docker container
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose $(PROJECT_NAME) exec $(OPTION_T) app /bin/sh
else
$(ERROR_ONLY_FOR_HOST)
endif
ssh-db: ## Get bash inside mysql docker container
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose $(PROJECT_NAME) exec db bash
else
$(ERROR_ONLY_FOR_HOST)
endif
node: ## Get bash inside node docker container
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose run --rm --service-ports node $(COMMAND)
else
$(ERROR_ONLY_FOR_HOST)
endif
node-dev: ## Run node dev server
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose run --rm --service-ports node npm run dev $(OPTIONS)
else
$(ERROR_ONLY_FOR_HOST)
endif
node-build: ## Build node app
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose run --rm --service-ports node npm run build
else
$(ERROR_ONLY_FOR_HOST)
endif
node-install: ## Install npm / yarn dependencies
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
@UID=$(UID) GID=$(GID) $(VARIABLES) $(PORTS) docker compose run --rm --service-ports node npm install $(OPTIONS)
else
$(ERROR_ONLY_FOR_HOST)
endif
exec:
ifeq ($(INSIDE_DOCKER_CONTAINER), 1)
@$$cmd
else
@UID=$(HOST_UID) GID=$(HOST_GID) $(VARIABLES) $(PORTS) docker compose $(PROJECT_NAME) exec $(OPTION_T) $(PHP_USER) app $$cmd
endif
exec-root:
ifeq ($(INSIDE_DOCKER_CONTAINER), 1)
@$$cmd
else
@UID=$(HOST_UID) GID=$(HOST_GID) $(VARIABLES) $(PORTS) docker compose $(PROJECT_NAME) exec $(OPTION_T) app $$cmd
endif
exec-bash:
ifeq ($(INSIDE_DOCKER_CONTAINER), 1)
@bash -c "$(cmd)"
else
@UID=$(HOST_UID) GID=$(HOST_GID) $(VARIABLES) $(PORTS) docker compose $(PROJECT_NAME) exec $(OPTION_T) $(PHP_USER) app bash -c "$(cmd)"
endif
env-dev: #Copy .env.dev to .env
@cp .env.dev .env && echo "Copied .env.dev to .env, successfully!"
wait-for-db:
@make exec cmd="php artisan db:wait"
composer-install-no-dev: ## Installs composer no-dev dependencies
@make exec cmd="composer install --optimize-autoloader --no-dev"
composer-install: ## Installs composer dependencies
@make exec-root cmd="composer install --optimize-autoloader"
composer-update: ## Updates composer dependencies
@make exec cmd="composer update"
key-generate: ## Sets the phplication key
@make exec cmd="php artisan key:generate"
composer-require:
@make exec-bash cmd="COMPOSER_MEMORY_LIMIT=-1 composer require $(PACKAGE)"
composer-require-dev:
@make exec-bash cmd="COMPOSER_MEMORY_LIMIT=-1 composer require --dev $(PACKAGE)"
composer-remove:
@make exec-bash cmd="COMPOSER_MEMORY_LIMIT=-1 composer remove $(PACKAGE)"
composer-remove-dev:
@make exec-bash cmd="COMPOSER_MEMORY_LIMIT=-1 composer remove --dev $(PACKAGE)"
serve: ## Runs the phplication
@make exec cmd="php artisan serve"
info: ## Shows Php and Laravel version
@make exec cmd="php artisan --version"
@make exec cmd="php artisan env"
@make exec cmd="php --version"
migrate-fresh: ## Drops databases and runs all migrations for the main/test databases
@make exec cmd="php artisan migrate:fresh"
migrate-no-test: ## Runs all migrations for main database
@make exec cmd="php artisan migrate --force"
migrate: ## Runs all migrations for main/test databases
@make exec cmd="php artisan migrate"
cs-fixer: ## Run php-cs-fixer tool
@make exec-root cmd="php vendor/friendsofphp/php-cs-fixer/php-cs-fixer fix"
stan: ## Run php-stan tool
@make exec-root cmd="php vendor/bin/phpstan analyse $(OPTIONS)"
config-dev: ## Runs migration fresh, seed with class, key generate, passport install
@make env-dev
@make migrate-fresh
@make key-generate
update-dev:
@make exec-root cmd="php artisan optimize:clear"
@make migrate-fresh
@make seed-dev
@make exec cmd="php artisan optimize:clear"
seed-dev: ## Runs all seeds for test database
@make exec cmd="php artisan db:seed --class=DevDatabaseSeeder --force"
composer-normalize: ## Normalizes composer.json file content
@make exec cmd="composer normalize"
composer-validate: ## Validates composer.json file content
@make exec cmd="composer validate --no-check-version"
composer-require-checker: ## Checks the defined dependencies against your code
@make exec-bash cmd="XDEBUG_MODE=off php ./vendor/bin/composer-require-checker"
composer-unused: ## Shows unused packages by scanning and comparing package namespaces against your code
@make exec-bash cmd="XDEBUG_MODE=off php ./vendor/bin/composer-unused"