11#! /usr/bin/env bash
2- set -e
2+ set -e -o pipefail
33
44BUILD_ARGUMENTS=()
5- DEPENDENCIES=(docker)
5+ BUILDER_EXPORT_ARCHIVE=" ${BUILDER_EXPORT_ARCHIVE:- true} "
6+ DEPENDENCIES=(docker zstd)
67UPDATE_BASE=false
7- PLATFORMS=(amd64)
8+ PLATFORMS=(linux/ amd64)
89REGISTRY_USER=" madebytimo"
910APPLICATION_NAME=" development-desktop"
1011
@@ -14,7 +15,7 @@ for ARGUMENT in "$@"; do
1415 echo " usage: $( basename " $0 " ) [ARGUMENT]"
1516 echo " Builds the docker image from the Dockerfile."
1617 echo " ARGUMENT can be"
17- echo " --platform [amd64|arm64|arm] Build only for specified platform."
18+ echo " --platform PLATFORM Build only for specified platform."
1819 echo " --publish Push the build."
1920 echo " --update-base Only build if newer base image is available."
2021 exit
@@ -49,13 +50,15 @@ cd "$PROJECT_DIR"
4950mkdir --parents builds
5051
5152BASE_IMAGE=" $( tac Dockerfile | grep --max-count=1 " ^FROM" | cut -d" " -f2) "
52- docker pull " $BASE_IMAGE "
53- BASE_IMAGE_DATE=" $( docker image inspect --format=" {{ .Created }}" " $BASE_IMAGE " | cut -d " T" -f1) "
53+ docker pull --quiet " $BASE_IMAGE "
54+ BASE_IMAGE_DATE=" $( docker image inspect --format=" {{ .Created }}" " $BASE_IMAGE " \
55+ | sed ' s|^\([^T ]*\)[T ].*$|\1|' ) "
5456echo " Base image is $BASE_IMAGE from $BASE_IMAGE_DATE "
5557IMAGE=" ${REGISTRY_USER} /${APPLICATION_NAME} "
5658if [[ " $UPDATE_BASE " == true ]]; then
5759 docker pull " $IMAGE "
58- PUSHED_IMAGE_DATE=" $( docker image inspect --format=" {{ .Created }}" " $IMAGE " | cut -d " T" -f1) "
60+ PUSHED_IMAGE_DATE=" $( docker image inspect --format=" {{ .Created }}" " $IMAGE " \
61+ | sed ' s|^\([^T ]*\)[T ].*$|\1|' ) "
5962 echo " Last pushed image is from $PUSHED_IMAGE_DATE "
6063 if [[ " $BASE_IMAGE_DATE " < " $PUSHED_IMAGE_DATE " ]]; then
6164 echo " Used base image is up to date"
6568
6669PLATFORMS_STRING=" ${PLATFORMS[*]} "
6770BUILD_ARGUMENTS+=(--platform " ${PLATFORMS_STRING// / ,} " )
68- OUTPUT_FILE=" builds/${IMAGE// " /" / -} -${VERSION} -oci.tar"
71+ if [[ " $BUILDER_EXPORT_ARCHIVE " == true ]]; then
72+ OUTPUT_FILE=" builds/${IMAGE// " /" / -} -${VERSION} -oci.tar"
73+ BUILD_ARGUMENTS+=(--output \
74+ " type=oci,dest=${OUTPUT_FILE} ,compression=zstd,compression-level=19,force-compression=true" )
75+ fi
6976
70- docker buildx build " ${BUILD_ARGUMENTS[@]} " --output \
71- " type=oci,dest=${OUTPUT_FILE} ,compression=zstd,compression-level=19,force-compression=true" \
77+ docker buildx build " ${BUILD_ARGUMENTS[@]} " \
7278 --tag " ${IMAGE} :latest" --tag " ${IMAGE} :${VERSION} " \
7379 --tag " ${IMAGE} :${VERSION} -base-${BASE_IMAGE_DATE} " . \
7480 --build-arg " MESHCENTRAL_URL=$MESHCENTRAL_URL "
81+
82+ if [[ " $BUILDER_EXPORT_ARCHIVE " == true ]]; then
83+ docker pull --quiet quay.io/skopeo/stable > /dev/null
84+ rm -f builds/.temp-docker-archive.tar
85+ for PLATFORM in " ${PLATFORMS[@]} " ; do
86+ docker run --interactive --rm --volume " ${PWD} /builds:/builds" \
87+ quay.io/skopeo/stable copy --additional-tag " ${IMAGE} :latest" --additional-tag \
88+ " ${IMAGE} :${VERSION} " --additional-tag " ${IMAGE} :${VERSION} -base-${BASE_IMAGE_DATE} " \
89+ --override-arch " ${PLATFORM#*/ } " --quiet " oci-archive:${OUTPUT_FILE} :latest" \
90+ " docker-archive:builds/.temp-docker-archive.tar"
91+ zstd -19 --force --quiet -T0 builds/.temp-docker-archive.tar \
92+ -o " ${OUTPUT_FILE% oci.tar}${PLATFORM#*/ } .tar.zst"
93+ rm -f builds/.temp-docker-archive.tar
94+ done
95+ fi
0 commit comments