diff --git a/.gitlab/ci/definitions.yml b/.gitlab/ci/definitions.yml index c985366..02a118a 100644 --- a/.gitlab/ci/definitions.yml +++ b/.gitlab/ci/definitions.yml @@ -1,5 +1,5 @@ .install-qemu: - timeout: 2 hours # builds with emulation can take a long time to complete + timeout: 4 hours # builds with emulation can take a long time to complete tags: - docker - high-cpu diff --git a/.gitlab/ci/gitlab.images.yml b/.gitlab/ci/gitlab.images.yml index 046ecb2..b3ec1ae 100644 --- a/.gitlab/ci/gitlab.images.yml +++ b/.gitlab/ci/gitlab.images.yml @@ -8,6 +8,7 @@ gitlab: LFS: '2.9' YARN: '1.22' GRAPHICSMAGICK: '1.3.36' + ARCH: linux/amd64,linux/arm64 parallel: matrix: - OS: ['debian:bullseye'] @@ -28,6 +29,7 @@ gitlab-assets: LFS: '2.9' YARN: '1.22' GRAPHICSMAGICK: '1.3.36' + ARCH: amd64,arm64 parallel: matrix: - OS: ['debian:bullseye'] diff --git a/Dockerfile.custom b/Dockerfile.custom index c3713ff..df40818 100644 --- a/Dockerfile.custom +++ b/Dockerfile.custom @@ -35,13 +35,13 @@ RUN if [ -n "$GIT_VERSION" ]; then /scripts/install-git && git --version; fi # Chrome ARG CHROME_VERSION -RUN if [ -n "$CHROME_VERSION" ]; then /scripts/install-chrome $CHROME_VERSION && ( google-chrome --version || chromium --version ); fi +RUN if [ -n "$CHROME_VERSION" ]; then /scripts/install-chrome "$CHROME_VERSION" && ( google-chrome --version || chromium --version ); fi # NodeJS and Yarn ARG NODE_INSTALL_VERSION ARG YARN_INSTALL_VERSION -RUN if [ -n "$NODE_INSTALL_VERSION" ] ; then /scripts/install-node $NODE_INSTALL_VERSION $YARN_INSTALL_VERSION && node --version && yarn --version; fi +RUN if [ -n "$NODE_INSTALL_VERSION" ] ; then /scripts/install-node "$NODE_INSTALL_VERSION" "$YARN_INSTALL_VERSION" && node --version && yarn --version; fi # Golang ARG INSTALL_GOLANG_VERSION @@ -58,7 +58,7 @@ RUN if [ -n "$LFS_VERSION" ]; then /scripts/install-lfs && git lfs --version; fi # Postgres ARG POSTGRES_VERSION -RUN if [ -n "$POSTGRES_VERSION" ] ; then /scripts/install-postgresql $POSTGRES_VERSION; fi +RUN if [ -n "$POSTGRES_VERSION" ] ; then /scripts/install-postgresql "$POSTGRES_VERSION"; fi # GraphicsMagick ARG GRAPHISMAGICK_VERSION @@ -70,36 +70,36 @@ RUN if [ -n "$GRAPHISMAGICK_VERSION" ]; then /scripts/install-graphicsmagick && # Docker ARG DOCKER_VERSION -RUN if [ -n "$DOCKER_VERSION" ]; then /scripts/install-docker $DOCKER_VERSION; fi +RUN if [ -n "$DOCKER_VERSION" ]; then /scripts/install-docker "$DOCKER_VERSION"; fi # Docker buildx plugin ARG BUILDX_VERSION ARG BUILDX_DOWNLOAD_SHA256 -RUN if [ -n "$BUILDX_VERSION" ]; then /scripts/install-buildx $BUILDX_VERSION $BUILDX_DOWNLOAD_SHA256; fi +RUN if [ -n "$BUILDX_VERSION" ]; then /scripts/install-buildx "$BUILDX_VERSION" "$BUILDX_DOWNLOAD_SHA256"; fi # Bazelisk ARG BAZELISK_VERSION ARG BAZELISK_DOWNLOAD_SHA256 -RUN if [ -n "$BAZELISK_VERSION" ] ; then /scripts/install-bazelisk $BAZELISK_VERSION $BAZELISK_DOWNLOAD_SHA256; fi +RUN if [ -n "$BAZELISK_VERSION" ] ; then /scripts/install-bazelisk "$BAZELISK_VERSION" "$BAZELISK_DOWNLOAD_SHA256"; fi # Google-cloud-sdk ARG GCLOUD_VERSION -RUN if [ -n "$GCLOUD_VERSION" ] ; then /scripts/install-gcloud $GCLOUD_VERSION; fi +RUN if [ -n "$GCLOUD_VERSION" ] ; then /scripts/install-gcloud "$GCLOUD_VERSION"; fi # Kubectl ARG KUBECTL_VERSION ARG KUBECTL_DOWNLOAD_SHA256 -RUN if [ -n "$KUBECTL_VERSION" ] ; then /scripts/install-kubectl $KUBECTL_VERSION $KUBECTL_DOWNLOAD_SHA256; fi +RUN if [ -n "$KUBECTL_VERSION" ] ; then /scripts/install-kubectl "$KUBECTL_VERSION" "$KUBECTL_DOWNLOAD_SHA256"; fi # Helm ARG HELM_VERSION ARG HELM_DOWNLOAD_SHA256 -RUN if [ -n "$HELM_VERSION" ] ; then /scripts/install-helm $HELM_VERSION $HELM_DOWNLOAD_SHA256; fi +RUN if [ -n "$HELM_VERSION" ] ; then /scripts/install-helm "$HELM_VERSION" "$HELM_DOWNLOAD_SHA256"; fi RUN /scripts/generate-locale ENV LANG=C.UTF-8 \ diff --git a/scripts/download-file b/scripts/download-file new file mode 100755 index 0000000..aa32f75 --- /dev/null +++ b/scripts/download-file @@ -0,0 +1,22 @@ +#!/bin/bash + +if [[ $# -lt 3 ]]; then + echo "usage: $0 " 1>&2 + exit 1 +fi + +set -xeou pipefail + +FILE="$1" +URL="$2" +shift 2 + +curl --retry 6 -fsSL "$URL" -o "$FILE" + +for checksum; do + if echo "${checksum} ${FILE}" | sha256sum -c -; then + exit 0 + fi +done + +exit 1 diff --git a/scripts/install-buildx b/scripts/install-buildx index d104b1d..a2be0ec 100755 --- a/scripts/install-buildx +++ b/scripts/install-buildx @@ -6,8 +6,7 @@ BUILDX_VERSION=${1} BUILDX_DOWNLOAD_SHA256=${2} BUILDX_DOWNLOAD_URL="https://github.com/docker/buildx/releases/download/v${BUILDX_VERSION}/buildx-v${BUILDX_VERSION}.linux-${TARGETARCH:-amd64}" -curl -fsSL "${BUILDX_DOWNLOAD_URL}" -o docker-buildx -echo "${BUILDX_DOWNLOAD_SHA256} docker-buildx" | sha256sum -c - +/scripts/download-file docker-buildx "$BUILDX_DOWNLOAD_URL" $BUILDX_DOWNLOAD_SHA256 mkdir -p /usr/local/lib/docker/cli-plugins chmod +x docker-buildx && mv docker-buildx /usr/local/lib/docker/cli-plugins/ diff --git a/scripts/install-chrome b/scripts/install-chrome index 3b0e7e5..efb5f88 100755 --- a/scripts/install-chrome +++ b/scripts/install-chrome @@ -10,7 +10,9 @@ function build_debian() { if [ "${ARCH}" == "amd64" ]; then PKG=google-chrome-stable else - PKG=chromium + # TODO: We do not yet have all packages required for platform other than amd64 + apt install -y chromium chromium-driver + return fi # We hard code the URL rather than using $CI_API_V4_URL $CI_PROJECT_ID, @@ -21,8 +23,7 @@ function build_debian() { echo "Installing browser" curl --silent --show-error --fail -O "$BROWSER_URL" - dpkg -i "./${BROWSER_DEB}" || true - apt-get install -f -y + apt install -y "$PWD/$BROWSER_DEB" rm -f "$BROWSER_DEB" echo "Installing webdriver" @@ -38,8 +39,7 @@ function build_debian() { DRIVER_URL="${DOWNLOAD_URL_BASE}/${CHROME_VERSION}/${DRIVER_DEB}" curl --silent --show-error --fail -O "$DRIVER_URL" - dpkg -i "./${DRIVER_DEB}" || true - apt-get install -f -y + apt install -y "$PWD/$DRIVER_DEB" rm -f "$DRIVER_DEB" fi diff --git a/scripts/install-golang b/scripts/install-golang index 99a0603..5ff82d1 100755 --- a/scripts/install-golang +++ b/scripts/install-golang @@ -8,8 +8,7 @@ GOLANG_DOWNLOAD_SHA256=${2} GOLANG_DOWNLOAD_URL="https://golang.org/dl/go${INSTALL_GOLANG_VERSION}.linux-${TARGETARCH:-amd64}.tar.gz" function build_debian() { - curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz - echo "${GOLANG_DOWNLOAD_SHA256} golang.tar.gz" | sha256sum -c - + /scripts/download-file golang.tar.gz "$GOLANG_DOWNLOAD_URL" $GOLANG_DOWNLOAD_SHA256 tar -C /usr/local -xzf golang.tar.gz rm golang.tar.gz } diff --git a/scripts/install-helm b/scripts/install-helm index 993d65e..09c37cd 100755 --- a/scripts/install-helm +++ b/scripts/install-helm @@ -6,9 +6,7 @@ HELM_VERSION=${1} HELM_DOWNLOAD_SHA256=${2} HELM_DOWNLOAD_URL="https://get.helm.sh/helm-v${HELM_VERSION}-linux-${TARGETARCH:-amd64}.tar.gz" -curl -fsSL "${HELM_DOWNLOAD_URL}" -o helm.tar.gz -echo "${HELM_DOWNLOAD_SHA256} helm.tar.gz" | sha256sum -c - - +/scripts/download-file helm.tar.gz "$HELM_DOWNLOAD_URL" $HELM_DOWNLOAD_SHA256 tar -xzf helm.tar.gz --strip-components=1 rm helm.tar.gz diff --git a/scripts/install-kubectl b/scripts/install-kubectl index beb4856..68bdcf4 100755 --- a/scripts/install-kubectl +++ b/scripts/install-kubectl @@ -6,8 +6,7 @@ KUBECTL_VERSION=${1} KUBECTL_DOWNLOAD_SHA256=${2} KUBECTL_DOWNLOAD_URL="https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/${TARGETARCH:-amd64}/kubectl" -curl -fsSL "${KUBECTL_DOWNLOAD_URL}" -o kubectl -echo "${KUBECTL_DOWNLOAD_SHA256} kubectl" | sha256sum -c - +/scripts/download-file kubectl "$KUBECTL_DOWNLOAD_URL" $KUBECTL_DOWNLOAD_SHA256 chmod +x kubectl mv kubectl /usr/local/bin/kubectl diff --git a/scripts/install-lfs b/scripts/install-lfs index 46e95bc..45ae857 100755 --- a/scripts/install-lfs +++ b/scripts/install-lfs @@ -5,12 +5,9 @@ IFS=$'\n\t' LFS_DOWNLOAD_URL="https://github.com/git-lfs/git-lfs/releases/download/v${LFS_VERSION}/git-lfs-linux-${TARGETARCH:-amd64}-v${LFS_VERSION}.tar.gz" -mkdir build \ - && curl -fsSL "$LFS_DOWNLOAD_URL" -o git-lfs.tar.gz \ - && echo "$LFS_DOWNLOAD_SHA256 git-lfs.tar.gz" | sha256sum -c - \ - && tar -C build -xzf git-lfs.tar.gz \ - && cd build \ - && cp git-lfs /usr/local/bin/ \ - && cd .. \ - && rm -rf build \ - && rm git-lfs.tar.gz +/scripts/download-file git-lfs.tar.gz "$LFS_DOWNLOAD_URL" $LFS_DOWNLOAD_SHA256 + +mkdir build +tar -C build -xzf git-lfs.tar.gz +cp build/git-lfs /usr/local/bin/ +rm -rf build git-lfs.tar.gz diff --git a/scripts/lib/custom-docker-build b/scripts/lib/custom-docker-build index 1266dcf..5e78593 100755 --- a/scripts/lib/custom-docker-build +++ b/scripts/lib/custom-docker-build @@ -5,12 +5,31 @@ IFS=$'\n\t' SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" source "$SCRIPT_DIR/custom-docker.sh" -function get_base_image_reference() { - if [[ $1 =~ ^debian ]]; then - echo "$1" - elif [[ $1 =~ ^ubi:8 ]]; then - echo "registry.access.redhat.com/ubi8/$1" - fi +function fail() { + echo "$@" 1>&2 + exit 1 +} + +function print_image_args() { + declare -A CUSTOM_BASE_IMAGE + declare -A BUILD_OS + + case "$1:$2" in + debian:*) + CUSTOM_BASE_IMAGE="$1:$2" + BUILD_OS=debian + ;; + + ubi:8.*) + CUSTOM_BASE_IMAGE="registry.access.redhat.com/ubi8/ubi:$2" + BUILD_OS=ubi + ;; + + *) fail "Unknown image version $1:$2" ;; + esac + + printf -- "--build-arg CUSTOM_BASE_IMAGE=%s " "$CUSTOM_BASE_IMAGE" + printf -- "--build-arg BUILD_OS=%s " "$BUILD_OS" } function print_golang_args() { @@ -30,13 +49,13 @@ function print_golang_args() { 1.19) INSTALL_GOLANG_VERSION=1.19.2 GOLANG_DOWNLOAD_SHA256[amd64]=5e8c5a74fe6470dd7e055a461acda8bb4050ead8c2df70f227e3ff7d8eb7eeb6 - GOLANG_DOWNLOAD_SHA256[arm64]=62a8d9654436c67c14a0c91e931d50440541f09eb991a987536cb982903126d + GOLANG_DOWNLOAD_SHA256[arm64]=b62a8d9654436c67c14a0c91e931d50440541f09eb991a987536cb982903126d ;; - *) echo "Unknown golang version $1"; exit 1; + *) fail "Unknown golang version $1" ;; esac printf -- "--build-arg INSTALL_GOLANG_VERSION=%s " "$INSTALL_GOLANG_VERSION" - printf -- "--build-arg GOLANG_DOWNLOAD_SHA256=%s " "${GOLANG_DOWNLOAD_SHA256[$TARGETARCH]}" + printf -- "--build-arg GOLANG_DOWNLOAD_SHA256=%q " "${GOLANG_DOWNLOAD_SHA256[*]}" } # If you add a new minor version here, be sure to check that the @@ -54,7 +73,7 @@ function print_chrome_args() { 106|106.0) CHROME_VERSION=106.0.5249.91-1 ;; - *) echo "Unknown chrome version $1"; exit 1; + *) fail "Unknown chrome version $1" ;; esac printf -- "--build-arg CHROME_VERSION=%s " "$CHROME_VERSION" } @@ -70,7 +89,7 @@ function print_git_args() { GIT_VERSION=2.36.1 GIT_DOWNLOAD_SHA256=37d936fd17c81aa9ddd3dba4e56e88a45fa534ad0ba946454e8ce818760c6a2c ;; - *) echo "Unknown git version $1"; exit 1; + *) fail "Unknown git version $1" ;; esac case "$GIT_VERSION" in @@ -95,11 +114,11 @@ function print_lfs_args() { LFS_DOWNLOAD_SHA256[amd64]=2a8e60cf51ec45aa0f4332aa0521d60ec75c76e485d13ebaeea915b9d70ea466 LFS_DOWNLOAD_SHA256[arm64]=ff2f8472a5ac0e808108bad0cc6be5ca1849eb970228b1aa3d627bcbc8228ad9 ;; - *) echo "Unknown Git LFS version $1"; exit 1; + *) fail "Unknown Git LFS version $1" ;; esac printf -- "--build-arg LFS_VERSION=%s " "$LFS_VERSION" - printf -- "--build-arg LFS_DOWNLOAD_SHA256=%s " "${LFS_DOWNLOAD_SHA256[$TARGETARCH]}" + printf -- "--build-arg LFS_DOWNLOAD_SHA256=%q " "${LFS_DOWNLOAD_SHA256[*]}" } function print_node_args() { @@ -107,7 +126,7 @@ function print_node_args() { 14.15) NODE_INSTALL_VERSION=14.15.4 ;; 14|14.16) NODE_INSTALL_VERSION=14.16.0 ;; 16|16.14) NODE_INSTALL_VERSION=16.14.2 ;; - *) echo "Unknown node version $1"; exit 1; + *) fail "Unknown node version $1" ;; esac printf -- "--build-arg NODE_INSTALL_VERSION=%s " "$NODE_INSTALL_VERSION" } @@ -118,7 +137,7 @@ function print_yarn_args() { 1.16) YARN_INSTALL_VERSION=1.16.0 ;; 1.21) YARN_INSTALL_VERSION=1.21.1 ;; 1.22) YARN_INSTALL_VERSION=1.22.17 ;; - *) echo "Unknown yarn version $1"; exit 1; + *) fail "Unknown yarn version $1" ;; esac printf -- "--build-arg YARN_INSTALL_VERSION=%s " "$YARN_INSTALL_VERSION" } @@ -140,11 +159,11 @@ function print_buildx_args() { BUILDX_DOWNLOAD_SHA256[amd64]=c64de4f3c30f7a73ff9db637660c7aa0f00234368105b0a09fa8e24eebe910c3 BUILDX_DOWNLOAD_SHA256[arm64]=304d3d9822c75f98ad9cf57f0c234bcf326bbb96d791d551728cadd72a7a377f ;; - *) echo "Unknown buildx version $1"; exit 1; + *) fail "Unknown buildx version $1" ;; esac printf -- "--build-arg BUILDX_VERSION=%s " "$BUILDX_VERSION" - printf -- "--build-arg BUILDX_DOWNLOAD_SHA256=%s " "${BUILDX_DOWNLOAD_SHA256[$TARGETARCH]}" + printf -- "--build-arg BUILDX_DOWNLOAD_SHA256=%q " "${BUILDX_DOWNLOAD_SHA256[*]}" } function print_graphicsmagick_args() { @@ -165,7 +184,7 @@ function print_graphicsmagick_args() { GRAPHISMAGICK_VERSION=1.3.36 GRAPHISMAGICK_DOWNLOAD_SHA256=1e6723c48c4abbb31197fadf8396b2d579d97e197123edc70a4f057f0533d563 ;; - *) echo "Unknown graphicsmagick version $1"; exit 1; + *) fail "Unknown graphicsmagick version $1" ;; esac printf -- "--build-arg GRAPHISMAGICK_VERSION=%s " "$GRAPHISMAGICK_VERSION" @@ -178,7 +197,7 @@ function print_bazelisk_args() { BAZELISK_VERSION=1.9.0 BAZELISK_DOWNLOAD_SHA256=b8c7f2a1b07ad64a2f27f8f19a202f90d044de7b5b6ccc387a6fe5d4a8ec4937 ;; - *) echo "Unknown bazelisk version $1"; exit 1; + *) fail "Unknown bazelisk version $1" ;; esac printf -- "--build-arg BAZELISK_VERSION=%s " "$BAZELISK_VERSION" @@ -209,7 +228,7 @@ function print_ruby_args() { RUBY_DOWNLOAD_SHA256="70b47c207af04bce9acea262308fb42893d3e244f39a4abc586920a1c723722b" ;; - *) echo "Unknown ruby version $1"; exit 1; + *) fail "Unknown ruby version $1" ;; esac printf -- "--build-arg RUBY_VERSION=%s " "$RUBY_VERSION" @@ -224,7 +243,7 @@ function print_bundler_args() { 2.3) BUNDLER_VERSION=2.3.15 ;; - *) echo "Unknown bundler version $1"; exit 1; + *) fail "Unknown bundler version $1" ;; esac printf -- "--build-arg BUNDLER_VERSION=%s " "$BUNDLER_VERSION" @@ -238,7 +257,7 @@ function print_rubygems_args() { 3.2) RUBYGEMS_VERSION=3.2.33 ;; - *) echo "Unknown rubygems version $1"; exit 1; + *) fail "Unknown rubygems version $1" ;; esac printf -- "--build-arg RUBYGEMS_VERSION=%s " "$RUBYGEMS_VERSION" @@ -249,7 +268,7 @@ function print_gcloud_args() { 383) GCLOUD_VERSION=383.0.1 ;; - *) echo "Unknown gcloud version $1"; exit 1; + *) fail "Unknown gcloud version $1" ;; esac printf -- "--build-arg GCLOUD_VERSION=%s " "$GCLOUD_VERSION" @@ -264,11 +283,11 @@ function print_kubectl_args() { KUBECTL_DOWNLOAD_SHA256[amd64]=2d0f5ba6faa787878b642c151ccb2c3390ce4c1e6c8e2b59568b3869ba407c4f KUBECTL_DOWNLOAD_SHA256[arm64]=1d77d6027fc8dfed772609ad9bd68f611b7e4ce73afa949f27084ad3a92b15fe ;; - *) echo "Unknown kubectl version $1"; exit 1; + *) fail "Unknown kubectl version $1" ;; esac printf -- "--build-arg KUBECTL_VERSION=%s " "$KUBECTL_VERSION" - printf -- "--build-arg KUBECTL_DOWNLOAD_SHA256=%s " "${KUBECTL_DOWNLOAD_SHA256[$TARGETARCH]}" + printf -- "--build-arg KUBECTL_DOWNLOAD_SHA256=%q " "${KUBECTL_DOWNLOAD_SHA256[*]}" } function print_helm_args() { @@ -280,11 +299,11 @@ function print_helm_args() { HELM_DOWNLOAD_SHA256[amd64]=2170a1a644a9e0b863f00c17b761ce33d4323da64fc74562a3a6df2abbf6cd70 HELM_DOWNLOAD_SHA256[arm64]=e1348d94ce4caace43689ee2dfa5f8bcd8687c12053d9c13d79875b65d6b72aa ;; - *) echo "Unknown helm version $1"; exit 1; + *) fail "Unknown helm version $1" ;; esac printf -- "--build-arg HELM_VERSION=%s " "$HELM_VERSION" - printf -- "--build-arg HELM_DOWNLOAD_SHA256=%s " "${HELM_DOWNLOAD_SHA256[$TARGETARCH]}" + printf -- "--build-arg HELM_DOWNLOAD_SHA256=%q " "${HELM_DOWNLOAD_SHA256[*]}" } function parse_arguments() { @@ -307,7 +326,10 @@ function parse_arguments() { if [ -n "${!tool}" ]; then version="${!tool}" case "$tool" in - OS) CUSTOM_BASE_IMAGE=$(get_base_image_reference $version) ;; + # explode debian:version into `print_image_args debian version` + OS) print_image_args ${version%:*} ${version##*:} ;; + DEBIAN) print_image_args debian $version ;; + UBI) print_image_args ubi $version ;; RUBY) print_ruby_args $version ;; BUNDLER) print_bundler_args $version ;; RUBYGEMS) print_rubygems_args $version ;; @@ -325,30 +347,17 @@ function parse_arguments() { GCLOUD) print_gcloud_args $version ;; KUBECTL) print_kubectl_args $version ;; HELM) print_helm_args $version ;; - *) echo "unknown tool $tool"; exit 1;; + *) fail "Unknown tool $tool" ;; esac fi done - CUSTOM_BASE_IMAGE=${CUSTOM_BASE_IMAGE:-"debian:buster"} - BUILD_OS=${OS:-"debian:buster"} - - printf -- "--build-arg CUSTOM_BASE_IMAGE=%s " "$CUSTOM_BASE_IMAGE" - printf -- "--build-arg BUILD_OS=%s " "$BUILD_OS" - printf -- "--platform=linux/%s " "${TARGETARCH}" + printf -- "--platform=%s " "${TARGETARCH}" } -function generate_command() { - printf -- "docker buildx build " - parse_arguments - - for i in "$@" - do - printf -- "%s " "$i" - done - - printf -- "--push=${PUSH_CUSTOM_IMAGE:-false} " - printf -- ".\\n" +function run_command() { + printf "\t%s\n" "$@" + eval "$@" } function build_custom_if_needed() { @@ -357,11 +366,30 @@ function build_custom_if_needed() { full_image_name="$build_image_path:$build_image_tag" echo "Building image $full_image_name" - docker_command=$(generate_command $@ --cache-to=type=inline --cache-from="$full_image_name" -t "$full_image_name") - echo "Docker command:" - printf "\t%s\n" "$docker_command" - eval $docker_command + docker_build_command=$(parse_arguments) + docker_build_command="${docker_build_command} $@" + docker_build_command="${docker_build_command} --cache-from=\"$full_image_name\"" + docker_build_command="${docker_build_command} --tag=\"$full_image_name\"" + + echo "Docker build command:" + + # Prefer using `docker buildx` as it is more flexible, + # or use regular `docker build` if not available on older systems + if docker buildx version &> /dev/null; then + docker_build_command="${docker_build_command} --cache-to=type=inline" + docker_build_command="${docker_build_command} --push=${PUSH_CUSTOM_IMAGE:-false}" + run_command docker buildx build $docker_build_command . + else + docker_build_command="${docker_build_command} --build-arg TARGETARCH=${ARCH}" + run_command docker build $docker_build_command . + if [[ "$PUSH_CUSTOM_IMAGE" == "true" ]]; then + run_command docker push "$full_image_name" + fi + fi printf "\n\nSUCCESS - Successfully built:\n\t%s\n" "$full_image_name" } +# Use DEBIAN by default unless specified otherwise +DEBIAN=${DEBIAN:-bullseye} + build_custom_if_needed $@ diff --git a/scripts/lib/custom-docker.sh b/scripts/lib/custom-docker.sh index 27b437b..498ba67 100644 --- a/scripts/lib/custom-docker.sh +++ b/scripts/lib/custom-docker.sh @@ -1,7 +1,7 @@ # Note: Check out https://wiki.bash-hackers.org/syntax/pe for documentation on # various variable operations used in this script. -PATH_TOOLS=(OS RUBY GOLANG NODE POSTGRESQL) +PATH_TOOLS=(DEBIAN OS UBI RUBY GOLANG NODE POSTGRESQL) TAG_TOOLS=(BUNDLER RUBYGEMS GIT LFS CHROME YARN GRAPHICSMAGICK BAZELISK DOCKER BUILDX GCLOUD KUBECTL HELM) # Generate the docker image path using the components that were specified via