mirror of
https://ops.gitlab.net/gitlab-org/gitlab-build-images.git
synced 2025-12-11 11:02:55 +01:00
Merge branch 'do-not-require-buildx' into 'master'
Build `arm64` images by default and additionally do not require `docker buildx` for simple builds See merge request https://gitlab.com/gitlab-org/gitlab-build-images/-/merge_requests/586 Merged-by: Andrejs Cunskis <acunskis@gitlab.com> Approved-by: Andrejs Cunskis <acunskis@gitlab.com> Approved-by: Stan Hu <stanhu@gmail.com> Co-authored-by: Kamil Trzciński <ayufan@ayufan.eu>
This commit is contained in:
commit
fcf4b14618
12 changed files with 128 additions and 84 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
.install-qemu:
|
.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:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
- high-cpu
|
- high-cpu
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ gitlab:
|
||||||
LFS: '2.9'
|
LFS: '2.9'
|
||||||
YARN: '1.22'
|
YARN: '1.22'
|
||||||
GRAPHICSMAGICK: '1.3.36'
|
GRAPHICSMAGICK: '1.3.36'
|
||||||
|
ARCH: linux/amd64,linux/arm64
|
||||||
parallel:
|
parallel:
|
||||||
matrix:
|
matrix:
|
||||||
- OS: ['debian:bullseye']
|
- OS: ['debian:bullseye']
|
||||||
|
|
@ -28,6 +29,7 @@ gitlab-assets:
|
||||||
LFS: '2.9'
|
LFS: '2.9'
|
||||||
YARN: '1.22'
|
YARN: '1.22'
|
||||||
GRAPHICSMAGICK: '1.3.36'
|
GRAPHICSMAGICK: '1.3.36'
|
||||||
|
ARCH: amd64,arm64
|
||||||
parallel:
|
parallel:
|
||||||
matrix:
|
matrix:
|
||||||
- OS: ['debian:bullseye']
|
- OS: ['debian:bullseye']
|
||||||
|
|
|
||||||
|
|
@ -35,13 +35,13 @@ RUN if [ -n "$GIT_VERSION" ]; then /scripts/install-git && git --version; fi
|
||||||
# Chrome
|
# Chrome
|
||||||
ARG CHROME_VERSION
|
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
|
# NodeJS and Yarn
|
||||||
ARG NODE_INSTALL_VERSION
|
ARG NODE_INSTALL_VERSION
|
||||||
ARG YARN_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
|
# Golang
|
||||||
ARG INSTALL_GOLANG_VERSION
|
ARG INSTALL_GOLANG_VERSION
|
||||||
|
|
@ -58,7 +58,7 @@ RUN if [ -n "$LFS_VERSION" ]; then /scripts/install-lfs && git lfs --version; fi
|
||||||
# Postgres
|
# Postgres
|
||||||
ARG POSTGRES_VERSION
|
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
|
# GraphicsMagick
|
||||||
ARG GRAPHISMAGICK_VERSION
|
ARG GRAPHISMAGICK_VERSION
|
||||||
|
|
@ -70,36 +70,36 @@ RUN if [ -n "$GRAPHISMAGICK_VERSION" ]; then /scripts/install-graphicsmagick &&
|
||||||
# Docker
|
# Docker
|
||||||
ARG DOCKER_VERSION
|
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
|
# Docker buildx plugin
|
||||||
ARG BUILDX_VERSION
|
ARG BUILDX_VERSION
|
||||||
ARG BUILDX_DOWNLOAD_SHA256
|
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
|
# Bazelisk
|
||||||
ARG BAZELISK_VERSION
|
ARG BAZELISK_VERSION
|
||||||
ARG BAZELISK_DOWNLOAD_SHA256
|
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
|
# Google-cloud-sdk
|
||||||
ARG GCLOUD_VERSION
|
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
|
# Kubectl
|
||||||
ARG KUBECTL_VERSION
|
ARG KUBECTL_VERSION
|
||||||
ARG KUBECTL_DOWNLOAD_SHA256
|
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
|
# Helm
|
||||||
ARG HELM_VERSION
|
ARG HELM_VERSION
|
||||||
ARG HELM_DOWNLOAD_SHA256
|
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
|
RUN /scripts/generate-locale
|
||||||
ENV LANG=C.UTF-8 \
|
ENV LANG=C.UTF-8 \
|
||||||
|
|
|
||||||
22
scripts/download-file
Executable file
22
scripts/download-file
Executable file
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [[ $# -lt 3 ]]; then
|
||||||
|
echo "usage: $0 <file> <url> <checksum(s)...>" 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
|
||||||
|
|
@ -6,8 +6,7 @@ BUILDX_VERSION=${1}
|
||||||
BUILDX_DOWNLOAD_SHA256=${2}
|
BUILDX_DOWNLOAD_SHA256=${2}
|
||||||
BUILDX_DOWNLOAD_URL="https://github.com/docker/buildx/releases/download/v${BUILDX_VERSION}/buildx-v${BUILDX_VERSION}.linux-${TARGETARCH:-amd64}"
|
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
|
/scripts/download-file docker-buildx "$BUILDX_DOWNLOAD_URL" $BUILDX_DOWNLOAD_SHA256
|
||||||
echo "${BUILDX_DOWNLOAD_SHA256} docker-buildx" | sha256sum -c -
|
|
||||||
|
|
||||||
mkdir -p /usr/local/lib/docker/cli-plugins
|
mkdir -p /usr/local/lib/docker/cli-plugins
|
||||||
chmod +x docker-buildx && mv docker-buildx /usr/local/lib/docker/cli-plugins/
|
chmod +x docker-buildx && mv docker-buildx /usr/local/lib/docker/cli-plugins/
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,9 @@ function build_debian() {
|
||||||
if [ "${ARCH}" == "amd64" ]; then
|
if [ "${ARCH}" == "amd64" ]; then
|
||||||
PKG=google-chrome-stable
|
PKG=google-chrome-stable
|
||||||
else
|
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
|
fi
|
||||||
|
|
||||||
# We hard code the URL rather than using $CI_API_V4_URL $CI_PROJECT_ID,
|
# 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"
|
echo "Installing browser"
|
||||||
curl --silent --show-error --fail -O "$BROWSER_URL"
|
curl --silent --show-error --fail -O "$BROWSER_URL"
|
||||||
dpkg -i "./${BROWSER_DEB}" || true
|
apt install -y "$PWD/$BROWSER_DEB"
|
||||||
apt-get install -f -y
|
|
||||||
rm -f "$BROWSER_DEB"
|
rm -f "$BROWSER_DEB"
|
||||||
|
|
||||||
echo "Installing webdriver"
|
echo "Installing webdriver"
|
||||||
|
|
@ -38,8 +39,7 @@ function build_debian() {
|
||||||
DRIVER_URL="${DOWNLOAD_URL_BASE}/${CHROME_VERSION}/${DRIVER_DEB}"
|
DRIVER_URL="${DOWNLOAD_URL_BASE}/${CHROME_VERSION}/${DRIVER_DEB}"
|
||||||
|
|
||||||
curl --silent --show-error --fail -O "$DRIVER_URL"
|
curl --silent --show-error --fail -O "$DRIVER_URL"
|
||||||
dpkg -i "./${DRIVER_DEB}" || true
|
apt install -y "$PWD/$DRIVER_DEB"
|
||||||
apt-get install -f -y
|
|
||||||
rm -f "$DRIVER_DEB"
|
rm -f "$DRIVER_DEB"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,7 @@ GOLANG_DOWNLOAD_SHA256=${2}
|
||||||
GOLANG_DOWNLOAD_URL="https://golang.org/dl/go${INSTALL_GOLANG_VERSION}.linux-${TARGETARCH:-amd64}.tar.gz"
|
GOLANG_DOWNLOAD_URL="https://golang.org/dl/go${INSTALL_GOLANG_VERSION}.linux-${TARGETARCH:-amd64}.tar.gz"
|
||||||
|
|
||||||
function build_debian() {
|
function build_debian() {
|
||||||
curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz
|
/scripts/download-file golang.tar.gz "$GOLANG_DOWNLOAD_URL" $GOLANG_DOWNLOAD_SHA256
|
||||||
echo "${GOLANG_DOWNLOAD_SHA256} golang.tar.gz" | sha256sum -c -
|
|
||||||
tar -C /usr/local -xzf golang.tar.gz
|
tar -C /usr/local -xzf golang.tar.gz
|
||||||
rm golang.tar.gz
|
rm golang.tar.gz
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,7 @@ HELM_VERSION=${1}
|
||||||
HELM_DOWNLOAD_SHA256=${2}
|
HELM_DOWNLOAD_SHA256=${2}
|
||||||
HELM_DOWNLOAD_URL="https://get.helm.sh/helm-v${HELM_VERSION}-linux-${TARGETARCH:-amd64}.tar.gz"
|
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
|
/scripts/download-file helm.tar.gz "$HELM_DOWNLOAD_URL" $HELM_DOWNLOAD_SHA256
|
||||||
echo "${HELM_DOWNLOAD_SHA256} helm.tar.gz" | sha256sum -c -
|
|
||||||
|
|
||||||
|
|
||||||
tar -xzf helm.tar.gz --strip-components=1
|
tar -xzf helm.tar.gz --strip-components=1
|
||||||
rm helm.tar.gz
|
rm helm.tar.gz
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,7 @@ KUBECTL_VERSION=${1}
|
||||||
KUBECTL_DOWNLOAD_SHA256=${2}
|
KUBECTL_DOWNLOAD_SHA256=${2}
|
||||||
KUBECTL_DOWNLOAD_URL="https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/${TARGETARCH:-amd64}/kubectl"
|
KUBECTL_DOWNLOAD_URL="https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/${TARGETARCH:-amd64}/kubectl"
|
||||||
|
|
||||||
curl -fsSL "${KUBECTL_DOWNLOAD_URL}" -o kubectl
|
/scripts/download-file kubectl "$KUBECTL_DOWNLOAD_URL" $KUBECTL_DOWNLOAD_SHA256
|
||||||
echo "${KUBECTL_DOWNLOAD_SHA256} kubectl" | sha256sum -c -
|
|
||||||
|
|
||||||
chmod +x kubectl
|
chmod +x kubectl
|
||||||
mv kubectl /usr/local/bin/kubectl
|
mv kubectl /usr/local/bin/kubectl
|
||||||
|
|
|
||||||
|
|
@ -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"
|
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 \
|
/scripts/download-file git-lfs.tar.gz "$LFS_DOWNLOAD_URL" $LFS_DOWNLOAD_SHA256
|
||||||
&& curl -fsSL "$LFS_DOWNLOAD_URL" -o git-lfs.tar.gz \
|
|
||||||
&& echo "$LFS_DOWNLOAD_SHA256 git-lfs.tar.gz" | sha256sum -c - \
|
mkdir build
|
||||||
&& tar -C build -xzf git-lfs.tar.gz \
|
tar -C build -xzf git-lfs.tar.gz
|
||||||
&& cd build \
|
cp build/git-lfs /usr/local/bin/
|
||||||
&& cp git-lfs /usr/local/bin/ \
|
rm -rf build git-lfs.tar.gz
|
||||||
&& cd .. \
|
|
||||||
&& rm -rf build \
|
|
||||||
&& rm git-lfs.tar.gz
|
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,31 @@ IFS=$'\n\t'
|
||||||
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||||||
source "$SCRIPT_DIR/custom-docker.sh"
|
source "$SCRIPT_DIR/custom-docker.sh"
|
||||||
|
|
||||||
function get_base_image_reference() {
|
function fail() {
|
||||||
if [[ $1 =~ ^debian ]]; then
|
echo "$@" 1>&2
|
||||||
echo "$1"
|
exit 1
|
||||||
elif [[ $1 =~ ^ubi:8 ]]; then
|
}
|
||||||
echo "registry.access.redhat.com/ubi8/$1"
|
|
||||||
fi
|
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() {
|
function print_golang_args() {
|
||||||
|
|
@ -30,13 +49,13 @@ function print_golang_args() {
|
||||||
1.19)
|
1.19)
|
||||||
INSTALL_GOLANG_VERSION=1.19.2
|
INSTALL_GOLANG_VERSION=1.19.2
|
||||||
GOLANG_DOWNLOAD_SHA256[amd64]=5e8c5a74fe6470dd7e055a461acda8bb4050ead8c2df70f227e3ff7d8eb7eeb6
|
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
|
esac
|
||||||
|
|
||||||
printf -- "--build-arg INSTALL_GOLANG_VERSION=%s " "$INSTALL_GOLANG_VERSION"
|
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
|
# 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)
|
106|106.0)
|
||||||
CHROME_VERSION=106.0.5249.91-1
|
CHROME_VERSION=106.0.5249.91-1
|
||||||
;;
|
;;
|
||||||
*) echo "Unknown chrome version $1"; exit 1;
|
*) fail "Unknown chrome version $1" ;;
|
||||||
esac
|
esac
|
||||||
printf -- "--build-arg CHROME_VERSION=%s " "$CHROME_VERSION"
|
printf -- "--build-arg CHROME_VERSION=%s " "$CHROME_VERSION"
|
||||||
}
|
}
|
||||||
|
|
@ -70,7 +89,7 @@ function print_git_args() {
|
||||||
GIT_VERSION=2.36.1
|
GIT_VERSION=2.36.1
|
||||||
GIT_DOWNLOAD_SHA256=37d936fd17c81aa9ddd3dba4e56e88a45fa534ad0ba946454e8ce818760c6a2c
|
GIT_DOWNLOAD_SHA256=37d936fd17c81aa9ddd3dba4e56e88a45fa534ad0ba946454e8ce818760c6a2c
|
||||||
;;
|
;;
|
||||||
*) echo "Unknown git version $1"; exit 1;
|
*) fail "Unknown git version $1" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
case "$GIT_VERSION" in
|
case "$GIT_VERSION" in
|
||||||
|
|
@ -95,11 +114,11 @@ function print_lfs_args() {
|
||||||
LFS_DOWNLOAD_SHA256[amd64]=2a8e60cf51ec45aa0f4332aa0521d60ec75c76e485d13ebaeea915b9d70ea466
|
LFS_DOWNLOAD_SHA256[amd64]=2a8e60cf51ec45aa0f4332aa0521d60ec75c76e485d13ebaeea915b9d70ea466
|
||||||
LFS_DOWNLOAD_SHA256[arm64]=ff2f8472a5ac0e808108bad0cc6be5ca1849eb970228b1aa3d627bcbc8228ad9
|
LFS_DOWNLOAD_SHA256[arm64]=ff2f8472a5ac0e808108bad0cc6be5ca1849eb970228b1aa3d627bcbc8228ad9
|
||||||
;;
|
;;
|
||||||
*) echo "Unknown Git LFS version $1"; exit 1;
|
*) fail "Unknown Git LFS version $1" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
printf -- "--build-arg LFS_VERSION=%s " "$LFS_VERSION"
|
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() {
|
function print_node_args() {
|
||||||
|
|
@ -107,7 +126,7 @@ function print_node_args() {
|
||||||
14.15) NODE_INSTALL_VERSION=14.15.4 ;;
|
14.15) NODE_INSTALL_VERSION=14.15.4 ;;
|
||||||
14|14.16) NODE_INSTALL_VERSION=14.16.0 ;;
|
14|14.16) NODE_INSTALL_VERSION=14.16.0 ;;
|
||||||
16|16.14) NODE_INSTALL_VERSION=16.14.2 ;;
|
16|16.14) NODE_INSTALL_VERSION=16.14.2 ;;
|
||||||
*) echo "Unknown node version $1"; exit 1;
|
*) fail "Unknown node version $1" ;;
|
||||||
esac
|
esac
|
||||||
printf -- "--build-arg NODE_INSTALL_VERSION=%s " "$NODE_INSTALL_VERSION"
|
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.16) YARN_INSTALL_VERSION=1.16.0 ;;
|
||||||
1.21) YARN_INSTALL_VERSION=1.21.1 ;;
|
1.21) YARN_INSTALL_VERSION=1.21.1 ;;
|
||||||
1.22) YARN_INSTALL_VERSION=1.22.17 ;;
|
1.22) YARN_INSTALL_VERSION=1.22.17 ;;
|
||||||
*) echo "Unknown yarn version $1"; exit 1;
|
*) fail "Unknown yarn version $1" ;;
|
||||||
esac
|
esac
|
||||||
printf -- "--build-arg YARN_INSTALL_VERSION=%s " "$YARN_INSTALL_VERSION"
|
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[amd64]=c64de4f3c30f7a73ff9db637660c7aa0f00234368105b0a09fa8e24eebe910c3
|
||||||
BUILDX_DOWNLOAD_SHA256[arm64]=304d3d9822c75f98ad9cf57f0c234bcf326bbb96d791d551728cadd72a7a377f
|
BUILDX_DOWNLOAD_SHA256[arm64]=304d3d9822c75f98ad9cf57f0c234bcf326bbb96d791d551728cadd72a7a377f
|
||||||
;;
|
;;
|
||||||
*) echo "Unknown buildx version $1"; exit 1;
|
*) fail "Unknown buildx version $1" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
printf -- "--build-arg BUILDX_VERSION=%s " "$BUILDX_VERSION"
|
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() {
|
function print_graphicsmagick_args() {
|
||||||
|
|
@ -165,7 +184,7 @@ function print_graphicsmagick_args() {
|
||||||
GRAPHISMAGICK_VERSION=1.3.36
|
GRAPHISMAGICK_VERSION=1.3.36
|
||||||
GRAPHISMAGICK_DOWNLOAD_SHA256=1e6723c48c4abbb31197fadf8396b2d579d97e197123edc70a4f057f0533d563
|
GRAPHISMAGICK_DOWNLOAD_SHA256=1e6723c48c4abbb31197fadf8396b2d579d97e197123edc70a4f057f0533d563
|
||||||
;;
|
;;
|
||||||
*) echo "Unknown graphicsmagick version $1"; exit 1;
|
*) fail "Unknown graphicsmagick version $1" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
printf -- "--build-arg GRAPHISMAGICK_VERSION=%s " "$GRAPHISMAGICK_VERSION"
|
printf -- "--build-arg GRAPHISMAGICK_VERSION=%s " "$GRAPHISMAGICK_VERSION"
|
||||||
|
|
@ -178,7 +197,7 @@ function print_bazelisk_args() {
|
||||||
BAZELISK_VERSION=1.9.0
|
BAZELISK_VERSION=1.9.0
|
||||||
BAZELISK_DOWNLOAD_SHA256=b8c7f2a1b07ad64a2f27f8f19a202f90d044de7b5b6ccc387a6fe5d4a8ec4937
|
BAZELISK_DOWNLOAD_SHA256=b8c7f2a1b07ad64a2f27f8f19a202f90d044de7b5b6ccc387a6fe5d4a8ec4937
|
||||||
;;
|
;;
|
||||||
*) echo "Unknown bazelisk version $1"; exit 1;
|
*) fail "Unknown bazelisk version $1" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
printf -- "--build-arg BAZELISK_VERSION=%s " "$BAZELISK_VERSION"
|
printf -- "--build-arg BAZELISK_VERSION=%s " "$BAZELISK_VERSION"
|
||||||
|
|
@ -209,7 +228,7 @@ function print_ruby_args() {
|
||||||
RUBY_DOWNLOAD_SHA256="70b47c207af04bce9acea262308fb42893d3e244f39a4abc586920a1c723722b"
|
RUBY_DOWNLOAD_SHA256="70b47c207af04bce9acea262308fb42893d3e244f39a4abc586920a1c723722b"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*) echo "Unknown ruby version $1"; exit 1;
|
*) fail "Unknown ruby version $1" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
printf -- "--build-arg RUBY_VERSION=%s " "$RUBY_VERSION"
|
printf -- "--build-arg RUBY_VERSION=%s " "$RUBY_VERSION"
|
||||||
|
|
@ -224,7 +243,7 @@ function print_bundler_args() {
|
||||||
2.3)
|
2.3)
|
||||||
BUNDLER_VERSION=2.3.15
|
BUNDLER_VERSION=2.3.15
|
||||||
;;
|
;;
|
||||||
*) echo "Unknown bundler version $1"; exit 1;
|
*) fail "Unknown bundler version $1" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
printf -- "--build-arg BUNDLER_VERSION=%s " "$BUNDLER_VERSION"
|
printf -- "--build-arg BUNDLER_VERSION=%s " "$BUNDLER_VERSION"
|
||||||
|
|
@ -238,7 +257,7 @@ function print_rubygems_args() {
|
||||||
3.2)
|
3.2)
|
||||||
RUBYGEMS_VERSION=3.2.33
|
RUBYGEMS_VERSION=3.2.33
|
||||||
;;
|
;;
|
||||||
*) echo "Unknown rubygems version $1"; exit 1;
|
*) fail "Unknown rubygems version $1" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
printf -- "--build-arg RUBYGEMS_VERSION=%s " "$RUBYGEMS_VERSION"
|
printf -- "--build-arg RUBYGEMS_VERSION=%s " "$RUBYGEMS_VERSION"
|
||||||
|
|
@ -249,7 +268,7 @@ function print_gcloud_args() {
|
||||||
383)
|
383)
|
||||||
GCLOUD_VERSION=383.0.1
|
GCLOUD_VERSION=383.0.1
|
||||||
;;
|
;;
|
||||||
*) echo "Unknown gcloud version $1"; exit 1;
|
*) fail "Unknown gcloud version $1" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
printf -- "--build-arg GCLOUD_VERSION=%s " "$GCLOUD_VERSION"
|
printf -- "--build-arg GCLOUD_VERSION=%s " "$GCLOUD_VERSION"
|
||||||
|
|
@ -264,11 +283,11 @@ function print_kubectl_args() {
|
||||||
KUBECTL_DOWNLOAD_SHA256[amd64]=2d0f5ba6faa787878b642c151ccb2c3390ce4c1e6c8e2b59568b3869ba407c4f
|
KUBECTL_DOWNLOAD_SHA256[amd64]=2d0f5ba6faa787878b642c151ccb2c3390ce4c1e6c8e2b59568b3869ba407c4f
|
||||||
KUBECTL_DOWNLOAD_SHA256[arm64]=1d77d6027fc8dfed772609ad9bd68f611b7e4ce73afa949f27084ad3a92b15fe
|
KUBECTL_DOWNLOAD_SHA256[arm64]=1d77d6027fc8dfed772609ad9bd68f611b7e4ce73afa949f27084ad3a92b15fe
|
||||||
;;
|
;;
|
||||||
*) echo "Unknown kubectl version $1"; exit 1;
|
*) fail "Unknown kubectl version $1" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
printf -- "--build-arg KUBECTL_VERSION=%s " "$KUBECTL_VERSION"
|
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() {
|
function print_helm_args() {
|
||||||
|
|
@ -280,11 +299,11 @@ function print_helm_args() {
|
||||||
HELM_DOWNLOAD_SHA256[amd64]=2170a1a644a9e0b863f00c17b761ce33d4323da64fc74562a3a6df2abbf6cd70
|
HELM_DOWNLOAD_SHA256[amd64]=2170a1a644a9e0b863f00c17b761ce33d4323da64fc74562a3a6df2abbf6cd70
|
||||||
HELM_DOWNLOAD_SHA256[arm64]=e1348d94ce4caace43689ee2dfa5f8bcd8687c12053d9c13d79875b65d6b72aa
|
HELM_DOWNLOAD_SHA256[arm64]=e1348d94ce4caace43689ee2dfa5f8bcd8687c12053d9c13d79875b65d6b72aa
|
||||||
;;
|
;;
|
||||||
*) echo "Unknown helm version $1"; exit 1;
|
*) fail "Unknown helm version $1" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
printf -- "--build-arg HELM_VERSION=%s " "$HELM_VERSION"
|
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() {
|
function parse_arguments() {
|
||||||
|
|
@ -307,7 +326,10 @@ function parse_arguments() {
|
||||||
if [ -n "${!tool}" ]; then
|
if [ -n "${!tool}" ]; then
|
||||||
version="${!tool}"
|
version="${!tool}"
|
||||||
case "$tool" in
|
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 ;;
|
RUBY) print_ruby_args $version ;;
|
||||||
BUNDLER) print_bundler_args $version ;;
|
BUNDLER) print_bundler_args $version ;;
|
||||||
RUBYGEMS) print_rubygems_args $version ;;
|
RUBYGEMS) print_rubygems_args $version ;;
|
||||||
|
|
@ -325,30 +347,17 @@ function parse_arguments() {
|
||||||
GCLOUD) print_gcloud_args $version ;;
|
GCLOUD) print_gcloud_args $version ;;
|
||||||
KUBECTL) print_kubectl_args $version ;;
|
KUBECTL) print_kubectl_args $version ;;
|
||||||
HELM) print_helm_args $version ;;
|
HELM) print_helm_args $version ;;
|
||||||
*) echo "unknown tool $tool"; exit 1;;
|
*) fail "Unknown tool $tool" ;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
CUSTOM_BASE_IMAGE=${CUSTOM_BASE_IMAGE:-"debian:buster"}
|
printf -- "--platform=%s " "${TARGETARCH}"
|
||||||
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}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function generate_command() {
|
function run_command() {
|
||||||
printf -- "docker buildx build "
|
printf "\t%s\n" "$@"
|
||||||
parse_arguments
|
eval "$@"
|
||||||
|
|
||||||
for i in "$@"
|
|
||||||
do
|
|
||||||
printf -- "%s " "$i"
|
|
||||||
done
|
|
||||||
|
|
||||||
printf -- "--push=${PUSH_CUSTOM_IMAGE:-false} "
|
|
||||||
printf -- ".\\n"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function build_custom_if_needed() {
|
function build_custom_if_needed() {
|
||||||
|
|
@ -357,11 +366,30 @@ function build_custom_if_needed() {
|
||||||
full_image_name="$build_image_path:$build_image_tag"
|
full_image_name="$build_image_path:$build_image_tag"
|
||||||
echo "Building image $full_image_name"
|
echo "Building image $full_image_name"
|
||||||
|
|
||||||
docker_command=$(generate_command $@ --cache-to=type=inline --cache-from="$full_image_name" -t "$full_image_name")
|
docker_build_command=$(parse_arguments)
|
||||||
echo "Docker command:"
|
docker_build_command="${docker_build_command} $@"
|
||||||
printf "\t%s\n" "$docker_command"
|
docker_build_command="${docker_build_command} --cache-from=\"$full_image_name\""
|
||||||
eval $docker_command
|
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"
|
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 $@
|
build_custom_if_needed $@
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
# Note: Check out https://wiki.bash-hackers.org/syntax/pe for documentation on
|
# Note: Check out https://wiki.bash-hackers.org/syntax/pe for documentation on
|
||||||
# various variable operations used in this script.
|
# 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)
|
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
|
# Generate the docker image path using the components that were specified via
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue