|
| 1 | +# Recipies for this Makefile |
| 2 | + |
| 3 | +## Build all docker images |
| 4 | +## $ make DOCKER_REPOSITORY=crystal-lang/crystal DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z CRYSTAL_DEB=... CRYSTAL_TARGZ=... |
| 5 | +## Build ubuntu64 docker images |
| 6 | +## $ make ubuntu64 DOCKER_REPOSITORY=crystal-lang/crystal DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z CRYSTAL_DEB=... |
| 7 | +## Build alpine docker images |
| 8 | +## $ make alpine DOCKER_REPOSITORY=crystal-lang/crystal DOCKER_TAG=nightly CRYSTAL_VERSION=0.xy.z CRYSTAL_TARGZ=... |
| 9 | + |
1 | 10 | CRYSTAL_VERSION ?= ## How the binaries should be branded
|
2 |
| -CRYSTAL_DEB ?= ## which crystal.deb file to install in the docker images |
3 |
| -DOCKER_TAG ?= ## How to tag the docker image. a -build will be appended for -build image |
| 11 | +CRYSTAL_DEB ?= ## Which crystal.deb file to install in debian based docker images (ubuntu) |
| 12 | +CRYSTAL_TARGZ ?= ## Which crystal.tar.gz file to install in docker images (alpine) |
| 13 | +DOCKER_TAG ?= ## How to tag the docker image (examples: `0.27.2`, `nightly20190307`). `-build` will be appended for build images. |
4 | 14 | DOCKER_REPOSITORY ?= ## Docker hub repository to commit image
|
5 | 15 |
|
6 |
| -OUTPUT_DIR = build |
7 |
| -BUILD_ARGS64 = --build-arg crystal_deb=./tmp/crystal.deb --build-arg base_docker_image=ubuntu:bionic |
8 |
| -BUILD_ARGS32 = --build-arg crystal_deb=./tmp/crystal.deb --build-arg base_docker_image=i386/ubuntu:bionic |
| 16 | +OUTPUT_DIR := build |
| 17 | +BUILD_CONTEXT := $(CURDIR)/build-context |
| 18 | +BUILD_ARGS_UBUNTU64 := --build-arg crystal_deb=crystal.deb $(BUILD_CONTEXT)/ubuntu64 --build-arg base_docker_image=ubuntu:bionic |
| 19 | +BUILD_ARGS_UBUNTU32 := --build-arg crystal_deb=crystal.deb $(BUILD_CONTEXT)/ubuntu32 --build-arg base_docker_image=i386/ubuntu:bionic |
| 20 | +BUILD_ARGS_ALPINE := --build-arg crystal_targz=crystal.tar.gz $(BUILD_CONTEXT)/alpine |
| 21 | +DOCKER_TAG_UBUNTU := $(DOCKER_REPOSITORY):$(DOCKER_TAG) |
| 22 | +DOCKER_TAG_ALPINE := $(DOCKER_REPOSITORY):$(DOCKER_TAG)-alpine |
9 | 23 |
|
10 | 24 | .PHONY: all64
|
11 |
| -all64: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION).tar.gz $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-build.tar.gz |
| 25 | +all64: ubuntu64 alpine ## Build all x86_64 images |
12 | 26 |
|
13 | 27 | .PHONY: all32
|
14 |
| -all32: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-i386.tar.gz $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-i386-build.tar.gz |
| 28 | +all32: ubuntu32 ## Build all i386 images |
15 | 29 |
|
16 |
| -$(CURDIR)/tmp/crystal.deb: |
17 |
| - mkdir -p $(CURDIR)/tmp |
18 |
| - cp $(CRYSTAL_DEB) $(CURDIR)/tmp/crystal.deb |
| 30 | +.PHONY: all_ubuntu |
| 31 | +all_ubuntu: ubuntu64 ubuntu32 ## Build all ubuntu images |
19 | 32 |
|
20 |
| -$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION).tar.gz: $(CURDIR)/tmp/crystal.deb |
21 |
| - mkdir -p $(OUTPUT_DIR) |
22 |
| - docker build $(BUILD_ARGS64) --target runtime -t $(DOCKER_REPOSITORY):$(DOCKER_TAG) . |
23 |
| - docker save $(DOCKER_REPOSITORY):$(DOCKER_TAG) | gzip > $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION).tar.gz |
| 33 | +.PHONY: ubuntu64 |
| 34 | +ubuntu64: ## Build ubuntu x86_64 images |
| 35 | +ubuntu64: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-x86_64.tar.gz |
| 36 | +ubuntu64: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-x86_64-build.tar.gz |
24 | 37 |
|
25 |
| -$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-build.tar.gz: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION).tar.gz |
26 |
| - mkdir -p $(OUTPUT_DIR) |
27 |
| - docker build $(BUILD_ARGS64) --target build -t $(DOCKER_REPOSITORY):$(DOCKER_TAG)-build . |
28 |
| - docker save $(DOCKER_REPOSITORY):$(DOCKER_TAG)-build | gzip > $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-build.tar.gz |
| 38 | +.PHONY: ubuntu32 |
| 39 | +ubuntu32: ## Build ubuntu i386 images |
| 40 | +ubuntu32: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-i386.tar.gz |
| 41 | +ubuntu32: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-i386-build.tar.gz |
29 | 42 |
|
30 |
| -$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-i386.tar.gz: $(CURDIR)/tmp/crystal.deb |
31 |
| - mkdir -p $(OUTPUT_DIR) |
32 |
| - docker build $(BUILD_ARGS32) --target runtime -t $(DOCKER_REPOSITORY):$(DOCKER_TAG)-i386 . |
33 |
| - docker save $(DOCKER_REPOSITORY):$(DOCKER_TAG)-i386 | gzip > $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-i386.tar.gz |
| 43 | +.PHONY: alpine |
| 44 | +alpine: ## Build alpine images |
| 45 | +alpine: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine.tar.gz |
| 46 | +alpine: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine-build.tar.gz |
| 47 | + |
| 48 | +$(BUILD_CONTEXT)/ubuntu32: $(BUILD_CONTEXT)/ubuntu32/crystal.deb |
| 49 | + cp ubuntu.Dockerfile $@/Dockerfile |
| 50 | + |
| 51 | +$(BUILD_CONTEXT)/ubuntu64: $(BUILD_CONTEXT)/ubuntu64/crystal.deb |
| 52 | + cp ubuntu.Dockerfile $@/Dockerfile |
| 53 | + |
| 54 | +$(BUILD_CONTEXT)/alpine: $(BUILD_CONTEXT)/alpine/crystal.tar.gz |
| 55 | + cp alpine.Dockerfile $@/Dockerfile |
| 56 | + |
| 57 | +%/crystal.deb: |
| 58 | + mkdir -p $(shell dirname $@) |
| 59 | + cp $(CRYSTAL_DEB) $@ |
34 | 60 |
|
35 |
| -$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-i386-build.tar.gz: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-i386.tar.gz |
| 61 | +%/crystal.tar.gz: |
| 62 | + mkdir -p $(shell dirname $@) |
| 63 | + cp $(CRYSTAL_TARGZ) $@ |
| 64 | + |
| 65 | +$(OUTPUT_DIR): |
36 | 66 | mkdir -p $(OUTPUT_DIR)
|
37 |
| - docker build $(BUILD_ARGS32) --target build -t $(DOCKER_REPOSITORY):$(DOCKER_TAG)-i386-build . |
38 |
| - docker save $(DOCKER_REPOSITORY):$(DOCKER_TAG)-i386-build | gzip > $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-i386-build.tar.gz |
| 67 | + |
| 68 | +# Ubuntu x86_64 |
| 69 | +$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-x86_64.tar.gz: $(BUILD_CONTEXT)/ubuntu64 $(OUTPUT_DIR) |
| 70 | + docker build -t $(DOCKER_TAG_UBUNTU) --target runtime $(BUILD_ARGS_UBUNTU64) |
| 71 | + docker save $(DOCKER_TAG_UBUNTU) | gzip > $@ |
| 72 | + |
| 73 | +$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-x86_64-build.tar.gz: $(BUILD_CONTEXT)/ubuntu64 $(OUTPUT_DIR) |
| 74 | + docker build -t $(DOCKER_TAG_UBUNTU)-build --target build $(BUILD_ARGS_UBUNTU64) |
| 75 | + docker save $(DOCKER_TAG_UBUNTU)-build | gzip > $@ |
| 76 | + |
| 77 | +# Ubuntu i386 |
| 78 | +$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-i386.tar.gz: $(BUILD_CONTEXT)/ubuntu32 $(OUTPUT_DIR) |
| 79 | + docker build -t $(DOCKER_TAG_UBUNTU)-i386 --target runtime $(BUILD_ARGS_UBUNTU32) |
| 80 | + docker save $(DOCKER_TAG_UBUNTU)-i386 | gzip > $@ |
| 81 | + |
| 82 | +$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-ubuntu-i386-build.tar.gz: $(BUILD_CONTEXT)/ubuntu32 $(OUTPUT_DIR) |
| 83 | + docker build -t $(DOCKER_TAG_UBUNTU)-i386-build --target build $(BUILD_ARGS_UBUNTU32) |
| 84 | + docker save $(DOCKER_TAG_UBUNTU)-i386-build | gzip > $@ |
| 85 | + |
| 86 | +# Alpine x86_64 |
| 87 | +$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine.tar.gz: $(BUILD_CONTEXT)/alpine $(OUTPUT_DIR) |
| 88 | + docker build -t $(DOCKER_TAG_ALPINE) --target runtime $(BUILD_ARGS_ALPINE) |
| 89 | + docker save $(DOCKER_TAG_ALPINE) | gzip > $@ |
| 90 | + |
| 91 | +$(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine-build.tar.gz: $(BUILD_CONTEXT)/alpine $(OUTPUT_DIR) |
| 92 | + docker build -t $(DOCKER_TAG_ALPINE)-build --target build $(BUILD_ARGS_ALPINE) |
| 93 | + docker save $(DOCKER_TAG_ALPINE)-build | gzip > $@ |
39 | 94 |
|
40 | 95 | .PHONY: clean
|
41 |
| -clean: ## Clean up build directory |
| 96 | +clean: ## Clean up build and output directories |
42 | 97 | rm -Rf $(OUTPUT_DIR)
|
43 |
| - rm -Rf $(CURDIR)/tmp |
| 98 | + rm -Rf $(BUILD_CONTEXT) |
| 99 | + |
| 100 | +.PHONY: help |
| 101 | +help: ## Show this help |
| 102 | + @echo |
| 103 | + @printf '\033[34mtargets:\033[0m\n' |
| 104 | + @grep -hE '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) |\ |
| 105 | + sort |\ |
| 106 | + awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}' |
| 107 | + @echo |
| 108 | + @printf '\033[34mconfiguration variables:\033[0m\n' |
| 109 | + @grep -hE '^[a-zA-Z0-9_-]+ \?=.*?## .*$$' $(MAKEFILE_LIST) |\ |
| 110 | + sort |\ |
| 111 | + awk 'BEGIN {FS = " \\?=.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}' |
| 112 | + @echo |
| 113 | + @printf '\033[34mrecipes:\033[0m\n' |
| 114 | + @grep -hE '^##.*$$' $(MAKEFILE_LIST) |\ |
| 115 | +awk 'BEGIN {FS = "## "}; /^## [a-zA-Z_-]/ {printf " \033[36m%s\033[0m\n", $$2}; /^## / {printf " %s\n", $$2}' |
0 commit comments