@@ -3,24 +3,109 @@ IMAGE_NAME:=codice/ddf-base
33
44GIT_SHA: =$(shell git rev-parse HEAD)
55MASTER_SHA: =$(shell git show-ref -s refs/heads/master)
6- IMAGE_VERSION =2.29-alpine
6+ IMAGE_VERSION =3.0
77
8- # Compute Build Tag
8+ # Multi-architecture configuration
9+ PLATFORMS: =linux/amd64,linux/arm64
10+ BUILDER_NAME: =ddf-multiarch
11+
12+ # Compute Build Tags
913BUILD_TAG =$(IMAGE_NAME ) :$(IMAGE_VERSION )
14+ LATEST_TAG =$(IMAGE_NAME ) :latest
1015
1116.DEFAULT_GOAL := help
1217
1318.PHONY : help
1419help : # # Display help.
1520 @awk ' BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST )
1621
22+ .PHONY : info
23+ info : # # Show build information (versions, tags, platforms)
24+ @echo " Image Name: $( IMAGE_NAME) "
25+ @echo " Version: $( IMAGE_VERSION) "
26+ @echo " Build Tag: $( BUILD_TAG) "
27+ @echo " Latest Tag: $( LATEST_TAG) "
28+ @echo " Platforms: $( PLATFORMS) "
29+ @echo " Builder: $( BUILDER_NAME) "
30+ @echo " Git SHA: $( GIT_SHA) "
31+
32+ .PHONY : setup-buildx
33+ setup-buildx : # # Set up Docker Buildx builder (first time only)
34+ @echo " Setting up Docker Buildx builder: $( BUILDER_NAME) "
35+ @if ! docker buildx ls | grep -q $(BUILDER_NAME ) ; then \
36+ docker buildx create --name $(BUILDER_NAME ) --use --bootstrap; \
37+ echo " Builder $( BUILDER_NAME) created and activated" ; \
38+ else \
39+ docker buildx use $(BUILDER_NAME ) ; \
40+ echo " Builder $( BUILDER_NAME) already exists, activated" ; \
41+ fi
42+
1743.PHONY : image
18- image : # # Build the docker image
19- @echo " Building $( BUILD_TAG) "
20- @docker build --pull -t $(BUILD_TAG ) .
44+ image : # # Build the docker image for current architecture
45+ @echo " Building $( BUILD_TAG) for current architecture"
46+ @docker build --pull -t $(BUILD_TAG ) -t $(LATEST_TAG ) .
47+
48+ .PHONY : dev-build
49+ dev-build : image # # Alias for 'image' target
50+
51+ .PHONY : image-multiarch
52+ image-multiarch : setup-buildx # # Build multi-arch images locally (stores in build cache)
53+ @echo " Building $( BUILD_TAG) for $( PLATFORMS) "
54+ @docker buildx build \
55+ --platform $(PLATFORMS ) \
56+ --pull \
57+ -t $(BUILD_TAG ) \
58+ -t $(LATEST_TAG ) \
59+ .
60+ @echo " Multi-arch build complete (stored in build cache)"
2161
2262.PHONY : push
23- push : image # # Push the docker image
63+ push : image # # Push single-architecture docker image
2464 @echo " Pushing $( BUILD_TAG) "
2565 @docker push $(BUILD_TAG )
66+ @docker push $(LATEST_TAG )
67+
68+ .PHONY : push-multiarch
69+ push-multiarch : setup-buildx # # Build and push multi-arch images to registry
70+ @echo " Building and pushing $( BUILD_TAG) for $( PLATFORMS) "
71+ @docker buildx build \
72+ --platform $(PLATFORMS ) \
73+ --pull \
74+ -t $(BUILD_TAG ) \
75+ -t $(LATEST_TAG ) \
76+ --push \
77+ .
78+ @echo " Multi-arch images pushed successfully"
79+
80+ .PHONY : test-amd64
81+ test-amd64 : # # Test AMD64 architecture build
82+ @echo " Testing AMD64 build..."
83+ @docker run --rm --platform linux/amd64 $(BUILD_TAG ) /bin/bash -c " props version && jq --version"
84+ @echo " AMD64 test passed"
85+
86+ .PHONY : test-arm64
87+ test-arm64 : # # Test ARM64 architecture build
88+ @echo " Testing ARM64 build..."
89+ @docker run --rm --platform linux/arm64 $(BUILD_TAG ) /bin/bash -c " props version && jq --version"
90+ @echo " ARM64 test passed"
91+
92+ .PHONY : test-all
93+ test-all : image-multiarch test-amd64 test-arm64 # # Build and test both architectures
94+
95+ .PHONY : inspect
96+ inspect : # # Inspect multi-arch manifest
97+ @echo " Inspecting manifest for $( BUILD_TAG) "
98+ @docker buildx imagetools inspect $(BUILD_TAG )
99+
100+ .PHONY : clean
101+ clean : # # Clean up build resources
102+ @echo " Cleaning up build resources..."
103+ @docker buildx prune -f
104+ @echo " Cleanup complete"
105+
106+ .PHONY : clean-builder
107+ clean-builder : # # Remove buildx builder
108+ @echo " Removing builder $( BUILDER_NAME) "
109+ @docker buildx rm $(BUILDER_NAME ) || true
110+ @echo " Builder removed"
26111
0 commit comments