3
3
.IGNORE : ope root
4
4
5
5
# We use this to choose between a jupyter or a gradescope build
6
- BASE? = jupyter
6
+ BASE := jupyter
7
7
8
- OPE_BOOK? = $(shell cat base/ope_book)
8
+ OPE_BOOK := $(shell cat base/ope_book)
9
9
# USER id
10
- OPE_UID? = $(shell cat base/ope_uid)
10
+ OPE_UID := $(shell cat base/ope_uid)
11
11
12
12
# we use this to choose between a build from the blessed known stable version or a test version
13
- VERSION? = stable
13
+ VERSION := stable
14
14
15
- BASE_REG? = $(shell cat base/base_registry) /
16
- BASE_IMAGE? = $(shell cat base/base_image)
17
- BASE_STABLE_TAG? = $(shell cat base/base_tag)
18
- BASE_TEST_TAG? = :latest
15
+ BASE_REG := $(shell cat base/base_registry) /
16
+ BASE_IMAGE := $(shell cat base/base_image)
17
+ BASE_STABLE_TAG := $(shell cat base/base_tag)
18
+ BASE_TEST_TAG := :latest
19
19
20
- DATE_TAG = $(shell date +"% m.% d.% y_% H.% M.% S")
20
+ DATE_TAG := $(shell date +"% m.% d.% y_% H.% M.% S")
21
21
22
- PRIVATE_USER? = $(shell if [[ -a base/private_user ]]; then cat base/private_user; else echo ${USER}; fi)
23
- PRIVATE_REG? = $(shell cat base/private_registry) /
24
- PRIVATE_IMAGE? = $(PRIVATE_USER ) /$(OPE_BOOK )
25
- PRIVATE_STABLE_TAG? = :stable
26
- PRIVATE_TEST_TAG? = :test
22
+ PRIVATE_USER := $(shell if [[ -a base/private_user ]]; then cat base/private_user; else echo ${USER}; fi)
23
+ PRIVATE_REG := $(shell cat base/private_registry) /
24
+ PRIVATE_IMAGE := $(PRIVATE_USER ) /$(OPE_BOOK )
25
+ PRIVATE_STABLE_TAG := :stable
26
+ PRIVATE_TEST_TAG := :test
27
27
28
- PUBLIC_USER? = $(shell cat base/ope_book_user)
29
- PUBLIC_REG? = $(shell cat base/ope_book_registry) /
30
- PUBLIC_IMAGE? = $(PUBLIC_USER ) /$(OPE_BOOK )
31
- PUBLIC_STABLE_TAG? = :stable
32
- PUBLIC_TEST_TAG? = :test
28
+ PUBLIC_USER := $(shell cat base/ope_book_user)
29
+ PUBLIC_REG := $(shell cat base/ope_book_registry) /
30
+ PUBLIC_IMAGE := $(PUBLIC_USER ) /$(OPE_BOOK )
31
+ PUBLIC_STABLE_TAG := :stable
32
+ PUBLIC_TEST_TAG := :test
33
33
34
- BASE_DISTRO_PACKAGES = $(shell cat base/distro_pkgs)
34
+ BASE_DISTRO_PACKAGES : = $(shell cat base/distro_pkgs)
35
35
36
+ # use recursive assignment to defer execution until we have mamba versions made
36
37
PYTHON_PREREQ_VERSIONS_STABLE = $(shell cat base/python_prereqs | base/mkversions)
37
38
PYTHON_INSTALL_PACKAGES_STABLE = $(shell cat base/python_pkgs | base/mkversions)
38
39
39
- PYTHON_PREREQ_VERSIONS_TEST =
40
- PYTHON_INSTALL_PACKAGES_TEST = $(shell cat base/python_pkgs)
40
+ PYTHON_PREREQ_VERSIONS_TEST : =
41
+ PYTHON_INSTALL_PACKAGES_TEST : = $(shell cat base/python_pkgs)
41
42
42
- JUPYTER_ENABLE_EXTENSIONS = $(shell cat base/jupyter_enable_exts)
43
+ JUPYTER_ENABLE_EXTENSIONS : = $(shell cat base/jupyter_enable_exts)
43
44
44
45
# build gdb from source to ensure we get the right version and build with tui support
45
- GDB_BUILD_SRC = gdb-12.1
46
+ GDB_BUILD_SRC := gdb-12.1
46
47
47
48
# expand installation so that the image feels more like a proper UNIX user environment with man pages, etc.
48
- UNMIN = yes
49
+ UNMIN := yes
49
50
50
51
# external content
51
- ARCH64VMTGZ = https://cs-web.bu.edu/~jappavoo/Resources/UC-SLS/aarch64vm.tgz
52
+ ARCH64VMTGZ := https://cs-web.bu.edu/~jappavoo/Resources/UC-SLS/aarch64vm.tgz
52
53
53
54
# Common docker run configuration designed to mirror as closely as possible the openshift experience
54
55
# if port mapping for SSH access
55
- SSH_PORT? = 2222
56
+ SSH_PORT := 2222
56
57
57
58
# we mount here to match openshift
58
- MOUNT_DIR = /opt/app-root/src
59
- HOST_DIR = ${HOME}
59
+ MOUNT_DIR := /opt/app-root/src
60
+ HOST_DIR := ${HOME}
60
61
61
62
ifeq ($(BASE ) ,jupyter)
62
63
ifeq ($(VERSION),stable)
63
- BASE_TAG = $(BASE_STABLE_TAG )
64
- PRIVATE_TAG = $(PRIVATE_STABLE_TAG )
65
- PUBLIC_TAG = $(PUBLIC_STABLE_TAG )
66
- PYTHON_PREREQ_VERSIONS = $(PYTHON_PREREQ_VERSIONS_STABLE )
67
- PYTHON_INSTALL_PACKAGES = $(PYTHON_INSTALL_PACKAGES_STABLE )
64
+ BASE_TAG := $(BASE_STABLE_TAG )
65
+ PRIVATE_TAG := $(PRIVATE_STABLE_TAG )
66
+ PUBLIC_TAG := $(PUBLIC_STABLE_TAG )
67
+ PYTHON_PREREQ_VERSIONS = $(PYTHON_PREREQ_VERSIONS_STABLE )
68
+ PYTHON_INSTALL_PACKAGES = $(PYTHON_INSTALL_PACKAGES_STABLE )
68
69
else
69
- BASE_TAG = $(BASE_TEST_TAG )
70
- PRIVATE_TAG = $(PRIVATE_TEST_TAG )
71
- PUBLIC_TAG = $(PUBLIC_TEST_TAG )
72
- PYTHON_PREREQ_VERSIONS = $(PYTHON_PREREQ_VERSIONS_TEST )
73
- PYTHON_INSTALL_PACKAGES = $(PYTHON_INSTALL_PACKAGES_TEST )
70
+ BASE_TAG := $(BASE_TEST_TAG )
71
+ PRIVATE_TAG := $(PRIVATE_TEST_TAG )
72
+ PUBLIC_TAG := $(PUBLIC_TEST_TAG )
73
+ PYTHON_PREREQ_VERSIONS = $(PYTHON_PREREQ_VERSIONS_TEST )
74
+ PYTHON_INSTALL_PACKAGES = $(PYTHON_INSTALL_PACKAGES_TEST )
74
75
endif
75
76
else
76
- BASE_IMAGE = gradescope/auto-builds
77
- BASE_VERSION = :ubuntu-20.04
78
- IMAGE: = rh_ee_adhayala/bu-cs-book-gradescope
77
+ BASE_IMAGE := gradescope/auto-builds
78
+ BASE_VERSION := :ubuntu-20.04
79
+ IMAGE := rh_ee_adhayala/bu-cs-book-gradescope
79
80
endif
80
81
81
82
help :
86
87
python-versions : # # gather version of python packages
87
88
python-versions : base/mamba_versions.stable
88
89
89
- base/mamba_versions.stable : IMAGE= $(PRIVATE_IMAGE )
90
- base/mamba_versions.stable : ARGS?= /bin/bash
91
- base/mamba_versions.stable : DARGS?=
90
+ base/mamba_versions.stable : IMAGE = $(PRIVATE_IMAGE )
91
+ base/mamba_versions.stable : ARGS ?= /bin/bash
92
+ base/mamba_versions.stable : DARGS ?=
92
93
base/mamba_versions.stable :
93
94
docker run -it --rm $(DARGS ) $(PRIVATE_REG )$(IMAGE )$(PRIVATE_TAG ) mamba list | tr -d ' \r' > $@
94
95
@@ -99,8 +100,8 @@ base/aarch64vm/README.md:
99
100
cd base && wget -O - ${ARCH64VMTGZ} | tar -zxf -
100
101
101
102
build : base/aarch64vm/README.md
102
- build : IMAGE= $(PRIVATE_IMAGE )
103
- build : DARGS?= --build-arg FROM_REG=$(BASE_REG ) \
103
+ build : IMAGE = $(PRIVATE_IMAGE )
104
+ build : DARGS ?= --build-arg FROM_REG=$(BASE_REG ) \
104
105
--build-arg FROM_IMAGE=$(BASE_IMAGE) \
105
106
--build-arg FROM_TAG=$(BASE_TAG) \
106
107
--build-arg OPE_UID=$(OPE_UID) \
@@ -115,8 +116,8 @@ build: ## Make the image customized appropriately
115
116
rm base/mamba_versions.stable
116
117
make base/mamba_versions.stable
117
118
118
- push : IMAGE= $(PRIVATE_IMAGE )
119
- push : DARGS?=
119
+ push : IMAGE = $(PRIVATE_IMAGE )
120
+ push : DARGS ?=
120
121
push : # # push private build
121
122
# make dated version
122
123
docker tag $(PRIVATE_REG)$(IMAGE)$(PRIVATE_TAG) $(PRIVATE_REG)$(IMAGE)$(PRIVATE_TAG)_$(DATE_TAG)
@@ -125,8 +126,8 @@ push: ## push private build
125
126
# push to update tip to current version
126
127
docker push $(PRIVATE_REG)$(IMAGE)$(PRIVATE_TAG)
127
128
128
- publish : IMAGE= $(PUBLIC_IMAGE )
129
- publish : DARGS?=
129
+ publish : IMAGE = $(PUBLIC_IMAGE )
130
+ publish : DARGS ?=
130
131
publish : # # publish current private build to public published version
131
132
# make dated version
132
133
docker tag $(PRIVATE_REG)$(PRIVATE_IMAGE)$(PRIVATE_TAG) $(PUBLIC_REG)$(IMAGE)$(PUBLIC_TAG)_$(DATE_TAG)
@@ -137,37 +138,37 @@ publish: ## publish current private build to public published version
137
138
# push to update tip to current version
138
139
docker push $(PUBLIC_REG)$(IMAGE)$(PUBLIC_TAG)
139
140
140
- root : IMAGE?= $(PRIVATE_IMAGE )
141
- root : REG?= $(PRIVATE_REG )
142
- root : TAG?= $(PRIVATE_TAG )
143
- root : ARGS?= /bin/bash
144
- root : DARGS?= -u 0
141
+ root : IMAGE = $(PRIVATE_IMAGE )
142
+ root : REG = $(PRIVATE_REG )
143
+ root : TAG = $(PRIVATE_TAG )
144
+ root : ARGS ?= /bin/bash
145
+ root : DARGS ?= -u 0
145
146
root : # # start private version with root shell to do admin and poke around
146
147
-docker run -it --rm $(DARGS ) $(REG )$(IMAGE )$(TAG ) $(ARGS )
147
148
148
- ope : IMAGE?= $(PRIVATE_IMAGE )
149
- ope : REG?= $(PRIVATE_REG )
150
- ope : TAG?= $(PRIVATE_TAG )
151
- ope : ARGS?= /bin/bash
152
- ope : DARGS?=
149
+ ope : IMAGE = $(PRIVATE_IMAGE )
150
+ ope : REG = $(PRIVATE_REG )
151
+ ope : TAG = $(PRIVATE_TAG )
152
+ ope : ARGS ?= /bin/bash
153
+ ope : DARGS ?=
153
154
ope : # # start privae version with root shell to do admin and poke around
154
155
-docker run -it --rm $(DARGS ) $(REG )$(IMAGE )$(TAG ) $(ARGS )
155
156
156
- nb : IMAGE?= $(PUBLIC_IMAGE )
157
- nb : REG?= $(PUBLIC_REG )
158
- nb : TAG?= $(PUBLIC_TAG )
159
- nb : ARGS?=
160
- nb : DARGS?= -e DOCKER_STACKS_JUPYTER_CMD=notebook -v "${HOST_DIR}":"${MOUNT_DIR}" -e SSH_AUTH_SOCK=${SSH_AUTH_SOCK} -p ${SSH_PORT}:22
161
- nb : PORT?= 8888
157
+ nb : IMAGE = $(PUBLIC_IMAGE )
158
+ nb : REG = $(PUBLIC_REG )
159
+ nb : TAG = $(PUBLIC_TAG )
160
+ nb : ARGS ?=
161
+ nb : DARGS ?= -e DOCKER_STACKS_JUPYTER_CMD=notebook -v "${HOST_DIR}":"${MOUNT_DIR}" -e SSH_AUTH_SOCK=${SSH_AUTH_SOCK} -p ${SSH_PORT}:22
162
+ nb : PORT ?= 8888
162
163
nb : # # start published version with jupyter classic notebook interface
163
164
docker run -it --rm -p $(PORT ) :$(PORT ) $(DARGS ) $(REG )$(IMAGE )$(TAG ) $(ARGS )
164
165
165
- lab : IMAGE?= $(PUBLIC_IMAGE )
166
- lab : REG?= $(PUBLIC_REG )
167
- lab : TAG?= $(PUBLIC_TAG )
168
- lab : ARGS?=
169
- lab : DARGS?= -u $(OPE_UID ) -v "${HOST_DIR}":"${MOUNT_DIR}" -v "${SSH_AUTH_SOCK}":"${SSH_AUTH_SOCK}" -e SSH_AUTH_SOCK=${SSH_AUTH_SOCK} -p ${SSH_PORT}:22
170
- lab : PORT?= 8888
166
+ lab : IMAGE = $(PUBLIC_IMAGE )
167
+ lab : REG = $(PUBLIC_REG )
168
+ lab : TAG = $(PUBLIC_TAG )
169
+ lab : ARGS ?=
170
+ lab : DARGS ?= -u $(OPE_UID ) -v "${HOST_DIR}":"${MOUNT_DIR}" -v "${SSH_AUTH_SOCK}":"${SSH_AUTH_SOCK}" -e SSH_AUTH_SOCK=${SSH_AUTH_SOCK} -p ${SSH_PORT}:22
171
+ lab : PORT ?= 8888
171
172
lab : # # start published version with jupyter lab interface
172
173
docker run -it --rm -p $(PORT ) :$(PORT ) $(DARGS ) $(REG )$(IMAGE )$(TAG ) $(ARGS )
173
174
0 commit comments