Skip to content

Commit 6e548cb

Browse files
committed
Docker: added a way to generate multiple versions of an image.
1 parent 7a77f48 commit 6e548cb

File tree

1 file changed

+30
-23
lines changed

1 file changed

+30
-23
lines changed

pkg/docker/Makefile

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,105 +10,112 @@ PATCHLEVEL ?= 1
1010

1111
EXPORT_DIR := $(VERSION)
1212

13-
MODULES ?= go jsc node perl php python ruby minimal
13+
MODULES ?= go jsc node perl php python ruby
1414

1515
VARIANT ?= bullseye
1616

17-
VERSION_minimal ?=
17+
VERSIONS_minimal ?=
1818
CONTAINER_minimal ?= debian:$(VARIANT)-slim
1919
CONFIGURE_minimal ?=
2020
INSTALL_minimal ?= version
2121
RUN_minimal ?= /bin/true
2222

23-
VERSION_go ?= 1.20
23+
VERSIONS_go ?= 1.20
2424
VARIANT_go ?= $(VARIANT)
25-
CONTAINER_go ?= golang:$(VERSION_go)-$(VARIANT_go)
25+
$(foreach goversion, $(VERSIONS_go), $(eval CONTAINER_go$(goversion) = golang:$(goversion)-$(VARIANT_go)))
2626
CONFIGURE_go ?= go --go-path=$$GOPATH
2727
INSTALL_go ?= go-install-src libunit-install
2828
RUN_go ?= /bin/true
2929

30-
VERSION_jsc ?= 11
30+
VERSIONS_jsc ?= 11
3131
VARIANT_jsc ?= jammy
32-
CONTAINER_jsc ?= eclipse-temurin:$(VERSION_jsc)-jdk-$(VARIANT_jsc)
32+
$(foreach jscversion, $(VERSIONS_jsc), $(eval CONTAINER_jsc$(jscversion) = eclipse-temurin:$(jscversion)-jdk-$(VARIANT_jsc)))
3333
CONFIGURE_jsc ?= java --jars=/usr/share/unit-jsc-common/
3434
INSTALL_jsc ?= java-shared-install java-install
3535
RUN_jsc ?= /bin/true
3636

37-
VERSION_node ?= 18
37+
VERSIONS_node ?= 18
3838
VARIANT_node ?= $(VARIANT)
39-
CONTAINER_node ?= node:$(VERSION_node)-$(VARIANT_node)
39+
$(foreach nodeversion, $(VERSIONS_node), $(eval CONTAINER_node$(nodeversion) = node:$(nodeversion)-$(VARIANT_node)))
4040
CONFIGURE_node ?= nodejs --node-gyp=/usr/local/lib/node_modules/npm/bin/node-gyp-bin/node-gyp
4141
INSTALL_node ?= node node-install libunit-install
4242
RUN_node ?= /bin/true
4343

44-
VERSION_perl ?= 5.36
44+
VERSIONS_perl ?= 5.36
4545
VARIANT_perl ?= $(VARIANT)
46-
CONTAINER_perl ?= perl:$(VERSION_perl)-$(VARIANT_perl)
46+
$(foreach perlversion, $(VERSIONS_perl), $(eval CONTAINER_perl$(perlversion) = perl:$(perlversion)-$(VARIANT_perl)))
4747
CONFIGURE_perl ?= perl
4848
INSTALL_perl ?= perl-install
4949
RUN_perl ?= /bin/true
5050

51-
VERSION_php ?= 8.2
51+
VERSIONS_php ?= 8.2
5252
VARIANT_php ?= cli-$(VARIANT)
53-
CONTAINER_php ?= php:$(VERSION_php)-$(VARIANT_php)
53+
$(foreach phpversion, $(VERSIONS_php), $(eval CONTAINER_php$(phpversion) = php:$(phpversion)-$(VARIANT_php)))
5454
CONFIGURE_php ?= php
5555
INSTALL_php ?= php-install
5656
RUN_php ?= ldconfig
5757

58-
VERSION_python ?= 3.11
58+
VERSIONS_python ?= 3.11
5959
VARIANT_python ?= $(VARIANT)
60-
CONTAINER_python ?= python:$(VERSION_python)-$(VARIANT_python)
60+
$(foreach pythonversion, $(VERSIONS_python), $(eval CONTAINER_python$(pythonversion) = python:$(pythonversion)-$(VARIANT_python)))
6161
CONFIGURE_python ?= python --config=/usr/local/bin/python3-config
6262
INSTALL_python ?= python3-install
6363
RUN_python ?= /bin/true
6464

65-
VERSION_ruby ?= 3.2
65+
VERSIONS_ruby ?= 3.2
6666
VARIANT_ruby ?= $(VARIANT)
67-
CONTAINER_ruby ?= ruby:$(VERSION_ruby)-$(VARIANT_ruby)
67+
$(foreach rubyversion, $(VERSIONS_ruby), $(eval CONTAINER_ruby$(rubyversion) = ruby:$(rubyversion)-$(VARIANT_ruby)))
6868
CONFIGURE_ruby ?= ruby
6969
INSTALL_ruby ?= ruby-install
7070
RUN_ruby ?= gem install rack
7171

7272
default:
7373
@echo "valid targets: all build dockerfiles clean"
7474

75-
MODVERSIONS = $(foreach module,$(MODULES),$(module)$(VERSION_$(module)))
75+
MODVERSIONS = $(foreach module, $(MODULES), $(foreach modversion, $(shell for v in $(VERSIONS_$(module)); do echo $$v; done | sort -r), $(module)$(modversion))) minimal
7676

7777
modname = $(shell echo $1 | /usr/bin/tr -d '.01234567890-')
7878

7979
dockerfiles: $(addprefix Dockerfile., $(MODVERSIONS))
80-
build: $(addprefix build-,$(MODVERSIONS))
80+
build: $(addprefix build-, $(MODVERSIONS))
8181

8282
Dockerfile.%: ../../version template.Dockerfile
8383
@echo "===> Building $@"
8484
cat template.Dockerfile | sed \
8585
-e 's,@@VERSION@@,$(VERSION),g' \
8686
-e 's,@@PATCHLEVEL@@,$(PATCHLEVEL),g' \
87-
-e 's,@@CONTAINER@@,$(CONTAINER_$(call modname, $*)),g' \
87+
-e 's,@@CONTAINER@@,$(CONTAINER_$*),g' \
8888
-e 's,@@CONFIGURE@@,$(CONFIGURE_$(call modname, $*)),g' \
8989
-e 's,@@INSTALL@@,$(INSTALL_$(call modname, $*)),g' \
9090
-e 's,@@RUN@@,$(RUN_$(call modname, $*)),g' \
9191
> $@
9292

9393
build-%: Dockerfile.%
94-
docker pull $(CONTAINER_$(call modname, $*))
94+
docker pull $(CONTAINER_$*)
9595
docker build --no-cache -t unit:$(VERSION)-$* -f Dockerfile.$* .
9696

9797
library:
9898
@echo "# this file is generated via https://github.com/nginx/unit/blob/$(shell git describe --always --abbrev=0 HEAD)/pkg/docker/Makefile"
9999
@echo ""
100100
@echo "Maintainers: Unit Docker Maintainers <docker-maint@nginx.com> (@nginx)"
101101
@echo "GitRepo: https://github.com/nginx/unit.git"
102-
@for mod in $(MODVERSIONS); do \
102+
@previous=""; \
103+
for mod in $(MODVERSIONS); do \
103104
echo ""; \
104-
TAGS="$$mod $${mod%%.*} $$( echo $$mod | tr -d '.0123456789-' )"; \
105+
modname="$$( echo $$mod | tr -d '.0123456789-' )"; \
106+
TAGS="$$mod $${mod%%.*} $$modname" ; \
105107
TAGS="$$(echo $$TAGS | tr " " "\n" | sort -u -r | tr "\n" "," | sed "s/,/, /g")"; \
106-
echo "Tags: $(VERSION)-$$mod, $${TAGS%, }"; \
108+
if [ "$$previous" == "$$modname" ]; then \
109+
echo "Tags: $(VERSION)-$$mod, $$mod"; \
110+
else \
111+
echo "Tags: $(VERSION)-$$mod, $${TAGS%, }"; \
112+
fi; \
107113
echo "Architectures: amd64, arm64v8"; \
108114
echo "GitFetch: refs/heads/branches/packaging"; \
109115
echo "GitCommit: $(shell git describe --always --abbrev=0 HEAD)"; \
110116
echo "Directory: pkg/docker"; \
111117
echo "File: Dockerfile.$$mod"; \
118+
previous=$$(echo $$mod | tr -d '.0123456789-'); \
112119
done
113120

114121
all: $(addprefix Dockerfile., $(MODVERSIONS))

0 commit comments

Comments
 (0)