1717# specific language governing permissions and limitations
1818# under the License.
1919#
20- set -e
20+ set -euo pipefail
2121
2222PULSAR_IMAGE=${PULSAR_IMAGE:- " streamnative/sn-platform" }
2323PULSAR_IMAGE_TAG=${PULSAR_IMAGE_TAG:- " 2.7.1" }
@@ -34,53 +34,120 @@ PULSARCTL_PYTHON_RUNNER="pulsar-functions-pulsarctl-python-runner"
3434RUNNER_TAG=${RUNNER_TAG:- $PULSAR_IMAGE_TAG }
3535KIND_PUSH=${KIND_PUSH:- false}
3636CI_TEST=${CI_TEST:- false}
37+ PLATFORMS=${PLATFORMS:- " linux/amd64" }
38+ PRIMARY_PLATFORM=${PLATFORMS%% ,* }
39+ RUNNER_BASE_IMAGE=" ${DOCKER_REPO} /${RUNNER_BASE} :${RUNNER_TAG} "
40+ PULSARCTL_RUNNER_BASE_IMAGE=" ${DOCKER_REPO} /${PULSARCTL_RUNNER_BASE} :${RUNNER_TAG} "
41+ JAVA_RUNNER_IMAGE=" ${DOCKER_REPO} /${JAVA_RUNNER} :${RUNNER_TAG} "
42+ PULSARCTL_JAVA_RUNNER_IMAGE=" ${DOCKER_REPO} /${PULSARCTL_JAVA_RUNNER} :${RUNNER_TAG} "
43+ GO_RUNNER_IMAGE=" ${DOCKER_REPO} /${GO_RUNNER} :${RUNNER_TAG} "
44+ PULSARCTL_GO_RUNNER_IMAGE=" ${DOCKER_REPO} /${PULSARCTL_GO_RUNNER} :${RUNNER_TAG} "
45+ PYTHON_RUNNER_IMAGE=" ${DOCKER_REPO} /${PYTHON_RUNNER} :${RUNNER_TAG} "
46+ PULSARCTL_PYTHON_RUNNER_IMAGE=" ${DOCKER_REPO} /${PULSARCTL_PYTHON_RUNNER} :${RUNNER_TAG} "
47+
48+ MULTI_PLATFORM=false
49+ if [[ " ${PLATFORMS} " == * ,* ]]; then
50+ MULTI_PLATFORM=true
51+ fi
52+
53+ PUSH_DEFAULT=false
54+ if [[ " ${DOCKER_REPO} " == " localhost:5000" || " ${MULTI_PLATFORM} " == " true" ]]; then
55+ PUSH_DEFAULT=true
56+ fi
57+ PUSH=${PUSH:- $PUSH_DEFAULT }
58+
59+ if [[ " ${MULTI_PLATFORM} " == " true" && " ${PUSH} " != " true" ]]; then
60+ echo " multi-platform builds require PUSH=true so dependent images can resolve their base images" >&2
61+ exit 1
62+ fi
63+
64+ if [[ " ${MULTI_PLATFORM} " == " true" && " ${KIND_PUSH} " == " true" ]]; then
65+ echo " KIND_PUSH=true is only supported for single-platform builds" >&2
66+ exit 1
67+ fi
68+
69+ build_image () {
70+ local image=$1
71+ local context=$2
72+ shift 2
73+
74+ if [[ " ${MULTI_PLATFORM} " == " true" ]]; then
75+ docker buildx build --platform " ${PLATFORMS} " --push -t " ${image} " " $@ " " ${context} "
76+ else
77+ docker build --platform " ${PRIMARY_PLATFORM} " -t " ${image} " " $@ " " ${context} "
78+ fi
79+ }
3780
3881echo " build runner base"
39- docker build --platform linux/amd64 -t ${RUNNER_BASE} images/pulsar-functions-base-runner --build-arg PULSAR_IMAGE=" $PULSAR_IMAGE " --build-arg PULSAR_IMAGE_TAG=" $PULSAR_IMAGE_TAG " --progress=plain
40- docker build --platform linux/amd64 -t ${PULSARCTL_RUNNER_BASE} images/pulsar-functions-base-runner -f images/pulsar-functions-base-runner/pulsarctl.Dockerfile --build-arg PULSAR_IMAGE=" $PULSAR_IMAGE " --build-arg PULSAR_IMAGE_TAG=" $PULSAR_IMAGE_TAG " --progress=plain
41- docker tag ${RUNNER_BASE} " ${DOCKER_REPO} " /${RUNNER_BASE} :" ${RUNNER_TAG} "
42- docker tag ${PULSARCTL_RUNNER_BASE} " ${DOCKER_REPO} " /${PULSARCTL_RUNNER_BASE} :" ${RUNNER_TAG} "
82+ build_image " ${RUNNER_BASE_IMAGE} " images/pulsar-functions-base-runner \
83+ --build-arg PULSAR_IMAGE=" ${PULSAR_IMAGE} " \
84+ --build-arg PULSAR_IMAGE_TAG=" ${PULSAR_IMAGE_TAG} " \
85+ --progress=plain
86+ build_image " ${PULSARCTL_RUNNER_BASE_IMAGE} " images/pulsar-functions-base-runner \
87+ -f images/pulsar-functions-base-runner/pulsarctl.Dockerfile \
88+ --build-arg PULSAR_IMAGE=" ${PULSAR_IMAGE} " \
89+ --build-arg PULSAR_IMAGE_TAG=" ${PULSAR_IMAGE_TAG} " \
90+ --progress=plain
4391
4492echo " build java runner"
45- docker build --platform linux/amd64 -t ${JAVA_RUNNER} images/pulsar-functions-java-runner --build-arg PULSAR_IMAGE=" $PULSAR_IMAGE " --build-arg PULSAR_IMAGE_TAG=" $PULSAR_IMAGE_TAG " --progress=plain
46- docker build --platform linux/amd64 -t ${PULSARCTL_JAVA_RUNNER} images/pulsar-functions-java-runner -f images/pulsar-functions-java-runner/pulsarctl.Dockerfile --build-arg PULSAR_IMAGE=" $PULSAR_IMAGE " --build-arg PULSAR_IMAGE_TAG=" $PULSAR_IMAGE_TAG " --progress=plain
47- docker tag ${JAVA_RUNNER} " ${DOCKER_REPO} " /${JAVA_RUNNER} :" ${RUNNER_TAG} "
48- docker tag ${PULSARCTL_JAVA_RUNNER} " ${DOCKER_REPO} " /${PULSARCTL_JAVA_RUNNER} :" ${RUNNER_TAG} "
93+ build_image " ${JAVA_RUNNER_IMAGE} " images/pulsar-functions-java-runner \
94+ --build-arg BASE_IMAGE=" ${RUNNER_BASE_IMAGE} " \
95+ --build-arg PULSAR_IMAGE=" ${PULSAR_IMAGE} " \
96+ --build-arg PULSAR_IMAGE_TAG=" ${PULSAR_IMAGE_TAG} " \
97+ --progress=plain
98+ build_image " ${PULSARCTL_JAVA_RUNNER_IMAGE} " images/pulsar-functions-java-runner \
99+ -f images/pulsar-functions-java-runner/pulsarctl.Dockerfile \
100+ --build-arg BASE_IMAGE=" ${PULSARCTL_RUNNER_BASE_IMAGE} " \
101+ --build-arg PULSAR_IMAGE=" ${PULSAR_IMAGE} " \
102+ --build-arg PULSAR_IMAGE_TAG=" ${PULSAR_IMAGE_TAG} " \
103+ --progress=plain
49104
50105echo " build python runner"
51- docker build --platform linux/amd64 -t ${PYTHON_RUNNER} images/pulsar-functions-python-runner --build-arg PULSAR_IMAGE=" $PULSAR_IMAGE " --build-arg PULSAR_IMAGE_TAG=" $PULSAR_IMAGE_TAG " --progress=plain
52- docker build --platform linux/amd64 -t ${PULSARCTL_PYTHON_RUNNER} images/pulsar-functions-python-runner -f images/pulsar-functions-python-runner/pulsarctl.Dockerfile --build-arg PULSAR_IMAGE=" $PULSAR_IMAGE " --build-arg PULSAR_IMAGE_TAG=" $PULSAR_IMAGE_TAG " --build-arg PYTHON_VERSION=" $PYTHON_VERSION " --progress=plain
53- docker tag ${PYTHON_RUNNER} " ${DOCKER_REPO} " /${PYTHON_RUNNER} :" ${RUNNER_TAG} "
54- docker tag ${PULSARCTL_PYTHON_RUNNER} " ${DOCKER_REPO} " /${PULSARCTL_PYTHON_RUNNER} :" ${RUNNER_TAG} "
106+ build_image " ${PYTHON_RUNNER_IMAGE} " images/pulsar-functions-python-runner \
107+ --build-arg BASE_IMAGE=" ${RUNNER_BASE_IMAGE} " \
108+ --build-arg PULSAR_IMAGE=" ${PULSAR_IMAGE} " \
109+ --build-arg PULSAR_IMAGE_TAG=" ${PULSAR_IMAGE_TAG} " \
110+ --progress=plain
111+ build_image " ${PULSARCTL_PYTHON_RUNNER_IMAGE} " images/pulsar-functions-python-runner \
112+ -f images/pulsar-functions-python-runner/pulsarctl.Dockerfile \
113+ --build-arg PULSAR_IMAGE=" ${PULSAR_IMAGE} " \
114+ --build-arg PULSAR_IMAGE_TAG=" ${PULSAR_IMAGE_TAG} " \
115+ --build-arg PYTHON_VERSION=" ${PYTHON_VERSION} " \
116+ --progress=plain
55117
56118echo " build go runner"
57- docker build --platform linux/amd64 -t ${GO_RUNNER} images/pulsar-functions-go-runner --progress=plain # go runner is almost the same as runner base, so we no need to given build args for go runner
58- docker build --platform linux/amd64 -t ${PULSARCTL_GO_RUNNER} images/pulsar-functions-go-runner -f images/pulsar-functions-go-runner/pulsarctl.Dockerfile --progress=plain # go runner is almost the same as runner base, so we no need to given build args for go runner
59- docker tag ${GO_RUNNER} " ${DOCKER_REPO} " /${GO_RUNNER} :" ${RUNNER_TAG} "
60- docker tag ${PULSARCTL_GO_RUNNER} " ${DOCKER_REPO} " /${PULSARCTL_GO_RUNNER} :" ${RUNNER_TAG} "
119+ build_image " ${GO_RUNNER_IMAGE} " images/pulsar-functions-go-runner \
120+ --build-arg BASE_IMAGE=" ${RUNNER_BASE_IMAGE} " \
121+ --progress=plain
122+ build_image " ${PULSARCTL_GO_RUNNER_IMAGE} " images/pulsar-functions-go-runner \
123+ -f images/pulsar-functions-go-runner/pulsarctl.Dockerfile \
124+ --build-arg BASE_IMAGE=" ${PULSARCTL_RUNNER_BASE_IMAGE} " \
125+ --progress=plain
61126
62127if [ " $KIND_PUSH " = true ] ; then
63128 echo " push images to kind"
64129 clusters=$( kind get clusters)
65130 echo $clusters
66131 for cluster in $clusters
67132 do
68- kind load docker-image " ${DOCKER_REPO} " / ${JAVA_RUNNER} : " ${RUNNER_TAG }" --name $cluster
69- kind load docker-image " ${DOCKER_REPO} " / ${PULSARCTL_JAVA_RUNNER} : " ${RUNNER_TAG }" --name $cluster
70- kind load docker-image " ${DOCKER_REPO} " / ${PYTHON_RUNNER} : " ${RUNNER_TAG }" --name $cluster
71- kind load docker-image " ${DOCKER_REPO} " / ${PULSARCTL_PYTHON_RUNNER} : " ${RUNNER_TAG }" --name $cluster
72- kind load docker-image " ${DOCKER_REPO} " / ${GO_RUNNER} : " ${RUNNER_TAG }" --name $cluster
73- kind load docker-image " ${DOCKER_REPO} " / ${PULSARCTL_GO_RUNNER} : " ${RUNNER_TAG }" --name $cluster
133+ kind load docker-image " ${JAVA_RUNNER_IMAGE } " --name $cluster
134+ kind load docker-image " ${PULSARCTL_JAVA_RUNNER_IMAGE } " --name $cluster
135+ kind load docker-image " ${PYTHON_RUNNER_IMAGE } " --name $cluster
136+ kind load docker-image " ${PULSARCTL_PYTHON_RUNNER_IMAGE } " --name $cluster
137+ kind load docker-image " ${GO_RUNNER_IMAGE } " --name $cluster
138+ kind load docker-image " ${PULSARCTL_GO_RUNNER_IMAGE } " --name $cluster
74139 done
75140fi
76141
77- if [ " $DOCKER_REPO " = " localhost:5000" ]; then
78- docker push " ${DOCKER_REPO} " /${JAVA_RUNNER} :" ${RUNNER_TAG} "
79- docker push " ${DOCKER_REPO} " /${PULSARCTL_JAVA_RUNNER} :" ${RUNNER_TAG} "
80- docker push " ${DOCKER_REPO} " /${PYTHON_RUNNER} :" ${RUNNER_TAG} "
81- docker push " ${DOCKER_REPO} " /${PULSARCTL_PYTHON_RUNNER} :" ${RUNNER_TAG} "
82- docker push " ${DOCKER_REPO} " /${GO_RUNNER} :" ${RUNNER_TAG} "
83- docker push " ${DOCKER_REPO} " /${PULSARCTL_GO_RUNNER} :" ${RUNNER_TAG} "
142+ if [[ " ${PUSH} " == " true" && " ${MULTI_PLATFORM} " != " true" ]]; then
143+ docker push " ${RUNNER_BASE_IMAGE} "
144+ docker push " ${PULSARCTL_RUNNER_BASE_IMAGE} "
145+ docker push " ${JAVA_RUNNER_IMAGE} "
146+ docker push " ${PULSARCTL_JAVA_RUNNER_IMAGE} "
147+ docker push " ${PYTHON_RUNNER_IMAGE} "
148+ docker push " ${PULSARCTL_PYTHON_RUNNER_IMAGE} "
149+ docker push " ${GO_RUNNER_IMAGE} "
150+ docker push " ${PULSARCTL_GO_RUNNER_IMAGE} "
84151fi
85152#
86153# if [ "$CI_TEST" = true ] ; then
93160# kind load docker-image "${DOCKER_REPO}"/${PYTHON_RUNNER}:"${RUNNER_TAG}" --name $cluster
94161# kind load docker-image "${DOCKER_REPO}"/${GO_RUNNER}:"${RUNNER_TAG}" --name $cluster
95162# done
96- # fi
163+ # fi
0 commit comments