From 861ca665b9ba391193e866a5c1f8cf33a5ed8ea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 24 Nov 2025 11:18:20 +0100 Subject: [PATCH 01/11] Refactor builds --- docker/Makefile | 59 ++++++++++++++++++++++--------------------------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/docker/Makefile b/docker/Makefile index 5cdf60b..ce805ec 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -2,10 +2,10 @@ ## Build all docker images ## $ make DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z -## Build ubuntu64 docker images -## $ make ubuntu64 DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z -## Build alpine docker images -## $ make alpine DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z +## +## Build specific docker images +## $ make build-ubuntu-runtime DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z +## $ make build-alpine-build DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z ## ## Run smoke tests ## $ make smoke-all @@ -20,24 +20,13 @@ DOCKER_REPOSITORY ?= crystallang/crystal## Docker hub repository to commit image OUTPUT_DIR := build BUILD_CONTEXT := build-context -DOCKER_TAG_UBUNTU := $(DOCKER_REPOSITORY):$(DOCKER_TAG) -DOCKER_TAG_ALPINE := $(DOCKER_REPOSITORY):$(DOCKER_TAG)-alpine - -.PHONY: all64 -all64: ubuntu64 alpine ## Build all x86_64 images - -.PHONY: all_ubuntu -all_ubuntu: ubuntu64 ## Build all ubuntu images -.PHONY: ubuntu64 -ubuntu64: ## Build ubuntu x86_64 images -ubuntu64: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-x86_64.tar.gz -ubuntu64: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-x86_64-build.tar.gz - -.PHONY: alpine -alpine: ## Build alpine images -alpine: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine.tar.gz -alpine: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine-build.tar.gz +.PHONY: all +all: ## Build all images +all: build-ubuntu-runtime +all: build-ubuntu-build +all: build-alpine-runtime +all: build-alpine-build $(BUILD_CONTEXT)/crystal-amd64.tar.gz: $(TARBALLS)/crystal-$(CRYSTAL_VERSION)-1-linux-x86_64.tar.gz | $(BUILD_CONTEXT) cp $< $@ @@ -46,22 +35,26 @@ $(OUTPUT_DIR) $(BUILD_CONTEXT): mkdir -p $@ # Ubuntu x86_64 -$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-x86_64.tar.gz: ubuntu.Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz $(OUTPUT_DIR) - docker build --file ubuntu.Dockerfile -t $(DOCKER_TAG_UBUNTU) --target runtime $(BUILD_CONTEXT) - docker save $(DOCKER_TAG_UBUNTU) | gzip > $@ +$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-x86_64.tar.gz: build-ubuntu-runtime | $(OUTPUT_DIR) + docker save $(DOCKER_REPOSITORY):$(DOCKER_TAG) | gzip > $@ -$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-x86_64-build.tar.gz: ubuntu.Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz $(OUTPUT_DIR) - docker build --file ubuntu.Dockerfile -t $(DOCKER_TAG_UBUNTU)-build --target build $(BUILD_CONTEXT) - docker save $(DOCKER_TAG_UBUNTU)-build | gzip > $@ +$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-x86_64-build.tar.gz: build-ubuntu-build | $(OUTPUT_DIR) + docker save $(DOCKER_REPOSITORY):$(DOCKER_TAG)-build | gzip > $@ # Alpine x86_64 -$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine.tar.gz: alpine.Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz $(OUTPUT_DIR) - docker build --file alpine.Dockerfile -t $(DOCKER_TAG_ALPINE) --target runtime $(BUILD_CONTEXT) - docker save $(DOCKER_TAG_ALPINE) | gzip > $@ +$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine.tar.gz: build-alpine-runtime | $(OUTPUT_DIR) + docker save $(DOCKER_REPOSITORY):$(DOCKER_TAG)-alpine | gzip > $@ + +$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine-build.tar.gz: build-alpine-build $(OUTPUT_DIR) + docker save $(DOCKER_REPOSITORY):$(DOCKER_TAG)-alpine-build | gzip > $@ + +.PHONY: build-%-runtime +build-%-runtime: %.Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz + docker build --file $*.Dockerfile -t $(DOCKER_REPOSITORY):$(DOCKER_TAG)$(subst -ubuntu,,-$*) --target runtime $(BUILD_CONTEXT) -$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine-build.tar.gz: alpine.Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz $(OUTPUT_DIR) - docker build --file alpine.Dockerfile -t $(DOCKER_TAG_ALPINE)-build --target build $(BUILD_CONTEXT) - docker save $(DOCKER_TAG_ALPINE)-build | gzip > $@ +.PHONY: build-%-build +build-%-build: %.Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz + docker build --file $*.Dockerfile -t $(DOCKER_REPOSITORY):$(DOCKER_TAG)$(subst -ubuntu,,-$*)-build --target build $(BUILD_CONTEXT) alpine-84codes: ## Build and push docker build images based on the base images from 84codes docker buildx build --build-arg crystal_version=$(CRYSTAL_VERSION) -f alpine-84codes.Dockerfile --platform linux/amd64,linux/arm64 --tag crystallang/crystal:$(CRYSTAL_VERSION)-alpine-84codes-build --push . From b7c568c19a5ecaf5ffa966381055b21f407a51af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 24 Nov 2025 11:19:05 +0100 Subject: [PATCH 02/11] Drop `$(OUTPUT_DIR) --- docker/Makefile | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/docker/Makefile b/docker/Makefile index ce805ec..9ac82c9 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -18,7 +18,6 @@ TARBALLS ?= tarballs## Path to folder which contains the Crystal tarballs to ins DOCKER_TAG ?= $(CRYSTAL_VERSION)## How to tag the docker image (examples: `0.27.2`, `nightly20190307`). `-build` will be appended for build images. DOCKER_REPOSITORY ?= crystallang/crystal## Docker hub repository to commit image -OUTPUT_DIR := build BUILD_CONTEXT := build-context .PHONY: all @@ -31,23 +30,9 @@ all: build-alpine-build $(BUILD_CONTEXT)/crystal-amd64.tar.gz: $(TARBALLS)/crystal-$(CRYSTAL_VERSION)-1-linux-x86_64.tar.gz | $(BUILD_CONTEXT) cp $< $@ -$(OUTPUT_DIR) $(BUILD_CONTEXT): +$(BUILD_CONTEXT): mkdir -p $@ -# Ubuntu x86_64 -$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-x86_64.tar.gz: build-ubuntu-runtime | $(OUTPUT_DIR) - docker save $(DOCKER_REPOSITORY):$(DOCKER_TAG) | gzip > $@ - -$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-x86_64-build.tar.gz: build-ubuntu-build | $(OUTPUT_DIR) - docker save $(DOCKER_REPOSITORY):$(DOCKER_TAG)-build | gzip > $@ - -# Alpine x86_64 -$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine.tar.gz: build-alpine-runtime | $(OUTPUT_DIR) - docker save $(DOCKER_REPOSITORY):$(DOCKER_TAG)-alpine | gzip > $@ - -$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine-build.tar.gz: build-alpine-build $(OUTPUT_DIR) - docker save $(DOCKER_REPOSITORY):$(DOCKER_TAG)-alpine-build | gzip > $@ - .PHONY: build-%-runtime build-%-runtime: %.Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz docker build --file $*.Dockerfile -t $(DOCKER_REPOSITORY):$(DOCKER_TAG)$(subst -ubuntu,,-$*) --target runtime $(BUILD_CONTEXT) @@ -74,8 +59,7 @@ smoke-%: # Run smoke tests on docker images docker run --rm -v $(CURDIR)/smoke.sh:/smoke.sh -e CRYSTAL_VERSION=$(CRYSTAL_VERSION) $(DOCKER_REPOSITORY):$(DOCKER_TAG)$(subst -ubuntu,,-$*) /smoke.sh $* .PHONY: clean -clean: ## Clean up build and output directories - rm -Rf $(OUTPUT_DIR) +clean: ## Clean up build context rm -Rf $(BUILD_CONTEXT) .PHONY: help From c695b42dea81913696290f7d5c59f2b271c1aec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 24 Nov 2025 11:23:33 +0100 Subject: [PATCH 03/11] push --- docker/Makefile | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docker/Makefile b/docker/Makefile index 9ac82c9..f5249ef 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -7,6 +7,12 @@ ## $ make build-ubuntu-runtime DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z ## $ make build-alpine-build DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z ## +## Push all docker images to registry +## $ make push DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z +## Push a specific docker image to registry +## $ make push-ubuntu-runtime DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z +## $ make push-alpine-build DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z +## ## Run smoke tests ## $ make smoke-all ## $ make smoke-ubuntu-build @@ -27,6 +33,17 @@ all: build-ubuntu-build all: build-alpine-runtime all: build-alpine-build +.PHONY: push +push: ## Push all images to the registry +push: push-ubuntu-runtime +push: push-ubuntu-build +push: push-alpine-runtime +push: push-alpine-build + +.PHONY: push-% +push-%: build-% + docker push $(DOCKER_REPOSITORY):$(DOCKER_TAG)$(subst -ubuntu,,-$*) + $(BUILD_CONTEXT)/crystal-amd64.tar.gz: $(TARBALLS)/crystal-$(CRYSTAL_VERSION)-1-linux-x86_64.tar.gz | $(BUILD_CONTEXT) cp $< $@ From ab6d1c6d2482a50055fd5058da520e46fd170372 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 24 Nov 2025 11:38:07 +0100 Subject: [PATCH 04/11] Drop `-runtime` suffix --- docker/Makefile | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/docker/Makefile b/docker/Makefile index f5249ef..d06d6c3 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -2,15 +2,14 @@ ## Build all docker images ## $ make DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z -## ## Build specific docker images -## $ make build-ubuntu-runtime DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z +## $ make build-ubuntu DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z ## $ make build-alpine-build DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z ## ## Push all docker images to registry ## $ make push DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z ## Push a specific docker image to registry -## $ make push-ubuntu-runtime DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z +## $ make push-ubuntu DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z ## $ make push-alpine-build DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z ## ## Run smoke tests @@ -28,16 +27,16 @@ BUILD_CONTEXT := build-context .PHONY: all all: ## Build all images -all: build-ubuntu-runtime +all: build-ubuntu all: build-ubuntu-build -all: build-alpine-runtime +all: build-alpine all: build-alpine-build .PHONY: push push: ## Push all images to the registry -push: push-ubuntu-runtime +push: push-ubuntu push: push-ubuntu-build -push: push-alpine-runtime +push: push-alpine push: push-alpine-build .PHONY: push-% @@ -50,8 +49,8 @@ $(BUILD_CONTEXT)/crystal-amd64.tar.gz: $(TARBALLS)/crystal-$(CRYSTAL_VERSION)-1- $(BUILD_CONTEXT): mkdir -p $@ -.PHONY: build-%-runtime -build-%-runtime: %.Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz +.PHONY: build-% +build-%: %.Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz docker build --file $*.Dockerfile -t $(DOCKER_REPOSITORY):$(DOCKER_TAG)$(subst -ubuntu,,-$*) --target runtime $(BUILD_CONTEXT) .PHONY: build-%-build From 374464d2f67ef74bde1a8f87c19bb652072069f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 24 Nov 2025 11:40:37 +0100 Subject: [PATCH 05/11] Unify build recipe --- docker/Makefile | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/docker/Makefile b/docker/Makefile index d06d6c3..d2b30a2 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -49,13 +49,11 @@ $(BUILD_CONTEXT)/crystal-amd64.tar.gz: $(TARBALLS)/crystal-$(CRYSTAL_VERSION)-1- $(BUILD_CONTEXT): mkdir -p $@ -.PHONY: build-% -build-%: %.Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz - docker build --file $*.Dockerfile -t $(DOCKER_REPOSITORY):$(DOCKER_TAG)$(subst -ubuntu,,-$*) --target runtime $(BUILD_CONTEXT) +.SECONDEXPANSION: -.PHONY: build-%-build -build-%-build: %.Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz - docker build --file $*.Dockerfile -t $(DOCKER_REPOSITORY):$(DOCKER_TAG)$(subst -ubuntu,,-$*)-build --target build $(BUILD_CONTEXT) +.PHONY: build-% +build-%: $$(subst -build,,$$*).Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz + docker build --file $(subst -build,,$*).Dockerfile -t $(DOCKER_REPOSITORY):$(DOCKER_TAG)$(subst -ubuntu,,-$*) --target runtime $(BUILD_CONTEXT) alpine-84codes: ## Build and push docker build images based on the base images from 84codes docker buildx build --build-arg crystal_version=$(CRYSTAL_VERSION) -f alpine-84codes.Dockerfile --platform linux/amd64,linux/arm64 --tag crystallang/crystal:$(CRYSTAL_VERSION)-alpine-84codes-build --push . From c1f72f6656632c7a90d408af3f1862ff392e9b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 1 Dec 2025 20:56:24 +0100 Subject: [PATCH 06/11] Improve docs --- docker/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Makefile b/docker/Makefile index d2b30a2..a93a33d 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -1,4 +1,4 @@ -# Recipies for this Makefile +# Recipes for this Makefile ## Build all docker images ## $ make DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z @@ -21,7 +21,7 @@ CRYSTAL_VERSION ?= ## How the binaries should be branded TARBALLS ?= tarballs## Path to folder which contains the Crystal tarballs to install in docker images. DOCKER_TAG ?= $(CRYSTAL_VERSION)## How to tag the docker image (examples: `0.27.2`, `nightly20190307`). `-build` will be appended for build images. -DOCKER_REPOSITORY ?= crystallang/crystal## Docker hub repository to commit image +DOCKER_REPOSITORY ?= crystallang/crystal## Docker hub repository to push images to (default: `crystallang/crystal` BUILD_CONTEXT := build-context From 0fb9cb8690f92a79850693b9a3ab74799341a92a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Tue, 2 Dec 2025 22:20:07 +0100 Subject: [PATCH 07/11] Simplify variables --- docker/Makefile | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/docker/Makefile b/docker/Makefile index a93a33d..cec7446 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -1,29 +1,27 @@ # Recipes for this Makefile ## Build all docker images -## $ make DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z +## $ make VERSION=1.18.2 ## Build specific docker images -## $ make build-ubuntu DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z -## $ make build-alpine-build DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z +## $ make build-ubuntu VERSION=1.18.2 +## $ make build-alpine-build VERSION=1.18.2 ## ## Push all docker images to registry -## $ make push DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z +## $ make push VERSION=1.18.2 ## Push a specific docker image to registry -## $ make push-ubuntu DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z -## $ make push-alpine-build DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z +## $ make push-ubuntu VERSION=1.18.2 +## $ make push-alpine-build VERSION=1.18.2 ## ## Run smoke tests ## $ make smoke-all ## $ make smoke-ubuntu-build ## $ make smoke-alpine-runtime -CRYSTAL_VERSION ?= ## How the binaries should be branded -TARBALLS ?= tarballs## Path to folder which contains the Crystal tarballs to install in docker images. +VERSION ?= ## Version name of the source tarballs +TARBALLS ?= ./tarballs## Path to folder which contains the Crystal tarballs to install in docker images. -DOCKER_TAG ?= $(CRYSTAL_VERSION)## How to tag the docker image (examples: `0.27.2`, `nightly20190307`). `-build` will be appended for build images. -DOCKER_REPOSITORY ?= crystallang/crystal## Docker hub repository to push images to (default: `crystallang/crystal` - -BUILD_CONTEXT := build-context +BUILD_CONTEXT := ./build-context +TAG := crystallang/crystal:$(VERSION)## Base tag of the docker image. Classifiers like `-ubuntu` and `-build` will be appended. .PHONY: all all: ## Build all images @@ -41,9 +39,9 @@ push: push-alpine-build .PHONY: push-% push-%: build-% - docker push $(DOCKER_REPOSITORY):$(DOCKER_TAG)$(subst -ubuntu,,-$*) + docker push $(TAG)$(subst -ubuntu,,-$*) -$(BUILD_CONTEXT)/crystal-amd64.tar.gz: $(TARBALLS)/crystal-$(CRYSTAL_VERSION)-1-linux-x86_64.tar.gz | $(BUILD_CONTEXT) +$(BUILD_CONTEXT)/crystal-amd64.tar.gz: $(TARBALLS)/crystal-$(VERSION)-1-linux-x86_64.tar.gz | $(BUILD_CONTEXT) cp $< $@ $(BUILD_CONTEXT): @@ -53,13 +51,13 @@ $(BUILD_CONTEXT): .PHONY: build-% build-%: $$(subst -build,,$$*).Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz - docker build --file $(subst -build,,$*).Dockerfile -t $(DOCKER_REPOSITORY):$(DOCKER_TAG)$(subst -ubuntu,,-$*) --target runtime $(BUILD_CONTEXT) + docker build --file $(subst -build,,$*).Dockerfile -t $(TAG)$(subst -ubuntu,,-$*) --target runtime $(BUILD_CONTEXT) alpine-84codes: ## Build and push docker build images based on the base images from 84codes - docker buildx build --build-arg crystal_version=$(CRYSTAL_VERSION) -f alpine-84codes.Dockerfile --platform linux/amd64,linux/arm64 --tag crystallang/crystal:$(CRYSTAL_VERSION)-alpine-84codes-build --push . + docker buildx build --build-arg crystal_version=$(VERSION) -f alpine-84codes.Dockerfile --platform linux/amd64,linux/arm64 --tag crystallang/crystal:$(VERSION)-alpine-84codes-build --push . ubuntu-84codes: ## Build and push docker build images based on the base images from 84codes - docker buildx build --build-arg crystal_version=$(CRYSTAL_VERSION) -f ubuntu-84codes.Dockerfile --platform linux/amd64,linux/arm64 --tag crystallang/crystal:$(CRYSTAL_VERSION)-ubuntu-84codes-build --push . + docker buildx build --build-arg crystal_version=$(VERSION) -f ubuntu-84codes.Dockerfile --platform linux/amd64,linux/arm64 --tag crystallang/crystal:$(VERSION)-ubuntu-84codes-build --push . .PHONY: smoke-all smoke-all: ## Run smoke tests on all docker images @@ -70,7 +68,7 @@ smoke-all: smoke-ubuntu-build .PHONY: smoke-% smoke-%: # Run smoke tests on docker images - docker run --rm -v $(CURDIR)/smoke.sh:/smoke.sh -e CRYSTAL_VERSION=$(CRYSTAL_VERSION) $(DOCKER_REPOSITORY):$(DOCKER_TAG)$(subst -ubuntu,,-$*) /smoke.sh $* + docker run --rm -v $(CURDIR)/smoke.sh:/smoke.sh -e VERSION=$(VERSION) $(TAG)$(subst -ubuntu,,-$*) /smoke.sh $* .PHONY: clean clean: ## Clean up build context From e755d9bba892162c11eabe386cf835e3e2f61a0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Tue, 2 Dec 2025 22:34:11 +0100 Subject: [PATCH 08/11] Expand `build-%` rules --- docker/Makefile | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/docker/Makefile b/docker/Makefile index cec7446..775d25b 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -23,6 +23,9 @@ TARBALLS ?= ./tarballs## Path to folder which contains the Crystal tarballs to i BUILD_CONTEXT := ./build-context TAG := crystallang/crystal:$(VERSION)## Base tag of the docker image. Classifiers like `-ubuntu` and `-build` will be appended. +PLATFORMS := linux/amd64 +PLATFORM_TARBALLS := $(patsubst linux/%,$(BUILD_CONTEXT)/crystal-%.tar.gz,$(PLATFORMS)) + .PHONY: all all: ## Build all images all: build-ubuntu @@ -37,7 +40,6 @@ push: push-ubuntu-build push: push-alpine push: push-alpine-build -.PHONY: push-% push-%: build-% docker push $(TAG)$(subst -ubuntu,,-$*) @@ -47,11 +49,21 @@ $(BUILD_CONTEXT)/crystal-amd64.tar.gz: $(TARBALLS)/crystal-$(VERSION)-1-linux-x8 $(BUILD_CONTEXT): mkdir -p $@ -.SECONDEXPANSION: +.PHONY: build-alpine +build-alpine: alpine.Dockerfile $(PLATFORM_TARBALLS) + docker build --file alpine.Dockerfile -t $(TAG)-alpine --target runtime $(BUILD_CONTEXT) + +.PHONY: build-alpine-build +build-alpine-build: alpine.Dockerfile $(PLATFORM_TARBALLS) + docker build --file alpine.Dockerfile -t $(TAG)-alpine-build --target build $(BUILD_CONTEXT) + +.PHONY: build-ubuntu +build-ubuntu: ubuntu.Dockerfile $(PLATFORM_TARBALLS) + docker build --file ubuntu.Dockerfile -t $(TAG) --target runtime $(BUILD_CONTEXT) -.PHONY: build-% -build-%: $$(subst -build,,$$*).Dockerfile $(BUILD_CONTEXT)/crystal-amd64.tar.gz - docker build --file $(subst -build,,$*).Dockerfile -t $(TAG)$(subst -ubuntu,,-$*) --target runtime $(BUILD_CONTEXT) +.PHONY: build-ubuntu-build +build-ubuntu-build: ubuntu.Dockerfile $(PLATFORM_TARBALLS) + docker build --file ubuntu.Dockerfile -t $(TAG)-build --target build $(BUILD_CONTEXT) alpine-84codes: ## Build and push docker build images based on the base images from 84codes docker buildx build --build-arg crystal_version=$(VERSION) -f alpine-84codes.Dockerfile --platform linux/amd64,linux/arm64 --tag crystallang/crystal:$(VERSION)-alpine-84codes-build --push . From cc1c4e5a6455bc5dd456f0306ce70ece8adbcdf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 8 Dec 2025 10:43:24 +0100 Subject: [PATCH 09/11] Use `$(TAG)` in `%-84codes` recipes Co-authored-by: Julien Portalier --- docker/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Makefile b/docker/Makefile index 775d25b..cafce19 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -66,10 +66,10 @@ build-ubuntu-build: ubuntu.Dockerfile $(PLATFORM_TARBALLS) docker build --file ubuntu.Dockerfile -t $(TAG)-build --target build $(BUILD_CONTEXT) alpine-84codes: ## Build and push docker build images based on the base images from 84codes - docker buildx build --build-arg crystal_version=$(VERSION) -f alpine-84codes.Dockerfile --platform linux/amd64,linux/arm64 --tag crystallang/crystal:$(VERSION)-alpine-84codes-build --push . + docker buildx build --build-arg crystal_version=$(VERSION) -f alpine-84codes.Dockerfile --platform linux/amd64,linux/arm64 --tag $(TAG)-alpine-84codes-build --push . ubuntu-84codes: ## Build and push docker build images based on the base images from 84codes - docker buildx build --build-arg crystal_version=$(VERSION) -f ubuntu-84codes.Dockerfile --platform linux/amd64,linux/arm64 --tag crystallang/crystal:$(VERSION)-ubuntu-84codes-build --push . + docker buildx build --build-arg crystal_version=$(VERSION) -f ubuntu-84codes.Dockerfile --platform linux/amd64,linux/arm64 --tag $(TAG)-ubuntu-84codes-build --push . .PHONY: smoke-all smoke-all: ## Run smoke tests on all docker images From 74bc14016826d05a4d9a0ab61e20ca4f74146b05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 8 Dec 2025 14:09:44 +0100 Subject: [PATCH 10/11] fixup --- docker/smoke.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/smoke.sh b/docker/smoke.sh index a42de7a..987703a 100755 --- a/docker/smoke.sh +++ b/docker/smoke.sh @@ -6,10 +6,10 @@ set -eux -if [[ "$CRYSTAL_VERSION" =~ "^[0-9]+(\.[0-9]+)*$" ]]; then - crystal --version | grep -q "${CRYSTAL_VERSION}" +if [[ "$VERSION" =~ "^[0-9]+(\.[0-9]+)*$" ]]; then + crystal --version | grep -q "${VERSION}" else - # $CRYSTAL_VERSION is not a version number on maintenance builds + # $VERSION is not a version number on maintenance builds crystal --version | grep -q "Crystal" fi From 6b708d323edded9e14b700a665b263624eb571ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 8 Dec 2025 14:50:34 +0100 Subject: [PATCH 11/11] Do not require build on push --- docker/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Makefile b/docker/Makefile index cafce19..e4d2120 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -40,7 +40,7 @@ push: push-ubuntu-build push: push-alpine push: push-alpine-build -push-%: build-% +push-%: docker push $(TAG)$(subst -ubuntu,,-$*) $(BUILD_CONTEXT)/crystal-amd64.tar.gz: $(TARBALLS)/crystal-$(VERSION)-1-linux-x86_64.tar.gz | $(BUILD_CONTEXT)