-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathdocker.mk
More file actions
130 lines (117 loc) · 4.87 KB
/
docker.mk
File metadata and controls
130 lines (117 loc) · 4.87 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
MONGO_DOCKER_TAG := mongo:8.0.9
MONGO_CONTAINER_NAME := mongo-$(UTIL_NAME)-test
.PHONY: docker-help
docker-help:
@echo "Docker:"
@echo " docker-run Runs docker container with installed util;"
@echo " docker-image Builds a docker image;"
@echo " ALL=[1|0] REBUILD=[1|0]"
@echo " docker-base-image Builds a basic docker image from which to build other images;"
@echo " docker-test-image Builds a docker image for running tests and building package;"
@echo " docker-test-mongo-run Runs the MongoDB docker container (${MONGO_CONTAINER_NAME}) for the unit test purpose;"
@echo " docker-test-mongo-stop Stops and removes the MongoDB docker container (${MONGO_CONTAINER_NAME});"
@echo " docker-test Runs unit tests with pytest framework in the docker container;"
@echo " docker-autotest Runs autotests in docker container;"
@echo " docker-build-package Builds the debian package in special docker image;"
@echo " docker-rmi ALL=[1|0] Delete created docker images;"
@echo " docker-help Displays information about available docker targets."
@echo
.PHONY: docker-base-image
docker-base-image: substitute-sources substitute-docker
@docker image inspect $(BASE_DOCKER_TAG) > /dev/null 2>&1 || ( \
echo "Building base docker image." && \
export DOCKER_BUILDKIT=1 && \
docker image build \
--tag "$(BASE_DOCKER_TAG)" \
--build-arg PYTHON_REQUIRED_LIBS="$(PYTHON_REQUIRED_LIBS)" \
--build-arg UTIL_NAME="$(UTIL_NAME)" \
--file docker/base_ubuntu2404.dockerfile \
. \
)
.PHONY: docker-test-image
docker-test-image: docker-base-image
@docker image inspect $(TEST_DOCKER_TAG) > /dev/null 2>&1 || \
docker image build \
--tag "$(TEST_DOCKER_TAG)" \
--build-arg BASE_DOCKER_TAG="$(BASE_DOCKER_TAG)" \
--build-arg PYTHON_TEST_LIBS="$(PYTHON_TEST_LIBS)" \
--build-arg PYTHON_BUILD_LIBS="$(PYTHON_BUILD_LIBS)" \
--build-arg LOGS_PATH="$(LOGS_PATH)" \
--build-arg UTIL_NAME="$(UTIL_NAME)" \
--file docker/test_ubuntu2404.dockerfile \
.
.PHONY: docker-test-mongo-run
docker-test-mongo-run:
@docker run \
--env MONGO_INITDB_ROOT_USERNAME=root \
--env MONGO_INITDB_ROOT_PASSWORD=root \
--detach \
--name $(MONGO_CONTAINER_NAME) \
$(MONGO_DOCKER_TAG)
.PHONY: docker-test-mongo-stop
docker-test-mongo-stop:
@docker container stop $(MONGO_CONTAINER_NAME)
@docker container rm $(MONGO_CONTAINER_NAME)
.PHONY: docker-test
docker-test: docker-test-image docker-test-mongo-run
@docker run --rm \
--env MONGO_HOST=$(shell docker inspect --format '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(MONGO_CONTAINER_NAME)) \
--volume $(PWD)/test:/usr/src/$(UTIL_NAME)/test \
"$(TEST_DOCKER_TAG)" || (make docker-test-mongo-stop && exit 200)
@make docker-test-mongo-stop
.PHONY: docker-autotest
docker-autotest: docker-test-image docker-build-package docker-test-mongo-run
@if [ $(shell find . -maxdepth 1 -type f -name .env | wc --lines) != 1 ]; then \
echo "Requires '.env' file with provided GitHub token for running autotests."; \
exit 200; \
else \
docker run --rm \
--volume $(PWD)/$(DEBIAN_PACKAGES_PATH):/usr/src/$(UTIL_NAME)/$(DEBIAN_PACKAGES_PATH) \
--volume $(PWD)/test:/usr/src/$(UTIL_NAME)/test \
--env MONGO_HOST=$(shell docker inspect --format '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(MONGO_CONTAINER_NAME)) \
--env-file .env \
"$(TEST_DOCKER_TAG)" bash -c \
"apt-get install -y /usr/src/${UTIL_NAME}/${DEBIAN_PACKAGES_PATH}/${DEB_PKG_NAME}.deb && make autotest"; \
make docker-test-mongo-stop; \
fi
.PHONY: docker-build-package
docker-build-package: docker-test-image
docker run --rm \
--volume $(PWD)/$(DEBIAN_PACKAGES_PATH):/usr/src/$(UTIL_NAME)/$(DEBIAN_PACKAGES_PATH) \
--env IS_DEVELOPED=$(IS_DEVELOPED) \
--env USER_UID=$(USER_UID) \
--env USER_GID=$(USER_GID) \
"$(TEST_DOCKER_TAG)" bash -c \
"make package"
.PHONY: docker-image
docker-image: docker-base-image docker-test-image
@if [ "$(REBUILD)" = "1" ]; then \
make clean-all docker-rmi ALL="$(ALL)"; \
fi
@(docker image inspect $(DOCKER_TAG) > /dev/null 2>&1 && \
echo "The image already exists. For rebuilding image provide REBUILD=1 argument.") || ( \
make docker-test && \
make docker-build-package && \
docker image build \
--tag "$(DOCKER_TAG)" \
--build-arg BASE_DOCKER_TAG="$(BASE_DOCKER_TAG)" \
--build-arg UTIL_NAME="$(UTIL_NAME)" \
--build-arg DEBIAN_PACKAGES_PATH="$(DEBIAN_PACKAGES_PATH)" \
--build-arg DEB_PKG_NAME="$(DEB_PKG_NAME)" \
--file docker/ubuntu2404.dockerfile \
. \
)
.PHONY: docker-run
docker-run: docker-image
@touch .env
docker run --rm --tty --interactive \
--env-file .env \
--add-host=host.docker.internal:host-gateway \
"$(DOCKER_TAG)"
.PHONY: docker-rmi
docker-rmi:
@docker rmi $(DOCKER_TAG) --force
@docker rmi $(TEST_DOCKER_TAG) --force
@if [ "$(ALL)" = "1" ]; then \
docker rmi $(BASE_DOCKER_TAG) --force; \
fi