-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathdocker.mk
144 lines (116 loc) · 4.45 KB
/
docker.mk
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
USER := tirion
ID := $(shell basename $(CURDIR))
CONTAINER_ID := $(addsuffix _container, $(ID))
CONTAINER_ID_INTERNAL := $(addsuffix _container_internal, $(ID))
IMAGE_ID := $(addsuffix _image, $(ID))
CS = $(shell docker ps -a -q)
ROOT_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
# NOTE: сохраняем массив в перемнную ENVS из строки используя разделитель ";"
# Далее распаковываем массив в аргументы при вызове команды sudo ${ENVS[@]}
# Так переменные окружения попадют в сеанс sudo
# Пример: sudo "ENV1=value1" "ENV2=value with spaces" "ENV3=value3" -u tirion -s
GET_ENVS := IFS=";" ENVS=(`get-forwarded-envs`)
docs-js:
docker exec -it $(CONTAINER_ID) /bin/bash -c '$(GET_ENVS) && sudo "$${ENVS[@]}" -u $(USER) rm -rf docs && mkdir -p docs && /import-documentation/dist/bin/import-documentation.js . -o docs'
test:
ifeq ([], $(shell docker inspect $(CONTAINER_ID) 2> /dev/null))
@ echo "Please, run 'make start' before 'make test'" >&2; exit 1;
else
docker exec -it $(CONTAINER_ID) /bin/bash -c '$(GET_ENVS) && sudo "$${ENVS[@]}" -u $(USER) make test'
endif
prepare:
ifeq ([], $(shell docker inspect $(CONTAINER_ID) 2> /dev/null))
@ echo "Please, run 'make start' before 'make test'" >&2; exit 1;
else
docker exec -it $(CONTAINER_ID) make prepare
endif
build: stop
docker build -t $(IMAGE_ID) .
bash:
docker run --rm --read-only -it -v /tmp \
-v $(ROOT_DIR)scripts/get-forwarded-envs:/usr/local/bin/get-forwarded-envs \
-v $(CURDIR)/exercise_internal:/exercise_internal \
-v $(CURDIR)/exercise/:/usr/src/app $(IMAGE_ID) \
/bin/bash -c '$(GET_ENVS) && sudo "$${ENVS[@]}" -u $(USER) -s'
bash-root:
docker run --rm -it -v /tmp \
-v $(ROOT_DIR)scripts/get-forwarded-envs:/usr/local/bin/get-forwarded-envs \
-v $(CURDIR)/exercise_internal:/exercise_internal \
-v $(CURDIR)/exercise/:/usr/src/app $(IMAGE_ID) \
/bin/bash -c '$(GET_ENVS) && sudo "$${ENVS[@]}" -u root -s'
attach:
ifeq ([], $(shell docker inspect $(CONTAINER_ID) 2> /dev/null))
@ make start
endif
docker exec -it $(CONTAINER_ID) /bin/bash -c '$(GET_ENVS) && sudo "$${ENVS[@]}" -u $(USER) -s'
logs:
docker logs -f $(CONTAINER_ID)
start: stop
ifeq ([], $(shell docker inspect $(IMAGE_ID) 2> /dev/null))
@ echo "Please, run 'make build' before 'make start'" >&2; exit 1;
else
docker run -d -t --read-only --rm \
--label hexlet-exercise \
--memory=500m \
--memory-swap=500m \
--cpu-shares=256 \
--oom-kill-disable=true \
--pids-limit=150 \
--memory-swappiness=0 \
-v $(ROOT_DIR)import-documentation:/import-documentation \
-v /tmp \
-v /var/tmp \
-v $(ROOT_DIR)scripts/get-forwarded-envs:/usr/local/bin/get-forwarded-envs \
-v $(CURDIR)/exercise/:/usr/src/app \
-v $(CURDIR)/exercise_internal:/exercise_internal \
-p 8000:8000 -p 80:8080 -p 5006:5006 --name $(CONTAINER_ID) $(IMAGE_ID)
endif
stop:
docker stop `docker ps -a -q --filter label=hexlet-exercise` || true
diff:
@ docker diff $(CS)
# start_internal: stop
# ifeq ([], $(shell docker inspect $(IMAGE_ID) 2> /dev/null))
# @ echo "Please, run 'make build'" >&2; exit 1;
# else
# docker run -d -t -v $(CURDIR)/exercise_internal:/exercise_internal --name $(CONTAINER_ID_INTERNAL) $(IMAGE_ID)
# endif
test_internal:
ifeq ([], $(shell docker inspect $(CONTAINER_ID) 2> /dev/null))
@ echo "Please, run 'make start_internal'" >&2; exit 1;
else
# docker exec $(CONTAINER_ID) make test -C /exercise_internal
docker exec $(CONTAINER_ID) /bin/bash -c '$(GET_ENVS) && sudo "$${ENVS[@]}" -u $(USER) make test -C /exercise_internal'
endif
lint-js:
@npx eslint .
lint-hexlet-python:
@make lint L=python-flake8
lint-hexlet-js:
@make lint L=eslint
lint-hexlet-php:
@make lint L=phpcs
lint-hexlet-java:
@make lint L=checkstyle
lint-hexlet-sql:
@make lint L=sqlint
lint-hexlet-ruby:
@make lint L=rubocop
lint-hexlet-layout:
@make lint L=layout-designer-lint
lint-hexlet-multi-language:
@make lint L=multi-language
lint:
@docker run --rm -it \
-v $(CURDIR)/exercise:/usr/src/app \
-v hexlet-linter-${L}:/usr/src/linter \
$(IMAGE_ID) \
/usr/src/linter/linter
all: build start test
.PHONY: test build bash run stop start
markdown-lint:
npx markdownlint -c ../../../../.markdownlint.json ${CURDIR}
markdown-lint-fix:
npx markdownlint -f -c ../../../../.markdownlint.json ${CURDIR}
spellcheck:
docker run --rm -v ./:/content ghcr.io/hexlet/languagetool-cli node ./bin/run.js check /content/**/*.md