mirror of
https://ops.gitlab.net/gitlab-org/gitlab-build-images.git
synced 2025-12-11 02:52:56 +01:00
bullseye is the latest stable, and this is what we will be using for Cloud Native GitLab going forward so we should test with this. Since an upgrade of the operating system may break pre-compiled C extensions, we now introduce a DEBIAN environment flag that defaults to the legacy buster install but allows us to roll out a bullseye image with `debian-bullseye` as the image name prefix.
300 lines
10 KiB
Bash
Executable file
300 lines
10 KiB
Bash
Executable file
#!/bin/bash
|
|
set -e
|
|
IFS=$'\n\t'
|
|
|
|
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
|
source "$SCRIPT_DIR/lib/custom-docker.sh"
|
|
|
|
function print_golang_args() {
|
|
case "$1" in
|
|
1.14)
|
|
INSTALL_GOLANG_VERSION=1.14.15
|
|
GOLANG_DOWNLOAD_SHA256=c64a57b374a81f7cf1408d2c410a28c6f142414f1ffa9d1062de1d653b0ae0d6
|
|
;;
|
|
1.15)
|
|
INSTALL_GOLANG_VERSION=1.15.10
|
|
GOLANG_DOWNLOAD_SHA256=4aa1267517df32f2bf1cc3d55dfc27d0c6b2c2b0989449c96dd19273ccca051d
|
|
;;
|
|
1.16)
|
|
INSTALL_GOLANG_VERSION=1.16.12
|
|
GOLANG_DOWNLOAD_SHA256=7d657e86493ac1d5892f340a7d88b862b12edb5ac6e73c099e8e0668a6c916b7
|
|
;;
|
|
1.17)
|
|
INSTALL_GOLANG_VERSION=1.17.6
|
|
GOLANG_DOWNLOAD_SHA256=231654bbf2dab3d86c1619ce799e77b03d96f9b50770297c8f4dff8836fc8ca2
|
|
;;
|
|
*) echo "Unknown golang version $1"; exit 1;
|
|
esac
|
|
|
|
printf -- "--build-arg INSTALL_GOLANG_VERSION=%s " "$INSTALL_GOLANG_VERSION"
|
|
printf -- "--build-arg GOLANG_DOWNLOAD_SHA256=%s " "$GOLANG_DOWNLOAD_SHA256"
|
|
}
|
|
|
|
# If you add a new minor version here, be sure to check that the
|
|
# Chrome versions can be found at https://www.ubuntuupdates.org/pm/google-chrome-stable.
|
|
# ChromeDriver supports this: https://sites.google.com/a/chromium.org/chromedriver/downloads.
|
|
# You may need to bump the version in scripts/install-chrome.
|
|
function print_chrome_args() {
|
|
case "$1" in
|
|
69|69.0)
|
|
CHROME_VERSION=69.0.3497.81-1
|
|
CHROME_DRIVER_VERSION=2.41
|
|
;;
|
|
71|71.0)
|
|
CHROME_VERSION=71.0.3578.98-1
|
|
CHROME_DRIVER_VERSION=2.45
|
|
;;
|
|
73|73.0)
|
|
CHROME_VERSION=73.0.3683.103-1
|
|
CHROME_DRIVER_VERSION=73.0.3683.68
|
|
;;
|
|
74|74.0)
|
|
CHROME_VERSION=74.0.3729.169-1
|
|
CHROME_DRIVER_VERSION=74.0.3729.6
|
|
;;
|
|
81|81.0)
|
|
CHROME_VERSION=81.0.4044.129-1
|
|
CHROME_DRIVER_VERSION=81.0.4044.69
|
|
;;
|
|
83|83.0)
|
|
CHROME_VERSION=83.0.4103.61-1
|
|
CHROME_DRIVER_VERSION=83.0.4103.39
|
|
;;
|
|
84|84.0)
|
|
CHROME_VERSION=84.0.4147.89-1
|
|
CHROME_DRIVER_VERSION=84.0.4147.30
|
|
;;
|
|
85|85.0)
|
|
CHROME_VERSION=85.0.4183.83-1
|
|
CHROME_DRIVER_VERSION=85.0.4183.87
|
|
;;
|
|
87|87.0)
|
|
CHROME_VERSION=87.0.4280.88-1
|
|
CHROME_DRIVER_VERSION=87.0.4280.88
|
|
;;
|
|
89|89.0)
|
|
CHROME_VERSION=89.0.4389.90-1
|
|
CHROME_DRIVER_VERSION=89.0.4389.23
|
|
;;
|
|
*) echo "Unknown chrome version $1"; exit 1;
|
|
esac
|
|
printf -- "--build-arg CHROME_VERSION=%s " "$CHROME_VERSION"
|
|
printf -- "--build-arg CHROME_DRIVER_VERSION=%s " "$CHROME_DRIVER_VERSION"
|
|
}
|
|
|
|
# see https://www.kernel.org/pub/software/scm/git
|
|
function print_git_args() {
|
|
case "$1" in
|
|
2.29)
|
|
GIT_VERSION=2.29.0
|
|
GIT_DOWNLOAD_SHA256=fa08dc8424ef80c0f9bf307877f9e2e49f1a6049e873530d6747c2be770742ff
|
|
;;
|
|
2.31)
|
|
GIT_VERSION=2.31.1
|
|
GIT_DOWNLOAD_SHA256=46d37c229e9d786510e0c53b60065704ce92d5aedc16f2c5111e3ed35093bfa7
|
|
;;
|
|
2.33)
|
|
GIT_VERSION=2.33.1
|
|
GIT_DOWNLOAD_SHA256=02047f8dc8934d57ff5e02aadd8a2fe8e0bcf94a7158da375e48086cc46fce1d
|
|
;;
|
|
|
|
*) echo "Unknown git version $1"; exit 1;
|
|
esac
|
|
|
|
case "$GIT_VERSION" in
|
|
*.rc[0-9])
|
|
GIT_DOWNLOAD_URL=https://www.kernel.org/pub/software/scm/git/testing/git-${GIT_VERSION}.tar.gz;;
|
|
*)
|
|
GIT_DOWNLOAD_URL=https://www.kernel.org/pub/software/scm/git/git-${GIT_VERSION}.tar.gz;;
|
|
esac
|
|
|
|
printf -- "--build-arg GIT_VERSION=%s " "$GIT_VERSION"
|
|
printf -- "--build-arg GIT_DOWNLOAD_SHA256=%s " "$GIT_DOWNLOAD_SHA256"
|
|
printf -- "--build-arg GIT_DOWNLOAD_URL=%s " "$GIT_DOWNLOAD_URL"
|
|
}
|
|
|
|
# see https://github.com/git-lfs/git-lfs/releases
|
|
function print_lfs_args() {
|
|
case "$1" in
|
|
2.9)
|
|
LFS_VERSION=2.9.1
|
|
LFS_DOWNLOAD_SHA256=2a8e60cf51ec45aa0f4332aa0521d60ec75c76e485d13ebaeea915b9d70ea466
|
|
;;
|
|
*) echo "Unknown Git LFS version $1"; exit 1;
|
|
esac
|
|
|
|
printf -- "--build-arg LFS_VERSION=%s " "$LFS_VERSION"
|
|
printf -- "--build-arg LFS_DOWNLOAD_SHA256=%s " "$LFS_DOWNLOAD_SHA256"
|
|
}
|
|
|
|
function print_node_args() {
|
|
case "$1" in
|
|
12.22) NODE_INSTALL_VERSION=12.22.1 ;;
|
|
14.15) NODE_INSTALL_VERSION=14.15.4 ;;
|
|
14|14.16) NODE_INSTALL_VERSION=14.16.0 ;;
|
|
*) echo "Unknown node version $1"; exit 1;
|
|
esac
|
|
printf -- "--build-arg NODE_INSTALL_VERSION=%s " "$NODE_INSTALL_VERSION"
|
|
}
|
|
|
|
function print_yarn_args() {
|
|
case "$1" in
|
|
1.12) YARN_INSTALL_VERSION=1.12.3 ;;
|
|
1.16) YARN_INSTALL_VERSION=1.16.0 ;;
|
|
1.21) YARN_INSTALL_VERSION=1.21.1 ;;
|
|
1.22) YARN_INSTALL_VERSION=1.22.10 ;;
|
|
*) echo "Unknown yarn version $1"; exit 1;
|
|
esac
|
|
printf -- "--build-arg YARN_INSTALL_VERSION=%s " "$YARN_INSTALL_VERSION"
|
|
}
|
|
|
|
function print_postgres_args() {
|
|
printf -- "--build-arg POSTGRES_VERSION=%s " "$1"
|
|
}
|
|
|
|
function print_docker_args() {
|
|
printf -- "--build-arg DOCKER_VERSION=%s " "$1"
|
|
}
|
|
|
|
function print_graphicsmagick_args() {
|
|
case "$1" in
|
|
1.3.29)
|
|
GRAPHISMAGICK_VERSION=1.3.29
|
|
GRAPHISMAGICK_DOWNLOAD_SHA256=de820cd10597205941a7e9d02c2e679231e92e8e769c204ef09034d2279ad453
|
|
;;
|
|
1.3.33)
|
|
GRAPHISMAGICK_VERSION=1.3.33
|
|
GRAPHISMAGICK_DOWNLOAD_SHA256=00ea0df7c78c903cce325f402429bcd3924168cf39277f743a0641d47c411ee8
|
|
;;
|
|
1.3.34)
|
|
GRAPHISMAGICK_VERSION=1.3.34
|
|
GRAPHISMAGICK_DOWNLOAD_SHA256=4717f7a32d964c515d83706fd52d34e089c2ffa35f8fbf43c923ce19343cf2f4
|
|
;;
|
|
1.3.36)
|
|
GRAPHISMAGICK_VERSION=1.3.36
|
|
GRAPHISMAGICK_DOWNLOAD_SHA256=1e6723c48c4abbb31197fadf8396b2d579d97e197123edc70a4f057f0533d563
|
|
;;
|
|
*) echo "Unknown graphicsmagick version $1"; exit 1;
|
|
esac
|
|
|
|
printf -- "--build-arg GRAPHISMAGICK_VERSION=%s " "$GRAPHISMAGICK_VERSION"
|
|
printf -- "--build-arg GRAPHISMAGICK_DOWNLOAD_SHA256=%s " "$GRAPHISMAGICK_DOWNLOAD_SHA256"
|
|
}
|
|
|
|
function print_pgbouncer_args() {
|
|
case "$1" in
|
|
1.14)
|
|
PGBOUNCER_VERSION=1.14.0
|
|
PGBOUNCER_DOWNLOAD_SHA256=a0c13d10148f557e36ff7ed31793abb7a49e1f8b09aa2d4695d1c28fa101fee7
|
|
;;
|
|
*) echo "Unknown pgbouncer version $1"; exit 1;
|
|
esac
|
|
|
|
printf -- "--build-arg PGBOUNCER_VERSION=%s " "$PGBOUNCER_VERSION"
|
|
printf -- "--build-arg PGBOUNCER_DOWNLOAD_SHA256=%s " "$PGBOUNCER_DOWNLOAD_SHA256"
|
|
}
|
|
|
|
function print_bazelisk_args() {
|
|
case "$1" in
|
|
1.9.0)
|
|
BAZELISK_VERSION=1.9.0
|
|
BAZELISK_DOWNLOAD_SHA256=b8c7f2a1b07ad64a2f27f8f19a202f90d044de7b5b6ccc387a6fe5d4a8ec4937
|
|
;;
|
|
*) echo "Unknown bazelisk version $1"; exit 1;
|
|
esac
|
|
|
|
printf -- "--build-arg BAZELISK_VERSION=%s " "$BAZELISK_VERSION"
|
|
printf -- "--build-arg BAZELISK_DOWNLOAD_SHA256=%s " "$BAZELISK_DOWNLOAD_SHA256"
|
|
}
|
|
|
|
function print_ruby_args() {
|
|
case "$1" in
|
|
2.6|2.6.*)
|
|
RUBY_VERSION="2.6.6"
|
|
RUBY_DOWNLOAD_SHA256="364b143def360bac1b74eb56ed60b1a0dca6439b00157ae11ff77d5cd2e92291"
|
|
;;
|
|
|
|
2.7|2.7.patched)
|
|
RUBY_VERSION="2.7.5"
|
|
RUBY_DOWNLOAD_SHA256="2755b900a21235b443bb16dadd9032f784d4a88f143d852bc5d154f22b8781f1"
|
|
;;
|
|
|
|
# Please update any clients still asking for these images to request `ruby-2.7` instead,
|
|
# which will provide the latest available patch level (see above.)
|
|
2.7.*)
|
|
RUBY_VERSION="2.7.2"
|
|
RUBY_DOWNLOAD_SHA256="6e5706d0d4ee4e1e2f883db9d768586b4d06567debea353c796ec45e8321c3d4"
|
|
;;
|
|
|
|
3.0|3.0.patched)
|
|
RUBY_VERSION="3.0.3"
|
|
RUBY_DOWNLOAD_SHA256="3586861cb2df56970287f0fd83f274bd92058872d830d15570b36def7f1a92ac"
|
|
;;
|
|
|
|
*) echo "Unknown ruby version $1"; exit 1;
|
|
esac
|
|
|
|
printf -- "--build-arg RUBY_VERSION=%s " "$RUBY_VERSION"
|
|
printf -- "--build-arg RUBY_DOWNLOAD_SHA256=%s " "$RUBY_DOWNLOAD_SHA256"
|
|
}
|
|
|
|
function parse_arguments() {
|
|
printf -- "-f Dockerfile.custom "
|
|
|
|
# defaults
|
|
CUSTOM_IMAGE_NAME=debian
|
|
CUSTOM_IMAGE_VERSION=buster
|
|
|
|
for tool in "${TOOLS[@]}"; do
|
|
if [ -n "${!tool}" ]; then
|
|
version="${!tool}"
|
|
case "$tool" in
|
|
DEBIAN) CUSTOM_IMAGE_VERSION=$version ;;
|
|
RUBY) print_ruby_args $version ;;
|
|
GOLANG) print_golang_args $version ;;
|
|
CHROME) print_chrome_args $version ;;
|
|
DOCKER) print_docker_args $version ;;
|
|
GIT) print_git_args $version ;;
|
|
LFS) print_lfs_args $version ;;
|
|
NODE) print_node_args $version ;;
|
|
YARN) print_yarn_args $version ;;
|
|
POSTGRESQL) print_postgres_args $version ;;
|
|
GRAPHICSMAGICK) print_graphicsmagick_args $version ;;
|
|
PGBOUNCER) print_pgbouncer_args $version ;;
|
|
BAZELISK) print_bazelisk_args $version ;;
|
|
*) echo "unknown tool $tool"; exit 1;;
|
|
esac
|
|
fi
|
|
done
|
|
|
|
printf -- "--build-arg CUSTOM_IMAGE_NAME=%s " "$CUSTOM_IMAGE_NAME"
|
|
printf -- "--build-arg CUSTOM_IMAGE_VERSION=%s " "$CUSTOM_IMAGE_VERSION"
|
|
printf -- "--build-arg DEBIAN_VERSION=%s " "$CUSTOM_IMAGE_VERSION"
|
|
}
|
|
|
|
function generate_command() {
|
|
printf -- "docker build "
|
|
parse_arguments
|
|
|
|
for i in "$@"
|
|
do
|
|
printf -- "%s " "$i"
|
|
done
|
|
printf -- ".\\n"
|
|
}
|
|
|
|
function build_custom_if_needed() {
|
|
build_image_name=$(get_image_name)
|
|
echo "Building image $build_image_name"
|
|
full_image_name="$CI_REGISTRY_IMAGE:$build_image_name"
|
|
|
|
# This re-uses and builds an existing image if needed
|
|
docker pull --quiet "$full_image" || true
|
|
docker_command=$(generate_command $@ --cache-from="$full_image_name" -t "$full_image_name")
|
|
echo "Docker command:"
|
|
printf "\t%s" "$docker_command"
|
|
eval $docker_command
|
|
printf "\n\nSUCCESS - Successfully built:\n\t%s" "$build_image_name"
|
|
}
|
|
|
|
build_custom_if_needed $@
|