1- # Standard Makefile for python application
2- # created by rbraun @ splunk 7 -Apr-2017
1+ # Standard Makefile for Docker image
2+ # created by richb@instantlinux.net 20 -Apr-2017
33
4- SRC ?= src
5- VENV ?= python_env
6- VDIR ?= $(PWD ) /$(VENV )
4+ BUILDX = https://github.com/docker/buildx/releases/download/v0.4.1/buildx-v0.4.1.linux-amd64
5+ PLATFORMS ?= linux/amd64
6+ PUSH ?= --push
7+ USER_LOGIN ?= instantlinux
8+ VENV = python_env
9+ VDIR = $(PWD ) /$(VENV )
10+
11+ export IMAGE_NAME = $(REGISTRY ) /$(IMAGE ) :$(TAG )
12+ export DOCKER_REPO = $(USER_LOGIN ) /$(IMAGE )
13+
14+ ifneq ($(CI_COMMIT_TAG ) ,)
15+ TAG_OPT = --tag $(USER_LOGIN )$(IMAGE ) :$(CI_COMMIT_TAG )
16+ endif
17+
18+ # Exceptions
19+ ifeq ($(IMAGE ) ,data-sync)
20+ PLATFORMS = linux/amd64,linux/aarch64
21+ endif
22+ ifeq ($(IMAGE ) ,mariadb-galera)
23+ PLATFORMS = linux/amd64
24+ endif
25+ ifeq ($(IMAGE ) ,mythtv-backend)
26+ PLATFORMS = linux/amd64
27+ endif
28+ ifeq ($(IMAGE ) ,nagiosql)
29+ PLATFORMS = linux/amd64,linux/arm64,linux/arm/v7
30+ endif
31+ ifeq ($(IMAGE ) ,postfix-python)
32+ # qemu bombs out with cpu_exec assertion since Dec 2023 on arm/v7
33+ PLATFORMS = linux/amd64,linux/aarch64,linux/arm64
34+ endif
35+ ifeq ($(IMAGE ) ,$(filter $(IMAGE ) ,python-builder python-wsgi) )
36+ # helm package on arm/v6 isn't supported as of Aug 2021
37+ # others had issues with pipenv hashes Jul 2023
38+ PLATFORMS = linux/amd64,linux/arm64
39+ endif
40+ ifeq ($(IMAGE ) ,spamassassin)
41+ PLATFORMS = linux/amd64,linux/arm64
42+ endif
743
844analysis : flake8
9- @echo " Running static analysis"
45+ @echo " Running static analysis"
1046
1147test : pytest
1248
1349test_functional :
1450 @echo " Running functional verification of running image"
15- @echo " --TODO not yet implemented--"
51+
52+ create_image : $(HOME ) /.docker/cli-plugins/docker-buildx
53+ docker buildx build --tag $(REGISTRY ) /$(IMAGE ) :$(TAG ) --platform $(PLATFORMS ) \
54+ $(PUSH ) --file Dockerfile . \
55+ --build-arg=VCS_REF=$(CI_COMMIT_SHA ) \
56+ --build-arg=BUILD_DATE=$(shell date +% Y-% m-% dT% H:% M:% SZ)
57+
58+ promote_image : $(HOME ) /.docker/cli-plugins/docker-buildx
59+ # Log into dockerhub
60+ docker login -u $(USER_LOGIN ) -p $(DOCKER_TOKEN )
61+ docker buildx build $(TAG_OPT ) \
62+ ` [ -e hooks/add_tags ] && hooks/add_tags` \
63+ --tag $(USER_LOGIN ) /$(IMAGE ) :latest --platform $(PLATFORMS ) \
64+ --push --file Dockerfile . \
65+ --build-arg=VCS_REF=$(CI_COMMIT_SHA ) \
66+ --build-arg=BUILD_DATE=$(shell date +% Y-% m-% dT% H:% M:% SZ)
67+ -if [ -x hooks/post_build ]; then sh hooks/post_build; fi
68+
69+ # TODO update dockerhub README if/when that is supported,
70+ # see https://github.com/docker/hub-feedback/issues/1927
71+ # and https://github.com/docker/hub-feedback/issues/2127
1672
1773flake8 : test_requirements
1874 @echo " Running flake8 code analysis"
@@ -22,12 +78,22 @@ python_env: $(VDIR)/bin/python
2278
2379test_requirements : python_env
2480 @echo " Installing test requirements"
25- (. $( VDIR) /bin/activate && \
26- pip install -r requirements/test.txt -r requirements/common.txt)
81+ (if [ -f requirements/test.txt ]; then \
82+ . $(VDIR ) /bin/activate && \
83+ pip install -r requirements/test.txt -r requirements/common.txt; \
84+ fi)
2785
2886$(VDIR ) /bin/python :
2987 @echo " Creating virtual environment"
30- python3 -m venv --system-site-packages $(VDIR )
88+ virtualenv --system-site-packages $(VENV )
89+
90+ $(HOME ) /.docker/cli-plugins/docker-buildx :
91+ mkdir -p $(HOME ) /.docker/cli-plugins/
92+ wget -O $(HOME ) /.docker/cli-plugins/docker-buildx $(BUILDX )
93+ chmod +x $(HOME ) /.docker/cli-plugins/docker-buildx
94+ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
95+ docker buildx create --name multibuild
96+ docker buildx use multibuild
3197
3298pytest : test_requirements
3399 @echo " Running pytest unit tests"
@@ -43,7 +109,7 @@ pytest: test_requirements
43109
44110clean :
45111 @echo " Cleaning out generated files"
46- @rm -rf ./$( SRC ) /{.coverage,htmlcov,coverage.xml}
112+ @rm -rf ./app /{.coverage,htmlcov,coverage.xml}
47113 @find . -name \* .pyc -exec rm {} \;
48114 @find . -name \* .log -exec rm {} \;
49115 @find . -name \* ~ -exec rm {} \;
0 commit comments