Skip to content

Commit f2abd1c

Browse files
author
Borie, Niels
committed
♻️ Add a Makefile goal to build and push docker image at the same time
1 parent f56447f commit f2abd1c

File tree

2 files changed

+38
-10
lines changed

2 files changed

+38
-10
lines changed

.github/workflows/build_and_publish.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
name: Build and push Docker images
1111
runs-on: ubuntu-latest
1212
steps:
13-
- name: Checkout code
13+
- name: ↙️ Checkout code
1414
uses: actions/checkout@v4
1515
- name: Set up QEMU
1616
uses: docker/setup-qemu-action@v3
@@ -24,7 +24,7 @@ jobs:
2424
with:
2525
username: ${{ secrets.DOCKERHUB_USERNAME }}
2626
password: ${{ secrets.DOCKERHUB_TOKEN }}
27-
- name: ✨Clean up unnecessary directories
27+
- name: Clean up unnecessary directories
2828
run: |
2929
sudo rm -rf /usr/share/dotnet
3030
sudo rm -rf /opt/ghc

Makefile

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,15 @@ SUPPORTED_PYTHON_VERSIONS := 3.9 3.10 3.11 3.12
2626
ALL_LAYERS := base advanced
2727
ALL_BUILDERS := conda mamba
2828

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+
2938
.DEFAULT_GOAL:=help
3039

3140
help: ## Display this help
@@ -38,29 +47,48 @@ help: ## Display this help
3847
### Docker ###
3948
.PHONY: build-all-images build-image
4049

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+
4167
build-all-images: ## Build all machine-learning-environments docker images
4268
@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 \
4571
$(MAKE) build-image PYTHON_VERSION=$$version LAYER=$$layer BUILDER=$$builder IMAGE_VERSION=$(IMAGE_VERSION); \
4672
done \
4773
done \
4874
done
4975

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
5177
@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 \
5482
done \
5583
done
5684

5785
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)"
5987
@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)/
6289

6390
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)"
6492
docker push $(REGISTRY_URL)/$(LAYER)-$(BUILDER)-py$(PYTHON_VERSION):$(IMAGE_VERSION)
6593
if [ "${BRANCH_NAME}" = "main" ]; then \
6694
docker push $(REGISTRY_URL)/$(LAYER)-$(BUILDER)-py$(PYTHON_VERSION):latest; \

0 commit comments

Comments
 (0)