@@ -26,6 +26,15 @@ SUPPORTED_PYTHON_VERSIONS := 3.9 3.10 3.11 3.12
26
26
ALL_LAYERS := base advanced
27
27
ALL_BUILDERS := conda mamba
28
28
29
+ ARCHITECTURE := $(shell uname -m)
30
+
31
+ ifeq ($(ARCHITECTURE ) ,arm64)
32
+ DOCKER_BUILD_COMMAND = docker build --progress=plain --no-cache --force-rm
33
+ else
34
+ DOCKER_BUILD_COMMAND = docker buildx build --platform linux/amd64,linux/arm64 --progress=plain --no-cache --force-rm
35
+ endif
36
+
37
+
29
38
.DEFAULT_GOAL: =help
30
39
31
40
help : # # Display this help
@@ -38,29 +47,48 @@ help: ## Display this help
38
47
# ## Docker ###
39
48
.PHONY : build-all-images build-image
40
49
50
+ build-and-push-all-images : # # Build all machine-learning-environments docker images and push them to the registry
51
+ @for version in $(SUPPORTED_PYTHON_VERSIONS ) ; do \
52
+ for builder in $( ALL_BUILDERS) ; do \
53
+ for layer in $( ALL_LAYERS) ; do \
54
+ $(MAKE ) build-image PYTHON_VERSION=$$ version LAYER=$$ layer BUILDER=$$ builder IMAGE_VERSION=$(IMAGE_VERSION ) ; \
55
+ if [ " $( BRANCH_NAME) " = " develop" ] || [ " $( BRANCH_NAME) " = " main" ]; then \
56
+ $(MAKE ) push-image PYTHON_VERSION=$$ version LAYER=$$ layer BUILDER=$$ builder IMAGE_VERSION=$(IMAGE_VERSION ) ; \
57
+ fi \
58
+ done ; \
59
+ $(MAKE ) clean-images; \
60
+ done \
61
+ done
62
+
63
+ clean-images : # # Clean all built images and associated layers
64
+ @echo " Cleaning built images and associated layers..."
65
+ @docker image prune -af
66
+
41
67
build-all-images : # # Build all machine-learning-environments docker images
42
68
@for version in $(SUPPORTED_PYTHON_VERSIONS ) ; do \
43
- for layer in $( ALL_LAYERS ) ; do \
44
- for builder in $( ALL_BUILDERS ) ; do \
69
+ for builder in $( ALL_BUILDERS ) ; do \
70
+ for layer in $( ALL_LAYERS ) ; do \
45
71
$(MAKE ) build-image PYTHON_VERSION=$$ version LAYER=$$ layer BUILDER=$$ builder IMAGE_VERSION=$(IMAGE_VERSION ) ; \
46
72
done \
47
73
done \
48
74
done
49
75
50
- push-all-images : # # push all machine-learning-environments docker images
76
+ push-all-images : # # Push all machine-learning-environments docker images to the registry
51
77
@for version in $(SUPPORTED_PYTHON_VERSIONS ) ; do \
52
- for layer in $( ALL_LAYERS) ; do \
53
- $(MAKE ) push-image PYTHON_VERSION=$$ version LAYER=$$ layer IMAGE_VERSION=$(IMAGE_VERSION ) ; \
78
+ for builder in $( ALL_BUILDERS) ; do \
79
+ for layer in $( ALL_LAYERS) ; do \
80
+ $(MAKE ) push-image PYTHON_VERSION=$$ version LAYER=$$ layer BUILDER=$$ builder IMAGE_VERSION=$(IMAGE_VERSION ) ; \
81
+ done \
54
82
done \
55
83
done
56
84
57
85
build-image : # # Build a single machine-learning-environments docker image (args : PYTHON_VERSION, LAYER, BUILDER, IMAGE_VERSION)
58
- @echo " PYTHON_VERSION=$( PYTHON_VERSION) PYTHON_RELEASE_VERSION= $$ (jq -r '.python. " $( PYTHON_VERSION ) " .release' package.json )"
86
+ @echo " Building image using PYTHON_VERSION=$( PYTHON_VERSION) LAYER= $( LAYER ) BUILDER= $( BUILDER ) IMAGE_VERSION= $( IMAGE_VERSION ) "
59
87
@real_python_version=$$(jq -r '.python."$(PYTHON_VERSION ) ".release' package.json ) ; \
60
- docker build --progress=plain --no-cache --force-rm -t $(REGISTRY_URL ) /$(LAYER ) -$(BUILDER ) -py$(PYTHON_VERSION ) :$(IMAGE_VERSION ) --build-arg PYTHON_RELEASE_VERSION=$$ real_python_version --build-arg PYTHON_VERSION=$(PYTHON_VERSION ) --build-arg IMAGE_VERSION=$(IMAGE_VERSION ) --build-arg BUILDER=$(BUILDER ) -f layers/$(LAYER ) /$(BUILDER ) .Dockerfile layers/$(LAYER ) /
61
-
88
+ $(DOCKER_BUILD_COMMAND ) -t $(REGISTRY_URL ) /$(LAYER ) -$(BUILDER ) -py$(PYTHON_VERSION ) :$(IMAGE_VERSION ) --build-arg PYTHON_RELEASE_VERSION=$$ real_python_version --build-arg PYTHON_VERSION=$(PYTHON_VERSION ) --build-arg IMAGE_VERSION=$(IMAGE_VERSION ) --build-arg BUILDER=$(BUILDER ) -f layers/$(LAYER ) /$(BUILDER ) .Dockerfile layers/$(LAYER ) /
62
89
63
90
push-image : # # Push machine-learning-environments image to registry (args : PYTHON_VERSION, LAYER, BUILDER, IMAGE_VERSION)
91
+ @echo " Pushing image $( REGISTRY_URL) /$( LAYER) -$( BUILDER) -py$( PYTHON_VERSION) :$( IMAGE_VERSION) "
64
92
docker push $(REGISTRY_URL ) /$(LAYER ) -$(BUILDER ) -py$(PYTHON_VERSION ) :$(IMAGE_VERSION )
65
93
if [ " ${BRANCH_NAME} " = " main" ]; then \
66
94
docker push $(REGISTRY_URL ) /$(LAYER ) -$(BUILDER ) -py$(PYTHON_VERSION ) :latest; \
0 commit comments