-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathMakefile
More file actions
148 lines (113 loc) · 4.5 KB
/
Makefile
File metadata and controls
148 lines (113 loc) · 4.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
BASE_IMAGE ?= posit/r-base
VERSIONS ?= 4.1 4.2 4.3 4.4 4.5 devel next
VARIANTS ?= jammy noble resolute bookworm trixie centos7 rockylinux8 rockylinux9 rockylinux10 opensuse156
# PATCH_VERSIONS defines all actively maintained R patch versions.
PATCH_VERSIONS ?= 4.1.0 4.1.1 4.1.2 4.1.3 \
4.2.0 4.2.1 4.2.2 4.2.3 \
4.3.0 4.3.1 4.3.2 4.3.3 \
4.4.0 4.4.1 4.4.2 4.4.3 \
4.5.0 4.5.1 4.5.2 4.5.3
# INCLUDE_PATCH_VERSIONS, if set to `yes`, includes all patch versions in the
# "all" targets.
INCLUDE_PATCH_VERSIONS ?= no
# Architecture used for the image tags, either amd64 or arm64.
# ARCH can be omitted to directly push a single arch image.
ARCH ?= $(shell uname -m | sed -e 's/aarch64/arm64/' -e 's/x86_64/amd64/')
# When set, pushes to an alternate base image (used for pushing to the deprecated rstudio/r-base).
TARGET_BASE_IMAGE ?=
all: build-all test-all
update-all-docker:
docker run -it --rm -v $(PWD):/r-docker -w /r-docker ubuntu:noble /r-docker/update.sh
update-all:
@./update.sh
build-base-%:
docker build -t $(BASE_IMAGE):$* base/$*/.
pull-base-%:
docker pull $(BASE_IMAGE):$*
push-base-%:
docker push $(BASE_IMAGE):$*
define GEN_R_IMAGE_TARGETS
build-$(version)-$(variant): build-base-$(variant)
docker build -t $(BASE_IMAGE):$(version)-$(variant) \
--build-arg BASE_IMAGE=$(BASE_IMAGE) \
$(version)/$(variant)/.
rebuild-$(version)-$(variant): build-base-$(variant)
docker build --no-cache -t $(BASE_IMAGE):$(version)-$(variant) --build-arg BASE_IMAGE=$(BASE_IMAGE) $(version)/$(variant)/.
test-$(version)-$(variant):
docker run --rm -v $(PWD)/test:/test \
-e TAG_VERSION=$(version) \
$(BASE_IMAGE):$(version)-$(variant) \
bash -l /test/test.sh
bash-$(version)-$(variant):
docker run -it --rm -v $(PWD)/test:/test $(BASE_IMAGE):$(version)-$(variant) bash
pull-$(version)-$(variant):
docker pull $(BASE_IMAGE):$(version)-$(variant)
push-$(version)-$(variant):
BASE_IMAGE=$(BASE_IMAGE) TARGET_BASE_IMAGE=$(TARGET_BASE_IMAGE) VERSION=$(version) VARIANT=$(variant) ARCH=$(ARCH) bash ./push-images.sh
push-multiarch-$(version)-$(variant):
BASE_IMAGE=$(BASE_IMAGE) VERSION=$(version) VARIANT=$(variant) bash ./push-multiarch.sh
BUILD_R_IMAGES += build-$(version)-$(variant)
REBUILD_R_IMAGES += rebuild-$(version)-$(variant)
TEST_R_IMAGES += test-$(version)-$(variant)
PULL_R_IMAGES += pull-$(version)-$(variant)
PUSH_R_IMAGES += push-$(version)-$(variant)
PUSH_MULTIARCH_R_IMAGES += push-multiarch-$(version)-$(variant)
endef
define minor_version
$(shell echo $(version) | cut -d. -f-2)
endef
$(foreach variant,$(VARIANTS), \
$(foreach version,$(VERSIONS), \
$(if $(wildcard $(minor_version)/$(variant)), \
$(eval $(GEN_R_IMAGE_TARGETS)) \
) \
) \
)
define GEN_R_PATCH_IMAGE_TARGETS
build-$(version)-$(variant): build-base-$(variant)
docker build -t $(BASE_IMAGE):$(version)-$(variant) \
--build-arg BASE_IMAGE=$(BASE_IMAGE) \
--build-arg R_VERSION=$(version) \
$(minor_version)/$(variant)/.
rebuild-$(version)-$(variant): build-base-$(variant)
docker build --no-cache -t $(BASE_IMAGE):$(version)-$(variant) \
--build-arg BASE_IMAGE=$(BASE_IMAGE) \
--build-arg R_VERSION=$(version) \
$(minor_version)/$(variant)/.
test-$(version)-$(variant):
docker run --rm -v $(PWD)/test:/test \
-e TAG_VERSION=$(version) \
$(BASE_IMAGE):$(version)-$(variant) \
bash -l /test/test.sh
bash-$(version)-$(variant):
docker run -it --rm -v $(PWD)/test:/test $(BASE_IMAGE):$(version)-$(variant) bash
pull-$(version)-$(variant):
docker pull $(BASE_IMAGE):$(version)-$(variant)
push-$(version)-$(variant):
BASE_IMAGE=$(BASE_IMAGE) TARGET_BASE_IMAGE=$(TARGET_BASE_IMAGE) VERSION=$(version) VARIANT=$(variant) ARCH=$(ARCH) bash ./push-images.sh
push-multiarch-$(version)-$(variant):
BASE_IMAGE=$(BASE_IMAGE) VERSION=$(version) VARIANT=$(variant) bash ./push-multiarch.sh
ifeq (yes,$(INCLUDE_PATCH_VERSIONS))
BUILD_R_IMAGES += build-$(version)-$(variant)
REBUILD_R_IMAGES += rebuild-$(version)-$(variant)
TEST_R_IMAGES += test-$(version)-$(variant)
PULL_R_IMAGES += pull-$(version)-$(variant)
PUSH_R_IMAGES += push-$(version)-$(variant)
PUSH_MULTIARCH_R_IMAGES += push-multiarch-$(version)-$(variant)
endif
endef
$(foreach variant,$(VARIANTS), \
$(foreach version,$(PATCH_VERSIONS), \
$(if $(wildcard $(minor_version)/$(variant)), \
$(eval $(GEN_R_PATCH_IMAGE_TARGETS)) \
) \
) \
)
rebuild-all: $(REBUILD_R_IMAGES)
build-all: $(BUILD_R_IMAGES)
test-all: $(TEST_R_IMAGES)
pull-all: $(PULL_R_IMAGES)
push-all: $(PUSH_R_IMAGES)
push-multiarch-all: $(PUSH_MULTIARCH_R_IMAGES)
print-variants:
@echo $(VARIANTS)