-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
143 lines (110 loc) · 5.85 KB
/
Makefile
File metadata and controls
143 lines (110 loc) · 5.85 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
export UID=$(shell id -u)
export GID=$(shell id -g)
include .env
-include .env.local
export
DOCKER_COMPOSE_OPTIONS := -f docker-compose.yaml
DOCKER_COMPOSE := docker compose $(DOCKER_COMPOSE_OPTIONS)
PHP := $(DOCKER_COMPOSE) run --rm php php
PHP_CONTAINER_SHELL := $(DOCKER_COMPOSE) run --rm php
COMPOSER_BIN := $(DOCKER_COMPOSE) run --rm php composer
BIN_CONSOLE := $(PHP) bin/console
##
## Проект
## ------
cert:
mkcert -install
mkcert -cert-file ./docker/traefik/app-example.localhost.crt -key-file ./docker/traefik/app-example.localhost.key "*.app-example.localhost"
.PHONY: cert
hosts:
sudo sh -c "echo '127.0.0.1 api.app-example.localhost' >> /etc/hosts"
sudo sh -c "echo '127.0.0.1 traefik.app-example.localhost' >> /etc/hosts"
.PHONY: hosts
init: cert hosts
.PHONY: init
var:
mkdir -p var
.PHONY: var
vendor:
$(COMPOSER_BIN) install
.PHONY: vendor
update: ## Обновить пакеты
$(COMPOSER_BIN) update
$(COMPOSER_BIN) bump
touch vendor
.PHONY: update
up: var vendor ## Запустить приложение
$(DOCKER_COMPOSE) up --build --remove-orphans --detach
.PHONY: up
down: ## Остановить приложение
$(DOCKER_COMPOSE) down --remove-orphans
.PHONY: stop
##
## Качество кода
## ------
check: rector cs psalm yaml-lint container composer ## Запустить все проверки качества кода
.PHONY: check
psalm: var vendor ## Запустить полный статический анализ PHP кода при помощи Psalm (https://psalm.dev/)
$(PHP) vendor/bin/psalm --no-diff
.PHONY: psalm
cs: var vendor ## Проверить PHP code style при помощи PHP CS Fixer (https://github.com/FriendsOfPHP/PHP-CS-Fixer)
PHP_CS_FIXER_IGNORE_ENV=1 $(PHP) vendor/bin/php-cs-fixer fix --dry-run --diff --using-cache=yes -v
.PHONY: cs
fixcs: var vendor ## Исправить ошибки PHP code style при помощи PHP CS Fixer (https://github.com/FriendsOfPHP/PHP-CS-Fixer)
PHP_CS_FIXER_IGNORE_ENV=1 $(PHP) vendor/bin/php-cs-fixer fix --using-cache=yes -v
.PHONY: fixcs
rector: var vendor ## Запустить полный анализ PHP кода при помощи Rector (https://getrector.org)
$(PHP) vendor/bin/rector process --dry-run
.PHONY: rector
rector-fix: var vendor ## Запустить исправление PHP кода при помощи Rector (https://getrector.org)
$(PHP) vendor/bin/rector process
.PHONY: rector-fix
yaml-lint: vendor ## Проверить YAML-файлы при помощи Symfony YAML linter (https://symfony.com/doc/current/components/yaml.html#syntax-validation)
$(BIN_CONSOLE) lint:yaml config --parse-tags
.PHONY: yaml-lint
container: container-lint container-prod ## Проверить DI-контейнер
.PHONY: container
container-lint: vendor ## Проверить DI-контейнер при помощи Symfony Container linter (https://symfony.com/doc/current/service_container.html#linting-service-definitions)
$(BIN_CONSOLE) lint:container
.PHONY: container-lint
container-prod: vendor ## Проверить, что DI-контейнер успешно собирается в env=prod
$(BIN_CONSOLE) cache:clear --env=prod
.PHONY: container-prod
composer: composer-validate composer-require composer-unused composer-audit composer-normalize ## Запустить все проверки Composer
.PHONY: composer
composer-validate: ## Провалидировать composer.json и composer.lock при помощи composer validate (https://getcomposer.org/doc/03-cli.md#validate)
$(COMPOSER_BIN) validate --strict --no-check-publish
.PHONY: composer-validate
composer-require: vendor ## Обнаружить неявные зависимости от внешних пакетов при помощи ComposerRequireChecker (https://github.com/maglnet/ComposerRequireChecker)
$(PHP) vendor/bin/composer-require-checker check --config-file=composer-require-checker.json
.PHONY: composer-require
composer-unused: vendor ## Обнаружить неиспользуемые зависимости Composer при помощи composer-unused (https://github.com/icanhazstring/composer-unused)
$(PHP) vendor/bin/composer-unused
.PHONY: composer-unused
composer-audit: ## Обнаружить уязвимости в зависимостях Composer при помощи composer audit (https://getcomposer.org/doc/03-cli.md#audit)
$(COMPOSER_BIN) audit
.PHONY: composer-audit
composer-normalize: ## Нормализация composer.json. Анализ (https://github.com/ergebnis/composer-normalize)
$(COMPOSER_BIN) normalize --dry-run
.PHONY: composer-normalize
composer-normalize-fix: ## Нормализация composer.json (https://github.com/ergebnis/composer-normalize)
$(COMPOSER_BIN) normalize
.PHONY: composer-normalize-fix
##
## CI/CD
## ------
build-prod-image:
echo "APP_ENV=prod" > .env.local
DOCKER_BUILDKIT=1 docker build -f ./docker/php-prod/Dockerfile -t $(CI_REGISTRY_IMAGE):prod .
push-prod-image:
docker login -u $(CI_REGISTRY_USER) -p $(CI_REGISTRY_PASSWORD) $(CI_REGISTRY)
docker push $(CI_REGISTRY_IMAGE):prod
docker logout $(CI_REGISTRY)
deploy:
ssh -p 1234 gitlab-deploy@example.com "mkdir -p /home/gitlab-deploy/app-example"
scp -P 1234 docker-compose.prod.yaml gitlab-deploy@example.com:/home/gitlab-deploy/app-example
ssh -p 1234 gitlab-deploy@example.com "docker login -u $(CI_REGISTRY_USER) -p $(CI_REGISTRY_PASSWORD) $(CI_REGISTRY)"
ssh -p 1234 gitlab-deploy@example.com "docker pull $(CI_REGISTRY_IMAGE):prod"
ssh -p 1234 gitlab-deploy@example.com "cd /home/gitlab-deploy/app-example && docker compose -f docker-compose.prod.yaml down --remove-orphans"
ssh -p 1234 gitlab-deploy@example.com "cd /home/gitlab-deploy/app-example && docker compose -f docker-compose.prod.yaml up --remove-orphans --detach"
ssh -p 1234 gitlab-deploy@example.com "docker logout $(CI_REGISTRY)"